aural-ui 3.0.7 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/aspect-ratio/AspectRatio.stories.tsx +271 -242
- package/dist/components/avatar/Avatar.stories.tsx +84 -70
- package/dist/components/button/Button.stories.tsx +7 -7
- package/dist/components/button/index.tsx +7 -7
- package/dist/components/card/Card.stories.tsx +3 -3
- package/dist/components/char-count/CharCount.stories.tsx +9 -9
- package/dist/components/circular-loader/CircularLoader.stories.tsx +109 -93
- package/dist/components/collapsible/Collapsible.stories.tsx +1 -1
- package/dist/components/command/Command.stories.tsx +52 -38
- package/dist/components/dialog/Dialog.stories.tsx +89 -84
- package/dist/components/divider/Divider.stories.tsx +86 -60
- package/dist/components/dot-loader/DotLoader.stories.tsx +12 -12
- package/dist/components/drawer/Drawer.stories.tsx +74 -44
- package/dist/components/drawer/index.tsx +3 -3
- package/dist/components/dropdown/Dropdown.stories.tsx +42 -32
- package/dist/components/helper-text/HelperText.stories.tsx +2 -2
- package/dist/components/hover-card/HoverCard.stories.tsx +211 -178
- package/dist/components/input/Input.stories.tsx +2 -2
- package/dist/components/label/Label.stories.tsx +10 -10
- package/dist/components/list/List.stories.tsx +58 -44
- package/dist/components/marquee/Marquee.stories.tsx +131 -113
- package/dist/components/otp-inputs/OtpInputs.stories.tsx +47 -35
- package/dist/components/overlay/Overlay.stories.tsx +98 -92
- package/dist/components/overlay/index.tsx +4 -4
- package/dist/components/popover/Popover.stories.tsx +132 -106
- package/dist/components/radio/Radio.stories.tsx +2 -2
- package/dist/components/resizable/Resizable.stories.tsx +186 -138
- package/dist/components/scroll-area/ScrollArea.stories.tsx +174 -120
- package/dist/components/search/Search.stories.tsx +81 -59
- package/dist/components/select/Select.stories.tsx +3 -1
- package/dist/components/sheet/Sheet.stories.tsx +68 -54
- package/dist/components/slider/Slider.stories.tsx +71 -47
- package/dist/components/stepper/Stepper.stories.tsx +16 -16
- package/dist/components/switch/Switch.stories.tsx +12 -12
- package/dist/components/table/Table.stories.tsx +8 -6
- package/dist/components/tabs/Tabs.stories.tsx +324 -268
- package/dist/components/textarea/TextArea.stories.tsx +1 -1
- package/dist/components/thumbnail-tags/ThumbnailTags.stories.tsx +16 -10
- package/dist/components/toast/Toast.stories.tsx +51 -45
- package/dist/components/toggle/Toggle.stories.tsx +111 -89
- package/dist/components/tooltip/Tooltip.stories.tsx +160 -144
- package/dist/icons/Icons.stories.tsx +2 -2
- package/dist/icons/ai-avatar-icon/AiAvatarIcon.stories.tsx +287 -237
- package/dist/icons/alert-icon/AlertIcon.stories.tsx +290 -248
- package/dist/icons/all-icons.tsx +97 -81
- package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +312 -270
- package/dist/icons/apple-logo-icon/AppleLogoIcon.stories.tsx +294 -244
- package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +309 -279
- package/dist/icons/arrow-corner-up-left-icon/ArrowCornerUpLeftIcon.stories.tsx +294 -258
- package/dist/icons/arrow-corner-up-right-icon/ArrowCornerUpRightIcon.stories.tsx +289 -255
- package/dist/icons/arrow-left-icon/ArrowLeftIcon.stories.tsx +288 -256
- package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +322 -288
- package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +340 -296
- package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +197 -177
- package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +390 -328
- package/dist/icons/backward-ten-seconds-icon/BackwardTenSecondsIcon.stories.tsx +313 -277
- package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +367 -309
- package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +356 -308
- package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +280 -234
- package/dist/icons/camera-icon/CameraIcon.stories.tsx +370 -326
- package/dist/icons/capital-a-letter-icon/CapitalALetterIcon.stories.tsx +300 -256
- package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +298 -262
- package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +294 -260
- package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +291 -259
- package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +286 -256
- package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +282 -256
- package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +292 -256
- package/dist/icons/circle-tick-icon/CircleTickIcon.stories.tsx +338 -290
- package/dist/icons/circular-play-icon/CircularPlayIcon.stories.tsx +167 -148
- package/dist/icons/coin-icon/CoinIcon.stories.tsx +342 -296
- package/dist/icons/coin-toons-icon/CoinToonsIcon.stories.tsx +342 -296
- package/dist/icons/column-wide-add-icon/ColumnWideAddIcon.stories.tsx +280 -238
- package/dist/icons/command-icon/CommandIcon.stories.tsx +328 -280
- package/dist/icons/copy-icon/CopyIcon.stories.tsx +294 -256
- package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +285 -235
- package/dist/icons/cross-icon/CrossIcon.stories.tsx +308 -266
- package/dist/icons/download-icon/DownloadIcon.stories.tsx +271 -231
- package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +330 -278
- package/dist/icons/email-icon/EmailIcon.stories.tsx +303 -257
- package/dist/icons/expand-icon/ExpandIcon.stories.tsx +324 -286
- package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +317 -271
- package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +320 -272
- package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +322 -280
- package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +315 -277
- package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +199 -177
- package/dist/icons/filter-bar-row-icon/FilterBarRowIcon.stories.tsx +304 -264
- package/dist/icons/forward-ten-seconds-icon/ForwardTenSecondsIcon.stories.tsx +311 -277
- package/dist/icons/git-branch-icon/GitBranchIcon.stories.tsx +327 -287
- package/dist/icons/git-fork-icon/GitForkIcon.stories.tsx +314 -278
- package/dist/icons/globe-icon/GlobeIcon.stories.tsx +113 -98
- package/dist/icons/google-logo-icon/GoogleLogoIcon.stories.tsx +274 -226
- package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +349 -303
- package/dist/icons/head-icon/HeadIcon.stories.tsx +286 -246
- package/dist/icons/heart-icon/HeartIcon.stories.tsx +312 -268
- package/dist/icons/image-avatar-sparkle-icon/ImageAvatarSparkleIcon.stories.tsx +246 -210
- package/dist/icons/image-icon/ImageIcon.stories.tsx +330 -284
- package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +326 -282
- package/dist/icons/import-left-arrow-folder-icon/ImportLeftArrowFolderIcon.stories.tsx +330 -294
- package/dist/icons/indian-flag-icon/IndianFlagIcon.stories.tsx +288 -234
- package/dist/icons/instagram-icon/InstagramIcon.stories.tsx +386 -330
- package/dist/icons/layout-column-icon/LayoutColumnIcon.stories.tsx +305 -263
- package/dist/icons/layout-left-icon/LayoutLeftIcon.stories.tsx +295 -259
- package/dist/icons/layout-right-icon/LayoutRightIcon.stories.tsx +296 -256
- package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +322 -282
- package/dist/icons/linked-in-icon/LinkedInIcon.stories.tsx +399 -359
- package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +314 -272
- package/dist/icons/magic-edit-icon/MagicEditIcon.stories.tsx +238 -206
- package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +322 -276
- package/dist/icons/message-icon/MessageIcon.stories.tsx +192 -170
- package/dist/icons/minimize-icon/MinimizeIcon.stories.tsx +348 -304
- package/dist/icons/moon-icon/MoonIcon.stories.tsx +191 -167
- package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +380 -326
- package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +345 -291
- package/dist/icons/musical-note-icon/MusicalNoteIcon.stories.tsx +310 -266
- package/dist/icons/notepad-icon/NotepadIcon.stories.tsx +311 -271
- package/dist/icons/notes-icon/NotesIcon.stories.tsx +311 -271
- package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +309 -271
- package/dist/icons/page-text-icon/PageTextIcon.stories.tsx +248 -210
- package/dist/icons/paint-roll-icon/PaintRollIcon.stories.tsx +310 -262
- package/dist/icons/paper-plane-icon/PaperPlaneIcon.stories.tsx +274 -236
- package/dist/icons/pause-icon/PauseIcon.stories.tsx +324 -280
- package/dist/icons/pencil-icon/PencilIcon.stories.tsx +323 -281
- package/dist/icons/phone-icon/PhoneIcon.stories.tsx +288 -240
- package/dist/icons/plus-icon/PlusIcon.stories.tsx +315 -273
- package/dist/icons/pocket-studio-icon/PocketStudioIcon.stories.tsx +278 -234
- package/dist/icons/scroll-down-icon/ScrollDownIcon.stories.tsx +161 -151
- package/dist/icons/search-icon/SearchIcon.stories.tsx +324 -284
- package/dist/icons/setting-icon/SettingIcon.stories.tsx +306 -264
- package/dist/icons/share-icon/ShareIcon.stories.tsx +314 -272
- package/dist/icons/shield-icon/ShieldIcon.stories.tsx +281 -235
- package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +309 -250
- package/dist/icons/skip-backward-icon/SkipBackwardIcon.stories.tsx +317 -279
- package/dist/icons/skip-forward-icon/SkipForwardIcon.stories.tsx +315 -279
- package/dist/icons/sparkles-soft-icon/SparklesSoftIcon.stories.tsx +299 -253
- package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +185 -169
- package/dist/icons/spinner-gradient-icon/index.tsx +6 -1
- package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +192 -168
- package/dist/icons/spinner-solid-icon/index.tsx +6 -1
- package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +212 -178
- package/dist/icons/spinner-solid-neutral-icon/index.tsx +1 -1
- package/dist/icons/star-icon/StarIcon.stories.tsx +290 -244
- package/dist/icons/store-coin-icon/StoreCoinIcon.stories.tsx +286 -234
- package/dist/icons/suggestion-icon/SuggestionIcon.stories.tsx +272 -230
- package/dist/icons/sun-icon/SunIcon.stories.tsx +262 -226
- package/dist/icons/text-color-icon/TextColorIcon.stories.tsx +321 -279
- package/dist/icons/text-indicator-icon/TextIndicatorIcon.stories.tsx +332 -282
- package/dist/icons/threads-icon/ThreadsIcon.stories.tsx +394 -342
- package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +338 -290
- package/dist/icons/tick-icon/TickIcon.stories.tsx +364 -315
- package/dist/icons/trash-icon/TrashIcon.stories.tsx +293 -253
- package/dist/icons/twitter-x-icon/TwitterXIcon.stories.tsx +396 -338
- package/dist/icons/upload-icon/UploadIcon.stories.tsx +291 -247
- package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +309 -271
- package/dist/icons/video-play-list-icon/VideoPlaylistIcon.stories.tsx +336 -290
- package/dist/icons/voice-playing-icon/VoicePlayingIcon.stories.tsx +382 -334
- package/dist/icons/volume-full-icon/VolumeFullIcon.stories.tsx +349 -305
- package/dist/icons/volume-half-icon/VolumeHalfIcon.stories.tsx +327 -295
- package/dist/icons/volume-off-icon/VolumeOffIcon.stories.tsx +336 -296
- package/dist/icons/warning-icon/WarningIcon.stories.tsx +314 -274
- package/dist/icons/youtube-icon/YoutubeIcon.stories.tsx +311 -261
- package/dist/index.cjs +84 -84
- package/dist/index.js +84 -84
- package/dist/styles/aural-all-theme.css +1222 -0
- package/dist/styles/{aural-theme.css → aural-dark-theme.css} +15 -3
- package/dist/styles/aural-light-theme.css +1047 -0
- package/package.json +1 -1
|
@@ -11,9 +11,9 @@ const meta: Meta<typeof VoicePlayingIcon> = {
|
|
|
11
11
|
backgrounds: {
|
|
12
12
|
default: "dark",
|
|
13
13
|
values: [
|
|
14
|
-
{ name: "dark", value: "
|
|
15
|
-
{ name: "darker", value: "
|
|
16
|
-
{ name: "light", value: "
|
|
14
|
+
{ name: "dark", value: "var(--color-fm-surface-primary)" },
|
|
15
|
+
{ name: "darker", value: "var(--color-fm-neutral-0)" },
|
|
16
|
+
{ name: "light", value: "var(--color-fm-neutral-1100)" },
|
|
17
17
|
],
|
|
18
18
|
},
|
|
19
19
|
docs: {
|
|
@@ -40,59 +40,59 @@ const meta: Meta<typeof VoicePlayingIcon> = {
|
|
|
40
40
|
background: transparent ;
|
|
41
41
|
}
|
|
42
42
|
body {
|
|
43
|
-
background:
|
|
43
|
+
background: var(--color-fm-surface-primary) ;
|
|
44
44
|
}
|
|
45
45
|
#storybook-docs {
|
|
46
|
-
background:
|
|
46
|
+
background: var(--color-fm-surface-primary) ;
|
|
47
47
|
}
|
|
48
48
|
.sbdocs-preview {
|
|
49
49
|
background: transparent ;
|
|
50
50
|
border: none ;
|
|
51
51
|
}
|
|
52
52
|
.sbdocs-h1, .sbdocs-h2, .sbdocs-h3, .sbdocs-h4, .sbdocs-h5, .sbdocs-h6 {
|
|
53
|
-
color:
|
|
53
|
+
color: var(--color-fm-icon-active) ;
|
|
54
54
|
}
|
|
55
55
|
.sbdocs-p, .sbdocs-li {
|
|
56
|
-
color:
|
|
56
|
+
color: var(--color-fm-secondary) ;
|
|
57
57
|
}
|
|
58
58
|
.sbdocs-code {
|
|
59
|
-
background:
|
|
60
|
-
color:
|
|
61
|
-
border: 1px solid
|
|
59
|
+
background: var(--color-fm-surface-secondary) ;
|
|
60
|
+
color: var(--color-fm-secondary-500) ;
|
|
61
|
+
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
62
62
|
}
|
|
63
63
|
.sbdocs-pre {
|
|
64
|
-
background:
|
|
65
|
-
border: 1px solid
|
|
64
|
+
background: var(--color-fm-surface-secondary) ;
|
|
65
|
+
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
66
66
|
}
|
|
67
67
|
.sbdocs-table {
|
|
68
|
-
background:
|
|
69
|
-
border: 1px solid
|
|
68
|
+
background: var(--color-fm-surface-secondary) ;
|
|
69
|
+
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
70
70
|
}
|
|
71
71
|
.sbdocs-table th {
|
|
72
|
-
background:
|
|
73
|
-
color:
|
|
74
|
-
border-bottom: 1px solid
|
|
72
|
+
background: var(--color-fm-surface-secondary) ;
|
|
73
|
+
color: var(--color-fm-icon-active) ;
|
|
74
|
+
border-bottom: 1px solid var(--color-fm-divider-secondary) ;
|
|
75
75
|
}
|
|
76
76
|
.sbdocs-table td {
|
|
77
|
-
color:
|
|
78
|
-
border-bottom: 1px solid
|
|
77
|
+
color: var(--color-fm-secondary) ;
|
|
78
|
+
border-bottom: 1px solid var(--color-fm-divider-tertiary) ;
|
|
79
79
|
}
|
|
80
80
|
`}
|
|
81
81
|
</style>
|
|
82
82
|
|
|
83
|
-
<div className="
|
|
83
|
+
<div className="from-fm-surface-primary via-fm-icon-positive/5 to-fm-surface-primary min-h-screen bg-linear-to-br">
|
|
84
84
|
{/* Header */}
|
|
85
|
-
<div className="relative overflow-hidden border-b
|
|
86
|
-
<div className="absolute inset-0 bg-
|
|
85
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary relative overflow-hidden border-b backdrop-blur-xl">
|
|
86
|
+
<div className="from-fm-icon-positive/10 to-fm-icon-info/10 absolute inset-0 bg-linear-to-r via-transparent" />
|
|
87
87
|
<div className="relative !mx-auto max-w-7xl px-6 py-16">
|
|
88
88
|
<div className="!space-y-6 text-center">
|
|
89
|
-
<div className="!mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border
|
|
90
|
-
<VoicePlayingIcon className="h-12 w-12
|
|
89
|
+
<div className="border-fm-icon-positive/30 from-fm-icon-positive/20 to-fm-icon-info/20 !mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border bg-linear-to-br">
|
|
90
|
+
<VoicePlayingIcon className="text-fm-icon-positive h-12 w-12" />
|
|
91
91
|
</div>
|
|
92
|
-
<h1 className="text-5xl font-bold
|
|
92
|
+
<h1 className="text-fm-icon-active! text-5xl font-bold">
|
|
93
93
|
VoicePlayingIcon
|
|
94
94
|
</h1>
|
|
95
|
-
<p className="!mx-auto max-w-3xl text-xl leading-relaxed
|
|
95
|
+
<p className="text-fm-secondary! !mx-auto max-w-3xl text-xl leading-relaxed">
|
|
96
96
|
An animated audio visualizer icon featuring dynamic sound
|
|
97
97
|
bars that represent active voice playback. Perfect for
|
|
98
98
|
podcast players, voice message interfaces, audio recording
|
|
@@ -103,28 +103,28 @@ const meta: Meta<typeof VoicePlayingIcon> = {
|
|
|
103
103
|
{/* Stats */}
|
|
104
104
|
<div className="flex items-center justify-center gap-8 pt-8">
|
|
105
105
|
<div className="text-center">
|
|
106
|
-
<div className="text-3xl font-bold
|
|
106
|
+
<div className="text-fm-icon-positive text-3xl font-bold">
|
|
107
107
|
Voice Playback
|
|
108
108
|
</div>
|
|
109
|
-
<div className="text-
|
|
109
|
+
<div className="text-fm-tertiary text-sm">
|
|
110
110
|
Audio visualization
|
|
111
111
|
</div>
|
|
112
112
|
</div>
|
|
113
|
-
<div className="h-8 w-px
|
|
113
|
+
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
114
114
|
<div className="text-center">
|
|
115
|
-
<div className="text-3xl font-bold
|
|
115
|
+
<div className="text-fm-icon-info text-3xl font-bold">
|
|
116
116
|
Live Activity
|
|
117
117
|
</div>
|
|
118
|
-
<div className="text-
|
|
118
|
+
<div className="text-fm-tertiary text-sm">
|
|
119
119
|
Real-time feedback
|
|
120
120
|
</div>
|
|
121
121
|
</div>
|
|
122
|
-
<div className="h-8 w-px
|
|
122
|
+
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
123
123
|
<div className="text-center">
|
|
124
|
-
<div className="text-3xl font-bold
|
|
124
|
+
<div className="text-fm-icon-info text-3xl font-bold">
|
|
125
125
|
Interactive
|
|
126
126
|
</div>
|
|
127
|
-
<div className="text-
|
|
127
|
+
<div className="text-fm-tertiary text-sm">
|
|
128
128
|
Visual engagement
|
|
129
129
|
</div>
|
|
130
130
|
</div>
|
|
@@ -137,16 +137,16 @@ const meta: Meta<typeof VoicePlayingIcon> = {
|
|
|
137
137
|
<div className="!mx-auto max-w-7xl !space-y-16 px-6 py-12">
|
|
138
138
|
{/* Quick Usage */}
|
|
139
139
|
<div className="!space-y-8">
|
|
140
|
-
<h2 className="text-center text-3xl font-bold
|
|
140
|
+
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
141
141
|
Quick Start
|
|
142
142
|
</h2>
|
|
143
143
|
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
144
144
|
<div className="!space-y-4">
|
|
145
|
-
<h3 className="text-xl font-semibold
|
|
145
|
+
<h3 className="text-fm-icon-positive! text-xl font-semibold">
|
|
146
146
|
Basic Usage
|
|
147
147
|
</h3>
|
|
148
|
-
<div className="rounded-lg
|
|
149
|
-
<pre className="overflow-x-auto text-sm
|
|
148
|
+
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
149
|
+
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
150
150
|
{`import { VoicePlayingIcon } from "@icons/voice-playing-icon"
|
|
151
151
|
|
|
152
152
|
function VoiceMessage({ isPlaying }) {
|
|
@@ -166,13 +166,13 @@ function VoiceMessage({ isPlaying }) {
|
|
|
166
166
|
</div>
|
|
167
167
|
|
|
168
168
|
<div className="!space-y-4">
|
|
169
|
-
<h3 className="text-xl font-semibold
|
|
169
|
+
<h3 className="text-fm-icon-positive! text-xl font-semibold">
|
|
170
170
|
Live Preview
|
|
171
171
|
</h3>
|
|
172
|
-
<div className="flex h-32 items-center justify-center rounded-lg border
|
|
173
|
-
<div className="flex items-center gap-3 rounded-lg border
|
|
174
|
-
<VoicePlayingIcon className="h-5 w-5
|
|
175
|
-
<span className="font-medium
|
|
172
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex h-32 items-center justify-center rounded-lg border">
|
|
173
|
+
<div className="border-fm-icon-positive/20 bg-fm-icon-positive/10 flex items-center gap-3 rounded-lg border px-4 py-2">
|
|
174
|
+
<VoicePlayingIcon className="text-fm-icon-positive h-5 w-5" />
|
|
175
|
+
<span className="text-fm-icon-positive font-medium">
|
|
176
176
|
Now Playing
|
|
177
177
|
</span>
|
|
178
178
|
</div>
|
|
@@ -183,122 +183,130 @@ function VoiceMessage({ isPlaying }) {
|
|
|
183
183
|
|
|
184
184
|
{/* Props Documentation */}
|
|
185
185
|
<div className="!space-y-8">
|
|
186
|
-
<h2 className="text-center text-3xl font-bold
|
|
186
|
+
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
187
187
|
Props & Configuration
|
|
188
188
|
</h2>
|
|
189
189
|
|
|
190
|
-
<div className="overflow-hidden rounded-lg border
|
|
191
|
-
<div className="bg-
|
|
192
|
-
<h3 className="text-xl font-semibold
|
|
190
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
191
|
+
<div className="bg-fm-surface-secondary p-4">
|
|
192
|
+
<h3 className="text-fm-icon-active! text-xl font-semibold">
|
|
193
|
+
Props
|
|
194
|
+
</h3>
|
|
193
195
|
</div>
|
|
194
196
|
<table className="!my-0 w-full">
|
|
195
|
-
<thead className="bg-
|
|
196
|
-
<tr className="border-
|
|
197
|
-
<th className="px-6 py-4 text-left text-sm font-semibold
|
|
197
|
+
<thead className="bg-fm-surface-secondary">
|
|
198
|
+
<tr className="border-fm-divider-secondary border-b">
|
|
199
|
+
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
198
200
|
Prop
|
|
199
201
|
</th>
|
|
200
|
-
<th className="px-6 py-4 text-left text-sm font-semibold
|
|
202
|
+
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
201
203
|
Type
|
|
202
204
|
</th>
|
|
203
|
-
<th className="px-6 py-4 text-left text-sm font-semibold
|
|
205
|
+
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
204
206
|
Default
|
|
205
207
|
</th>
|
|
206
|
-
<th className="px-6 py-4 text-left text-sm font-semibold
|
|
208
|
+
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
207
209
|
Description
|
|
208
210
|
</th>
|
|
209
211
|
</tr>
|
|
210
212
|
</thead>
|
|
211
213
|
<tbody>
|
|
212
214
|
{" "}
|
|
213
|
-
<tr className="
|
|
214
|
-
<td className="px-6 py-4 font-mono text-sm
|
|
215
|
+
<tr className="bg-fm-surface-secondary!">
|
|
216
|
+
<td className="text-fm-icon-info! px-6 py-4 font-mono text-sm">
|
|
215
217
|
withAccessibility
|
|
216
218
|
</td>
|
|
217
|
-
<td className="px-6 py-4 text-sm
|
|
219
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
218
220
|
boolean
|
|
219
221
|
</td>
|
|
220
|
-
<td className="px-6 py-4 text-sm
|
|
222
|
+
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
221
223
|
true
|
|
222
224
|
</td>
|
|
223
|
-
<td className="px-6 py-4 text-sm
|
|
225
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
224
226
|
Whether to wrap the icon with accessibility feature
|
|
225
227
|
</td>
|
|
226
228
|
</tr>
|
|
227
|
-
<tr className="border-
|
|
228
|
-
<td className="px-6 py-4 font-mono text-sm
|
|
229
|
+
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
230
|
+
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
229
231
|
height
|
|
230
232
|
</td>
|
|
231
|
-
<td className="px-6 py-4 text-sm
|
|
233
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
232
234
|
number | string
|
|
233
235
|
</td>
|
|
234
|
-
<td className="px-6 py-4 text-sm
|
|
235
|
-
|
|
236
|
+
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
237
|
+
24
|
|
238
|
+
</td>
|
|
239
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
236
240
|
Height of the icon in pixels
|
|
237
241
|
</td>
|
|
238
242
|
</tr>
|
|
239
|
-
<tr className="border-
|
|
240
|
-
<td className="px-6 py-4 font-mono text-sm
|
|
243
|
+
<tr className="border-fm-divider-tertiary border-b">
|
|
244
|
+
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
241
245
|
stroke
|
|
242
246
|
</td>
|
|
243
|
-
<td className="px-6 py-4 text-sm
|
|
247
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
244
248
|
string
|
|
245
249
|
</td>
|
|
246
|
-
<td className="px-6 py-4 text-sm
|
|
250
|
+
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
247
251
|
currentColor
|
|
248
252
|
</td>
|
|
249
|
-
<td className="px-6 py-4 text-sm
|
|
253
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
250
254
|
Stroke color of the audio bars
|
|
251
255
|
</td>
|
|
252
256
|
</tr>
|
|
253
|
-
<tr className="border-
|
|
254
|
-
<td className="px-6 py-4 font-mono text-sm
|
|
257
|
+
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
258
|
+
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
255
259
|
strokeWidth
|
|
256
260
|
</td>
|
|
257
|
-
<td className="px-6 py-4 text-sm
|
|
261
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
258
262
|
string | number
|
|
259
263
|
</td>
|
|
260
|
-
<td className="px-6 py-4 text-sm
|
|
264
|
+
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
261
265
|
1.5
|
|
262
266
|
</td>
|
|
263
|
-
<td className="px-6 py-4 text-sm
|
|
267
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
264
268
|
Width of the audio bar strokes
|
|
265
269
|
</td>
|
|
266
270
|
</tr>
|
|
267
|
-
<tr className="border-
|
|
268
|
-
<td className="px-6 py-4 font-mono text-sm
|
|
271
|
+
<tr className="border-fm-divider-tertiary border-b">
|
|
272
|
+
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
269
273
|
strokeLinecap
|
|
270
274
|
</td>
|
|
271
|
-
<td className="px-6 py-4 text-sm
|
|
275
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
272
276
|
string
|
|
273
277
|
</td>
|
|
274
|
-
<td className="px-6 py-4 text-sm
|
|
278
|
+
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
275
279
|
square
|
|
276
280
|
</td>
|
|
277
|
-
<td className="px-6 py-4 text-sm
|
|
281
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
278
282
|
Line cap style (square for clean bar edges)
|
|
279
283
|
</td>
|
|
280
284
|
</tr>
|
|
281
|
-
<tr className="border-
|
|
282
|
-
<td className="px-6 py-4 font-mono text-sm
|
|
285
|
+
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
286
|
+
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
283
287
|
className
|
|
284
288
|
</td>
|
|
285
|
-
<td className="px-6 py-4 text-sm
|
|
289
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
286
290
|
string
|
|
287
291
|
</td>
|
|
288
|
-
<td className="px-6 py-4 text-sm
|
|
289
|
-
|
|
292
|
+
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
293
|
+
-
|
|
294
|
+
</td>
|
|
295
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
290
296
|
CSS classes for styling and animations
|
|
291
297
|
</td>
|
|
292
298
|
</tr>
|
|
293
|
-
<tr className="
|
|
294
|
-
<td className="px-6 py-4 font-mono text-sm
|
|
299
|
+
<tr className="bg-fm-surface-secondary!">
|
|
300
|
+
<td className="text-fm-icon-positive! px-6 py-4 font-mono text-sm">
|
|
295
301
|
...svgProps
|
|
296
302
|
</td>
|
|
297
|
-
<td className="px-6 py-4 text-sm
|
|
303
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
298
304
|
SVGProps
|
|
299
305
|
</td>
|
|
300
|
-
<td className="px-6 py-4 text-sm
|
|
301
|
-
|
|
306
|
+
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
307
|
+
-
|
|
308
|
+
</td>
|
|
309
|
+
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
302
310
|
All standard SVG element props
|
|
303
311
|
</td>
|
|
304
312
|
</tr>
|
|
@@ -306,8 +314,8 @@ function VoiceMessage({ isPlaying }) {
|
|
|
306
314
|
</table>
|
|
307
315
|
</div>
|
|
308
316
|
|
|
309
|
-
<div className="
|
|
310
|
-
<div className="flex items-center gap-2 text-sm
|
|
317
|
+
<div className="border-fm-icon-positive/20 bg-fm-icon-positive/10 rounded-lg border p-4">
|
|
318
|
+
<div className="text-fm-icon-positive flex items-center gap-2 text-sm">
|
|
311
319
|
<VoicePlayingIcon className="h-4 w-4" />
|
|
312
320
|
<span>
|
|
313
321
|
<strong>Animation Tip:</strong> Use CSS animations or
|
|
@@ -320,50 +328,62 @@ function VoiceMessage({ isPlaying }) {
|
|
|
320
328
|
|
|
321
329
|
{/* Size Variations */}
|
|
322
330
|
<div className="!space-y-8">
|
|
323
|
-
<h2 className="text-center text-3xl font-bold
|
|
331
|
+
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
324
332
|
Size Variations
|
|
325
333
|
</h2>
|
|
326
|
-
<div className="rounded-lg border
|
|
334
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
327
335
|
<div className="!space-y-6">
|
|
328
336
|
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
329
337
|
<div className="!space-y-4">
|
|
330
|
-
<h3 className="text-lg font-semibold
|
|
338
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
331
339
|
Standard Sizes
|
|
332
340
|
</h3>
|
|
333
|
-
<div className="flex items-end gap-6 rounded-lg
|
|
341
|
+
<div className="bg-fm-surface-secondary flex items-end gap-6 rounded-lg p-6">
|
|
334
342
|
<div className="text-center">
|
|
335
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-3 w-3
|
|
336
|
-
<span className="text-
|
|
343
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-3 w-3" />
|
|
344
|
+
<span className="text-fm-tertiary text-xs">
|
|
345
|
+
12px
|
|
346
|
+
</span>
|
|
337
347
|
</div>
|
|
338
348
|
<div className="text-center">
|
|
339
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-4 w-4
|
|
340
|
-
<span className="text-
|
|
349
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-4 w-4" />
|
|
350
|
+
<span className="text-fm-tertiary text-xs">
|
|
351
|
+
16px
|
|
352
|
+
</span>
|
|
341
353
|
</div>
|
|
342
354
|
<div className="text-center">
|
|
343
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-5 w-5
|
|
344
|
-
<span className="text-
|
|
355
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-5 w-5" />
|
|
356
|
+
<span className="text-fm-tertiary text-xs">
|
|
357
|
+
20px
|
|
358
|
+
</span>
|
|
345
359
|
</div>
|
|
346
360
|
<div className="text-center">
|
|
347
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-6 w-6
|
|
348
|
-
<span className="text-
|
|
361
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-6 w-6" />
|
|
362
|
+
<span className="text-fm-tertiary text-xs">
|
|
363
|
+
24px
|
|
364
|
+
</span>
|
|
349
365
|
</div>
|
|
350
366
|
<div className="text-center">
|
|
351
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-8 w-8
|
|
352
|
-
<span className="text-
|
|
367
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-8 w-8" />
|
|
368
|
+
<span className="text-fm-tertiary text-xs">
|
|
369
|
+
32px
|
|
370
|
+
</span>
|
|
353
371
|
</div>
|
|
354
372
|
<div className="text-center">
|
|
355
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-12 w-12
|
|
356
|
-
<span className="text-
|
|
373
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-12 w-12" />
|
|
374
|
+
<span className="text-fm-tertiary text-xs">
|
|
375
|
+
48px
|
|
376
|
+
</span>
|
|
357
377
|
</div>
|
|
358
378
|
</div>
|
|
359
379
|
</div>
|
|
360
380
|
|
|
361
381
|
<div className="!space-y-4">
|
|
362
|
-
<h3 className="text-lg font-semibold
|
|
382
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
363
383
|
Code Example
|
|
364
384
|
</h3>
|
|
365
|
-
<div className="rounded-lg
|
|
366
|
-
<pre className="overflow-x-auto text-sm
|
|
385
|
+
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
386
|
+
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
367
387
|
{`// Small (16px) - inline indicators
|
|
368
388
|
<VoicePlayingIcon className="h-4 w-4" />
|
|
369
389
|
|
|
@@ -385,56 +405,56 @@ function VoiceMessage({ isPlaying }) {
|
|
|
385
405
|
|
|
386
406
|
{/* Color Variations */}
|
|
387
407
|
<div className="!space-y-8">
|
|
388
|
-
<h2 className="text-center text-3xl font-bold
|
|
408
|
+
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
389
409
|
Color Variations
|
|
390
410
|
</h2>
|
|
391
411
|
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
392
412
|
<div className="!space-y-4">
|
|
393
|
-
<h3 className="text-lg font-semibold
|
|
413
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
394
414
|
Semantic Colors
|
|
395
415
|
</h3>
|
|
396
|
-
<div className="!space-y-4 rounded-lg border
|
|
416
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
397
417
|
<div className="flex items-center gap-4">
|
|
398
|
-
<VoicePlayingIcon className="h-6 w-6
|
|
418
|
+
<VoicePlayingIcon className="text-fm-icon-positive h-6 w-6" />
|
|
399
419
|
<div>
|
|
400
|
-
<div className="text-sm font-medium
|
|
420
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
401
421
|
Voice Active
|
|
402
422
|
</div>
|
|
403
|
-
<div className="text-
|
|
404
|
-
text-
|
|
423
|
+
<div className="text-fm-tertiary text-xs">
|
|
424
|
+
text-fm-icon-positive
|
|
405
425
|
</div>
|
|
406
426
|
</div>
|
|
407
427
|
</div>
|
|
408
428
|
<div className="flex items-center gap-4">
|
|
409
|
-
<VoicePlayingIcon className="h-6 w-6
|
|
429
|
+
<VoicePlayingIcon className="text-fm-icon-info h-6 w-6" />
|
|
410
430
|
<div>
|
|
411
|
-
<div className="text-sm font-medium
|
|
431
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
412
432
|
Audio Playback
|
|
413
433
|
</div>
|
|
414
|
-
<div className="text-
|
|
415
|
-
text-
|
|
434
|
+
<div className="text-fm-tertiary text-xs">
|
|
435
|
+
text-fm-icon-info
|
|
416
436
|
</div>
|
|
417
437
|
</div>
|
|
418
438
|
</div>
|
|
419
439
|
<div className="flex items-center gap-4">
|
|
420
|
-
<VoicePlayingIcon className="h-6 w-6
|
|
440
|
+
<VoicePlayingIcon className="text-fm-secondary-600 h-6 w-6" />
|
|
421
441
|
<div>
|
|
422
|
-
<div className="text-sm font-medium
|
|
442
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
423
443
|
Live Recording
|
|
424
444
|
</div>
|
|
425
|
-
<div className="text-
|
|
426
|
-
text-
|
|
445
|
+
<div className="text-fm-tertiary text-xs">
|
|
446
|
+
text-fm-secondary-600
|
|
427
447
|
</div>
|
|
428
448
|
</div>
|
|
429
449
|
</div>
|
|
430
450
|
<div className="flex items-center gap-4">
|
|
431
|
-
<VoicePlayingIcon className="h-6 w-6
|
|
451
|
+
<VoicePlayingIcon className="text-fm-icon-warning h-6 w-6" />
|
|
432
452
|
<div>
|
|
433
|
-
<div className="text-sm font-medium
|
|
453
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
434
454
|
Music Playing
|
|
435
455
|
</div>
|
|
436
|
-
<div className="text-
|
|
437
|
-
text-
|
|
456
|
+
<div className="text-fm-tertiary text-xs">
|
|
457
|
+
text-fm-icon-warning
|
|
438
458
|
</div>
|
|
439
459
|
</div>
|
|
440
460
|
</div>
|
|
@@ -442,11 +462,11 @@ function VoiceMessage({ isPlaying }) {
|
|
|
442
462
|
</div>
|
|
443
463
|
|
|
444
464
|
<div className="!space-y-4">
|
|
445
|
-
<h3 className="text-lg font-semibold
|
|
465
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
446
466
|
Animation Examples
|
|
447
467
|
</h3>
|
|
448
|
-
<div className="rounded-lg
|
|
449
|
-
<pre className="overflow-x-auto text-sm
|
|
468
|
+
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
469
|
+
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
450
470
|
{`// Pulsing animation for active voice
|
|
451
471
|
<VoicePlayingIcon
|
|
452
472
|
className="h-6 w-6 text-emerald-400 animate-pulse"
|
|
@@ -479,105 +499,105 @@ function VoiceMessage({ isPlaying }) {
|
|
|
479
499
|
|
|
480
500
|
{/* Usage Examples */}
|
|
481
501
|
<div className="!space-y-8">
|
|
482
|
-
<h2 className="text-center text-3xl font-bold
|
|
502
|
+
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
483
503
|
Usage Examples
|
|
484
504
|
</h2>
|
|
485
505
|
|
|
486
506
|
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
487
507
|
{/* Voice Message Interface */}
|
|
488
508
|
<div className="!space-y-4">
|
|
489
|
-
<h3 className="text-lg font-semibold
|
|
509
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
490
510
|
Voice Message Player
|
|
491
511
|
</h3>
|
|
492
512
|
<div className="!space-y-4">
|
|
493
|
-
<div className="rounded-lg border
|
|
513
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
494
514
|
<div className="space-y-4">
|
|
495
|
-
<div className="flex items-center gap-3 rounded-lg border
|
|
496
|
-
<div className="flex h-10 w-10 items-center justify-center rounded-full
|
|
515
|
+
<div className="border-fm-icon-positive/20 bg-fm-icon-positive/10 flex items-center gap-3 rounded-lg border p-3">
|
|
516
|
+
<div className="bg-fm-icon-positive/20 flex h-10 w-10 items-center justify-center rounded-full">
|
|
497
517
|
<span className="text-sm">👤</span>
|
|
498
518
|
</div>
|
|
499
519
|
<div className="flex-1">
|
|
500
520
|
<div className="mb-1 flex items-center justify-between">
|
|
501
|
-
<span className="text-sm font-medium
|
|
521
|
+
<span className="text-fm-icon-active text-sm font-medium">
|
|
502
522
|
Sarah Connor
|
|
503
523
|
</span>
|
|
504
|
-
<span className="text-
|
|
524
|
+
<span className="text-fm-tertiary text-xs">
|
|
505
525
|
2:34
|
|
506
526
|
</span>
|
|
507
527
|
</div>
|
|
508
528
|
<div className="flex items-center gap-2">
|
|
509
|
-
<button className="
|
|
510
|
-
<VoicePlayingIcon className="h-4 w-4
|
|
529
|
+
<button className="border-fm-icon-positive/30 bg-fm-icon-positive/20 hover:bg-fm-icon-positive/30 rounded border p-1.5 transition-colors">
|
|
530
|
+
<VoicePlayingIcon className="text-fm-icon-positive h-4 w-4" />
|
|
511
531
|
</button>
|
|
512
|
-
<div className="h-1 flex-1 overflow-hidden rounded-full
|
|
532
|
+
<div className="bg-fm-surface-secondary h-1 flex-1 overflow-hidden rounded-full">
|
|
513
533
|
<div
|
|
514
|
-
className="h-full rounded-full
|
|
534
|
+
className="bg-fm-icon-positive h-full rounded-full"
|
|
515
535
|
style={{ width: "45%" }}
|
|
516
536
|
></div>
|
|
517
537
|
</div>
|
|
518
|
-
<span className="text-
|
|
538
|
+
<span className="text-fm-icon-positive text-xs">
|
|
519
539
|
0:32
|
|
520
540
|
</span>
|
|
521
541
|
</div>
|
|
522
542
|
</div>
|
|
523
543
|
</div>
|
|
524
|
-
<div className="flex items-center gap-3 rounded-lg border
|
|
525
|
-
<div className="flex h-10 w-10 items-center justify-center rounded-full
|
|
544
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-3 rounded-lg border p-3">
|
|
545
|
+
<div className="bg-fm-surface-secondary flex h-10 w-10 items-center justify-center rounded-full">
|
|
526
546
|
<span className="text-sm">👤</span>
|
|
527
547
|
</div>
|
|
528
548
|
<div className="flex-1">
|
|
529
549
|
<div className="mb-1 flex items-center justify-between">
|
|
530
|
-
<span className="text-sm font-medium
|
|
550
|
+
<span className="text-fm-icon-active text-sm font-medium">
|
|
531
551
|
John Smith
|
|
532
552
|
</span>
|
|
533
|
-
<span className="text-
|
|
553
|
+
<span className="text-fm-tertiary text-xs">
|
|
534
554
|
1:45
|
|
535
555
|
</span>
|
|
536
556
|
</div>
|
|
537
557
|
<div className="flex items-center gap-2">
|
|
538
|
-
<button className="
|
|
558
|
+
<button className="border-fm-divider-primary bg-fm-surface-secondary hover:bg-fm-divider-primary rounded border p-1.5 transition-colors">
|
|
539
559
|
<div className="relative h-4 w-4">
|
|
540
560
|
<div className="absolute inset-0 ml-1 border-y-2 border-l-4 border-y-transparent border-l-white"></div>
|
|
541
561
|
</div>
|
|
542
562
|
</button>
|
|
543
|
-
<div className="h-1 flex-1 rounded-full
|
|
563
|
+
<div className="bg-fm-surface-secondary h-1 flex-1 rounded-full">
|
|
544
564
|
<div
|
|
545
|
-
className="h-full rounded-full
|
|
565
|
+
className="bg-fm-divider-primary h-full rounded-full"
|
|
546
566
|
style={{ width: "0%" }}
|
|
547
567
|
></div>
|
|
548
568
|
</div>
|
|
549
|
-
<span className="text-
|
|
569
|
+
<span className="text-fm-tertiary text-xs">
|
|
550
570
|
1:45
|
|
551
571
|
</span>
|
|
552
572
|
</div>
|
|
553
573
|
</div>
|
|
554
574
|
</div>
|
|
555
|
-
<div className="flex items-center gap-3 rounded-lg border
|
|
556
|
-
<div className="flex h-10 w-10 items-center justify-center rounded-full
|
|
575
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-3 rounded-lg border p-3">
|
|
576
|
+
<div className="bg-fm-surface-secondary flex h-10 w-10 items-center justify-center rounded-full">
|
|
557
577
|
<span className="text-sm">👤</span>
|
|
558
578
|
</div>
|
|
559
579
|
<div className="flex-1">
|
|
560
580
|
<div className="mb-1 flex items-center justify-between">
|
|
561
|
-
<span className="text-sm font-medium
|
|
581
|
+
<span className="text-fm-icon-active text-sm font-medium">
|
|
562
582
|
Alex Johnson
|
|
563
583
|
</span>
|
|
564
|
-
<span className="text-
|
|
584
|
+
<span className="text-fm-tertiary text-xs">
|
|
565
585
|
0:58
|
|
566
586
|
</span>
|
|
567
587
|
</div>
|
|
568
588
|
<div className="flex items-center gap-2">
|
|
569
|
-
<button className="
|
|
589
|
+
<button className="border-fm-divider-primary bg-fm-surface-secondary hover:bg-fm-divider-primary rounded border p-1.5 transition-colors">
|
|
570
590
|
<div className="relative h-4 w-4">
|
|
571
591
|
<div className="absolute inset-0 ml-1 border-y-2 border-l-4 border-y-transparent border-l-white"></div>
|
|
572
592
|
</div>
|
|
573
593
|
</button>
|
|
574
|
-
<div className="h-1 flex-1 rounded-full
|
|
594
|
+
<div className="bg-fm-surface-secondary h-1 flex-1 rounded-full">
|
|
575
595
|
<div
|
|
576
|
-
className="h-full rounded-full
|
|
596
|
+
className="bg-fm-divider-primary h-full rounded-full"
|
|
577
597
|
style={{ width: "0%" }}
|
|
578
598
|
></div>
|
|
579
599
|
</div>
|
|
580
|
-
<span className="text-
|
|
600
|
+
<span className="text-fm-tertiary text-xs">
|
|
581
601
|
0:58
|
|
582
602
|
</span>
|
|
583
603
|
</div>
|
|
@@ -585,8 +605,8 @@ function VoiceMessage({ isPlaying }) {
|
|
|
585
605
|
</div>
|
|
586
606
|
</div>
|
|
587
607
|
</div>
|
|
588
|
-
<div className="rounded-lg
|
|
589
|
-
<pre className="overflow-x-auto text-sm
|
|
608
|
+
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
609
|
+
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
590
610
|
{`// Voice message player with visual feedback
|
|
591
611
|
<div className="voice-message-list">
|
|
592
612
|
{voiceMessages.map(message => (
|
|
@@ -631,33 +651,33 @@ function VoiceMessage({ isPlaying }) {
|
|
|
631
651
|
|
|
632
652
|
{/* Podcast Player */}
|
|
633
653
|
<div className="!space-y-4">
|
|
634
|
-
<h3 className="text-lg font-semibold
|
|
654
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
635
655
|
Podcast Player
|
|
636
656
|
</h3>
|
|
637
657
|
<div className="!space-y-4">
|
|
638
|
-
<div className="rounded-lg border
|
|
639
|
-
<div className="overflow-hidden rounded-lg border
|
|
640
|
-
<div className="border-
|
|
658
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
659
|
+
<div className="border-fm-divider-primary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
660
|
+
<div className="border-fm-divider-secondary border-b p-4">
|
|
641
661
|
<div className="flex items-center gap-4">
|
|
642
|
-
<div className="flex h-16 w-16 items-center justify-center rounded-lg bg-
|
|
662
|
+
<div className="from-fm-secondary-500/20 to-fm-icon-info/20 flex h-16 w-16 items-center justify-center rounded-lg bg-linear-to-br">
|
|
643
663
|
<span className="text-2xl">🎙️</span>
|
|
644
664
|
</div>
|
|
645
665
|
<div className="flex-1">
|
|
646
|
-
<h4 className="text-lg font-semibold
|
|
666
|
+
<h4 className="text-fm-icon-active text-lg font-semibold">
|
|
647
667
|
Tech Talk Daily
|
|
648
668
|
</h4>
|
|
649
|
-
<p className="text-
|
|
669
|
+
<p className="text-fm-tertiary text-sm">
|
|
650
670
|
Episode 42: AI and the Future
|
|
651
671
|
</p>
|
|
652
672
|
<div className="mt-2 flex items-center gap-2">
|
|
653
|
-
<VoicePlayingIcon className="h-4 w-4
|
|
654
|
-
<span className="text-
|
|
673
|
+
<VoicePlayingIcon className="text-fm-icon-positive h-4 w-4" />
|
|
674
|
+
<span className="text-fm-icon-positive text-xs">
|
|
655
675
|
Now Playing
|
|
656
676
|
</span>
|
|
657
|
-
<span className="text-
|
|
677
|
+
<span className="text-fm-placeholder text-xs">
|
|
658
678
|
•
|
|
659
679
|
</span>
|
|
660
|
-
<span className="text-
|
|
680
|
+
<span className="text-fm-tertiary text-xs">
|
|
661
681
|
15:32 / 45:20
|
|
662
682
|
</span>
|
|
663
683
|
</div>
|
|
@@ -665,35 +685,35 @@ function VoiceMessage({ isPlaying }) {
|
|
|
665
685
|
</div>
|
|
666
686
|
</div>
|
|
667
687
|
<div className="space-y-4 p-4">
|
|
668
|
-
<div className="h-2 w-full overflow-hidden rounded-full
|
|
688
|
+
<div className="bg-fm-surface-secondary h-2 w-full overflow-hidden rounded-full">
|
|
669
689
|
<div
|
|
670
|
-
className="h-full rounded-full
|
|
690
|
+
className="bg-fm-icon-positive h-full rounded-full"
|
|
671
691
|
style={{ width: "34%" }}
|
|
672
692
|
></div>
|
|
673
693
|
</div>
|
|
674
694
|
<div className="flex items-center justify-center gap-4">
|
|
675
|
-
<button className="rounded p-2 transition-colors
|
|
676
|
-
<div className="h-5 w-5 -translate-x-1 transform border-l-2
|
|
695
|
+
<button className="hover:bg-fm-surface-secondary rounded p-2 transition-colors">
|
|
696
|
+
<div className="border-fm-divider-contrast h-5 w-5 -translate-x-1 transform border-l-2"></div>
|
|
677
697
|
</button>
|
|
678
|
-
<button className="
|
|
679
|
-
<div className="flex h-6 w-6 items-center justify-center rounded-sm
|
|
680
|
-
<div className="mr-1 h-4 w-1 rounded
|
|
681
|
-
<div className="h-4 w-1 rounded
|
|
698
|
+
<button className="border-fm-icon-positive/30 bg-fm-icon-positive/20 hover:bg-fm-icon-positive/30 rounded-full border p-3 transition-colors">
|
|
699
|
+
<div className="bg-fm-divider-primary flex h-6 w-6 items-center justify-center rounded-sm">
|
|
700
|
+
<div className="bg-fm-surface-contrast mr-1 h-4 w-1 rounded"></div>
|
|
701
|
+
<div className="bg-fm-surface-contrast h-4 w-1 rounded"></div>
|
|
682
702
|
</div>
|
|
683
703
|
</button>
|
|
684
|
-
<button className="rounded p-2 transition-colors
|
|
685
|
-
<div className="h-5 w-5 translate-x-1 transform border-r-2
|
|
704
|
+
<button className="hover:bg-fm-surface-secondary rounded p-2 transition-colors">
|
|
705
|
+
<div className="border-fm-divider-contrast h-5 w-5 translate-x-1 transform border-r-2"></div>
|
|
686
706
|
</button>
|
|
687
707
|
</div>
|
|
688
|
-
<div className="flex items-center justify-between text-xs
|
|
708
|
+
<div className="text-fm-tertiary flex items-center justify-between text-xs">
|
|
689
709
|
<span>Previous: Episode 41</span>
|
|
690
710
|
<span>Next: Episode 43</span>
|
|
691
711
|
</div>
|
|
692
712
|
</div>
|
|
693
713
|
</div>
|
|
694
714
|
</div>
|
|
695
|
-
<div className="rounded-lg
|
|
696
|
-
<pre className="overflow-x-auto text-sm
|
|
715
|
+
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
716
|
+
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
697
717
|
{`// Podcast player with visual playback indicator
|
|
698
718
|
<div className="podcast-player">
|
|
699
719
|
<div className="episode-info">
|
|
@@ -738,59 +758,59 @@ function VoiceMessage({ isPlaying }) {
|
|
|
738
758
|
|
|
739
759
|
{/* Voice Assistant */}
|
|
740
760
|
<div className="!space-y-4">
|
|
741
|
-
<h3 className="text-lg font-semibold
|
|
761
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
742
762
|
Voice Assistant
|
|
743
763
|
</h3>
|
|
744
764
|
<div className="!space-y-4">
|
|
745
|
-
<div className="rounded-lg border
|
|
746
|
-
<div className="overflow-hidden rounded-lg border
|
|
747
|
-
<div className="border-
|
|
765
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
766
|
+
<div className="border-fm-divider-primary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
767
|
+
<div className="border-fm-divider-secondary from-fm-icon-info/20 to-fm-secondary-500/20 border-b bg-linear-to-r p-4">
|
|
748
768
|
<div className="text-center">
|
|
749
|
-
<div className="mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-full
|
|
750
|
-
<VoicePlayingIcon className="h-8 w-8
|
|
769
|
+
<div className="bg-fm-surface-secondary mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-full">
|
|
770
|
+
<VoicePlayingIcon className="text-fm-icon-info h-8 w-8" />
|
|
751
771
|
</div>
|
|
752
|
-
<h4 className="text-lg font-semibold
|
|
772
|
+
<h4 className="text-fm-icon-active text-lg font-semibold">
|
|
753
773
|
AI Assistant
|
|
754
774
|
</h4>
|
|
755
|
-
<p className="text-
|
|
775
|
+
<p className="text-fm-icon-info text-sm">
|
|
756
776
|
Listening and responding...
|
|
757
777
|
</p>
|
|
758
778
|
</div>
|
|
759
779
|
</div>
|
|
760
780
|
<div className="space-y-3 p-4">
|
|
761
|
-
<div className="rounded-lg
|
|
781
|
+
<div className="bg-fm-surface-secondary rounded-lg p-3">
|
|
762
782
|
<div className="mb-2 flex items-center gap-2">
|
|
763
|
-
<span className="text-
|
|
783
|
+
<span className="text-fm-tertiary text-xs">
|
|
764
784
|
You said:
|
|
765
785
|
</span>
|
|
766
786
|
</div>
|
|
767
|
-
<p className="text-
|
|
787
|
+
<p className="text-fm-icon-active text-sm">
|
|
768
788
|
"What's the weather like today?"
|
|
769
789
|
</p>
|
|
770
790
|
</div>
|
|
771
|
-
<div className="
|
|
791
|
+
<div className="border-fm-icon-info/20 bg-fm-icon-info/10 rounded-lg border p-3">
|
|
772
792
|
<div className="mb-2 flex items-center gap-2">
|
|
773
|
-
<VoicePlayingIcon className="h-3 w-3
|
|
774
|
-
<span className="text-
|
|
793
|
+
<VoicePlayingIcon className="text-fm-icon-info h-3 w-3" />
|
|
794
|
+
<span className="text-fm-icon-info text-xs">
|
|
775
795
|
Assistant responding:
|
|
776
796
|
</span>
|
|
777
797
|
</div>
|
|
778
|
-
<p className="text-
|
|
798
|
+
<p className="text-fm-icon-active text-sm">
|
|
779
799
|
Today's weather is sunny with a high of 72°F and
|
|
780
800
|
a low of 58°F. Perfect day for outdoor
|
|
781
801
|
activities!
|
|
782
802
|
</p>
|
|
783
803
|
</div>
|
|
784
804
|
<div className="text-center">
|
|
785
|
-
<button className="
|
|
805
|
+
<button className="border-fm-icon-info/30 bg-fm-icon-info/20 text-fm-icon-info hover:bg-fm-icon-info/30 rounded-lg border px-4 py-2 transition-colors">
|
|
786
806
|
Tap to speak again
|
|
787
807
|
</button>
|
|
788
808
|
</div>
|
|
789
809
|
</div>
|
|
790
810
|
</div>
|
|
791
811
|
</div>
|
|
792
|
-
<div className="rounded-lg
|
|
793
|
-
<pre className="overflow-x-auto text-sm
|
|
812
|
+
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
813
|
+
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
794
814
|
{`// Voice assistant with speech indicators
|
|
795
815
|
<div className="voice-assistant">
|
|
796
816
|
<div className="assistant-avatar">
|
|
@@ -837,20 +857,20 @@ function VoiceMessage({ isPlaying }) {
|
|
|
837
857
|
|
|
838
858
|
{/* Audio Recording */}
|
|
839
859
|
<div className="!space-y-4">
|
|
840
|
-
<h3 className="text-lg font-semibold
|
|
860
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
841
861
|
Audio Recording Studio
|
|
842
862
|
</h3>
|
|
843
863
|
<div className="!space-y-4">
|
|
844
|
-
<div className="rounded-lg border
|
|
845
|
-
<div className="overflow-hidden rounded-lg border
|
|
846
|
-
<div className="border-
|
|
864
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
865
|
+
<div className="border-fm-divider-primary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
866
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary border-b p-4">
|
|
847
867
|
<div className="flex items-center justify-between">
|
|
848
|
-
<h4 className="text-lg font-semibold
|
|
868
|
+
<h4 className="text-fm-icon-active text-lg font-semibold">
|
|
849
869
|
Audio Studio
|
|
850
870
|
</h4>
|
|
851
871
|
<div className="flex items-center gap-2">
|
|
852
|
-
<div className="h-3 w-3 animate-pulse rounded-full
|
|
853
|
-
<span className="text-
|
|
872
|
+
<div className="bg-fm-icon-negative h-3 w-3 animate-pulse rounded-full"></div>
|
|
873
|
+
<span className="text-fm-icon-negative text-sm">
|
|
854
874
|
Recording
|
|
855
875
|
</span>
|
|
856
876
|
</div>
|
|
@@ -858,61 +878,61 @@ function VoiceMessage({ isPlaying }) {
|
|
|
858
878
|
</div>
|
|
859
879
|
<div className="space-y-4 p-4">
|
|
860
880
|
<div className="grid grid-cols-4 gap-3">
|
|
861
|
-
<div className="
|
|
862
|
-
<VoicePlayingIcon className="mx-auto mb-2 h-6 w-6
|
|
863
|
-
<div className="text-
|
|
881
|
+
<div className="border-fm-icon-positive/20 bg-fm-icon-positive/10 rounded-lg border p-3 text-center">
|
|
882
|
+
<VoicePlayingIcon className="text-fm-icon-positive mx-auto mb-2 h-6 w-6" />
|
|
883
|
+
<div className="text-fm-icon-active text-xs">
|
|
864
884
|
Track 1
|
|
865
885
|
</div>
|
|
866
|
-
<div className="text-
|
|
886
|
+
<div className="text-fm-icon-positive text-xs">
|
|
867
887
|
Active
|
|
868
888
|
</div>
|
|
869
889
|
</div>
|
|
870
|
-
<div className="rounded-lg border
|
|
871
|
-
<VoicePlayingIcon className="mx-auto mb-2 h-6 w-6
|
|
872
|
-
<div className="text-
|
|
890
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-3 text-center">
|
|
891
|
+
<VoicePlayingIcon className="text-fm-placeholder mx-auto mb-2 h-6 w-6" />
|
|
892
|
+
<div className="text-fm-icon-active text-xs">
|
|
873
893
|
Track 2
|
|
874
894
|
</div>
|
|
875
|
-
<div className="text-
|
|
895
|
+
<div className="text-fm-placeholder text-xs">
|
|
876
896
|
Muted
|
|
877
897
|
</div>
|
|
878
898
|
</div>
|
|
879
|
-
<div className="
|
|
880
|
-
<VoicePlayingIcon className="mx-auto mb-2 h-6 w-6
|
|
881
|
-
<div className="text-
|
|
899
|
+
<div className="border-fm-secondary-500/20 bg-fm-secondary-500/10 rounded-lg border p-3 text-center">
|
|
900
|
+
<VoicePlayingIcon className="text-fm-secondary-600 mx-auto mb-2 h-6 w-6" />
|
|
901
|
+
<div className="text-fm-icon-active text-xs">
|
|
882
902
|
Track 3
|
|
883
903
|
</div>
|
|
884
|
-
<div className="text-
|
|
904
|
+
<div className="text-fm-secondary-600 text-xs">
|
|
885
905
|
Monitor
|
|
886
906
|
</div>
|
|
887
907
|
</div>
|
|
888
|
-
<div className="rounded-lg border
|
|
889
|
-
<VoicePlayingIcon className="mx-auto mb-2 h-6 w-6
|
|
890
|
-
<div className="text-
|
|
908
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-3 text-center">
|
|
909
|
+
<VoicePlayingIcon className="text-fm-placeholder mx-auto mb-2 h-6 w-6" />
|
|
910
|
+
<div className="text-fm-icon-active text-xs">
|
|
891
911
|
Track 4
|
|
892
912
|
</div>
|
|
893
|
-
<div className="text-
|
|
913
|
+
<div className="text-fm-placeholder text-xs">
|
|
894
914
|
Standby
|
|
895
915
|
</div>
|
|
896
916
|
</div>
|
|
897
917
|
</div>
|
|
898
918
|
<div className="flex items-center justify-between">
|
|
899
919
|
<div className="flex items-center gap-3">
|
|
900
|
-
<button className="
|
|
920
|
+
<button className="border-fm-icon-negative/30 bg-fm-icon-negative/20 text-fm-icon-negative hover:bg-fm-icon-negative/30 rounded border px-4 py-2 transition-colors">
|
|
901
921
|
Stop Recording
|
|
902
922
|
</button>
|
|
903
|
-
<button className="
|
|
923
|
+
<button className="border-fm-divider-primary bg-fm-surface-secondary text-fm-icon-active hover:bg-fm-divider-primary rounded border px-4 py-2 transition-colors">
|
|
904
924
|
Playback
|
|
905
925
|
</button>
|
|
906
926
|
</div>
|
|
907
|
-
<div className="text-
|
|
927
|
+
<div className="text-fm-tertiary text-sm">
|
|
908
928
|
Recording: 02:34
|
|
909
929
|
</div>
|
|
910
930
|
</div>
|
|
911
931
|
</div>
|
|
912
932
|
</div>
|
|
913
933
|
</div>
|
|
914
|
-
<div className="rounded-lg
|
|
915
|
-
<pre className="overflow-x-auto text-sm
|
|
934
|
+
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
935
|
+
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
916
936
|
{`// Multi-track audio recording studio
|
|
917
937
|
<div className="audio-studio">
|
|
918
938
|
<div className="studio-header">
|
|
@@ -960,64 +980,64 @@ function VoiceMessage({ isPlaying }) {
|
|
|
960
980
|
|
|
961
981
|
{/* Accessibility */}
|
|
962
982
|
<div className="!space-y-8">
|
|
963
|
-
<h2 className="text-center text-3xl font-bold
|
|
983
|
+
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
964
984
|
Accessibility Features
|
|
965
985
|
</h2>
|
|
966
986
|
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
967
|
-
<div className="!space-y-4 rounded-lg border
|
|
968
|
-
<h3 className="text-lg font-semibold
|
|
987
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
988
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
969
989
|
✅ Built-in Features
|
|
970
990
|
</h3>
|
|
971
|
-
<ul className="!space-y-2 text-sm
|
|
972
|
-
<li className="
|
|
991
|
+
<ul className="text-fm-secondary! !space-y-2 text-sm">
|
|
992
|
+
<li className="text-fm-secondary!">
|
|
973
993
|
Uses Radix UI AccessibleIcon wrapper
|
|
974
994
|
</li>
|
|
975
|
-
<li className="
|
|
995
|
+
<li className="text-fm-secondary!">
|
|
976
996
|
Provides screen reader label "Voice playing icon"
|
|
977
997
|
</li>
|
|
978
|
-
<li className="
|
|
998
|
+
<li className="text-fm-secondary!">
|
|
979
999
|
Supports keyboard navigation when interactive
|
|
980
1000
|
</li>
|
|
981
|
-
<li className="
|
|
1001
|
+
<li className="text-fm-secondary!">
|
|
982
1002
|
High contrast colors for visual accessibility
|
|
983
1003
|
</li>
|
|
984
|
-
<li className="
|
|
1004
|
+
<li className="text-fm-secondary!">
|
|
985
1005
|
Square strokeLinecap for crisp audio bar appearance
|
|
986
1006
|
</li>
|
|
987
1007
|
</ul>
|
|
988
1008
|
</div>
|
|
989
1009
|
|
|
990
|
-
<div className="!space-y-4 rounded-lg border
|
|
991
|
-
<h3 className="text-lg font-semibold
|
|
1010
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
1011
|
+
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
992
1012
|
💡 Best Practices
|
|
993
1013
|
</h3>
|
|
994
|
-
<ul className="!space-y-2 text-sm
|
|
995
|
-
<li className="
|
|
1014
|
+
<ul className="text-fm-secondary !space-y-2 text-sm">
|
|
1015
|
+
<li className="text-fm-secondary!">
|
|
996
1016
|
Always announce playback state changes to screen readers
|
|
997
1017
|
</li>
|
|
998
|
-
<li className="
|
|
1018
|
+
<li className="text-fm-secondary!">
|
|
999
1019
|
Provide audio level feedback for users with hearing aids
|
|
1000
1020
|
</li>
|
|
1001
|
-
<li className="
|
|
1021
|
+
<li className="text-fm-secondary!">
|
|
1002
1022
|
Use consistent animation timing for predictable behavior
|
|
1003
1023
|
</li>
|
|
1004
|
-
<li className="
|
|
1024
|
+
<li className="text-fm-secondary!">
|
|
1005
1025
|
Consider reduced motion preferences for animations
|
|
1006
1026
|
</li>
|
|
1007
|
-
<li className="
|
|
1027
|
+
<li className="text-fm-secondary!">
|
|
1008
1028
|
Pair with text labels for clearer context
|
|
1009
1029
|
</li>
|
|
1010
1030
|
</ul>
|
|
1011
1031
|
</div>
|
|
1012
1032
|
</div>
|
|
1013
1033
|
|
|
1014
|
-
<div className="rounded-lg border
|
|
1015
|
-
<h3 className="mb-4 text-lg font-semibold
|
|
1034
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
1035
|
+
<h3 className="text-fm-icon-info! mb-4 text-lg font-semibold">
|
|
1016
1036
|
Proper ARIA Implementation
|
|
1017
1037
|
</h3>
|
|
1018
1038
|
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
1019
|
-
<div className="rounded-lg
|
|
1020
|
-
<pre className="overflow-x-auto text-sm
|
|
1039
|
+
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
1040
|
+
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
1021
1041
|
{`// Voice message with playback status
|
|
1022
1042
|
<div className="voice-message">
|
|
1023
1043
|
<button
|
|
@@ -1093,13 +1113,13 @@ function VoiceMessage({ isPlaying }) {
|
|
|
1093
1113
|
</pre>
|
|
1094
1114
|
</div>
|
|
1095
1115
|
<div className="!space-y-4">
|
|
1096
|
-
<p className="text-
|
|
1116
|
+
<p className="text-fm-secondary! text-sm">
|
|
1097
1117
|
When using VoicePlayingIcon for audio interfaces, always
|
|
1098
1118
|
provide clear context about playback state and ensure
|
|
1099
1119
|
users can understand what audio is currently active.
|
|
1100
1120
|
</p>
|
|
1101
|
-
<div className="
|
|
1102
|
-
<div className="flex items-center gap-2 text-sm
|
|
1121
|
+
<div className="border-fm-icon-positive/20 bg-fm-icon-positive/10 rounded-lg border p-4">
|
|
1122
|
+
<div className="text-fm-icon-positive flex items-center gap-2 text-sm">
|
|
1103
1123
|
<VoicePlayingIcon className="h-4 w-4" />
|
|
1104
1124
|
<span>
|
|
1105
1125
|
Use aria-live regions to announce audio state
|
|
@@ -1114,50 +1134,60 @@ function VoiceMessage({ isPlaying }) {
|
|
|
1114
1134
|
|
|
1115
1135
|
{/* Related Icons */}
|
|
1116
1136
|
<div className="!space-y-8">
|
|
1117
|
-
<h2 className="text-center text-3xl font-bold
|
|
1137
|
+
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
1118
1138
|
Related Icons
|
|
1119
1139
|
</h2>
|
|
1120
1140
|
<div className="grid grid-cols-2 gap-6 md:grid-cols-4">
|
|
1121
|
-
<div className="!space-y-3 rounded-lg border
|
|
1122
|
-
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg
|
|
1123
|
-
<span className="
|
|
1141
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1142
|
+
<div className="bg-fm-icon-info/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1143
|
+
<span className="text-fm-icon-active! !text-2xl">▶️</span>
|
|
1124
1144
|
</div>
|
|
1125
1145
|
<div>
|
|
1126
|
-
<div className="font-medium
|
|
1127
|
-
|
|
1146
|
+
<div className="text-fm-icon-active font-medium">
|
|
1147
|
+
PlayIcon
|
|
1148
|
+
</div>
|
|
1149
|
+
<div className="text-fm-tertiary text-xs">
|
|
1128
1150
|
Start playback
|
|
1129
1151
|
</div>
|
|
1130
1152
|
</div>
|
|
1131
1153
|
</div>
|
|
1132
|
-
<div className="!space-y-3 rounded-lg border
|
|
1133
|
-
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg
|
|
1134
|
-
<span className="
|
|
1154
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1155
|
+
<div className="bg-fm-icon-negative/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1156
|
+
<span className="text-fm-icon-active! !text-2xl">⏸️</span>
|
|
1135
1157
|
</div>
|
|
1136
1158
|
<div>
|
|
1137
|
-
<div className="font-medium
|
|
1138
|
-
|
|
1159
|
+
<div className="text-fm-icon-active font-medium">
|
|
1160
|
+
PauseIcon
|
|
1161
|
+
</div>
|
|
1162
|
+
<div className="text-fm-tertiary text-xs">
|
|
1139
1163
|
Pause playback
|
|
1140
1164
|
</div>
|
|
1141
1165
|
</div>
|
|
1142
1166
|
</div>
|
|
1143
|
-
<div className="!space-y-3 rounded-lg border
|
|
1144
|
-
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg
|
|
1145
|
-
<span className="
|
|
1167
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1168
|
+
<div className="bg-fm-secondary-500/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1169
|
+
<span className="text-fm-icon-active! !text-2xl">🎙️</span>
|
|
1146
1170
|
</div>
|
|
1147
1171
|
<div>
|
|
1148
|
-
<div className="font-medium
|
|
1172
|
+
<div className="text-fm-icon-active font-medium">
|
|
1149
1173
|
MicrophoneIcon
|
|
1150
1174
|
</div>
|
|
1151
|
-
<div className="text-
|
|
1175
|
+
<div className="text-fm-tertiary text-xs">
|
|
1176
|
+
Voice input
|
|
1177
|
+
</div>
|
|
1152
1178
|
</div>
|
|
1153
1179
|
</div>
|
|
1154
|
-
<div className="!space-y-3 rounded-lg border
|
|
1155
|
-
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg
|
|
1156
|
-
<span className="
|
|
1180
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1181
|
+
<div className="bg-fm-icon-positive/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1182
|
+
<span className="text-fm-icon-active! !text-2xl">🔊</span>
|
|
1157
1183
|
</div>
|
|
1158
1184
|
<div>
|
|
1159
|
-
<div className="font-medium
|
|
1160
|
-
|
|
1185
|
+
<div className="text-fm-icon-active font-medium">
|
|
1186
|
+
VolumeIcon
|
|
1187
|
+
</div>
|
|
1188
|
+
<div className="text-fm-tertiary text-xs">
|
|
1189
|
+
Audio levels
|
|
1190
|
+
</div>
|
|
1161
1191
|
</div>
|
|
1162
1192
|
</div>
|
|
1163
1193
|
</div>
|
|
@@ -1165,15 +1195,15 @@ function VoiceMessage({ isPlaying }) {
|
|
|
1165
1195
|
</div>
|
|
1166
1196
|
|
|
1167
1197
|
{/* Footer */}
|
|
1168
|
-
<div className="border-
|
|
1198
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary border-t backdrop-blur-xl">
|
|
1169
1199
|
<div className="!mx-auto max-w-7xl px-6 py-8">
|
|
1170
1200
|
<div className="!space-y-4 text-center">
|
|
1171
|
-
<p className="
|
|
1201
|
+
<p className="text-fm-tertiary!">
|
|
1172
1202
|
VoicePlayingIcon is part of the Aural UI icon library, built
|
|
1173
1203
|
with accessibility and audio interface best practices in
|
|
1174
1204
|
mind.
|
|
1175
1205
|
</p>
|
|
1176
|
-
<p className="text-
|
|
1206
|
+
<p className="text-fm-placeholder! text-sm">
|
|
1177
1207
|
All icons use Radix UI's AccessibleIcon for screen reader
|
|
1178
1208
|
compatibility and follow WCAG guidelines for audio controls
|
|
1179
1209
|
and playback states.
|
|
@@ -1232,20 +1262,20 @@ const storyParameters = {
|
|
|
1232
1262
|
backgrounds: {
|
|
1233
1263
|
default: "dark",
|
|
1234
1264
|
values: [
|
|
1235
|
-
{ name: "dark", value: "
|
|
1236
|
-
{ name: "darker", value: "
|
|
1265
|
+
{ name: "dark", value: "var(--color-fm-surface-primary)" },
|
|
1266
|
+
{ name: "darker", value: "var(--color-fm-neutral-0)" },
|
|
1237
1267
|
],
|
|
1238
1268
|
},
|
|
1239
1269
|
}
|
|
1240
1270
|
|
|
1241
1271
|
export const Default: Story = {
|
|
1242
1272
|
args: {
|
|
1243
|
-
className: "h-8 w-8 text-
|
|
1273
|
+
className: "h-8 w-8 text-fm-icon-positive",
|
|
1244
1274
|
withAccessibility: true,
|
|
1245
1275
|
},
|
|
1246
1276
|
parameters: storyParameters,
|
|
1247
1277
|
render: (args) => (
|
|
1248
|
-
<div className="flex h-32 min-h-dvh items-center justify-center rounded-lg bg-
|
|
1278
|
+
<div className="from-fm-surface-primary to-fm-surface-secondary flex h-32 min-h-dvh items-center justify-center rounded-lg bg-linear-to-br">
|
|
1249
1279
|
<VoicePlayingIcon {...args} />
|
|
1250
1280
|
</div>
|
|
1251
1281
|
),
|
|
@@ -1262,30 +1292,30 @@ export const SizeVariations: Story = {
|
|
|
1262
1292
|
},
|
|
1263
1293
|
},
|
|
1264
1294
|
render: () => (
|
|
1265
|
-
<div className="flex h-64 min-h-dvh items-center justify-center gap-8 rounded-lg bg-
|
|
1295
|
+
<div className="from-fm-surface-primary to-fm-surface-secondary flex h-64 min-h-dvh items-center justify-center gap-8 rounded-lg bg-linear-to-br p-8">
|
|
1266
1296
|
<div className="text-center">
|
|
1267
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-3 w-3
|
|
1268
|
-
<span className="text-
|
|
1297
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-3 w-3" />
|
|
1298
|
+
<span className="text-fm-tertiary text-xs">12px</span>
|
|
1269
1299
|
</div>
|
|
1270
1300
|
<div className="text-center">
|
|
1271
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-4 w-4
|
|
1272
|
-
<span className="text-
|
|
1301
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-4 w-4" />
|
|
1302
|
+
<span className="text-fm-tertiary text-xs">16px</span>
|
|
1273
1303
|
</div>
|
|
1274
1304
|
<div className="text-center">
|
|
1275
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-5 w-5
|
|
1276
|
-
<span className="text-
|
|
1305
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-5 w-5" />
|
|
1306
|
+
<span className="text-fm-tertiary text-xs">20px</span>
|
|
1277
1307
|
</div>
|
|
1278
1308
|
<div className="text-center">
|
|
1279
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-6 w-6
|
|
1280
|
-
<span className="text-
|
|
1309
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-6 w-6" />
|
|
1310
|
+
<span className="text-fm-tertiary text-xs">24px</span>
|
|
1281
1311
|
</div>
|
|
1282
1312
|
<div className="text-center">
|
|
1283
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-8 w-8
|
|
1284
|
-
<span className="text-
|
|
1313
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-8 w-8" />
|
|
1314
|
+
<span className="text-fm-tertiary text-xs">32px</span>
|
|
1285
1315
|
</div>
|
|
1286
1316
|
<div className="text-center">
|
|
1287
|
-
<VoicePlayingIcon className="!mx-auto mb-2 h-12 w-12
|
|
1288
|
-
<span className="text-
|
|
1317
|
+
<VoicePlayingIcon className="text-fm-icon-positive !mx-auto mb-2 h-12 w-12" />
|
|
1318
|
+
<span className="text-fm-tertiary text-xs">48px</span>
|
|
1289
1319
|
</div>
|
|
1290
1320
|
</div>
|
|
1291
1321
|
),
|
|
@@ -1302,34 +1332,46 @@ export const ColorVariations: Story = {
|
|
|
1302
1332
|
},
|
|
1303
1333
|
},
|
|
1304
1334
|
render: () => (
|
|
1305
|
-
<div className="grid min-h-dvh grid-cols-2 items-center justify-center gap-6 rounded-lg bg-
|
|
1335
|
+
<div className="from-fm-surface-primary to-fm-surface-secondary grid min-h-dvh grid-cols-2 items-center justify-center gap-6 rounded-lg bg-linear-to-br p-8 md:grid-cols-4">
|
|
1306
1336
|
<div className="text-center">
|
|
1307
|
-
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border
|
|
1308
|
-
<VoicePlayingIcon className="h-8 w-8
|
|
1337
|
+
<div className="border-fm-icon-positive/30 bg-fm-icon-positive/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1338
|
+
<VoicePlayingIcon className="text-fm-icon-positive h-8 w-8" />
|
|
1339
|
+
</div>
|
|
1340
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
1341
|
+
Voice Active
|
|
1342
|
+
</div>
|
|
1343
|
+
<div className="text-fm-icon-positive text-xs">
|
|
1344
|
+
text-fm-icon-positive
|
|
1309
1345
|
</div>
|
|
1310
|
-
<div className="text-sm font-medium text-white">Voice Active</div>
|
|
1311
|
-
<div className="text-xs text-emerald-400">text-emerald-400</div>
|
|
1312
1346
|
</div>
|
|
1313
1347
|
<div className="text-center">
|
|
1314
|
-
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border
|
|
1315
|
-
<VoicePlayingIcon className="h-8 w-8
|
|
1348
|
+
<div className="border-fm-icon-info/30 bg-fm-icon-info/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1349
|
+
<VoicePlayingIcon className="text-fm-icon-info h-8 w-8" />
|
|
1316
1350
|
</div>
|
|
1317
|
-
<div className="text-sm font-medium
|
|
1318
|
-
|
|
1351
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
1352
|
+
Audio Playback
|
|
1353
|
+
</div>
|
|
1354
|
+
<div className="text-fm-icon-info text-xs">text-fm-icon-info</div>
|
|
1319
1355
|
</div>
|
|
1320
1356
|
<div className="text-center">
|
|
1321
|
-
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border
|
|
1322
|
-
<VoicePlayingIcon className="h-8 w-8
|
|
1357
|
+
<div className="border-fm-secondary-500/30 bg-fm-secondary-500/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1358
|
+
<VoicePlayingIcon className="text-fm-secondary-600 h-8 w-8" />
|
|
1359
|
+
</div>
|
|
1360
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
1361
|
+
Live Recording
|
|
1362
|
+
</div>
|
|
1363
|
+
<div className="text-fm-secondary-600 text-xs">
|
|
1364
|
+
text-fm-secondary-600
|
|
1323
1365
|
</div>
|
|
1324
|
-
<div className="text-sm font-medium text-white">Live Recording</div>
|
|
1325
|
-
<div className="text-xs text-purple-400">text-purple-400</div>
|
|
1326
1366
|
</div>
|
|
1327
1367
|
<div className="text-center">
|
|
1328
|
-
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border
|
|
1329
|
-
<VoicePlayingIcon className="h-8 w-8
|
|
1368
|
+
<div className="border-fm-icon-warning/30 bg-fm-icon-warning/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1369
|
+
<VoicePlayingIcon className="text-fm-icon-warning h-8 w-8" />
|
|
1370
|
+
</div>
|
|
1371
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
1372
|
+
Music Playing
|
|
1330
1373
|
</div>
|
|
1331
|
-
<div className="text-
|
|
1332
|
-
<div className="text-xs text-orange-400">text-orange-400</div>
|
|
1374
|
+
<div className="text-fm-icon-warning text-xs">text-fm-icon-warning</div>
|
|
1333
1375
|
</div>
|
|
1334
1376
|
</div>
|
|
1335
1377
|
),
|
|
@@ -1346,25 +1388,27 @@ export const UsageExamples: Story = {
|
|
|
1346
1388
|
},
|
|
1347
1389
|
},
|
|
1348
1390
|
render: () => (
|
|
1349
|
-
<div className="min-h-dvh !space-y-8 rounded-lg bg-
|
|
1391
|
+
<div className="from-fm-surface-primary to-fm-surface-secondary min-h-dvh !space-y-8 rounded-lg bg-linear-to-br p-8">
|
|
1350
1392
|
{/* Voice Message */}
|
|
1351
1393
|
<div className="!space-y-2">
|
|
1352
|
-
<h3 className="text-sm font-medium
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1394
|
+
<h3 className="text-fm-icon-active text-sm font-medium">
|
|
1395
|
+
Voice Message Player
|
|
1396
|
+
</h3>
|
|
1397
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4">
|
|
1398
|
+
<div className="border-fm-icon-positive/20 bg-fm-icon-positive/10 flex items-center gap-3 rounded-lg border p-3">
|
|
1399
|
+
<button className="border-fm-icon-positive/30 bg-fm-icon-positive/20 hover:bg-fm-icon-positive/30 rounded border p-1.5 transition-colors">
|
|
1400
|
+
<VoicePlayingIcon className="text-fm-icon-positive h-4 w-4" />
|
|
1357
1401
|
</button>
|
|
1358
1402
|
<div className="flex-1">
|
|
1359
1403
|
<div className="mb-1 flex items-center justify-between">
|
|
1360
|
-
<span className="text-sm font-medium
|
|
1404
|
+
<span className="text-fm-icon-active text-sm font-medium">
|
|
1361
1405
|
Voice Message
|
|
1362
1406
|
</span>
|
|
1363
|
-
<span className="text-
|
|
1407
|
+
<span className="text-fm-tertiary text-xs">2:34</span>
|
|
1364
1408
|
</div>
|
|
1365
|
-
<div className="h-1 overflow-hidden rounded-full
|
|
1409
|
+
<div className="bg-fm-surface-secondary h-1 overflow-hidden rounded-full">
|
|
1366
1410
|
<div
|
|
1367
|
-
className="h-full rounded-full
|
|
1411
|
+
className="bg-fm-icon-positive h-full rounded-full"
|
|
1368
1412
|
style={{ width: "45%" }}
|
|
1369
1413
|
></div>
|
|
1370
1414
|
</div>
|
|
@@ -1375,20 +1419,24 @@ export const UsageExamples: Story = {
|
|
|
1375
1419
|
|
|
1376
1420
|
{/* Podcast Player */}
|
|
1377
1421
|
<div className="!space-y-2">
|
|
1378
|
-
<h3 className="text-sm font-medium
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1422
|
+
<h3 className="text-fm-icon-active text-sm font-medium">
|
|
1423
|
+
Podcast Player
|
|
1424
|
+
</h3>
|
|
1425
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4">
|
|
1426
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-3 rounded border p-3">
|
|
1427
|
+
<div className="bg-fm-secondary-500/20 flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1382
1428
|
<span className="text-lg">🎙️</span>
|
|
1383
1429
|
</div>
|
|
1384
1430
|
<div className="flex-1">
|
|
1385
|
-
<div className="text-sm font-medium
|
|
1431
|
+
<div className="text-fm-icon-active text-sm font-medium">
|
|
1386
1432
|
Tech Talk Daily
|
|
1387
1433
|
</div>
|
|
1388
1434
|
<div className="mt-1 flex items-center gap-2">
|
|
1389
|
-
<VoicePlayingIcon className="h-4 w-4
|
|
1390
|
-
<span className="text-
|
|
1391
|
-
|
|
1435
|
+
<VoicePlayingIcon className="text-fm-icon-positive h-4 w-4" />
|
|
1436
|
+
<span className="text-fm-icon-positive text-xs">
|
|
1437
|
+
Now Playing
|
|
1438
|
+
</span>
|
|
1439
|
+
<span className="text-fm-tertiary text-xs">15:32 / 45:20</span>
|
|
1392
1440
|
</div>
|
|
1393
1441
|
</div>
|
|
1394
1442
|
</div>
|
|
@@ -1411,12 +1459,12 @@ export const Playground: Story = {
|
|
|
1411
1459
|
args: {
|
|
1412
1460
|
width: 24,
|
|
1413
1461
|
height: 24,
|
|
1414
|
-
className: "text-
|
|
1462
|
+
className: "text-fm-icon-positive",
|
|
1415
1463
|
strokeLinecap: "square",
|
|
1416
1464
|
},
|
|
1417
1465
|
render: (args) => (
|
|
1418
|
-
<div className="flex h-64 min-h-dvh items-center justify-center rounded-lg bg-
|
|
1419
|
-
<div className="rounded-lg border
|
|
1466
|
+
<div className="from-fm-surface-primary to-fm-surface-secondary flex h-64 min-h-dvh items-center justify-center rounded-lg bg-linear-to-br">
|
|
1467
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
1420
1468
|
<VoicePlayingIcon {...args} />
|
|
1421
1469
|
</div>
|
|
1422
1470
|
</div>
|