aural-ui 4.0.1 → 4.2.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/README.md +8 -1
- package/dist/components/aspect-ratio/AspectRatio.stories.tsx +290 -1228
- package/dist/components/avatar/Avatar.stories.tsx +219 -235
- 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/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 -636
- 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 +530 -867
- package/dist/components/dialog/Dialog.stories.tsx +501 -950
- package/dist/components/divider/Divider.stories.tsx +264 -527
- package/dist/components/dot-loader/DotLoader.stories.tsx +256 -257
- package/dist/components/drawer/Drawer.stories.tsx +659 -1023
- package/dist/components/dropdown/Dropdown.stories.tsx +643 -1028
- 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 -1254
- 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 +484 -835
- package/dist/components/marquee/Marquee.stories.tsx +356 -712
- package/dist/components/otp-inputs/OtpInputs.stories.tsx +352 -422
- package/dist/components/overlay/Overlay.stories.tsx +452 -824
- package/dist/components/pagination/Pagination.stories.tsx +721 -210
- package/dist/components/popover/Popover.stories.tsx +481 -896
- package/dist/components/radio/Radio.stories.tsx +432 -124
- package/dist/components/resizable/Resizable.stories.tsx +495 -799
- package/dist/components/scroll-area/ScrollArea.stories.tsx +383 -1059
- package/dist/components/search/Search.stories.tsx +312 -595
- package/dist/components/select/Select.stories.tsx +684 -789
- package/dist/components/sheet/Sheet.stories.tsx +671 -950
- package/dist/components/skelton/Skelton.stories.tsx +230 -764
- package/dist/components/slider/Slider.stories.tsx +383 -760
- 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 -916
- package/dist/components/tabs/Tabs.stories.tsx +458 -1455
- 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 -154
- package/dist/components/toast/Toast.stories.tsx +452 -1339
- package/dist/components/toggle/Toggle.stories.tsx +488 -931
- package/dist/components/tooltip/Tooltip.stories.tsx +344 -1388
- 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 +223 -1060
- package/dist/icons/alert-icon/AlertIcon.stories.tsx +106 -968
- package/dist/icons/all-icons.tsx +37 -16
- package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +137 -1010
- package/dist/icons/apple-logo-icon/AppleLogoIcon.stories.tsx +145 -935
- package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +132 -1046
- package/dist/icons/arrow-corner-up-left-icon/ArrowCornerUpLeftIcon.stories.tsx +134 -986
- package/dist/icons/arrow-corner-up-right-icon/ArrowCornerUpRightIcon.stories.tsx +135 -1028
- package/dist/icons/arrow-left-icon/ArrowLeftIcon.stories.tsx +133 -971
- package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +145 -1123
- package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +143 -1252
- package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +123 -632
- package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +141 -1223
- package/dist/icons/backward-ten-seconds-icon/BackwardTenSecondsIcon.stories.tsx +164 -1018
- package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +121 -1236
- package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +121 -1213
- package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +116 -893
- package/dist/icons/camera-icon/CameraIcon.stories.tsx +109 -1254
- package/dist/icons/capital-a-letter-icon/CapitalALetterIcon.stories.tsx +114 -975
- package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +157 -994
- package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +160 -992
- package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +140 -970
- package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +126 -993
- package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +144 -987
- package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +141 -1007
- package/dist/icons/circle-tick-icon/CircleTickIcon.stories.tsx +147 -1187
- package/dist/icons/circular-play-icon/CircularPlayIcon.stories.tsx +110 -476
- package/dist/icons/coin-icon/CoinIcon.stories.tsx +120 -1364
- package/dist/icons/coin-toons-icon/CoinToonsIcon.stories.tsx +113 -1360
- package/dist/icons/column-wide-add-icon/ColumnWideAddIcon.stories.tsx +111 -942
- package/dist/icons/command-icon/CommandIcon.stories.tsx +124 -1087
- package/dist/icons/copy-icon/CopyIcon.stories.tsx +119 -996
- package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +144 -1046
- package/dist/icons/cross-icon/CrossIcon.stories.tsx +136 -999
- package/dist/icons/download-icon/DownloadIcon.stories.tsx +123 -857
- package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +121 -1080
- package/dist/icons/email-icon/EmailIcon.stories.tsx +112 -979
- package/dist/icons/expand-icon/ExpandIcon.stories.tsx +109 -1146
- package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +141 -1068
- package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +140 -1081
- package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +124 -1050
- package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +123 -1091
- package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +122 -633
- package/dist/icons/filter-bar-row-icon/FilterBarRowIcon.stories.tsx +116 -1087
- package/dist/icons/forward-ten-seconds-icon/ForwardTenSecondsIcon.stories.tsx +166 -1020
- package/dist/icons/git-branch-icon/GitBranchIcon.stories.tsx +112 -1182
- package/dist/icons/git-fork-icon/GitForkIcon.stories.tsx +112 -1155
- package/dist/icons/globe-icon/GlobeIcon.stories.tsx +127 -325
- package/dist/icons/google-logo-icon/GoogleLogoIcon.stories.tsx +142 -985
- package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +116 -1217
- package/dist/icons/head-icon/HeadIcon.stories.tsx +108 -953
- package/dist/icons/heart-icon/HeartIcon.stories.tsx +117 -1060
- package/dist/icons/image-avatar-sparkle-icon/ImageAvatarSparkleIcon.stories.tsx +116 -716
- package/dist/icons/image-icon/ImageIcon.stories.tsx +102 -1164
- package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +108 -1233
- package/dist/icons/import-left-arrow-folder-icon/ImportLeftArrowFolderIcon.stories.tsx +133 -1289
- package/dist/icons/indian-flag-icon/IndianFlagIcon.stories.tsx +155 -1012
- package/dist/icons/instagram-icon/InstagramIcon.stories.tsx +158 -1438
- package/dist/icons/layout-column-icon/LayoutColumnIcon.stories.tsx +121 -1011
- package/dist/icons/layout-left-icon/LayoutLeftIcon.stories.tsx +116 -981
- package/dist/icons/layout-right-icon/LayoutRightIcon.stories.tsx +116 -979
- package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +105 -1252
- package/dist/icons/linked-in-icon/LinkedInIcon.stories.tsx +151 -1554
- package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +107 -1227
- package/dist/icons/magic-edit-icon/MagicEditIcon.stories.tsx +116 -707
- package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +119 -1226
- package/dist/icons/message-icon/MessageIcon.stories.tsx +111 -557
- package/dist/icons/minimize-icon/MinimizeIcon.stories.tsx +112 -1198
- package/dist/icons/moon-icon/MoonIcon.stories.tsx +117 -557
- package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +106 -1235
- package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +112 -1185
- package/dist/icons/musical-note-icon/MusicalNoteIcon.stories.tsx +116 -1012
- package/dist/icons/notepad-icon/NotepadIcon.stories.tsx +108 -1137
- package/dist/icons/notes-icon/NotesIcon.stories.tsx +116 -1138
- package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +106 -1146
- package/dist/icons/page-text-icon/PageTextIcon.stories.tsx +119 -719
- package/dist/icons/paint-roll-icon/PaintRollIcon.stories.tsx +110 -999
- package/dist/icons/paper-plane-icon/PaperPlaneIcon.stories.tsx +109 -912
- package/dist/icons/pause-icon/PauseIcon.stories.tsx +110 -1041
- package/dist/icons/pencil-icon/PencilIcon.stories.tsx +112 -1109
- package/dist/icons/phone-icon/PhoneIcon.stories.tsx +112 -1023
- package/dist/icons/plus-icon/PlusIcon.stories.tsx +103 -1132
- package/dist/icons/pocket-studio-icon/PocketStudioIcon.stories.tsx +104 -870
- package/dist/icons/scroll-down-icon/ScrollDownIcon.stories.tsx +99 -476
- package/dist/icons/search-icon/SearchIcon.stories.tsx +108 -1161
- package/dist/icons/setting-icon/SettingIcon.stories.tsx +104 -1009
- package/dist/icons/share-icon/ShareIcon.stories.tsx +117 -1064
- package/dist/icons/shield-icon/ShieldIcon.stories.tsx +114 -974
- package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +134 -1160
- package/dist/icons/skip-backward-icon/SkipBackwardIcon.stories.tsx +169 -1017
- package/dist/icons/skip-forward-icon/SkipForwardIcon.stories.tsx +161 -1016
- package/dist/icons/sparkles-soft-icon/SparklesSoftIcon.stories.tsx +102 -1001
- package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +155 -593
- package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +155 -608
- package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +142 -712
- package/dist/icons/star-icon/StarIcon.stories.tsx +120 -946
- package/dist/icons/store-coin-icon/StoreCoinIcon.stories.tsx +109 -1013
- package/dist/icons/suggestion-icon/SuggestionIcon.stories.tsx +113 -891
- package/dist/icons/sun-icon/SunIcon.stories.tsx +117 -864
- package/dist/icons/text-color-icon/TextColorIcon.stories.tsx +113 -989
- package/dist/icons/text-indicator-icon/TextIndicatorIcon.stories.tsx +120 -1027
- package/dist/icons/threads-icon/ThreadsIcon.stories.tsx +153 -1476
- package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +143 -1187
- package/dist/icons/tick-icon/TickIcon.stories.tsx +142 -1322
- package/dist/icons/trash-icon/TrashIcon.stories.tsx +105 -970
- package/dist/icons/twitter-x-icon/TwitterXIcon.stories.tsx +154 -1457
- package/dist/icons/upload-icon/UploadIcon.stories.tsx +112 -930
- package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +115 -1019
- package/dist/icons/video-play-list-icon/VideoPlaylistIcon.stories.tsx +122 -1092
- package/dist/icons/voice-playing-icon/VoicePlayingIcon.stories.tsx +120 -1401
- package/dist/icons/volume-full-icon/VolumeFullIcon.stories.tsx +107 -1212
- package/dist/icons/volume-half-icon/VolumeHalfIcon.stories.tsx +109 -1122
- package/dist/icons/volume-off-icon/VolumeOffIcon.stories.tsx +112 -1124
- package/dist/icons/warning-icon/WarningIcon.stories.tsx +119 -1083
- package/dist/icons/youtube-icon/YoutubeIcon.stories.tsx +158 -983
- package/dist/index.cjs +90 -90
- package/dist/index.js +90 -90
- package/package.json +8 -3
|
@@ -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,212 +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 text-fm-primary font-semibold">
|
|
115
|
-
Promotional Tag
|
|
116
|
-
</h3>
|
|
117
|
-
<div className="flex gap-4">
|
|
118
|
-
<ThumbnailTags variant="promotional" text="30% off" />
|
|
119
|
-
<ThumbnailTags variant="promotional" text="NEW" />
|
|
120
|
-
<ThumbnailTags variant="promotional" text="HOT" />
|
|
121
|
-
</div>
|
|
122
|
-
</div>
|
|
123
|
-
|
|
124
|
-
<div className="space-y-4">
|
|
125
|
-
<h3 className="text-fm-lg text-fm-primary font-semibold">
|
|
126
|
-
Checked Tag
|
|
127
|
-
</h3>
|
|
128
|
-
<div className="flex gap-4">
|
|
129
|
-
<ThumbnailTags variant="checked" />
|
|
130
|
-
<ThumbnailTags variant="checked" />
|
|
131
|
-
<ThumbnailTags variant="checked" />
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
|
|
98
|
+
<div className="space-y-8">
|
|
135
99
|
<div className="space-y-4">
|
|
136
|
-
<
|
|
137
|
-
|
|
138
|
-
</
|
|
139
|
-
<div className="flex gap-4">
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
secondaryText="Views"
|
|
149
|
-
/>
|
|
150
|
-
<ThumbnailTags
|
|
151
|
-
variant="engagement"
|
|
152
|
-
primaryText="50M+"
|
|
153
|
-
secondaryText="Hits"
|
|
154
|
-
/>
|
|
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
|
+
))}
|
|
155
112
|
</div>
|
|
156
113
|
</div>
|
|
157
114
|
|
|
158
115
|
<div className="space-y-4">
|
|
159
|
-
<
|
|
160
|
-
|
|
161
|
-
|
|
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
|
+
))}
|
|
162
136
|
</div>
|
|
163
137
|
</div>
|
|
164
138
|
|
|
165
139
|
<div className="space-y-4">
|
|
166
|
-
<
|
|
167
|
-
|
|
168
|
-
</
|
|
169
|
-
<div className="flex gap-4">
|
|
170
|
-
|
|
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
|
+
))}
|
|
171
152
|
</div>
|
|
172
153
|
</div>
|
|
173
154
|
|
|
174
155
|
<div className="space-y-4">
|
|
175
|
-
<
|
|
176
|
-
|
|
177
|
-
|
|
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>
|
|
178
178
|
</div>
|
|
179
179
|
</div>
|
|
180
180
|
</div>
|
|
181
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
|
+
},
|
|
182
191
|
}
|
|
183
192
|
|
|
184
|
-
//
|
|
193
|
+
// ─── 3. Use Cases ─────────────────────────────────────────────────────────────
|
|
194
|
+
|
|
185
195
|
export const UseCases: Story = {
|
|
186
|
-
args: {
|
|
187
|
-
...Default.args,
|
|
188
|
-
},
|
|
189
196
|
render: () => (
|
|
190
|
-
<div className="space-y-8">
|
|
197
|
+
<div className="mx-auto max-w-3xl space-y-8 p-8">
|
|
198
|
+
{/* Media card grid */}
|
|
191
199
|
<div className="space-y-4">
|
|
192
|
-
<
|
|
193
|
-
|
|
194
|
-
</
|
|
195
|
-
<div className="
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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
|
+
))}
|
|
199
258
|
</div>
|
|
200
259
|
</div>
|
|
201
260
|
|
|
261
|
+
{/* Engagement metrics row */}
|
|
202
262
|
<div className="space-y-4">
|
|
203
|
-
<
|
|
204
|
-
Status Indicators
|
|
205
|
-
</h3>
|
|
206
|
-
<div className="flex gap-4">
|
|
207
|
-
<ThumbnailTags variant="checked" />
|
|
208
|
-
</div>
|
|
209
|
-
</div>
|
|
210
|
-
|
|
211
|
-
<div className="space-y-4">
|
|
212
|
-
<h3 className="text-fm-lg text-fm-primary font-semibold">
|
|
263
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
213
264
|
Engagement Metrics
|
|
214
|
-
</
|
|
215
|
-
<div className="
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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
|
+
))}
|
|
231
295
|
</div>
|
|
232
296
|
</div>
|
|
233
297
|
|
|
298
|
+
{/* Promotional pricing row */}
|
|
234
299
|
<div className="space-y-4">
|
|
235
|
-
<
|
|
236
|
-
|
|
237
|
-
</
|
|
238
|
-
<div className="flex gap-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
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
|
+
))}
|
|
242
307
|
</div>
|
|
243
308
|
</div>
|
|
244
309
|
</div>
|
|
245
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
|
+
},
|
|
246
320
|
}
|