aural-ui 3.0.7 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/aspect-ratio/AspectRatio.stories.tsx +290 -1199
- package/dist/components/avatar/Avatar.stories.tsx +235 -237
- package/dist/components/badge/Badge.stories.tsx +379 -116
- package/dist/components/banner/Banner.stories.tsx +445 -391
- package/dist/components/breadcrumb/Breadcrumb.stories.tsx +453 -199
- package/dist/components/button/Button.stories.tsx +585 -230
- package/dist/components/button/index.tsx +7 -7
- package/dist/components/card/Card.stories.tsx +619 -301
- package/dist/components/char-count/CharCount.stories.tsx +350 -248
- package/dist/components/checkbox/Checkbox.stories.tsx +309 -167
- package/dist/components/chip/Chip.stories.tsx +362 -168
- package/dist/components/circular-loader/CircularLoader.stories.tsx +221 -620
- package/dist/components/clamp-lines/ClampLines.stories.tsx +246 -117
- package/dist/components/collapsible/Collapsible.stories.tsx +391 -252
- package/dist/components/command/Command.stories.tsx +533 -856
- package/dist/components/dialog/Dialog.stories.tsx +505 -949
- package/dist/components/divider/Divider.stories.tsx +265 -502
- package/dist/components/dot-loader/DotLoader.stories.tsx +256 -257
- package/dist/components/drawer/Drawer.stories.tsx +659 -993
- package/dist/components/drawer/index.tsx +3 -3
- package/dist/components/dropdown/Dropdown.stories.tsx +643 -1018
- package/dist/components/form/Form.stories.tsx +560 -274
- package/dist/components/helper-text/HelperText.stories.tsx +199 -200
- package/dist/components/hover-card/HoverCard.stories.tsx +318 -1221
- package/dist/components/icon-button/IconButton.stories.tsx +837 -194
- package/dist/components/if-else/if-else.stories.tsx +370 -83
- package/dist/components/input/Input.stories.tsx +436 -368
- package/dist/components/label/Label.stories.tsx +156 -154
- package/dist/components/list/List.stories.tsx +485 -822
- package/dist/components/marquee/Marquee.stories.tsx +356 -694
- package/dist/components/otp-inputs/OtpInputs.stories.tsx +352 -410
- package/dist/components/overlay/Overlay.stories.tsx +452 -818
- package/dist/components/overlay/index.tsx +4 -4
- package/dist/components/pagination/Pagination.stories.tsx +721 -210
- package/dist/components/popover/Popover.stories.tsx +484 -873
- package/dist/components/radio/Radio.stories.tsx +432 -124
- package/dist/components/resizable/Resizable.stories.tsx +496 -752
- package/dist/components/scroll-area/ScrollArea.stories.tsx +384 -1006
- package/dist/components/search/Search.stories.tsx +314 -575
- package/dist/components/select/Select.stories.tsx +684 -787
- package/dist/components/sheet/Sheet.stories.tsx +671 -936
- package/dist/components/skelton/Skelton.stories.tsx +230 -764
- package/dist/components/slider/Slider.stories.tsx +384 -737
- package/dist/components/stepper/Stepper.stories.tsx +371 -514
- package/dist/components/switch/Switch.stories.tsx +461 -208
- package/dist/components/switch-case/SwitchCase.stories.tsx +367 -188
- package/dist/components/table/Table.stories.tsx +770 -914
- package/dist/components/tabs/Tabs.stories.tsx +459 -1400
- package/dist/components/tag/Tag.stories.tsx +714 -542
- package/dist/components/textarea/TextArea.stories.tsx +621 -562
- package/dist/components/thumbnail-tags/ThumbnailTags.stories.tsx +228 -148
- package/dist/components/toast/Toast.stories.tsx +452 -1333
- package/dist/components/toggle/Toggle.stories.tsx +488 -909
- package/dist/components/tooltip/Tooltip.stories.tsx +344 -1372
- package/dist/components/typography/Typography.stories.tsx +406 -89
- package/dist/hooks/use-change-state/UseChangeState.stories.tsx +309 -606
- package/dist/hooks/use-previous/UsePrevious.stories.tsx +367 -917
- package/dist/hooks/use-standalone-pagination/UseStandalonePagination.stories.tsx +639 -867
- package/dist/icons/Icons.stories.tsx +0 -12
- package/dist/icons/ai-avatar-icon/AiAvatarIcon.stories.tsx +226 -1013
- package/dist/icons/alert-icon/AlertIcon.stories.tsx +109 -929
- package/dist/icons/all-icons.tsx +124 -87
- package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +140 -971
- package/dist/icons/apple-logo-icon/AppleLogoIcon.stories.tsx +148 -888
- package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +135 -1019
- package/dist/icons/arrow-corner-up-left-icon/ArrowCornerUpLeftIcon.stories.tsx +137 -953
- package/dist/icons/arrow-corner-up-right-icon/ArrowCornerUpRightIcon.stories.tsx +138 -997
- package/dist/icons/arrow-left-icon/ArrowLeftIcon.stories.tsx +136 -942
- package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +148 -1092
- package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +146 -1211
- package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +126 -615
- package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +144 -1164
- package/dist/icons/backward-ten-seconds-icon/BackwardTenSecondsIcon.stories.tsx +167 -985
- package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +122 -1179
- package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +124 -1168
- package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +119 -850
- package/dist/icons/camera-icon/CameraIcon.stories.tsx +112 -1213
- package/dist/icons/capital-a-letter-icon/CapitalALetterIcon.stories.tsx +117 -934
- package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +160 -961
- package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +163 -961
- package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +144 -942
- package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +129 -966
- package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +147 -964
- package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +145 -975
- package/dist/icons/circle-tick-icon/CircleTickIcon.stories.tsx +150 -1142
- package/dist/icons/circular-play-icon/CircularPlayIcon.stories.tsx +114 -461
- package/dist/icons/coin-icon/CoinIcon.stories.tsx +124 -1322
- package/dist/icons/coin-toons-icon/CoinToonsIcon.stories.tsx +117 -1318
- package/dist/icons/column-wide-add-icon/ColumnWideAddIcon.stories.tsx +114 -903
- package/dist/icons/command-icon/CommandIcon.stories.tsx +127 -1042
- package/dist/icons/copy-icon/CopyIcon.stories.tsx +123 -962
- package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +147 -999
- package/dist/icons/cross-icon/CrossIcon.stories.tsx +139 -960
- package/dist/icons/download-icon/DownloadIcon.stories.tsx +126 -820
- package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +124 -1031
- package/dist/icons/email-icon/EmailIcon.stories.tsx +115 -936
- package/dist/icons/expand-icon/ExpandIcon.stories.tsx +112 -1111
- package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +144 -1025
- package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +143 -1036
- package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +127 -1011
- package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +126 -1056
- package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +125 -614
- package/dist/icons/filter-bar-row-icon/FilterBarRowIcon.stories.tsx +119 -1050
- package/dist/icons/forward-ten-seconds-icon/ForwardTenSecondsIcon.stories.tsx +169 -989
- package/dist/icons/git-branch-icon/GitBranchIcon.stories.tsx +115 -1145
- package/dist/icons/git-fork-icon/GitForkIcon.stories.tsx +115 -1122
- package/dist/icons/globe-icon/GlobeIcon.stories.tsx +130 -313
- package/dist/icons/google-logo-icon/GoogleLogoIcon.stories.tsx +145 -940
- package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +119 -1174
- package/dist/icons/head-icon/HeadIcon.stories.tsx +111 -916
- package/dist/icons/heart-icon/HeartIcon.stories.tsx +120 -1019
- package/dist/icons/image-avatar-sparkle-icon/ImageAvatarSparkleIcon.stories.tsx +119 -683
- package/dist/icons/image-icon/ImageIcon.stories.tsx +105 -1121
- package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +111 -1192
- package/dist/icons/import-left-arrow-folder-icon/ImportLeftArrowFolderIcon.stories.tsx +136 -1256
- package/dist/icons/indian-flag-icon/IndianFlagIcon.stories.tsx +159 -962
- package/dist/icons/instagram-icon/InstagramIcon.stories.tsx +161 -1385
- package/dist/icons/layout-column-icon/LayoutColumnIcon.stories.tsx +124 -972
- package/dist/icons/layout-left-icon/LayoutLeftIcon.stories.tsx +119 -948
- package/dist/icons/layout-right-icon/LayoutRightIcon.stories.tsx +119 -942
- package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +108 -1215
- package/dist/icons/linked-in-icon/LinkedInIcon.stories.tsx +154 -1517
- package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +110 -1188
- package/dist/icons/magic-edit-icon/MagicEditIcon.stories.tsx +119 -678
- package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +123 -1184
- package/dist/icons/message-icon/MessageIcon.stories.tsx +114 -538
- package/dist/icons/minimize-icon/MinimizeIcon.stories.tsx +116 -1158
- package/dist/icons/moon-icon/MoonIcon.stories.tsx +120 -536
- package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +109 -1184
- package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +115 -1134
- package/dist/icons/musical-note-icon/MusicalNoteIcon.stories.tsx +119 -971
- package/dist/icons/notepad-icon/NotepadIcon.stories.tsx +111 -1100
- package/dist/icons/notes-icon/NotesIcon.stories.tsx +119 -1101
- package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +109 -1111
- package/dist/icons/page-text-icon/PageTextIcon.stories.tsx +122 -684
- package/dist/icons/paint-roll-icon/PaintRollIcon.stories.tsx +113 -954
- package/dist/icons/paper-plane-icon/PaperPlaneIcon.stories.tsx +112 -877
- package/dist/icons/pause-icon/PauseIcon.stories.tsx +113 -1000
- package/dist/icons/pencil-icon/PencilIcon.stories.tsx +115 -1070
- package/dist/icons/phone-icon/PhoneIcon.stories.tsx +115 -978
- package/dist/icons/plus-icon/PlusIcon.stories.tsx +106 -1093
- package/dist/icons/pocket-studio-icon/PocketStudioIcon.stories.tsx +107 -829
- package/dist/icons/scroll-down-icon/ScrollDownIcon.stories.tsx +102 -469
- package/dist/icons/search-icon/SearchIcon.stories.tsx +111 -1124
- package/dist/icons/setting-icon/SettingIcon.stories.tsx +107 -970
- package/dist/icons/share-icon/ShareIcon.stories.tsx +120 -1025
- package/dist/icons/shield-icon/ShieldIcon.stories.tsx +117 -931
- package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +137 -1104
- package/dist/icons/skip-backward-icon/SkipBackwardIcon.stories.tsx +172 -982
- package/dist/icons/skip-forward-icon/SkipForwardIcon.stories.tsx +164 -983
- package/dist/icons/sparkles-soft-icon/SparklesSoftIcon.stories.tsx +105 -958
- package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +158 -580
- package/dist/icons/spinner-gradient-icon/index.tsx +6 -1
- package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +158 -587
- package/dist/icons/spinner-solid-icon/index.tsx +6 -1
- package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +146 -682
- package/dist/icons/spinner-solid-neutral-icon/index.tsx +1 -1
- package/dist/icons/star-icon/StarIcon.stories.tsx +124 -904
- package/dist/icons/store-coin-icon/StoreCoinIcon.stories.tsx +112 -964
- package/dist/icons/suggestion-icon/SuggestionIcon.stories.tsx +116 -852
- package/dist/icons/sun-icon/SunIcon.stories.tsx +120 -831
- package/dist/icons/text-color-icon/TextColorIcon.stories.tsx +116 -950
- package/dist/icons/text-indicator-icon/TextIndicatorIcon.stories.tsx +123 -980
- package/dist/icons/threads-icon/ThreadsIcon.stories.tsx +156 -1427
- package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +146 -1142
- package/dist/icons/tick-icon/TickIcon.stories.tsx +145 -1276
- package/dist/icons/trash-icon/TrashIcon.stories.tsx +108 -933
- package/dist/icons/twitter-x-icon/TwitterXIcon.stories.tsx +157 -1402
- package/dist/icons/upload-icon/UploadIcon.stories.tsx +115 -889
- package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +118 -984
- package/dist/icons/video-play-list-icon/VideoPlaylistIcon.stories.tsx +125 -1049
- package/dist/icons/voice-playing-icon/VoicePlayingIcon.stories.tsx +123 -1356
- package/dist/icons/volume-full-icon/VolumeFullIcon.stories.tsx +110 -1171
- package/dist/icons/volume-half-icon/VolumeHalfIcon.stories.tsx +112 -1093
- package/dist/icons/volume-off-icon/VolumeOffIcon.stories.tsx +115 -1087
- package/dist/icons/warning-icon/WarningIcon.stories.tsx +122 -1046
- package/dist/icons/youtube-icon/YoutubeIcon.stories.tsx +161 -936
- package/dist/index.cjs +84 -84
- package/dist/index.js +84 -84
- package/dist/styles/aural-all-theme.css +1222 -0
- package/dist/styles/{aural-theme.css → aural-dark-theme.css} +15 -3
- package/dist/styles/aural-light-theme.css +1047 -0
- package/package.json +1 -1
|
@@ -1,21 +1,38 @@
|
|
|
1
1
|
import React from "react"
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-vite"
|
|
3
3
|
|
|
4
|
-
import
|
|
4
|
+
import { AuralComponentDocsPage } from "src/ui/story-spec/components/component-story-docs-page"
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
import ThumbnailTags from "."
|
|
7
7
|
|
|
8
8
|
const meta: Meta<typeof ThumbnailTags> = {
|
|
9
9
|
title: "Components/UI/ThumbnailTags",
|
|
10
10
|
component: ThumbnailTags,
|
|
11
11
|
parameters: {
|
|
12
12
|
layout: "centered",
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
docs: {
|
|
14
|
+
description: {
|
|
15
|
+
component:
|
|
16
|
+
"Thumbnail overlay badges designed to be placed on media cards. Six variants cover promotional pricing text, engagement metrics, content status (checked, completed-series), achievement markers (top10, ranked), each rendered as a purpose-built SVG or branded pill.",
|
|
17
|
+
},
|
|
18
|
+
page: () => (
|
|
19
|
+
<AuralComponentDocsPage
|
|
20
|
+
features={[
|
|
21
|
+
{
|
|
22
|
+
title: "6 Variants",
|
|
23
|
+
description: "Promo to ranked",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: "Media Card Overlays",
|
|
27
|
+
description: "Positioned on thumbnails",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
title: "SVG & Pill Styles",
|
|
31
|
+
description: "Purpose-built graphics",
|
|
32
|
+
},
|
|
33
|
+
]}
|
|
34
|
+
/>
|
|
35
|
+
),
|
|
19
36
|
},
|
|
20
37
|
},
|
|
21
38
|
tags: ["autodocs"],
|
|
@@ -35,206 +52,269 @@ const meta: Meta<typeof ThumbnailTags> = {
|
|
|
35
52
|
},
|
|
36
53
|
text: {
|
|
37
54
|
control: "text",
|
|
38
|
-
description:
|
|
55
|
+
description:
|
|
56
|
+
"Main text content — used by the promotional and ranked variants",
|
|
39
57
|
},
|
|
40
58
|
primaryText: {
|
|
41
59
|
control: "text",
|
|
42
|
-
description: "
|
|
60
|
+
description: "Primary metric text — used by the engagement variant",
|
|
43
61
|
},
|
|
44
62
|
secondaryText: {
|
|
45
63
|
control: "text",
|
|
46
|
-
description: "
|
|
64
|
+
description: "Secondary label text — used by the engagement variant",
|
|
47
65
|
},
|
|
48
66
|
classNames: {
|
|
49
67
|
control: "object",
|
|
50
68
|
description:
|
|
51
|
-
"Custom CSS classes for
|
|
69
|
+
"Custom CSS classes for inner elements (container, text, primaryText, secondaryText, svg)",
|
|
52
70
|
},
|
|
53
71
|
},
|
|
54
72
|
}
|
|
55
73
|
|
|
56
74
|
export default meta
|
|
57
|
-
type Story = StoryObj<
|
|
58
|
-
|
|
59
|
-
export const Default: Story = {
|
|
60
|
-
args: {
|
|
61
|
-
variant: "promotional",
|
|
62
|
-
text: "30% off",
|
|
63
|
-
},
|
|
64
|
-
}
|
|
75
|
+
type Story = StoryObj<typeof ThumbnailTags>
|
|
65
76
|
|
|
66
|
-
|
|
67
|
-
args: {
|
|
68
|
-
variant: "ranked",
|
|
69
|
-
text: "#1 in hindi",
|
|
70
|
-
},
|
|
71
|
-
}
|
|
77
|
+
// ─── 1. Playground ────────────────────────────────────────────────────────────
|
|
72
78
|
|
|
73
|
-
export const
|
|
79
|
+
export const Playground: Story = {
|
|
74
80
|
args: {
|
|
75
81
|
variant: "promotional",
|
|
76
82
|
text: "30% off",
|
|
77
83
|
},
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
export const EngagementTag: Story = {
|
|
87
|
-
args: {
|
|
88
|
-
variant: "engagement",
|
|
89
|
-
primaryText: "999M+",
|
|
90
|
-
secondaryText: "Plays",
|
|
91
|
-
},
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
export const TopTenTag: Story = {
|
|
95
|
-
args: {
|
|
96
|
-
variant: "top10",
|
|
84
|
+
parameters: {
|
|
85
|
+
docs: {
|
|
86
|
+
description: {
|
|
87
|
+
story:
|
|
88
|
+
"Select a variant in the controls panel to explore each thumbnail tag style. Note: text applies to promotional and ranked; primaryText/secondaryText apply to engagement.",
|
|
89
|
+
},
|
|
90
|
+
},
|
|
97
91
|
},
|
|
98
92
|
}
|
|
99
93
|
|
|
100
|
-
|
|
101
|
-
args: {
|
|
102
|
-
variant: "completed-series",
|
|
103
|
-
},
|
|
104
|
-
}
|
|
94
|
+
// ─── 2. All Variants ──────────────────────────────────────────────────────────
|
|
105
95
|
|
|
106
|
-
// Collection showing all variants
|
|
107
96
|
export const AllVariants: Story = {
|
|
108
|
-
args: {
|
|
109
|
-
...Default.args,
|
|
110
|
-
},
|
|
111
97
|
render: () => (
|
|
112
|
-
<div className="
|
|
113
|
-
<div className="space-y-4">
|
|
114
|
-
<h3 className="text-fm-lg font-semibold text-white">Promotional Tag</h3>
|
|
115
|
-
<div className="flex gap-4">
|
|
116
|
-
<ThumbnailTags variant="promotional" text="30% off" />
|
|
117
|
-
<ThumbnailTags variant="promotional" text="NEW" />
|
|
118
|
-
<ThumbnailTags variant="promotional" text="HOT" />
|
|
119
|
-
</div>
|
|
120
|
-
</div>
|
|
121
|
-
|
|
122
|
-
<div className="space-y-4">
|
|
123
|
-
<h3 className="text-fm-lg font-semibold text-white">Checked Tag</h3>
|
|
124
|
-
<div className="flex gap-4">
|
|
125
|
-
<ThumbnailTags variant="checked" />
|
|
126
|
-
<ThumbnailTags variant="checked" />
|
|
127
|
-
<ThumbnailTags variant="checked" />
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
|
|
98
|
+
<div className="space-y-8">
|
|
131
99
|
<div className="space-y-4">
|
|
132
|
-
<
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
<ThumbnailTags
|
|
145
|
-
variant="engagement"
|
|
146
|
-
primaryText="50M+"
|
|
147
|
-
secondaryText="Hits"
|
|
148
|
-
/>
|
|
100
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
101
|
+
Promotional
|
|
102
|
+
</h4>
|
|
103
|
+
<div className="flex flex-wrap items-center gap-4">
|
|
104
|
+
{["30% off", "NEW", "HOT", "FREE", "LIMITED"].map((text) => (
|
|
105
|
+
<div key={text} className="space-y-2 text-center">
|
|
106
|
+
<ThumbnailTags variant="promotional" text={text} />
|
|
107
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
108
|
+
{text}
|
|
109
|
+
</p>
|
|
110
|
+
</div>
|
|
111
|
+
))}
|
|
149
112
|
</div>
|
|
150
113
|
</div>
|
|
151
114
|
|
|
152
115
|
<div className="space-y-4">
|
|
153
|
-
<
|
|
154
|
-
|
|
155
|
-
|
|
116
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
117
|
+
Engagement
|
|
118
|
+
</h4>
|
|
119
|
+
<div className="flex flex-wrap items-center gap-4">
|
|
120
|
+
{[
|
|
121
|
+
{ primaryText: "999M+", secondaryText: "Plays" },
|
|
122
|
+
{ primaryText: "1.2K", secondaryText: "Views" },
|
|
123
|
+
{ primaryText: "50M+", secondaryText: "Hits" },
|
|
124
|
+
].map(({ primaryText, secondaryText }) => (
|
|
125
|
+
<div key={primaryText} className="space-y-2 text-center">
|
|
126
|
+
<ThumbnailTags
|
|
127
|
+
variant="engagement"
|
|
128
|
+
primaryText={primaryText}
|
|
129
|
+
secondaryText={secondaryText}
|
|
130
|
+
/>
|
|
131
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
132
|
+
{primaryText} {secondaryText}
|
|
133
|
+
</p>
|
|
134
|
+
</div>
|
|
135
|
+
))}
|
|
156
136
|
</div>
|
|
157
137
|
</div>
|
|
158
138
|
|
|
159
139
|
<div className="space-y-4">
|
|
160
|
-
<
|
|
161
|
-
|
|
162
|
-
</
|
|
163
|
-
<div className="flex gap-4">
|
|
164
|
-
|
|
140
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
141
|
+
Ranked
|
|
142
|
+
</h4>
|
|
143
|
+
<div className="flex flex-wrap items-center gap-4">
|
|
144
|
+
{["#1 in hindi", "#2 show", "#1 podcast"].map((text) => (
|
|
145
|
+
<div key={text} className="space-y-2 text-center">
|
|
146
|
+
<ThumbnailTags variant="ranked" text={text} />
|
|
147
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
148
|
+
{text}
|
|
149
|
+
</p>
|
|
150
|
+
</div>
|
|
151
|
+
))}
|
|
165
152
|
</div>
|
|
166
153
|
</div>
|
|
167
154
|
|
|
168
155
|
<div className="space-y-4">
|
|
169
|
-
<
|
|
170
|
-
|
|
171
|
-
|
|
156
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
157
|
+
Status & Achievement
|
|
158
|
+
</h4>
|
|
159
|
+
<div className="flex flex-wrap items-center gap-6">
|
|
160
|
+
<div className="space-y-2 text-center">
|
|
161
|
+
<ThumbnailTags variant="checked" />
|
|
162
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
163
|
+
checked
|
|
164
|
+
</p>
|
|
165
|
+
</div>
|
|
166
|
+
<div className="space-y-2 text-center">
|
|
167
|
+
<ThumbnailTags variant="top10" />
|
|
168
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
169
|
+
top10
|
|
170
|
+
</p>
|
|
171
|
+
</div>
|
|
172
|
+
<div className="space-y-2 text-center">
|
|
173
|
+
<ThumbnailTags variant="completed-series" />
|
|
174
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
175
|
+
completed-series
|
|
176
|
+
</p>
|
|
177
|
+
</div>
|
|
172
178
|
</div>
|
|
173
179
|
</div>
|
|
174
180
|
</div>
|
|
175
181
|
),
|
|
182
|
+
parameters: {
|
|
183
|
+
layout: "padded",
|
|
184
|
+
docs: {
|
|
185
|
+
description: {
|
|
186
|
+
story:
|
|
187
|
+
"All six variants displayed: promotional pricing pills, engagement metric badges, ranked labels, and the status/achievement icons (checked, top10, completed-series).",
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
},
|
|
176
191
|
}
|
|
177
192
|
|
|
178
|
-
//
|
|
193
|
+
// ─── 3. Use Cases ─────────────────────────────────────────────────────────────
|
|
194
|
+
|
|
179
195
|
export const UseCases: Story = {
|
|
180
|
-
args: {
|
|
181
|
-
...Default.args,
|
|
182
|
-
},
|
|
183
196
|
render: () => (
|
|
184
|
-
<div className="space-y-8">
|
|
197
|
+
<div className="mx-auto max-w-3xl space-y-8 p-8">
|
|
198
|
+
{/* Media card grid */}
|
|
185
199
|
<div className="space-y-4">
|
|
186
|
-
<
|
|
187
|
-
|
|
188
|
-
</
|
|
189
|
-
<div className="
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
200
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
201
|
+
Media Cards
|
|
202
|
+
</h4>
|
|
203
|
+
<div className="grid grid-cols-2 gap-4 sm:grid-cols-3">
|
|
204
|
+
{[
|
|
205
|
+
{
|
|
206
|
+
title: "Midnight Dreams",
|
|
207
|
+
artist: "Luna Wave",
|
|
208
|
+
badge: <ThumbnailTags variant="promotional" text="NEW" />,
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
title: "Electric Sunrise",
|
|
212
|
+
artist: "Neon Pulse",
|
|
213
|
+
badge: (
|
|
214
|
+
<ThumbnailTags
|
|
215
|
+
variant="engagement"
|
|
216
|
+
primaryText="2.5M+"
|
|
217
|
+
secondaryText="Plays"
|
|
218
|
+
/>
|
|
219
|
+
),
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
title: "Top Hindi Hits",
|
|
223
|
+
artist: "Various Artists",
|
|
224
|
+
badge: <ThumbnailTags variant="ranked" text="#1 in hindi" />,
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
title: "Jazz Standards",
|
|
228
|
+
artist: "Dusk & Dawn",
|
|
229
|
+
badge: <ThumbnailTags variant="completed-series" />,
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
title: "Chill Vibes",
|
|
233
|
+
artist: "Mellow Gold",
|
|
234
|
+
badge: <ThumbnailTags variant="checked" />,
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
title: "Global Beats",
|
|
238
|
+
artist: "World Sounds",
|
|
239
|
+
badge: <ThumbnailTags variant="top10" />,
|
|
240
|
+
},
|
|
241
|
+
].map(({ title, artist, badge }) => (
|
|
242
|
+
<div
|
|
243
|
+
key={title}
|
|
244
|
+
className="border-fm-divider-secondary bg-fm-surface-secondary relative rounded-xl border p-4"
|
|
245
|
+
>
|
|
246
|
+
<div className="mb-3 flex items-start justify-between gap-2">
|
|
247
|
+
<div className="bg-fm-surface-tertiary h-14 w-14 shrink-0 rounded-lg" />
|
|
248
|
+
<div className="shrink-0">{badge}</div>
|
|
249
|
+
</div>
|
|
250
|
+
<p className="text-fm-primary font-fm-text text-fm-sm leading-fm-sm font-medium">
|
|
251
|
+
{title}
|
|
252
|
+
</p>
|
|
253
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm">
|
|
254
|
+
{artist}
|
|
255
|
+
</p>
|
|
256
|
+
</div>
|
|
257
|
+
))}
|
|
193
258
|
</div>
|
|
194
259
|
</div>
|
|
195
260
|
|
|
261
|
+
{/* Engagement metrics row */}
|
|
196
262
|
<div className="space-y-4">
|
|
197
|
-
<
|
|
198
|
-
Status Indicators
|
|
199
|
-
</h3>
|
|
200
|
-
<div className="flex gap-4">
|
|
201
|
-
<ThumbnailTags variant="checked" />
|
|
202
|
-
</div>
|
|
203
|
-
</div>
|
|
204
|
-
|
|
205
|
-
<div className="space-y-4">
|
|
206
|
-
<h3 className="text-fm-lg font-semibold text-white">
|
|
263
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
207
264
|
Engagement Metrics
|
|
208
|
-
</
|
|
209
|
-
<div className="
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
265
|
+
</h4>
|
|
266
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary space-y-3 rounded-xl border p-4">
|
|
267
|
+
{[
|
|
268
|
+
{
|
|
269
|
+
title: "Midnight Dreams",
|
|
270
|
+
primaryText: "2.5M+",
|
|
271
|
+
secondaryText: "Plays",
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
title: "Electric Sunrise",
|
|
275
|
+
primaryText: "150K",
|
|
276
|
+
secondaryText: "Likes",
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
title: "Chill Vibes",
|
|
280
|
+
primaryText: "25K",
|
|
281
|
+
secondaryText: "Shares",
|
|
282
|
+
},
|
|
283
|
+
].map(({ title, primaryText, secondaryText }) => (
|
|
284
|
+
<div key={title} className="flex items-center justify-between">
|
|
285
|
+
<p className="text-fm-primary font-fm-text text-fm-sm leading-fm-sm font-medium">
|
|
286
|
+
{title}
|
|
287
|
+
</p>
|
|
288
|
+
<ThumbnailTags
|
|
289
|
+
variant="engagement"
|
|
290
|
+
primaryText={primaryText}
|
|
291
|
+
secondaryText={secondaryText}
|
|
292
|
+
/>
|
|
293
|
+
</div>
|
|
294
|
+
))}
|
|
225
295
|
</div>
|
|
226
296
|
</div>
|
|
227
297
|
|
|
298
|
+
{/* Promotional pricing row */}
|
|
228
299
|
<div className="space-y-4">
|
|
229
|
-
<
|
|
230
|
-
|
|
231
|
-
</
|
|
232
|
-
<div className="flex gap-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
300
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
301
|
+
Promotional Pricing
|
|
302
|
+
</h4>
|
|
303
|
+
<div className="flex flex-wrap gap-3">
|
|
304
|
+
{["30% off", "FREE", "LIMITED", "SALE"].map((text) => (
|
|
305
|
+
<ThumbnailTags key={text} variant="promotional" text={text} />
|
|
306
|
+
))}
|
|
236
307
|
</div>
|
|
237
308
|
</div>
|
|
238
309
|
</div>
|
|
239
310
|
),
|
|
311
|
+
parameters: {
|
|
312
|
+
layout: "fullscreen",
|
|
313
|
+
docs: {
|
|
314
|
+
description: {
|
|
315
|
+
story:
|
|
316
|
+
"Real product contexts: thumbnail badges on media cards, engagement metric rows, and promotional pricing strips. Shows how each variant overlays or accompanies content in a streaming UI.",
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
},
|
|
240
320
|
}
|