aural-ui 3.0.7 → 4.1.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/dist/components/aspect-ratio/AspectRatio.stories.tsx +290 -1199
- package/dist/components/avatar/Avatar.stories.tsx +235 -237
- 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/button/index.tsx +7 -7
- 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 -620
- 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 +533 -856
- package/dist/components/dialog/Dialog.stories.tsx +505 -949
- package/dist/components/divider/Divider.stories.tsx +265 -502
- package/dist/components/dot-loader/DotLoader.stories.tsx +256 -257
- package/dist/components/drawer/Drawer.stories.tsx +659 -993
- package/dist/components/drawer/index.tsx +3 -3
- package/dist/components/dropdown/Dropdown.stories.tsx +643 -1018
- 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 -1221
- 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 +485 -822
- package/dist/components/marquee/Marquee.stories.tsx +356 -694
- package/dist/components/otp-inputs/OtpInputs.stories.tsx +352 -410
- package/dist/components/overlay/Overlay.stories.tsx +452 -818
- package/dist/components/overlay/index.tsx +4 -4
- package/dist/components/pagination/Pagination.stories.tsx +721 -210
- package/dist/components/popover/Popover.stories.tsx +484 -873
- package/dist/components/radio/Radio.stories.tsx +432 -124
- package/dist/components/resizable/Resizable.stories.tsx +496 -752
- package/dist/components/scroll-area/ScrollArea.stories.tsx +384 -1006
- package/dist/components/search/Search.stories.tsx +314 -575
- package/dist/components/select/Select.stories.tsx +684 -787
- package/dist/components/sheet/Sheet.stories.tsx +671 -936
- package/dist/components/skelton/Skelton.stories.tsx +230 -764
- package/dist/components/slider/Slider.stories.tsx +384 -737
- 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 -914
- package/dist/components/tabs/Tabs.stories.tsx +459 -1400
- 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 -148
- package/dist/components/toast/Toast.stories.tsx +452 -1333
- package/dist/components/toggle/Toggle.stories.tsx +488 -909
- package/dist/components/tooltip/Tooltip.stories.tsx +344 -1372
- 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 +226 -1013
- package/dist/icons/alert-icon/AlertIcon.stories.tsx +109 -929
- package/dist/icons/all-icons.tsx +124 -87
- package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +140 -971
- package/dist/icons/apple-logo-icon/AppleLogoIcon.stories.tsx +148 -888
- package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +135 -1019
- package/dist/icons/arrow-corner-up-left-icon/ArrowCornerUpLeftIcon.stories.tsx +137 -953
- package/dist/icons/arrow-corner-up-right-icon/ArrowCornerUpRightIcon.stories.tsx +138 -997
- package/dist/icons/arrow-left-icon/ArrowLeftIcon.stories.tsx +136 -942
- package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +148 -1092
- package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +146 -1211
- package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +126 -615
- package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +144 -1164
- package/dist/icons/backward-ten-seconds-icon/BackwardTenSecondsIcon.stories.tsx +167 -985
- package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +122 -1179
- package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +124 -1168
- package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +119 -850
- package/dist/icons/camera-icon/CameraIcon.stories.tsx +112 -1213
- package/dist/icons/capital-a-letter-icon/CapitalALetterIcon.stories.tsx +117 -934
- package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +160 -961
- package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +163 -961
- package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +144 -942
- package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +129 -966
- package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +147 -964
- package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +145 -975
- package/dist/icons/circle-tick-icon/CircleTickIcon.stories.tsx +150 -1142
- package/dist/icons/circular-play-icon/CircularPlayIcon.stories.tsx +114 -461
- package/dist/icons/coin-icon/CoinIcon.stories.tsx +124 -1322
- package/dist/icons/coin-toons-icon/CoinToonsIcon.stories.tsx +117 -1318
- package/dist/icons/column-wide-add-icon/ColumnWideAddIcon.stories.tsx +114 -903
- package/dist/icons/command-icon/CommandIcon.stories.tsx +127 -1042
- package/dist/icons/copy-icon/CopyIcon.stories.tsx +123 -962
- package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +147 -999
- package/dist/icons/cross-icon/CrossIcon.stories.tsx +139 -960
- package/dist/icons/download-icon/DownloadIcon.stories.tsx +126 -820
- package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +124 -1031
- package/dist/icons/email-icon/EmailIcon.stories.tsx +115 -936
- package/dist/icons/expand-icon/ExpandIcon.stories.tsx +112 -1111
- package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +144 -1025
- package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +143 -1036
- package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +127 -1011
- package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +126 -1056
- package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +125 -614
- package/dist/icons/filter-bar-row-icon/FilterBarRowIcon.stories.tsx +119 -1050
- package/dist/icons/forward-ten-seconds-icon/ForwardTenSecondsIcon.stories.tsx +169 -989
- package/dist/icons/git-branch-icon/GitBranchIcon.stories.tsx +115 -1145
- package/dist/icons/git-fork-icon/GitForkIcon.stories.tsx +115 -1122
- package/dist/icons/globe-icon/GlobeIcon.stories.tsx +130 -313
- package/dist/icons/google-logo-icon/GoogleLogoIcon.stories.tsx +145 -940
- package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +119 -1174
- package/dist/icons/head-icon/HeadIcon.stories.tsx +111 -916
- package/dist/icons/heart-icon/HeartIcon.stories.tsx +120 -1019
- package/dist/icons/image-avatar-sparkle-icon/ImageAvatarSparkleIcon.stories.tsx +119 -683
- package/dist/icons/image-icon/ImageIcon.stories.tsx +105 -1121
- package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +111 -1192
- package/dist/icons/import-left-arrow-folder-icon/ImportLeftArrowFolderIcon.stories.tsx +136 -1256
- package/dist/icons/indian-flag-icon/IndianFlagIcon.stories.tsx +159 -962
- package/dist/icons/instagram-icon/InstagramIcon.stories.tsx +161 -1385
- package/dist/icons/layout-column-icon/LayoutColumnIcon.stories.tsx +124 -972
- package/dist/icons/layout-left-icon/LayoutLeftIcon.stories.tsx +119 -948
- package/dist/icons/layout-right-icon/LayoutRightIcon.stories.tsx +119 -942
- package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +108 -1215
- package/dist/icons/linked-in-icon/LinkedInIcon.stories.tsx +154 -1517
- package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +110 -1188
- package/dist/icons/magic-edit-icon/MagicEditIcon.stories.tsx +119 -678
- package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +123 -1184
- package/dist/icons/message-icon/MessageIcon.stories.tsx +114 -538
- package/dist/icons/minimize-icon/MinimizeIcon.stories.tsx +116 -1158
- package/dist/icons/moon-icon/MoonIcon.stories.tsx +120 -536
- package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +109 -1184
- package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +115 -1134
- package/dist/icons/musical-note-icon/MusicalNoteIcon.stories.tsx +119 -971
- package/dist/icons/notepad-icon/NotepadIcon.stories.tsx +111 -1100
- package/dist/icons/notes-icon/NotesIcon.stories.tsx +119 -1101
- package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +109 -1111
- package/dist/icons/page-text-icon/PageTextIcon.stories.tsx +122 -684
- package/dist/icons/paint-roll-icon/PaintRollIcon.stories.tsx +113 -954
- package/dist/icons/paper-plane-icon/PaperPlaneIcon.stories.tsx +112 -877
- package/dist/icons/pause-icon/PauseIcon.stories.tsx +113 -1000
- package/dist/icons/pencil-icon/PencilIcon.stories.tsx +115 -1070
- package/dist/icons/phone-icon/PhoneIcon.stories.tsx +115 -978
- package/dist/icons/plus-icon/PlusIcon.stories.tsx +106 -1093
- package/dist/icons/pocket-studio-icon/PocketStudioIcon.stories.tsx +107 -829
- package/dist/icons/scroll-down-icon/ScrollDownIcon.stories.tsx +102 -469
- package/dist/icons/search-icon/SearchIcon.stories.tsx +111 -1124
- package/dist/icons/setting-icon/SettingIcon.stories.tsx +107 -970
- package/dist/icons/share-icon/ShareIcon.stories.tsx +120 -1025
- package/dist/icons/shield-icon/ShieldIcon.stories.tsx +117 -931
- package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +137 -1104
- package/dist/icons/skip-backward-icon/SkipBackwardIcon.stories.tsx +172 -982
- package/dist/icons/skip-forward-icon/SkipForwardIcon.stories.tsx +164 -983
- package/dist/icons/sparkles-soft-icon/SparklesSoftIcon.stories.tsx +105 -958
- package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +158 -580
- package/dist/icons/spinner-gradient-icon/index.tsx +6 -1
- package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +158 -587
- package/dist/icons/spinner-solid-icon/index.tsx +6 -1
- package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +146 -682
- package/dist/icons/spinner-solid-neutral-icon/index.tsx +1 -1
- package/dist/icons/star-icon/StarIcon.stories.tsx +124 -904
- package/dist/icons/store-coin-icon/StoreCoinIcon.stories.tsx +112 -964
- package/dist/icons/suggestion-icon/SuggestionIcon.stories.tsx +116 -852
- package/dist/icons/sun-icon/SunIcon.stories.tsx +120 -831
- package/dist/icons/text-color-icon/TextColorIcon.stories.tsx +116 -950
- package/dist/icons/text-indicator-icon/TextIndicatorIcon.stories.tsx +123 -980
- package/dist/icons/threads-icon/ThreadsIcon.stories.tsx +156 -1427
- package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +146 -1142
- package/dist/icons/tick-icon/TickIcon.stories.tsx +145 -1276
- package/dist/icons/trash-icon/TrashIcon.stories.tsx +108 -933
- package/dist/icons/twitter-x-icon/TwitterXIcon.stories.tsx +157 -1402
- package/dist/icons/upload-icon/UploadIcon.stories.tsx +115 -889
- package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +118 -984
- package/dist/icons/video-play-list-icon/VideoPlaylistIcon.stories.tsx +125 -1049
- package/dist/icons/voice-playing-icon/VoicePlayingIcon.stories.tsx +123 -1356
- package/dist/icons/volume-full-icon/VolumeFullIcon.stories.tsx +110 -1171
- package/dist/icons/volume-half-icon/VolumeHalfIcon.stories.tsx +112 -1093
- package/dist/icons/volume-off-icon/VolumeOffIcon.stories.tsx +115 -1087
- package/dist/icons/warning-icon/WarningIcon.stories.tsx +122 -1046
- package/dist/icons/youtube-icon/YoutubeIcon.stories.tsx +161 -936
- package/dist/index.cjs +84 -84
- package/dist/index.js +84 -84
- package/dist/styles/aural-all-theme.css +1222 -0
- package/dist/styles/{aural-theme.css → aural-dark-theme.css} +15 -3
- package/dist/styles/aural-light-theme.css +1047 -0
- package/package.json +1 -1
|
@@ -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> = {
|
|
@@ -11,1043 +25,75 @@ const meta: Meta<typeof VolumeFullIcon> = {
|
|
|
11
25
|
backgrounds: {
|
|
12
26
|
default: "dark",
|
|
13
27
|
values: [
|
|
14
|
-
{ name: "dark", value: "
|
|
15
|
-
{ name: "darker", value: "
|
|
16
|
-
{ name: "light", value: "
|
|
28
|
+
{ name: "dark", value: "var(--color-fm-surface-primary)" },
|
|
29
|
+
{ name: "darker", value: "var(--color-fm-neutral-0)" },
|
|
30
|
+
{ name: "light", value: "var(--color-fm-neutral-1100)" },
|
|
17
31
|
],
|
|
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: #0a0a0a ;
|
|
44
|
-
}
|
|
45
|
-
#storybook-docs {
|
|
46
|
-
background: #0a0a0a ;
|
|
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: white ;
|
|
54
|
-
}
|
|
55
|
-
.sbdocs-p, .sbdocs-li {
|
|
56
|
-
color: rgba(255, 255, 255, 0.7) ;
|
|
57
|
-
}
|
|
58
|
-
.sbdocs-code {
|
|
59
|
-
background: rgba(255, 255, 255, 0.1) ;
|
|
60
|
-
color: rgba(168, 85, 247, 1) ;
|
|
61
|
-
border: 1px solid rgba(255, 255, 255, 0.1) ;
|
|
62
|
-
}
|
|
63
|
-
.sbdocs-pre {
|
|
64
|
-
background: rgba(0, 0, 0, 0.4) ;
|
|
65
|
-
border: 1px solid rgba(255, 255, 255, 0.1) ;
|
|
66
|
-
}
|
|
67
|
-
.sbdocs-table {
|
|
68
|
-
background: rgba(255, 255, 255, 0.05) ;
|
|
69
|
-
border: 1px solid rgba(255, 255, 255, 0.1) ;
|
|
70
|
-
}
|
|
71
|
-
.sbdocs-table th {
|
|
72
|
-
background: rgba(255, 255, 255, 0.05) ;
|
|
73
|
-
color: white ;
|
|
74
|
-
border-bottom: 1px solid rgba(255, 255, 255, 0.1) ;
|
|
75
|
-
}
|
|
76
|
-
.sbdocs-table td {
|
|
77
|
-
color: rgba(255, 255, 255, 0.7) ;
|
|
78
|
-
border-bottom: 1px solid rgba(255, 255, 255, 0.05) ;
|
|
79
|
-
}
|
|
80
|
-
`}
|
|
81
|
-
</style>
|
|
82
|
-
|
|
83
|
-
<div className="min-h-screen bg-gradient-to-br from-gray-900 via-indigo-900/20 to-gray-900">
|
|
84
|
-
{/* Header */}
|
|
85
|
-
<div className="relative overflow-hidden border-b border-white/10 bg-black/20 backdrop-blur-xl">
|
|
86
|
-
<div className="absolute inset-0 bg-gradient-to-r from-indigo-500/10 via-transparent to-blue-500/10" />
|
|
87
|
-
<div className="relative !mx-auto max-w-7xl px-6 py-16">
|
|
88
|
-
<div className="!space-y-6 text-center">
|
|
89
|
-
<div className="!mx-auto flex h-24 w-24 items-center justify-center rounded-2xl border border-indigo-500/30 bg-gradient-to-br from-indigo-500/20 to-blue-500/20">
|
|
90
|
-
<VolumeFullIcon className="h-12 w-12 text-indigo-400" />
|
|
91
|
-
</div>
|
|
92
|
-
<h1 className="text-5xl font-bold !text-white">
|
|
93
|
-
VolumeFullIcon
|
|
94
|
-
</h1>
|
|
95
|
-
<p className="!mx-auto max-w-3xl text-xl leading-relaxed !text-white/70">
|
|
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-3xl font-bold text-indigo-300">
|
|
107
|
-
Maximum Volume
|
|
108
|
-
</div>
|
|
109
|
-
<div className="text-sm text-white/60">
|
|
110
|
-
Full audio power
|
|
111
|
-
</div>
|
|
112
|
-
</div>
|
|
113
|
-
<div className="h-8 w-px bg-white/20" />
|
|
114
|
-
<div className="text-center">
|
|
115
|
-
<div className="text-3xl font-bold text-blue-300">
|
|
116
|
-
Accessible
|
|
117
|
-
</div>
|
|
118
|
-
<div className="text-sm text-white/60">
|
|
119
|
-
Screen reader friendly
|
|
120
|
-
</div>
|
|
121
|
-
</div>
|
|
122
|
-
<div className="h-8 w-px bg-white/20" />
|
|
123
|
-
<div className="text-center">
|
|
124
|
-
<div className="text-3xl font-bold text-purple-300">
|
|
125
|
-
Universal
|
|
126
|
-
</div>
|
|
127
|
-
<div className="text-sm text-white/60">
|
|
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-center text-3xl font-bold !text-white">
|
|
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-xl font-semibold !text-indigo-300">
|
|
146
|
-
Basic Usage
|
|
147
|
-
</h3>
|
|
148
|
-
<div className="rounded-lg bg-black/40 p-4">
|
|
149
|
-
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
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>
|
|
196
|
-
<th className="px-6 py-4 text-left text-sm font-semibold !text-white">
|
|
197
|
-
Type
|
|
198
|
-
</th>
|
|
199
|
-
<th className="px-6 py-4 text-left text-sm font-semibold !text-white">
|
|
200
|
-
Default
|
|
201
|
-
</th>
|
|
202
|
-
<th className="px-6 py-4 text-left text-sm font-semibold !text-white">
|
|
203
|
-
Description
|
|
204
|
-
</th>
|
|
205
|
-
</tr>
|
|
206
|
-
</thead>
|
|
207
|
-
<tbody>
|
|
208
|
-
{" "}
|
|
209
|
-
<tr className="!bg-black/10">
|
|
210
|
-
<td className="px-6 py-4 font-mono text-sm !text-blue-300">
|
|
211
|
-
withAccessibility
|
|
212
|
-
</td>
|
|
213
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
214
|
-
boolean
|
|
215
|
-
</td>
|
|
216
|
-
<td className="px-6 py-4 text-sm !text-white/50">
|
|
217
|
-
true
|
|
218
|
-
</td>
|
|
219
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
220
|
-
Whether to wrap the icon with accessibility feature
|
|
221
|
-
</td>
|
|
222
|
-
</tr>
|
|
223
|
-
<tr className="border-b border-white/5 !bg-black/10">
|
|
224
|
-
<td className="px-6 py-4 font-mono text-sm !text-indigo-300">
|
|
225
|
-
height
|
|
226
|
-
</td>
|
|
227
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
228
|
-
number | string
|
|
229
|
-
</td>
|
|
230
|
-
<td className="px-6 py-4 text-sm !text-white/50">24</td>
|
|
231
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
232
|
-
Height of the icon in pixels
|
|
233
|
-
</td>
|
|
234
|
-
</tr>
|
|
235
|
-
<tr className="border-b border-white/5">
|
|
236
|
-
<td className="px-6 py-4 font-mono text-sm !text-indigo-300">
|
|
237
|
-
stroke
|
|
238
|
-
</td>
|
|
239
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
240
|
-
string
|
|
241
|
-
</td>
|
|
242
|
-
<td className="px-6 py-4 text-sm !text-white/50">
|
|
243
|
-
currentColor
|
|
244
|
-
</td>
|
|
245
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
246
|
-
Stroke color of the icon
|
|
247
|
-
</td>
|
|
248
|
-
</tr>
|
|
249
|
-
<tr className="border-b border-white/5 !bg-black/10">
|
|
250
|
-
<td className="px-6 py-4 font-mono text-sm !text-indigo-300">
|
|
251
|
-
strokeWidth
|
|
252
|
-
</td>
|
|
253
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
254
|
-
string | number
|
|
255
|
-
</td>
|
|
256
|
-
<td className="px-6 py-4 text-sm !text-white/50">
|
|
257
|
-
1.5
|
|
258
|
-
</td>
|
|
259
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
260
|
-
Width of the stroke
|
|
261
|
-
</td>
|
|
262
|
-
</tr>
|
|
263
|
-
<tr className="border-b border-white/5">
|
|
264
|
-
<td className="px-6 py-4 font-mono text-sm !text-indigo-300">
|
|
265
|
-
className
|
|
266
|
-
</td>
|
|
267
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
268
|
-
string
|
|
269
|
-
</td>
|
|
270
|
-
<td className="px-6 py-4 text-sm !text-white/50">-</td>
|
|
271
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
272
|
-
CSS classes for styling (use for overrides)
|
|
273
|
-
</td>
|
|
274
|
-
</tr>
|
|
275
|
-
<tr className="!bg-black/10">
|
|
276
|
-
<td className="px-6 py-4 font-mono text-sm !text-indigo-300">
|
|
277
|
-
...svgProps
|
|
278
|
-
</td>
|
|
279
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
280
|
-
SVGProps
|
|
281
|
-
</td>
|
|
282
|
-
<td className="px-6 py-4 text-sm !text-white/50">-</td>
|
|
283
|
-
<td className="px-6 py-4 text-sm !text-white/70">
|
|
284
|
-
All standard SVG element props
|
|
285
|
-
</td>
|
|
286
|
-
</tr>
|
|
287
|
-
</tbody>
|
|
288
|
-
</table>
|
|
289
|
-
</div>
|
|
290
|
-
</div>
|
|
291
|
-
|
|
292
|
-
{/* Size Variations */}
|
|
293
|
-
<div className="!space-y-8">
|
|
294
|
-
<h2 className="text-center text-3xl font-bold !text-white">
|
|
295
|
-
Size Variations
|
|
296
|
-
</h2>
|
|
297
|
-
<div className="rounded-lg border border-white/10 bg-white/5 p-8">
|
|
298
|
-
<div className="!space-y-6">
|
|
299
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
300
|
-
<div className="!space-y-4">
|
|
301
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
302
|
-
Standard Sizes
|
|
303
|
-
</h3>
|
|
304
|
-
<div className="flex items-end gap-6 rounded-lg bg-black/20 p-6">
|
|
305
|
-
<div className="text-center">
|
|
306
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-3 w-3 text-indigo-400" />
|
|
307
|
-
<span className="text-xs text-white/60">12px</span>
|
|
308
|
-
</div>
|
|
309
|
-
<div className="text-center">
|
|
310
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-4 w-4 text-indigo-400" />
|
|
311
|
-
<span className="text-xs text-white/60">16px</span>
|
|
312
|
-
</div>
|
|
313
|
-
<div className="text-center">
|
|
314
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-5 w-5 text-indigo-400" />
|
|
315
|
-
<span className="text-xs text-white/60">20px</span>
|
|
316
|
-
</div>
|
|
317
|
-
<div className="text-center">
|
|
318
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-6 w-6 text-indigo-400" />
|
|
319
|
-
<span className="text-xs text-white/60">24px</span>
|
|
320
|
-
</div>
|
|
321
|
-
<div className="text-center">
|
|
322
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-8 w-8 text-indigo-400" />
|
|
323
|
-
<span className="text-xs text-white/60">32px</span>
|
|
324
|
-
</div>
|
|
325
|
-
<div className="text-center">
|
|
326
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-12 w-12 text-indigo-400" />
|
|
327
|
-
<span className="text-xs text-white/60">48px</span>
|
|
328
|
-
</div>
|
|
329
|
-
</div>
|
|
330
|
-
</div>
|
|
331
|
-
|
|
332
|
-
<div className="!space-y-4">
|
|
333
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
334
|
-
Code Example
|
|
335
|
-
</h3>
|
|
336
|
-
<div className="rounded-lg bg-black/40 p-4">
|
|
337
|
-
<pre className="overflow-x-auto text-sm !text-cyan-300">
|
|
338
|
-
{`// Small (16px) - compact controls
|
|
339
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
340
|
-
|
|
341
|
-
// Medium (24px) - standard interface
|
|
342
|
-
<VolumeFullIcon className="h-6 w-6" />
|
|
343
|
-
|
|
344
|
-
// Large (32px) - prominent displays
|
|
345
|
-
<VolumeFullIcon className="h-8 w-8" />
|
|
346
|
-
|
|
347
|
-
// Custom size
|
|
348
|
-
<VolumeFullIcon width={40} height={40} />`}
|
|
349
|
-
</pre>
|
|
350
|
-
</div>
|
|
351
|
-
</div>
|
|
352
|
-
</div>
|
|
353
|
-
</div>
|
|
354
|
-
</div>
|
|
355
|
-
</div>
|
|
356
|
-
|
|
357
|
-
{/* Color Variations */}
|
|
358
|
-
<div className="!space-y-8">
|
|
359
|
-
<h2 className="text-center text-3xl font-bold !text-white">
|
|
360
|
-
Color Variations
|
|
361
|
-
</h2>
|
|
362
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
363
|
-
<div className="!space-y-4">
|
|
364
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
365
|
-
Semantic Colors
|
|
366
|
-
</h3>
|
|
367
|
-
<div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
|
|
368
|
-
<div className="flex items-center gap-4">
|
|
369
|
-
<VolumeFullIcon className="h-6 w-6 text-indigo-400" />
|
|
370
|
-
<div>
|
|
371
|
-
<div className="text-sm font-medium text-white">
|
|
372
|
-
Maximum Volume
|
|
373
|
-
</div>
|
|
374
|
-
<div className="text-xs text-white/60">
|
|
375
|
-
text-indigo-400
|
|
376
|
-
</div>
|
|
377
|
-
</div>
|
|
378
|
-
</div>
|
|
379
|
-
<div className="flex items-center gap-4">
|
|
380
|
-
<VolumeFullIcon className="h-6 w-6 text-blue-400" />
|
|
381
|
-
<div>
|
|
382
|
-
<div className="text-sm font-medium text-white">
|
|
383
|
-
High Power
|
|
384
|
-
</div>
|
|
385
|
-
<div className="text-xs text-white/60">
|
|
386
|
-
text-blue-400
|
|
387
|
-
</div>
|
|
388
|
-
</div>
|
|
389
|
-
</div>
|
|
390
|
-
<div className="flex items-center gap-4">
|
|
391
|
-
<VolumeFullIcon className="h-6 w-6 text-purple-400" />
|
|
392
|
-
<div>
|
|
393
|
-
<div className="text-sm font-medium text-white">
|
|
394
|
-
Enhanced
|
|
395
|
-
</div>
|
|
396
|
-
<div className="text-xs text-white/60">
|
|
397
|
-
text-purple-400
|
|
398
|
-
</div>
|
|
399
|
-
</div>
|
|
400
|
-
</div>
|
|
401
|
-
<div className="flex items-center gap-4">
|
|
402
|
-
<VolumeFullIcon className="h-6 w-6 text-violet-400" />
|
|
403
|
-
<div>
|
|
404
|
-
<div className="text-sm font-medium text-white">
|
|
405
|
-
Premium
|
|
406
|
-
</div>
|
|
407
|
-
<div className="text-xs text-white/60">
|
|
408
|
-
text-violet-400
|
|
409
|
-
</div>
|
|
410
|
-
</div>
|
|
411
|
-
</div>
|
|
412
|
-
</div>
|
|
413
|
-
</div>
|
|
414
|
-
|
|
415
|
-
<div className="!space-y-4">
|
|
416
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
417
|
-
Custom Colors
|
|
418
|
-
</h3>
|
|
419
|
-
<div className="rounded-lg bg-black/40 p-4">
|
|
420
|
-
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
421
|
-
{`// Using Tailwind classes
|
|
422
|
-
<VolumeFullIcon className="h-6 w-6 text-indigo-400" />
|
|
423
|
-
<VolumeFullIcon className="h-6 w-6 text-blue-500" />
|
|
424
|
-
|
|
425
|
-
// Using CSS custom properties
|
|
426
|
-
<VolumeFullIcon
|
|
427
|
-
className="h-6 w-6"
|
|
428
|
-
style={{ color: 'var(--color-volume-max)' }}
|
|
429
|
-
/>
|
|
430
|
-
|
|
431
|
-
// Direct stroke prop
|
|
432
|
-
<VolumeFullIcon
|
|
433
|
-
width={24}
|
|
434
|
-
height={24}
|
|
435
|
-
stroke="#6366f1"
|
|
436
|
-
/>`}
|
|
437
|
-
</pre>
|
|
438
|
-
</div>
|
|
439
|
-
</div>
|
|
440
|
-
</div>
|
|
441
|
-
</div>
|
|
442
|
-
|
|
443
|
-
{/* Usage Examples */}
|
|
444
|
-
<div className="!space-y-8">
|
|
445
|
-
<h2 className="text-center text-3xl font-bold !text-white">
|
|
446
|
-
Usage Examples
|
|
447
|
-
</h2>
|
|
448
|
-
|
|
449
|
-
<div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
|
|
450
|
-
{/* Home Theater System */}
|
|
451
|
-
<div className="!space-y-4">
|
|
452
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
453
|
-
Home Theater System
|
|
454
|
-
</h3>
|
|
455
|
-
<div className="!space-y-4">
|
|
456
|
-
<div className="rounded-lg border border-white/10 bg-white/5 p-6">
|
|
457
|
-
<div className="mb-4">
|
|
458
|
-
<div className="text-sm font-medium !text-white">
|
|
459
|
-
Surround Sound System
|
|
460
|
-
</div>
|
|
461
|
-
<div className="text-xs !text-white/60">
|
|
462
|
-
7.1 Channel Audio
|
|
463
|
-
</div>
|
|
464
|
-
</div>
|
|
465
|
-
<div className="mb-4 grid grid-cols-2 gap-4">
|
|
466
|
-
<div className="rounded-lg bg-black/20 p-3">
|
|
467
|
-
<div className="mb-2 text-xs text-white/60">
|
|
468
|
-
Master Volume
|
|
469
|
-
</div>
|
|
470
|
-
<div className="flex items-center gap-2">
|
|
471
|
-
<VolumeFullIcon className="h-5 w-5 text-indigo-400" />
|
|
472
|
-
<div className="h-2 flex-1 rounded-full bg-white/20">
|
|
473
|
-
<div className="h-full w-4/5 rounded-full bg-indigo-400" />
|
|
474
|
-
</div>
|
|
475
|
-
<span className="text-xs text-white">80%</span>
|
|
476
|
-
</div>
|
|
477
|
-
</div>
|
|
478
|
-
<div className="rounded-lg bg-black/20 p-3">
|
|
479
|
-
<div className="mb-2 text-xs text-white/60">
|
|
480
|
-
Subwoofer
|
|
481
|
-
</div>
|
|
482
|
-
<div className="flex items-center gap-2">
|
|
483
|
-
<VolumeFullIcon className="h-5 w-5 text-blue-400" />
|
|
484
|
-
<div className="h-2 flex-1 rounded-full bg-white/20">
|
|
485
|
-
<div className="h-full w-full rounded-full bg-blue-400" />
|
|
486
|
-
</div>
|
|
487
|
-
<span className="text-xs text-white">100%</span>
|
|
488
|
-
</div>
|
|
489
|
-
</div>
|
|
490
|
-
</div>
|
|
491
|
-
<div className="flex justify-center gap-4">
|
|
492
|
-
<button className="rounded-lg border border-indigo-500/30 bg-indigo-500/20 px-4 py-2 text-sm text-indigo-200">
|
|
493
|
-
Movie Mode
|
|
494
|
-
</button>
|
|
495
|
-
<button className="rounded-lg border border-white/20 bg-white/10 px-4 py-2 text-sm text-white">
|
|
496
|
-
Music Mode
|
|
497
|
-
</button>
|
|
498
|
-
</div>
|
|
499
|
-
</div>
|
|
500
|
-
<div className="rounded-lg bg-black/40 p-4">
|
|
501
|
-
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
502
|
-
{`// Home theater volume control
|
|
503
|
-
<div className="theater-system">
|
|
504
|
-
<div className="volume-channel">
|
|
505
|
-
<div className="channel-label">Master Volume</div>
|
|
506
|
-
<div className="volume-control">
|
|
507
|
-
<VolumeFullIcon className="h-5 w-5 text-indigo-400" />
|
|
508
|
-
<VolumeSlider
|
|
509
|
-
value={masterVolume}
|
|
510
|
-
max={100}
|
|
511
|
-
onChange={setMasterVolume}
|
|
512
|
-
/>
|
|
513
|
-
<span>{masterVolume}%</span>
|
|
514
|
-
</div>
|
|
515
|
-
</div>
|
|
516
|
-
<AudioModeSelector />
|
|
517
|
-
</div>`}
|
|
518
|
-
</pre>
|
|
519
|
-
</div>
|
|
520
|
-
</div>
|
|
521
|
-
</div>
|
|
522
|
-
|
|
523
|
-
{/* Gaming Setup */}
|
|
524
|
-
<div className="!space-y-4">
|
|
525
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
526
|
-
Gaming Setup
|
|
527
|
-
</h3>
|
|
528
|
-
<div className="!space-y-4">
|
|
529
|
-
<div className="rounded-lg border border-white/10 bg-white/5 p-6">
|
|
530
|
-
<div className="mb-4">
|
|
531
|
-
<div className="text-sm font-medium !text-white">
|
|
532
|
-
Gaming Audio
|
|
533
|
-
</div>
|
|
534
|
-
<div className="text-xs !text-white/60">
|
|
535
|
-
Enhanced for competitive play
|
|
536
|
-
</div>
|
|
537
|
-
</div>
|
|
538
|
-
<div className="mb-4 space-y-3">
|
|
539
|
-
<div className="flex items-center justify-between">
|
|
540
|
-
<div className="flex items-center gap-3">
|
|
541
|
-
<VolumeFullIcon className="h-5 w-5 text-indigo-400" />
|
|
542
|
-
<div>
|
|
543
|
-
<div className="text-sm text-white">
|
|
544
|
-
Game Audio
|
|
545
|
-
</div>
|
|
546
|
-
<div className="text-xs text-white/60">
|
|
547
|
-
Explosions & Effects
|
|
548
|
-
</div>
|
|
549
|
-
</div>
|
|
550
|
-
</div>
|
|
551
|
-
<div className="h-2 w-20 rounded-full bg-white/20">
|
|
552
|
-
<div className="h-full w-full rounded-full bg-indigo-400" />
|
|
553
|
-
</div>
|
|
554
|
-
</div>
|
|
555
|
-
<div className="flex items-center justify-between">
|
|
556
|
-
<div className="flex items-center gap-3">
|
|
557
|
-
<VolumeFullIcon className="h-5 w-5 text-blue-400" />
|
|
558
|
-
<div>
|
|
559
|
-
<div className="text-sm text-white">
|
|
560
|
-
Voice Chat
|
|
561
|
-
</div>
|
|
562
|
-
<div className="text-xs text-white/60">
|
|
563
|
-
Team Communication
|
|
564
|
-
</div>
|
|
565
|
-
</div>
|
|
566
|
-
</div>
|
|
567
|
-
<div className="h-2 w-20 rounded-full bg-white/20">
|
|
568
|
-
<div className="h-full w-4/5 rounded-full bg-blue-400" />
|
|
569
|
-
</div>
|
|
570
|
-
</div>
|
|
571
|
-
<div className="flex items-center justify-between">
|
|
572
|
-
<div className="flex items-center gap-3">
|
|
573
|
-
<VolumeFullIcon className="h-5 w-5 text-purple-400" />
|
|
574
|
-
<div>
|
|
575
|
-
<div className="text-sm text-white">Music</div>
|
|
576
|
-
<div className="text-xs text-white/60">
|
|
577
|
-
Background Tracks
|
|
578
|
-
</div>
|
|
579
|
-
</div>
|
|
580
|
-
</div>
|
|
581
|
-
<div className="h-2 w-20 rounded-full bg-white/20">
|
|
582
|
-
<div className="h-full w-3/5 rounded-full bg-purple-400" />
|
|
583
|
-
</div>
|
|
584
|
-
</div>
|
|
585
|
-
</div>
|
|
586
|
-
<div className="flex justify-center">
|
|
587
|
-
<button className="rounded-lg bg-indigo-500 px-4 py-2 text-sm font-medium text-white">
|
|
588
|
-
Apply Gaming Profile
|
|
589
|
-
</button>
|
|
590
|
-
</div>
|
|
591
|
-
</div>
|
|
592
|
-
<div className="rounded-lg bg-black/40 p-4">
|
|
593
|
-
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
594
|
-
{`// Gaming audio mixer
|
|
595
|
-
<div className="gaming-audio-mixer">
|
|
596
|
-
{audioChannels.map(channel => (
|
|
597
|
-
<div key={channel.id} className="audio-channel">
|
|
598
|
-
<div className="channel-header">
|
|
599
|
-
<VolumeFullIcon
|
|
600
|
-
className="h-5 w-5"
|
|
601
|
-
style={{ color: channel.color }}
|
|
602
|
-
/>
|
|
603
|
-
<div>
|
|
604
|
-
<div className="channel-name">{channel.name}</div>
|
|
605
|
-
<div className="channel-desc">{channel.description}</div>
|
|
606
|
-
</div>
|
|
607
|
-
</div>
|
|
608
|
-
<VolumeSlider
|
|
609
|
-
value={channel.volume}
|
|
610
|
-
max={channel.maxVolume}
|
|
611
|
-
onChange={(val) => setChannelVolume(channel.id, val)}
|
|
612
|
-
/>
|
|
613
|
-
</div>
|
|
614
|
-
))}
|
|
615
|
-
</div>`}
|
|
616
|
-
</pre>
|
|
617
|
-
</div>
|
|
618
|
-
</div>
|
|
619
|
-
</div>
|
|
620
|
-
|
|
621
|
-
{/* Live Streaming */}
|
|
622
|
-
<div className="!space-y-4">
|
|
623
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
624
|
-
Live Streaming
|
|
625
|
-
</h3>
|
|
626
|
-
<div className="!space-y-4">
|
|
627
|
-
<div className="rounded-lg border border-white/10 bg-white/5 p-6">
|
|
628
|
-
<div className="mb-4">
|
|
629
|
-
<div className="text-sm font-medium !text-white">
|
|
630
|
-
Streaming Setup
|
|
631
|
-
</div>
|
|
632
|
-
<div className="text-xs !text-white/60">
|
|
633
|
-
Professional broadcast quality
|
|
634
|
-
</div>
|
|
635
|
-
</div>
|
|
636
|
-
<div className="mb-4 grid grid-cols-1 gap-3">
|
|
637
|
-
<div className="flex items-center justify-between rounded-lg bg-black/20 p-3">
|
|
638
|
-
<div className="flex items-center gap-3">
|
|
639
|
-
<VolumeFullIcon className="h-4 w-4 text-indigo-400" />
|
|
640
|
-
<span className="text-sm text-white">
|
|
641
|
-
Microphone
|
|
642
|
-
</span>
|
|
643
|
-
</div>
|
|
644
|
-
<div className="flex items-center gap-2">
|
|
645
|
-
<div className="h-1 w-16 rounded-full bg-white/20">
|
|
646
|
-
<div className="h-full w-4/5 rounded-full bg-indigo-400" />
|
|
647
|
-
</div>
|
|
648
|
-
<span className="text-xs text-white/60">85%</span>
|
|
649
|
-
</div>
|
|
650
|
-
</div>
|
|
651
|
-
<div className="flex items-center justify-between rounded-lg bg-black/20 p-3">
|
|
652
|
-
<div className="flex items-center gap-3">
|
|
653
|
-
<VolumeFullIcon className="h-4 w-4 text-blue-400" />
|
|
654
|
-
<span className="text-sm text-white">
|
|
655
|
-
Desktop Audio
|
|
656
|
-
</span>
|
|
657
|
-
</div>
|
|
658
|
-
<div className="flex items-center gap-2">
|
|
659
|
-
<div className="h-1 w-16 rounded-full bg-white/20">
|
|
660
|
-
<div className="h-full w-full rounded-full bg-blue-400" />
|
|
661
|
-
</div>
|
|
662
|
-
<span className="text-xs text-white/60">
|
|
663
|
-
100%
|
|
664
|
-
</span>
|
|
665
|
-
</div>
|
|
666
|
-
</div>
|
|
667
|
-
<div className="flex items-center justify-between rounded-lg bg-black/20 p-3">
|
|
668
|
-
<div className="flex items-center gap-3">
|
|
669
|
-
<VolumeFullIcon className="h-4 w-4 text-purple-400" />
|
|
670
|
-
<span className="text-sm text-white">
|
|
671
|
-
Alert Sounds
|
|
672
|
-
</span>
|
|
673
|
-
</div>
|
|
674
|
-
<div className="flex items-center gap-2">
|
|
675
|
-
<div className="h-1 w-16 rounded-full bg-white/20">
|
|
676
|
-
<div className="h-full w-3/4 rounded-full bg-purple-400" />
|
|
677
|
-
</div>
|
|
678
|
-
<span className="text-xs text-white/60">75%</span>
|
|
679
|
-
</div>
|
|
680
|
-
</div>
|
|
681
|
-
</div>
|
|
682
|
-
<div className="flex items-center justify-between">
|
|
683
|
-
<span className="text-xs text-white/60">
|
|
684
|
-
Live: 1,234 viewers
|
|
685
|
-
</span>
|
|
686
|
-
<div className="flex gap-2">
|
|
687
|
-
<div className="h-2 w-2 animate-pulse rounded-full bg-red-400" />
|
|
688
|
-
<span className="text-xs text-red-400">
|
|
689
|
-
Recording
|
|
690
|
-
</span>
|
|
691
|
-
</div>
|
|
692
|
-
</div>
|
|
693
|
-
</div>
|
|
694
|
-
<div className="rounded-lg bg-black/40 p-4">
|
|
695
|
-
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
696
|
-
{`// Live streaming audio control
|
|
697
|
-
<div className="streaming-console">
|
|
698
|
-
<div className="audio-sources">
|
|
699
|
-
{audioSources.map(source => (
|
|
700
|
-
<div key={source.id} className="audio-source">
|
|
701
|
-
<div className="source-info">
|
|
702
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
703
|
-
<span>{source.name}</span>
|
|
704
|
-
</div>
|
|
705
|
-
<div className="source-controls">
|
|
706
|
-
<VolumeSlider
|
|
707
|
-
value={source.volume}
|
|
708
|
-
max={source.maxGain}
|
|
709
|
-
onChange={(val) => setSourceVolume(source.id, val)}
|
|
710
|
-
/>
|
|
711
|
-
<span className="volume-value">{source.volume}%</span>
|
|
712
|
-
</div>
|
|
713
|
-
</div>
|
|
714
|
-
))}
|
|
715
|
-
</div>
|
|
716
|
-
<StreamingStatus isLive={isStreaming} />
|
|
717
|
-
</div>`}
|
|
718
|
-
</pre>
|
|
719
|
-
</div>
|
|
720
|
-
</div>
|
|
721
|
-
</div>
|
|
722
|
-
|
|
723
|
-
{/* Music Production */}
|
|
724
|
-
<div className="!space-y-4">
|
|
725
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
726
|
-
Music Production
|
|
727
|
-
</h3>
|
|
728
|
-
<div className="!space-y-4">
|
|
729
|
-
<div className="rounded-lg border border-white/10 bg-white/5 p-6">
|
|
730
|
-
<div className="mb-4">
|
|
731
|
-
<div className="text-sm font-medium !text-white">
|
|
732
|
-
Digital Audio Workstation
|
|
733
|
-
</div>
|
|
734
|
-
<div className="text-xs !text-white/60">
|
|
735
|
-
Professional mixing console
|
|
736
|
-
</div>
|
|
737
|
-
</div>
|
|
738
|
-
<div className="mb-4 grid grid-cols-3 gap-3">
|
|
739
|
-
{["Vocals", "Instruments", "Effects"].map(
|
|
740
|
-
(track, i) => (
|
|
741
|
-
<div
|
|
742
|
-
key={track}
|
|
743
|
-
className="rounded-lg bg-black/20 p-3"
|
|
744
|
-
>
|
|
745
|
-
<div className="mb-2 text-xs text-white/60">
|
|
746
|
-
{track}
|
|
747
|
-
</div>
|
|
748
|
-
<div className="flex flex-col items-center gap-2">
|
|
749
|
-
<VolumeFullIcon
|
|
750
|
-
className={`h-4 w-4 ${
|
|
751
|
-
i === 0
|
|
752
|
-
? "text-indigo-400"
|
|
753
|
-
: i === 1
|
|
754
|
-
? "text-blue-400"
|
|
755
|
-
: "text-purple-400"
|
|
756
|
-
}`}
|
|
757
|
-
/>
|
|
758
|
-
<div className="relative h-16 w-2 rounded-full bg-white/20">
|
|
759
|
-
<div
|
|
760
|
-
className={`absolute bottom-0 w-full rounded-full ${
|
|
761
|
-
i === 0
|
|
762
|
-
? "h-4/5 bg-indigo-400"
|
|
763
|
-
: i === 1
|
|
764
|
-
? "h-full bg-blue-400"
|
|
765
|
-
: "h-3/5 bg-purple-400"
|
|
766
|
-
}`}
|
|
767
|
-
/>
|
|
768
|
-
</div>
|
|
769
|
-
<span className="text-xs text-white">
|
|
770
|
-
{i === 0 ? "85" : i === 1 ? "100" : "60"}%
|
|
771
|
-
</span>
|
|
772
|
-
</div>
|
|
773
|
-
</div>
|
|
774
|
-
)
|
|
775
|
-
)}
|
|
776
|
-
</div>
|
|
777
|
-
<div className="flex justify-center gap-3">
|
|
778
|
-
<button className="rounded bg-red-500 px-3 py-1.5 text-xs text-white">
|
|
779
|
-
● REC
|
|
780
|
-
</button>
|
|
781
|
-
<button className="rounded bg-green-500 px-3 py-1.5 text-xs text-white">
|
|
782
|
-
▶ PLAY
|
|
783
|
-
</button>
|
|
784
|
-
<button className="rounded bg-yellow-500 px-3 py-1.5 text-xs text-black">
|
|
785
|
-
■ STOP
|
|
786
|
-
</button>
|
|
787
|
-
</div>
|
|
788
|
-
</div>
|
|
789
|
-
<div className="rounded-lg bg-black/40 p-4">
|
|
790
|
-
<pre className="overflow-x-auto text-sm !text-green-300">
|
|
791
|
-
{`// Digital audio workstation mixer
|
|
792
|
-
<div className="daw-mixer">
|
|
793
|
-
{tracks.map((track, index) => (
|
|
794
|
-
<div key={track.id} className="mixer-channel">
|
|
795
|
-
<div className="channel-header">
|
|
796
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
797
|
-
<span>{track.name}</span>
|
|
798
|
-
</div>
|
|
799
|
-
<div className="fader-section">
|
|
800
|
-
<VerticalSlider
|
|
801
|
-
value={track.volume}
|
|
802
|
-
max={track.maxGain}
|
|
803
|
-
onChange={(val) => setTrackVolume(track.id, val)}
|
|
804
|
-
className="volume-fader"
|
|
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
|
+
]}
|
|
805
84
|
/>
|
|
806
|
-
<div className="volume-display">
|
|
807
|
-
{track.volume}%
|
|
808
|
-
</div>
|
|
809
|
-
</div>
|
|
810
|
-
</div>
|
|
811
|
-
))}
|
|
812
|
-
<MasterSection />
|
|
813
|
-
</div>`}
|
|
814
|
-
</pre>
|
|
815
|
-
</div>
|
|
816
|
-
</div>
|
|
817
|
-
</div>
|
|
818
|
-
</div>
|
|
819
|
-
</div>
|
|
820
|
-
|
|
821
|
-
{/* Accessibility */}
|
|
822
|
-
<div className="!space-y-8">
|
|
823
|
-
<h2 className="text-center text-3xl font-bold !text-white">
|
|
824
|
-
Accessibility Features
|
|
825
|
-
</h2>
|
|
826
|
-
<div className="grid grid-cols-1 gap-8 md:grid-cols-2">
|
|
827
|
-
<div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
|
|
828
|
-
<h3 className="text-lg font-semibold !text-green-300">
|
|
829
|
-
✅ Built-in Features
|
|
830
|
-
</h3>
|
|
831
|
-
<ul className="!space-y-2 text-sm !text-white/70">
|
|
832
|
-
<li className="!text-white/70">
|
|
833
|
-
Uses Radix UI AccessibleIcon wrapper
|
|
834
|
-
</li>
|
|
835
|
-
<li className="!text-white/70">
|
|
836
|
-
Provides screen reader label "Volume full icon"
|
|
837
|
-
</li>
|
|
838
|
-
<li className="!text-white/70">
|
|
839
|
-
Supports keyboard navigation when interactive
|
|
840
|
-
</li>
|
|
841
|
-
<li className="!text-white/70">
|
|
842
|
-
Maintains proper color contrast ratios
|
|
843
|
-
</li>
|
|
844
|
-
<li className="!text-white/70">
|
|
845
|
-
Scales with user's font size preferences
|
|
846
|
-
</li>
|
|
847
|
-
</ul>
|
|
848
|
-
</div>
|
|
849
|
-
|
|
850
|
-
<div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
|
|
851
|
-
<h3 className="text-lg font-semibold !text-indigo-300">
|
|
852
|
-
💡 Best Practices
|
|
853
|
-
</h3>
|
|
854
|
-
<ul className="!space-y-2 text-sm text-white/70">
|
|
855
|
-
<li className="!text-white/70">
|
|
856
|
-
Always provide descriptive aria-labels for maximum
|
|
857
|
-
volume controls
|
|
858
|
-
</li>
|
|
859
|
-
<li className="!text-white/70">
|
|
860
|
-
Use consistent placement in audio control groups
|
|
861
|
-
</li>
|
|
862
|
-
<li className="!text-white/70">
|
|
863
|
-
Ensure sufficient touch target size (44px minimum)
|
|
864
|
-
</li>
|
|
865
|
-
<li className="!text-white/70">
|
|
866
|
-
Provide visible focus states for keyboard users
|
|
867
|
-
</li>
|
|
868
|
-
<li className="!text-white/70">
|
|
869
|
-
Consider volume limits for hearing protection
|
|
870
|
-
</li>
|
|
871
|
-
</ul>
|
|
872
|
-
</div>
|
|
873
|
-
</div>
|
|
874
|
-
|
|
875
|
-
<div className="rounded-lg border border-white/10 bg-white/5 p-6">
|
|
876
|
-
<h3 className="mb-4 text-lg font-semibold !text-blue-300">
|
|
877
|
-
Proper ARIA Implementation
|
|
878
|
-
</h3>
|
|
879
|
-
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
880
|
-
<div className="rounded-lg bg-black/40 p-4">
|
|
881
|
-
<pre className="overflow-x-auto text-sm !text-cyan-300">
|
|
882
|
-
{`// Maximum volume control with proper ARIA
|
|
883
|
-
<div className="volume-control">
|
|
884
|
-
<button
|
|
885
|
-
aria-label="Set maximum volume"
|
|
886
|
-
onClick={setMaxVolume}
|
|
887
|
-
aria-describedby="volume-warning"
|
|
888
|
-
>
|
|
889
|
-
<VolumeFullIcon className="h-6 w-6 text-indigo-400" />
|
|
890
|
-
</button>
|
|
891
|
-
<div id="volume-warning" className="sr-only">
|
|
892
|
-
Warning: Maximum volume may damage hearing
|
|
893
|
-
</div>
|
|
894
|
-
</div>
|
|
895
|
-
|
|
896
|
-
// Volume slider with maximum indicator
|
|
897
|
-
<div className="volume-slider">
|
|
898
|
-
<VolumeFullIcon
|
|
899
|
-
className="h-5 w-5"
|
|
900
|
-
aria-describedby="max-volume-label"
|
|
901
|
-
/>
|
|
902
|
-
<div
|
|
903
|
-
role="slider"
|
|
904
|
-
aria-label="Volume"
|
|
905
|
-
aria-valuemin="0"
|
|
906
|
-
aria-valuemax="100"
|
|
907
|
-
aria-valuenow={100}
|
|
908
|
-
aria-valuetext="Maximum volume, 100 percent"
|
|
909
|
-
/>
|
|
910
|
-
<div id="max-volume-label" className="sr-only">
|
|
911
|
-
Volume at maximum level
|
|
912
|
-
</div>
|
|
913
|
-
</div>
|
|
914
|
-
|
|
915
|
-
// Professional audio with gain control
|
|
916
|
-
<button
|
|
917
|
-
aria-label="Set track gain to maximum"
|
|
918
|
-
aria-pressed={gain === maxGain}
|
|
919
|
-
onClick={() => setGain(maxGain)}
|
|
920
|
-
>
|
|
921
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
922
|
-
<span>Max Gain</span>
|
|
923
|
-
</button>`}
|
|
924
|
-
</pre>
|
|
925
|
-
</div>
|
|
926
|
-
<div className="!space-y-4">
|
|
927
|
-
<p className="text-sm !text-white/70">
|
|
928
|
-
When using VolumeFullIcon for maximum volume controls,
|
|
929
|
-
always provide clear warnings about potential hearing
|
|
930
|
-
damage and context about the high volume level.
|
|
931
|
-
</p>
|
|
932
|
-
<div className="rounded-lg border border-indigo-500/20 bg-indigo-500/10 p-4">
|
|
933
|
-
<div className="flex items-center gap-2 text-sm text-indigo-200">
|
|
934
|
-
<VolumeFullIcon className="h-4 w-4" />
|
|
935
|
-
<span>
|
|
936
|
-
Maximum volume controls need hearing protection
|
|
937
|
-
warnings
|
|
938
|
-
</span>
|
|
939
|
-
</div>
|
|
940
|
-
</div>
|
|
941
|
-
</div>
|
|
942
|
-
</div>
|
|
943
|
-
</div>
|
|
944
|
-
</div>
|
|
945
|
-
|
|
946
|
-
{/* Related Icons */}
|
|
947
|
-
<div className="!space-y-8">
|
|
948
|
-
<h2 className="text-center text-3xl font-bold !text-white">
|
|
949
|
-
Related Icons
|
|
950
|
-
</h2>
|
|
951
|
-
<div className="grid grid-cols-2 gap-6 md:grid-cols-4">
|
|
952
|
-
<div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
|
|
953
|
-
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-emerald-500/20">
|
|
954
|
-
<span className="!text-2xl !text-white">🔉</span>
|
|
955
|
-
</div>
|
|
956
|
-
<div>
|
|
957
|
-
<div className="font-medium text-white">
|
|
958
|
-
VolumeHalfIcon
|
|
959
|
-
</div>
|
|
960
|
-
<div className="text-xs text-white/60">Medium volume</div>
|
|
961
|
-
</div>
|
|
962
|
-
</div>
|
|
963
|
-
<div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
|
|
964
|
-
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-yellow-500/20">
|
|
965
|
-
<span className="!text-2xl !text-white">🔈</span>
|
|
966
|
-
</div>
|
|
967
|
-
<div>
|
|
968
|
-
<div className="font-medium text-white">
|
|
969
|
-
VolumeLowIcon
|
|
970
|
-
</div>
|
|
971
|
-
<div className="text-xs text-white/60">Low volume</div>
|
|
972
|
-
</div>
|
|
973
|
-
</div>
|
|
974
|
-
<div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
|
|
975
|
-
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-gray-500/20">
|
|
976
|
-
<span className="!text-2xl !text-white">🔇</span>
|
|
977
|
-
</div>
|
|
978
|
-
<div>
|
|
979
|
-
<div className="font-medium text-white">
|
|
980
|
-
VolumeOffIcon
|
|
981
|
-
</div>
|
|
982
|
-
<div className="text-xs text-white/60">Muted</div>
|
|
983
|
-
</div>
|
|
984
|
-
</div>
|
|
985
|
-
<div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
|
|
986
|
-
<div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-red-500/20">
|
|
987
|
-
<span className="!text-2xl !text-white">⚠️</span>
|
|
988
|
-
</div>
|
|
989
|
-
<div>
|
|
990
|
-
<div className="font-medium text-white">
|
|
991
|
-
VolumeWarningIcon
|
|
992
|
-
</div>
|
|
993
|
-
<div className="text-xs text-white/60">Volume alert</div>
|
|
994
|
-
</div>
|
|
995
|
-
</div>
|
|
996
|
-
</div>
|
|
997
|
-
</div>
|
|
998
|
-
</div>
|
|
999
|
-
|
|
1000
|
-
{/* Footer */}
|
|
1001
|
-
<div className="border-t border-white/10 bg-black/20 backdrop-blur-xl">
|
|
1002
|
-
<div className="!mx-auto max-w-7xl px-6 py-8">
|
|
1003
|
-
<div className="!space-y-4 text-center">
|
|
1004
|
-
<p className="!text-white/60">
|
|
1005
|
-
VolumeFullIcon is part of the Aural UI icon library, built
|
|
1006
|
-
with accessibility and professional audio control best
|
|
1007
|
-
practices in mind.
|
|
1008
|
-
</p>
|
|
1009
|
-
<p className="text-sm !text-white/40">
|
|
1010
|
-
All icons use Radix UI's AccessibleIcon for screen reader
|
|
1011
|
-
compatibility and follow WCAG guidelines for media controls
|
|
1012
|
-
and hearing protection.
|
|
1013
|
-
</p>
|
|
1014
|
-
</div>
|
|
1015
|
-
</div>
|
|
1016
|
-
</div>
|
|
1017
|
-
</div>
|
|
1018
|
-
</>
|
|
1019
85
|
),
|
|
1020
86
|
},
|
|
1021
87
|
},
|
|
1022
88
|
tags: ["autodocs"],
|
|
1023
89
|
argTypes: {
|
|
1024
|
-
width: {
|
|
1025
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
1026
|
-
description: "Width of the icon in pixels",
|
|
1027
|
-
},
|
|
1028
|
-
withAccessibility: {
|
|
1029
|
-
control: "boolean",
|
|
1030
|
-
description: "Whether to wrap the icon with accessibility features",
|
|
1031
|
-
},
|
|
1032
|
-
height: {
|
|
1033
|
-
control: { type: "range", min: 8, max: 96, step: 2 },
|
|
1034
|
-
description: "Height of the icon in pixels",
|
|
1035
|
-
},
|
|
1036
|
-
stroke: {
|
|
1037
|
-
control: "color",
|
|
1038
|
-
description: "Stroke color of the icon",
|
|
1039
|
-
},
|
|
1040
|
-
strokeWidth: {
|
|
1041
|
-
control: { type: "range", min: 0.5, max: 4, step: 0.5 },
|
|
1042
|
-
description: "Width of the stroke",
|
|
1043
|
-
},
|
|
1044
90
|
className: {
|
|
1045
91
|
control: "text",
|
|
1046
|
-
description: "CSS classes
|
|
92
|
+
description: "CSS classes including color token",
|
|
1047
93
|
},
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
description: "
|
|
94
|
+
withAccessibility: {
|
|
95
|
+
control: "boolean",
|
|
96
|
+
description: "Wrap with accessibility label",
|
|
1051
97
|
},
|
|
1052
98
|
},
|
|
1053
99
|
}
|
|
@@ -1055,184 +101,77 @@ function VolumeControl() {
|
|
|
1055
101
|
export default meta
|
|
1056
102
|
type Story = StoryObj<typeof VolumeFullIcon>
|
|
1057
103
|
|
|
1058
|
-
// Story parameters for consistent dark theme
|
|
1059
|
-
const storyParameters = {
|
|
1060
|
-
backgrounds: {
|
|
1061
|
-
default: "dark",
|
|
1062
|
-
values: [
|
|
1063
|
-
{ name: "dark", value: "#0a0a0a" },
|
|
1064
|
-
{ name: "darker", value: "#000000" },
|
|
1065
|
-
],
|
|
1066
|
-
},
|
|
1067
|
-
}
|
|
1068
|
-
|
|
1069
104
|
export const Default: Story = {
|
|
1070
105
|
args: {
|
|
1071
|
-
className: "h-
|
|
106
|
+
className: "h-6 w-6 text-fm-icon-active",
|
|
1072
107
|
withAccessibility: true,
|
|
1073
108
|
},
|
|
1074
|
-
parameters: storyParameters,
|
|
1075
109
|
render: (args) => (
|
|
1076
|
-
<
|
|
110
|
+
<IconDefaultCanvas>
|
|
1077
111
|
<VolumeFullIcon {...args} />
|
|
1078
|
-
</
|
|
112
|
+
</IconDefaultCanvas>
|
|
1079
113
|
),
|
|
1080
114
|
}
|
|
1081
115
|
|
|
1082
116
|
export const SizeVariations: Story = {
|
|
1083
|
-
|
|
1084
|
-
...storyParameters,
|
|
1085
|
-
docs: {
|
|
1086
|
-
description: {
|
|
1087
|
-
story:
|
|
1088
|
-
"VolumeFullIcon in different sizes, from small interface elements to large professional audio displays.",
|
|
1089
|
-
},
|
|
1090
|
-
},
|
|
1091
|
-
},
|
|
1092
|
-
render: () => (
|
|
1093
|
-
<div className="flex h-64 min-h-dvh items-center justify-center gap-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
|
|
1094
|
-
<div className="text-center">
|
|
1095
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-3 w-3 text-indigo-400" />
|
|
1096
|
-
<span className="text-xs text-white/60">12px</span>
|
|
1097
|
-
</div>
|
|
1098
|
-
<div className="text-center">
|
|
1099
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-4 w-4 text-indigo-400" />
|
|
1100
|
-
<span className="text-xs text-white/60">16px</span>
|
|
1101
|
-
</div>
|
|
1102
|
-
<div className="text-center">
|
|
1103
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-5 w-5 text-indigo-400" />
|
|
1104
|
-
<span className="text-xs text-white/60">20px</span>
|
|
1105
|
-
</div>
|
|
1106
|
-
<div className="text-center">
|
|
1107
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-6 w-6 text-indigo-400" />
|
|
1108
|
-
<span className="text-xs text-white/60">24px</span>
|
|
1109
|
-
</div>
|
|
1110
|
-
<div className="text-center">
|
|
1111
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-8 w-8 text-indigo-400" />
|
|
1112
|
-
<span className="text-xs text-white/60">32px</span>
|
|
1113
|
-
</div>
|
|
1114
|
-
<div className="text-center">
|
|
1115
|
-
<VolumeFullIcon className="!mx-auto mb-2 h-12 w-12 text-indigo-400" />
|
|
1116
|
-
<span className="text-xs text-white/60">48px</span>
|
|
1117
|
-
</div>
|
|
1118
|
-
</div>
|
|
1119
|
-
),
|
|
117
|
+
render: () => <IconSizeVariations icon={VolumeFullIcon} />,
|
|
1120
118
|
}
|
|
1121
119
|
|
|
1122
120
|
export const ColorVariations: Story = {
|
|
1123
|
-
|
|
1124
|
-
...storyParameters,
|
|
1125
|
-
docs: {
|
|
1126
|
-
description: {
|
|
1127
|
-
story:
|
|
1128
|
-
"VolumeFullIcon in different semantic colors for various maximum volume applications.",
|
|
1129
|
-
},
|
|
1130
|
-
},
|
|
1131
|
-
},
|
|
1132
|
-
render: () => (
|
|
1133
|
-
<div className="grid min-h-dvh grid-cols-2 items-center justify-center gap-6 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8 md:grid-cols-4">
|
|
1134
|
-
<div className="text-center">
|
|
1135
|
-
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-indigo-500/30 bg-indigo-500/20">
|
|
1136
|
-
<VolumeFullIcon className="h-8 w-8 text-indigo-400" />
|
|
1137
|
-
</div>
|
|
1138
|
-
<div className="text-sm font-medium text-white">Maximum</div>
|
|
1139
|
-
<div className="text-xs text-indigo-400">text-indigo-400</div>
|
|
1140
|
-
</div>
|
|
1141
|
-
<div className="text-center">
|
|
1142
|
-
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-blue-500/30 bg-blue-500/20">
|
|
1143
|
-
<VolumeFullIcon className="h-8 w-8 text-blue-400" />
|
|
1144
|
-
</div>
|
|
1145
|
-
<div className="text-sm font-medium text-white">High Power</div>
|
|
1146
|
-
<div className="text-xs text-blue-400">text-blue-400</div>
|
|
1147
|
-
</div>
|
|
1148
|
-
<div className="text-center">
|
|
1149
|
-
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-purple-500/30 bg-purple-500/20">
|
|
1150
|
-
<VolumeFullIcon className="h-8 w-8 text-purple-400" />
|
|
1151
|
-
</div>
|
|
1152
|
-
<div className="text-sm font-medium text-white">Enhanced</div>
|
|
1153
|
-
<div className="text-xs text-purple-400">text-purple-400</div>
|
|
1154
|
-
</div>
|
|
1155
|
-
<div className="text-center">
|
|
1156
|
-
<div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-violet-500/30 bg-violet-500/20">
|
|
1157
|
-
<VolumeFullIcon className="h-8 w-8 text-violet-400" />
|
|
1158
|
-
</div>
|
|
1159
|
-
<div className="text-sm font-medium text-white">Premium</div>
|
|
1160
|
-
<div className="text-xs text-violet-400">text-violet-400</div>
|
|
1161
|
-
</div>
|
|
1162
|
-
</div>
|
|
1163
|
-
),
|
|
121
|
+
render: () => <IconColorVariations icon={VolumeFullIcon} />,
|
|
1164
122
|
}
|
|
1165
123
|
|
|
1166
124
|
export const UsageExamples: Story = {
|
|
1167
|
-
parameters: {
|
|
1168
|
-
...storyParameters,
|
|
1169
|
-
docs: {
|
|
1170
|
-
description: {
|
|
1171
|
-
story:
|
|
1172
|
-
"Real-world usage examples showing VolumeFullIcon in different professional audio contexts.",
|
|
1173
|
-
},
|
|
1174
|
-
},
|
|
1175
|
-
},
|
|
1176
125
|
render: () => (
|
|
1177
|
-
<
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
<
|
|
1188
|
-
|
|
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>
|
|
1189
143
|
</div>
|
|
1190
|
-
|
|
1191
|
-
<div className="h-full w-4/5 rounded-full bg-indigo-400" />
|
|
1192
|
-
</div>
|
|
1193
|
-
</div>
|
|
144
|
+
))}
|
|
1194
145
|
</div>
|
|
1195
|
-
</
|
|
146
|
+
</IconUsageSection>
|
|
1196
147
|
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
<div className="flex items-center gap-3">
|
|
1203
|
-
<VolumeFullIcon className="h-5 w-5 text-blue-400" />
|
|
1204
|
-
<span className="text-sm text-white">Game Audio</span>
|
|
1205
|
-
</div>
|
|
1206
|
-
<div className="h-2 w-20 rounded-full bg-white/20">
|
|
1207
|
-
<div className="h-full w-full rounded-full bg-blue-400" />
|
|
1208
|
-
</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" />
|
|
1209
153
|
</div>
|
|
1210
154
|
</div>
|
|
1211
|
-
</
|
|
1212
|
-
|
|
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>
|
|
1213
164
|
),
|
|
1214
165
|
}
|
|
1215
166
|
|
|
1216
167
|
export const Playground: Story = {
|
|
1217
|
-
parameters: {
|
|
1218
|
-
...storyParameters,
|
|
1219
|
-
docs: {
|
|
1220
|
-
description: {
|
|
1221
|
-
story:
|
|
1222
|
-
"Interactive playground to experiment with different VolumeFullIcon configurations.",
|
|
1223
|
-
},
|
|
1224
|
-
},
|
|
1225
|
-
},
|
|
1226
168
|
args: {
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
className: "text-indigo-400",
|
|
169
|
+
className: "h-8 w-8 text-fm-icon-active",
|
|
170
|
+
withAccessibility: true,
|
|
1230
171
|
},
|
|
1231
172
|
render: (args) => (
|
|
1232
|
-
<
|
|
1233
|
-
<
|
|
1234
|
-
|
|
1235
|
-
</div>
|
|
1236
|
-
</div>
|
|
173
|
+
<IconPlaygroundCanvas>
|
|
174
|
+
<VolumeFullIcon {...args} />
|
|
175
|
+
</IconPlaygroundCanvas>
|
|
1237
176
|
),
|
|
1238
177
|
}
|