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,23 +1,56 @@
|
|
|
1
1
|
import React from "react"
|
|
2
|
+
import {
|
|
3
|
+
CircularPlayIcon,
|
|
4
|
+
HeartIcon,
|
|
5
|
+
SettingIcon,
|
|
6
|
+
SkipBackwardIcon,
|
|
7
|
+
SkipForwardIcon,
|
|
8
|
+
StarIcon,
|
|
9
|
+
} from "@icons/index"
|
|
2
10
|
import type { Meta, StoryObj } from "@storybook/react-vite"
|
|
3
11
|
|
|
12
|
+
import { AuralComponentDocsPage } from "src/ui/story-spec/components/component-story-docs-page"
|
|
13
|
+
|
|
4
14
|
import { Button } from "."
|
|
5
|
-
import { Tabs, TabsContent, TabsList, TabsTrigger } from "../tabs"
|
|
6
15
|
|
|
7
16
|
const meta: Meta<typeof Button> = {
|
|
8
17
|
title: "Components/UI/Button",
|
|
9
18
|
component: Button,
|
|
10
19
|
parameters: {
|
|
11
20
|
layout: "centered",
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
docs: {
|
|
22
|
+
description: {
|
|
23
|
+
component:
|
|
24
|
+
"A versatile button component with six visual variants (primary, secondary, outline, text, chip, chipActive), three sizes, optional noise texture, icon slots, and tooltip support. Built with CVA for composable, type-safe variant management.",
|
|
25
|
+
},
|
|
26
|
+
page: () => (
|
|
27
|
+
<AuralComponentDocsPage
|
|
28
|
+
features={[
|
|
29
|
+
{
|
|
30
|
+
title: "6 Visual Variants",
|
|
31
|
+
description: "From primary to chip",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
title: "Noise Texture",
|
|
35
|
+
description: "4 levels of grain",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
title: "Icon Slots & Tooltip",
|
|
39
|
+
description: "Left, right, tooltip",
|
|
40
|
+
},
|
|
41
|
+
]}
|
|
42
|
+
/>
|
|
43
|
+
),
|
|
18
44
|
},
|
|
19
45
|
},
|
|
20
46
|
tags: ["autodocs"],
|
|
47
|
+
args: {
|
|
48
|
+
variant: "primary",
|
|
49
|
+
size: "md",
|
|
50
|
+
noise: "medium",
|
|
51
|
+
isDisabled: false,
|
|
52
|
+
children: "Click me",
|
|
53
|
+
},
|
|
21
54
|
argTypes: {
|
|
22
55
|
variant: {
|
|
23
56
|
control: { type: "select" },
|
|
@@ -53,262 +86,584 @@ const meta: Meta<typeof Button> = {
|
|
|
53
86
|
export default meta
|
|
54
87
|
type Story = StoryObj<typeof Button>
|
|
55
88
|
|
|
56
|
-
|
|
89
|
+
// ─── 1. Playground ────────────────────────────────────────────────────────────
|
|
90
|
+
|
|
91
|
+
export const Playground: Story = {
|
|
57
92
|
args: {
|
|
58
93
|
variant: "primary",
|
|
59
|
-
children: "Primary Button",
|
|
60
94
|
size: "md",
|
|
61
95
|
noise: "medium",
|
|
96
|
+
isDisabled: false,
|
|
97
|
+
children: "Click me",
|
|
62
98
|
},
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
99
|
+
render: (args) => (
|
|
100
|
+
<div className="flex w-full max-w-sm flex-col items-center space-y-4">
|
|
101
|
+
<Button {...args} />
|
|
102
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary w-full rounded-lg border px-4 py-3">
|
|
103
|
+
<code className="text-fm-secondary text-fm-md leading-fm-md font-(--font-fm-mono)">{`<Button variant="${args.variant}" size="${args.size}" noise="${args.noise}"${args.isDisabled ? " isDisabled" : ""}>${args.children}</Button>`}</code>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
),
|
|
107
|
+
parameters: {
|
|
108
|
+
docs: {
|
|
109
|
+
description: {
|
|
110
|
+
story:
|
|
111
|
+
"Use the controls panel in the sidebar to explore all Button props. The code snippet below the button updates live to reflect the current configuration.",
|
|
112
|
+
},
|
|
113
|
+
},
|
|
71
114
|
},
|
|
72
115
|
}
|
|
73
116
|
|
|
74
|
-
|
|
75
|
-
args: {
|
|
76
|
-
variant: "outline",
|
|
77
|
-
children: "Outline Button",
|
|
78
|
-
size: "md",
|
|
79
|
-
noise: "none",
|
|
80
|
-
},
|
|
81
|
-
}
|
|
117
|
+
// ─── 2. All Variants ──────────────────────────────────────────────────────────
|
|
82
118
|
|
|
83
|
-
export const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
119
|
+
export const AllVariants: Story = {
|
|
120
|
+
render: () => (
|
|
121
|
+
<div className="space-y-8">
|
|
122
|
+
<div className="space-y-4">
|
|
123
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
124
|
+
Variants
|
|
125
|
+
</h4>
|
|
126
|
+
<div className="flex flex-wrap items-end gap-4">
|
|
127
|
+
<div className="space-y-2 text-center">
|
|
128
|
+
<Button variant="primary" noise="medium">
|
|
129
|
+
Primary
|
|
130
|
+
</Button>
|
|
131
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
132
|
+
Primary
|
|
133
|
+
</p>
|
|
134
|
+
</div>
|
|
135
|
+
<div className="space-y-2 text-center">
|
|
136
|
+
<Button variant="secondary">Secondary</Button>
|
|
137
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
138
|
+
Secondary
|
|
139
|
+
</p>
|
|
140
|
+
</div>
|
|
141
|
+
<div className="space-y-2 text-center">
|
|
142
|
+
<Button variant="outline" noise="none">
|
|
143
|
+
Outline
|
|
144
|
+
</Button>
|
|
145
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
146
|
+
Outline
|
|
147
|
+
</p>
|
|
148
|
+
</div>
|
|
149
|
+
<div className="space-y-2 text-center">
|
|
150
|
+
<Button variant="text" noise="none">
|
|
151
|
+
Text
|
|
152
|
+
</Button>
|
|
153
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
154
|
+
Text
|
|
155
|
+
</p>
|
|
156
|
+
</div>
|
|
157
|
+
<div className="space-y-2 text-center">
|
|
158
|
+
<Button variant="chip" noise="none">
|
|
159
|
+
Chip
|
|
160
|
+
</Button>
|
|
161
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
162
|
+
Chip
|
|
163
|
+
</p>
|
|
164
|
+
</div>
|
|
165
|
+
<div className="space-y-2 text-center">
|
|
166
|
+
<Button variant="chipActive" noise="medium">
|
|
167
|
+
Chip Active
|
|
168
|
+
</Button>
|
|
169
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
170
|
+
Chip Active
|
|
171
|
+
</p>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
91
175
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
176
|
+
<div className="space-y-4">
|
|
177
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
178
|
+
Sizes
|
|
179
|
+
</h4>
|
|
180
|
+
<div className="flex flex-wrap items-end gap-4">
|
|
181
|
+
<div className="space-y-2 text-center">
|
|
182
|
+
<Button variant="primary" size="sm" noise="medium">
|
|
183
|
+
Small
|
|
184
|
+
</Button>
|
|
185
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
186
|
+
Small (sm)
|
|
187
|
+
</p>
|
|
188
|
+
</div>
|
|
189
|
+
<div className="space-y-2 text-center">
|
|
190
|
+
<Button variant="primary" size="md" noise="medium">
|
|
191
|
+
Medium
|
|
192
|
+
</Button>
|
|
193
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
194
|
+
Medium (md)
|
|
195
|
+
</p>
|
|
196
|
+
</div>
|
|
197
|
+
<div className="space-y-2 text-center">
|
|
198
|
+
<Button variant="primary" size="lg" noise="medium">
|
|
199
|
+
Large
|
|
200
|
+
</Button>
|
|
201
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
202
|
+
Large (lg)
|
|
203
|
+
</p>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
99
207
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
208
|
+
<div className="space-y-4">
|
|
209
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
210
|
+
Noise Levels (Primary)
|
|
211
|
+
</h4>
|
|
212
|
+
<div className="flex flex-wrap items-end gap-4">
|
|
213
|
+
<div className="space-y-2 text-center">
|
|
214
|
+
<Button variant="primary" noise="none">
|
|
215
|
+
None
|
|
216
|
+
</Button>
|
|
217
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
218
|
+
None
|
|
219
|
+
</p>
|
|
220
|
+
</div>
|
|
221
|
+
<div className="space-y-2 text-center">
|
|
222
|
+
<Button variant="primary" noise="low">
|
|
223
|
+
Low
|
|
224
|
+
</Button>
|
|
225
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
226
|
+
Low
|
|
227
|
+
</p>
|
|
228
|
+
</div>
|
|
229
|
+
<div className="space-y-2 text-center">
|
|
230
|
+
<Button variant="primary" noise="medium">
|
|
231
|
+
Medium
|
|
232
|
+
</Button>
|
|
233
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
234
|
+
Medium
|
|
235
|
+
</p>
|
|
236
|
+
</div>
|
|
237
|
+
<div className="space-y-2 text-center">
|
|
238
|
+
<Button variant="primary" noise="strong">
|
|
239
|
+
Strong
|
|
240
|
+
</Button>
|
|
241
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
242
|
+
Strong
|
|
243
|
+
</p>
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
108
246
|
</div>
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
247
|
+
|
|
248
|
+
<div className="space-y-4">
|
|
249
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
250
|
+
Noise Levels (Secondary)
|
|
251
|
+
</h4>
|
|
252
|
+
<div className="flex flex-wrap items-end gap-4">
|
|
253
|
+
<div className="space-y-2 text-center">
|
|
254
|
+
<Button variant="secondary" noise="none">
|
|
255
|
+
None
|
|
256
|
+
</Button>
|
|
257
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
258
|
+
None
|
|
259
|
+
</p>
|
|
260
|
+
</div>
|
|
261
|
+
<div className="space-y-2 text-center">
|
|
262
|
+
<Button variant="secondary" noise="low">
|
|
263
|
+
Low
|
|
264
|
+
</Button>
|
|
265
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
266
|
+
Low
|
|
267
|
+
</p>
|
|
268
|
+
</div>
|
|
269
|
+
<div className="space-y-2 text-center">
|
|
270
|
+
<Button variant="secondary" noise="medium">
|
|
271
|
+
Medium
|
|
272
|
+
</Button>
|
|
273
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
274
|
+
Medium
|
|
275
|
+
</p>
|
|
276
|
+
</div>
|
|
277
|
+
<div className="space-y-2 text-center">
|
|
278
|
+
<Button variant="secondary" noise="strong">
|
|
279
|
+
Strong
|
|
280
|
+
</Button>
|
|
281
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
282
|
+
Strong
|
|
283
|
+
</p>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
122
286
|
</div>
|
|
123
|
-
</div>
|
|
124
|
-
),
|
|
125
|
-
}
|
|
126
287
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
<
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
</h3>
|
|
141
|
-
<div className="flex gap-4">
|
|
142
|
-
<Button variant="chip" noise="none">
|
|
143
|
-
No Noise
|
|
144
|
-
</Button>
|
|
145
|
-
<Button variant="chip" noise="low">
|
|
146
|
-
Low Noise
|
|
147
|
-
</Button>
|
|
148
|
-
<Button variant="chip" noise="medium">
|
|
149
|
-
Medium Noise
|
|
150
|
-
</Button>
|
|
151
|
-
<Button variant="chip" noise="strong">
|
|
152
|
-
Strong Noise
|
|
153
|
-
</Button>
|
|
154
|
-
</div>
|
|
288
|
+
<div className="space-y-4">
|
|
289
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
290
|
+
Chip — Noise Levels
|
|
291
|
+
</h4>
|
|
292
|
+
<div className="flex flex-wrap items-end gap-4">
|
|
293
|
+
{(["none", "low", "medium", "strong"] as const).map((noise) => (
|
|
294
|
+
<div key={noise} className="space-y-2 text-center">
|
|
295
|
+
<Button variant="chip" noise={noise}>
|
|
296
|
+
{noise.charAt(0).toUpperCase() + noise.slice(1)}
|
|
297
|
+
</Button>
|
|
298
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm capitalize">
|
|
299
|
+
{noise}
|
|
300
|
+
</p>
|
|
155
301
|
</div>
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
<h3 className="text-fm-primary text-lg font-semibold">
|
|
174
|
-
Disabled State
|
|
175
|
-
</h3>
|
|
176
|
-
<div className="flex gap-4">
|
|
177
|
-
<Button variant="chip" isDisabled>
|
|
178
|
-
Disabled Chip
|
|
179
|
-
</Button>
|
|
180
|
-
</div>
|
|
181
|
-
</div>
|
|
182
|
-
</div>
|
|
183
|
-
</TabsContent>
|
|
184
|
-
<TabsContent value="chipActive" className="mt-6">
|
|
185
|
-
<div className="flex flex-col gap-6">
|
|
186
|
-
<div className="flex flex-col gap-4">
|
|
187
|
-
<h3 className="text-fm-primary text-lg font-semibold">
|
|
188
|
-
Noise Variations
|
|
189
|
-
</h3>
|
|
190
|
-
<div className="flex gap-4">
|
|
191
|
-
<Button variant="chipActive" noise="none">
|
|
192
|
-
No Noise
|
|
193
|
-
</Button>
|
|
194
|
-
<Button variant="chipActive" noise="low">
|
|
195
|
-
Low Noise
|
|
196
|
-
</Button>
|
|
197
|
-
<Button variant="chipActive" noise="medium">
|
|
198
|
-
Medium Noise
|
|
199
|
-
</Button>
|
|
200
|
-
<Button variant="chipActive" noise="strong">
|
|
201
|
-
Strong Noise
|
|
202
|
-
</Button>
|
|
203
|
-
</div>
|
|
302
|
+
))}
|
|
303
|
+
</div>
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
<div className="space-y-4">
|
|
307
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
308
|
+
Chip Active — Noise Levels
|
|
309
|
+
</h4>
|
|
310
|
+
<div className="flex flex-wrap items-end gap-4">
|
|
311
|
+
{(["none", "low", "medium", "strong"] as const).map((noise) => (
|
|
312
|
+
<div key={noise} className="space-y-2 text-center">
|
|
313
|
+
<Button variant="chipActive" noise={noise}>
|
|
314
|
+
{noise.charAt(0).toUpperCase() + noise.slice(1)}
|
|
315
|
+
</Button>
|
|
316
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm capitalize">
|
|
317
|
+
{noise}
|
|
318
|
+
</p>
|
|
204
319
|
</div>
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
320
|
+
))}
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
|
|
324
|
+
<div className="space-y-4">
|
|
325
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
326
|
+
Chip vs Chip Active — Sizes
|
|
327
|
+
</h4>
|
|
328
|
+
<div className="flex flex-wrap items-end gap-6">
|
|
329
|
+
{(["sm", "md", "lg"] as const).map((size) => (
|
|
330
|
+
<div key={size} className="space-y-3">
|
|
331
|
+
<div className="space-y-2 text-center">
|
|
332
|
+
<Button variant="chip" size={size} noise="medium">
|
|
333
|
+
Chip
|
|
218
334
|
</Button>
|
|
335
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
336
|
+
chip · {size}
|
|
337
|
+
</p>
|
|
219
338
|
</div>
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
Disabled State
|
|
224
|
-
</h3>
|
|
225
|
-
<div className="flex gap-4">
|
|
226
|
-
<Button variant="chipActive" isDisabled>
|
|
227
|
-
Disabled Chip Active
|
|
339
|
+
<div className="space-y-2 text-center">
|
|
340
|
+
<Button variant="chipActive" size={size} noise="medium">
|
|
341
|
+
Chip Active
|
|
228
342
|
</Button>
|
|
343
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
344
|
+
chipActive · {size}
|
|
345
|
+
</p>
|
|
229
346
|
</div>
|
|
230
347
|
</div>
|
|
231
|
-
|
|
232
|
-
</
|
|
233
|
-
</
|
|
348
|
+
))}
|
|
349
|
+
</div>
|
|
350
|
+
</div>
|
|
234
351
|
</div>
|
|
235
352
|
),
|
|
353
|
+
parameters: {
|
|
354
|
+
docs: {
|
|
355
|
+
description: {
|
|
356
|
+
story:
|
|
357
|
+
"All six variants, three sizes, all four noise levels on primary and secondary, and a full chip/chipActive noise and size breakdown.",
|
|
358
|
+
},
|
|
359
|
+
},
|
|
360
|
+
},
|
|
236
361
|
}
|
|
237
362
|
|
|
238
|
-
|
|
363
|
+
// ─── 3. States ────────────────────────────────────────────────────────────────
|
|
364
|
+
|
|
365
|
+
export const States: Story = {
|
|
239
366
|
render: () => (
|
|
240
|
-
<div className="
|
|
241
|
-
<div className="
|
|
242
|
-
<
|
|
243
|
-
|
|
244
|
-
</
|
|
245
|
-
<
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
367
|
+
<div className="space-y-8">
|
|
368
|
+
<div className="space-y-4">
|
|
369
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
370
|
+
Disabled — All Variants
|
|
371
|
+
</h4>
|
|
372
|
+
<div className="flex flex-wrap items-end gap-4">
|
|
373
|
+
<div className="space-y-2 text-center">
|
|
374
|
+
<Button variant="primary" isDisabled>
|
|
375
|
+
Primary
|
|
376
|
+
</Button>
|
|
377
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
378
|
+
Primary
|
|
379
|
+
</p>
|
|
380
|
+
</div>
|
|
381
|
+
<div className="space-y-2 text-center">
|
|
382
|
+
<Button variant="secondary" isDisabled>
|
|
383
|
+
Secondary
|
|
384
|
+
</Button>
|
|
385
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
386
|
+
Secondary
|
|
387
|
+
</p>
|
|
388
|
+
</div>
|
|
389
|
+
<div className="space-y-2 text-center">
|
|
390
|
+
<Button variant="outline" isDisabled>
|
|
391
|
+
Outline
|
|
392
|
+
</Button>
|
|
393
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
394
|
+
Outline
|
|
395
|
+
</p>
|
|
396
|
+
</div>
|
|
397
|
+
<div className="space-y-2 text-center">
|
|
398
|
+
<Button variant="text" isDisabled>
|
|
399
|
+
Text
|
|
400
|
+
</Button>
|
|
401
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
402
|
+
Text
|
|
403
|
+
</p>
|
|
404
|
+
</div>
|
|
405
|
+
<div className="space-y-2 text-center">
|
|
406
|
+
<Button variant="chip" isDisabled>
|
|
407
|
+
Chip
|
|
408
|
+
</Button>
|
|
409
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
410
|
+
Chip
|
|
411
|
+
</p>
|
|
412
|
+
</div>
|
|
413
|
+
<div className="space-y-2 text-center">
|
|
414
|
+
<Button variant="chipActive" isDisabled>
|
|
415
|
+
Chip Active
|
|
416
|
+
</Button>
|
|
417
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
418
|
+
Chip Active
|
|
419
|
+
</p>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
256
422
|
</div>
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
423
|
+
|
|
424
|
+
<div className="space-y-4">
|
|
425
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
426
|
+
Disabled with Noise
|
|
427
|
+
</h4>
|
|
428
|
+
<div className="flex flex-wrap items-end gap-4">
|
|
429
|
+
<div className="space-y-2 text-center">
|
|
430
|
+
<Button variant="primary" noise="strong" isDisabled>
|
|
431
|
+
Primary
|
|
432
|
+
</Button>
|
|
433
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
434
|
+
Primary + strong noise
|
|
435
|
+
</p>
|
|
436
|
+
</div>
|
|
437
|
+
<div className="space-y-2 text-center">
|
|
438
|
+
<Button variant="secondary" noise="medium" isDisabled>
|
|
439
|
+
Secondary
|
|
440
|
+
</Button>
|
|
441
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
442
|
+
Secondary + medium noise
|
|
443
|
+
</p>
|
|
444
|
+
</div>
|
|
445
|
+
<div className="space-y-2 text-center">
|
|
446
|
+
<Button variant="chipActive" noise="low" isDisabled>
|
|
447
|
+
Chip Active
|
|
448
|
+
</Button>
|
|
449
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
450
|
+
Chip Active + low noise
|
|
451
|
+
</p>
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
|
|
456
|
+
<div className="space-y-4">
|
|
457
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
458
|
+
Enabled vs Disabled
|
|
459
|
+
</h4>
|
|
460
|
+
<div className="flex flex-wrap items-end gap-6">
|
|
461
|
+
<div className="space-y-2 text-center">
|
|
462
|
+
<Button variant="primary" noise="medium">
|
|
463
|
+
Enabled
|
|
464
|
+
</Button>
|
|
465
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
466
|
+
Enabled
|
|
467
|
+
</p>
|
|
468
|
+
</div>
|
|
469
|
+
<div className="space-y-2 text-center">
|
|
470
|
+
<Button variant="primary" noise="medium" isDisabled>
|
|
471
|
+
Disabled
|
|
472
|
+
</Button>
|
|
473
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
474
|
+
Disabled
|
|
475
|
+
</p>
|
|
476
|
+
</div>
|
|
477
|
+
</div>
|
|
267
478
|
</div>
|
|
268
479
|
</div>
|
|
269
480
|
),
|
|
481
|
+
parameters: {
|
|
482
|
+
docs: {
|
|
483
|
+
description: {
|
|
484
|
+
story:
|
|
485
|
+
"Disabled state applied across all six variants, with and without noise. Compare enabled and disabled appearances side-by-side.",
|
|
486
|
+
},
|
|
487
|
+
},
|
|
488
|
+
},
|
|
270
489
|
}
|
|
271
490
|
|
|
272
|
-
|
|
491
|
+
// ─── 4. Use Cases ─────────────────────────────────────────────────────────────
|
|
492
|
+
|
|
493
|
+
export const UseCases: Story = {
|
|
273
494
|
render: () => (
|
|
274
|
-
<div className="
|
|
275
|
-
<
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
495
|
+
<div className="mx-auto max-w-3xl space-y-8 p-8">
|
|
496
|
+
<div className="space-y-4">
|
|
497
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
498
|
+
Player Controls
|
|
499
|
+
</h4>
|
|
500
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex flex-wrap items-center justify-center gap-4 rounded-xl border p-6">
|
|
501
|
+
<Button variant="secondary" size="sm">
|
|
502
|
+
<SkipBackwardIcon className="h-4 w-4" />
|
|
503
|
+
</Button>
|
|
504
|
+
<Button
|
|
505
|
+
variant="primary"
|
|
506
|
+
noise="strong"
|
|
507
|
+
size="lg"
|
|
508
|
+
leftIcon={<CircularPlayIcon />}
|
|
509
|
+
>
|
|
510
|
+
Play Now
|
|
511
|
+
</Button>
|
|
512
|
+
<Button variant="secondary" size="sm">
|
|
513
|
+
<SkipForwardIcon className="h-4 w-4" />
|
|
514
|
+
</Button>
|
|
515
|
+
<Button variant="secondary" size="sm">
|
|
516
|
+
<HeartIcon className="h-4 w-4" />
|
|
517
|
+
</Button>
|
|
518
|
+
</div>
|
|
519
|
+
</div>
|
|
520
|
+
|
|
521
|
+
<div className="space-y-4">
|
|
522
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
523
|
+
Subscription CTA
|
|
524
|
+
</h4>
|
|
525
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex flex-col items-center gap-4 rounded-xl border p-6">
|
|
526
|
+
<p className="text-fm-primary font-fm-text text-fm-lg leading-fm-xl font-semibold">
|
|
527
|
+
Unlock Premium Audio
|
|
528
|
+
</p>
|
|
529
|
+
<p className="text-fm-secondary font-fm-text text-fm-md leading-fm-xl max-w-xs text-center">
|
|
530
|
+
Get lossless streaming, offline downloads, and exclusive content.
|
|
531
|
+
</p>
|
|
532
|
+
<div className="flex flex-wrap justify-center gap-3">
|
|
533
|
+
<Button
|
|
534
|
+
variant="primary"
|
|
535
|
+
noise="medium"
|
|
536
|
+
size="lg"
|
|
537
|
+
leftIcon={<StarIcon />}
|
|
538
|
+
>
|
|
539
|
+
Start Free Trial
|
|
540
|
+
</Button>
|
|
541
|
+
<Button variant="outline" noise="none" size="lg">
|
|
542
|
+
Learn More
|
|
543
|
+
</Button>
|
|
544
|
+
</div>
|
|
545
|
+
<Button variant="text" noise="none" size="sm">
|
|
546
|
+
Not now
|
|
547
|
+
</Button>
|
|
548
|
+
</div>
|
|
549
|
+
</div>
|
|
550
|
+
|
|
551
|
+
<div className="space-y-4">
|
|
552
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
553
|
+
Settings Actions
|
|
554
|
+
</h4>
|
|
555
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary space-y-3 rounded-xl border p-6">
|
|
556
|
+
<div className="flex items-center justify-between">
|
|
557
|
+
<p className="text-fm-primary font-fm-text text-fm-md leading-fm-md">
|
|
558
|
+
Audio quality
|
|
559
|
+
</p>
|
|
560
|
+
<Button variant="secondary" size="sm" leftIcon={<SettingIcon />}>
|
|
561
|
+
Configure
|
|
562
|
+
</Button>
|
|
563
|
+
</div>
|
|
564
|
+
<div className="border-fm-divider-secondary border-t" />
|
|
565
|
+
<div className="flex items-center justify-between">
|
|
566
|
+
<p className="text-fm-primary font-fm-text text-fm-md leading-fm-md">
|
|
567
|
+
Library sync
|
|
568
|
+
</p>
|
|
569
|
+
<Button variant="chip" size="sm">
|
|
570
|
+
Sync now
|
|
571
|
+
</Button>
|
|
572
|
+
</div>
|
|
573
|
+
<div className="border-fm-divider-secondary border-t" />
|
|
574
|
+
<div className="flex items-center justify-between">
|
|
575
|
+
<p className="text-fm-primary font-fm-text text-fm-md leading-fm-md">
|
|
576
|
+
Equalizer
|
|
577
|
+
</p>
|
|
578
|
+
<Button variant="chipActive" size="sm" noise="low">
|
|
579
|
+
Active
|
|
580
|
+
</Button>
|
|
581
|
+
</div>
|
|
582
|
+
</div>
|
|
583
|
+
</div>
|
|
584
|
+
|
|
585
|
+
<div className="space-y-4">
|
|
586
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
587
|
+
Genre Filter Chips
|
|
588
|
+
</h4>
|
|
589
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex flex-wrap gap-2 rounded-xl border p-6">
|
|
590
|
+
<Button variant="chipActive" size="sm" noise="medium">
|
|
591
|
+
All
|
|
592
|
+
</Button>
|
|
593
|
+
<Button variant="chip" size="sm">
|
|
594
|
+
Hip-Hop
|
|
595
|
+
</Button>
|
|
596
|
+
<Button variant="chip" size="sm">
|
|
597
|
+
Electronic
|
|
598
|
+
</Button>
|
|
599
|
+
<Button variant="chip" size="sm">
|
|
600
|
+
Jazz
|
|
601
|
+
</Button>
|
|
602
|
+
<Button variant="chip" size="sm">
|
|
603
|
+
Classical
|
|
604
|
+
</Button>
|
|
605
|
+
<Button variant="chip" size="sm">
|
|
606
|
+
Rock
|
|
607
|
+
</Button>
|
|
608
|
+
<Button variant="chip" size="sm">
|
|
609
|
+
Pop
|
|
610
|
+
</Button>
|
|
611
|
+
</div>
|
|
612
|
+
</div>
|
|
613
|
+
|
|
614
|
+
<div className="space-y-4">
|
|
615
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
616
|
+
Tooltip Integration
|
|
617
|
+
</h4>
|
|
618
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex flex-wrap items-center justify-center gap-4 rounded-xl border p-6">
|
|
619
|
+
<Button
|
|
620
|
+
tooltip="Primary — medium noise, tooltip above"
|
|
621
|
+
tooltipContentProps={{
|
|
622
|
+
align: "center",
|
|
623
|
+
side: "top",
|
|
624
|
+
sideOffset: 10,
|
|
625
|
+
}}
|
|
626
|
+
noise="medium"
|
|
627
|
+
>
|
|
628
|
+
Primary
|
|
629
|
+
</Button>
|
|
630
|
+
<Button
|
|
631
|
+
variant="secondary"
|
|
632
|
+
tooltip="Secondary — tooltip below"
|
|
633
|
+
tooltipContentProps={{
|
|
634
|
+
align: "center",
|
|
635
|
+
side: "bottom",
|
|
636
|
+
sideOffset: 10,
|
|
637
|
+
}}
|
|
638
|
+
>
|
|
639
|
+
Secondary
|
|
640
|
+
</Button>
|
|
641
|
+
<Button
|
|
642
|
+
variant="outline"
|
|
643
|
+
tooltip="Outline — no noise, tooltip above"
|
|
644
|
+
tooltipContentProps={{
|
|
645
|
+
align: "center",
|
|
646
|
+
side: "top",
|
|
647
|
+
sideOffset: 10,
|
|
648
|
+
}}
|
|
649
|
+
noise="none"
|
|
650
|
+
>
|
|
651
|
+
Outline
|
|
652
|
+
</Button>
|
|
653
|
+
<Button variant="text" tooltip="Text — tooltip on hover" noise="none">
|
|
654
|
+
Text
|
|
655
|
+
</Button>
|
|
656
|
+
</div>
|
|
657
|
+
</div>
|
|
312
658
|
</div>
|
|
313
659
|
),
|
|
660
|
+
parameters: {
|
|
661
|
+
layout: "fullscreen",
|
|
662
|
+
docs: {
|
|
663
|
+
description: {
|
|
664
|
+
story:
|
|
665
|
+
"Realistic audio-app scenarios: player playback controls, subscription upgrade CTA, settings panel actions, and genre filter chip row.",
|
|
666
|
+
},
|
|
667
|
+
},
|
|
668
|
+
},
|
|
314
669
|
}
|