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 { VolumeHalfIcon } from "src/ui/icons/volume-half-icon"
|
|
7
|
+
import { VolumeOffIcon } from "src/ui/icons/volume-off-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 { VolumeFullIcon } from "."
|
|
5
19
|
|
|
6
20
|
const meta: Meta<typeof VolumeFullIcon> = {
|
|
@@ -18,1070 +32,68 @@ const meta: Meta<typeof VolumeFullIcon> = {
|
|
|
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-icon-info/5 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-icon-info/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-icon-info/30 from-fm-icon-info/20 to-fm-icon-info/20 !mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border bg-linear-to-br">
|
|
90
|
-
<VolumeFullIcon className="text-fm-icon-info h-12 w-12" />
|
|
91
|
-
</div>
|
|
92
|
-
<h1 className="text-fm-icon-active! text-5xl font-bold">
|
|
93
|
-
VolumeFullIcon
|
|
94
|
-
</h1>
|
|
95
|
-
<p className="text-fm-secondary! !mx-auto max-w-3xl text-xl leading-relaxed">
|
|
96
|
-
A maximum volume audio control icon for media interfaces.
|
|
97
|
-
Features the classic speaker with full sound waves design,
|
|
98
|
-
essential for music players, video platforms, audio systems,
|
|
99
|
-
and any media interface where users need to control high
|
|
100
|
-
volume levels.
|
|
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-icon-info text-3xl font-bold">
|
|
107
|
-
Maximum Volume
|
|
108
|
-
</div>
|
|
109
|
-
<div className="text-fm-tertiary text-sm">
|
|
110
|
-
Full audio power
|
|
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-icon-info 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-600 text-3xl font-bold">
|
|
125
|
-
Universal
|
|
126
|
-
</div>
|
|
127
|
-
<div className="text-fm-tertiary text-sm">
|
|
128
|
-
Standard volume 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-icon-info! 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 { VolumeFullIcon } from "@icons/volume-full-icon"
|
|
151
|
-
|
|
152
|
-
function VolumeControl() {
|
|
35
|
+
<AuralIconDocsPage
|
|
36
|
+
accentToken="info"
|
|
37
|
+
features={[
|
|
38
|
+
{ title: "Volume", description: "Full / max volume icon" },
|
|
39
|
+
{ title: "Audio", description: "Audio output control" },
|
|
40
|
+
{ title: "Accessible", description: "ARIA-ready by default" },
|
|
41
|
+
]}
|
|
42
|
+
quickStart={{
|
|
43
|
+
codeExample: `import { VolumeFullIcon } from "src/ui/icons/volume-full-icon"
|
|
44
|
+
|
|
45
|
+
function VolumeButton() {
|
|
153
46
|
return (
|
|
154
|
-
<button
|
|
155
|
-
|
|
156
|
-
className="p-2 hover:bg-white/10 rounded-lg"
|
|
157
|
-
aria-label="Set maximum volume"
|
|
158
|
-
>
|
|
159
|
-
<VolumeFullIcon className="h-6 w-6 text-indigo-400" />
|
|
47
|
+
<button>
|
|
48
|
+
<VolumeFullIcon className="h-5 w-5 text-fm-icon-active" />
|
|
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
|
-
<th className="text-fm-icon-active! px-6 py-4 text-left text-sm font-semibold">
|
|
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-icon-info! 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-icon-info! 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-icon-info! 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-icon-info! 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-icon-info! 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-icon-info! 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
|
-
<VolumeFullIcon className="text-fm-icon-info !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
|
-
<VolumeFullIcon className="text-fm-icon-info !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
|
-
<VolumeFullIcon className="text-fm-icon-info !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
|
-
<VolumeFullIcon className="text-fm-icon-info !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
|
-
<VolumeFullIcon className="text-fm-icon-info !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
|
-
<VolumeFullIcon className="text-fm-icon-info !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-icon-info! 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 controls
|
|
359
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
360
|
-
|
|
361
|
-
// Medium (24px) - standard interface
|
|
362
|
-
<VolumeFullIcon className="h-6 w-6" />
|
|
363
|
-
|
|
364
|
-
// Large (32px) - prominent displays
|
|
365
|
-
<VolumeFullIcon className="h-8 w-8" />
|
|
366
|
-
|
|
367
|
-
// Custom size
|
|
368
|
-
<VolumeFullIcon 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-icon-info! 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
|
-
<VolumeFullIcon className="text-fm-icon-info h-6 w-6" />
|
|
390
|
-
<div>
|
|
391
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
392
|
-
Maximum Volume
|
|
393
|
-
</div>
|
|
394
|
-
<div className="text-fm-tertiary text-xs">
|
|
395
|
-
text-fm-icon-info
|
|
396
|
-
</div>
|
|
397
|
-
</div>
|
|
398
|
-
</div>
|
|
399
|
-
<div className="flex items-center gap-4">
|
|
400
|
-
<VolumeFullIcon className="text-fm-icon-info h-6 w-6" />
|
|
401
|
-
<div>
|
|
402
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
403
|
-
High Power
|
|
404
|
-
</div>
|
|
405
|
-
<div className="text-fm-tertiary text-xs">
|
|
406
|
-
text-fm-icon-info
|
|
407
|
-
</div>
|
|
408
|
-
</div>
|
|
409
|
-
</div>
|
|
410
|
-
<div className="flex items-center gap-4">
|
|
411
|
-
<VolumeFullIcon className="text-fm-secondary-600 h-6 w-6" />
|
|
412
|
-
<div>
|
|
413
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
414
|
-
Enhanced
|
|
415
|
-
</div>
|
|
416
|
-
<div className="text-fm-tertiary text-xs">
|
|
417
|
-
text-fm-secondary-600
|
|
418
|
-
</div>
|
|
419
|
-
</div>
|
|
420
|
-
</div>
|
|
421
|
-
<div className="flex items-center gap-4">
|
|
422
|
-
<VolumeFullIcon className="text-fm-secondary-600 h-6 w-6" />
|
|
423
|
-
<div>
|
|
424
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
425
|
-
Premium
|
|
426
|
-
</div>
|
|
427
|
-
<div className="text-fm-tertiary text-xs">
|
|
428
|
-
text-fm-secondary-600
|
|
429
|
-
</div>
|
|
430
|
-
</div>
|
|
431
|
-
</div>
|
|
432
|
-
</div>
|
|
433
|
-
</div>
|
|
434
|
-
|
|
435
|
-
<div className="!space-y-4">
|
|
436
|
-
<h3 className="text-fm-icon-info! 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
|
-
<VolumeFullIcon className="h-6 w-6 text-indigo-400" />
|
|
443
|
-
<VolumeFullIcon className="h-6 w-6 text-blue-500" />
|
|
444
|
-
|
|
445
|
-
// Using CSS custom properties
|
|
446
|
-
<VolumeFullIcon
|
|
447
|
-
className="h-6 w-6"
|
|
448
|
-
style={{ color: 'var(--color-volume-max)' }}
|
|
449
|
-
/>
|
|
450
|
-
|
|
451
|
-
// Direct stroke prop
|
|
452
|
-
<VolumeFullIcon
|
|
453
|
-
width={24}
|
|
454
|
-
height={24}
|
|
455
|
-
stroke="#6366f1"
|
|
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
|
-
{/* Home Theater System */}
|
|
471
|
-
<div className="!space-y-4">
|
|
472
|
-
<h3 className="text-fm-icon-info! text-lg font-semibold">
|
|
473
|
-
Home Theater System
|
|
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="mb-4">
|
|
478
|
-
<div className="text-fm-icon-active! text-sm font-medium">
|
|
479
|
-
Surround Sound System
|
|
480
|
-
</div>
|
|
481
|
-
<div className="text-fm-tertiary! text-xs">
|
|
482
|
-
7.1 Channel Audio
|
|
483
|
-
</div>
|
|
484
|
-
</div>
|
|
485
|
-
<div className="mb-4 grid grid-cols-2 gap-4">
|
|
486
|
-
<div className="bg-fm-surface-secondary rounded-lg p-3">
|
|
487
|
-
<div className="text-fm-tertiary mb-2 text-xs">
|
|
488
|
-
Master Volume
|
|
489
|
-
</div>
|
|
490
|
-
<div className="flex items-center gap-2">
|
|
491
|
-
<VolumeFullIcon className="text-fm-icon-info h-5 w-5" />
|
|
492
|
-
<div className="bg-fm-divider-primary h-2 flex-1 rounded-full">
|
|
493
|
-
<div className="bg-fm-icon-info h-full w-4/5 rounded-full" />
|
|
494
|
-
</div>
|
|
495
|
-
<span className="text-fm-icon-active text-xs">
|
|
496
|
-
80%
|
|
497
|
-
</span>
|
|
498
|
-
</div>
|
|
499
|
-
</div>
|
|
500
|
-
<div className="bg-fm-surface-secondary rounded-lg p-3">
|
|
501
|
-
<div className="text-fm-tertiary mb-2 text-xs">
|
|
502
|
-
Subwoofer
|
|
503
|
-
</div>
|
|
504
|
-
<div className="flex items-center gap-2">
|
|
505
|
-
<VolumeFullIcon className="text-fm-icon-info h-5 w-5" />
|
|
506
|
-
<div className="bg-fm-divider-primary h-2 flex-1 rounded-full">
|
|
507
|
-
<div className="bg-fm-icon-info h-full w-full rounded-full" />
|
|
508
|
-
</div>
|
|
509
|
-
<span className="text-fm-icon-active text-xs">
|
|
510
|
-
100%
|
|
511
|
-
</span>
|
|
512
|
-
</div>
|
|
513
|
-
</div>
|
|
514
|
-
</div>
|
|
515
|
-
<div className="flex justify-center gap-4">
|
|
516
|
-
<button className="border-fm-icon-info/30 bg-fm-icon-info/20 text-fm-icon-info rounded-lg border px-4 py-2 text-sm">
|
|
517
|
-
Movie Mode
|
|
518
|
-
</button>
|
|
519
|
-
<button className="border-fm-divider-primary bg-fm-surface-secondary text-fm-icon-active rounded-lg border px-4 py-2 text-sm">
|
|
520
|
-
Music Mode
|
|
521
|
-
</button>
|
|
522
|
-
</div>
|
|
523
|
-
</div>
|
|
524
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
525
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
526
|
-
{`// Home theater volume control
|
|
527
|
-
<div className="theater-system">
|
|
528
|
-
<div className="volume-channel">
|
|
529
|
-
<div className="channel-label">Master Volume</div>
|
|
530
|
-
<div className="volume-control">
|
|
531
|
-
<VolumeFullIcon className="h-5 w-5 text-indigo-400" />
|
|
532
|
-
<VolumeSlider
|
|
533
|
-
value={masterVolume}
|
|
534
|
-
max={100}
|
|
535
|
-
onChange={setMasterVolume}
|
|
536
|
-
/>
|
|
537
|
-
<span>{masterVolume}%</span>
|
|
538
|
-
</div>
|
|
539
|
-
</div>
|
|
540
|
-
<AudioModeSelector />
|
|
541
|
-
</div>`}
|
|
542
|
-
</pre>
|
|
543
|
-
</div>
|
|
544
|
-
</div>
|
|
545
|
-
</div>
|
|
546
|
-
|
|
547
|
-
{/* Gaming Setup */}
|
|
548
|
-
<div className="!space-y-4">
|
|
549
|
-
<h3 className="text-fm-icon-info! text-lg font-semibold">
|
|
550
|
-
Gaming Setup
|
|
551
|
-
</h3>
|
|
552
|
-
<div className="!space-y-4">
|
|
553
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
554
|
-
<div className="mb-4">
|
|
555
|
-
<div className="text-fm-icon-active! text-sm font-medium">
|
|
556
|
-
Gaming Audio
|
|
557
|
-
</div>
|
|
558
|
-
<div className="text-fm-tertiary! text-xs">
|
|
559
|
-
Enhanced for competitive play
|
|
560
|
-
</div>
|
|
561
|
-
</div>
|
|
562
|
-
<div className="mb-4 space-y-3">
|
|
563
|
-
<div className="flex items-center justify-between">
|
|
564
|
-
<div className="flex items-center gap-3">
|
|
565
|
-
<VolumeFullIcon className="text-fm-icon-info h-5 w-5" />
|
|
566
|
-
<div>
|
|
567
|
-
<div className="text-fm-icon-active text-sm">
|
|
568
|
-
Game Audio
|
|
569
|
-
</div>
|
|
570
|
-
<div className="text-fm-tertiary text-xs">
|
|
571
|
-
Explosions & Effects
|
|
572
|
-
</div>
|
|
573
|
-
</div>
|
|
574
|
-
</div>
|
|
575
|
-
<div className="bg-fm-divider-primary h-2 w-20 rounded-full">
|
|
576
|
-
<div className="bg-fm-icon-info h-full w-full rounded-full" />
|
|
577
|
-
</div>
|
|
578
|
-
</div>
|
|
579
|
-
<div className="flex items-center justify-between">
|
|
580
|
-
<div className="flex items-center gap-3">
|
|
581
|
-
<VolumeFullIcon className="text-fm-icon-info h-5 w-5" />
|
|
582
|
-
<div>
|
|
583
|
-
<div className="text-fm-icon-active text-sm">
|
|
584
|
-
Voice Chat
|
|
585
|
-
</div>
|
|
586
|
-
<div className="text-fm-tertiary text-xs">
|
|
587
|
-
Team Communication
|
|
588
|
-
</div>
|
|
589
|
-
</div>
|
|
590
|
-
</div>
|
|
591
|
-
<div className="bg-fm-divider-primary h-2 w-20 rounded-full">
|
|
592
|
-
<div className="bg-fm-icon-info h-full w-4/5 rounded-full" />
|
|
593
|
-
</div>
|
|
594
|
-
</div>
|
|
595
|
-
<div className="flex items-center justify-between">
|
|
596
|
-
<div className="flex items-center gap-3">
|
|
597
|
-
<VolumeFullIcon className="text-fm-secondary-600 h-5 w-5" />
|
|
598
|
-
<div>
|
|
599
|
-
<div className="text-fm-icon-active text-sm">
|
|
600
|
-
Music
|
|
601
|
-
</div>
|
|
602
|
-
<div className="text-fm-tertiary text-xs">
|
|
603
|
-
Background Tracks
|
|
604
|
-
</div>
|
|
605
|
-
</div>
|
|
606
|
-
</div>
|
|
607
|
-
<div className="bg-fm-divider-primary h-2 w-20 rounded-full">
|
|
608
|
-
<div className="bg-fm-secondary-500 h-full w-3/5 rounded-full" />
|
|
609
|
-
</div>
|
|
610
|
-
</div>
|
|
611
|
-
</div>
|
|
612
|
-
<div className="flex justify-center">
|
|
613
|
-
<button className="bg-fm-icon-info text-fm-icon-active rounded-lg px-4 py-2 text-sm font-medium">
|
|
614
|
-
Apply Gaming Profile
|
|
615
|
-
</button>
|
|
616
|
-
</div>
|
|
617
|
-
</div>
|
|
618
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
619
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
620
|
-
{`// Gaming audio mixer
|
|
621
|
-
<div className="gaming-audio-mixer">
|
|
622
|
-
{audioChannels.map(channel => (
|
|
623
|
-
<div key={channel.id} className="audio-channel">
|
|
624
|
-
<div className="channel-header">
|
|
625
|
-
<VolumeFullIcon
|
|
626
|
-
className="h-5 w-5"
|
|
627
|
-
style={{ color: channel.color }}
|
|
51
|
+
}`,
|
|
52
|
+
livePreview: (
|
|
53
|
+
<button>
|
|
54
|
+
<VolumeFullIcon className="text-fm-icon-active h-6 w-6" />
|
|
55
|
+
</button>
|
|
56
|
+
),
|
|
57
|
+
}}
|
|
58
|
+
relatedIcons={[
|
|
59
|
+
{
|
|
60
|
+
name: "VolumeHalfIcon",
|
|
61
|
+
description: "Half volume icon",
|
|
62
|
+
icon: VolumeHalfIcon,
|
|
63
|
+
accentToken: "info",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: "VolumeOffIcon",
|
|
67
|
+
description: "Volume off / muted icon",
|
|
68
|
+
icon: VolumeOffIcon,
|
|
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
|
+
]}
|
|
628
84
|
/>
|
|
629
|
-
<div>
|
|
630
|
-
<div className="channel-name">{channel.name}</div>
|
|
631
|
-
<div className="channel-desc">{channel.description}</div>
|
|
632
|
-
</div>
|
|
633
|
-
</div>
|
|
634
|
-
<VolumeSlider
|
|
635
|
-
value={channel.volume}
|
|
636
|
-
max={channel.maxVolume}
|
|
637
|
-
onChange={(val) => setChannelVolume(channel.id, val)}
|
|
638
|
-
/>
|
|
639
|
-
</div>
|
|
640
|
-
))}
|
|
641
|
-
</div>`}
|
|
642
|
-
</pre>
|
|
643
|
-
</div>
|
|
644
|
-
</div>
|
|
645
|
-
</div>
|
|
646
|
-
|
|
647
|
-
{/* Live Streaming */}
|
|
648
|
-
<div className="!space-y-4">
|
|
649
|
-
<h3 className="text-fm-icon-info! text-lg font-semibold">
|
|
650
|
-
Live Streaming
|
|
651
|
-
</h3>
|
|
652
|
-
<div className="!space-y-4">
|
|
653
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
654
|
-
<div className="mb-4">
|
|
655
|
-
<div className="text-fm-icon-active! text-sm font-medium">
|
|
656
|
-
Streaming Setup
|
|
657
|
-
</div>
|
|
658
|
-
<div className="text-fm-tertiary! text-xs">
|
|
659
|
-
Professional broadcast quality
|
|
660
|
-
</div>
|
|
661
|
-
</div>
|
|
662
|
-
<div className="mb-4 grid grid-cols-1 gap-3">
|
|
663
|
-
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
664
|
-
<div className="flex items-center gap-3">
|
|
665
|
-
<VolumeFullIcon className="text-fm-icon-info h-4 w-4" />
|
|
666
|
-
<span className="text-fm-icon-active text-sm">
|
|
667
|
-
Microphone
|
|
668
|
-
</span>
|
|
669
|
-
</div>
|
|
670
|
-
<div className="flex items-center gap-2">
|
|
671
|
-
<div className="bg-fm-divider-primary h-1 w-16 rounded-full">
|
|
672
|
-
<div className="bg-fm-icon-info h-full w-4/5 rounded-full" />
|
|
673
|
-
</div>
|
|
674
|
-
<span className="text-fm-tertiary text-xs">
|
|
675
|
-
85%
|
|
676
|
-
</span>
|
|
677
|
-
</div>
|
|
678
|
-
</div>
|
|
679
|
-
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
680
|
-
<div className="flex items-center gap-3">
|
|
681
|
-
<VolumeFullIcon className="text-fm-icon-info h-4 w-4" />
|
|
682
|
-
<span className="text-fm-icon-active text-sm">
|
|
683
|
-
Desktop Audio
|
|
684
|
-
</span>
|
|
685
|
-
</div>
|
|
686
|
-
<div className="flex items-center gap-2">
|
|
687
|
-
<div className="bg-fm-divider-primary h-1 w-16 rounded-full">
|
|
688
|
-
<div className="bg-fm-icon-info h-full w-full rounded-full" />
|
|
689
|
-
</div>
|
|
690
|
-
<span className="text-fm-tertiary text-xs">
|
|
691
|
-
100%
|
|
692
|
-
</span>
|
|
693
|
-
</div>
|
|
694
|
-
</div>
|
|
695
|
-
<div className="bg-fm-surface-secondary flex items-center justify-between rounded-lg p-3">
|
|
696
|
-
<div className="flex items-center gap-3">
|
|
697
|
-
<VolumeFullIcon className="text-fm-secondary-600 h-4 w-4" />
|
|
698
|
-
<span className="text-fm-icon-active text-sm">
|
|
699
|
-
Alert Sounds
|
|
700
|
-
</span>
|
|
701
|
-
</div>
|
|
702
|
-
<div className="flex items-center gap-2">
|
|
703
|
-
<div className="bg-fm-divider-primary h-1 w-16 rounded-full">
|
|
704
|
-
<div className="bg-fm-secondary-500 h-full w-3/4 rounded-full" />
|
|
705
|
-
</div>
|
|
706
|
-
<span className="text-fm-tertiary text-xs">
|
|
707
|
-
75%
|
|
708
|
-
</span>
|
|
709
|
-
</div>
|
|
710
|
-
</div>
|
|
711
|
-
</div>
|
|
712
|
-
<div className="flex items-center justify-between">
|
|
713
|
-
<span className="text-fm-tertiary text-xs">
|
|
714
|
-
Live: 1,234 viewers
|
|
715
|
-
</span>
|
|
716
|
-
<div className="flex gap-2">
|
|
717
|
-
<div className="bg-fm-icon-negative h-2 w-2 animate-pulse rounded-full" />
|
|
718
|
-
<span className="text-fm-icon-negative text-xs">
|
|
719
|
-
Recording
|
|
720
|
-
</span>
|
|
721
|
-
</div>
|
|
722
|
-
</div>
|
|
723
|
-
</div>
|
|
724
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
725
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
726
|
-
{`// Live streaming audio control
|
|
727
|
-
<div className="streaming-console">
|
|
728
|
-
<div className="audio-sources">
|
|
729
|
-
{audioSources.map(source => (
|
|
730
|
-
<div key={source.id} className="audio-source">
|
|
731
|
-
<div className="source-info">
|
|
732
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
733
|
-
<span>{source.name}</span>
|
|
734
|
-
</div>
|
|
735
|
-
<div className="source-controls">
|
|
736
|
-
<VolumeSlider
|
|
737
|
-
value={source.volume}
|
|
738
|
-
max={source.maxGain}
|
|
739
|
-
onChange={(val) => setSourceVolume(source.id, val)}
|
|
740
|
-
/>
|
|
741
|
-
<span className="volume-value">{source.volume}%</span>
|
|
742
|
-
</div>
|
|
743
|
-
</div>
|
|
744
|
-
))}
|
|
745
|
-
</div>
|
|
746
|
-
<StreamingStatus isLive={isStreaming} />
|
|
747
|
-
</div>`}
|
|
748
|
-
</pre>
|
|
749
|
-
</div>
|
|
750
|
-
</div>
|
|
751
|
-
</div>
|
|
752
|
-
|
|
753
|
-
{/* Music Production */}
|
|
754
|
-
<div className="!space-y-4">
|
|
755
|
-
<h3 className="text-fm-icon-info! text-lg font-semibold">
|
|
756
|
-
Music Production
|
|
757
|
-
</h3>
|
|
758
|
-
<div className="!space-y-4">
|
|
759
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
760
|
-
<div className="mb-4">
|
|
761
|
-
<div className="text-fm-icon-active! text-sm font-medium">
|
|
762
|
-
Digital Audio Workstation
|
|
763
|
-
</div>
|
|
764
|
-
<div className="text-fm-tertiary! text-xs">
|
|
765
|
-
Professional mixing console
|
|
766
|
-
</div>
|
|
767
|
-
</div>
|
|
768
|
-
<div className="mb-4 grid grid-cols-3 gap-3">
|
|
769
|
-
{["Vocals", "Instruments", "Effects"].map(
|
|
770
|
-
(track, i) => (
|
|
771
|
-
<div
|
|
772
|
-
key={track}
|
|
773
|
-
className="bg-fm-surface-secondary rounded-lg p-3"
|
|
774
|
-
>
|
|
775
|
-
<div className="text-fm-tertiary mb-2 text-xs">
|
|
776
|
-
{track}
|
|
777
|
-
</div>
|
|
778
|
-
<div className="flex flex-col items-center gap-2">
|
|
779
|
-
<VolumeFullIcon
|
|
780
|
-
className={`h-4 w-4 ${
|
|
781
|
-
i === 0
|
|
782
|
-
? "text-indigo-400"
|
|
783
|
-
: i === 1
|
|
784
|
-
? "text-blue-400"
|
|
785
|
-
: "text-purple-400"
|
|
786
|
-
}`}
|
|
787
|
-
/>
|
|
788
|
-
<div className="bg-fm-divider-primary relative h-16 w-2 rounded-full">
|
|
789
|
-
<div
|
|
790
|
-
className={`absolute bottom-0 w-full rounded-full ${
|
|
791
|
-
i === 0
|
|
792
|
-
? "h-4/5 bg-indigo-400"
|
|
793
|
-
: i === 1
|
|
794
|
-
? "h-full bg-blue-400"
|
|
795
|
-
: "h-3/5 bg-purple-400"
|
|
796
|
-
}`}
|
|
797
|
-
/>
|
|
798
|
-
</div>
|
|
799
|
-
<span className="text-fm-icon-active text-xs">
|
|
800
|
-
{i === 0 ? "85" : i === 1 ? "100" : "60"}%
|
|
801
|
-
</span>
|
|
802
|
-
</div>
|
|
803
|
-
</div>
|
|
804
|
-
)
|
|
805
|
-
)}
|
|
806
|
-
</div>
|
|
807
|
-
<div className="flex justify-center gap-3">
|
|
808
|
-
<button className="bg-fm-icon-negative text-fm-icon-active rounded px-3 py-1.5 text-xs">
|
|
809
|
-
● REC
|
|
810
|
-
</button>
|
|
811
|
-
<button className="bg-fm-icon-positive text-fm-icon-active rounded px-3 py-1.5 text-xs">
|
|
812
|
-
▶ PLAY
|
|
813
|
-
</button>
|
|
814
|
-
<button className="bg-fm-icon-warning text-fm-icon-active rounded px-3 py-1.5 text-xs">
|
|
815
|
-
■ STOP
|
|
816
|
-
</button>
|
|
817
|
-
</div>
|
|
818
|
-
</div>
|
|
819
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
820
|
-
<pre className="text-fm-icon-positive! overflow-x-auto text-sm">
|
|
821
|
-
{`// Digital audio workstation mixer
|
|
822
|
-
<div className="daw-mixer">
|
|
823
|
-
{tracks.map((track, index) => (
|
|
824
|
-
<div key={track.id} className="mixer-channel">
|
|
825
|
-
<div className="channel-header">
|
|
826
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
827
|
-
<span>{track.name}</span>
|
|
828
|
-
</div>
|
|
829
|
-
<div className="fader-section">
|
|
830
|
-
<VerticalSlider
|
|
831
|
-
value={track.volume}
|
|
832
|
-
max={track.maxGain}
|
|
833
|
-
onChange={(val) => setTrackVolume(track.id, val)}
|
|
834
|
-
className="volume-fader"
|
|
835
|
-
/>
|
|
836
|
-
<div className="volume-display">
|
|
837
|
-
{track.volume}%
|
|
838
|
-
</div>
|
|
839
|
-
</div>
|
|
840
|
-
</div>
|
|
841
|
-
))}
|
|
842
|
-
<MasterSection />
|
|
843
|
-
</div>`}
|
|
844
|
-
</pre>
|
|
845
|
-
</div>
|
|
846
|
-
</div>
|
|
847
|
-
</div>
|
|
848
|
-
</div>
|
|
849
|
-
</div>
|
|
850
|
-
|
|
851
|
-
{/* Accessibility */}
|
|
852
|
-
<div className="!space-y-8">
|
|
853
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
854
|
-
Accessibility Features
|
|
855
|
-
</h2>
|
|
856
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
857
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
858
|
-
<h3 className="text-fm-icon-positive! text-lg font-semibold">
|
|
859
|
-
✅ Built-in Features
|
|
860
|
-
</h3>
|
|
861
|
-
<ul className="text-fm-secondary! !space-y-2 text-sm">
|
|
862
|
-
<li className="text-fm-secondary!">
|
|
863
|
-
Uses Radix UI AccessibleIcon wrapper
|
|
864
|
-
</li>
|
|
865
|
-
<li className="text-fm-secondary!">
|
|
866
|
-
Provides screen reader label "Volume full icon"
|
|
867
|
-
</li>
|
|
868
|
-
<li className="text-fm-secondary!">
|
|
869
|
-
Supports keyboard navigation when interactive
|
|
870
|
-
</li>
|
|
871
|
-
<li className="text-fm-secondary!">
|
|
872
|
-
Maintains proper color contrast ratios
|
|
873
|
-
</li>
|
|
874
|
-
<li className="text-fm-secondary!">
|
|
875
|
-
Scales with user's font size preferences
|
|
876
|
-
</li>
|
|
877
|
-
</ul>
|
|
878
|
-
</div>
|
|
879
|
-
|
|
880
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-4 rounded-lg border p-6">
|
|
881
|
-
<h3 className="text-fm-icon-info! text-lg font-semibold">
|
|
882
|
-
💡 Best Practices
|
|
883
|
-
</h3>
|
|
884
|
-
<ul className="text-fm-secondary !space-y-2 text-sm">
|
|
885
|
-
<li className="text-fm-secondary!">
|
|
886
|
-
Always provide descriptive aria-labels for maximum
|
|
887
|
-
volume controls
|
|
888
|
-
</li>
|
|
889
|
-
<li className="text-fm-secondary!">
|
|
890
|
-
Use consistent placement in audio control groups
|
|
891
|
-
</li>
|
|
892
|
-
<li className="text-fm-secondary!">
|
|
893
|
-
Ensure sufficient touch target size (44px minimum)
|
|
894
|
-
</li>
|
|
895
|
-
<li className="text-fm-secondary!">
|
|
896
|
-
Provide visible focus states for keyboard users
|
|
897
|
-
</li>
|
|
898
|
-
<li className="text-fm-secondary!">
|
|
899
|
-
Consider volume limits for hearing protection
|
|
900
|
-
</li>
|
|
901
|
-
</ul>
|
|
902
|
-
</div>
|
|
903
|
-
</div>
|
|
904
|
-
|
|
905
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-6">
|
|
906
|
-
<h3 className="text-fm-icon-info! mb-4 text-lg font-semibold">
|
|
907
|
-
Proper ARIA Implementation
|
|
908
|
-
</h3>
|
|
909
|
-
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
910
|
-
<div className="bg-fm-surface-secondary rounded-lg p-4">
|
|
911
|
-
<pre className="text-fm-icon-info! overflow-x-auto text-sm">
|
|
912
|
-
{`// Maximum volume control with proper ARIA
|
|
913
|
-
<div className="volume-control">
|
|
914
|
-
<button
|
|
915
|
-
aria-label="Set maximum volume"
|
|
916
|
-
onClick={setMaxVolume}
|
|
917
|
-
aria-describedby="volume-warning"
|
|
918
|
-
>
|
|
919
|
-
<VolumeFullIcon className="h-6 w-6 text-indigo-400" />
|
|
920
|
-
</button>
|
|
921
|
-
<div id="volume-warning" className="sr-only">
|
|
922
|
-
Warning: Maximum volume may damage hearing
|
|
923
|
-
</div>
|
|
924
|
-
</div>
|
|
925
|
-
|
|
926
|
-
// Volume slider with maximum indicator
|
|
927
|
-
<div className="volume-slider">
|
|
928
|
-
<VolumeFullIcon
|
|
929
|
-
className="h-5 w-5"
|
|
930
|
-
aria-describedby="max-volume-label"
|
|
931
|
-
/>
|
|
932
|
-
<div
|
|
933
|
-
role="slider"
|
|
934
|
-
aria-label="Volume"
|
|
935
|
-
aria-valuemin="0"
|
|
936
|
-
aria-valuemax="100"
|
|
937
|
-
aria-valuenow={100}
|
|
938
|
-
aria-valuetext="Maximum volume, 100 percent"
|
|
939
|
-
/>
|
|
940
|
-
<div id="max-volume-label" className="sr-only">
|
|
941
|
-
Volume at maximum level
|
|
942
|
-
</div>
|
|
943
|
-
</div>
|
|
944
|
-
|
|
945
|
-
// Professional audio with gain control
|
|
946
|
-
<button
|
|
947
|
-
aria-label="Set track gain to maximum"
|
|
948
|
-
aria-pressed={gain === maxGain}
|
|
949
|
-
onClick={() => setGain(maxGain)}
|
|
950
|
-
>
|
|
951
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
952
|
-
<span>Max Gain</span>
|
|
953
|
-
</button>`}
|
|
954
|
-
</pre>
|
|
955
|
-
</div>
|
|
956
|
-
<div className="!space-y-4">
|
|
957
|
-
<p className="text-fm-secondary! text-sm">
|
|
958
|
-
When using VolumeFullIcon for maximum volume controls,
|
|
959
|
-
always provide clear warnings about potential hearing
|
|
960
|
-
damage and context about the high volume level.
|
|
961
|
-
</p>
|
|
962
|
-
<div className="border-fm-icon-info/20 bg-fm-icon-info/10 rounded-lg border p-4">
|
|
963
|
-
<div className="text-fm-icon-info flex items-center gap-2 text-sm">
|
|
964
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
965
|
-
<span>
|
|
966
|
-
Maximum volume controls need hearing protection
|
|
967
|
-
warnings
|
|
968
|
-
</span>
|
|
969
|
-
</div>
|
|
970
|
-
</div>
|
|
971
|
-
</div>
|
|
972
|
-
</div>
|
|
973
|
-
</div>
|
|
974
|
-
</div>
|
|
975
|
-
|
|
976
|
-
{/* Related Icons */}
|
|
977
|
-
<div className="!space-y-8">
|
|
978
|
-
<h2 className="text-fm-icon-active! text-center text-3xl font-bold">
|
|
979
|
-
Related Icons
|
|
980
|
-
</h2>
|
|
981
|
-
<div className="grid grid-cols-2 gap-6 md:grid-cols-4">
|
|
982
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
983
|
-
<div className="bg-fm-icon-positive/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
984
|
-
<span className="text-fm-icon-active! !text-2xl">🔉</span>
|
|
985
|
-
</div>
|
|
986
|
-
<div>
|
|
987
|
-
<div className="text-fm-icon-active font-medium">
|
|
988
|
-
VolumeHalfIcon
|
|
989
|
-
</div>
|
|
990
|
-
<div className="text-fm-tertiary text-xs">
|
|
991
|
-
Medium volume
|
|
992
|
-
</div>
|
|
993
|
-
</div>
|
|
994
|
-
</div>
|
|
995
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
996
|
-
<div className="bg-fm-icon-warning/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
997
|
-
<span className="text-fm-icon-active! !text-2xl">🔈</span>
|
|
998
|
-
</div>
|
|
999
|
-
<div>
|
|
1000
|
-
<div className="text-fm-icon-active font-medium">
|
|
1001
|
-
VolumeLowIcon
|
|
1002
|
-
</div>
|
|
1003
|
-
<div className="text-fm-tertiary text-xs">Low volume</div>
|
|
1004
|
-
</div>
|
|
1005
|
-
</div>
|
|
1006
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1007
|
-
<div className="bg-fm-surface-tertiary/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1008
|
-
<span className="text-fm-icon-active! !text-2xl">🔇</span>
|
|
1009
|
-
</div>
|
|
1010
|
-
<div>
|
|
1011
|
-
<div className="text-fm-icon-active font-medium">
|
|
1012
|
-
VolumeOffIcon
|
|
1013
|
-
</div>
|
|
1014
|
-
<div className="text-fm-tertiary text-xs">Muted</div>
|
|
1015
|
-
</div>
|
|
1016
|
-
</div>
|
|
1017
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary !space-y-3 rounded-lg border p-4 text-center">
|
|
1018
|
-
<div className="bg-fm-icon-negative/20 !mx-auto flex h-12 w-12 items-center justify-center rounded-lg">
|
|
1019
|
-
<span className="text-fm-icon-active! !text-2xl">⚠️</span>
|
|
1020
|
-
</div>
|
|
1021
|
-
<div>
|
|
1022
|
-
<div className="text-fm-icon-active font-medium">
|
|
1023
|
-
VolumeWarningIcon
|
|
1024
|
-
</div>
|
|
1025
|
-
<div className="text-fm-tertiary text-xs">
|
|
1026
|
-
Volume alert
|
|
1027
|
-
</div>
|
|
1028
|
-
</div>
|
|
1029
|
-
</div>
|
|
1030
|
-
</div>
|
|
1031
|
-
</div>
|
|
1032
|
-
</div>
|
|
1033
|
-
|
|
1034
|
-
{/* Footer */}
|
|
1035
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary border-t backdrop-blur-xl">
|
|
1036
|
-
<div className="!mx-auto max-w-7xl px-6 py-8">
|
|
1037
|
-
<div className="!space-y-4 text-center">
|
|
1038
|
-
<p className="text-fm-tertiary!">
|
|
1039
|
-
VolumeFullIcon is part of the Aural UI icon library, built
|
|
1040
|
-
with accessibility and professional audio control best
|
|
1041
|
-
practices in mind.
|
|
1042
|
-
</p>
|
|
1043
|
-
<p className="text-fm-placeholder! text-sm">
|
|
1044
|
-
All icons use Radix UI's AccessibleIcon for screen reader
|
|
1045
|
-
compatibility and follow WCAG guidelines for media controls
|
|
1046
|
-
and hearing protection.
|
|
1047
|
-
</p>
|
|
1048
|
-
</div>
|
|
1049
|
-
</div>
|
|
1050
|
-
</div>
|
|
1051
|
-
</div>
|
|
1052
|
-
</>
|
|
1053
85
|
),
|
|
1054
86
|
},
|
|
1055
87
|
},
|
|
1056
88
|
tags: ["autodocs"],
|
|
1057
89
|
argTypes: {
|
|
1058
|
-
width: {
|
|
1059
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
1060
|
-
description: "Width of the icon in pixels",
|
|
1061
|
-
},
|
|
1062
|
-
withAccessibility: {
|
|
1063
|
-
control: "boolean",
|
|
1064
|
-
description: "Whether to wrap the icon with accessibility features",
|
|
1065
|
-
},
|
|
1066
|
-
height: {
|
|
1067
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
1068
|
-
description: "Height of the icon in pixels",
|
|
1069
|
-
},
|
|
1070
|
-
stroke: {
|
|
1071
|
-
control: "color",
|
|
1072
|
-
description: "Stroke color of the icon",
|
|
1073
|
-
},
|
|
1074
|
-
strokeWidth: {
|
|
1075
|
-
control: { type: "range", min: 0.5, max: 4, step: 0.5 },
|
|
1076
|
-
description: "Width of the stroke",
|
|
1077
|
-
},
|
|
1078
90
|
className: {
|
|
1079
91
|
control: "text",
|
|
1080
|
-
description: "CSS classes
|
|
92
|
+
description: "CSS classes including color token",
|
|
1081
93
|
},
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
description: "
|
|
94
|
+
withAccessibility: {
|
|
95
|
+
control: "boolean",
|
|
96
|
+
description: "Wrap with accessibility label",
|
|
1085
97
|
},
|
|
1086
98
|
},
|
|
1087
99
|
}
|
|
@@ -1089,194 +101,77 @@ function VolumeControl() {
|
|
|
1089
101
|
export default meta
|
|
1090
102
|
type Story = StoryObj<typeof VolumeFullIcon>
|
|
1091
103
|
|
|
1092
|
-
// Story parameters for consistent dark theme
|
|
1093
|
-
const storyParameters = {
|
|
1094
|
-
backgrounds: {
|
|
1095
|
-
default: "dark",
|
|
1096
|
-
values: [
|
|
1097
|
-
{ name: "dark", value: "var(--color-fm-surface-primary)" },
|
|
1098
|
-
{ name: "darker", value: "var(--color-fm-neutral-0)" },
|
|
1099
|
-
],
|
|
1100
|
-
},
|
|
1101
|
-
}
|
|
1102
|
-
|
|
1103
104
|
export const Default: Story = {
|
|
1104
105
|
args: {
|
|
1105
|
-
className: "h-
|
|
106
|
+
className: "h-6 w-6 text-fm-icon-active",
|
|
1106
107
|
withAccessibility: true,
|
|
1107
108
|
},
|
|
1108
|
-
parameters: storyParameters,
|
|
1109
109
|
render: (args) => (
|
|
1110
|
-
<
|
|
110
|
+
<IconDefaultCanvas>
|
|
1111
111
|
<VolumeFullIcon {...args} />
|
|
1112
|
-
</
|
|
112
|
+
</IconDefaultCanvas>
|
|
1113
113
|
),
|
|
1114
114
|
}
|
|
1115
115
|
|
|
1116
116
|
export const SizeVariations: Story = {
|
|
1117
|
-
|
|
1118
|
-
...storyParameters,
|
|
1119
|
-
docs: {
|
|
1120
|
-
description: {
|
|
1121
|
-
story:
|
|
1122
|
-
"VolumeFullIcon in different sizes, from small interface elements to large professional audio displays.",
|
|
1123
|
-
},
|
|
1124
|
-
},
|
|
1125
|
-
},
|
|
1126
|
-
render: () => (
|
|
1127
|
-
<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">
|
|
1128
|
-
<div className="text-center">
|
|
1129
|
-
<VolumeFullIcon className="text-fm-icon-info !mx-auto mb-2 h-3 w-3" />
|
|
1130
|
-
<span className="text-fm-tertiary text-xs">12px</span>
|
|
1131
|
-
</div>
|
|
1132
|
-
<div className="text-center">
|
|
1133
|
-
<VolumeFullIcon className="text-fm-icon-info !mx-auto mb-2 h-4 w-4" />
|
|
1134
|
-
<span className="text-fm-tertiary text-xs">16px</span>
|
|
1135
|
-
</div>
|
|
1136
|
-
<div className="text-center">
|
|
1137
|
-
<VolumeFullIcon className="text-fm-icon-info !mx-auto mb-2 h-5 w-5" />
|
|
1138
|
-
<span className="text-fm-tertiary text-xs">20px</span>
|
|
1139
|
-
</div>
|
|
1140
|
-
<div className="text-center">
|
|
1141
|
-
<VolumeFullIcon className="text-fm-icon-info !mx-auto mb-2 h-6 w-6" />
|
|
1142
|
-
<span className="text-fm-tertiary text-xs">24px</span>
|
|
1143
|
-
</div>
|
|
1144
|
-
<div className="text-center">
|
|
1145
|
-
<VolumeFullIcon className="text-fm-icon-info !mx-auto mb-2 h-8 w-8" />
|
|
1146
|
-
<span className="text-fm-tertiary text-xs">32px</span>
|
|
1147
|
-
</div>
|
|
1148
|
-
<div className="text-center">
|
|
1149
|
-
<VolumeFullIcon className="text-fm-icon-info !mx-auto mb-2 h-12 w-12" />
|
|
1150
|
-
<span className="text-fm-tertiary text-xs">48px</span>
|
|
1151
|
-
</div>
|
|
1152
|
-
</div>
|
|
1153
|
-
),
|
|
117
|
+
render: () => <IconSizeVariations icon={VolumeFullIcon} />,
|
|
1154
118
|
}
|
|
1155
119
|
|
|
1156
120
|
export const ColorVariations: Story = {
|
|
1157
|
-
|
|
1158
|
-
...storyParameters,
|
|
1159
|
-
docs: {
|
|
1160
|
-
description: {
|
|
1161
|
-
story:
|
|
1162
|
-
"VolumeFullIcon in different semantic colors for various maximum volume applications.",
|
|
1163
|
-
},
|
|
1164
|
-
},
|
|
1165
|
-
},
|
|
1166
|
-
render: () => (
|
|
1167
|
-
<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">
|
|
1168
|
-
<div className="text-center">
|
|
1169
|
-
<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">
|
|
1170
|
-
<VolumeFullIcon className="text-fm-icon-info h-8 w-8" />
|
|
1171
|
-
</div>
|
|
1172
|
-
<div className="text-fm-icon-active text-sm font-medium">Maximum</div>
|
|
1173
|
-
<div className="text-fm-icon-info text-xs">text-fm-icon-info</div>
|
|
1174
|
-
</div>
|
|
1175
|
-
<div className="text-center">
|
|
1176
|
-
<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">
|
|
1177
|
-
<VolumeFullIcon className="text-fm-icon-info h-8 w-8" />
|
|
1178
|
-
</div>
|
|
1179
|
-
<div className="text-fm-icon-active text-sm font-medium">
|
|
1180
|
-
High Power
|
|
1181
|
-
</div>
|
|
1182
|
-
<div className="text-fm-icon-info text-xs">text-fm-icon-info</div>
|
|
1183
|
-
</div>
|
|
1184
|
-
<div className="text-center">
|
|
1185
|
-
<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">
|
|
1186
|
-
<VolumeFullIcon className="text-fm-secondary-600 h-8 w-8" />
|
|
1187
|
-
</div>
|
|
1188
|
-
<div className="text-fm-icon-active text-sm font-medium">Enhanced</div>
|
|
1189
|
-
<div className="text-fm-secondary-600 text-xs">
|
|
1190
|
-
text-fm-secondary-600
|
|
1191
|
-
</div>
|
|
1192
|
-
</div>
|
|
1193
|
-
<div className="text-center">
|
|
1194
|
-
<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">
|
|
1195
|
-
<VolumeFullIcon className="text-fm-secondary-600 h-8 w-8" />
|
|
1196
|
-
</div>
|
|
1197
|
-
<div className="text-fm-icon-active text-sm font-medium">Premium</div>
|
|
1198
|
-
<div className="text-fm-secondary-600 text-xs">
|
|
1199
|
-
text-fm-secondary-600
|
|
1200
|
-
</div>
|
|
1201
|
-
</div>
|
|
1202
|
-
</div>
|
|
1203
|
-
),
|
|
121
|
+
render: () => <IconColorVariations icon={VolumeFullIcon} />,
|
|
1204
122
|
}
|
|
1205
123
|
|
|
1206
124
|
export const UsageExamples: Story = {
|
|
1207
|
-
parameters: {
|
|
1208
|
-
...storyParameters,
|
|
1209
|
-
docs: {
|
|
1210
|
-
description: {
|
|
1211
|
-
story:
|
|
1212
|
-
"Real-world usage examples showing VolumeFullIcon in different professional audio contexts.",
|
|
1213
|
-
},
|
|
1214
|
-
},
|
|
1215
|
-
},
|
|
1216
125
|
render: () => (
|
|
1217
|
-
<
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
<div className="flex items-center gap-
|
|
1226
|
-
<
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
</
|
|
126
|
+
<IconUsageCanvas>
|
|
127
|
+
<IconUsageSection title="Volume States">
|
|
128
|
+
<div className="flex gap-4">
|
|
129
|
+
{[
|
|
130
|
+
{ icon: VolumeFullIcon, label: "Full" },
|
|
131
|
+
{ icon: VolumeHalfIcon, label: "Half" },
|
|
132
|
+
{ icon: VolumeOffIcon, label: "Muted" },
|
|
133
|
+
].map(({ icon: Icon, label }) => (
|
|
134
|
+
<div key={label} className="flex flex-col items-center gap-1">
|
|
135
|
+
<button>
|
|
136
|
+
<Icon
|
|
137
|
+
className={`h-6 w-6 ${label === "Full" ? "text-fm-icon-active" : "text-fm-icon-inactive"}`}
|
|
138
|
+
/>
|
|
139
|
+
</button>
|
|
140
|
+
<span className="text-fm-secondary font-fm-text text-xs">
|
|
141
|
+
{label}
|
|
142
|
+
</span>
|
|
1231
143
|
</div>
|
|
1232
|
-
|
|
1233
|
-
<div className="bg-fm-icon-info h-full w-4/5 rounded-full" />
|
|
1234
|
-
</div>
|
|
1235
|
-
</div>
|
|
144
|
+
))}
|
|
1236
145
|
</div>
|
|
1237
|
-
</
|
|
146
|
+
</IconUsageSection>
|
|
1238
147
|
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
<div className="border-fm-divider-secondary bg-fm-surface-secondary rounded-lg border p-4">
|
|
1245
|
-
<div className="flex items-center justify-between">
|
|
1246
|
-
<div className="flex items-center gap-3">
|
|
1247
|
-
<VolumeFullIcon className="text-fm-icon-info h-5 w-5" />
|
|
1248
|
-
<span className="text-fm-icon-active text-sm">Game Audio</span>
|
|
1249
|
-
</div>
|
|
1250
|
-
<div className="bg-fm-divider-primary h-2 w-20 rounded-full">
|
|
1251
|
-
<div className="bg-fm-icon-info h-full w-full rounded-full" />
|
|
1252
|
-
</div>
|
|
148
|
+
<IconUsageSection title="Player Volume Control">
|
|
149
|
+
<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">
|
|
150
|
+
<VolumeFullIcon className="text-fm-icon-active h-5 w-5" />
|
|
151
|
+
<div className="bg-fm-divider-secondary h-1 flex-1 rounded-full">
|
|
152
|
+
<div className="bg-fm-icon-active h-1 w-3/4 rounded-full" />
|
|
1253
153
|
</div>
|
|
1254
154
|
</div>
|
|
1255
|
-
</
|
|
1256
|
-
|
|
155
|
+
</IconUsageSection>
|
|
156
|
+
|
|
157
|
+
<IconUsageSection title="Quick Mute Toggle">
|
|
158
|
+
<button className="border-fm-divider-secondary bg-fm-surface-secondary flex items-center gap-2 rounded-xl border px-3 py-2">
|
|
159
|
+
<VolumeFullIcon className="text-fm-icon-active h-4 w-4" />
|
|
160
|
+
<span className="text-fm-primary font-fm-text text-sm">Mute</span>
|
|
161
|
+
</button>
|
|
162
|
+
</IconUsageSection>
|
|
163
|
+
</IconUsageCanvas>
|
|
1257
164
|
),
|
|
1258
165
|
}
|
|
1259
166
|
|
|
1260
167
|
export const Playground: Story = {
|
|
1261
|
-
parameters: {
|
|
1262
|
-
...storyParameters,
|
|
1263
|
-
docs: {
|
|
1264
|
-
description: {
|
|
1265
|
-
story:
|
|
1266
|
-
"Interactive playground to experiment with different VolumeFullIcon configurations.",
|
|
1267
|
-
},
|
|
1268
|
-
},
|
|
1269
|
-
},
|
|
1270
168
|
args: {
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
className: "text-fm-icon-info",
|
|
169
|
+
className: "h-8 w-8 text-fm-icon-active",
|
|
170
|
+
withAccessibility: true,
|
|
1274
171
|
},
|
|
1275
172
|
render: (args) => (
|
|
1276
|
-
<
|
|
1277
|
-
<
|
|
1278
|
-
|
|
1279
|
-
</div>
|
|
1280
|
-
</div>
|
|
173
|
+
<IconPlaygroundCanvas>
|
|
174
|
+
<VolumeFullIcon {...args} />
|
|
175
|
+
</IconPlaygroundCanvas>
|
|
1281
176
|
),
|
|
1282
177
|
}
|