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,20 @@
|
|
|
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 { VoicePlayingIcon } from "src/ui/icons/voice-playing-icon"
|
|
6
|
+
import { VolumeFullIcon } from "src/ui/icons/volume-full-icon"
|
|
7
|
+
import { VolumeHalfIcon } from "src/ui/icons/volume-half-icon"
|
|
8
|
+
import {
|
|
9
|
+
IconColorVariations,
|
|
10
|
+
IconDefaultCanvas,
|
|
11
|
+
IconPlaygroundCanvas,
|
|
12
|
+
IconSizeVariations,
|
|
13
|
+
IconUsageCanvas,
|
|
14
|
+
IconUsageSection,
|
|
15
|
+
} from "src/ui/story-spec/icons/icon-story-canvas"
|
|
16
|
+
import { AuralIconDocsPage } from "src/ui/story-spec/icons/icon-story-docs-page"
|
|
17
|
+
|
|
4
18
|
import { VolumeOffIcon } from "."
|
|
5
19
|
|
|
6
20
|
const meta: Meta<typeof VolumeOffIcon> = {
|
|
@@ -18,981 +32,68 @@ const meta: Meta<typeof VolumeOffIcon> = {
|
|
|
18
32
|
},
|
|
19
33
|
docs: {
|
|
20
34
|
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="from-fm-surface-primary via-fm-surface-secondary/20 to-fm-surface-primary min-h-screen bg-linear-to-br">
|
|
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-surface-tertiary/10 to-fm-surface-tertiary/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-divider-primary from-fm-surface-tertiary/20 to-fm-surface-tertiary/20 !mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border bg-linear-to-br">
|
|
90
|
-
<VolumeOffIcon className="text-fm-tertiary h-12 w-12" />
|
|
91
|
-
</div>
|
|
92
|
-
<h1 className="text-fm-icon-active! text-5xl font-bold">
|
|
93
|
-
VolumeOffIcon
|
|
94
|
-
</h1>
|
|
95
|
-
<p className="text-fm-secondary! !mx-auto max-w-3xl text-xl leading-relaxed">
|
|
96
|
-
A muted audio control icon for media interfaces. Features
|
|
97
|
-
the classic speaker with crossed-out sound waves design,
|
|
98
|
-
essential for music players, video platforms, conference
|
|
99
|
-
calls, and any audio interface where users need to mute or
|
|
100
|
-
indicate disabled sound.
|
|
101
|
-
</p>
|
|
102
|
-
|
|
103
|
-
{/* Stats */}
|
|
104
|
-
<div className="flex items-center justify-center gap-8 pt-8">
|
|
105
|
-
<div className="text-center">
|
|
106
|
-
<div className="text-fm-secondary text-3xl font-bold">
|
|
107
|
-
Mute Audio
|
|
108
|
-
</div>
|
|
109
|
-
<div className="text-fm-tertiary text-sm">
|
|
110
|
-
Silent mode
|
|
111
|
-
</div>
|
|
112
|
-
</div>
|
|
113
|
-
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
114
|
-
<div className="text-center">
|
|
115
|
-
<div className="text-fm-secondary text-3xl font-bold">
|
|
116
|
-
Accessible
|
|
117
|
-
</div>
|
|
118
|
-
<div className="text-fm-tertiary text-sm">
|
|
119
|
-
Screen reader friendly
|
|
120
|
-
</div>
|
|
121
|
-
</div>
|
|
122
|
-
<div className="bg-fm-divider-primary h-8 w-px" />
|
|
123
|
-
<div className="text-center">
|
|
124
|
-
<div className="text-fm-secondary text-3xl font-bold">
|
|
125
|
-
Universal
|
|
126
|
-
</div>
|
|
127
|
-
<div className="text-fm-tertiary text-sm">
|
|
128
|
-
Standard mute symbol
|
|
129
|
-
</div>
|
|
130
|
-
</div>
|
|
131
|
-
</div>
|
|
132
|
-
</div>
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
|
|
136
|
-
{/* Content */}
|
|
137
|
-
<div className="!mx-auto max-w-7xl !space-y-16 px-6 py-12">
|
|
138
|
-
{/* Quick Usage */}
|
|
139
|
-
<div className="!space-y-8">
|
|
140
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
141
|
-
Quick Start
|
|
142
|
-
</h2>
|
|
143
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
144
|
-
<div className="!space-y-4">
|
|
145
|
-
<h3 className="text-fm-secondary! text-xl font-semibold">
|
|
146
|
-
Basic Usage
|
|
147
|
-
</h3>
|
|
148
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
149
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
150
|
-
{`import { VolumeOffIcon } from "@icons/volume-off-icon"
|
|
151
|
-
|
|
152
|
-
function AudioControls() {
|
|
35
|
+
<AuralIconDocsPage
|
|
36
|
+
accentToken="info"
|
|
37
|
+
features={[
|
|
38
|
+
{ title: "Mute", description: "Volume off / muted state" },
|
|
39
|
+
{ title: "Silence", description: "No audio output" },
|
|
40
|
+
{ title: "Accessible", description: "ARIA-ready by default" },
|
|
41
|
+
]}
|
|
42
|
+
quickStart={{
|
|
43
|
+
codeExample: `import { VolumeOffIcon } from "src/ui/icons/volume-off-icon"
|
|
44
|
+
|
|
45
|
+
function MuteButton() {
|
|
153
46
|
return (
|
|
154
|
-
<button
|
|
155
|
-
|
|
156
|
-
className="p-2 hover:bg-white/10 rounded-lg"
|
|
157
|
-
aria-label="Mute audio"
|
|
158
|
-
>
|
|
159
|
-
<VolumeOffIcon className="h-6 w-6 text-slate-400" />
|
|
47
|
+
<button>
|
|
48
|
+
<VolumeOffIcon className="h-5 w-5 text-fm-icon-inactive" />
|
|
160
49
|
</button>
|
|
161
50
|
)
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
Prop
|
|
197
|
-
</th>
|
|
198
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
199
|
-
Type
|
|
200
|
-
</th>
|
|
201
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
202
|
-
Default
|
|
203
|
-
</th>
|
|
204
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
205
|
-
Description
|
|
206
|
-
</th>
|
|
207
|
-
</tr>
|
|
208
|
-
</thead>
|
|
209
|
-
<tbody>
|
|
210
|
-
{" "}
|
|
211
|
-
<tr className="bg-fm-surface-secondary!">
|
|
212
|
-
<td className="text-fm-icon-info! px-6 py-4 font-mono text-sm">
|
|
213
|
-
withAccessibility
|
|
214
|
-
</td>
|
|
215
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
216
|
-
boolean
|
|
217
|
-
</td>
|
|
218
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
219
|
-
true
|
|
220
|
-
</td>
|
|
221
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
222
|
-
Whether to wrap the icon with accessibility feature
|
|
223
|
-
</td>
|
|
224
|
-
</tr>
|
|
225
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
226
|
-
<td className="text-fm-secondary! px-6 py-4 font-mono text-sm">
|
|
227
|
-
height
|
|
228
|
-
</td>
|
|
229
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
230
|
-
number | string
|
|
231
|
-
</td>
|
|
232
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
233
|
-
24
|
|
234
|
-
</td>
|
|
235
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
236
|
-
Height of the icon in pixels
|
|
237
|
-
</td>
|
|
238
|
-
</tr>
|
|
239
|
-
<tr className="border-fm-divider-tertiary border-b">
|
|
240
|
-
<td className="text-fm-secondary! px-6 py-4 font-mono text-sm">
|
|
241
|
-
stroke
|
|
242
|
-
</td>
|
|
243
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
244
|
-
string
|
|
245
|
-
</td>
|
|
246
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
247
|
-
currentColor
|
|
248
|
-
</td>
|
|
249
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
250
|
-
Stroke color of the icon
|
|
251
|
-
</td>
|
|
252
|
-
</tr>
|
|
253
|
-
<tr className="border-fm-divider-tertiary bg-fm-surface-secondary! border-b">
|
|
254
|
-
<td className="text-fm-secondary! px-6 py-4 font-mono text-sm">
|
|
255
|
-
strokeWidth
|
|
256
|
-
</td>
|
|
257
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
258
|
-
string | number
|
|
259
|
-
</td>
|
|
260
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
261
|
-
1.5
|
|
262
|
-
</td>
|
|
263
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
264
|
-
Width of the stroke
|
|
265
|
-
</td>
|
|
266
|
-
</tr>
|
|
267
|
-
<tr className="border-fm-divider-tertiary border-b">
|
|
268
|
-
<td className="text-fm-secondary! px-6 py-4 font-mono text-sm">
|
|
269
|
-
className
|
|
270
|
-
</td>
|
|
271
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
272
|
-
string
|
|
273
|
-
</td>
|
|
274
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
275
|
-
-
|
|
276
|
-
</td>
|
|
277
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
278
|
-
CSS classes for styling (use for overrides)
|
|
279
|
-
</td>
|
|
280
|
-
</tr>
|
|
281
|
-
<tr className="bg-fm-surface-secondary!">
|
|
282
|
-
<td className="text-fm-secondary! px-6 py-4 font-mono text-sm">
|
|
283
|
-
...svgProps
|
|
284
|
-
</td>
|
|
285
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
286
|
-
SVGProps
|
|
287
|
-
</td>
|
|
288
|
-
<td className="text-fm-placeholder! px-6 py-4 text-sm">
|
|
289
|
-
-
|
|
290
|
-
</td>
|
|
291
|
-
<td className="text-fm-secondary! px-6 py-4 text-sm">
|
|
292
|
-
All standard SVG element props
|
|
293
|
-
</td>
|
|
294
|
-
</tr>
|
|
295
|
-
</tbody>
|
|
296
|
-
</table>
|
|
297
|
-
</div>
|
|
298
|
-
</div>
|
|
299
|
-
|
|
300
|
-
{/* Size Variations */}
|
|
301
|
-
<div className="!space-y-8">
|
|
302
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
303
|
-
Size Variations
|
|
304
|
-
</h2>
|
|
305
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-8">
|
|
306
|
-
<div className="!space-y-6">
|
|
307
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
308
|
-
<div className="!space-y-4">
|
|
309
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
310
|
-
Standard Sizes
|
|
311
|
-
</h3>
|
|
312
|
-
<div className="bg-fm-surface-secondary flex items-end gap-6 rounded-lg p-6">
|
|
313
|
-
<div className="text-center">
|
|
314
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-3 w-3" />
|
|
315
|
-
<span className="text-fm-tertiary text-xs">
|
|
316
|
-
12px
|
|
317
|
-
</span>
|
|
318
|
-
</div>
|
|
319
|
-
<div className="text-center">
|
|
320
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-4 w-4" />
|
|
321
|
-
<span className="text-fm-tertiary text-xs">
|
|
322
|
-
16px
|
|
323
|
-
</span>
|
|
324
|
-
</div>
|
|
325
|
-
<div className="text-center">
|
|
326
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-5 w-5" />
|
|
327
|
-
<span className="text-fm-tertiary text-xs">
|
|
328
|
-
20px
|
|
329
|
-
</span>
|
|
330
|
-
</div>
|
|
331
|
-
<div className="text-center">
|
|
332
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-6 w-6" />
|
|
333
|
-
<span className="text-fm-tertiary text-xs">
|
|
334
|
-
24px
|
|
335
|
-
</span>
|
|
336
|
-
</div>
|
|
337
|
-
<div className="text-center">
|
|
338
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-8 w-8" />
|
|
339
|
-
<span className="text-fm-tertiary text-xs">
|
|
340
|
-
32px
|
|
341
|
-
</span>
|
|
342
|
-
</div>
|
|
343
|
-
<div className="text-center">
|
|
344
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-12 w-12" />
|
|
345
|
-
<span className="text-fm-tertiary text-xs">
|
|
346
|
-
48px
|
|
347
|
-
</span>
|
|
348
|
-
</div>
|
|
349
|
-
</div>
|
|
350
|
-
</div>
|
|
351
|
-
|
|
352
|
-
<div className="!space-y-4">
|
|
353
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
354
|
-
Code Example
|
|
355
|
-
</h3>
|
|
356
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
357
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
358
|
-
{`// Small (16px) - compact interfaces
|
|
359
|
-
<VolumeOffIcon className="h-4 w-4" />
|
|
360
|
-
|
|
361
|
-
// Medium (24px) - standard controls
|
|
362
|
-
<VolumeOffIcon className="h-6 w-6" />
|
|
363
|
-
|
|
364
|
-
// Large (32px) - prominent displays
|
|
365
|
-
<VolumeOffIcon className="h-8 w-8" />
|
|
366
|
-
|
|
367
|
-
// Custom size
|
|
368
|
-
<VolumeOffIcon width={40} height={40} />`}
|
|
369
|
-
</pre>
|
|
370
|
-
</div>
|
|
371
|
-
</div>
|
|
372
|
-
</div>
|
|
373
|
-
</div>
|
|
374
|
-
</div>
|
|
375
|
-
</div>
|
|
376
|
-
|
|
377
|
-
{/* Color Variations */}
|
|
378
|
-
<div className="!space-y-8">
|
|
379
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
380
|
-
Color Variations
|
|
381
|
-
</h2>
|
|
382
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
383
|
-
<div className="!space-y-4">
|
|
384
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
385
|
-
Semantic Colors
|
|
386
|
-
</h3>
|
|
387
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
388
|
-
<div className="flex items-center gap-4">
|
|
389
|
-
<VolumeOffIcon className="text-fm-tertiary h-6 w-6" />
|
|
390
|
-
<div>
|
|
391
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
392
|
-
Muted
|
|
393
|
-
</div>
|
|
394
|
-
<div className="text-fm-tertiary text-xs">
|
|
395
|
-
text-fm-tertiary
|
|
396
|
-
</div>
|
|
397
|
-
</div>
|
|
398
|
-
</div>
|
|
399
|
-
<div className="flex items-center gap-4">
|
|
400
|
-
<VolumeOffIcon className="text-fm-placeholder h-6 w-6" />
|
|
401
|
-
<div>
|
|
402
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
403
|
-
Inactive
|
|
404
|
-
</div>
|
|
405
|
-
<div className="text-fm-tertiary text-xs">
|
|
406
|
-
text-fm-placeholder
|
|
407
|
-
</div>
|
|
408
|
-
</div>
|
|
409
|
-
</div>
|
|
410
|
-
<div className="flex items-center gap-4">
|
|
411
|
-
<VolumeOffIcon className="text-fm-tertiary h-6 w-6" />
|
|
412
|
-
<div>
|
|
413
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
414
|
-
Neutral
|
|
415
|
-
</div>
|
|
416
|
-
<div className="text-fm-tertiary text-xs">
|
|
417
|
-
text-fm-tertiary
|
|
418
|
-
</div>
|
|
419
|
-
</div>
|
|
420
|
-
</div>
|
|
421
|
-
<div className="flex items-center gap-4">
|
|
422
|
-
<VolumeOffIcon className="text-fm-icon-negative h-6 w-6" />
|
|
423
|
-
<div>
|
|
424
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
425
|
-
Disabled
|
|
426
|
-
</div>
|
|
427
|
-
<div className="text-fm-tertiary text-xs">
|
|
428
|
-
text-fm-icon-negative
|
|
429
|
-
</div>
|
|
430
|
-
</div>
|
|
431
|
-
</div>
|
|
432
|
-
</div>
|
|
433
|
-
</div>
|
|
434
|
-
|
|
435
|
-
<div className="!space-y-4">
|
|
436
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
437
|
-
Custom Colors
|
|
438
|
-
</h3>
|
|
439
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
440
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
441
|
-
{`// Using Tailwind classes
|
|
442
|
-
<VolumeOffIcon className="h-6 w-6 text-slate-400" />
|
|
443
|
-
<VolumeOffIcon className="h-6 w-6 text-gray-500" />
|
|
444
|
-
|
|
445
|
-
// Using CSS custom properties
|
|
446
|
-
<VolumeOffIcon
|
|
447
|
-
className="h-6 w-6"
|
|
448
|
-
style={{ color: 'var(--color-muted)' }}
|
|
449
|
-
/>
|
|
450
|
-
|
|
451
|
-
// Direct stroke prop
|
|
452
|
-
<VolumeOffIcon
|
|
453
|
-
width={24}
|
|
454
|
-
height={24}
|
|
455
|
-
stroke="#64748b"
|
|
456
|
-
/>`}
|
|
457
|
-
</pre>
|
|
458
|
-
</div>
|
|
459
|
-
</div>
|
|
460
|
-
</div>
|
|
461
|
-
</div>
|
|
462
|
-
|
|
463
|
-
{/* Usage Examples */}
|
|
464
|
-
<div className="!space-y-8">
|
|
465
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
466
|
-
Usage Examples
|
|
467
|
-
</h2>
|
|
468
|
-
|
|
469
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
470
|
-
{/* Video Player */}
|
|
471
|
-
<div className="!space-y-4">
|
|
472
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
473
|
-
Video Player
|
|
474
|
-
</h3>
|
|
475
|
-
<div className="!space-y-4">
|
|
476
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
477
|
-
<div className="from-fm-surface-tertiary/20 to-fm-surface-tertiary/20 mb-4 flex h-32 items-center justify-center rounded bg-linear-to-r">
|
|
478
|
-
<div className="text-fm-placeholder text-sm">
|
|
479
|
-
Video Content
|
|
480
|
-
</div>
|
|
481
|
-
</div>
|
|
482
|
-
<div className="flex items-center justify-between">
|
|
483
|
-
<div className="flex items-center gap-4">
|
|
484
|
-
<button className="hover:bg-fm-surface-secondary rounded-lg p-2 transition-colors">
|
|
485
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-6 w-6 rounded-full border" />
|
|
486
|
-
</button>
|
|
487
|
-
<button className="hover:bg-fm-surface-secondary rounded-lg p-2 transition-colors">
|
|
488
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-6 w-6 rounded-full border" />
|
|
489
|
-
</button>
|
|
490
|
-
<div className="text-fm-tertiary text-sm">
|
|
491
|
-
00:42 / 03:28
|
|
492
|
-
</div>
|
|
493
|
-
</div>
|
|
494
|
-
<div className="flex items-center gap-2">
|
|
495
|
-
<button className="hover:bg-fm-surface-secondary rounded-lg p-2">
|
|
496
|
-
<VolumeOffIcon className="text-fm-tertiary h-5 w-5" />
|
|
497
|
-
</button>
|
|
498
|
-
<button className="hover:bg-fm-surface-secondary rounded p-1.5">
|
|
499
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-4 w-4 rounded-full border" />
|
|
500
|
-
</button>
|
|
501
|
-
</div>
|
|
502
|
-
</div>
|
|
503
|
-
</div>
|
|
504
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
505
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
506
|
-
{`// Video player with mute control
|
|
507
|
-
<div className="video-controls">
|
|
508
|
-
<div className="playback-controls">
|
|
509
|
-
<PlayButton />
|
|
510
|
-
<SkipButton />
|
|
511
|
-
<TimeDisplay />
|
|
512
|
-
</div>
|
|
513
|
-
<div className="audio-controls">
|
|
514
|
-
<button
|
|
515
|
-
onClick={toggleMute}
|
|
516
|
-
aria-label={isMuted ? "Unmute" : "Mute"}
|
|
517
|
-
>
|
|
518
|
-
{isMuted ? (
|
|
519
|
-
<VolumeOffIcon className="h-5 w-5 text-slate-400" />
|
|
520
|
-
) : (
|
|
521
|
-
<VolumeOnIcon className="h-5 w-5" />
|
|
522
|
-
)}
|
|
523
|
-
</button>
|
|
524
|
-
<VolumeSlider />
|
|
525
|
-
</div>
|
|
526
|
-
</div>`}
|
|
527
|
-
</pre>
|
|
528
|
-
</div>
|
|
529
|
-
</div>
|
|
530
|
-
</div>
|
|
531
|
-
|
|
532
|
-
{/* Conference Call */}
|
|
533
|
-
<div className="!space-y-4">
|
|
534
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
535
|
-
Conference Call
|
|
536
|
-
</h3>
|
|
537
|
-
<div className="!space-y-4">
|
|
538
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
539
|
-
<div className="mb-4">
|
|
540
|
-
<div className="text-fm-icon-active! text-sm font-medium">
|
|
541
|
-
Team Meeting
|
|
542
|
-
</div>
|
|
543
|
-
<div className="text-fm-tertiary! text-xs">
|
|
544
|
-
4 participants
|
|
545
|
-
</div>
|
|
546
|
-
</div>
|
|
547
|
-
<div className="mb-4 grid grid-cols-2 gap-3">
|
|
548
|
-
{[...Array(4)].map((_, i) => (
|
|
549
|
-
<div
|
|
550
|
-
key={i}
|
|
551
|
-
className="bg-fm-surface-secondary flex items-center gap-2 rounded p-2"
|
|
552
|
-
>
|
|
553
|
-
<div className="from-fm-surface-tertiary/20 to-fm-surface-tertiary/20 h-8 w-8 rounded-full bg-linear-to-br" />
|
|
554
|
-
<div className="flex-1">
|
|
555
|
-
<div className="text-fm-icon-active text-xs font-medium">
|
|
556
|
-
User {i + 1}
|
|
557
|
-
</div>
|
|
558
|
-
<div className="text-fm-placeholder text-xs">
|
|
559
|
-
{i === 1 ? "Speaking..." : "Muted"}
|
|
560
|
-
</div>
|
|
561
|
-
</div>
|
|
562
|
-
{i === 1 ? (
|
|
563
|
-
<VolumeOffIcon className="text-fm-tertiary h-4 w-4" />
|
|
564
|
-
) : (
|
|
565
|
-
<div className="bg-fm-icon-inactive/20 h-4 w-4 rounded-full" />
|
|
566
|
-
)}
|
|
567
|
-
</div>
|
|
568
|
-
))}
|
|
569
|
-
</div>
|
|
570
|
-
<div className="flex justify-center gap-4">
|
|
571
|
-
<button className="border-fm-icon-negative/30 bg-fm-icon-negative/20 hover:bg-fm-icon-negative/30 rounded-lg border p-3">
|
|
572
|
-
<VolumeOffIcon className="text-fm-icon-negative h-6 w-6" />
|
|
573
|
-
</button>
|
|
574
|
-
<button className="border-fm-divider-primary bg-fm-surface-secondary hover:bg-fm-divider-primary rounded-lg border p-3">
|
|
575
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-6 w-6 rounded-full border" />
|
|
576
|
-
</button>
|
|
577
|
-
<button className="bg-fm-icon-negative hover:bg-fm-icon-negative rounded-lg p-3">
|
|
578
|
-
<div className="border-fm-divider-contrast bg-fm-icon-negative h-6 w-6 rounded-full border" />
|
|
579
|
-
</button>
|
|
580
|
-
</div>
|
|
581
|
-
</div>
|
|
582
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
583
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
584
|
-
{`// Conference call interface
|
|
585
|
-
<div className="call-controls">
|
|
586
|
-
<button
|
|
587
|
-
onClick={toggleMicrophone}
|
|
588
|
-
className={isMicMuted ? "muted" : "active"}
|
|
589
|
-
aria-label={isMicMuted ? "Unmute microphone" : "Mute microphone"}
|
|
590
|
-
>
|
|
591
|
-
{isMicMuted ? (
|
|
592
|
-
<VolumeOffIcon className="h-6 w-6 text-red-400" />
|
|
593
|
-
) : (
|
|
594
|
-
<MicrophoneIcon className="h-6 w-6" />
|
|
595
|
-
)}
|
|
596
|
-
</button>
|
|
597
|
-
<CameraButton />
|
|
598
|
-
<HangUpButton />
|
|
599
|
-
</div>`}
|
|
600
|
-
</pre>
|
|
601
|
-
</div>
|
|
602
|
-
</div>
|
|
603
|
-
</div>
|
|
604
|
-
|
|
605
|
-
{/* Music Player */}
|
|
606
|
-
<div className="!space-y-4">
|
|
607
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
608
|
-
Music Player
|
|
609
|
-
</h3>
|
|
610
|
-
<div className="!space-y-4">
|
|
611
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
612
|
-
<div className="mb-4 flex items-center gap-3">
|
|
613
|
-
<div className="from-fm-surface-tertiary/20 to-fm-surface-tertiary/20 h-12 w-12 rounded-lg bg-linear-to-br" />
|
|
614
|
-
<div>
|
|
615
|
-
<div className="text-fm-icon-active! text-sm font-medium">
|
|
616
|
-
Silent Night
|
|
617
|
-
</div>
|
|
618
|
-
<div className="text-fm-tertiary! text-xs">
|
|
619
|
-
Relaxing Sounds
|
|
620
|
-
</div>
|
|
621
|
-
</div>
|
|
622
|
-
</div>
|
|
623
|
-
<div className="mb-4 flex items-center justify-center gap-4">
|
|
624
|
-
<button className="hover:bg-fm-surface-secondary rounded-lg p-2 transition-colors">
|
|
625
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-6 w-6 rounded-full border" />
|
|
626
|
-
</button>
|
|
627
|
-
<button className="hover:bg-fm-surface-secondary rounded-lg p-3 transition-colors">
|
|
628
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-8 w-8 rounded-full border-2" />
|
|
629
|
-
</button>
|
|
630
|
-
<button className="hover:bg-fm-surface-secondary rounded-lg p-2 transition-colors">
|
|
631
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-6 w-6 rounded-full border" />
|
|
632
|
-
</button>
|
|
633
|
-
</div>
|
|
634
|
-
<div className="flex items-center justify-between">
|
|
635
|
-
<div className="text-fm-tertiary text-xs">2:34</div>
|
|
636
|
-
<div className="flex items-center gap-2">
|
|
637
|
-
<VolumeOffIcon className="text-fm-tertiary h-4 w-4" />
|
|
638
|
-
<div className="bg-fm-divider-primary h-1 w-20 rounded-full">
|
|
639
|
-
<div className="bg-fm-icon-inactive h-full w-0 rounded-full" />
|
|
640
|
-
</div>
|
|
641
|
-
</div>
|
|
642
|
-
<div className="text-fm-tertiary text-xs">4:12</div>
|
|
643
|
-
</div>
|
|
644
|
-
</div>
|
|
645
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
646
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
647
|
-
{`// Music player with volume control
|
|
648
|
-
<div className="player-interface">
|
|
649
|
-
<div className="track-controls">
|
|
650
|
-
<SkipBackwardIcon />
|
|
651
|
-
<PlayPauseButton />
|
|
652
|
-
<SkipForwardIcon />
|
|
653
|
-
</div>
|
|
654
|
-
<div className="volume-section">
|
|
655
|
-
<button onClick={toggleMute}>
|
|
656
|
-
{volume === 0 ? (
|
|
657
|
-
<VolumeOffIcon className="h-4 w-4 text-slate-400" />
|
|
658
|
-
) : (
|
|
659
|
-
<VolumeOnIcon className="h-4 w-4" />
|
|
660
|
-
)}
|
|
661
|
-
</button>
|
|
662
|
-
<VolumeSlider value={volume} onChange={setVolume} />
|
|
663
|
-
</div>
|
|
664
|
-
</div>`}
|
|
665
|
-
</pre>
|
|
666
|
-
</div>
|
|
667
|
-
</div>
|
|
668
|
-
</div>
|
|
669
|
-
|
|
670
|
-
{/* System Settings */}
|
|
671
|
-
<div className="!space-y-4">
|
|
672
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
673
|
-
System Settings
|
|
674
|
-
</h3>
|
|
675
|
-
<div className="!space-y-4">
|
|
676
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
677
|
-
<div className="!space-y-4">
|
|
678
|
-
<div>
|
|
679
|
-
<h4 className="text-fm-icon-active mb-2 text-sm font-medium">
|
|
680
|
-
Audio Settings
|
|
681
|
-
</h4>
|
|
682
|
-
<div className="space-y-3">
|
|
683
|
-
<div className="flex items-center justify-between">
|
|
684
|
-
<div className="flex items-center gap-3">
|
|
685
|
-
<VolumeOffIcon className="text-fm-tertiary h-5 w-5" />
|
|
686
|
-
<div>
|
|
687
|
-
<div className="text-fm-icon-active text-sm">
|
|
688
|
-
System Sounds
|
|
689
|
-
</div>
|
|
690
|
-
<div className="text-fm-tertiary text-xs">
|
|
691
|
-
Muted
|
|
692
|
-
</div>
|
|
693
|
-
</div>
|
|
694
|
-
</div>
|
|
695
|
-
<button className="bg-fm-icon-inactive relative h-6 w-10 rounded-full">
|
|
696
|
-
<div className="bg-fm-surface-contrast absolute top-1 left-1 h-4 w-4 rounded-full transition-transform" />
|
|
697
|
-
</button>
|
|
698
|
-
</div>
|
|
699
|
-
<div className="flex items-center justify-between">
|
|
700
|
-
<div className="flex items-center gap-3">
|
|
701
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-5 w-5 rounded-full border" />
|
|
702
|
-
<div>
|
|
703
|
-
<div className="text-fm-icon-active text-sm">
|
|
704
|
-
Notifications
|
|
705
|
-
</div>
|
|
706
|
-
<div className="text-fm-tertiary text-xs">
|
|
707
|
-
Enabled
|
|
708
|
-
</div>
|
|
709
|
-
</div>
|
|
710
|
-
</div>
|
|
711
|
-
<button className="bg-fm-icon-info relative h-6 w-10 rounded-full">
|
|
712
|
-
<div className="bg-fm-surface-contrast absolute top-1 right-1 h-4 w-4 rounded-full transition-transform" />
|
|
713
|
-
</button>
|
|
714
|
-
</div>
|
|
715
|
-
<div className="flex items-center justify-between">
|
|
716
|
-
<div className="flex items-center gap-3">
|
|
717
|
-
<VolumeOffIcon className="text-fm-icon-negative h-5 w-5" />
|
|
718
|
-
<div>
|
|
719
|
-
<div className="text-fm-icon-active text-sm">
|
|
720
|
-
Microphone
|
|
721
|
-
</div>
|
|
722
|
-
<div className="text-fm-tertiary text-xs">
|
|
723
|
-
Disabled
|
|
724
|
-
</div>
|
|
725
|
-
</div>
|
|
726
|
-
</div>
|
|
727
|
-
<button className="bg-fm-icon-negative relative h-6 w-10 rounded-full">
|
|
728
|
-
<div className="bg-fm-surface-contrast absolute top-1 left-1 h-4 w-4 rounded-full transition-transform" />
|
|
729
|
-
</button>
|
|
730
|
-
</div>
|
|
731
|
-
</div>
|
|
732
|
-
</div>
|
|
733
|
-
</div>
|
|
734
|
-
</div>
|
|
735
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
736
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
737
|
-
{`// System settings with audio controls
|
|
738
|
-
<div className="settings-section">
|
|
739
|
-
<h3>Audio Settings</h3>
|
|
740
|
-
<div className="setting-item">
|
|
741
|
-
<div className="setting-info">
|
|
742
|
-
<VolumeOffIcon className="h-5 w-5 text-slate-400" />
|
|
743
|
-
<div>
|
|
744
|
-
<div>System Sounds</div>
|
|
745
|
-
<div className="subtitle">Muted</div>
|
|
746
|
-
</div>
|
|
747
|
-
</div>
|
|
748
|
-
<Toggle
|
|
749
|
-
checked={!systemSoundsMuted}
|
|
750
|
-
onChange={toggleSystemSounds}
|
|
751
|
-
/>
|
|
752
|
-
</div>
|
|
753
|
-
</div>`}
|
|
754
|
-
</pre>
|
|
755
|
-
</div>
|
|
756
|
-
</div>
|
|
757
|
-
</div>
|
|
758
|
-
</div>
|
|
759
|
-
</div>
|
|
760
|
-
|
|
761
|
-
{/* Accessibility */}
|
|
762
|
-
<div className="!space-y-8">
|
|
763
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
764
|
-
Accessibility Features
|
|
765
|
-
</h2>
|
|
766
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
767
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
768
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
769
|
-
✅ Built-in Features
|
|
770
|
-
</h3>
|
|
771
|
-
<ul className="text-fm-secondary! !space-y-2 text-sm">
|
|
772
|
-
<li className="text-fm-secondary!">
|
|
773
|
-
Uses Radix UI AccessibleIcon wrapper
|
|
774
|
-
</li>
|
|
775
|
-
<li className="text-fm-secondary!">
|
|
776
|
-
Provides screen reader label "Volume off icon"
|
|
777
|
-
</li>
|
|
778
|
-
<li className="text-fm-secondary!">
|
|
779
|
-
Supports keyboard navigation when interactive
|
|
780
|
-
</li>
|
|
781
|
-
<li className="text-fm-secondary!">
|
|
782
|
-
Maintains proper color contrast ratios
|
|
783
|
-
</li>
|
|
784
|
-
<li className="text-fm-secondary!">
|
|
785
|
-
Scales with user's font size preferences
|
|
786
|
-
</li>
|
|
787
|
-
</ul>
|
|
788
|
-
</div>
|
|
789
|
-
|
|
790
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
791
|
-
<h3 className="text-fm-secondary! text-lg font-semibold">
|
|
792
|
-
💡 Best Practices
|
|
793
|
-
</h3>
|
|
794
|
-
<ul className="text-fm-secondary !space-y-2 text-sm">
|
|
795
|
-
<li className="text-fm-secondary!">
|
|
796
|
-
Always provide descriptive aria-labels for mute buttons
|
|
797
|
-
</li>
|
|
798
|
-
<li className="text-fm-secondary!">
|
|
799
|
-
Use consistent placement in audio control groups
|
|
800
|
-
</li>
|
|
801
|
-
<li className="text-fm-secondary!">
|
|
802
|
-
Ensure sufficient touch target size (44px minimum)
|
|
803
|
-
</li>
|
|
804
|
-
<li className="text-fm-secondary!">
|
|
805
|
-
Provide visible focus states for keyboard users
|
|
806
|
-
</li>
|
|
807
|
-
<li className="text-fm-secondary!">
|
|
808
|
-
Consider keyboard shortcuts (e.g., M key for mute)
|
|
809
|
-
</li>
|
|
810
|
-
</ul>
|
|
811
|
-
</div>
|
|
812
|
-
</div>
|
|
813
|
-
|
|
814
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
815
|
-
<h3 className="!text-fm-secondary mb-4 text-lg font-semibold">
|
|
816
|
-
Proper ARIA Implementation
|
|
817
|
-
</h3>
|
|
818
|
-
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
819
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
820
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
821
|
-
{`// Mute button with proper ARIA
|
|
822
|
-
<button
|
|
823
|
-
aria-label={isMuted ? "Unmute audio" : "Mute audio"}
|
|
824
|
-
aria-pressed={isMuted}
|
|
825
|
-
className="p-2 hover:bg-white/10 rounded-lg"
|
|
826
|
-
onClick={toggleMute}
|
|
827
|
-
>
|
|
828
|
-
{isMuted ? (
|
|
829
|
-
<VolumeOffIcon className="h-6 w-6 text-slate-400" />
|
|
830
|
-
) : (
|
|
831
|
-
<VolumeOnIcon className="h-6 w-6" />
|
|
832
|
-
)}
|
|
833
|
-
</button>
|
|
834
|
-
|
|
835
|
-
// Conference call microphone control
|
|
836
|
-
<button
|
|
837
|
-
aria-label={isMicMuted ? "Unmute microphone" : "Mute microphone"}
|
|
838
|
-
aria-describedby="mic-status"
|
|
839
|
-
onClick={toggleMicrophone}
|
|
840
|
-
>
|
|
841
|
-
<VolumeOffIcon className="h-6 w-6" />
|
|
842
|
-
</button>
|
|
843
|
-
<div id="mic-status" className="sr-only">
|
|
844
|
-
Microphone is {isMicMuted ? "muted" : "active"}
|
|
845
|
-
</div>
|
|
846
|
-
|
|
847
|
-
// Volume control with live region
|
|
848
|
-
<div className="volume-controls">
|
|
849
|
-
<button onClick={toggleMute}>
|
|
850
|
-
<VolumeOffIcon className="h-5 w-5" />
|
|
851
|
-
</button>
|
|
852
|
-
<div
|
|
853
|
-
role="slider"
|
|
854
|
-
aria-label="Volume"
|
|
855
|
-
aria-valuemin="0"
|
|
856
|
-
aria-valuemax="100"
|
|
857
|
-
aria-valuenow={volume}
|
|
858
|
-
/>
|
|
859
|
-
<div aria-live="polite" className="sr-only">
|
|
860
|
-
Volume {volume === 0 ? "muted" : \`\${volume}%\`}
|
|
861
|
-
</div>
|
|
862
|
-
</div>`}
|
|
863
|
-
</pre>
|
|
864
|
-
</div>
|
|
865
|
-
<div className="!space-y-4">
|
|
866
|
-
<p className="text-fm-secondary! text-sm">
|
|
867
|
-
When using VolumeOffIcon for audio controls, always
|
|
868
|
-
provide clear context about the current mute state and
|
|
869
|
-
what the action will do.
|
|
870
|
-
</p>
|
|
871
|
-
<div className="border-fm-divider-secondary bg-fm-icon-inactive/10 rounded-lg border p-4">
|
|
872
|
-
<div className="text-fm-secondary flex items-center gap-2 text-sm">
|
|
873
|
-
<VolumeOffIcon className="h-4 w-4" />
|
|
874
|
-
<span>
|
|
875
|
-
Screen readers need context about mute vs unmute
|
|
876
|
-
state
|
|
877
|
-
</span>
|
|
878
|
-
</div>
|
|
879
|
-
</div>
|
|
880
|
-
</div>
|
|
881
|
-
</div>
|
|
882
|
-
</div>
|
|
883
|
-
</div>
|
|
884
|
-
|
|
885
|
-
{/* Related Icons */}
|
|
886
|
-
<div className="!space-y-8">
|
|
887
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
888
|
-
Related Icons
|
|
889
|
-
</h2>
|
|
890
|
-
<div className="grid grid-cols-2 gap-6 md:grid-cols-4">
|
|
891
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
892
|
-
<div className="bg-fm-icon-positive/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
893
|
-
<span className="text-fm-icon-active! !text-2xl">🔊</span>
|
|
894
|
-
</div>
|
|
895
|
-
<div>
|
|
896
|
-
<div className="text-fm-icon-active font-medium">
|
|
897
|
-
VolumeOnIcon
|
|
898
|
-
</div>
|
|
899
|
-
<div className="text-fm-tertiary text-xs">
|
|
900
|
-
Audio enabled
|
|
901
|
-
</div>
|
|
902
|
-
</div>
|
|
903
|
-
</div>
|
|
904
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
905
|
-
<div className="bg-fm-icon-info/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
906
|
-
<span className="text-fm-icon-active! !text-2xl">🎵</span>
|
|
907
|
-
</div>
|
|
908
|
-
<div>
|
|
909
|
-
<div className="text-fm-icon-active font-medium">
|
|
910
|
-
MusicIcon
|
|
911
|
-
</div>
|
|
912
|
-
<div className="text-fm-tertiary text-xs">
|
|
913
|
-
Audio content
|
|
914
|
-
</div>
|
|
915
|
-
</div>
|
|
916
|
-
</div>
|
|
917
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
918
|
-
<div className="bg-fm-secondary-500/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
919
|
-
<span className="text-fm-icon-active! !text-2xl">🎙️</span>
|
|
920
|
-
</div>
|
|
921
|
-
<div>
|
|
922
|
-
<div className="text-fm-icon-active font-medium">
|
|
923
|
-
MicrophoneIcon
|
|
924
|
-
</div>
|
|
925
|
-
<div className="text-fm-tertiary text-xs">
|
|
926
|
-
Input audio
|
|
927
|
-
</div>
|
|
928
|
-
</div>
|
|
929
|
-
</div>
|
|
930
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
931
|
-
<div className="bg-fm-icon-warning/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
932
|
-
<span className="text-fm-icon-active! !text-2xl">🎧</span>
|
|
933
|
-
</div>
|
|
934
|
-
<div>
|
|
935
|
-
<div className="text-fm-icon-active font-medium">
|
|
936
|
-
HeadphonesIcon
|
|
937
|
-
</div>
|
|
938
|
-
<div className="text-fm-tertiary text-xs">
|
|
939
|
-
Audio output
|
|
940
|
-
</div>
|
|
941
|
-
</div>
|
|
942
|
-
</div>
|
|
943
|
-
</div>
|
|
944
|
-
</div>
|
|
945
|
-
</div>
|
|
946
|
-
|
|
947
|
-
{/* Footer */}
|
|
948
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary border-t backdrop-blur-xl">
|
|
949
|
-
<div className="!mx-auto max-w-7xl px-6 py-8">
|
|
950
|
-
<div className="!space-y-4 text-center">
|
|
951
|
-
<p className="text-fm-tertiary!">
|
|
952
|
-
VolumeOffIcon is part of the Aural UI icon library, built
|
|
953
|
-
with accessibility and audio control best practices in mind.
|
|
954
|
-
</p>
|
|
955
|
-
<p className="text-fm-placeholder! text-sm">
|
|
956
|
-
All icons use Radix UI's AccessibleIcon for screen reader
|
|
957
|
-
compatibility and follow WCAG guidelines for media controls.
|
|
958
|
-
</p>
|
|
959
|
-
</div>
|
|
960
|
-
</div>
|
|
961
|
-
</div>
|
|
962
|
-
</div>
|
|
963
|
-
</>
|
|
51
|
+
}`,
|
|
52
|
+
livePreview: (
|
|
53
|
+
<button>
|
|
54
|
+
<VolumeOffIcon className="text-fm-icon-inactive h-6 w-6" />
|
|
55
|
+
</button>
|
|
56
|
+
),
|
|
57
|
+
}}
|
|
58
|
+
relatedIcons={[
|
|
59
|
+
{
|
|
60
|
+
name: "VolumeFullIcon",
|
|
61
|
+
description: "Full volume icon",
|
|
62
|
+
icon: VolumeFullIcon,
|
|
63
|
+
accentToken: "info",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: "VolumeHalfIcon",
|
|
67
|
+
description: "Half volume icon",
|
|
68
|
+
icon: VolumeHalfIcon,
|
|
69
|
+
accentToken: "positive",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: "VoicePlayingIcon",
|
|
73
|
+
description: "Voice / audio playing icon",
|
|
74
|
+
icon: VoicePlayingIcon,
|
|
75
|
+
accentToken: "warning",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "MusicalNoteIcon",
|
|
79
|
+
description: "Music / audio content icon",
|
|
80
|
+
icon: MusicalNoteIcon,
|
|
81
|
+
accentToken: "negative",
|
|
82
|
+
},
|
|
83
|
+
]}
|
|
84
|
+
/>
|
|
964
85
|
),
|
|
965
86
|
},
|
|
966
87
|
},
|
|
967
88
|
tags: ["autodocs"],
|
|
968
89
|
argTypes: {
|
|
969
|
-
width: {
|
|
970
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
971
|
-
description: "Width of the icon in pixels",
|
|
972
|
-
},
|
|
973
|
-
withAccessibility: {
|
|
974
|
-
control: "boolean",
|
|
975
|
-
description: "Whether to wrap the icon with accessibility features",
|
|
976
|
-
},
|
|
977
|
-
height: {
|
|
978
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
979
|
-
description: "Height of the icon in pixels",
|
|
980
|
-
},
|
|
981
|
-
stroke: {
|
|
982
|
-
control: "color",
|
|
983
|
-
description: "Stroke color of the icon",
|
|
984
|
-
},
|
|
985
|
-
strokeWidth: {
|
|
986
|
-
control: { type: "range", min: 0.5, max: 4, step: 0.5 },
|
|
987
|
-
description: "Width of the stroke",
|
|
988
|
-
},
|
|
989
90
|
className: {
|
|
990
91
|
control: "text",
|
|
991
|
-
description: "CSS classes
|
|
92
|
+
description: "CSS classes including color token",
|
|
992
93
|
},
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
description: "
|
|
94
|
+
withAccessibility: {
|
|
95
|
+
control: "boolean",
|
|
96
|
+
description: "Wrap with accessibility label",
|
|
996
97
|
},
|
|
997
98
|
},
|
|
998
99
|
}
|
|
@@ -1000,193 +101,80 @@ function AudioControls() {
|
|
|
1000
101
|
export default meta
|
|
1001
102
|
type Story = StoryObj<typeof VolumeOffIcon>
|
|
1002
103
|
|
|
1003
|
-
// Story parameters for consistent dark theme
|
|
1004
|
-
const storyParameters = {
|
|
1005
|
-
backgrounds: {
|
|
1006
|
-
default: "dark",
|
|
1007
|
-
values: [
|
|
1008
|
-
{ name: "dark", value: "var(--color-fm-surface-primary)" },
|
|
1009
|
-
{ name: "darker", value: "var(--color-fm-neutral-0)" },
|
|
1010
|
-
],
|
|
1011
|
-
},
|
|
1012
|
-
}
|
|
1013
|
-
|
|
1014
104
|
export const Default: Story = {
|
|
1015
105
|
args: {
|
|
1016
|
-
className: "h-
|
|
106
|
+
className: "h-6 w-6 text-fm-icon-inactive",
|
|
1017
107
|
withAccessibility: true,
|
|
1018
108
|
},
|
|
1019
|
-
parameters: storyParameters,
|
|
1020
109
|
render: (args) => (
|
|
1021
|
-
<
|
|
110
|
+
<IconDefaultCanvas>
|
|
1022
111
|
<VolumeOffIcon {...args} />
|
|
1023
|
-
</
|
|
112
|
+
</IconDefaultCanvas>
|
|
1024
113
|
),
|
|
1025
114
|
}
|
|
1026
115
|
|
|
1027
116
|
export const SizeVariations: Story = {
|
|
1028
|
-
|
|
1029
|
-
...storyParameters,
|
|
1030
|
-
docs: {
|
|
1031
|
-
description: {
|
|
1032
|
-
story:
|
|
1033
|
-
"VolumeOffIcon in different sizes, from small interface elements to large audio displays.",
|
|
1034
|
-
},
|
|
1035
|
-
},
|
|
1036
|
-
},
|
|
1037
|
-
render: () => (
|
|
1038
|
-
<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">
|
|
1039
|
-
<div className="text-center">
|
|
1040
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-3 w-3" />
|
|
1041
|
-
<span className="text-fm-tertiary text-xs">12px</span>
|
|
1042
|
-
</div>
|
|
1043
|
-
<div className="text-center">
|
|
1044
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-4 w-4" />
|
|
1045
|
-
<span className="text-fm-tertiary text-xs">16px</span>
|
|
1046
|
-
</div>
|
|
1047
|
-
<div className="text-center">
|
|
1048
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-5 w-5" />
|
|
1049
|
-
<span className="text-fm-tertiary text-xs">20px</span>
|
|
1050
|
-
</div>
|
|
1051
|
-
<div className="text-center">
|
|
1052
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-6 w-6" />
|
|
1053
|
-
<span className="text-fm-tertiary text-xs">24px</span>
|
|
1054
|
-
</div>
|
|
1055
|
-
<div className="text-center">
|
|
1056
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-8 w-8" />
|
|
1057
|
-
<span className="text-fm-tertiary text-xs">32px</span>
|
|
1058
|
-
</div>
|
|
1059
|
-
<div className="text-center">
|
|
1060
|
-
<VolumeOffIcon className="text-fm-tertiary !mx-auto mb-2 h-12 w-12" />
|
|
1061
|
-
<span className="text-fm-tertiary text-xs">48px</span>
|
|
1062
|
-
</div>
|
|
1063
|
-
</div>
|
|
1064
|
-
),
|
|
117
|
+
render: () => <IconSizeVariations icon={VolumeOffIcon} />,
|
|
1065
118
|
}
|
|
1066
119
|
|
|
1067
120
|
export const ColorVariations: Story = {
|
|
1068
|
-
|
|
1069
|
-
...storyParameters,
|
|
1070
|
-
docs: {
|
|
1071
|
-
description: {
|
|
1072
|
-
story:
|
|
1073
|
-
"VolumeOffIcon in different semantic colors for various mute states.",
|
|
1074
|
-
},
|
|
1075
|
-
},
|
|
1076
|
-
},
|
|
1077
|
-
render: () => (
|
|
1078
|
-
<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">
|
|
1079
|
-
<div className="text-center">
|
|
1080
|
-
<div className="border-fm-divider-primary bg-fm-icon-inactive/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1081
|
-
<VolumeOffIcon className="text-fm-tertiary h-8 w-8" />
|
|
1082
|
-
</div>
|
|
1083
|
-
<div className="text-fm-icon-active text-sm font-medium">Muted</div>
|
|
1084
|
-
<div className="text-fm-tertiary text-xs">text-fm-tertiary</div>
|
|
1085
|
-
</div>
|
|
1086
|
-
<div className="text-center">
|
|
1087
|
-
<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">
|
|
1088
|
-
<VolumeOffIcon className="text-fm-placeholder h-8 w-8" />
|
|
1089
|
-
</div>
|
|
1090
|
-
<div className="text-fm-icon-active text-sm font-medium">Inactive</div>
|
|
1091
|
-
<div className="text-fm-placeholder text-xs">text-fm-placeholder</div>
|
|
1092
|
-
</div>
|
|
1093
|
-
<div className="text-center">
|
|
1094
|
-
<div className="border-fm-divider-primary bg-fm-surface-secondary/20 !mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border">
|
|
1095
|
-
<VolumeOffIcon className="text-fm-tertiary h-8 w-8" />
|
|
1096
|
-
</div>
|
|
1097
|
-
<div className="text-fm-icon-active text-sm font-medium">Neutral</div>
|
|
1098
|
-
<div className="text-fm-tertiary text-xs">text-fm-tertiary</div>
|
|
1099
|
-
</div>
|
|
1100
|
-
<div className="text-center">
|
|
1101
|
-
<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">
|
|
1102
|
-
<VolumeOffIcon className="text-fm-icon-negative h-8 w-8" />
|
|
1103
|
-
</div>
|
|
1104
|
-
<div className="text-fm-icon-active text-sm font-medium">Disabled</div>
|
|
1105
|
-
<div className="text-fm-icon-negative text-xs">
|
|
1106
|
-
text-fm-icon-negative
|
|
1107
|
-
</div>
|
|
1108
|
-
</div>
|
|
1109
|
-
</div>
|
|
1110
|
-
),
|
|
121
|
+
render: () => <IconColorVariations icon={VolumeOffIcon} />,
|
|
1111
122
|
}
|
|
1112
123
|
|
|
1113
124
|
export const UsageExamples: Story = {
|
|
1114
|
-
parameters: {
|
|
1115
|
-
...storyParameters,
|
|
1116
|
-
docs: {
|
|
1117
|
-
description: {
|
|
1118
|
-
story:
|
|
1119
|
-
"Real-world usage examples showing VolumeOffIcon in different audio control contexts.",
|
|
1120
|
-
},
|
|
1121
|
-
},
|
|
1122
|
-
},
|
|
1123
125
|
render: () => (
|
|
1124
|
-
<
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
</
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
126
|
+
<IconUsageCanvas>
|
|
127
|
+
<IconUsageSection title="Mute Button">
|
|
128
|
+
<button className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-2 rounded-xl border px-3 py-2">
|
|
129
|
+
<VolumeOffIcon className="text-fm-icon-inactive h-4 w-4" />
|
|
130
|
+
<span className="text-fm-primary font-fm-text text-sm">Muted</span>
|
|
131
|
+
</button>
|
|
132
|
+
</IconUsageSection>
|
|
133
|
+
|
|
134
|
+
<IconUsageSection title="Volume States">
|
|
135
|
+
<div className="flex gap-4">
|
|
136
|
+
{[
|
|
137
|
+
{ icon: VolumeFullIcon, label: "Full" },
|
|
138
|
+
{ icon: VolumeHalfIcon, label: "Half" },
|
|
139
|
+
{ icon: VolumeOffIcon, label: "Muted" },
|
|
140
|
+
].map(({ icon: Icon, label }) => (
|
|
141
|
+
<div key={label} className="flex flex-col items-center gap-1">
|
|
142
|
+
<Icon
|
|
143
|
+
className={`h-6 w-6 ${label === "Muted" ? "text-fm-icon-inactive" : "text-fm-icon-active"}`}
|
|
144
|
+
/>
|
|
145
|
+
<span className="text-fm-secondary font-fm-text text-xs">
|
|
146
|
+
{label}
|
|
147
|
+
</span>
|
|
1145
148
|
</div>
|
|
1146
|
-
|
|
149
|
+
))}
|
|
1147
150
|
</div>
|
|
1148
|
-
</
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
<
|
|
1158
|
-
|
|
1159
|
-
</
|
|
1160
|
-
<button className="border-fm-divider-primary bg-fm-surface-secondary hover:bg-fm-divider-primary rounded-lg border p-3">
|
|
1161
|
-
<div className="border-fm-divider-contrast bg-fm-divider-primary h-6 w-6 rounded-full border" />
|
|
1162
|
-
</button>
|
|
151
|
+
</IconUsageSection>
|
|
152
|
+
|
|
153
|
+
<IconUsageSection title="Silent Mode Banner">
|
|
154
|
+
<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">
|
|
155
|
+
<VolumeOffIcon className="text-fm-icon-inactive h-5 w-5 shrink-0" />
|
|
156
|
+
<div>
|
|
157
|
+
<div className="text-fm-primary font-fm-text text-sm font-medium">
|
|
158
|
+
Silent mode on
|
|
159
|
+
</div>
|
|
160
|
+
<div className="text-fm-secondary font-fm-text text-xs">
|
|
161
|
+
No audio will play
|
|
162
|
+
</div>
|
|
1163
163
|
</div>
|
|
1164
164
|
</div>
|
|
1165
|
-
</
|
|
1166
|
-
</
|
|
165
|
+
</IconUsageSection>
|
|
166
|
+
</IconUsageCanvas>
|
|
1167
167
|
),
|
|
1168
168
|
}
|
|
1169
169
|
|
|
1170
170
|
export const Playground: Story = {
|
|
1171
|
-
parameters: {
|
|
1172
|
-
...storyParameters,
|
|
1173
|
-
docs: {
|
|
1174
|
-
description: {
|
|
1175
|
-
story:
|
|
1176
|
-
"Interactive playground to experiment with different VolumeOffIcon configurations.",
|
|
1177
|
-
},
|
|
1178
|
-
},
|
|
1179
|
-
},
|
|
1180
171
|
args: {
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
className: "text-fm-tertiary",
|
|
172
|
+
className: "h-8 w-8 text-fm-icon-inactive",
|
|
173
|
+
withAccessibility: true,
|
|
1184
174
|
},
|
|
1185
175
|
render: (args) => (
|
|
1186
|
-
<
|
|
1187
|
-
<
|
|
1188
|
-
|
|
1189
|
-
</div>
|
|
1190
|
-
</div>
|
|
176
|
+
<IconPlaygroundCanvas>
|
|
177
|
+
<VolumeOffIcon {...args} />
|
|
178
|
+
</IconPlaygroundCanvas>
|
|
1191
179
|
),
|
|
1192
180
|
}
|