/ src / components / jet / item / SmallStoryCardMediaBrandedSingleApp.svelte
SmallStoryCardMediaBrandedSingleApp.svelte
 1  <script lang="ts" context="module">
 2      import type {
 3          TodayCard,
 4          TodayCardMediaBrandedSingleApp,
 5      } from '@jet-app/app-store/api/models';
 6  
 7      export interface SmallStoryCardMediaBrandedSingleApp extends TodayCard {
 8          media: TodayCardMediaBrandedSingleApp;
 9      }
10  
11      export function isSmallStoryCardMediaBrandedSingleApp(
12          item: TodayCard,
13      ): item is SmallStoryCardMediaBrandedSingleApp {
14          return !!item.media && item.media.kind === 'brandedSingleApp';
15      }
16  </script>
17  
18  <script lang="ts">
19      import Artwork from '~/components/Artwork.svelte';
20      import HoverWrapper from '~/components/HoverWrapper.svelte';
21      import LinkWrapper from '~/components/LinkWrapper.svelte';
22  
23      export let item: SmallStoryCardMediaBrandedSingleApp;
24  
25      $: artwork = item.media.artworks?.[0] || item.media.icon;
26  </script>
27  
28  <article>
29      <LinkWrapper action={item.clickAction}>
30          <HoverWrapper element="div">
31              <Artwork {artwork} profile="brick" useCropCodeFromArtwork={false} />
32          </HoverWrapper>
33  
34          <div class="text-container">
35              <h4>{item.heading}</h4>
36              <h3>{item.title}</h3>
37              <p>{item.inlineDescription}</p>
38          </div>
39      </LinkWrapper>
40  </article>
41  
42  <style>
43      article {
44          aspect-ratio: 16/9;
45      }
46  
47      .text-container {
48          gap: 4px;
49          display: flex;
50          flex-direction: column;
51          margin-top: 8px;
52      }
53  
54      h3 {
55          font: var(--title-3);
56      }
57  
58      h4 {
59          margin-bottom: 2px;
60          font: var(--callout-emphasized);
61          color: var(--systemSecondary);
62      }
63  
64      p {
65          font: var(--body-tall);
66          color: var(--systemSecondary);
67          text-wrap: pretty;
68      }
69  </style>