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,21 @@
|
|
|
1
1
|
import React from "react"
|
|
2
2
|
import type { Meta, StoryObj } from "@storybook/react-vite"
|
|
3
3
|
|
|
4
|
+
import { MusicalNoteIcon } from "src/ui/icons/musical-note-icon"
|
|
5
|
+
import { PauseIcon } from "src/ui/icons/pause-icon"
|
|
6
|
+
import { SpinnerGradientIcon } from "src/ui/icons/spinner-gradient-icon"
|
|
7
|
+
import { VoicePlayingIcon } from "src/ui/icons/voice-playing-icon"
|
|
8
|
+
import {
|
|
9
|
+
IconAnimatedStates,
|
|
10
|
+
IconColorVariations,
|
|
11
|
+
IconDefaultCanvas,
|
|
12
|
+
IconPlaygroundCanvas,
|
|
13
|
+
IconSizeVariations,
|
|
14
|
+
IconUsageCanvas,
|
|
15
|
+
IconUsageSection,
|
|
16
|
+
} from "src/ui/story-spec/icons/icon-story-canvas"
|
|
17
|
+
import { AuralIconDocsPage } from "src/ui/story-spec/icons/icon-story-docs-page"
|
|
18
|
+
|
|
4
19
|
import { AudioBarIcon } from "."
|
|
5
20
|
|
|
6
21
|
const meta: Meta<typeof AudioBarIcon> = {
|
|
@@ -18,1005 +33,78 @@ const meta: Meta<typeof AudioBarIcon> = {
|
|
|
18
33
|
},
|
|
19
34
|
docs: {
|
|
20
35
|
page: () => (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
padding: 0 ;
|
|
33
|
-
margin: 0 ;
|
|
34
|
-
background: transparent ;
|
|
35
|
-
}
|
|
36
|
-
.docs-story {
|
|
37
|
-
background: transparent ;
|
|
38
|
-
}
|
|
39
|
-
.sbdocs {
|
|
40
|
-
background: transparent ;
|
|
41
|
-
}
|
|
42
|
-
body {
|
|
43
|
-
background: var(--color-fm-surface-primary) ;
|
|
44
|
-
}
|
|
45
|
-
#storybook-docs {
|
|
46
|
-
background: var(--color-fm-surface-primary) ;
|
|
47
|
-
}
|
|
48
|
-
.sbdocs-preview {
|
|
49
|
-
background: transparent ;
|
|
50
|
-
border: none ;
|
|
51
|
-
}
|
|
52
|
-
.sbdocs-h1, .sbdocs-h2, .sbdocs-h3, .sbdocs-h4, .sbdocs-h5, .sbdocs-h6 {
|
|
53
|
-
color: var(--color-fm-icon-active) ;
|
|
54
|
-
}
|
|
55
|
-
.sbdocs-p, .sbdocs-li {
|
|
56
|
-
color: var(--color-fm-secondary) ;
|
|
57
|
-
}
|
|
58
|
-
.sbdocs-code {
|
|
59
|
-
background: var(--color-fm-surface-secondary) ;
|
|
60
|
-
color: var(--color-fm-secondary-500) ;
|
|
61
|
-
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
62
|
-
}
|
|
63
|
-
.sbdocs-pre {
|
|
64
|
-
background: var(--color-fm-surface-secondary) ;
|
|
65
|
-
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
66
|
-
}
|
|
67
|
-
.sbdocs-table {
|
|
68
|
-
background: var(--color-fm-surface-secondary) ;
|
|
69
|
-
border: 1px solid var(--color-fm-divider-secondary) ;
|
|
70
|
-
}
|
|
71
|
-
.sbdocs-table th {
|
|
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
|
-
}
|
|
76
|
-
.sbdocs-table td {
|
|
77
|
-
color: var(--color-fm-secondary) ;
|
|
78
|
-
border-bottom: 1px solid var(--color-fm-divider-tertiary) ;
|
|
79
|
-
}
|
|
80
|
-
`}
|
|
81
|
-
</style>
|
|
82
|
-
|
|
83
|
-
<div className="bg-fm-surface-primary min-h-screen">
|
|
84
|
-
{/* Header */}
|
|
85
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary relative overflow-hidden border-b backdrop-blur-xl">
|
|
86
|
-
<div className="from-fm-secondary-500/10 to-fm-icon-info/10 absolute inset-0 bg-linear-to-r via-transparent" />
|
|
87
|
-
<div className="relative !mx-auto max-w-7xl px-6 py-16">
|
|
88
|
-
<div className="!space-y-6 text-center">
|
|
89
|
-
<div className="border-fm-secondary-500/30 from-fm-secondary-500/20 to-fm-secondary-500/20 !mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border bg-linear-to-br">
|
|
90
|
-
<AudioBarIcon className="text-fm-secondary-600 h-12 w-12" />
|
|
91
|
-
</div>
|
|
92
|
-
<h1 className="text-fm-icon-active! text-5xl font-bold">
|
|
93
|
-
AudioBarIcon
|
|
94
|
-
</h1>
|
|
95
|
-
<p className="text-fm-secondary! !mx-auto max-w-3xl text-xl leading-relaxed">
|
|
96
|
-
A dynamic audio visualizer icon representing sound waves and
|
|
97
|
-
audio activity. Perfect for music players, audio controls,
|
|
98
|
-
voice interfaces, and sound-related features.
|
|
99
|
-
</p>
|
|
100
|
-
|
|
101
|
-
{/* Stats */}
|
|
102
|
-
<div className="flex items-center justify-center gap-8 pt-8">
|
|
103
|
-
<div className="text-center">
|
|
104
|
-
<div className="text-fm-secondary-600 text-3xl font-bold">
|
|
105
|
-
Audio
|
|
106
|
-
</div>
|
|
107
|
-
<div className="text-fm-tertiary text-sm">
|
|
108
|
-
Sound visualization
|
|
109
|
-
</div>
|
|
110
|
-
</div>
|
|
111
|
-
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
112
|
-
<div className="text-center">
|
|
113
|
-
<div className="text-fm-secondary-600 text-3xl font-bold">
|
|
114
|
-
Dynamic
|
|
115
|
-
</div>
|
|
116
|
-
<div className="text-fm-tertiary text-sm">
|
|
117
|
-
Visual feedback
|
|
118
|
-
</div>
|
|
119
|
-
</div>
|
|
120
|
-
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
121
|
-
<div className="text-center">
|
|
122
|
-
<div className="text-fm-secondary-600 text-3xl font-bold">
|
|
123
|
-
Responsive
|
|
124
|
-
</div>
|
|
125
|
-
<div className="text-fm-tertiary text-sm">
|
|
126
|
-
Scalable design
|
|
127
|
-
</div>
|
|
128
|
-
</div>
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
|
|
134
|
-
{/* Content */}
|
|
135
|
-
<div className="!mx-auto max-w-7xl !space-y-16 px-6 py-12">
|
|
136
|
-
{/* Quick Usage */}
|
|
137
|
-
<div className="!space-y-8">
|
|
138
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
139
|
-
Quick Start
|
|
140
|
-
</h2>
|
|
141
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
142
|
-
<div className="!space-y-4">
|
|
143
|
-
<h3 className="text-fm-secondary-600! text-xl font-semibold">
|
|
144
|
-
Basic Usage
|
|
145
|
-
</h3>
|
|
146
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
147
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
148
|
-
{`import { AudioBarIcon } from "@icons/audio-bar-icon"
|
|
149
|
-
|
|
150
|
-
function AudioPlayer() {
|
|
36
|
+
<AuralIconDocsPage
|
|
37
|
+
accentToken="positive"
|
|
38
|
+
features={[
|
|
39
|
+
{ title: "Audio Bars", description: "Visual audio activity mark" },
|
|
40
|
+
{ title: "currentColor", description: "Responds to text tokens" },
|
|
41
|
+
{ title: "Accessible", description: "ARIA-ready by default" },
|
|
42
|
+
]}
|
|
43
|
+
quickStart={{
|
|
44
|
+
codeExample: `import { AudioBarIcon } from "src/ui/icons/audio-bar-icon"
|
|
45
|
+
|
|
46
|
+
function NowPlaying() {
|
|
151
47
|
return (
|
|
152
48
|
<div className="flex items-center gap-2">
|
|
153
|
-
<AudioBarIcon className="h-
|
|
154
|
-
|
|
155
|
-
</div>
|
|
156
|
-
)
|
|
157
|
-
}`}
|
|
158
|
-
</pre>
|
|
159
|
-
</div>
|
|
160
|
-
</div>
|
|
161
|
-
|
|
162
|
-
<div className="!space-y-4">
|
|
163
|
-
<h3 className="text-fm-secondary-600! text-xl font-semibold">
|
|
164
|
-
Live Preview
|
|
165
|
-
</h3>
|
|
166
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex h-32 items-center justify-center rounded-lg border">
|
|
167
|
-
<div className="border-fm-secondary-500/20 bg-fm-secondary-500/10 flex items-center gap-3 rounded-lg border px-4 py-2">
|
|
168
|
-
<AudioBarIcon className="text-fm-secondary-600 h-6 w-6" />
|
|
169
|
-
<span className="text-fm-icon-active!">
|
|
170
|
-
Now Playing
|
|
171
|
-
</span>
|
|
172
|
-
</div>
|
|
173
|
-
</div>
|
|
174
|
-
</div>
|
|
175
|
-
</div>
|
|
176
|
-
</div>
|
|
177
|
-
|
|
178
|
-
{/* Props Documentation */}
|
|
179
|
-
<div className="!space-y-8">
|
|
180
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
181
|
-
Props & Configuration
|
|
182
|
-
</h2>
|
|
183
|
-
|
|
184
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary overflow-hidden rounded-lg border">
|
|
185
|
-
<div className="bg-fm-surface-secondary p-4">
|
|
186
|
-
<h3 className="text-fm-icon-active! text-xl font-semibold">
|
|
187
|
-
Props
|
|
188
|
-
</h3>
|
|
189
|
-
</div>
|
|
190
|
-
<table className="!my-0 w-full">
|
|
191
|
-
<thead className="bg-fm-surface-secondary">
|
|
192
|
-
<tr className="border-fm-divider-secondary border-b">
|
|
193
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
194
|
-
Prop
|
|
195
|
-
</th>
|
|
196
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
197
|
-
Type
|
|
198
|
-
</th>
|
|
199
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
200
|
-
Default
|
|
201
|
-
</th>
|
|
202
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
203
|
-
Description
|
|
204
|
-
</th>
|
|
205
|
-
</tr>
|
|
206
|
-
</thead>
|
|
207
|
-
<tbody>
|
|
208
|
-
{" "}
|
|
209
|
-
<tr className="bg-fm-surface-secondary!">
|
|
210
|
-
<td className="text-fm-icon-info! px-6 py-4 font-mono text-sm">
|
|
211
|
-
withAccessibility
|
|
212
|
-
</td>
|
|
213
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
214
|
-
boolean
|
|
215
|
-
</td>
|
|
216
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
217
|
-
true
|
|
218
|
-
</td>
|
|
219
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
220
|
-
Whether to wrap the icon with accessibility feature
|
|
221
|
-
</td>
|
|
222
|
-
</tr>
|
|
223
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
224
|
-
<td className="text-fm-secondary-600! px-6 py-4 font-mono text-sm">
|
|
225
|
-
height
|
|
226
|
-
</td>
|
|
227
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
228
|
-
number | string
|
|
229
|
-
</td>
|
|
230
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
231
|
-
12
|
|
232
|
-
</td>
|
|
233
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
234
|
-
Height of the icon in pixels
|
|
235
|
-
</td>
|
|
236
|
-
</tr>
|
|
237
|
-
<tr className="border-fm-divider-tertiary border-b">
|
|
238
|
-
<td className="text-fm-secondary-600! px-6 py-4 font-mono text-sm">
|
|
239
|
-
fill
|
|
240
|
-
</td>
|
|
241
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
242
|
-
string
|
|
243
|
-
</td>
|
|
244
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
245
|
-
currentColor
|
|
246
|
-
</td>
|
|
247
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
248
|
-
Fill color of the audio bars
|
|
249
|
-
</td>
|
|
250
|
-
</tr>
|
|
251
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
252
|
-
<td className="text-fm-secondary-600! px-6 py-4 font-mono text-sm">
|
|
253
|
-
color
|
|
254
|
-
</td>
|
|
255
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
256
|
-
string
|
|
257
|
-
</td>
|
|
258
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
259
|
-
currentColor
|
|
260
|
-
</td>
|
|
261
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
262
|
-
Color of the icon (alternative to fill)
|
|
263
|
-
</td>
|
|
264
|
-
</tr>
|
|
265
|
-
<tr className="border-fm-divider-tertiary border-b">
|
|
266
|
-
<td className="text-fm-secondary-600! px-6 py-4 font-mono text-sm">
|
|
267
|
-
className
|
|
268
|
-
</td>
|
|
269
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
270
|
-
string
|
|
271
|
-
</td>
|
|
272
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
273
|
-
-
|
|
274
|
-
</td>
|
|
275
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
276
|
-
CSS classes for styling
|
|
277
|
-
</td>
|
|
278
|
-
</tr>
|
|
279
|
-
<tr className="bg-fm-surface-secondary!">
|
|
280
|
-
<td className="text-fm-secondary-600! px-6 py-4 font-mono text-sm">
|
|
281
|
-
...svgProps
|
|
282
|
-
</td>
|
|
283
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
284
|
-
SVGProps
|
|
285
|
-
</td>
|
|
286
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
287
|
-
-
|
|
288
|
-
</td>
|
|
289
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
290
|
-
All standard SVG element props
|
|
291
|
-
</td>
|
|
292
|
-
</tr>
|
|
293
|
-
</tbody>
|
|
294
|
-
</table>
|
|
295
|
-
</div>
|
|
296
|
-
</div>
|
|
297
|
-
|
|
298
|
-
{/* Size Variations */}
|
|
299
|
-
<div className="!space-y-8">
|
|
300
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
301
|
-
Size Variations
|
|
302
|
-
</h2>
|
|
303
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
304
|
-
<div className="!space-y-6">
|
|
305
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
306
|
-
<div className="!space-y-4">
|
|
307
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
308
|
-
Standard Sizes
|
|
309
|
-
</h3>
|
|
310
|
-
<div className="bg-fm-surface-secondary flex items-end gap-6 rounded-lg p-6">
|
|
311
|
-
<div className="text-center">
|
|
312
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-3 w-3" />
|
|
313
|
-
<span className="text-fm-tertiary text-xs">
|
|
314
|
-
12px
|
|
315
|
-
</span>
|
|
316
|
-
</div>
|
|
317
|
-
<div className="text-center">
|
|
318
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-4 w-4" />
|
|
319
|
-
<span className="text-fm-tertiary text-xs">
|
|
320
|
-
16px
|
|
321
|
-
</span>
|
|
322
|
-
</div>
|
|
323
|
-
<div className="text-center">
|
|
324
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-5 w-5" />
|
|
325
|
-
<span className="text-fm-tertiary text-xs">
|
|
326
|
-
20px
|
|
327
|
-
</span>
|
|
328
|
-
</div>
|
|
329
|
-
<div className="text-center">
|
|
330
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-6 w-6" />
|
|
331
|
-
<span className="text-fm-tertiary text-xs">
|
|
332
|
-
24px
|
|
333
|
-
</span>
|
|
334
|
-
</div>
|
|
335
|
-
<div className="text-center">
|
|
336
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-8 w-8" />
|
|
337
|
-
<span className="text-fm-tertiary text-xs">
|
|
338
|
-
32px
|
|
339
|
-
</span>
|
|
340
|
-
</div>
|
|
341
|
-
<div className="text-center">
|
|
342
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-12 w-12" />
|
|
343
|
-
<span className="text-fm-tertiary text-xs">
|
|
344
|
-
48px
|
|
345
|
-
</span>
|
|
346
|
-
</div>
|
|
347
|
-
</div>
|
|
348
|
-
</div>
|
|
349
|
-
|
|
350
|
-
<div className="!space-y-4">
|
|
351
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
352
|
-
Code Example
|
|
353
|
-
</h3>
|
|
354
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
355
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
356
|
-
{`// Small (16px)
|
|
357
|
-
<AudioBarIcon className="h-4 w-4" />
|
|
358
|
-
|
|
359
|
-
// Medium (24px)
|
|
360
|
-
<AudioBarIcon className="h-6 w-6" />
|
|
361
|
-
|
|
362
|
-
// Large (32px)
|
|
363
|
-
<AudioBarIcon className="h-8 w-8" />
|
|
364
|
-
|
|
365
|
-
// Custom size (maintains aspect ratio)
|
|
366
|
-
<AudioBarIcon width={60} height={14} />`}
|
|
367
|
-
</pre>
|
|
368
|
-
</div>
|
|
369
|
-
</div>
|
|
370
|
-
</div>
|
|
371
|
-
</div>
|
|
372
|
-
</div>
|
|
373
|
-
</div>
|
|
374
|
-
|
|
375
|
-
{/* Color Variations */}
|
|
376
|
-
<div className="!space-y-8">
|
|
377
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
378
|
-
Color Variations
|
|
379
|
-
</h2>
|
|
380
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
381
|
-
<div className="!space-y-4">
|
|
382
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
383
|
-
Audio State Colors
|
|
384
|
-
</h3>
|
|
385
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
386
|
-
<div className="flex items-center gap-4">
|
|
387
|
-
<AudioBarIcon className="text-fm-secondary-600 h-6 w-6" />
|
|
388
|
-
<div>
|
|
389
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
390
|
-
Active Audio
|
|
391
|
-
</div>
|
|
392
|
-
<div className="text-fm-tertiary text-xs">
|
|
393
|
-
text-fm-secondary-600
|
|
394
|
-
</div>
|
|
395
|
-
</div>
|
|
396
|
-
</div>
|
|
397
|
-
<div className="flex items-center gap-4">
|
|
398
|
-
<AudioBarIcon className="text-fm-icon-positive h-6 w-6" />
|
|
399
|
-
<div>
|
|
400
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
401
|
-
Recording
|
|
402
|
-
</div>
|
|
403
|
-
<div className="text-fm-tertiary text-xs">
|
|
404
|
-
text-fm-icon-positive
|
|
405
|
-
</div>
|
|
406
|
-
</div>
|
|
407
|
-
</div>
|
|
408
|
-
<div className="flex items-center gap-4">
|
|
409
|
-
<AudioBarIcon className="text-fm-icon-negative h-6 w-6" />
|
|
410
|
-
<div>
|
|
411
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
412
|
-
Live/Streaming
|
|
413
|
-
</div>
|
|
414
|
-
<div className="text-fm-tertiary text-xs">
|
|
415
|
-
text-fm-icon-negative
|
|
416
|
-
</div>
|
|
417
|
-
</div>
|
|
418
|
-
</div>
|
|
419
|
-
<div className="flex items-center gap-4">
|
|
420
|
-
<AudioBarIcon className="text-fm-icon-info h-6 w-6" />
|
|
421
|
-
<div>
|
|
422
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
423
|
-
Analyzing
|
|
424
|
-
</div>
|
|
425
|
-
<div className="text-fm-tertiary text-xs">
|
|
426
|
-
text-fm-icon-info
|
|
427
|
-
</div>
|
|
428
|
-
</div>
|
|
429
|
-
</div>
|
|
430
|
-
<div className="flex items-center gap-4">
|
|
431
|
-
<AudioBarIcon className="text-fm-placeholder h-6 w-6" />
|
|
432
|
-
<div>
|
|
433
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
434
|
-
Inactive
|
|
435
|
-
</div>
|
|
436
|
-
<div className="text-fm-tertiary text-xs">
|
|
437
|
-
text-fm-placeholder
|
|
438
|
-
</div>
|
|
439
|
-
</div>
|
|
440
|
-
</div>
|
|
441
|
-
</div>
|
|
442
|
-
</div>
|
|
443
|
-
|
|
444
|
-
<div className="!space-y-4">
|
|
445
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
446
|
-
Custom Colors
|
|
447
|
-
</h3>
|
|
448
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
449
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
450
|
-
{`// Using Tailwind classes
|
|
451
|
-
<AudioBarIcon className="h-6 w-6 text-violet-400" />
|
|
452
|
-
<AudioBarIcon className="h-6 w-6 text-green-500" />
|
|
453
|
-
|
|
454
|
-
// Using CSS custom properties
|
|
455
|
-
<AudioBarIcon
|
|
456
|
-
className="h-6 w-6"
|
|
457
|
-
style={{ color: 'var(--color-audio)' }}
|
|
458
|
-
/>
|
|
459
|
-
|
|
460
|
-
// Direct fill prop
|
|
461
|
-
<AudioBarIcon
|
|
462
|
-
width={32}
|
|
463
|
-
height={32}
|
|
464
|
-
fill="#8b5cf6"
|
|
465
|
-
/>
|
|
466
|
-
|
|
467
|
-
// Gradient effect (with CSS)
|
|
468
|
-
<AudioBarIcon className="h-6 w-6 text-gradient" />`}
|
|
469
|
-
</pre>
|
|
470
|
-
</div>
|
|
471
|
-
</div>
|
|
472
|
-
</div>
|
|
473
|
-
</div>
|
|
474
|
-
|
|
475
|
-
{/* Animation Examples */}
|
|
476
|
-
<div className="!space-y-8">
|
|
477
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
478
|
-
Animation & Effects
|
|
479
|
-
</h2>
|
|
480
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
481
|
-
<div className="!space-y-4">
|
|
482
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
483
|
-
Animated States
|
|
484
|
-
</h3>
|
|
485
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
486
|
-
<div className="grid grid-cols-2 gap-4">
|
|
487
|
-
<div className="flex flex-col items-center gap-2">
|
|
488
|
-
<AudioBarIcon className="text-fm-secondary-600 h-8 w-8 animate-pulse" />
|
|
489
|
-
<span className="text-fm-tertiary! text-xs">
|
|
490
|
-
Pulsing
|
|
491
|
-
</span>
|
|
492
|
-
</div>
|
|
493
|
-
<div className="flex flex-col items-center gap-2">
|
|
494
|
-
<AudioBarIcon className="text-fm-icon-positive h-8 w-8 animate-bounce" />
|
|
495
|
-
<span className="text-fm-tertiary! text-xs">
|
|
496
|
-
Bouncing
|
|
497
|
-
</span>
|
|
498
|
-
</div>
|
|
499
|
-
<div className="flex flex-col items-center gap-2">
|
|
500
|
-
<AudioBarIcon className="text-fm-icon-info h-8 w-8 animate-spin" />
|
|
501
|
-
<span className="text-fm-tertiary! text-xs">
|
|
502
|
-
Processing
|
|
503
|
-
</span>
|
|
504
|
-
</div>
|
|
505
|
-
<div className="flex flex-col items-center gap-2">
|
|
506
|
-
<AudioBarIcon className="text-fm-icon-negative h-8 w-8 transition-all hover:scale-110" />
|
|
507
|
-
<span className="text-fm-tertiary! text-xs">
|
|
508
|
-
Hover Scale
|
|
509
|
-
</span>
|
|
510
|
-
</div>
|
|
511
|
-
</div>
|
|
512
|
-
</div>
|
|
513
|
-
</div>
|
|
514
|
-
|
|
515
|
-
<div className="!space-y-4">
|
|
516
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
517
|
-
Animation Code
|
|
518
|
-
</h3>
|
|
519
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
520
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
521
|
-
{`// Pulse animation for active audio
|
|
522
|
-
<AudioBarIcon className="h-6 w-6 animate-pulse text-violet-400" />
|
|
523
|
-
|
|
524
|
-
// Bounce for recording
|
|
525
|
-
<AudioBarIcon className="h-6 w-6 animate-bounce text-green-400" />
|
|
526
|
-
|
|
527
|
-
// Spin for processing
|
|
528
|
-
<AudioBarIcon className="h-6 w-6 animate-spin text-blue-400" />
|
|
529
|
-
|
|
530
|
-
// Custom keyframe animation
|
|
531
|
-
<AudioBarIcon className="h-6 w-6 animate-audio-wave text-violet-400" />
|
|
532
|
-
|
|
533
|
-
// Hover effects
|
|
534
|
-
<AudioBarIcon className="h-6 w-6 transition-all hover:scale-110 hover:text-violet-300" />`}
|
|
535
|
-
</pre>
|
|
536
|
-
</div>
|
|
537
|
-
</div>
|
|
538
|
-
</div>
|
|
539
|
-
</div>
|
|
540
|
-
|
|
541
|
-
{/* Usage Examples */}
|
|
542
|
-
<div className="!space-y-8">
|
|
543
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
544
|
-
Usage Examples
|
|
545
|
-
</h2>
|
|
546
|
-
|
|
547
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
548
|
-
{/* Audio Player */}
|
|
549
|
-
<div className="!space-y-4">
|
|
550
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
551
|
-
Music Player
|
|
552
|
-
</h3>
|
|
553
|
-
<div className="!space-y-4">
|
|
554
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4">
|
|
555
|
-
<div className="flex items-center gap-4">
|
|
556
|
-
<div className="bg-fm-secondary-500/20 flex h-12 w-12 items-center justify-center rounded-lg">
|
|
557
|
-
<AudioBarIcon className="text-fm-secondary-600 h-6 w-6 animate-pulse" />
|
|
558
|
-
</div>
|
|
559
|
-
<div className="flex-1">
|
|
560
|
-
<h4 className="text-fm-icon-active! font-medium">
|
|
561
|
-
Bohemian Rhapsody
|
|
562
|
-
</h4>
|
|
563
|
-
<p className="text-fm-tertiary! text-sm">Queen</p>
|
|
564
|
-
</div>
|
|
565
|
-
<div className="text-fm-tertiary! text-sm">3:42</div>
|
|
566
|
-
</div>
|
|
567
|
-
</div>
|
|
568
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
569
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
570
|
-
{`<div className="flex items-center gap-4 p-4 bg-white/5 border border-white/10 rounded-lg">
|
|
571
|
-
<div className="flex items-center justify-center w-12 h-12 bg-violet-500/20 rounded-lg">
|
|
572
|
-
<AudioBarIcon className="w-6 h-6 text-violet-400 animate-pulse" />
|
|
573
|
-
</div>
|
|
574
|
-
<div className="flex-1">
|
|
575
|
-
<h4 className="font-medium text-white">Bohemian Rhapsody</h4>
|
|
576
|
-
<p className="text-sm text-white/60">Queen</p>
|
|
577
|
-
</div>
|
|
578
|
-
<div className="text-sm text-white/60">3:42</div>
|
|
579
|
-
</div>`}
|
|
580
|
-
</pre>
|
|
581
|
-
</div>
|
|
582
|
-
</div>
|
|
583
|
-
</div>
|
|
584
|
-
|
|
585
|
-
{/* Voice Recording */}
|
|
586
|
-
<div className="!space-y-4">
|
|
587
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
588
|
-
Voice Recording
|
|
589
|
-
</h3>
|
|
590
|
-
<div className="!space-y-4">
|
|
591
|
-
<div className="border-fm-icon-negative/20 bg-fm-icon-negative/10 rounded-lg border p-4">
|
|
592
|
-
<div className="flex items-center justify-between">
|
|
593
|
-
<div className="flex items-center gap-3">
|
|
594
|
-
<AudioBarIcon className="text-fm-icon-negative h-5 w-5 animate-bounce" />
|
|
595
|
-
<span className="text-fm-icon-negative!">
|
|
596
|
-
Recording...
|
|
597
|
-
</span>
|
|
598
|
-
</div>
|
|
599
|
-
<div className="text-fm-icon-negative! text-sm">
|
|
600
|
-
00:42
|
|
601
|
-
</div>
|
|
602
|
-
</div>
|
|
603
|
-
<div className="bg-fm-icon-negative/20 mt-3 h-2 rounded-full">
|
|
604
|
-
<div className="bg-fm-icon-negative h-full w-1/3 rounded-full"></div>
|
|
605
|
-
</div>
|
|
606
|
-
</div>
|
|
607
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
608
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
609
|
-
{`<div className="p-4 bg-red-500/10 border border-red-500/20 rounded-lg">
|
|
610
|
-
<div className="flex items-center justify-between">
|
|
611
|
-
<div className="flex items-center gap-3">
|
|
612
|
-
<AudioBarIcon className="w-5 h-5 text-red-400 animate-bounce" />
|
|
613
|
-
<span className="text-red-200">Recording...</span>
|
|
49
|
+
<AudioBarIcon className="h-3 w-auto animate-pulse text-fm-icon-positive" />
|
|
50
|
+
Now Playing
|
|
614
51
|
</div>
|
|
615
|
-
<div className="text-sm text-red-300">00:42</div>
|
|
616
|
-
</div>
|
|
617
|
-
<div className="mt-3 h-2 bg-red-500/20 rounded-full">
|
|
618
|
-
<div className="w-1/3 h-full bg-red-400 rounded-full"></div>
|
|
619
|
-
</div>
|
|
620
|
-
</div>`}
|
|
621
|
-
</pre>
|
|
622
|
-
</div>
|
|
623
|
-
</div>
|
|
624
|
-
</div>
|
|
625
|
-
|
|
626
|
-
{/* Audio Controls */}
|
|
627
|
-
<div className="!space-y-4">
|
|
628
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
629
|
-
Audio Controls
|
|
630
|
-
</h3>
|
|
631
|
-
<div className="!space-y-4">
|
|
632
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-4 rounded-lg border p-4">
|
|
633
|
-
<button className="border-fm-secondary-500/30 bg-fm-secondary-500/20 text-fm-secondary-600 hover:bg-fm-secondary-500/30 flex items-center gap-2 rounded-lg border px-3 py-2 transition-colors">
|
|
634
|
-
<AudioBarIcon className="h-4 w-4" />
|
|
635
|
-
Equalizer
|
|
636
|
-
</button>
|
|
637
|
-
<button className="border-fm-icon-positive/30 bg-fm-icon-positive/20 text-fm-icon-positive hover:bg-fm-icon-positive/30 flex items-center gap-2 rounded-lg border px-3 py-2 transition-colors">
|
|
638
|
-
<AudioBarIcon className="h-4 w-4" />
|
|
639
|
-
Visualizer
|
|
640
|
-
</button>
|
|
641
|
-
<button className="border-fm-icon-info/30 bg-fm-icon-info/20 text-fm-icon-info hover:bg-fm-icon-info/30 flex items-center gap-2 rounded-lg border px-3 py-2 transition-colors">
|
|
642
|
-
<AudioBarIcon className="h-4 w-4" />
|
|
643
|
-
Spectrum
|
|
644
|
-
</button>
|
|
645
|
-
</div>
|
|
646
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
647
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
648
|
-
{`<div className="flex items-center gap-4">
|
|
649
|
-
<button className="flex items-center gap-2 px-3 py-2 bg-violet-500/20 border border-violet-500/30 rounded-lg">
|
|
650
|
-
<AudioBarIcon className="w-4 h-4" />
|
|
651
|
-
Equalizer
|
|
652
|
-
</button>
|
|
653
|
-
<button className="flex items-center gap-2 px-3 py-2 bg-green-500/20 border border-green-500/30 rounded-lg">
|
|
654
|
-
<AudioBarIcon className="w-4 h-4" />
|
|
655
|
-
Visualizer
|
|
656
|
-
</button>
|
|
657
|
-
</div>`}
|
|
658
|
-
</pre>
|
|
659
|
-
</div>
|
|
660
|
-
</div>
|
|
661
|
-
</div>
|
|
662
|
-
|
|
663
|
-
{/* Audio Status */}
|
|
664
|
-
<div className="!space-y-4">
|
|
665
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
666
|
-
Audio Status Indicator
|
|
667
|
-
</h3>
|
|
668
|
-
<div className="!space-y-4">
|
|
669
|
-
<div className="!space-y-3">
|
|
670
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center justify-between rounded-lg border p-3">
|
|
671
|
-
<span className="text-fm-icon-active! text-sm">
|
|
672
|
-
Microphone
|
|
673
|
-
</span>
|
|
674
|
-
<div className="flex items-center gap-2">
|
|
675
|
-
<AudioBarIcon className="text-fm-icon-positive h-4 w-4" />
|
|
676
|
-
<span className="text-fm-icon-positive! text-xs">
|
|
677
|
-
Active
|
|
678
|
-
</span>
|
|
679
|
-
</div>
|
|
680
|
-
</div>
|
|
681
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center justify-between rounded-lg border p-3">
|
|
682
|
-
<span className="text-fm-icon-active! text-sm">
|
|
683
|
-
Speakers
|
|
684
|
-
</span>
|
|
685
|
-
<div className="flex items-center gap-2">
|
|
686
|
-
<AudioBarIcon className="text-fm-secondary-600 h-4 w-4 animate-pulse" />
|
|
687
|
-
<span className="text-fm-secondary-600! text-xs">
|
|
688
|
-
Playing
|
|
689
|
-
</span>
|
|
690
|
-
</div>
|
|
691
|
-
</div>
|
|
692
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center justify-between rounded-lg border p-3">
|
|
693
|
-
<span className="text-fm-icon-active! text-sm">
|
|
694
|
-
Recording
|
|
695
|
-
</span>
|
|
696
|
-
<div className="flex items-center gap-2">
|
|
697
|
-
<AudioBarIcon className="text-fm-placeholder h-4 w-4" />
|
|
698
|
-
<span className="!text-fm-placeholder text-xs">
|
|
699
|
-
Disabled
|
|
700
|
-
</span>
|
|
701
|
-
</div>
|
|
702
|
-
</div>
|
|
703
|
-
</div>
|
|
704
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
705
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
706
|
-
{`// Active microphone
|
|
707
|
-
<div className="flex items-center gap-2">
|
|
708
|
-
<AudioBarIcon className="w-4 h-4 text-green-400" />
|
|
709
|
-
<span className="text-xs text-green-400">Active</span>
|
|
710
|
-
</div>
|
|
711
|
-
|
|
712
|
-
// Playing audio
|
|
713
|
-
<div className="flex items-center gap-2">
|
|
714
|
-
<AudioBarIcon className="w-4 h-4 text-violet-400 animate-pulse" />
|
|
715
|
-
<span className="text-xs text-violet-400">Playing</span>
|
|
716
|
-
</div>
|
|
717
|
-
|
|
718
|
-
// Disabled state
|
|
719
|
-
<div className="flex items-center gap-2">
|
|
720
|
-
<AudioBarIcon className="w-4 h-4 text-gray-400" />
|
|
721
|
-
<span className="text-xs text-gray-400">Disabled</span>
|
|
722
|
-
</div>`}
|
|
723
|
-
</pre>
|
|
724
|
-
</div>
|
|
725
|
-
</div>
|
|
726
|
-
</div>
|
|
727
|
-
|
|
728
|
-
{/* Audio Dashboard */}
|
|
729
|
-
<div className="!space-y-4">
|
|
730
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
731
|
-
Audio Dashboard
|
|
732
|
-
</h3>
|
|
733
|
-
<div className="!space-y-4">
|
|
734
|
-
<div className="grid grid-cols-2 gap-4">
|
|
735
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4 text-center">
|
|
736
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-8 w-8" />
|
|
737
|
-
<div className="text-fm-icon-active! text-sm font-medium">
|
|
738
|
-
Audio Quality
|
|
739
|
-
</div>
|
|
740
|
-
<div className="text-fm-tertiary! text-xs">
|
|
741
|
-
HD Audio
|
|
742
|
-
</div>
|
|
743
|
-
</div>
|
|
744
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4 text-center">
|
|
745
|
-
<AudioBarIcon className="text-fm-icon-positive !mx-auto mb-2 h-8 w-8 animate-pulse" />
|
|
746
|
-
<div className="text-fm-icon-active! text-sm font-medium">
|
|
747
|
-
Live Stream
|
|
748
|
-
</div>
|
|
749
|
-
<div className="text-fm-tertiary! text-xs">
|
|
750
|
-
Broadcasting
|
|
751
|
-
</div>
|
|
752
|
-
</div>
|
|
753
|
-
</div>
|
|
754
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
755
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
756
|
-
{`<div className="grid grid-cols-2 gap-4">
|
|
757
|
-
<div className="p-4 bg-white/5 border border-white/10 rounded-lg text-center">
|
|
758
|
-
<AudioBarIcon className="w-8 h-8 mx-auto mb-2 text-violet-400" />
|
|
759
|
-
<div className="text-sm font-medium text-white">Audio Quality</div>
|
|
760
|
-
<div className="text-xs text-white/60">HD Audio</div>
|
|
761
|
-
</div>
|
|
762
|
-
<div className="p-4 bg-white/5 border border-white/10 rounded-lg text-center">
|
|
763
|
-
<AudioBarIcon className="w-8 h-8 mx-auto mb-2 text-green-400 animate-pulse" />
|
|
764
|
-
<div className="text-sm font-medium text-white">Live Stream</div>
|
|
765
|
-
<div className="text-xs text-white/60">Broadcasting</div>
|
|
766
|
-
</div>
|
|
767
|
-
</div>`}
|
|
768
|
-
</pre>
|
|
769
|
-
</div>
|
|
770
|
-
</div>
|
|
771
|
-
</div>
|
|
772
|
-
|
|
773
|
-
{/* Navigation Tab */}
|
|
774
|
-
<div className="!space-y-4">
|
|
775
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
776
|
-
Navigation Tab
|
|
777
|
-
</h3>
|
|
778
|
-
<div className="!space-y-4">
|
|
779
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex rounded-lg border p-1">
|
|
780
|
-
<button className="bg-fm-secondary-500/20 text-fm-secondary-600 flex flex-1 items-center justify-center gap-2 rounded-md px-3 py-2">
|
|
781
|
-
<AudioBarIcon className="h-4 w-4" />
|
|
782
|
-
<span className="text-sm">Audio</span>
|
|
783
|
-
</button>
|
|
784
|
-
<button className="text-fm-tertiary hover:bg-fm-surface-secondary flex flex-1 items-center justify-center gap-2 rounded-md px-3 py-2 transition-colors">
|
|
785
|
-
<span className="text-sm">Video</span>
|
|
786
|
-
</button>
|
|
787
|
-
<button className="text-fm-tertiary hover:bg-fm-surface-secondary flex flex-1 items-center justify-center gap-2 rounded-md px-3 py-2 transition-colors">
|
|
788
|
-
<span className="text-sm">Settings</span>
|
|
789
|
-
</button>
|
|
790
|
-
</div>
|
|
791
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
792
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
793
|
-
{`<div className="flex p-1 bg-white/5 border border-white/10 rounded-lg">
|
|
794
|
-
<button className="flex items-center justify-center flex-1 gap-2 px-3 py-2 bg-violet-500/20 rounded-md text-violet-200">
|
|
795
|
-
<AudioBarIcon className="w-4 h-4" />
|
|
796
|
-
<span className="text-sm">Audio</span>
|
|
797
|
-
</button>
|
|
798
|
-
<button className="flex items-center justify-center flex-1 gap-2 px-3 py-2 text-white/60 rounded-md hover:bg-white/10">
|
|
799
|
-
<span className="text-sm">Video</span>
|
|
800
|
-
</button>
|
|
801
|
-
</div>`}
|
|
802
|
-
</pre>
|
|
803
|
-
</div>
|
|
804
|
-
</div>
|
|
805
|
-
</div>
|
|
806
|
-
</div>
|
|
807
|
-
</div>
|
|
808
|
-
|
|
809
|
-
{/* Accessibility */}
|
|
810
|
-
<div className="!space-y-8">
|
|
811
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
812
|
-
Accessibility Features
|
|
813
|
-
</h2>
|
|
814
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
815
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
816
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
817
|
-
✅ Built-in Features
|
|
818
|
-
</h3>
|
|
819
|
-
<ul className="text-fm-secondary! !space-y-2 text-sm">
|
|
820
|
-
<li className="text-fm-secondary!">
|
|
821
|
-
Uses Radix UI AccessibleIcon wrapper
|
|
822
|
-
</li>
|
|
823
|
-
<li className="text-fm-secondary!">
|
|
824
|
-
Provides screen reader label "Audio Bar icon"
|
|
825
|
-
</li>
|
|
826
|
-
<li className="text-fm-secondary!">
|
|
827
|
-
Supports keyboard navigation when interactive
|
|
828
|
-
</li>
|
|
829
|
-
<li className="text-fm-secondary!">
|
|
830
|
-
Maintains proper color contrast ratios
|
|
831
|
-
</li>
|
|
832
|
-
<li className="text-fm-secondary!">
|
|
833
|
-
Respects user's motion preferences for animations
|
|
834
|
-
</li>
|
|
835
|
-
</ul>
|
|
836
|
-
</div>
|
|
837
|
-
|
|
838
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
839
|
-
<h3 className="text-fm-secondary-600! text-lg font-semibold">
|
|
840
|
-
💡 Best Practices
|
|
841
|
-
</h3>
|
|
842
|
-
<ul className="text-fm-secondary !space-y-2 text-sm">
|
|
843
|
-
<li className="text-fm-secondary!">
|
|
844
|
-
Always provide audio context with descriptive text
|
|
845
|
-
</li>
|
|
846
|
-
<li className="text-fm-secondary!">
|
|
847
|
-
Use consistent colors for different audio states
|
|
848
|
-
</li>
|
|
849
|
-
<li className="text-fm-secondary!">
|
|
850
|
-
Provide alternative text indicators for audio states
|
|
851
|
-
</li>
|
|
852
|
-
<li className="text-fm-secondary!">
|
|
853
|
-
Consider users with hearing impairments
|
|
854
|
-
</li>
|
|
855
|
-
<li className="text-fm-secondary!">
|
|
856
|
-
Test with reduced motion preferences
|
|
857
|
-
</li>
|
|
858
|
-
</ul>
|
|
859
|
-
</div>
|
|
860
|
-
</div>
|
|
861
|
-
|
|
862
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
863
|
-
<h3 className="text-fm-secondary-600! mb-4 text-lg font-semibold">
|
|
864
|
-
Accessible Audio Implementation
|
|
865
|
-
</h3>
|
|
866
|
-
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
867
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
868
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
869
|
-
{`// Custom implementation with audio context
|
|
870
|
-
import { AccessibleIcon } from "@radix-ui/react-accessible-icon"
|
|
871
|
-
|
|
872
|
-
function AccessibleAudioIcon({
|
|
873
|
-
audioState = "inactive",
|
|
874
|
-
level = 0,
|
|
875
|
-
...props
|
|
876
|
-
}) {
|
|
877
|
-
const getLabel = () => {
|
|
878
|
-
switch(audioState) {
|
|
879
|
-
case 'recording': return \`Recording audio, level \${level}%\`
|
|
880
|
-
case 'playing': return \`Playing audio, level \${level}%\`
|
|
881
|
-
case 'analyzing': return 'Analyzing audio input'
|
|
882
|
-
default: return 'Audio visualizer'
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
|
|
886
|
-
return (
|
|
887
|
-
<AccessibleIcon label={getLabel()}>
|
|
888
|
-
<AudioBarIcon {...props} />
|
|
889
|
-
</AccessibleIcon>
|
|
890
52
|
)
|
|
891
|
-
}
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
This implementation provides dynamic accessibility
|
|
897
|
-
labels based on audio state and level, giving screen
|
|
898
|
-
readers meaningful context.
|
|
899
|
-
</p>
|
|
900
|
-
<div className="border-fm-secondary-500/20 bg-fm-secondary-500/10 rounded-lg border p-4">
|
|
901
|
-
<div className="text-fm-secondary-600! flex items-center gap-2 text-sm">
|
|
902
|
-
<AudioBarIcon className="h-4 w-4" />
|
|
903
|
-
<span>
|
|
904
|
-
Dynamic labels help users understand audio activity
|
|
905
|
-
</span>
|
|
906
|
-
</div>
|
|
907
|
-
</div>
|
|
908
|
-
</div>
|
|
909
|
-
</div>
|
|
910
|
-
</div>
|
|
911
|
-
</div>
|
|
912
|
-
|
|
913
|
-
{/* Related Icons */}
|
|
914
|
-
<div className="!space-y-8">
|
|
915
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
916
|
-
Related Icons
|
|
917
|
-
</h2>
|
|
918
|
-
<div className="grid grid-cols-2 gap-6 md:grid-cols-4">
|
|
919
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
920
|
-
<div className="bg-fm-icon-positive/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
921
|
-
<span className="text-2xl">🎵</span>
|
|
922
|
-
</div>
|
|
923
|
-
<div>
|
|
924
|
-
<div className="text-fm-icon-active font-medium">
|
|
925
|
-
MusicIcon
|
|
926
|
-
</div>
|
|
927
|
-
<div className="text-fm-tertiary text-xs">
|
|
928
|
-
Music & melody
|
|
929
|
-
</div>
|
|
930
|
-
</div>
|
|
931
|
-
</div>
|
|
932
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
933
|
-
<div className="bg-fm-icon-info/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
934
|
-
<span className="text-2xl">🎤</span>
|
|
935
|
-
</div>
|
|
936
|
-
<div>
|
|
937
|
-
<div className="text-fm-icon-active font-medium">
|
|
938
|
-
MicrophoneIcon
|
|
939
|
-
</div>
|
|
940
|
-
<div className="text-fm-tertiary text-xs">
|
|
941
|
-
Voice input
|
|
942
|
-
</div>
|
|
943
|
-
</div>
|
|
944
|
-
</div>
|
|
945
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
946
|
-
<div className="bg-fm-secondary-500/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
947
|
-
<span className="text-2xl">🔊</span>
|
|
948
|
-
</div>
|
|
949
|
-
<div>
|
|
950
|
-
<div className="text-fm-icon-active font-medium">
|
|
951
|
-
VolumeIcon
|
|
952
|
-
</div>
|
|
953
|
-
<div className="text-fm-tertiary text-xs">
|
|
954
|
-
Audio output
|
|
955
|
-
</div>
|
|
956
|
-
</div>
|
|
957
|
-
</div>
|
|
958
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
959
|
-
<div className="bg-fm-icon-warning/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
960
|
-
<span className="text-2xl">📻</span>
|
|
961
|
-
</div>
|
|
962
|
-
<div>
|
|
963
|
-
<div className="text-fm-icon-active font-medium">
|
|
964
|
-
RadioIcon
|
|
965
|
-
</div>
|
|
966
|
-
<div className="text-fm-tertiary text-xs">
|
|
967
|
-
Broadcasting
|
|
968
|
-
</div>
|
|
969
|
-
</div>
|
|
970
|
-
</div>
|
|
971
|
-
</div>
|
|
53
|
+
}`,
|
|
54
|
+
livePreview: (
|
|
55
|
+
<div className="text-fm-primary font-fm-text flex items-center gap-2 text-sm">
|
|
56
|
+
<AudioBarIcon className="text-fm-icon-positive h-3 w-auto animate-pulse" />
|
|
57
|
+
Now Playing
|
|
972
58
|
</div>
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
59
|
+
),
|
|
60
|
+
}}
|
|
61
|
+
relatedIcons={[
|
|
62
|
+
{
|
|
63
|
+
name: "SpinnerGradientIcon",
|
|
64
|
+
description: "Loading spinner",
|
|
65
|
+
icon: SpinnerGradientIcon,
|
|
66
|
+
accentToken: "info",
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: "VoicePlayingIcon",
|
|
70
|
+
description: "Voice playing state",
|
|
71
|
+
icon: VoicePlayingIcon,
|
|
72
|
+
accentToken: "positive",
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "MusicalNoteIcon",
|
|
76
|
+
description: "Music note icon",
|
|
77
|
+
icon: MusicalNoteIcon,
|
|
78
|
+
accentToken: "warning",
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: "PauseIcon",
|
|
82
|
+
description: "Pause control",
|
|
83
|
+
icon: PauseIcon,
|
|
84
|
+
accentToken: "negative",
|
|
85
|
+
},
|
|
86
|
+
]}
|
|
87
|
+
/>
|
|
992
88
|
),
|
|
993
89
|
},
|
|
994
90
|
},
|
|
995
91
|
tags: ["autodocs"],
|
|
996
92
|
argTypes: {
|
|
997
|
-
color: {
|
|
998
|
-
control: "color",
|
|
999
|
-
description: "Color of the icon",
|
|
1000
|
-
},
|
|
1001
|
-
withAccessibility: {
|
|
1002
|
-
control: "boolean",
|
|
1003
|
-
description: "Whether to wrap the icon with accessibility features",
|
|
1004
|
-
},
|
|
1005
93
|
width: {
|
|
1006
|
-
control: { type: "range", min:
|
|
94
|
+
control: { type: "range", min: 16, max: 120, step: 4 },
|
|
1007
95
|
description: "Width of the icon in pixels",
|
|
1008
96
|
},
|
|
1009
97
|
height: {
|
|
1010
|
-
control: { type: "range", min:
|
|
98
|
+
control: { type: "range", min: 4, max: 48, step: 2 },
|
|
1011
99
|
description: "Height of the icon in pixels",
|
|
1012
100
|
},
|
|
1013
|
-
fill: {
|
|
1014
|
-
control: "color",
|
|
1015
|
-
description: "Fill color of the audio bars",
|
|
1016
|
-
},
|
|
1017
101
|
className: {
|
|
1018
102
|
control: "text",
|
|
1019
|
-
description: "CSS classes for
|
|
103
|
+
description: "CSS classes for the SVG element",
|
|
104
|
+
},
|
|
105
|
+
withAccessibility: {
|
|
106
|
+
control: "boolean",
|
|
107
|
+
description: "Wrap with accessibility label",
|
|
1020
108
|
},
|
|
1021
109
|
},
|
|
1022
110
|
}
|
|
@@ -1024,291 +112,121 @@ function AccessibleAudioIcon({
|
|
|
1024
112
|
export default meta
|
|
1025
113
|
type Story = StoryObj<typeof AudioBarIcon>
|
|
1026
114
|
|
|
1027
|
-
// Story parameters for consistent dark theme
|
|
1028
|
-
const storyParameters = {
|
|
1029
|
-
backgrounds: {
|
|
1030
|
-
default: "dark",
|
|
1031
|
-
values: [
|
|
1032
|
-
{ name: "dark", value: "var(--color-fm-surface-primary)" },
|
|
1033
|
-
{ name: "darker", value: "var(--color-fm-neutral-0)" },
|
|
1034
|
-
],
|
|
1035
|
-
},
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
115
|
export const Default: Story = {
|
|
1039
116
|
args: {
|
|
1040
|
-
width:
|
|
1041
|
-
height:
|
|
1042
|
-
className: "text-fm-secondary-600",
|
|
117
|
+
width: 52,
|
|
118
|
+
height: 12,
|
|
1043
119
|
withAccessibility: true,
|
|
120
|
+
className: "text-fm-icon-active",
|
|
1044
121
|
},
|
|
1045
|
-
parameters: storyParameters,
|
|
1046
122
|
render: (args) => (
|
|
1047
|
-
<
|
|
123
|
+
<IconDefaultCanvas>
|
|
1048
124
|
<AudioBarIcon {...args} />
|
|
1049
|
-
</
|
|
125
|
+
</IconDefaultCanvas>
|
|
1050
126
|
),
|
|
1051
127
|
}
|
|
1052
128
|
|
|
1053
129
|
export const SizeVariations: Story = {
|
|
1054
|
-
|
|
1055
|
-
...storyParameters,
|
|
1056
|
-
docs: {
|
|
1057
|
-
description: {
|
|
1058
|
-
story:
|
|
1059
|
-
"AudioBarIcon in different sizes, from small UI indicators to large audio visualizations.",
|
|
1060
|
-
},
|
|
1061
|
-
},
|
|
1062
|
-
},
|
|
1063
|
-
render: () => (
|
|
1064
|
-
<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">
|
|
1065
|
-
<div className="text-center">
|
|
1066
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-3 w-3" />
|
|
1067
|
-
<span className="text-fm-tertiary text-xs">12px</span>
|
|
1068
|
-
</div>
|
|
1069
|
-
<div className="text-center">
|
|
1070
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-4 w-4" />
|
|
1071
|
-
<span className="text-fm-tertiary text-xs">16px</span>
|
|
1072
|
-
</div>
|
|
1073
|
-
<div className="text-center">
|
|
1074
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-5 w-5" />
|
|
1075
|
-
<span className="text-fm-tertiary text-xs">20px</span>
|
|
1076
|
-
</div>
|
|
1077
|
-
<div className="text-center">
|
|
1078
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-6 w-6" />
|
|
1079
|
-
<span className="text-fm-tertiary text-xs">24px</span>
|
|
1080
|
-
</div>
|
|
1081
|
-
<div className="text-center">
|
|
1082
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-8 w-8" />
|
|
1083
|
-
<span className="text-fm-tertiary text-xs">32px</span>
|
|
1084
|
-
</div>
|
|
1085
|
-
<div className="text-center">
|
|
1086
|
-
<AudioBarIcon className="text-fm-secondary-600 !mx-auto mb-2 h-12 w-12" />
|
|
1087
|
-
<span className="text-fm-tertiary text-xs">48px</span>
|
|
1088
|
-
</div>
|
|
1089
|
-
</div>
|
|
1090
|
-
),
|
|
130
|
+
render: () => <IconSizeVariations icon={AudioBarIcon} />,
|
|
1091
131
|
}
|
|
1092
132
|
|
|
1093
133
|
export const ColorVariations: Story = {
|
|
1094
|
-
|
|
1095
|
-
...storyParameters,
|
|
1096
|
-
docs: {
|
|
1097
|
-
description: {
|
|
1098
|
-
story:
|
|
1099
|
-
"AudioBarIcon in different colors representing various audio states and contexts.",
|
|
1100
|
-
},
|
|
1101
|
-
},
|
|
1102
|
-
},
|
|
1103
|
-
render: () => (
|
|
1104
|
-
<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-5">
|
|
1105
|
-
<div className="text-center">
|
|
1106
|
-
<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">
|
|
1107
|
-
<AudioBarIcon className="text-fm-secondary-600 h-8 w-8" />
|
|
1108
|
-
</div>
|
|
1109
|
-
<div className="text-fm-icon-active text-sm font-medium">Active</div>
|
|
1110
|
-
<div className="text-fm-secondary-600 text-xs">
|
|
1111
|
-
text-fm-secondary-600
|
|
1112
|
-
</div>
|
|
1113
|
-
</div>
|
|
1114
|
-
<div className="text-center">
|
|
1115
|
-
<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">
|
|
1116
|
-
<AudioBarIcon className="text-fm-icon-positive h-8 w-8" />
|
|
1117
|
-
</div>
|
|
1118
|
-
<div className="text-fm-icon-active text-sm font-medium">Recording</div>
|
|
1119
|
-
<div className="text-fm-icon-positive text-xs">
|
|
1120
|
-
text-fm-icon-positive
|
|
1121
|
-
</div>
|
|
1122
|
-
</div>
|
|
1123
|
-
<div className="text-center">
|
|
1124
|
-
<div className="border-fm-icon-negative/30 bg-fm-icon-negative/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1125
|
-
<AudioBarIcon className="text-fm-icon-negative h-8 w-8" />
|
|
1126
|
-
</div>
|
|
1127
|
-
<div className="text-fm-icon-active text-sm font-medium">Live</div>
|
|
1128
|
-
<div className="text-fm-icon-negative text-xs">
|
|
1129
|
-
text-fm-icon-negative
|
|
1130
|
-
</div>
|
|
1131
|
-
</div>
|
|
1132
|
-
<div className="text-center">
|
|
1133
|
-
<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">
|
|
1134
|
-
<AudioBarIcon className="text-fm-icon-info h-8 w-8" />
|
|
1135
|
-
</div>
|
|
1136
|
-
<div className="text-fm-icon-active text-sm font-medium">Analyzing</div>
|
|
1137
|
-
<div className="text-fm-icon-info text-xs">text-fm-icon-info</div>
|
|
1138
|
-
</div>
|
|
1139
|
-
<div className="text-center">
|
|
1140
|
-
<div className="border-fm-divider-primary bg-fm-surface-tertiary/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1141
|
-
<AudioBarIcon className="text-fm-placeholder h-8 w-8" />
|
|
1142
|
-
</div>
|
|
1143
|
-
<div className="text-fm-icon-active text-sm font-medium">Inactive</div>
|
|
1144
|
-
<div className="text-fm-placeholder text-xs">text-fm-placeholder</div>
|
|
1145
|
-
</div>
|
|
1146
|
-
</div>
|
|
1147
|
-
),
|
|
134
|
+
render: () => <IconColorVariations icon={AudioBarIcon} />,
|
|
1148
135
|
}
|
|
1149
136
|
|
|
1150
137
|
export const AnimatedStates: Story = {
|
|
1151
|
-
parameters: {
|
|
1152
|
-
...storyParameters,
|
|
1153
|
-
docs: {
|
|
1154
|
-
description: {
|
|
1155
|
-
story:
|
|
1156
|
-
"AudioBarIcon with different animation states for dynamic audio feedback.",
|
|
1157
|
-
},
|
|
1158
|
-
},
|
|
1159
|
-
},
|
|
1160
138
|
render: () => (
|
|
1161
|
-
<
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
<p className="text-fm-tertiary text-xs">Processing</p>
|
|
1184
|
-
</div>
|
|
1185
|
-
|
|
1186
|
-
<div className="text-center">
|
|
1187
|
-
<h3 className="text-fm-icon-active mb-4 text-lg font-medium">
|
|
1188
|
-
Hover Scale
|
|
1189
|
-
</h3>
|
|
1190
|
-
<div className="border-fm-icon-negative/30 bg-fm-icon-negative/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1191
|
-
<AudioBarIcon className="text-fm-icon-negative h-8 w-8 transition-all hover:scale-110" />
|
|
1192
|
-
</div>
|
|
1193
|
-
<p className="text-fm-tertiary text-xs">Interactive</p>
|
|
1194
|
-
</div>
|
|
1195
|
-
</div>
|
|
139
|
+
<IconAnimatedStates
|
|
140
|
+
icon={AudioBarIcon}
|
|
141
|
+
variants={[
|
|
142
|
+
{
|
|
143
|
+
label: "Static",
|
|
144
|
+
colorToken: "text-fm-icon-active",
|
|
145
|
+
description: "No animation",
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
label: "Pulse",
|
|
149
|
+
animationClass: "animate-pulse",
|
|
150
|
+
colorToken: "text-fm-icon-positive",
|
|
151
|
+
description: "Fade in/out",
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
label: "Bounce",
|
|
155
|
+
animationClass: "animate-bounce",
|
|
156
|
+
colorToken: "text-fm-icon-info",
|
|
157
|
+
description: "Bounce motion",
|
|
158
|
+
},
|
|
159
|
+
]}
|
|
160
|
+
/>
|
|
1196
161
|
),
|
|
1197
162
|
}
|
|
1198
163
|
|
|
1199
164
|
export const UsageExamples: Story = {
|
|
1200
|
-
parameters: {
|
|
1201
|
-
...storyParameters,
|
|
1202
|
-
docs: {
|
|
1203
|
-
description: {
|
|
1204
|
-
story:
|
|
1205
|
-
"Real-world usage examples showing AudioBarIcon in different audio interface contexts.",
|
|
1206
|
-
},
|
|
1207
|
-
},
|
|
1208
|
-
},
|
|
1209
165
|
render: () => (
|
|
1210
|
-
<
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4">
|
|
1217
|
-
<div className="flex items-center gap-4">
|
|
1218
|
-
<div className="bg-fm-secondary-500/20 flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1219
|
-
<AudioBarIcon className="text-fm-secondary-600 h-6 w-6 animate-pulse" />
|
|
166
|
+
<IconUsageCanvas>
|
|
167
|
+
<IconUsageSection title="Now Playing Bar">
|
|
168
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary w-full max-w-sm space-y-3 rounded-xl border p-4">
|
|
169
|
+
<div className="flex items-center gap-3">
|
|
170
|
+
<div className="bg-fm-icon-positive/20 flex h-10 w-10 shrink-0 items-center justify-center rounded-lg">
|
|
171
|
+
<AudioBarIcon className="text-fm-icon-positive h-3 w-auto animate-pulse" />
|
|
1220
172
|
</div>
|
|
1221
173
|
<div className="flex-1">
|
|
1222
|
-
<
|
|
1223
|
-
|
|
1224
|
-
</
|
|
1225
|
-
<
|
|
174
|
+
<div className="text-fm-primary font-fm-text text-sm font-medium">
|
|
175
|
+
Now Playing
|
|
176
|
+
</div>
|
|
177
|
+
<div className="text-fm-secondary font-fm-text text-xs">
|
|
178
|
+
Track title · Artist name
|
|
179
|
+
</div>
|
|
1226
180
|
</div>
|
|
1227
|
-
<div className="text-fm-tertiary text-sm">3:42</div>
|
|
1228
181
|
</div>
|
|
1229
182
|
</div>
|
|
1230
|
-
</
|
|
183
|
+
</IconUsageSection>
|
|
1231
184
|
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
<AudioBarIcon className="text-fm-icon-negative h-5 w-5 animate-bounce" />
|
|
1241
|
-
<span className="text-fm-icon-negative">Recording...</span>
|
|
185
|
+
<IconUsageSection title="Voice Message">
|
|
186
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex w-full max-w-sm items-center gap-3 rounded-xl border px-4 py-3">
|
|
187
|
+
<div className="bg-fm-icon-info/20 flex h-8 w-8 shrink-0 items-center justify-center rounded-full">
|
|
188
|
+
<AudioBarIcon className="text-fm-icon-info h-2 w-auto animate-pulse" />
|
|
189
|
+
</div>
|
|
190
|
+
<div className="flex-1">
|
|
191
|
+
<div className="text-fm-primary font-fm-text text-sm">
|
|
192
|
+
Voice message · 0:24
|
|
1242
193
|
</div>
|
|
1243
|
-
<div className="text-fm-icon-negative text-sm">00:42</div>
|
|
1244
194
|
</div>
|
|
1245
195
|
</div>
|
|
1246
|
-
</
|
|
1247
|
-
|
|
1248
|
-
{/* Audio Controls */}
|
|
1249
|
-
<div className="!space-y-2">
|
|
1250
|
-
<h3 className="text-fm-icon-active text-sm font-medium">
|
|
1251
|
-
Audio Controls
|
|
1252
|
-
</h3>
|
|
1253
|
-
<div className="flex items-center gap-4">
|
|
1254
|
-
<button className="border-fm-secondary-500/30 bg-fm-secondary-500/20 text-fm-secondary-600 hover:bg-fm-secondary-500/30 flex items-center gap-2 rounded-lg border px-3 py-2 transition-colors">
|
|
1255
|
-
<AudioBarIcon className="h-4 w-4" />
|
|
1256
|
-
Equalizer
|
|
1257
|
-
</button>
|
|
1258
|
-
<button className="border-fm-icon-positive/30 bg-fm-icon-positive/20 text-fm-icon-positive hover:bg-fm-icon-positive/30 flex items-center gap-2 rounded-lg border px-3 py-2 transition-colors">
|
|
1259
|
-
<AudioBarIcon className="h-4 w-4" />
|
|
1260
|
-
Visualizer
|
|
1261
|
-
</button>
|
|
1262
|
-
</div>
|
|
1263
|
-
</div>
|
|
196
|
+
</IconUsageSection>
|
|
1264
197
|
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center justify-between rounded-lg border p-3">
|
|
1272
|
-
<span className="text-fm-icon-active text-sm">Microphone</span>
|
|
198
|
+
<IconUsageSection title="Podcast Status">
|
|
199
|
+
<div className="border-fm-divider-secondary bg-fm-surface-secondary w-full max-w-sm space-y-2 rounded-xl border p-4">
|
|
200
|
+
<div className="flex items-center justify-between">
|
|
201
|
+
<span className="text-fm-primary font-fm-text text-sm font-medium">
|
|
202
|
+
Episode 42
|
|
203
|
+
</span>
|
|
1273
204
|
<div className="flex items-center gap-2">
|
|
1274
|
-
<AudioBarIcon className="text-fm-icon-
|
|
1275
|
-
<span className="text-fm-
|
|
205
|
+
<AudioBarIcon className="text-fm-icon-active h-3 w-auto" />
|
|
206
|
+
<span className="text-fm-secondary font-fm-text text-xs">
|
|
207
|
+
Live
|
|
208
|
+
</span>
|
|
1276
209
|
</div>
|
|
1277
210
|
</div>
|
|
1278
|
-
<div className="
|
|
1279
|
-
|
|
1280
|
-
<div className="flex items-center gap-2">
|
|
1281
|
-
<AudioBarIcon className="text-fm-secondary-600 h-4 w-4 animate-pulse" />
|
|
1282
|
-
<span className="text-fm-secondary-600 text-xs">Playing</span>
|
|
1283
|
-
</div>
|
|
211
|
+
<div className="text-fm-secondary font-fm-text text-xs">
|
|
212
|
+
The Future of Design Systems
|
|
1284
213
|
</div>
|
|
1285
214
|
</div>
|
|
1286
|
-
</
|
|
1287
|
-
</
|
|
215
|
+
</IconUsageSection>
|
|
216
|
+
</IconUsageCanvas>
|
|
1288
217
|
),
|
|
1289
218
|
}
|
|
1290
219
|
|
|
1291
220
|
export const Playground: Story = {
|
|
1292
|
-
parameters: {
|
|
1293
|
-
...storyParameters,
|
|
1294
|
-
docs: {
|
|
1295
|
-
description: {
|
|
1296
|
-
story:
|
|
1297
|
-
"Interactive playground to experiment with different AudioBarIcon configurations.",
|
|
1298
|
-
},
|
|
1299
|
-
},
|
|
1300
|
-
},
|
|
1301
221
|
args: {
|
|
1302
|
-
width:
|
|
1303
|
-
height:
|
|
1304
|
-
|
|
1305
|
-
|
|
222
|
+
width: 52,
|
|
223
|
+
height: 12,
|
|
224
|
+
withAccessibility: true,
|
|
225
|
+
className: "text-fm-icon-active animate-pulse",
|
|
1306
226
|
},
|
|
1307
227
|
render: (args) => (
|
|
1308
|
-
<
|
|
1309
|
-
<
|
|
1310
|
-
|
|
1311
|
-
</div>
|
|
1312
|
-
</div>
|
|
228
|
+
<IconPlaygroundCanvas>
|
|
229
|
+
<AudioBarIcon {...args} />
|
|
230
|
+
</IconPlaygroundCanvas>
|
|
1313
231
|
),
|
|
1314
232
|
}
|