aural-ui 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/dist/icons/apple-logo-icon/AppleLogoIcon.stories.tsx +952 -0
  2. package/dist/icons/apple-logo-icon/index.tsx +26 -0
  3. package/dist/icons/apple-logo-icon/meta.ts +8 -0
  4. package/dist/icons/arrow-left-icon/ArrowLeftIcon.stories.tsx +1008 -0
  5. package/dist/icons/arrow-left-icon/index.tsx +24 -0
  6. package/dist/icons/arrow-left-icon/meta.ts +8 -0
  7. package/dist/icons/backward-ten-seconds-icon/BackwardTenSecondsIcon.stories.tsx +1050 -0
  8. package/dist/icons/backward-ten-seconds-icon/index.tsx +35 -0
  9. package/dist/icons/backward-ten-seconds-icon/meta.ts +8 -0
  10. package/dist/icons/camera-icon/CameraIcon.stories.tsx +1271 -0
  11. package/dist/icons/camera-icon/index.tsx +22 -0
  12. package/dist/icons/camera-icon/meta.ts +8 -0
  13. package/dist/icons/coin-icon/CoinIcon.stories.tsx +1382 -0
  14. package/dist/icons/coin-icon/index.tsx +36 -0
  15. package/dist/icons/coin-icon/meta.ts +8 -0
  16. package/dist/icons/email-icon/EmailIcon.stories.tsx +995 -0
  17. package/dist/icons/email-icon/index.tsx +22 -0
  18. package/dist/icons/email-icon/meta.ts +8 -0
  19. package/dist/icons/expand-icon/ExpandIcon.stories.tsx +1167 -0
  20. package/dist/icons/expand-icon/index.tsx +22 -0
  21. package/dist/icons/expand-icon/meta.ts +8 -0
  22. package/dist/icons/forward-ten-seconds-icon/ForwardTenSecondsIcon.stories.tsx +1054 -0
  23. package/dist/icons/forward-ten-seconds-icon/index.tsx +33 -0
  24. package/dist/icons/forward-ten-seconds-icon/meta.ts +8 -0
  25. package/dist/icons/google-logo-icon/GoogleLogoIcon.stories.tsx +1004 -0
  26. package/dist/icons/google-logo-icon/index.tsx +34 -0
  27. package/dist/icons/google-logo-icon/meta.ts +8 -0
  28. package/dist/icons/heart-icon/HeartIcon.stories.tsx +1080 -0
  29. package/dist/icons/heart-icon/index.tsx +21 -0
  30. package/dist/icons/heart-icon/meta.ts +8 -0
  31. package/dist/icons/index.ts +32 -4
  32. package/dist/icons/indian-flag-icon/IndianFlagIcon.stories.tsx +1020 -0
  33. package/dist/icons/indian-flag-icon/index.tsx +46 -0
  34. package/dist/icons/indian-flag-icon/meta.ts +8 -0
  35. package/dist/icons/instagram-icon/InstagramIcon.stories.tsx +1449 -0
  36. package/dist/icons/instagram-icon/index.tsx +17 -0
  37. package/dist/icons/instagram-icon/meta.ts +8 -0
  38. package/dist/icons/linked-in-icon/LinkedInIcon.stories.tsx +1582 -0
  39. package/dist/icons/linked-in-icon/index.tsx +17 -0
  40. package/dist/icons/linked-in-icon/meta.ts +8 -0
  41. package/dist/icons/minimize-icon/MinimizeIcon.stories.tsx +1214 -0
  42. package/dist/icons/minimize-icon/index.tsx +22 -0
  43. package/dist/icons/minimize-icon/meta.ts +8 -0
  44. package/dist/icons/pause-icon/PauseIcon.stories.tsx +1060 -0
  45. package/dist/icons/pause-icon/index.tsx +30 -0
  46. package/dist/icons/pause-icon/meta.ts +8 -0
  47. package/dist/icons/share-icon/ShareIcon.stories.tsx +1081 -0
  48. package/dist/icons/share-icon/index.tsx +22 -0
  49. package/dist/icons/share-icon/meta.ts +8 -0
  50. package/dist/icons/skip-backward-icon/SkipBackwardIcon.stories.tsx +1047 -0
  51. package/dist/icons/skip-backward-icon/index.tsx +29 -0
  52. package/dist/icons/skip-backward-icon/meta.ts +8 -0
  53. package/dist/icons/skip-forward-icon/SkipForwardIcon.stories.tsx +1049 -0
  54. package/dist/icons/skip-forward-icon/index.tsx +29 -0
  55. package/dist/icons/skip-forward-icon/meta.ts +8 -0
  56. package/dist/icons/store-coin-icon/StoreCoinIcon.stories.tsx +1020 -0
  57. package/dist/icons/store-coin-icon/index.tsx +35 -0
  58. package/dist/icons/store-coin-icon/meta.ts +8 -0
  59. package/dist/icons/threads-icon/ThreadsIcon.stories.tsx +1489 -0
  60. package/dist/icons/threads-icon/index.tsx +17 -0
  61. package/dist/icons/threads-icon/meta.ts +8 -0
  62. package/dist/icons/twitter-x-icon/TwitterXIcon.stories.tsx +1463 -0
  63. package/dist/icons/twitter-x-icon/index.tsx +17 -0
  64. package/dist/icons/twitter-x-icon/meta.ts +8 -0
  65. package/dist/icons/video-play-list-icon/VideoPlaylistIcon.stories.tsx +1105 -0
  66. package/dist/icons/video-play-list-icon/index.tsx +22 -0
  67. package/dist/icons/video-play-list-icon/meta.ts +8 -0
  68. package/dist/icons/voice-playing-icon/VoicePlayingIcon.stories.tsx +1416 -0
  69. package/dist/icons/voice-playing-icon/index.tsx +24 -0
  70. package/dist/icons/voice-playing-icon/meta.ts +8 -0
  71. package/dist/icons/volume-full-icon/VolumeFullIcon.stories.tsx +1230 -0
  72. package/dist/icons/volume-full-icon/index.tsx +25 -0
  73. package/dist/icons/volume-full-icon/meta.ts +8 -0
  74. package/dist/icons/volume-half-icon/VolumeHalfIcon.stories.tsx +1153 -0
  75. package/dist/icons/volume-half-icon/index.tsx +25 -0
  76. package/dist/icons/volume-half-icon/meta.ts +8 -0
  77. package/dist/icons/volume-off-icon/VolumeOffIcon.stories.tsx +1144 -0
  78. package/dist/icons/volume-off-icon/index.tsx +26 -0
  79. package/dist/icons/volume-off-icon/meta.ts +8 -0
  80. package/dist/icons/warning-icon/WarningIcon.stories.tsx +1106 -0
  81. package/dist/icons/warning-icon/index.tsx +27 -0
  82. package/dist/icons/warning-icon/meta.ts +8 -0
  83. package/dist/icons/youtube-icon/YoutubeIcon.stories.tsx +996 -0
  84. package/dist/icons/youtube-icon/index.tsx +24 -0
  85. package/dist/icons/youtube-icon/meta.ts +8 -0
  86. package/dist/index.js +1 -1
  87. package/dist/styles/aural-theme.css +9 -0
  88. package/package.json +1 -1
@@ -0,0 +1,1153 @@
1
+ import React from "react"
2
+ import type { Meta, StoryObj } from "@storybook/react"
3
+
4
+ import { VolumeHalfIcon } from "."
5
+
6
+ const meta: Meta<typeof VolumeHalfIcon> = {
7
+ title: "Icons/VolumeHalfIcon",
8
+ component: VolumeHalfIcon,
9
+ parameters: {
10
+ layout: "fullscreen",
11
+ backgrounds: {
12
+ default: "dark",
13
+ values: [
14
+ { name: "dark", value: "#0a0a0a" },
15
+ { name: "darker", value: "#000000" },
16
+ { name: "light", value: "#ffffff" },
17
+ ],
18
+ },
19
+ docs: {
20
+ page: () => (
21
+ <>
22
+ {/* Override default docs styling */}
23
+ <style>
24
+ {`
25
+ .sbdocs-wrapper {
26
+ padding: 0 ;
27
+ max-width: none ;
28
+ background: transparent ;
29
+ }
30
+ .sbdocs-content {
31
+ max-width: none ;
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-emerald-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-emerald-500/10 via-transparent to-teal-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-emerald-500/30 bg-gradient-to-br from-emerald-500/20 to-teal-500/20">
90
+ <VolumeHalfIcon className="h-12 w-12 text-emerald-400" />
91
+ </div>
92
+ <h1 className="text-5xl font-bold !text-white">
93
+ VolumeHalfIcon
94
+ </h1>
95
+ <p className="!mx-auto max-w-3xl text-xl leading-relaxed !text-white/70">
96
+ A medium volume audio control icon for media interfaces.
97
+ Features the classic speaker with moderate sound waves
98
+ design, essential for music players, video platforms, audio
99
+ apps, and any media interface where users need to control
100
+ moderate 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-emerald-300">
107
+ Medium Volume
108
+ </div>
109
+ <div className="text-sm text-white/60">
110
+ Balanced audio
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-teal-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-green-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-emerald-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 { VolumeHalfIcon } from "@icons/volume-half-icon"
151
+
152
+ function VolumeControl() {
153
+ return (
154
+ <button
155
+ onClick={setMediumVolume}
156
+ className="p-2 hover:bg-white/10 rounded-lg"
157
+ aria-label="Set medium volume"
158
+ >
159
+ <VolumeHalfIcon className="h-6 w-6 text-emerald-400" />
160
+ </button>
161
+ )
162
+ }`}
163
+ </pre>
164
+ </div>
165
+ </div>
166
+
167
+ <div className="!space-y-4">
168
+ <h3 className="text-xl font-semibold !text-emerald-300">
169
+ Live Preview
170
+ </h3>
171
+ <div className="flex h-32 items-center justify-center rounded-lg border border-white/10 bg-white/5">
172
+ <button className="rounded-lg border border-emerald-500/20 bg-emerald-500/10 p-3 transition-colors hover:bg-emerald-500/20">
173
+ <VolumeHalfIcon className="h-6 w-6 text-emerald-400" />
174
+ </button>
175
+ </div>
176
+ </div>
177
+ </div>
178
+ </div>
179
+
180
+ {/* Props Documentation */}
181
+ <div className="!space-y-8">
182
+ <h2 className="text-center text-3xl font-bold !text-white">
183
+ Props & Configuration
184
+ </h2>
185
+
186
+ <div className="overflow-hidden rounded-lg border border-white/10 bg-white/5">
187
+ <div className="bg-white/5 p-4">
188
+ <h3 className="text-xl font-semibold !text-white">Props</h3>
189
+ </div>
190
+ <table className="!my-0 w-full">
191
+ <thead className="bg-white/5">
192
+ <tr className="border-b border-white/10">
193
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
194
+ Prop
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
+ <tr className="border-b border-white/5">
209
+ <td className="px-6 py-4 font-mono text-sm !text-emerald-300">
210
+ width
211
+ </td>
212
+ <td className="px-6 py-4 text-sm !text-white/70">
213
+ number | string
214
+ </td>
215
+ <td className="px-6 py-4 text-sm !text-white/50">24</td>
216
+ <td className="px-6 py-4 text-sm !text-white/70">
217
+ Width of the icon in pixels
218
+ </td>
219
+ </tr>
220
+ <tr className="border-b border-white/5 !bg-black/10">
221
+ <td className="px-6 py-4 font-mono text-sm !text-emerald-300">
222
+ height
223
+ </td>
224
+ <td className="px-6 py-4 text-sm !text-white/70">
225
+ number | string
226
+ </td>
227
+ <td className="px-6 py-4 text-sm !text-white/50">24</td>
228
+ <td className="px-6 py-4 text-sm !text-white/70">
229
+ Height of the icon in pixels
230
+ </td>
231
+ </tr>
232
+ <tr className="border-b border-white/5">
233
+ <td className="px-6 py-4 font-mono text-sm !text-emerald-300">
234
+ stroke
235
+ </td>
236
+ <td className="px-6 py-4 text-sm !text-white/70">
237
+ string
238
+ </td>
239
+ <td className="px-6 py-4 text-sm !text-white/50">
240
+ currentColor
241
+ </td>
242
+ <td className="px-6 py-4 text-sm !text-white/70">
243
+ Stroke color of the icon
244
+ </td>
245
+ </tr>
246
+ <tr className="border-b border-white/5 !bg-black/10">
247
+ <td className="px-6 py-4 font-mono text-sm !text-emerald-300">
248
+ strokeWidth
249
+ </td>
250
+ <td className="px-6 py-4 text-sm !text-white/70">
251
+ string | number
252
+ </td>
253
+ <td className="px-6 py-4 text-sm !text-white/50">
254
+ 1.5
255
+ </td>
256
+ <td className="px-6 py-4 text-sm !text-white/70">
257
+ Width of the stroke
258
+ </td>
259
+ </tr>
260
+ <tr className="border-b border-white/5">
261
+ <td className="px-6 py-4 font-mono text-sm !text-emerald-300">
262
+ className
263
+ </td>
264
+ <td className="px-6 py-4 text-sm !text-white/70">
265
+ string
266
+ </td>
267
+ <td className="px-6 py-4 text-sm !text-white/50">-</td>
268
+ <td className="px-6 py-4 text-sm !text-white/70">
269
+ CSS classes for styling (use for overrides)
270
+ </td>
271
+ </tr>
272
+ <tr className="!bg-black/10">
273
+ <td className="px-6 py-4 font-mono text-sm !text-emerald-300">
274
+ ...svgProps
275
+ </td>
276
+ <td className="px-6 py-4 text-sm !text-white/70">
277
+ SVGProps
278
+ </td>
279
+ <td className="px-6 py-4 text-sm !text-white/50">-</td>
280
+ <td className="px-6 py-4 text-sm !text-white/70">
281
+ All standard SVG element props
282
+ </td>
283
+ </tr>
284
+ </tbody>
285
+ </table>
286
+ </div>
287
+ </div>
288
+
289
+ {/* Size Variations */}
290
+ <div className="!space-y-8">
291
+ <h2 className="text-center text-3xl font-bold !text-white">
292
+ Size Variations
293
+ </h2>
294
+ <div className="rounded-lg border border-white/10 bg-white/5 p-8">
295
+ <div className="!space-y-6">
296
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2">
297
+ <div className="!space-y-4">
298
+ <h3 className="text-lg font-semibold !text-emerald-300">
299
+ Standard Sizes
300
+ </h3>
301
+ <div className="flex items-end gap-6 rounded-lg bg-black/20 p-6">
302
+ <div className="text-center">
303
+ <VolumeHalfIcon className="!mx-auto mb-2 h-3 w-3 text-emerald-400" />
304
+ <span className="text-xs text-white/60">12px</span>
305
+ </div>
306
+ <div className="text-center">
307
+ <VolumeHalfIcon className="!mx-auto mb-2 h-4 w-4 text-emerald-400" />
308
+ <span className="text-xs text-white/60">16px</span>
309
+ </div>
310
+ <div className="text-center">
311
+ <VolumeHalfIcon className="!mx-auto mb-2 h-5 w-5 text-emerald-400" />
312
+ <span className="text-xs text-white/60">20px</span>
313
+ </div>
314
+ <div className="text-center">
315
+ <VolumeHalfIcon className="!mx-auto mb-2 h-6 w-6 text-emerald-400" />
316
+ <span className="text-xs text-white/60">24px</span>
317
+ </div>
318
+ <div className="text-center">
319
+ <VolumeHalfIcon className="!mx-auto mb-2 h-8 w-8 text-emerald-400" />
320
+ <span className="text-xs text-white/60">32px</span>
321
+ </div>
322
+ <div className="text-center">
323
+ <VolumeHalfIcon className="!mx-auto mb-2 h-12 w-12 text-emerald-400" />
324
+ <span className="text-xs text-white/60">48px</span>
325
+ </div>
326
+ </div>
327
+ </div>
328
+
329
+ <div className="!space-y-4">
330
+ <h3 className="text-lg font-semibold !text-emerald-300">
331
+ Code Example
332
+ </h3>
333
+ <div className="rounded-lg bg-black/40 p-4">
334
+ <pre className="overflow-x-auto text-sm !text-cyan-300">
335
+ {`// Small (16px) - compact controls
336
+ <VolumeHalfIcon className="h-4 w-4" />
337
+
338
+ // Medium (24px) - standard interface
339
+ <VolumeHalfIcon className="h-6 w-6" />
340
+
341
+ // Large (32px) - prominent displays
342
+ <VolumeHalfIcon className="h-8 w-8" />
343
+
344
+ // Custom size
345
+ <VolumeHalfIcon width={40} height={40} />`}
346
+ </pre>
347
+ </div>
348
+ </div>
349
+ </div>
350
+ </div>
351
+ </div>
352
+ </div>
353
+
354
+ {/* Color Variations */}
355
+ <div className="!space-y-8">
356
+ <h2 className="text-center text-3xl font-bold !text-white">
357
+ Color Variations
358
+ </h2>
359
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
360
+ <div className="!space-y-4">
361
+ <h3 className="text-lg font-semibold !text-emerald-300">
362
+ Semantic Colors
363
+ </h3>
364
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
365
+ <div className="flex items-center gap-4">
366
+ <VolumeHalfIcon className="h-6 w-6 text-emerald-400" />
367
+ <div>
368
+ <div className="text-sm font-medium text-white">
369
+ Medium Volume
370
+ </div>
371
+ <div className="text-xs text-white/60">
372
+ text-emerald-400
373
+ </div>
374
+ </div>
375
+ </div>
376
+ <div className="flex items-center gap-4">
377
+ <VolumeHalfIcon className="h-6 w-6 text-teal-400" />
378
+ <div>
379
+ <div className="text-sm font-medium text-white">
380
+ Balanced
381
+ </div>
382
+ <div className="text-xs text-white/60">
383
+ text-teal-400
384
+ </div>
385
+ </div>
386
+ </div>
387
+ <div className="flex items-center gap-4">
388
+ <VolumeHalfIcon className="h-6 w-6 text-green-400" />
389
+ <div>
390
+ <div className="text-sm font-medium text-white">
391
+ Active
392
+ </div>
393
+ <div className="text-xs text-white/60">
394
+ text-green-400
395
+ </div>
396
+ </div>
397
+ </div>
398
+ <div className="flex items-center gap-4">
399
+ <VolumeHalfIcon className="h-6 w-6 text-blue-400" />
400
+ <div>
401
+ <div className="text-sm font-medium text-white">
402
+ Accent
403
+ </div>
404
+ <div className="text-xs text-white/60">
405
+ text-blue-400
406
+ </div>
407
+ </div>
408
+ </div>
409
+ </div>
410
+ </div>
411
+
412
+ <div className="!space-y-4">
413
+ <h3 className="text-lg font-semibold !text-emerald-300">
414
+ Custom Colors
415
+ </h3>
416
+ <div className="rounded-lg bg-black/40 p-4">
417
+ <pre className="overflow-x-auto text-sm !text-green-300">
418
+ {`// Using Tailwind classes
419
+ <VolumeHalfIcon className="h-6 w-6 text-emerald-400" />
420
+ <VolumeHalfIcon className="h-6 w-6 text-teal-500" />
421
+
422
+ // Using CSS custom properties
423
+ <VolumeHalfIcon
424
+ className="h-6 w-6"
425
+ style={{ color: 'var(--color-volume)' }}
426
+ />
427
+
428
+ // Direct stroke prop
429
+ <VolumeHalfIcon
430
+ width={24}
431
+ height={24}
432
+ stroke="#10b981"
433
+ />`}
434
+ </pre>
435
+ </div>
436
+ </div>
437
+ </div>
438
+ </div>
439
+
440
+ {/* Usage Examples */}
441
+ <div className="!space-y-8">
442
+ <h2 className="text-center text-3xl font-bold !text-white">
443
+ Usage Examples
444
+ </h2>
445
+
446
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
447
+ {/* Music Player */}
448
+ <div className="!space-y-4">
449
+ <h3 className="text-lg font-semibold !text-emerald-300">
450
+ Music Player
451
+ </h3>
452
+ <div className="!space-y-4">
453
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
454
+ <div className="mb-4 flex items-center gap-3">
455
+ <div className="h-12 w-12 rounded-lg bg-gradient-to-br from-emerald-500/20 to-teal-500/20" />
456
+ <div>
457
+ <div className="text-sm font-medium !text-white">
458
+ Ambient Sounds
459
+ </div>
460
+ <div className="text-xs !text-white/60">
461
+ Nature Collection
462
+ </div>
463
+ </div>
464
+ </div>
465
+ <div className="mb-4 flex items-center justify-center gap-4">
466
+ <button className="rounded-lg p-2 transition-colors hover:bg-white/10">
467
+ <div className="h-6 w-6 rounded-full border border-white/60 bg-white/20" />
468
+ </button>
469
+ <button className="rounded-lg p-3 transition-colors hover:bg-white/10">
470
+ <div className="h-8 w-8 rounded-full border-2 border-white/60 bg-white/20" />
471
+ </button>
472
+ <button className="rounded-lg p-2 transition-colors hover:bg-white/10">
473
+ <div className="h-6 w-6 rounded-full border border-white/60 bg-white/20" />
474
+ </button>
475
+ </div>
476
+ <div className="flex items-center justify-between">
477
+ <div className="text-xs text-white/60">1:23</div>
478
+ <div className="flex items-center gap-2">
479
+ <VolumeHalfIcon className="h-4 w-4 text-emerald-400" />
480
+ <div className="h-1 w-20 rounded-full bg-white/20">
481
+ <div className="h-full w-1/2 rounded-full bg-emerald-400" />
482
+ </div>
483
+ </div>
484
+ <div className="text-xs text-white/60">3:45</div>
485
+ </div>
486
+ </div>
487
+ <div className="rounded-lg bg-black/40 p-4">
488
+ <pre className="overflow-x-auto text-sm !text-green-300">
489
+ {`// Music player with medium volume
490
+ <div className="player-controls">
491
+ <div className="volume-section">
492
+ <button onClick={setMediumVolume}>
493
+ <VolumeHalfIcon className="h-4 w-4 text-emerald-400" />
494
+ </button>
495
+ <VolumeSlider
496
+ value={50}
497
+ onChange={setVolume}
498
+ className="volume-slider"
499
+ />
500
+ </div>
501
+ <div className="playback-info">
502
+ Volume: 50%
503
+ </div>
504
+ </div>`}
505
+ </pre>
506
+ </div>
507
+ </div>
508
+ </div>
509
+
510
+ {/* Video Conference */}
511
+ <div className="!space-y-4">
512
+ <h3 className="text-lg font-semibold !text-emerald-300">
513
+ Video Conference
514
+ </h3>
515
+ <div className="!space-y-4">
516
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
517
+ <div className="mb-4">
518
+ <div className="text-sm font-medium !text-white">
519
+ Weekly Standup
520
+ </div>
521
+ <div className="text-xs !text-white/60">
522
+ 3 participants
523
+ </div>
524
+ </div>
525
+ <div className="mb-4 grid grid-cols-3 gap-2">
526
+ {[...Array(3)].map((_, i) => (
527
+ <div
528
+ key={i}
529
+ className="rounded bg-white/5 p-3 text-center"
530
+ >
531
+ <div className="mx-auto mb-2 h-10 w-10 rounded-full bg-gradient-to-br from-emerald-400/20 to-teal-400/20" />
532
+ <div className="text-xs font-medium text-white">
533
+ User {i + 1}
534
+ </div>
535
+ <div className="mt-1 flex justify-center">
536
+ {i === 1 ? (
537
+ <VolumeHalfIcon className="h-3 w-3 text-emerald-400" />
538
+ ) : (
539
+ <div className="h-3 w-3 rounded-full bg-gray-400/20" />
540
+ )}
541
+ </div>
542
+ </div>
543
+ ))}
544
+ </div>
545
+ <div className="flex justify-center gap-3">
546
+ <button className="rounded-lg border border-emerald-500/30 bg-emerald-500/20 p-2 hover:bg-emerald-500/30">
547
+ <VolumeHalfIcon className="h-5 w-5 text-emerald-400" />
548
+ </button>
549
+ <button className="rounded-lg border border-white/20 bg-white/10 p-2 hover:bg-white/20">
550
+ <div className="h-5 w-5 rounded-full border border-white/60 bg-white/20" />
551
+ </button>
552
+ </div>
553
+ </div>
554
+ <div className="rounded-lg bg-black/40 p-4">
555
+ <pre className="overflow-x-auto text-sm !text-green-300">
556
+ {`// Conference call audio indicator
557
+ <div className="participant-card">
558
+ <div className="participant-info">
559
+ <Avatar src={user.avatar} />
560
+ <span>{user.name}</span>
561
+ </div>
562
+ <div className="audio-indicator">
563
+ {user.speakerVolume > 75 ? (
564
+ <VolumeHighIcon />
565
+ ) : user.speakerVolume > 25 ? (
566
+ <VolumeHalfIcon className="text-emerald-400" />
567
+ ) : user.speakerVolume > 0 ? (
568
+ <VolumeLowIcon />
569
+ ) : (
570
+ <VolumeOffIcon />
571
+ )}
572
+ </div>
573
+ </div>`}
574
+ </pre>
575
+ </div>
576
+ </div>
577
+ </div>
578
+
579
+ {/* Audio Dashboard */}
580
+ <div className="!space-y-4">
581
+ <h3 className="text-lg font-semibold !text-emerald-300">
582
+ Audio Dashboard
583
+ </h3>
584
+ <div className="!space-y-4">
585
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
586
+ <div className="!space-y-4">
587
+ <div>
588
+ <h4 className="mb-3 text-sm font-medium text-white">
589
+ Audio Levels
590
+ </h4>
591
+ <div className="space-y-3">
592
+ <div className="flex items-center justify-between">
593
+ <div className="flex items-center gap-3">
594
+ <VolumeHalfIcon className="h-5 w-5 text-emerald-400" />
595
+ <div>
596
+ <div className="text-sm text-white">
597
+ Master Volume
598
+ </div>
599
+ <div className="text-xs text-white/60">
600
+ 50%
601
+ </div>
602
+ </div>
603
+ </div>
604
+ <div className="h-2 w-24 rounded-full bg-white/20">
605
+ <div className="h-full w-1/2 rounded-full bg-emerald-400" />
606
+ </div>
607
+ </div>
608
+ <div className="flex items-center justify-between">
609
+ <div className="flex items-center gap-3">
610
+ <VolumeHalfIcon className="h-5 w-5 text-teal-400" />
611
+ <div>
612
+ <div className="text-sm text-white">
613
+ Effects
614
+ </div>
615
+ <div className="text-xs text-white/60">
616
+ 40%
617
+ </div>
618
+ </div>
619
+ </div>
620
+ <div className="h-2 w-24 rounded-full bg-white/20">
621
+ <div className="h-full w-2/5 rounded-full bg-teal-400" />
622
+ </div>
623
+ </div>
624
+ <div className="flex items-center justify-between">
625
+ <div className="flex items-center gap-3">
626
+ <VolumeHalfIcon className="h-5 w-5 text-green-400" />
627
+ <div>
628
+ <div className="text-sm text-white">
629
+ Background
630
+ </div>
631
+ <div className="text-xs text-white/60">
632
+ 60%
633
+ </div>
634
+ </div>
635
+ </div>
636
+ <div className="h-2 w-24 rounded-full bg-white/20">
637
+ <div className="h-full w-3/5 rounded-full bg-green-400" />
638
+ </div>
639
+ </div>
640
+ </div>
641
+ </div>
642
+ </div>
643
+ </div>
644
+ <div className="rounded-lg bg-black/40 p-4">
645
+ <pre className="overflow-x-auto text-sm !text-green-300">
646
+ {`// Audio level dashboard
647
+ <div className="audio-dashboard">
648
+ {audioChannels.map(channel => (
649
+ <div key={channel.id} className="channel-control">
650
+ <div className="channel-info">
651
+ <VolumeIcon
652
+ level={channel.volume}
653
+ className="text-emerald-400"
654
+ />
655
+ <div>
656
+ <div>{channel.name}</div>
657
+ <div className="volume-percent">
658
+ {channel.volume}%
659
+ </div>
660
+ </div>
661
+ </div>
662
+ <VolumeSlider
663
+ value={channel.volume}
664
+ onChange={(val) => setChannelVolume(channel.id, val)}
665
+ />
666
+ </div>
667
+ ))}
668
+ </div>`}
669
+ </pre>
670
+ </div>
671
+ </div>
672
+ </div>
673
+
674
+ {/* Podcast Player */}
675
+ <div className="!space-y-4">
676
+ <h3 className="text-lg font-semibold !text-emerald-300">
677
+ Podcast Player
678
+ </h3>
679
+ <div className="!space-y-4">
680
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
681
+ <div className="mb-4">
682
+ <div className="text-sm font-medium !text-white">
683
+ Design Talk
684
+ </div>
685
+ <div className="text-xs !text-white/60">
686
+ Episode 12: Color Theory
687
+ </div>
688
+ </div>
689
+ <div className="mb-4 flex items-center justify-between">
690
+ <div className="flex items-center gap-4">
691
+ <button className="rounded-lg p-2 transition-colors hover:bg-white/10">
692
+ <div className="h-6 w-6 rounded-full border border-white/60 bg-white/20" />
693
+ </button>
694
+ <button className="rounded-lg p-3 transition-colors hover:bg-white/10">
695
+ <div className="h-8 w-8 rounded-full border-2 border-white/60 bg-white/20" />
696
+ </button>
697
+ <button className="rounded-lg p-2 transition-colors hover:bg-white/10">
698
+ <div className="h-6 w-6 rounded-full border border-white/60 bg-white/20" />
699
+ </button>
700
+ </div>
701
+ <div className="flex items-center gap-2">
702
+ <span className="text-xs text-white/60">1.5x</span>
703
+ </div>
704
+ </div>
705
+ <div className="flex items-center justify-between">
706
+ <div className="text-xs text-white/60">15:42</div>
707
+ <div className="flex items-center gap-2">
708
+ <VolumeHalfIcon className="h-4 w-4 text-emerald-400" />
709
+ <div className="h-1 w-16 rounded-full bg-white/20">
710
+ <div className="h-full w-1/2 rounded-full bg-emerald-400" />
711
+ </div>
712
+ </div>
713
+ <div className="text-xs text-white/60">42:18</div>
714
+ </div>
715
+ </div>
716
+ <div className="rounded-lg bg-black/40 p-4">
717
+ <pre className="overflow-x-auto text-sm !text-green-300">
718
+ {`// Podcast player with balanced audio
719
+ <div className="podcast-player">
720
+ <div className="episode-info">
721
+ <h3>{episode.title}</h3>
722
+ <p>{episode.description}</p>
723
+ </div>
724
+ <div className="player-controls">
725
+ <PlaybackControls />
726
+ <div className="audio-controls">
727
+ <VolumeHalfIcon className="h-4 w-4 text-emerald-400" />
728
+ <VolumeSlider
729
+ value={volume}
730
+ max={100}
731
+ className="volume-control"
732
+ />
733
+ <PlaybackSpeed speed={playbackSpeed} />
734
+ </div>
735
+ </div>
736
+ </div>`}
737
+ </pre>
738
+ </div>
739
+ </div>
740
+ </div>
741
+ </div>
742
+ </div>
743
+
744
+ {/* Accessibility */}
745
+ <div className="!space-y-8">
746
+ <h2 className="text-center text-3xl font-bold !text-white">
747
+ Accessibility Features
748
+ </h2>
749
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2">
750
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
751
+ <h3 className="text-lg font-semibold !text-green-300">
752
+ ✅ Built-in Features
753
+ </h3>
754
+ <ul className="!space-y-2 text-sm !text-white/70">
755
+ <li className="!text-white/70">
756
+ Uses Radix UI AccessibleIcon wrapper
757
+ </li>
758
+ <li className="!text-white/70">
759
+ Provides screen reader label "Volume half icon"
760
+ </li>
761
+ <li className="!text-white/70">
762
+ Supports keyboard navigation when interactive
763
+ </li>
764
+ <li className="!text-white/70">
765
+ Maintains proper color contrast ratios
766
+ </li>
767
+ <li className="!text-white/70">
768
+ Scales with user's font size preferences
769
+ </li>
770
+ </ul>
771
+ </div>
772
+
773
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
774
+ <h3 className="text-lg font-semibold !text-emerald-300">
775
+ 💡 Best Practices
776
+ </h3>
777
+ <ul className="!space-y-2 text-sm text-white/70">
778
+ <li className="!text-white/70">
779
+ Always provide descriptive aria-labels for volume
780
+ controls
781
+ </li>
782
+ <li className="!text-white/70">
783
+ Use consistent placement in audio control groups
784
+ </li>
785
+ <li className="!text-white/70">
786
+ Ensure sufficient touch target size (44px minimum)
787
+ </li>
788
+ <li className="!text-white/70">
789
+ Provide visible focus states for keyboard users
790
+ </li>
791
+ <li className="!text-white/70">
792
+ Consider keyboard shortcuts for volume adjustment
793
+ </li>
794
+ </ul>
795
+ </div>
796
+ </div>
797
+
798
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
799
+ <h3 className="mb-4 text-lg font-semibold !text-teal-300">
800
+ Proper ARIA Implementation
801
+ </h3>
802
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
803
+ <div className="rounded-lg bg-black/40 p-4">
804
+ <pre className="overflow-x-auto text-sm !text-cyan-300">
805
+ {`// Volume control with proper ARIA
806
+ <div className="volume-control">
807
+ <button
808
+ aria-label="Set medium volume"
809
+ onClick={setMediumVolume}
810
+ >
811
+ <VolumeHalfIcon className="h-6 w-6 text-emerald-400" />
812
+ </button>
813
+ <div
814
+ role="slider"
815
+ aria-label="Volume"
816
+ aria-valuemin="0"
817
+ aria-valuemax="100"
818
+ aria-valuenow={50}
819
+ aria-valuetext="50 percent"
820
+ />
821
+ </div>
822
+
823
+ // Audio level indicator with description
824
+ <div className="audio-level">
825
+ <VolumeHalfIcon
826
+ className="h-5 w-5"
827
+ aria-describedby="volume-status"
828
+ />
829
+ <div id="volume-status" className="sr-only">
830
+ Volume at medium level, 50 percent
831
+ </div>
832
+ </div>
833
+
834
+ // Volume preset button
835
+ <button
836
+ aria-label="Set volume to 50%"
837
+ aria-pressed={volume === 50}
838
+ onClick={() => setVolume(50)}
839
+ >
840
+ <VolumeHalfIcon className="h-4 w-4" />
841
+ <span>Medium</span>
842
+ </button>`}
843
+ </pre>
844
+ </div>
845
+ <div className="!space-y-4">
846
+ <p className="text-sm !text-white/70">
847
+ When using VolumeHalfIcon for volume controls, always
848
+ provide clear context about the current volume level and
849
+ what the control will do.
850
+ </p>
851
+ <div className="rounded-lg border border-emerald-500/20 bg-emerald-500/10 p-4">
852
+ <div className="flex items-center gap-2 text-sm text-emerald-200">
853
+ <VolumeHalfIcon className="h-4 w-4" />
854
+ <span>
855
+ Screen readers need context about volume levels and
856
+ changes
857
+ </span>
858
+ </div>
859
+ </div>
860
+ </div>
861
+ </div>
862
+ </div>
863
+ </div>
864
+
865
+ {/* Related Icons */}
866
+ <div className="!space-y-8">
867
+ <h2 className="text-center text-3xl font-bold !text-white">
868
+ Related Icons
869
+ </h2>
870
+ <div className="grid grid-cols-2 gap-6 md:grid-cols-4">
871
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
872
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-blue-500/20">
873
+ <span className="!text-2xl !text-white">🔊</span>
874
+ </div>
875
+ <div>
876
+ <div className="font-medium text-white">
877
+ VolumeHighIcon
878
+ </div>
879
+ <div className="text-xs text-white/60">High volume</div>
880
+ </div>
881
+ </div>
882
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
883
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-yellow-500/20">
884
+ <span className="!text-2xl !text-white">🔉</span>
885
+ </div>
886
+ <div>
887
+ <div className="font-medium text-white">
888
+ VolumeLowIcon
889
+ </div>
890
+ <div className="text-xs text-white/60">Low volume</div>
891
+ </div>
892
+ </div>
893
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
894
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-gray-500/20">
895
+ <span className="!text-2xl !text-white">🔇</span>
896
+ </div>
897
+ <div>
898
+ <div className="font-medium text-white">
899
+ VolumeOffIcon
900
+ </div>
901
+ <div className="text-xs text-white/60">Muted</div>
902
+ </div>
903
+ </div>
904
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
905
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-purple-500/20">
906
+ <span className="!text-2xl !text-white">🎚️</span>
907
+ </div>
908
+ <div>
909
+ <div className="font-medium text-white">
910
+ EqualizerIcon
911
+ </div>
912
+ <div className="text-xs text-white/60">
913
+ Audio settings
914
+ </div>
915
+ </div>
916
+ </div>
917
+ </div>
918
+ </div>
919
+ </div>
920
+
921
+ {/* Footer */}
922
+ <div className="border-t border-white/10 bg-black/20 backdrop-blur-xl">
923
+ <div className="!mx-auto max-w-7xl px-6 py-8">
924
+ <div className="!space-y-4 text-center">
925
+ <p className="!text-white/60">
926
+ VolumeHalfIcon is part of the Aural UI icon library, built
927
+ with accessibility and audio control best practices in mind.
928
+ </p>
929
+ <p className="text-sm !text-white/40">
930
+ All icons use Radix UI's AccessibleIcon for screen reader
931
+ compatibility and follow WCAG guidelines for media controls.
932
+ </p>
933
+ </div>
934
+ </div>
935
+ </div>
936
+ </div>
937
+ </>
938
+ ),
939
+ },
940
+ },
941
+ tags: ["autodocs"],
942
+ argTypes: {
943
+ width: {
944
+ control: { type: "range", min: 8, max: 96, step: 2 },
945
+ description: "Width of the icon in pixels",
946
+ },
947
+ height: {
948
+ control: { type: "range", min: 8, max: 96, step: 2 },
949
+ description: "Height of the icon in pixels",
950
+ },
951
+ stroke: {
952
+ control: "color",
953
+ description: "Stroke color of the icon",
954
+ },
955
+ strokeWidth: {
956
+ control: { type: "range", min: 0.5, max: 4, step: 0.5 },
957
+ description: "Width of the stroke",
958
+ },
959
+ className: {
960
+ control: "text",
961
+ description: "CSS classes for styling (use for overrides)",
962
+ },
963
+ onClick: {
964
+ action: "clicked",
965
+ description: "Click handler for interactive use",
966
+ },
967
+ },
968
+ }
969
+
970
+ export default meta
971
+ type Story = StoryObj<typeof VolumeHalfIcon>
972
+
973
+ // Story parameters for consistent dark theme
974
+ const storyParameters = {
975
+ backgrounds: {
976
+ default: "dark",
977
+ values: [
978
+ { name: "dark", value: "#0a0a0a" },
979
+ { name: "darker", value: "#000000" },
980
+ ],
981
+ },
982
+ }
983
+
984
+ export const Default: Story = {
985
+ args: {
986
+ className: "h-8 w-8 text-emerald-400",
987
+ },
988
+ parameters: storyParameters,
989
+ render: (args) => (
990
+ <div className="flex h-32 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
991
+ <VolumeHalfIcon {...args} />
992
+ </div>
993
+ ),
994
+ }
995
+
996
+ export const SizeVariations: Story = {
997
+ parameters: {
998
+ ...storyParameters,
999
+ docs: {
1000
+ description: {
1001
+ story:
1002
+ "VolumeHalfIcon in different sizes, from small interface elements to large audio displays.",
1003
+ },
1004
+ },
1005
+ },
1006
+ render: () => (
1007
+ <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">
1008
+ <div className="text-center">
1009
+ <VolumeHalfIcon className="!mx-auto mb-2 h-3 w-3 text-emerald-400" />
1010
+ <span className="text-xs text-white/60">12px</span>
1011
+ </div>
1012
+ <div className="text-center">
1013
+ <VolumeHalfIcon className="!mx-auto mb-2 h-4 w-4 text-emerald-400" />
1014
+ <span className="text-xs text-white/60">16px</span>
1015
+ </div>
1016
+ <div className="text-center">
1017
+ <VolumeHalfIcon className="!mx-auto mb-2 h-5 w-5 text-emerald-400" />
1018
+ <span className="text-xs text-white/60">20px</span>
1019
+ </div>
1020
+ <div className="text-center">
1021
+ <VolumeHalfIcon className="!mx-auto mb-2 h-6 w-6 text-emerald-400" />
1022
+ <span className="text-xs text-white/60">24px</span>
1023
+ </div>
1024
+ <div className="text-center">
1025
+ <VolumeHalfIcon className="!mx-auto mb-2 h-8 w-8 text-emerald-400" />
1026
+ <span className="text-xs text-white/60">32px</span>
1027
+ </div>
1028
+ <div className="text-center">
1029
+ <VolumeHalfIcon className="!mx-auto mb-2 h-12 w-12 text-emerald-400" />
1030
+ <span className="text-xs text-white/60">48px</span>
1031
+ </div>
1032
+ </div>
1033
+ ),
1034
+ }
1035
+
1036
+ export const ColorVariations: Story = {
1037
+ parameters: {
1038
+ ...storyParameters,
1039
+ docs: {
1040
+ description: {
1041
+ story:
1042
+ "VolumeHalfIcon in different semantic colors for various volume levels.",
1043
+ },
1044
+ },
1045
+ },
1046
+ render: () => (
1047
+ <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">
1048
+ <div className="text-center">
1049
+ <div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-emerald-500/30 bg-emerald-500/20">
1050
+ <VolumeHalfIcon className="h-8 w-8 text-emerald-400" />
1051
+ </div>
1052
+ <div className="text-sm font-medium text-white">Medium</div>
1053
+ <div className="text-xs text-emerald-400">text-emerald-400</div>
1054
+ </div>
1055
+ <div className="text-center">
1056
+ <div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-teal-500/30 bg-teal-500/20">
1057
+ <VolumeHalfIcon className="h-8 w-8 text-teal-400" />
1058
+ </div>
1059
+ <div className="text-sm font-medium text-white">Balanced</div>
1060
+ <div className="text-xs text-teal-400">text-teal-400</div>
1061
+ </div>
1062
+ <div className="text-center">
1063
+ <div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-green-500/30 bg-green-500/20">
1064
+ <VolumeHalfIcon className="h-8 w-8 text-green-400" />
1065
+ </div>
1066
+ <div className="text-sm font-medium text-white">Active</div>
1067
+ <div className="text-xs text-green-400">text-green-400</div>
1068
+ </div>
1069
+ <div className="text-center">
1070
+ <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">
1071
+ <VolumeHalfIcon className="h-8 w-8 text-blue-400" />
1072
+ </div>
1073
+ <div className="text-sm font-medium text-white">Accent</div>
1074
+ <div className="text-xs text-blue-400">text-blue-400</div>
1075
+ </div>
1076
+ </div>
1077
+ ),
1078
+ }
1079
+
1080
+ export const UsageExamples: Story = {
1081
+ parameters: {
1082
+ ...storyParameters,
1083
+ docs: {
1084
+ description: {
1085
+ story:
1086
+ "Real-world usage examples showing VolumeHalfIcon in different audio control contexts.",
1087
+ },
1088
+ },
1089
+ },
1090
+ render: () => (
1091
+ <div className="min-h-dvh !space-y-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
1092
+ {/* Music Player */}
1093
+ <div className="!space-y-2">
1094
+ <h3 className="text-sm font-medium text-white">Music Player</h3>
1095
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
1096
+ <div className="flex items-center justify-between">
1097
+ <div className="text-xs text-white/60">1:23</div>
1098
+ <div className="flex items-center gap-2">
1099
+ <VolumeHalfIcon className="h-4 w-4 text-emerald-400" />
1100
+ <div className="h-1 w-20 rounded-full bg-white/20">
1101
+ <div className="h-full w-1/2 rounded-full bg-emerald-400" />
1102
+ </div>
1103
+ </div>
1104
+ <div className="text-xs text-white/60">3:45</div>
1105
+ </div>
1106
+ </div>
1107
+ </div>
1108
+
1109
+ {/* Audio Dashboard */}
1110
+ <div className="!space-y-2">
1111
+ <h3 className="text-sm font-medium text-white">Audio Dashboard</h3>
1112
+ <div className="rounded-lg border border-white/10 bg-white/5 p-4">
1113
+ <div className="flex items-center justify-between">
1114
+ <div className="flex items-center gap-3">
1115
+ <VolumeHalfIcon className="h-5 w-5 text-emerald-400" />
1116
+ <div>
1117
+ <div className="text-sm text-white">Master Volume</div>
1118
+ <div className="text-xs text-white/60">50%</div>
1119
+ </div>
1120
+ </div>
1121
+ <div className="h-2 w-24 rounded-full bg-white/20">
1122
+ <div className="h-full w-1/2 rounded-full bg-emerald-400" />
1123
+ </div>
1124
+ </div>
1125
+ </div>
1126
+ </div>
1127
+ </div>
1128
+ ),
1129
+ }
1130
+
1131
+ export const Playground: Story = {
1132
+ parameters: {
1133
+ ...storyParameters,
1134
+ docs: {
1135
+ description: {
1136
+ story:
1137
+ "Interactive playground to experiment with different VolumeHalfIcon configurations.",
1138
+ },
1139
+ },
1140
+ },
1141
+ args: {
1142
+ width: 24,
1143
+ height: 24,
1144
+ className: "text-emerald-400",
1145
+ },
1146
+ render: (args) => (
1147
+ <div className="flex h-64 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
1148
+ <div className="rounded-lg border border-white/10 bg-white/5 p-8">
1149
+ <VolumeHalfIcon {...args} />
1150
+ </div>
1151
+ </div>
1152
+ ),
1153
+ }