aural-ui 2.0.0 → 2.0.2

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 (74) hide show
  1. package/dist/components/badge/Badge.stories.tsx +7 -0
  2. package/dist/components/banner/Banner.stories.tsx +7 -0
  3. package/dist/components/button/Button.stories.tsx +7 -0
  4. package/dist/components/char-count/CharCount.stories.tsx +7 -0
  5. package/dist/components/checkbox/Checkbox.stories.tsx +7 -0
  6. package/dist/components/chip/Chip.stories.tsx +10 -0
  7. package/dist/components/collapsible/Collapsible.stories.tsx +7 -0
  8. package/dist/components/dropdown/index.tsx +18 -7
  9. package/dist/components/form/Form.stories.tsx +7 -0
  10. package/dist/components/helper-text/HelperText.stories.tsx +7 -0
  11. package/dist/components/icon-button/IconButton.stories.tsx +4 -0
  12. package/dist/components/if-else/if-else.stories.tsx +7 -0
  13. package/dist/components/input/Input.stories.tsx +7 -0
  14. package/dist/components/label/Label.stories.tsx +7 -0
  15. package/dist/components/overlay/index.tsx +1 -1
  16. package/dist/components/pagination/Pagination.stories.tsx +7 -0
  17. package/dist/components/radio/Radio.stories.tsx +7 -0
  18. package/dist/components/scroll-area/index.tsx +18 -5
  19. package/dist/components/select/Select.stories.tsx +7 -0
  20. package/dist/components/sheet/index.tsx +5 -2
  21. package/dist/components/stepper/Stepper.stories.tsx +7 -0
  22. package/dist/components/switch/Switch.stories.tsx +7 -0
  23. package/dist/components/switch-case/SwitchCase.stories.tsx +7 -0
  24. package/dist/components/tag/Tag.stories.tsx +7 -0
  25. package/dist/components/textarea/TextArea.stories.tsx +7 -0
  26. package/dist/components/textarea/index.tsx +2 -0
  27. package/dist/components/toast/Toast.stories.tsx +7 -0
  28. package/dist/components/typography/Typography.stories.tsx +7 -0
  29. package/dist/icons/ai-avatar-icon/AiAvatarIcon.stories.tsx +1101 -0
  30. package/dist/icons/ai-avatar-icon/index.tsx +36 -0
  31. package/dist/icons/ai-avatar-icon/meta.ts +8 -0
  32. package/dist/icons/all-icons.tsx +155 -79
  33. package/dist/icons/arrow-corner-up-left-icon/ArrowCornerUpLeftIcon.stories.tsx +1013 -0
  34. package/dist/icons/arrow-corner-up-left-icon/index.tsx +24 -0
  35. package/dist/icons/arrow-corner-up-left-icon/meta.ts +8 -0
  36. package/dist/icons/arrow-corner-up-right-icon/ArrowCornerUpRightIcon.stories.tsx +1056 -0
  37. package/dist/icons/arrow-corner-up-right-icon/index.tsx +24 -0
  38. package/dist/icons/arrow-corner-up-right-icon/meta.ts +8 -0
  39. package/dist/icons/capital-a-letter-icon/CapitalALetterIcon.stories.tsx +992 -0
  40. package/dist/icons/capital-a-letter-icon/index.tsx +32 -0
  41. package/dist/icons/capital-a-letter-icon/meta.ts +8 -0
  42. package/dist/icons/head-icon/HeadIcon.stories.tsx +981 -0
  43. package/dist/icons/head-icon/index.tsx +26 -0
  44. package/dist/icons/head-icon/meta.ts +8 -0
  45. package/dist/icons/index.ts +40 -25
  46. package/dist/icons/layout-column-icon/LayoutColumnIcon.stories.tsx +1027 -0
  47. package/dist/icons/layout-column-icon/index.tsx +23 -0
  48. package/dist/icons/layout-column-icon/meta.ts +8 -0
  49. package/dist/icons/layout-left-icon/LayoutLeftIcon.stories.tsx +1007 -0
  50. package/dist/icons/layout-left-icon/index.tsx +26 -0
  51. package/dist/icons/layout-left-icon/meta.ts +8 -0
  52. package/dist/icons/layout-right-icon/LayoutRightIcon.stories.tsx +1001 -0
  53. package/dist/icons/layout-right-icon/index.tsx +26 -0
  54. package/dist/icons/layout-right-icon/meta.ts +8 -0
  55. package/dist/icons/musical-note-icon/MusicalNoteIcon.stories.tsx +1032 -0
  56. package/dist/icons/musical-note-icon/index.tsx +25 -0
  57. package/dist/icons/musical-note-icon/meta.ts +8 -0
  58. package/dist/icons/paint-roll-icon/PaintRollIcon.stories.tsx +1010 -0
  59. package/dist/icons/paint-roll-icon/index.tsx +24 -0
  60. package/dist/icons/paint-roll-icon/meta.ts +8 -0
  61. package/dist/icons/setting-icon/SettingIcon.stories.tsx +1024 -0
  62. package/dist/icons/setting-icon/index.tsx +30 -0
  63. package/dist/icons/setting-icon/meta.ts +8 -0
  64. package/dist/icons/sparkles-soft-icon/SparklesSoftIcon.stories.tsx +1018 -0
  65. package/dist/icons/sparkles-soft-icon/index.tsx +29 -0
  66. package/dist/icons/sparkles-soft-icon/meta.ts +8 -0
  67. package/dist/icons/text-color-icon/TextColorIcon.stories.tsx +1006 -0
  68. package/dist/icons/text-color-icon/index.tsx +35 -0
  69. package/dist/icons/text-color-icon/meta.ts +8 -0
  70. package/dist/icons/text-indicator-icon/TextIndicatorIcon.stories.tsx +1039 -0
  71. package/dist/icons/text-indicator-icon/index.tsx +24 -0
  72. package/dist/icons/text-indicator-icon/meta.ts +8 -0
  73. package/dist/index.js +124 -99
  74. package/package.json +1 -1
@@ -0,0 +1,1032 @@
1
+ import React from "react"
2
+ import type { Meta, StoryObj } from "@storybook/react"
3
+
4
+ import { MusicalNoteIcon } from "."
5
+
6
+ const meta: Meta<typeof MusicalNoteIcon> = {
7
+ title: "Icons/MusicalNoteIcon",
8
+ component: MusicalNoteIcon,
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-purple-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-purple-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-purple-500/30 bg-gradient-to-br from-purple-500/20 to-pink-500/20">
90
+ <MusicalNoteIcon className="h-12 w-12 text-purple-400" />
91
+ </div>
92
+ <h1 className="!text-fm-primary text-5xl font-bold">
93
+ MusicalNoteIcon
94
+ </h1>
95
+ <p className="!mx-auto max-w-3xl text-xl leading-relaxed !text-white/70">
96
+ A beautiful musical note icon for audio interfaces, music
97
+ players, and sound-related elements. Built with
98
+ accessibility in mind using Radix UI's AccessibleIcon
99
+ wrapper.
100
+ </p>
101
+
102
+ {/* Stats */}
103
+ <div className="flex items-center justify-center gap-8 pt-8">
104
+ <div className="text-center">
105
+ <div className="text-3xl font-bold text-purple-300">
106
+ Accessible
107
+ </div>
108
+ <div className="text-sm text-white/60">
109
+ Screen reader friendly
110
+ </div>
111
+ </div>
112
+ <div className="h-8 w-px bg-white/20" />
113
+ <div className="text-center">
114
+ <div className="text-3xl font-bold text-pink-300">
115
+ Scalable
116
+ </div>
117
+ <div className="text-sm text-white/60">
118
+ Any size needed
119
+ </div>
120
+ </div>
121
+ <div className="h-8 w-px bg-white/20" />
122
+ <div className="text-center">
123
+ <div className="text-3xl font-bold text-blue-300">
124
+ Flexible
125
+ </div>
126
+ <div className="text-sm text-white/60">
127
+ Customizable styling
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+ </div>
133
+ </div>
134
+
135
+ {/* Content */}
136
+ <div className="!mx-auto max-w-7xl !space-y-16 px-6 py-12">
137
+ {/* Quick Usage */}
138
+ <div className="!space-y-8">
139
+ <h2 className="text-center text-3xl font-bold !text-white">
140
+ Quick Start
141
+ </h2>
142
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
143
+ <div className="!space-y-4">
144
+ <h3 className="text-xl font-semibold !text-purple-300">
145
+ Basic Usage
146
+ </h3>
147
+ <div className="rounded-lg bg-black/40 p-4">
148
+ <pre className="overflow-x-auto text-sm !text-green-300">
149
+ {`import { MusicalNoteIcon } from "@icons/musical-note-icon"
150
+
151
+ function MyComponent() {
152
+ return (
153
+ <div className="flex items-center gap-2">
154
+ <MusicalNoteIcon className="h-5 w-5 text-purple-500" />
155
+ <span>Now Playing</span>
156
+ </div>
157
+ )
158
+ }`}
159
+ </pre>
160
+ </div>
161
+ </div>
162
+
163
+ <div className="!space-y-4">
164
+ <h3 className="text-xl font-semibold !text-purple-300">
165
+ Live Preview
166
+ </h3>
167
+ <div className="flex h-32 items-center justify-center rounded-lg border border-white/10 bg-white/5">
168
+ <div className="flex items-center gap-3 rounded-lg border border-purple-500/20 bg-purple-500/10 px-4 py-2">
169
+ <MusicalNoteIcon className="h-5 w-5 text-purple-400" />
170
+ <span className="text-white">Now Playing</span>
171
+ </div>
172
+ </div>
173
+ </div>
174
+ </div>
175
+ </div>
176
+
177
+ {/* Props Documentation */}
178
+ <div className="!space-y-8">
179
+ <h2 className="text-center text-3xl font-bold !text-white">
180
+ Props & Configuration
181
+ </h2>
182
+
183
+ <div className="overflow-hidden rounded-lg border border-white/10 bg-white/5">
184
+ <div className="bg-white/5 p-4">
185
+ <h3 className="text-xl font-semibold !text-white">Props</h3>
186
+ </div>
187
+ <table className="!my-0 w-full">
188
+ <thead className="bg-white/5">
189
+ <tr className="border-b border-white/10">
190
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
191
+ Prop
192
+ </th>
193
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
194
+ Type
195
+ </th>
196
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
197
+ Default
198
+ </th>
199
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
200
+ Description
201
+ </th>
202
+ </tr>
203
+ </thead>
204
+ <tbody>
205
+ <tr className="border-b border-white/5">
206
+ <td className="px-6 py-4 font-mono text-sm !text-purple-300">
207
+ width
208
+ </td>
209
+ <td className="px-6 py-4 text-sm !text-white/70">
210
+ number | string
211
+ </td>
212
+ <td className="px-6 py-4 text-sm !text-white/50">13</td>
213
+ <td className="px-6 py-4 text-sm !text-white/70">
214
+ Width of the icon in pixels
215
+ </td>
216
+ </tr>
217
+ <tr className="border-b border-white/5 !bg-black/10">
218
+ <td className="px-6 py-4 font-mono text-sm !text-purple-300">
219
+ height
220
+ </td>
221
+ <td className="px-6 py-4 text-sm !text-white/70">
222
+ number | string
223
+ </td>
224
+ <td className="px-6 py-4 text-sm !text-white/50">12</td>
225
+ <td className="px-6 py-4 text-sm !text-white/70">
226
+ Height of the icon in pixels
227
+ </td>
228
+ </tr>
229
+ <tr className="border-b border-white/5">
230
+ <td className="px-6 py-4 font-mono text-sm !text-purple-300">
231
+ fill
232
+ </td>
233
+ <td className="px-6 py-4 text-sm !text-white/70">
234
+ string
235
+ </td>
236
+ <td className="px-6 py-4 text-sm !text-white/50">
237
+ none
238
+ </td>
239
+ <td className="px-6 py-4 text-sm !text-white/70">
240
+ Fill color of the icon (uses stroke by default)
241
+ </td>
242
+ </tr>
243
+ <tr className="border-b border-white/5 !bg-black/10">
244
+ <td className="px-6 py-4 font-mono text-sm !text-purple-300">
245
+ stroke
246
+ </td>
247
+ <td className="px-6 py-4 text-sm !text-white/70">
248
+ string
249
+ </td>
250
+ <td className="px-6 py-4 text-sm !text-white/50">
251
+ currentColor
252
+ </td>
253
+ <td className="px-6 py-4 text-sm !text-white/70">
254
+ Stroke color of the icon
255
+ </td>
256
+ </tr>
257
+ <tr className="border-b border-white/5">
258
+ <td className="px-6 py-4 font-mono text-sm !text-purple-300">
259
+ strokeWidth
260
+ </td>
261
+ <td className="px-6 py-4 text-sm !text-white/70">
262
+ number | string
263
+ </td>
264
+ <td className="px-6 py-4 text-sm !text-white/50">
265
+ 1.125
266
+ </td>
267
+ <td className="px-6 py-4 text-sm !text-white/70">
268
+ Width of the stroke
269
+ </td>
270
+ </tr>
271
+ <tr className="border-b border-white/5 !bg-black/10">
272
+ <td className="px-6 py-4 font-mono text-sm !text-purple-300">
273
+ className
274
+ </td>
275
+ <td className="px-6 py-4 text-sm !text-white/70">
276
+ string
277
+ </td>
278
+ <td className="px-6 py-4 text-sm !text-white/50">-</td>
279
+ <td className="px-6 py-4 text-sm !text-white/70">
280
+ CSS classes for styling
281
+ </td>
282
+ </tr>
283
+ <tr className="!bg-black/10">
284
+ <td className="px-6 py-4 font-mono text-sm !text-purple-300">
285
+ ...svgProps
286
+ </td>
287
+ <td className="px-6 py-4 text-sm !text-white/70">
288
+ SVGProps
289
+ </td>
290
+ <td className="px-6 py-4 text-sm !text-white/50">-</td>
291
+ <td className="px-6 py-4 text-sm !text-white/70">
292
+ All standard SVG element props
293
+ </td>
294
+ </tr>
295
+ </tbody>
296
+ </table>
297
+ </div>
298
+ </div>
299
+
300
+ {/* Size Variations */}
301
+ <div className="!space-y-8">
302
+ <h2 className="text-center text-3xl font-bold !text-white">
303
+ Size Variations
304
+ </h2>
305
+ <div className="rounded-lg border border-white/10 bg-white/5 p-8">
306
+ <div className="!space-y-6">
307
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2">
308
+ <div className="!space-y-4">
309
+ <h3 className="text-lg font-semibold !text-purple-300">
310
+ Standard Sizes
311
+ </h3>
312
+ <div className="flex items-end gap-6 rounded-lg bg-black/20 p-6">
313
+ <div className="text-center">
314
+ <MusicalNoteIcon className="!mx-auto mb-2 h-3 w-3 text-purple-400" />
315
+ <span className="text-xs text-white/60">12px</span>
316
+ </div>
317
+ <div className="text-center">
318
+ <MusicalNoteIcon className="!mx-auto mb-2 h-4 w-4 text-purple-400" />
319
+ <span className="text-xs text-white/60">16px</span>
320
+ </div>
321
+ <div className="text-center">
322
+ <MusicalNoteIcon className="!mx-auto mb-2 h-5 w-5 text-purple-400" />
323
+ <span className="text-xs text-white/60">20px</span>
324
+ </div>
325
+ <div className="text-center">
326
+ <MusicalNoteIcon className="!mx-auto mb-2 h-6 w-6 text-purple-400" />
327
+ <span className="text-xs text-white/60">24px</span>
328
+ </div>
329
+ <div className="text-center">
330
+ <MusicalNoteIcon className="!mx-auto mb-2 h-8 w-8 text-purple-400" />
331
+ <span className="text-xs text-white/60">32px</span>
332
+ </div>
333
+ <div className="text-center">
334
+ <MusicalNoteIcon className="!mx-auto mb-2 h-12 w-12 text-purple-400" />
335
+ <span className="text-xs text-white/60">48px</span>
336
+ </div>
337
+ </div>
338
+ </div>
339
+
340
+ <div className="!space-y-4">
341
+ <h3 className="text-lg font-semibold !text-purple-300">
342
+ Code Example
343
+ </h3>
344
+ <div className="rounded-lg bg-black/40 p-4">
345
+ <pre className="overflow-x-auto text-sm !text-blue-300">
346
+ {`// Small (16px)
347
+ <MusicalNoteIcon className="h-4 w-4" />
348
+
349
+ // Medium (24px)
350
+ <MusicalNoteIcon className="h-6 w-6" />
351
+
352
+ // Large (32px)
353
+ <MusicalNoteIcon className="h-8 w-8" />
354
+
355
+ // Custom size
356
+ <MusicalNoteIcon width={40} height={38} />`}
357
+ </pre>
358
+ </div>
359
+ </div>
360
+ </div>
361
+ </div>
362
+ </div>
363
+ </div>
364
+
365
+ {/* Color Variations */}
366
+ <div className="!space-y-8">
367
+ <h2 className="text-center text-3xl font-bold !text-white">
368
+ Color Variations
369
+ </h2>
370
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
371
+ <div className="!space-y-4">
372
+ <h3 className="text-lg font-semibold !text-purple-300">
373
+ Musical Themes
374
+ </h3>
375
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
376
+ <div className="flex items-center gap-4">
377
+ <MusicalNoteIcon className="h-6 w-6 text-purple-400" />
378
+ <div>
379
+ <div className="text-sm font-medium text-white">
380
+ Classic
381
+ </div>
382
+ <div className="text-xs text-white/60">
383
+ text-purple-400
384
+ </div>
385
+ </div>
386
+ </div>
387
+ <div className="flex items-center gap-4">
388
+ <MusicalNoteIcon className="h-6 w-6 text-pink-400" />
389
+ <div>
390
+ <div className="text-sm font-medium text-white">
391
+ Pop
392
+ </div>
393
+ <div className="text-xs text-white/60">
394
+ text-pink-400
395
+ </div>
396
+ </div>
397
+ </div>
398
+ <div className="flex items-center gap-4">
399
+ <MusicalNoteIcon className="h-6 w-6 text-blue-400" />
400
+ <div>
401
+ <div className="text-sm font-medium text-white">
402
+ Jazz
403
+ </div>
404
+ <div className="text-xs text-white/60">
405
+ text-blue-400
406
+ </div>
407
+ </div>
408
+ </div>
409
+ <div className="flex items-center gap-4">
410
+ <MusicalNoteIcon className="h-6 w-6 text-green-400" />
411
+ <div>
412
+ <div className="text-sm font-medium text-white">
413
+ Electronic
414
+ </div>
415
+ <div className="text-xs text-white/60">
416
+ text-green-400
417
+ </div>
418
+ </div>
419
+ </div>
420
+ <div className="flex items-center gap-4">
421
+ <MusicalNoteIcon className="h-6 w-6 text-orange-400" />
422
+ <div>
423
+ <div className="text-sm font-medium text-white">
424
+ Rock
425
+ </div>
426
+ <div className="text-xs text-white/60">
427
+ text-orange-400
428
+ </div>
429
+ </div>
430
+ </div>
431
+ </div>
432
+ </div>
433
+
434
+ <div className="!space-y-4">
435
+ <h3 className="text-lg font-semibold !text-purple-300">
436
+ Custom Colors
437
+ </h3>
438
+ <div className="rounded-lg bg-black/40 p-4">
439
+ <pre className="overflow-x-auto text-sm !text-green-300">
440
+ {`// Using Tailwind classes
441
+ <MusicalNoteIcon className="h-6 w-6 text-purple-400" />
442
+ <MusicalNoteIcon className="h-6 w-6 text-pink-500" />
443
+
444
+ // Using CSS custom properties
445
+ <MusicalNoteIcon
446
+ className="h-6 w-6"
447
+ style={{ color: 'var(--color-primary)' }}
448
+ />
449
+
450
+ // Direct stroke prop
451
+ <MusicalNoteIcon
452
+ width={24}
453
+ height={24}
454
+ stroke="#a855f7"
455
+ />`}
456
+ </pre>
457
+ </div>
458
+ </div>
459
+ </div>
460
+ </div>
461
+
462
+ {/* Usage Examples */}
463
+ <div className="!space-y-8">
464
+ <h2 className="text-center text-3xl font-bold !text-white">
465
+ Usage Examples
466
+ </h2>
467
+
468
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
469
+ {/* Music Player */}
470
+ <div className="!space-y-4">
471
+ <h3 className="text-lg font-semibold !text-purple-300">
472
+ Music Player
473
+ </h3>
474
+ <div className="!space-y-4">
475
+ <div className="rounded-lg border border-white/10 bg-white/5 p-4">
476
+ <div className="flex items-center gap-3">
477
+ <div className="flex h-12 w-12 items-center justify-center rounded-lg bg-purple-500/20">
478
+ <MusicalNoteIcon className="h-6 w-6 text-purple-400" />
479
+ </div>
480
+ <div className="flex-1">
481
+ <h4 className="font-medium !text-white">
482
+ Bohemian Rhapsody
483
+ </h4>
484
+ <p className="text-sm !text-white/60">Queen</p>
485
+ </div>
486
+ <div className="text-sm text-white/60">3:42</div>
487
+ </div>
488
+ </div>
489
+ <div className="rounded-lg bg-black/40 p-4">
490
+ <pre className="overflow-x-auto text-sm !text-green-300">
491
+ {`<div className="flex items-center gap-3">
492
+ <div className="flex h-12 w-12 items-center justify-center rounded-lg bg-purple-500/20">
493
+ <MusicalNoteIcon className="h-6 w-6 text-purple-400" />
494
+ </div>
495
+ <div className="flex-1">
496
+ <h4 className="font-medium text-white">Bohemian Rhapsody</h4>
497
+ <p className="text-sm text-white/60">Queen</p>
498
+ </div>
499
+ <div className="text-sm text-white/60">3:42</div>
500
+ </div>`}
501
+ </pre>
502
+ </div>
503
+ </div>
504
+ </div>
505
+
506
+ {/* Audio Upload */}
507
+ <div className="!space-y-4">
508
+ <h3 className="text-lg font-semibold !text-purple-300">
509
+ Audio Upload
510
+ </h3>
511
+ <div className="!space-y-4">
512
+ <div className="rounded-lg border-2 border-dashed border-purple-500/30 bg-purple-500/5 p-8 text-center">
513
+ <MusicalNoteIcon className="!mx-auto mb-4 h-12 w-12 text-purple-400" />
514
+ <h4 className="mb-2 font-medium !text-white">
515
+ Drop your audio files here
516
+ </h4>
517
+ <p className="text-sm !text-white/60">
518
+ Supports MP3, WAV, FLAC formats
519
+ </p>
520
+ </div>
521
+ <div className="rounded-lg bg-black/40 p-4">
522
+ <pre className="overflow-x-auto text-sm !text-green-300">
523
+ {`<div className="rounded-lg border-2 border-dashed border-purple-500/30 bg-purple-500/5 p-8 text-center">
524
+ <MusicalNoteIcon className="mx-auto mb-4 h-12 w-12 text-purple-400" />
525
+ <h4 className="mb-2 font-medium text-white">
526
+ Drop your audio files here
527
+ </h4>
528
+ <p className="text-sm text-white/60">
529
+ Supports MP3, WAV, FLAC formats
530
+ </p>
531
+ </div>`}
532
+ </pre>
533
+ </div>
534
+ </div>
535
+ </div>
536
+
537
+ {/* Navigation Menu */}
538
+ <div className="!space-y-4">
539
+ <h3 className="text-lg font-semibold !text-purple-300">
540
+ Navigation Menu
541
+ </h3>
542
+ <div className="!space-y-4">
543
+ <div className="rounded-lg border border-white/10 bg-white/5 p-4">
544
+ <nav className="!space-y-2">
545
+ <a
546
+ href="#"
547
+ className="flex items-center gap-3 rounded-lg bg-purple-500/20 px-3 py-2 text-purple-200"
548
+ >
549
+ <MusicalNoteIcon className="h-5 w-5" />
550
+ <span>My Music</span>
551
+ </a>
552
+ <a
553
+ href="#"
554
+ className="flex items-center gap-3 px-3 py-2 text-white/60 hover:text-white"
555
+ >
556
+ <span className="h-5 w-5">📀</span>
557
+ <span>Albums</span>
558
+ </a>
559
+ <a
560
+ href="#"
561
+ className="flex items-center gap-3 px-3 py-2 text-white/60 hover:text-white"
562
+ >
563
+ <span className="h-5 w-5">🎵</span>
564
+ <span>Playlists</span>
565
+ </a>
566
+ </nav>
567
+ </div>
568
+ <div className="rounded-lg bg-black/40 p-4">
569
+ <pre className="overflow-x-auto text-sm !text-green-300">
570
+ {`<nav className="space-y-2">
571
+ <a href="#" className="flex items-center gap-3 rounded-lg bg-purple-500/20 px-3 py-2 text-purple-200">
572
+ <MusicalNoteIcon className="h-5 w-5" />
573
+ <span>My Music</span>
574
+ </a>
575
+ <a href="#" className="flex items-center gap-3 px-3 py-2 text-white/60 hover:text-white">
576
+ <span className="h-5 w-5">📀</span>
577
+ <span>Albums</span>
578
+ </a>
579
+ </nav>`}
580
+ </pre>
581
+ </div>
582
+ </div>
583
+ </div>
584
+
585
+ {/* Status Indicator */}
586
+ <div className="!space-y-4">
587
+ <h3 className="text-lg font-semibold !text-purple-300">
588
+ Status Indicator
589
+ </h3>
590
+ <div className="!space-y-4">
591
+ <div className="flex items-center gap-4">
592
+ <div className="relative">
593
+ <MusicalNoteIcon className="h-6 w-6 text-purple-400" />
594
+ <div className="absolute -top-1 -right-1 h-3 w-3 animate-pulse rounded-full bg-green-500"></div>
595
+ </div>
596
+ <div>
597
+ <div className="font-medium text-white">
598
+ Audio Playing
599
+ </div>
600
+ <div className="text-sm text-white/60">
601
+ Click to pause
602
+ </div>
603
+ </div>
604
+ </div>
605
+ <div className="rounded-lg bg-black/40 p-4">
606
+ <pre className="overflow-x-auto text-sm !text-green-300">
607
+ {`<div className="relative">
608
+ <MusicalNoteIcon className="h-6 w-6 text-purple-400" />
609
+ <div className="absolute -top-1 -right-1 h-3 w-3 rounded-full bg-green-500 animate-pulse"></div>
610
+ </div>`}
611
+ </pre>
612
+ </div>
613
+ </div>
614
+ </div>
615
+ </div>
616
+ </div>
617
+
618
+ {/* Accessibility */}
619
+ <div className="!space-y-8">
620
+ <h2 className="text-center text-3xl font-bold !text-white">
621
+ Accessibility Features
622
+ </h2>
623
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2">
624
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
625
+ <h3 className="text-lg font-semibold !text-green-300">
626
+ ✅ Built-in Features
627
+ </h3>
628
+ <ul className="!space-y-2 text-sm !text-white/70">
629
+ <li className="!text-white/70">
630
+ Uses Radix UI AccessibleIcon wrapper
631
+ </li>
632
+ <li className="!text-white/70">
633
+ Provides screen reader label "Musical Note Icon"
634
+ </li>
635
+ <li className="!text-white/70">
636
+ Supports keyboard navigation when interactive
637
+ </li>
638
+ <li className="!text-white/70">
639
+ Maintains proper color contrast ratios
640
+ </li>
641
+ <li className="!text-white/70">
642
+ Scales with user's font size preferences
643
+ </li>
644
+ </ul>
645
+ </div>
646
+
647
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
648
+ <h3 className="text-lg font-semibold !text-purple-300">
649
+ 💡 Best Practices
650
+ </h3>
651
+ <ul className="!space-y-2 text-sm text-white/70">
652
+ <li className="!text-white/70">
653
+ Always pair with descriptive text
654
+ </li>
655
+ <li className="!text-white/70">
656
+ Use consistent colors for music states
657
+ </li>
658
+ <li className="!text-white/70">
659
+ Ensure sufficient color contrast
660
+ </li>
661
+ <li className="!text-white/70">
662
+ Add focus states for interactive elements
663
+ </li>
664
+ <li className="!text-white/70">
665
+ Consider motion sensitivity for animations
666
+ </li>
667
+ </ul>
668
+ </div>
669
+ </div>
670
+
671
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
672
+ <h3 className="mb-4 text-lg font-semibold !text-purple-300">
673
+ Custom Accessibility Label
674
+ </h3>
675
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
676
+ <div className="rounded-lg bg-black/40 p-4">
677
+ <pre className="overflow-x-auto text-sm !text-blue-300">
678
+ {`// Custom implementation with specific label
679
+ import { AccessibleIcon } from "@radix-ui/react-accessible-icon"
680
+
681
+ function CustomMusicalNoteIcon({ label = "Musical Note", ...props }) {
682
+ return (
683
+ <AccessibleIcon label={label}>
684
+ <MusicalNoteIcon {...props} />
685
+ </AccessibleIcon>
686
+ )
687
+ }
688
+
689
+ // Usage with specific context
690
+ <CustomMusicalNoteIcon
691
+ label="Currently playing track"
692
+ className="h-6 w-6 text-purple-400"
693
+ />`}
694
+ </pre>
695
+ </div>
696
+ <div className="!space-y-4">
697
+ <p className="text-sm !text-white/70">
698
+ For specific contexts, you can wrap the MusicalNoteIcon
699
+ with a custom AccessibleIcon component that provides
700
+ more descriptive labels.
701
+ </p>
702
+ <div className="rounded-lg border border-purple-500/20 bg-purple-500/10 p-4">
703
+ <div className="flex items-center gap-2 text-sm text-purple-200">
704
+ <MusicalNoteIcon className="h-4 w-4" />
705
+ <span>
706
+ This approach gives screen readers more context
707
+ </span>
708
+ </div>
709
+ </div>
710
+ </div>
711
+ </div>
712
+ </div>
713
+ </div>
714
+
715
+ {/* Related Icons */}
716
+ <div className="!space-y-8">
717
+ <h2 className="text-center text-3xl font-bold !text-white">
718
+ Related Icons
719
+ </h2>
720
+ <div className="grid grid-cols-2 gap-6 md:grid-cols-4">
721
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
722
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-purple-500/20">
723
+ <span className="text-2xl">🎵</span>
724
+ </div>
725
+ <div>
726
+ <div className="font-medium text-white">PlayIcon</div>
727
+ <div className="text-xs text-white/60">
728
+ Playback controls
729
+ </div>
730
+ </div>
731
+ </div>
732
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
733
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-pink-500/20">
734
+ <span className="text-2xl">⏸️</span>
735
+ </div>
736
+ <div>
737
+ <div className="font-medium text-white">PauseIcon</div>
738
+ <div className="text-xs text-white/60">
739
+ Pause controls
740
+ </div>
741
+ </div>
742
+ </div>
743
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
744
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-blue-500/20">
745
+ <span className="text-2xl">🔊</span>
746
+ </div>
747
+ <div>
748
+ <div className="font-medium text-white">VolumeIcon</div>
749
+ <div className="text-xs text-white/60">
750
+ Volume controls
751
+ </div>
752
+ </div>
753
+ </div>
754
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
755
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-green-500/20">
756
+ <span className="text-2xl">🎧</span>
757
+ </div>
758
+ <div>
759
+ <div className="font-medium text-white">
760
+ HeadphoneIcon
761
+ </div>
762
+ <div className="text-xs text-white/60">Audio devices</div>
763
+ </div>
764
+ </div>
765
+ </div>
766
+ </div>
767
+ </div>
768
+
769
+ {/* Footer */}
770
+ <div className="border-t border-white/10 bg-black/20 backdrop-blur-xl">
771
+ <div className="!mx-auto max-w-7xl px-6 py-8">
772
+ <div className="!space-y-4 text-center">
773
+ <p className="!text-white/60">
774
+ MusicalNoteIcon is part of the Aural UI icon library, built
775
+ with accessibility and consistency in mind.
776
+ </p>
777
+ <p className="text-sm !text-white/40">
778
+ All icons use Radix UI's AccessibleIcon for screen reader
779
+ compatibility and follow WCAG guidelines.
780
+ </p>
781
+ </div>
782
+ </div>
783
+ </div>
784
+ </div>
785
+ </>
786
+ ),
787
+ },
788
+ },
789
+ tags: ["autodocs"],
790
+ argTypes: {
791
+ width: {
792
+ control: { type: "range", min: 8, max: 96, step: 2 },
793
+ description: "Width of the icon in pixels",
794
+ },
795
+ height: {
796
+ control: { type: "range", min: 8, max: 96, step: 2 },
797
+ description: "Height of the icon in pixels",
798
+ },
799
+ stroke: {
800
+ control: "color",
801
+ description: "Stroke color of the icon",
802
+ },
803
+ strokeWidth: {
804
+ control: { type: "range", min: 0.5, max: 3, step: 0.125 },
805
+ description: "Width of the stroke",
806
+ },
807
+ className: {
808
+ control: "text",
809
+ description: "CSS classes for styling",
810
+ },
811
+ },
812
+ }
813
+
814
+ export default meta
815
+ type Story = StoryObj<typeof MusicalNoteIcon>
816
+
817
+ // Story parameters for consistent dark theme
818
+ const storyParameters = {
819
+ backgrounds: {
820
+ default: "dark",
821
+ values: [
822
+ { name: "dark", value: "#0a0a0a" },
823
+ { name: "darker", value: "#000000" },
824
+ ],
825
+ },
826
+ }
827
+
828
+ export const Default: Story = {
829
+ args: {
830
+ width: 24,
831
+ height: 24,
832
+ className: "text-purple-400",
833
+ },
834
+ parameters: storyParameters,
835
+ render: (args) => (
836
+ <div className="flex h-32 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
837
+ <MusicalNoteIcon {...args} />
838
+ </div>
839
+ ),
840
+ }
841
+
842
+ export const SizeVariations: Story = {
843
+ parameters: {
844
+ ...storyParameters,
845
+ docs: {
846
+ description: {
847
+ story:
848
+ "MusicalNoteIcon in different sizes, from small UI elements to large displays.",
849
+ },
850
+ },
851
+ },
852
+ render: () => (
853
+ <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">
854
+ <div className="text-center">
855
+ <MusicalNoteIcon className="!mx-auto mb-2 h-3 w-3 text-purple-400" />
856
+ <span className="text-xs text-white/60">12px</span>
857
+ </div>
858
+ <div className="text-center">
859
+ <MusicalNoteIcon className="!mx-auto mb-2 h-4 w-4 text-purple-400" />
860
+ <span className="text-xs text-white/60">16px</span>
861
+ </div>
862
+ <div className="text-center">
863
+ <MusicalNoteIcon className="!mx-auto mb-2 h-5 w-5 text-purple-400" />
864
+ <span className="text-xs text-white/60">20px</span>
865
+ </div>
866
+ <div className="text-center">
867
+ <MusicalNoteIcon className="!mx-auto mb-2 h-6 w-6 text-purple-400" />
868
+ <span className="text-xs text-white/60">24px</span>
869
+ </div>
870
+ <div className="text-center">
871
+ <MusicalNoteIcon className="!mx-auto mb-2 h-8 w-8 text-purple-400" />
872
+ <span className="text-xs text-white/60">32px</span>
873
+ </div>
874
+ <div className="text-center">
875
+ <MusicalNoteIcon className="!mx-auto mb-2 h-12 w-12 text-purple-400" />
876
+ <span className="text-xs text-white/60">48px</span>
877
+ </div>
878
+ </div>
879
+ ),
880
+ }
881
+
882
+ export const ColorVariations: Story = {
883
+ parameters: {
884
+ ...storyParameters,
885
+ docs: {
886
+ description: {
887
+ story:
888
+ "MusicalNoteIcon in different colors for various musical themes and contexts.",
889
+ },
890
+ },
891
+ },
892
+ render: () => (
893
+ <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-5">
894
+ <div className="text-center">
895
+ <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">
896
+ <MusicalNoteIcon className="h-8 w-8 text-purple-400" />
897
+ </div>
898
+ <div className="text-sm font-medium text-white">Classic</div>
899
+ <div className="text-xs text-purple-400">text-purple-400</div>
900
+ </div>
901
+ <div className="text-center">
902
+ <div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-pink-500/30 bg-pink-500/20">
903
+ <MusicalNoteIcon className="h-8 w-8 text-pink-400" />
904
+ </div>
905
+ <div className="text-sm font-medium text-white">Pop</div>
906
+ <div className="text-xs text-pink-400">text-pink-400</div>
907
+ </div>
908
+ <div className="text-center">
909
+ <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">
910
+ <MusicalNoteIcon className="h-8 w-8 text-blue-400" />
911
+ </div>
912
+ <div className="text-sm font-medium text-white">Jazz</div>
913
+ <div className="text-xs text-blue-400">text-blue-400</div>
914
+ </div>
915
+ <div className="text-center">
916
+ <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">
917
+ <MusicalNoteIcon className="h-8 w-8 text-green-400" />
918
+ </div>
919
+ <div className="text-sm font-medium text-white">Electronic</div>
920
+ <div className="text-xs text-green-400">text-green-400</div>
921
+ </div>
922
+ <div className="text-center">
923
+ <div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-orange-500/30 bg-orange-500/20">
924
+ <MusicalNoteIcon className="h-8 w-8 text-orange-400" />
925
+ </div>
926
+ <div className="text-sm font-medium text-white">Rock</div>
927
+ <div className="text-xs text-orange-400">text-orange-400</div>
928
+ </div>
929
+ </div>
930
+ ),
931
+ }
932
+
933
+ export const UsageExamples: Story = {
934
+ parameters: {
935
+ ...storyParameters,
936
+ docs: {
937
+ description: {
938
+ story:
939
+ "Real-world usage examples showing MusicalNoteIcon in different UI contexts.",
940
+ },
941
+ },
942
+ },
943
+ render: () => (
944
+ <div className="min-h-dvh !space-y-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
945
+ {/* Music Player */}
946
+ <div className="!space-y-2">
947
+ <h3 className="text-sm font-medium text-white">Music Player</h3>
948
+ <div className="rounded-lg border border-white/10 bg-white/5 p-4">
949
+ <div className="flex items-center gap-3">
950
+ <div className="flex h-12 w-12 items-center justify-center rounded-lg bg-purple-500/20">
951
+ <MusicalNoteIcon className="h-6 w-6 text-purple-400" />
952
+ </div>
953
+ <div className="flex-1">
954
+ <h4 className="font-medium text-white">Bohemian Rhapsody</h4>
955
+ <p className="text-sm text-white/60">Queen</p>
956
+ </div>
957
+ <div className="text-sm text-white/60">3:42</div>
958
+ </div>
959
+ </div>
960
+ </div>
961
+
962
+ {/* Audio Upload */}
963
+ <div className="!space-y-2">
964
+ <h3 className="text-sm font-medium text-white">Audio Upload</h3>
965
+ <div className="rounded-lg border-2 border-dashed border-purple-500/30 bg-purple-500/5 p-8 text-center">
966
+ <MusicalNoteIcon className="!mx-auto mb-4 h-12 w-12 text-purple-400" />
967
+ <h4 className="mb-2 font-medium text-white">
968
+ Drop your audio files here
969
+ </h4>
970
+ <p className="text-sm text-white/60">
971
+ Supports MP3, WAV, FLAC formats
972
+ </p>
973
+ </div>
974
+ </div>
975
+
976
+ {/* Navigation Menu */}
977
+ <div className="!space-y-2">
978
+ <h3 className="text-sm font-medium text-white">Navigation Menu</h3>
979
+ <div className="rounded-lg border border-white/10 bg-white/5 p-4">
980
+ <nav className="!space-y-2">
981
+ <a
982
+ href="#"
983
+ className="flex items-center gap-3 rounded-lg bg-purple-500/20 px-3 py-2 text-purple-200"
984
+ >
985
+ <MusicalNoteIcon className="h-5 w-5" />
986
+ <span>My Music</span>
987
+ </a>
988
+ <a
989
+ href="#"
990
+ className="flex items-center gap-3 px-3 py-2 text-white/60 hover:text-white"
991
+ >
992
+ <span className="h-5 w-5">📀</span>
993
+ <span>Albums</span>
994
+ </a>
995
+ <a
996
+ href="#"
997
+ className="flex items-center gap-3 px-3 py-2 text-white/60 hover:text-white"
998
+ >
999
+ <span className="h-5 w-5">🎵</span>
1000
+ <span>Playlists</span>
1001
+ </a>
1002
+ </nav>
1003
+ </div>
1004
+ </div>
1005
+ </div>
1006
+ ),
1007
+ }
1008
+
1009
+ export const Playground: Story = {
1010
+ parameters: {
1011
+ ...storyParameters,
1012
+ docs: {
1013
+ description: {
1014
+ story:
1015
+ "Interactive playground to experiment with different MusicalNoteIcon configurations.",
1016
+ },
1017
+ },
1018
+ },
1019
+ args: {
1020
+ width: 32,
1021
+ height: 32,
1022
+ className: "text-purple-400",
1023
+ strokeWidth: 1.125,
1024
+ },
1025
+ render: (args) => (
1026
+ <div className="flex h-64 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
1027
+ <div className="rounded-lg border border-white/10 bg-white/5 p-8">
1028
+ <MusicalNoteIcon {...args} />
1029
+ </div>
1030
+ </div>
1031
+ ),
1032
+ }