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,6 +1,8 @@
|
|
|
1
|
-
import React from "react"
|
|
1
|
+
import React, { useState } from "react"
|
|
2
2
|
import { Label } from "@components/label"
|
|
3
|
-
import type { Meta } from "@storybook/react-vite"
|
|
3
|
+
import type { Meta, StoryObj } from "@storybook/react-vite"
|
|
4
|
+
|
|
5
|
+
import { AuralComponentDocsPage } from "src/ui/story-spec/components/component-story-docs-page"
|
|
4
6
|
|
|
5
7
|
import { RadioGroup, RadioGroupItem } from "."
|
|
6
8
|
|
|
@@ -9,145 +11,451 @@ const meta: Meta<typeof RadioGroup> = {
|
|
|
9
11
|
component: RadioGroup,
|
|
10
12
|
parameters: {
|
|
11
13
|
layout: "centered",
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
docs: {
|
|
15
|
+
description: {
|
|
16
|
+
component:
|
|
17
|
+
"A Radix RadioGroup providing single-selection from a set of mutually exclusive options. Supports vertical and horizontal orientations, description text, required state, and disabled items.",
|
|
18
|
+
},
|
|
19
|
+
page: () => (
|
|
20
|
+
<AuralComponentDocsPage
|
|
21
|
+
features={[
|
|
22
|
+
{
|
|
23
|
+
title: "Single Select",
|
|
24
|
+
description: "Mutually exclusive items",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: "Orientations",
|
|
28
|
+
description: "Vertical or horizontal",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
title: "Disabled Items",
|
|
32
|
+
description: "Per-item disable support",
|
|
33
|
+
},
|
|
34
|
+
]}
|
|
35
|
+
/>
|
|
36
|
+
),
|
|
18
37
|
},
|
|
19
38
|
},
|
|
20
39
|
tags: ["autodocs"],
|
|
21
40
|
}
|
|
22
41
|
|
|
23
42
|
export default meta
|
|
43
|
+
type Story = StoryObj<typeof RadioGroup>
|
|
24
44
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
// ─── 1. Configurations ────────────────────────────────────────────────────────
|
|
46
|
+
|
|
47
|
+
export const Configurations: Story = {
|
|
48
|
+
render: () => (
|
|
49
|
+
<div className="space-y-8">
|
|
50
|
+
{/* Vertical orientation */}
|
|
51
|
+
<div className="space-y-4">
|
|
52
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
53
|
+
Vertical (Default)
|
|
54
|
+
</h4>
|
|
55
|
+
<div className="flex flex-wrap gap-6">
|
|
56
|
+
<div className="space-y-2 text-center">
|
|
57
|
+
<RadioGroup defaultValue="opt-1" className="gap-3">
|
|
58
|
+
<div className="flex items-center gap-3">
|
|
59
|
+
<RadioGroupItem value="opt-1" id="c-v-opt-1" />
|
|
60
|
+
<Label htmlFor="c-v-opt-1">Option One</Label>
|
|
61
|
+
</div>
|
|
62
|
+
<div className="flex items-center gap-3">
|
|
63
|
+
<RadioGroupItem value="opt-2" id="c-v-opt-2" />
|
|
64
|
+
<Label htmlFor="c-v-opt-2">Option Two</Label>
|
|
65
|
+
</div>
|
|
66
|
+
<div className="flex items-center gap-3">
|
|
67
|
+
<RadioGroupItem value="opt-3" id="c-v-opt-3" />
|
|
68
|
+
<Label htmlFor="c-v-opt-3">Option Three</Label>
|
|
69
|
+
</div>
|
|
70
|
+
</RadioGroup>
|
|
71
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
72
|
+
Vertical
|
|
73
|
+
</p>
|
|
74
|
+
</div>
|
|
51
75
|
</div>
|
|
52
|
-
</
|
|
53
|
-
</div>
|
|
76
|
+
</div>
|
|
54
77
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
<
|
|
78
|
+
{/* Horizontal orientation */}
|
|
79
|
+
<div className="space-y-4">
|
|
80
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
81
|
+
Horizontal
|
|
82
|
+
</h4>
|
|
83
|
+
<div className="flex flex-wrap gap-6">
|
|
84
|
+
<div className="space-y-2 text-center">
|
|
85
|
+
<RadioGroup
|
|
86
|
+
defaultValue="h-opt-1"
|
|
87
|
+
className="flex flex-row gap-6"
|
|
88
|
+
orientation="horizontal"
|
|
89
|
+
>
|
|
90
|
+
<div className="flex items-center gap-3">
|
|
91
|
+
<RadioGroupItem value="h-opt-1" id="c-h-opt-1" />
|
|
92
|
+
<Label htmlFor="c-h-opt-1">Option One</Label>
|
|
93
|
+
</div>
|
|
94
|
+
<div className="flex items-center gap-3">
|
|
95
|
+
<RadioGroupItem value="h-opt-2" id="c-h-opt-2" />
|
|
96
|
+
<Label htmlFor="c-h-opt-2">Option Two</Label>
|
|
97
|
+
</div>
|
|
98
|
+
<div className="flex items-center gap-3">
|
|
99
|
+
<RadioGroupItem value="h-opt-3" id="c-h-opt-3" />
|
|
100
|
+
<Label htmlFor="c-h-opt-3">Option Three</Label>
|
|
101
|
+
</div>
|
|
102
|
+
</RadioGroup>
|
|
103
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
104
|
+
Horizontal
|
|
105
|
+
</p>
|
|
106
|
+
</div>
|
|
62
107
|
</div>
|
|
63
|
-
</
|
|
64
|
-
</div>
|
|
108
|
+
</div>
|
|
65
109
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
|
|
110
|
+
{/* With description text */}
|
|
111
|
+
<div className="space-y-4">
|
|
112
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
113
|
+
With Description Text
|
|
114
|
+
</h4>
|
|
115
|
+
<div className="flex flex-wrap gap-6">
|
|
116
|
+
<div className="space-y-2">
|
|
117
|
+
<RadioGroup defaultValue="desc-opt-1" className="gap-4">
|
|
118
|
+
<div className="flex items-start gap-3">
|
|
119
|
+
<RadioGroupItem
|
|
120
|
+
value="desc-opt-1"
|
|
121
|
+
id="c-d-opt-1"
|
|
122
|
+
className="mt-0.5"
|
|
123
|
+
/>
|
|
124
|
+
<div>
|
|
125
|
+
<Label htmlFor="c-d-opt-1">Standard Quality</Label>
|
|
126
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm mt-0.5">
|
|
127
|
+
128 kbps — lower data usage
|
|
128
|
+
</p>
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
<div className="flex items-start gap-3">
|
|
132
|
+
<RadioGroupItem
|
|
133
|
+
value="desc-opt-2"
|
|
134
|
+
id="c-d-opt-2"
|
|
135
|
+
className="mt-0.5"
|
|
136
|
+
/>
|
|
137
|
+
<div>
|
|
138
|
+
<Label htmlFor="c-d-opt-2">High Quality</Label>
|
|
139
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm mt-0.5">
|
|
140
|
+
320 kbps — recommended for headphones
|
|
141
|
+
</p>
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
<div className="flex items-start gap-3">
|
|
145
|
+
<RadioGroupItem
|
|
146
|
+
value="desc-opt-3"
|
|
147
|
+
id="c-d-opt-3"
|
|
148
|
+
className="mt-0.5"
|
|
149
|
+
/>
|
|
150
|
+
<div>
|
|
151
|
+
<Label htmlFor="c-d-opt-3">Lossless</Label>
|
|
152
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm mt-0.5">
|
|
153
|
+
FLAC / ALAC — best for audiophiles
|
|
154
|
+
</p>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
</RadioGroup>
|
|
158
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm pt-1">
|
|
159
|
+
With description
|
|
160
|
+
</p>
|
|
161
|
+
</div>
|
|
75
162
|
</div>
|
|
76
|
-
</
|
|
77
|
-
</div>
|
|
163
|
+
</div>
|
|
78
164
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
165
|
+
{/* Required */}
|
|
166
|
+
<div className="space-y-4">
|
|
167
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
168
|
+
Required Field
|
|
169
|
+
</h4>
|
|
170
|
+
<div className="flex flex-wrap gap-6">
|
|
171
|
+
<div className="space-y-2 text-center">
|
|
172
|
+
<RadioGroup className="gap-3" required>
|
|
173
|
+
<div className="flex items-center gap-3">
|
|
174
|
+
<RadioGroupItem value="r-opt-1" id="c-r-opt-1" />
|
|
175
|
+
<Label htmlFor="c-r-opt-1" required>
|
|
176
|
+
Agree to terms
|
|
177
|
+
</Label>
|
|
178
|
+
</div>
|
|
179
|
+
<div className="flex items-center gap-3">
|
|
180
|
+
<RadioGroupItem value="r-opt-2" id="c-r-opt-2" />
|
|
181
|
+
<Label htmlFor="c-r-opt-2" required>
|
|
182
|
+
Disagree
|
|
183
|
+
</Label>
|
|
184
|
+
</div>
|
|
185
|
+
</RadioGroup>
|
|
186
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
187
|
+
Required
|
|
188
|
+
</p>
|
|
189
|
+
</div>
|
|
92
190
|
</div>
|
|
93
|
-
</
|
|
94
|
-
</div>
|
|
95
|
-
</div>
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
export const Horizontal = () => (
|
|
99
|
-
<RadioGroup defaultValue="option-1" className="flex space-x-8">
|
|
100
|
-
<div className="flex items-center space-x-2">
|
|
101
|
-
<RadioGroupItem value="option-1" id="h-option-1" />
|
|
102
|
-
<Label htmlFor="h-option-1">Option 1</Label>
|
|
103
|
-
</div>
|
|
104
|
-
<div className="flex items-center space-x-2">
|
|
105
|
-
<RadioGroupItem value="option-2" id="h-option-2" />
|
|
106
|
-
<Label htmlFor="h-option-2">Option 2</Label>
|
|
107
|
-
</div>
|
|
108
|
-
<div className="flex items-center space-x-2">
|
|
109
|
-
<RadioGroupItem value="option-3" id="h-option-3" />
|
|
110
|
-
<Label htmlFor="h-option-3">Option 3</Label>
|
|
111
|
-
</div>
|
|
112
|
-
</RadioGroup>
|
|
113
|
-
)
|
|
114
|
-
|
|
115
|
-
export const Required = () => (
|
|
116
|
-
<RadioGroup defaultValue="option-1" required>
|
|
117
|
-
<div className="flex items-center space-x-2">
|
|
118
|
-
<RadioGroupItem value="option-1" id="r-option-1" />
|
|
119
|
-
<Label htmlFor="r-option-1">Required Option 1</Label>
|
|
120
|
-
</div>
|
|
121
|
-
<div className="flex items-center space-x-2">
|
|
122
|
-
<RadioGroupItem value="option-2" id="r-option-2" />
|
|
123
|
-
<Label htmlFor="r-option-2">Required Option 2</Label>
|
|
191
|
+
</div>
|
|
124
192
|
</div>
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
193
|
+
),
|
|
194
|
+
parameters: {
|
|
195
|
+
docs: {
|
|
196
|
+
description: {
|
|
197
|
+
story:
|
|
198
|
+
"Configuration axes for RadioGroup: vertical (default) and horizontal orientations, options with description text, and the required field marker.",
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// ─── 2. States ────────────────────────────────────────────────────────────────
|
|
205
|
+
|
|
206
|
+
export const States: Story = {
|
|
207
|
+
render: () => (
|
|
208
|
+
<div className="space-y-8">
|
|
209
|
+
<div className="space-y-4">
|
|
210
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
211
|
+
Default (Unselected)
|
|
212
|
+
</h4>
|
|
213
|
+
<div className="flex flex-wrap gap-8">
|
|
214
|
+
<div className="space-y-2 text-center">
|
|
215
|
+
<div className="flex justify-center">
|
|
216
|
+
<RadioGroup defaultValue="" className="gap-3">
|
|
217
|
+
<div className="flex items-center gap-3">
|
|
218
|
+
<RadioGroupItem value="st-u-1" id="st-u-1" />
|
|
219
|
+
<Label htmlFor="st-u-1">Unselected</Label>
|
|
220
|
+
</div>
|
|
221
|
+
</RadioGroup>
|
|
222
|
+
</div>
|
|
223
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
224
|
+
Default
|
|
225
|
+
</p>
|
|
226
|
+
</div>
|
|
227
|
+
|
|
228
|
+
<div className="space-y-2 text-center">
|
|
229
|
+
<div className="flex justify-center">
|
|
230
|
+
<RadioGroup defaultValue="st-c-1" className="gap-3">
|
|
231
|
+
<div className="flex items-center gap-3">
|
|
232
|
+
<RadioGroupItem value="st-c-1" id="st-c-1" />
|
|
233
|
+
<Label htmlFor="st-c-1">Selected</Label>
|
|
234
|
+
</div>
|
|
235
|
+
</RadioGroup>
|
|
236
|
+
</div>
|
|
237
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
238
|
+
Checked
|
|
239
|
+
</p>
|
|
240
|
+
</div>
|
|
241
|
+
|
|
242
|
+
<div className="space-y-2 text-center">
|
|
243
|
+
<div className="flex justify-center">
|
|
244
|
+
<RadioGroup defaultValue="" className="gap-3">
|
|
245
|
+
<div className="flex items-center gap-3">
|
|
246
|
+
<RadioGroupItem value="st-d-1" id="st-d-1" disabled />
|
|
247
|
+
<Label htmlFor="st-d-1" disabled>
|
|
248
|
+
Disabled
|
|
249
|
+
</Label>
|
|
250
|
+
</div>
|
|
251
|
+
</RadioGroup>
|
|
252
|
+
</div>
|
|
253
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
254
|
+
Disabled
|
|
255
|
+
</p>
|
|
256
|
+
</div>
|
|
257
|
+
|
|
258
|
+
<div className="space-y-2 text-center">
|
|
259
|
+
<div className="flex justify-center">
|
|
260
|
+
<RadioGroup defaultValue="st-dc-1" className="gap-3">
|
|
261
|
+
<div className="flex items-center gap-3">
|
|
262
|
+
<RadioGroupItem value="st-dc-1" id="st-dc-1" disabled />
|
|
263
|
+
<Label htmlFor="st-dc-1" disabled>
|
|
264
|
+
Disabled Checked
|
|
265
|
+
</Label>
|
|
266
|
+
</div>
|
|
267
|
+
</RadioGroup>
|
|
268
|
+
</div>
|
|
269
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
270
|
+
Disabled Checked
|
|
271
|
+
</p>
|
|
272
|
+
</div>
|
|
138
273
|
</div>
|
|
139
274
|
</div>
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
<
|
|
147
|
-
|
|
148
|
-
|
|
275
|
+
|
|
276
|
+
<div className="space-y-4">
|
|
277
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
278
|
+
Mixed Group States
|
|
279
|
+
</h4>
|
|
280
|
+
<div className="flex flex-wrap gap-6">
|
|
281
|
+
<div className="space-y-2 text-center">
|
|
282
|
+
<RadioGroup defaultValue="mix-2" className="gap-3">
|
|
283
|
+
<div className="flex items-center gap-3">
|
|
284
|
+
<RadioGroupItem value="mix-1" id="mix-1" />
|
|
285
|
+
<Label htmlFor="mix-1">Active — unselected</Label>
|
|
286
|
+
</div>
|
|
287
|
+
<div className="flex items-center gap-3">
|
|
288
|
+
<RadioGroupItem value="mix-2" id="mix-2" />
|
|
289
|
+
<Label htmlFor="mix-2">Active — selected</Label>
|
|
290
|
+
</div>
|
|
291
|
+
<div className="flex items-center gap-3">
|
|
292
|
+
<RadioGroupItem value="mix-3" id="mix-3" disabled />
|
|
293
|
+
<Label htmlFor="mix-3" disabled>
|
|
294
|
+
Disabled — unavailable
|
|
295
|
+
</Label>
|
|
296
|
+
</div>
|
|
297
|
+
</RadioGroup>
|
|
298
|
+
<p className="text-fm-secondary font-fm-text text-fm-sm leading-fm-sm">
|
|
299
|
+
Mixed group
|
|
300
|
+
</p>
|
|
301
|
+
</div>
|
|
149
302
|
</div>
|
|
150
303
|
</div>
|
|
151
304
|
</div>
|
|
152
|
-
|
|
153
|
-
|
|
305
|
+
),
|
|
306
|
+
parameters: {
|
|
307
|
+
docs: {
|
|
308
|
+
description: {
|
|
309
|
+
story:
|
|
310
|
+
"Individual radio item states — default, checked, disabled, and disabled-checked — plus a mixed group demonstrating all states together.",
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// ─── 3. Use Cases ─────────────────────────────────────────────────────────────
|
|
317
|
+
|
|
318
|
+
export const UseCases: Story = {
|
|
319
|
+
render: () => {
|
|
320
|
+
const [audioQuality, setAudioQuality] = useState("high")
|
|
321
|
+
const [crossfade, setCrossfade] = useState("short")
|
|
322
|
+
|
|
323
|
+
return (
|
|
324
|
+
<div className="mx-auto max-w-3xl space-y-8 p-8">
|
|
325
|
+
{/* Audio Quality Selector */}
|
|
326
|
+
<div className="space-y-4">
|
|
327
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
328
|
+
Audio Quality
|
|
329
|
+
</h4>
|
|
330
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary mx-auto max-w-md rounded-xl border p-5">
|
|
331
|
+
<RadioGroup
|
|
332
|
+
value={audioQuality}
|
|
333
|
+
onValueChange={setAudioQuality}
|
|
334
|
+
className="gap-4"
|
|
335
|
+
>
|
|
336
|
+
<div className="flex items-start gap-3">
|
|
337
|
+
<RadioGroupItem
|
|
338
|
+
value="standard"
|
|
339
|
+
id="uc-aq-standard"
|
|
340
|
+
className="mt-0.5"
|
|
341
|
+
/>
|
|
342
|
+
<div className="flex-1">
|
|
343
|
+
<div className="flex items-center justify-between">
|
|
344
|
+
<Label htmlFor="uc-aq-standard">Standard</Label>
|
|
345
|
+
<span className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm">
|
|
346
|
+
128 kbps
|
|
347
|
+
</span>
|
|
348
|
+
</div>
|
|
349
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm mt-0.5">
|
|
350
|
+
Saves data on mobile connections
|
|
351
|
+
</p>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
<div className="border-fm-divider-secondary border-t" />
|
|
355
|
+
<div className="flex items-start gap-3">
|
|
356
|
+
<RadioGroupItem
|
|
357
|
+
value="high"
|
|
358
|
+
id="uc-aq-high"
|
|
359
|
+
className="mt-0.5"
|
|
360
|
+
/>
|
|
361
|
+
<div className="flex-1">
|
|
362
|
+
<div className="flex items-center justify-between">
|
|
363
|
+
<Label htmlFor="uc-aq-high">High</Label>
|
|
364
|
+
<span className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm">
|
|
365
|
+
320 kbps
|
|
366
|
+
</span>
|
|
367
|
+
</div>
|
|
368
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm mt-0.5">
|
|
369
|
+
Recommended for headphones and speakers
|
|
370
|
+
</p>
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
<div className="border-fm-divider-secondary border-t" />
|
|
374
|
+
<div className="flex items-start gap-3">
|
|
375
|
+
<RadioGroupItem
|
|
376
|
+
value="lossless"
|
|
377
|
+
id="uc-aq-lossless"
|
|
378
|
+
className="mt-0.5"
|
|
379
|
+
/>
|
|
380
|
+
<div className="flex-1">
|
|
381
|
+
<div className="flex items-center justify-between">
|
|
382
|
+
<Label htmlFor="uc-aq-lossless">Lossless</Label>
|
|
383
|
+
<span className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm">
|
|
384
|
+
FLAC
|
|
385
|
+
</span>
|
|
386
|
+
</div>
|
|
387
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm mt-0.5">
|
|
388
|
+
Studio-quality — uses more storage
|
|
389
|
+
</p>
|
|
390
|
+
</div>
|
|
391
|
+
</div>
|
|
392
|
+
<div className="border-fm-divider-secondary border-t" />
|
|
393
|
+
<div className="flex items-start gap-3">
|
|
394
|
+
<RadioGroupItem
|
|
395
|
+
value="spatial"
|
|
396
|
+
id="uc-aq-spatial"
|
|
397
|
+
className="mt-0.5"
|
|
398
|
+
disabled
|
|
399
|
+
/>
|
|
400
|
+
<div className="flex-1">
|
|
401
|
+
<div className="flex items-center justify-between">
|
|
402
|
+
<Label htmlFor="uc-aq-spatial" disabled>
|
|
403
|
+
Spatial Audio
|
|
404
|
+
</Label>
|
|
405
|
+
<span className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm">
|
|
406
|
+
Dolby Atmos
|
|
407
|
+
</span>
|
|
408
|
+
</div>
|
|
409
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm mt-0.5">
|
|
410
|
+
Requires a compatible device
|
|
411
|
+
</p>
|
|
412
|
+
</div>
|
|
413
|
+
</div>
|
|
414
|
+
</RadioGroup>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
|
|
418
|
+
{/* Crossfade / Playback Settings */}
|
|
419
|
+
<div className="space-y-4">
|
|
420
|
+
<h4 className="text-fm-secondary font-fm-text text-fm-md leading-fm-md font-medium">
|
|
421
|
+
Crossfade Between Tracks
|
|
422
|
+
</h4>
|
|
423
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary mx-auto max-w-md rounded-xl border p-5">
|
|
424
|
+
<RadioGroup
|
|
425
|
+
value={crossfade}
|
|
426
|
+
onValueChange={setCrossfade}
|
|
427
|
+
className="flex flex-row flex-wrap gap-4"
|
|
428
|
+
orientation="horizontal"
|
|
429
|
+
>
|
|
430
|
+
{(
|
|
431
|
+
[
|
|
432
|
+
{ value: "none", label: "None" },
|
|
433
|
+
{ value: "short", label: "2 sec" },
|
|
434
|
+
{ value: "medium", label: "5 sec" },
|
|
435
|
+
{ value: "long", label: "12 sec" },
|
|
436
|
+
] as const
|
|
437
|
+
).map(({ value, label }) => (
|
|
438
|
+
<div key={value} className="flex items-center gap-2">
|
|
439
|
+
<RadioGroupItem value={value} id={`uc-cf-${value}`} />
|
|
440
|
+
<Label htmlFor={`uc-cf-${value}`}>{label}</Label>
|
|
441
|
+
</div>
|
|
442
|
+
))}
|
|
443
|
+
</RadioGroup>
|
|
444
|
+
<p className="text-fm-tertiary font-fm-text text-fm-sm leading-fm-sm mt-4">
|
|
445
|
+
Current: <span className="text-fm-secondary">{crossfade}</span>
|
|
446
|
+
</p>
|
|
447
|
+
</div>
|
|
448
|
+
</div>
|
|
449
|
+
</div>
|
|
450
|
+
)
|
|
451
|
+
},
|
|
452
|
+
parameters: {
|
|
453
|
+
layout: "fullscreen",
|
|
454
|
+
docs: {
|
|
455
|
+
description: {
|
|
456
|
+
story:
|
|
457
|
+
"Real-world audio app scenarios: an audio quality selector with descriptions and a disabled option, and a horizontal crossfade duration picker for playback settings.",
|
|
458
|
+
},
|
|
459
|
+
},
|
|
460
|
+
},
|
|
461
|
+
}
|