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,1271 @@
1
+ import React from "react"
2
+ import type { Meta, StoryObj } from "@storybook/react"
3
+
4
+ import { CameraIcon } from "."
5
+
6
+ const meta: Meta<typeof CameraIcon> = {
7
+ title: "Icons/CameraIcon",
8
+ component: CameraIcon,
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-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
+ <CameraIcon className="h-12 w-12 text-indigo-400" />
91
+ </div>
92
+ <h1 className="text-5xl font-bold !text-white">CameraIcon</h1>
93
+ <p className="!mx-auto max-w-3xl text-xl leading-relaxed !text-white/70">
94
+ A versatile video camera icon featuring a sleek recording
95
+ device design. Essential for video conferencing
96
+ applications, streaming platforms, content creation tools,
97
+ and any interface where video recording, livestreaming, or
98
+ camera controls are needed.
99
+ </p>
100
+
101
+ {/* Stats */}
102
+ <div className="flex items-center justify-center gap-8 pt-8">
103
+ <div className="text-center">
104
+ <div className="text-3xl font-bold text-indigo-300">
105
+ Video Recording
106
+ </div>
107
+ <div className="text-sm text-white/60">
108
+ Content creation
109
+ </div>
110
+ </div>
111
+ <div className="h-8 w-px bg-white/20" />
112
+ <div className="text-center">
113
+ <div className="text-3xl font-bold text-blue-300">
114
+ Live Streaming
115
+ </div>
116
+ <div className="text-sm text-white/60">
117
+ Broadcasting ready
118
+ </div>
119
+ </div>
120
+ <div className="h-8 w-px bg-white/20" />
121
+ <div className="text-center">
122
+ <div className="text-3xl font-bold text-cyan-300">
123
+ Professional
124
+ </div>
125
+ <div className="text-sm text-white/60">
126
+ Studio quality design
127
+ </div>
128
+ </div>
129
+ </div>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ {/* Content */}
135
+ <div className="!mx-auto max-w-7xl !space-y-16 px-6 py-12">
136
+ {/* Quick Usage */}
137
+ <div className="!space-y-8">
138
+ <h2 className="text-center text-3xl font-bold !text-white">
139
+ Quick Start
140
+ </h2>
141
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
142
+ <div className="!space-y-4">
143
+ <h3 className="text-xl font-semibold !text-indigo-300">
144
+ Basic Usage
145
+ </h3>
146
+ <div className="rounded-lg bg-black/40 p-4">
147
+ <pre className="overflow-x-auto text-sm !text-green-300">
148
+ {`import { CameraIcon } from "@icons/camera-icon"
149
+
150
+ function VideoCall() {
151
+ return (
152
+ <button
153
+ onClick={toggleCamera}
154
+ className="p-3 hover:bg-white/10 rounded-lg"
155
+ aria-label="Toggle camera"
156
+ >
157
+ <CameraIcon className="h-6 w-6 text-indigo-400" />
158
+ </button>
159
+ )
160
+ }`}
161
+ </pre>
162
+ </div>
163
+ </div>
164
+
165
+ <div className="!space-y-4">
166
+ <h3 className="text-xl font-semibold !text-indigo-300">
167
+ Live Preview
168
+ </h3>
169
+ <div className="flex h-32 items-center justify-center rounded-lg border border-white/10 bg-white/5">
170
+ <button className="rounded-lg border border-indigo-500/20 bg-indigo-500/10 p-3 transition-colors hover:bg-indigo-500/20">
171
+ <CameraIcon className="h-6 w-6 text-indigo-400" />
172
+ </button>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ </div>
177
+
178
+ {/* Props Documentation */}
179
+ <div className="!space-y-8">
180
+ <h2 className="text-center text-3xl font-bold !text-white">
181
+ Props & Configuration
182
+ </h2>
183
+
184
+ <div className="overflow-hidden rounded-lg border border-white/10 bg-white/5">
185
+ <div className="bg-white/5 p-4">
186
+ <h3 className="text-xl font-semibold !text-white">Props</h3>
187
+ </div>
188
+ <table className="!my-0 w-full">
189
+ <thead className="bg-white/5">
190
+ <tr className="border-b border-white/10">
191
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
192
+ Prop
193
+ </th>
194
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
195
+ Type
196
+ </th>
197
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
198
+ Default
199
+ </th>
200
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
201
+ Description
202
+ </th>
203
+ </tr>
204
+ </thead>
205
+ <tbody>
206
+ <tr className="border-b border-white/5">
207
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
208
+ width
209
+ </td>
210
+ <td className="px-6 py-4 text-sm !text-white/70">
211
+ number | string
212
+ </td>
213
+ <td className="px-6 py-4 text-sm !text-white/50">24</td>
214
+ <td className="px-6 py-4 text-sm !text-white/70">
215
+ Width of the icon in pixels
216
+ </td>
217
+ </tr>
218
+ <tr className="border-b border-white/5 !bg-black/10">
219
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
220
+ height
221
+ </td>
222
+ <td className="px-6 py-4 text-sm !text-white/70">
223
+ number | string
224
+ </td>
225
+ <td className="px-6 py-4 text-sm !text-white/50">24</td>
226
+ <td className="px-6 py-4 text-sm !text-white/70">
227
+ Height of the icon in pixels
228
+ </td>
229
+ </tr>
230
+ <tr className="border-b border-white/5">
231
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
232
+ stroke
233
+ </td>
234
+ <td className="px-6 py-4 text-sm !text-white/70">
235
+ string
236
+ </td>
237
+ <td className="px-6 py-4 text-sm !text-white/50">
238
+ currentColor
239
+ </td>
240
+ <td className="px-6 py-4 text-sm !text-white/70">
241
+ Stroke color of the icon
242
+ </td>
243
+ </tr>
244
+ <tr className="border-b border-white/5 !bg-black/10">
245
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
246
+ strokeWidth
247
+ </td>
248
+ <td className="px-6 py-4 text-sm !text-white/70">
249
+ string | number
250
+ </td>
251
+ <td className="px-6 py-4 text-sm !text-white/50">
252
+ 1.5
253
+ </td>
254
+ <td className="px-6 py-4 text-sm !text-white/70">
255
+ Width of the stroke
256
+ </td>
257
+ </tr>
258
+ <tr className="border-b border-white/5">
259
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
260
+ strokeLinecap
261
+ </td>
262
+ <td className="px-6 py-4 text-sm !text-white/70">
263
+ string
264
+ </td>
265
+ <td className="px-6 py-4 text-sm !text-white/50">
266
+ round
267
+ </td>
268
+ <td className="px-6 py-4 text-sm !text-white/70">
269
+ Style of line endings (round for smooth appearance)
270
+ </td>
271
+ </tr>
272
+ <tr className="border-b border-white/5 !bg-black/10">
273
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
274
+ className
275
+ </td>
276
+ <td className="px-6 py-4 text-sm !text-white/70">
277
+ string
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
+ CSS classes for styling (use for overrides)
282
+ </td>
283
+ </tr>
284
+ <tr className="!bg-black/10">
285
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
286
+ ...svgProps
287
+ </td>
288
+ <td className="px-6 py-4 text-sm !text-white/70">
289
+ SVGProps
290
+ </td>
291
+ <td className="px-6 py-4 text-sm !text-white/50">-</td>
292
+ <td className="px-6 py-4 text-sm !text-white/70">
293
+ All standard SVG element props
294
+ </td>
295
+ </tr>
296
+ </tbody>
297
+ </table>
298
+ </div>
299
+ </div>
300
+
301
+ {/* Size Variations */}
302
+ <div className="!space-y-8">
303
+ <h2 className="text-center text-3xl font-bold !text-white">
304
+ Size Variations
305
+ </h2>
306
+ <div className="rounded-lg border border-white/10 bg-white/5 p-8">
307
+ <div className="!space-y-6">
308
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2">
309
+ <div className="!space-y-4">
310
+ <h3 className="text-lg font-semibold !text-indigo-300">
311
+ Standard Sizes
312
+ </h3>
313
+ <div className="flex items-end gap-6 rounded-lg bg-black/20 p-6">
314
+ <div className="text-center">
315
+ <CameraIcon className="!mx-auto mb-2 h-3 w-3 text-indigo-400" />
316
+ <span className="text-xs text-white/60">12px</span>
317
+ </div>
318
+ <div className="text-center">
319
+ <CameraIcon className="!mx-auto mb-2 h-4 w-4 text-indigo-400" />
320
+ <span className="text-xs text-white/60">16px</span>
321
+ </div>
322
+ <div className="text-center">
323
+ <CameraIcon className="!mx-auto mb-2 h-5 w-5 text-indigo-400" />
324
+ <span className="text-xs text-white/60">20px</span>
325
+ </div>
326
+ <div className="text-center">
327
+ <CameraIcon className="!mx-auto mb-2 h-6 w-6 text-indigo-400" />
328
+ <span className="text-xs text-white/60">24px</span>
329
+ </div>
330
+ <div className="text-center">
331
+ <CameraIcon className="!mx-auto mb-2 h-8 w-8 text-indigo-400" />
332
+ <span className="text-xs text-white/60">32px</span>
333
+ </div>
334
+ <div className="text-center">
335
+ <CameraIcon className="!mx-auto mb-2 h-12 w-12 text-indigo-400" />
336
+ <span className="text-xs text-white/60">48px</span>
337
+ </div>
338
+ </div>
339
+ </div>
340
+
341
+ <div className="!space-y-4">
342
+ <h3 className="text-lg font-semibold !text-indigo-300">
343
+ Code Example
344
+ </h3>
345
+ <div className="rounded-lg bg-black/40 p-4">
346
+ <pre className="overflow-x-auto text-sm !text-cyan-300">
347
+ {`// Small (16px) - compact controls
348
+ <CameraIcon className="h-4 w-4" />
349
+
350
+ // Medium (24px) - standard interface
351
+ <CameraIcon className="h-6 w-6" />
352
+
353
+ // Large (32px) - prominent displays
354
+ <CameraIcon className="h-8 w-8" />
355
+
356
+ // Custom size
357
+ <CameraIcon width={40} height={40} />`}
358
+ </pre>
359
+ </div>
360
+ </div>
361
+ </div>
362
+ </div>
363
+ </div>
364
+ </div>
365
+
366
+ {/* Color Variations */}
367
+ <div className="!space-y-8">
368
+ <h2 className="text-center text-3xl font-bold !text-white">
369
+ Color Variations
370
+ </h2>
371
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
372
+ <div className="!space-y-4">
373
+ <h3 className="text-lg font-semibold !text-indigo-300">
374
+ Semantic Colors
375
+ </h3>
376
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
377
+ <div className="flex items-center gap-4">
378
+ <CameraIcon className="h-6 w-6 text-indigo-400" />
379
+ <div>
380
+ <div className="text-sm font-medium text-white">
381
+ Video Call
382
+ </div>
383
+ <div className="text-xs text-white/60">
384
+ text-indigo-400
385
+ </div>
386
+ </div>
387
+ </div>
388
+ <div className="flex items-center gap-4">
389
+ <CameraIcon className="h-6 w-6 text-blue-400" />
390
+ <div>
391
+ <div className="text-sm font-medium text-white">
392
+ Live Stream
393
+ </div>
394
+ <div className="text-xs text-white/60">
395
+ text-blue-400
396
+ </div>
397
+ </div>
398
+ </div>
399
+ <div className="flex items-center gap-4">
400
+ <CameraIcon className="h-6 w-6 text-emerald-400" />
401
+ <div>
402
+ <div className="text-sm font-medium text-white">
403
+ Recording Active
404
+ </div>
405
+ <div className="text-xs text-white/60">
406
+ text-emerald-400
407
+ </div>
408
+ </div>
409
+ </div>
410
+ <div className="flex items-center gap-4">
411
+ <CameraIcon className="h-6 w-6 text-red-400" />
412
+ <div>
413
+ <div className="text-sm font-medium text-white">
414
+ Camera Off
415
+ </div>
416
+ <div className="text-xs text-white/60">
417
+ text-red-400
418
+ </div>
419
+ </div>
420
+ </div>
421
+ </div>
422
+ </div>
423
+
424
+ <div className="!space-y-4">
425
+ <h3 className="text-lg font-semibold !text-indigo-300">
426
+ Custom Colors
427
+ </h3>
428
+ <div className="rounded-lg bg-black/40 p-4">
429
+ <pre className="overflow-x-auto text-sm !text-green-300">
430
+ {`// Using Tailwind classes
431
+ <CameraIcon className="h-6 w-6 text-indigo-400" />
432
+ <CameraIcon className="h-6 w-6 text-blue-500" />
433
+
434
+ // Using CSS custom properties
435
+ <CameraIcon
436
+ className="h-6 w-6"
437
+ style={{ color: 'var(--color-camera)' }}
438
+ />
439
+
440
+ // Direct stroke prop
441
+ <CameraIcon
442
+ width={24}
443
+ height={24}
444
+ stroke="#6366f1"
445
+ />`}
446
+ </pre>
447
+ </div>
448
+ </div>
449
+ </div>
450
+ </div>
451
+
452
+ {/* Usage Examples */}
453
+ <div className="!space-y-8">
454
+ <h2 className="text-center text-3xl font-bold !text-white">
455
+ Usage Examples
456
+ </h2>
457
+
458
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
459
+ {/* Video Call Interface */}
460
+ <div className="!space-y-4">
461
+ <h3 className="text-lg font-semibold !text-indigo-300">
462
+ Video Call Interface
463
+ </h3>
464
+ <div className="!space-y-4">
465
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
466
+ <div className="relative mb-4 aspect-video overflow-hidden rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
467
+ <div className="absolute inset-4 rounded-lg border border-white/10 bg-gray-800">
468
+ <div className="absolute top-4 left-4 flex items-center gap-2">
469
+ <div className="h-3 w-3 animate-pulse rounded-full bg-emerald-500"></div>
470
+ <span className="text-xs text-white/60">
471
+ Live
472
+ </span>
473
+ </div>
474
+ <div className="absolute inset-0 flex items-center justify-center">
475
+ <div className="flex h-16 w-16 items-center justify-center rounded-full bg-white/10">
476
+ <span className="text-2xl">👤</span>
477
+ </div>
478
+ </div>
479
+ </div>
480
+ <div className="absolute bottom-4 left-1/2 -translate-x-1/2">
481
+ <div className="flex items-center gap-3 rounded-lg bg-black/60 p-3">
482
+ <button className="rounded-lg border border-indigo-500/30 bg-indigo-500/20 p-2 transition-colors hover:bg-indigo-500/30">
483
+ <CameraIcon className="h-5 w-5 text-indigo-400" />
484
+ </button>
485
+ <button className="rounded-lg border border-white/20 bg-white/10 p-2 transition-colors hover:bg-white/20">
486
+ <div className="relative h-5 w-5">
487
+ <div className="absolute inset-0 rounded-full bg-white"></div>
488
+ <div className="absolute top-1 left-1 h-3 w-3 rounded-full bg-gray-800"></div>
489
+ </div>
490
+ </button>
491
+ <button className="rounded-lg border border-red-500/30 bg-red-500/20 p-2 transition-colors hover:bg-red-500/30">
492
+ <div className="relative h-5 w-5">
493
+ <div className="absolute inset-0 rotate-45 border-2 border-red-400"></div>
494
+ <div className="absolute inset-0 -rotate-45 border-2 border-red-400"></div>
495
+ </div>
496
+ </button>
497
+ </div>
498
+ </div>
499
+ </div>
500
+ <div className="text-center">
501
+ <div className="text-sm font-medium text-white">
502
+ "Team Standup Meeting"
503
+ </div>
504
+ <div className="text-xs text-white/60">
505
+ Camera enabled for video call
506
+ </div>
507
+ </div>
508
+ </div>
509
+ <div className="rounded-lg bg-black/40 p-4">
510
+ <pre className="overflow-x-auto text-sm !text-green-300">
511
+ {`// Video call interface with camera controls
512
+ <div className="video-call-interface">
513
+ <div className="video-container">
514
+ <VideoStream />
515
+ <div className="call-status">
516
+ <LiveIndicator />
517
+ <span>Live</span>
518
+ </div>
519
+ </div>
520
+ <div className="call-controls">
521
+ <button
522
+ onClick={toggleCamera}
523
+ className={cameraEnabled ? 'camera-on' : 'camera-off'}
524
+ aria-label={cameraEnabled ? 'Turn off camera' : 'Turn on camera'}
525
+ >
526
+ <CameraIcon className="h-5 w-5 text-indigo-400" />
527
+ </button>
528
+ <MicrophoneButton />
529
+ <EndCallButton />
530
+ </div>
531
+ </div>`}
532
+ </pre>
533
+ </div>
534
+ </div>
535
+ </div>
536
+
537
+ {/* Streaming Dashboard */}
538
+ <div className="!space-y-4">
539
+ <h3 className="text-lg font-semibold !text-indigo-300">
540
+ Live Streaming Dashboard
541
+ </h3>
542
+ <div className="!space-y-4">
543
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
544
+ <div className="overflow-hidden rounded-lg border border-white/20 bg-black/50">
545
+ <div className="flex items-center justify-between border-b border-white/10 bg-white/5 p-4">
546
+ <div className="flex items-center gap-3">
547
+ <div className="flex items-center gap-2">
548
+ <div className="h-3 w-3 animate-pulse rounded-full bg-red-500"></div>
549
+ <span className="text-sm text-white">LIVE</span>
550
+ </div>
551
+ <span className="text-sm text-white/60">•</span>
552
+ <span className="text-sm text-white/60">
553
+ 1,247 viewers
554
+ </span>
555
+ </div>
556
+ <div className="flex items-center gap-2">
557
+ <button className="rounded border border-indigo-500/30 bg-indigo-500/20 p-2 transition-colors hover:bg-indigo-500/30">
558
+ <CameraIcon className="h-4 w-4 text-indigo-400" />
559
+ </button>
560
+ <button className="rounded border border-white/20 bg-white/10 p-2 transition-colors hover:bg-white/20">
561
+ <span className="text-xs">⚙️</span>
562
+ </button>
563
+ </div>
564
+ </div>
565
+ <div className="p-6">
566
+ <div className="mb-4 grid grid-cols-2 gap-4">
567
+ <div className="rounded-lg bg-black/30 p-4 text-center">
568
+ <div className="text-lg font-bold text-emerald-400">
569
+ 1080p
570
+ </div>
571
+ <div className="text-xs text-white/60">
572
+ Video Quality
573
+ </div>
574
+ </div>
575
+ <div className="rounded-lg bg-black/30 p-4 text-center">
576
+ <div className="text-lg font-bold text-blue-400">
577
+ 60fps
578
+ </div>
579
+ <div className="text-xs text-white/60">
580
+ Frame Rate
581
+ </div>
582
+ </div>
583
+ </div>
584
+ <div className="text-center">
585
+ <div className="text-sm font-medium text-white">
586
+ Stream Status: Active
587
+ </div>
588
+ <div className="text-xs text-white/60">
589
+ Camera feed broadcasting
590
+ </div>
591
+ </div>
592
+ </div>
593
+ </div>
594
+ </div>
595
+ <div className="rounded-lg bg-black/40 p-4">
596
+ <pre className="overflow-x-auto text-sm !text-green-300">
597
+ {`// Live streaming dashboard
598
+ <div className="streaming-dashboard">
599
+ <div className="stream-header">
600
+ <div className="live-status">
601
+ <LiveIndicator />
602
+ <span>LIVE</span>
603
+ <ViewerCount count={1247} />
604
+ </div>
605
+ <div className="stream-controls">
606
+ <button
607
+ onClick={toggleStreamCamera}
608
+ className="camera-control"
609
+ aria-label="Toggle stream camera"
610
+ >
611
+ <CameraIcon className="h-4 w-4 text-indigo-400" />
612
+ </button>
613
+ <StreamSettingsButton />
614
+ </div>
615
+ </div>
616
+ <div className="stream-metrics">
617
+ <QualityIndicator quality="1080p" />
618
+ <FrameRateIndicator fps={60} />
619
+ </div>
620
+ </div>`}
621
+ </pre>
622
+ </div>
623
+ </div>
624
+ </div>
625
+
626
+ {/* Content Creation Studio */}
627
+ <div className="!space-y-4">
628
+ <h3 className="text-lg font-semibold !text-indigo-300">
629
+ Content Creation Studio
630
+ </h3>
631
+ <div className="!space-y-4">
632
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
633
+ <div className="rounded-lg border border-white/20 bg-black/50 p-6">
634
+ <div className="mb-6 flex items-start justify-between">
635
+ <div>
636
+ <h4 className="text-lg font-semibold text-white">
637
+ Recording Studio
638
+ </h4>
639
+ <p className="text-sm text-white/60">
640
+ Professional video production
641
+ </p>
642
+ </div>
643
+ <div className="flex items-center gap-2">
644
+ <span className="rounded border border-red-500/30 bg-red-500/20 px-2 py-1 text-xs text-red-400">
645
+ REC
646
+ </span>
647
+ </div>
648
+ </div>
649
+ <div className="mb-6 grid grid-cols-3 gap-4">
650
+ <div className="rounded-lg bg-white/5 p-4 text-center">
651
+ <CameraIcon className="mx-auto mb-2 h-8 w-8 text-indigo-400" />
652
+ <div className="text-sm font-medium text-white">
653
+ Main Camera
654
+ </div>
655
+ <div className="text-xs text-emerald-400">
656
+ Active
657
+ </div>
658
+ </div>
659
+ <div className="rounded-lg bg-white/5 p-4 text-center">
660
+ <CameraIcon className="mx-auto mb-2 h-8 w-8 text-white/40" />
661
+ <div className="text-sm font-medium text-white">
662
+ Side Angle
663
+ </div>
664
+ <div className="text-xs text-white/40">
665
+ Standby
666
+ </div>
667
+ </div>
668
+ <div className="rounded-lg bg-white/5 p-4 text-center">
669
+ <CameraIcon className="mx-auto mb-2 h-8 w-8 text-white/40" />
670
+ <div className="text-sm font-medium text-white">
671
+ Overhead
672
+ </div>
673
+ <div className="text-xs text-white/40">
674
+ Standby
675
+ </div>
676
+ </div>
677
+ </div>
678
+ <div className="flex items-center justify-between">
679
+ <div className="flex items-center gap-3">
680
+ <button className="rounded border border-red-500/30 bg-red-500/20 px-4 py-2 text-red-400 transition-colors hover:bg-red-500/30">
681
+ Stop Recording
682
+ </button>
683
+ <button className="rounded border border-white/20 bg-white/10 px-4 py-2 text-white transition-colors hover:bg-white/20">
684
+ Pause
685
+ </button>
686
+ </div>
687
+ <div className="text-sm text-white/60">
688
+ Recording: 12:34
689
+ </div>
690
+ </div>
691
+ </div>
692
+ </div>
693
+ <div className="rounded-lg bg-black/40 p-4">
694
+ <pre className="overflow-x-auto text-sm !text-green-300">
695
+ {`// Multi-camera content creation studio
696
+ <div className="recording-studio">
697
+ <div className="studio-header">
698
+ <div className="studio-info">
699
+ <h3>Recording Studio</h3>
700
+ <p>Professional video production</p>
701
+ </div>
702
+ <RecordingIndicator isRecording={true} />
703
+ </div>
704
+ <div className="camera-grid">
705
+ {cameras.map((camera, index) => (
706
+ <div key={camera.id} className="camera-feed">
707
+ <CameraIcon
708
+ className={camera.active ? 'h-8 w-8 text-indigo-400' : 'h-8 w-8 text-white/40'}
709
+ />
710
+ <div className="camera-label">{camera.name}</div>
711
+ <div className="camera-status">{camera.status}</div>
712
+ </div>
713
+ ))}
714
+ </div>
715
+ <div className="recording-controls">
716
+ <RecordingControls />
717
+ <TimerDisplay duration={recordingDuration} />
718
+ </div>
719
+ </div>`}
720
+ </pre>
721
+ </div>
722
+ </div>
723
+ </div>
724
+
725
+ {/* Security Camera System */}
726
+ <div className="!space-y-4">
727
+ <h3 className="text-lg font-semibold !text-indigo-300">
728
+ Security Camera System
729
+ </h3>
730
+ <div className="!space-y-4">
731
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
732
+ <div className="rounded-lg bg-black/30 p-4">
733
+ <div className="mb-4 flex items-center justify-between">
734
+ <h4 className="text-sm font-semibold text-white">
735
+ Security Monitor
736
+ </h4>
737
+ <div className="flex items-center gap-2">
738
+ <div className="h-2 w-2 animate-pulse rounded-full bg-emerald-500"></div>
739
+ <span className="text-xs text-white/60">
740
+ All systems operational
741
+ </span>
742
+ </div>
743
+ </div>
744
+ <div className="grid grid-cols-2 gap-3">
745
+ <div className="rounded border border-white/10 bg-black/50 p-3">
746
+ <div className="mb-2 flex items-center justify-between">
747
+ <span className="text-xs text-white/60">
748
+ Camera 01
749
+ </span>
750
+ <CameraIcon className="h-3 w-3 text-emerald-400" />
751
+ </div>
752
+ <div className="flex aspect-video items-center justify-center rounded-sm bg-gray-800">
753
+ <span className="text-xs text-white/40">
754
+ Front Entrance
755
+ </span>
756
+ </div>
757
+ </div>
758
+ <div className="rounded border border-white/10 bg-black/50 p-3">
759
+ <div className="mb-2 flex items-center justify-between">
760
+ <span className="text-xs text-white/60">
761
+ Camera 02
762
+ </span>
763
+ <CameraIcon className="h-3 w-3 text-emerald-400" />
764
+ </div>
765
+ <div className="flex aspect-video items-center justify-center rounded-sm bg-gray-800">
766
+ <span className="text-xs text-white/40">
767
+ Parking Lot
768
+ </span>
769
+ </div>
770
+ </div>
771
+ <div className="rounded border border-white/10 bg-black/50 p-3">
772
+ <div className="mb-2 flex items-center justify-between">
773
+ <span className="text-xs text-white/60">
774
+ Camera 03
775
+ </span>
776
+ <CameraIcon className="h-3 w-3 text-red-400" />
777
+ </div>
778
+ <div className="flex aspect-video items-center justify-center rounded-sm bg-gray-800">
779
+ <span className="text-xs text-red-400">
780
+ Offline
781
+ </span>
782
+ </div>
783
+ </div>
784
+ <div className="rounded border border-white/10 bg-black/50 p-3">
785
+ <div className="mb-2 flex items-center justify-between">
786
+ <span className="text-xs text-white/60">
787
+ Camera 04
788
+ </span>
789
+ <CameraIcon className="h-3 w-3 text-emerald-400" />
790
+ </div>
791
+ <div className="flex aspect-video items-center justify-center rounded-sm bg-gray-800">
792
+ <span className="text-xs text-white/40">
793
+ Back Exit
794
+ </span>
795
+ </div>
796
+ </div>
797
+ </div>
798
+ </div>
799
+ </div>
800
+ <div className="rounded-lg bg-black/40 p-4">
801
+ <pre className="overflow-x-auto text-sm !text-green-300">
802
+ {`// Security camera monitoring system
803
+ <div className="security-monitor">
804
+ <div className="monitor-header">
805
+ <h3>Security Monitor</h3>
806
+ <SystemStatus status="operational" />
807
+ </div>
808
+ <div className="camera-grid">
809
+ {securityCameras.map((camera) => (
810
+ <div key={camera.id} className="camera-feed">
811
+ <div className="camera-header">
812
+ <span className="camera-label">{camera.name}</span>
813
+ <CameraIcon
814
+ className={
815
+ camera.status === 'online'
816
+ ? 'h-3 w-3 text-emerald-400'
817
+ : 'h-3 w-3 text-red-400'
818
+ }
819
+ />
820
+ </div>
821
+ <VideoFeed
822
+ src={camera.stream}
823
+ status={camera.status}
824
+ />
825
+ </div>
826
+ ))}
827
+ </div>
828
+ </div>`}
829
+ </pre>
830
+ </div>
831
+ </div>
832
+ </div>
833
+ </div>
834
+ </div>
835
+
836
+ {/* Accessibility */}
837
+ <div className="!space-y-8">
838
+ <h2 className="text-center text-3xl font-bold !text-white">
839
+ Accessibility Features
840
+ </h2>
841
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2">
842
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
843
+ <h3 className="text-lg font-semibold !text-green-300">
844
+ ✅ Built-in Features
845
+ </h3>
846
+ <ul className="!space-y-2 text-sm !text-white/70">
847
+ <li className="!text-white/70">
848
+ Uses Radix UI AccessibleIcon wrapper
849
+ </li>
850
+ <li className="!text-white/70">
851
+ Provides screen reader label "Camera icon"
852
+ </li>
853
+ <li className="!text-white/70">
854
+ Supports keyboard navigation when interactive
855
+ </li>
856
+ <li className="!text-white/70">
857
+ Maintains proper color contrast ratios
858
+ </li>
859
+ <li className="!text-white/70">
860
+ Uses round strokeLinecap for smooth visual appearance
861
+ </li>
862
+ </ul>
863
+ </div>
864
+
865
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
866
+ <h3 className="text-lg font-semibold !text-indigo-300">
867
+ 💡 Best Practices
868
+ </h3>
869
+ <ul className="!space-y-2 text-sm text-white/70">
870
+ <li className="!text-white/70">
871
+ Always provide descriptive aria-labels for camera
872
+ controls
873
+ </li>
874
+ <li className="!text-white/70">
875
+ Use color coding to indicate camera status (green=on,
876
+ red=off)
877
+ </li>
878
+ <li className="!text-white/70">
879
+ Ensure sufficient touch target size (44px minimum)
880
+ </li>
881
+ <li className="!text-white/70">
882
+ Provide visual feedback for camera state changes
883
+ </li>
884
+ <li className="!text-white/70">
885
+ Consider privacy notifications when camera is active
886
+ </li>
887
+ </ul>
888
+ </div>
889
+ </div>
890
+
891
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
892
+ <h3 className="mb-4 text-lg font-semibold !text-blue-300">
893
+ Proper ARIA Implementation
894
+ </h3>
895
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
896
+ <div className="rounded-lg bg-black/40 p-4">
897
+ <pre className="overflow-x-auto text-sm !text-cyan-300">
898
+ {`// Video call camera toggle
899
+ <button
900
+ aria-label={cameraEnabled ? 'Turn off camera' : 'Turn on camera'}
901
+ aria-pressed={cameraEnabled}
902
+ onClick={toggleCamera}
903
+ className={cameraEnabled ? 'camera-on' : 'camera-off'}
904
+ >
905
+ <CameraIcon className="h-5 w-5 text-indigo-400" />
906
+ </button>
907
+
908
+ // Live streaming camera control
909
+ <button
910
+ aria-label="Toggle streaming camera"
911
+ aria-describedby="stream-status"
912
+ onClick={toggleStreamCamera}
913
+ >
914
+ <CameraIcon className="h-4 w-4 text-indigo-400" />
915
+ </button>
916
+ <div id="stream-status" className="sr-only">
917
+ Camera is currently {isStreaming ? 'broadcasting' : 'offline'}
918
+ </div>
919
+
920
+ // Security camera feed
921
+ <div
922
+ role="img"
923
+ aria-label={camera.name + ' security feed'}
924
+ aria-describedby={camera.id + '-status'}
925
+ >
926
+ <CameraIcon
927
+ className={camera.online ? 'text-emerald-400' : 'text-red-400'}
928
+ />
929
+ </div>
930
+ <div id={camera.id + '-status'} className="sr-only">
931
+ Camera status: {camera.online ? 'online' : 'offline'}
932
+ </div>
933
+
934
+ // Recording studio camera selection
935
+ <button
936
+ aria-label={camera.name + ' camera'}
937
+ aria-pressed={camera.active}
938
+ aria-describedby="camera-controls-hint"
939
+ onClick={() => selectCamera(camera.id)}
940
+ >
941
+ <CameraIcon className="h-8 w-8 text-indigo-400" />
942
+ </button>
943
+ <div id="camera-controls-hint" className="sr-only">
944
+ Press to activate this camera feed
945
+ </div>`}
946
+ </pre>
947
+ </div>
948
+ <div className="!space-y-4">
949
+ <p className="text-sm !text-white/70">
950
+ When using CameraIcon for video controls, always provide
951
+ clear context about the camera's current state and what
952
+ action the control will perform.
953
+ </p>
954
+ <div className="rounded-lg border border-indigo-500/20 bg-indigo-500/10 p-4">
955
+ <div className="flex items-center gap-2 text-sm text-indigo-200">
956
+ <CameraIcon className="h-4 w-4" />
957
+ <span>
958
+ Consider privacy indicators when camera is active
959
+ </span>
960
+ </div>
961
+ </div>
962
+ </div>
963
+ </div>
964
+ </div>
965
+ </div>
966
+
967
+ {/* Related Icons */}
968
+ <div className="!space-y-8">
969
+ <h2 className="text-center text-3xl font-bold !text-white">
970
+ Related Icons
971
+ </h2>
972
+ <div className="grid grid-cols-2 gap-6 md:grid-cols-4">
973
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
974
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-purple-500/20">
975
+ <span className="!text-2xl !text-white">🎙️</span>
976
+ </div>
977
+ <div>
978
+ <div className="font-medium text-white">
979
+ MicrophoneIcon
980
+ </div>
981
+ <div className="text-xs text-white/60">
982
+ Audio recording
983
+ </div>
984
+ </div>
985
+ </div>
986
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
987
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-red-500/20">
988
+ <span className="!text-2xl !text-white">⏺️</span>
989
+ </div>
990
+ <div>
991
+ <div className="font-medium text-white">RecordIcon</div>
992
+ <div className="text-xs text-white/60">
993
+ Start recording
994
+ </div>
995
+ </div>
996
+ </div>
997
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
998
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-green-500/20">
999
+ <span className="!text-2xl !text-white">📹</span>
1000
+ </div>
1001
+ <div>
1002
+ <div className="font-medium text-white">VideoIcon</div>
1003
+ <div className="text-xs text-white/60">Video file</div>
1004
+ </div>
1005
+ </div>
1006
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
1007
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-blue-500/20">
1008
+ <span className="!text-2xl !text-white">📡</span>
1009
+ </div>
1010
+ <div>
1011
+ <div className="font-medium text-white">
1012
+ BroadcastIcon
1013
+ </div>
1014
+ <div className="text-xs text-white/60">
1015
+ Live streaming
1016
+ </div>
1017
+ </div>
1018
+ </div>
1019
+ </div>
1020
+ </div>
1021
+ </div>
1022
+
1023
+ {/* Footer */}
1024
+ <div className="border-t border-white/10 bg-black/20 backdrop-blur-xl">
1025
+ <div className="!mx-auto max-w-7xl px-6 py-8">
1026
+ <div className="!space-y-4 text-center">
1027
+ <p className="!text-white/60">
1028
+ CameraIcon is part of the Aural UI icon library, built with
1029
+ accessibility and video production best practices in mind.
1030
+ </p>
1031
+ <p className="text-sm !text-white/40">
1032
+ All icons use Radix UI's AccessibleIcon for screen reader
1033
+ compatibility and follow WCAG guidelines for media controls
1034
+ and privacy considerations.
1035
+ </p>
1036
+ </div>
1037
+ </div>
1038
+ </div>
1039
+ </div>
1040
+ </>
1041
+ ),
1042
+ },
1043
+ },
1044
+ tags: ["autodocs"],
1045
+ argTypes: {
1046
+ width: {
1047
+ control: { type: "range", min: 8, max: 96, step: 2 },
1048
+ description: "Width of the icon in pixels",
1049
+ },
1050
+ height: {
1051
+ control: { type: "range", min: 8, max: 96, step: 2 },
1052
+ description: "Height of the icon in pixels",
1053
+ },
1054
+ stroke: {
1055
+ control: "color",
1056
+ description: "Stroke color of the icon",
1057
+ },
1058
+ strokeWidth: {
1059
+ control: { type: "range", min: 0.5, max: 4, step: 0.5 },
1060
+ description: "Width of the stroke",
1061
+ },
1062
+ strokeLinecap: {
1063
+ control: { type: "select" },
1064
+ options: ["round", "square", "butt"],
1065
+ description: "Style of line endings",
1066
+ },
1067
+ className: {
1068
+ control: "text",
1069
+ description: "CSS classes for styling (use for overrides)",
1070
+ },
1071
+ onClick: {
1072
+ action: "clicked",
1073
+ description: "Click handler for interactive use",
1074
+ },
1075
+ },
1076
+ }
1077
+
1078
+ export default meta
1079
+ type Story = StoryObj<typeof CameraIcon>
1080
+
1081
+ // Story parameters for consistent dark theme
1082
+ const storyParameters = {
1083
+ backgrounds: {
1084
+ default: "dark",
1085
+ values: [
1086
+ { name: "dark", value: "#0a0a0a" },
1087
+ { name: "darker", value: "#000000" },
1088
+ ],
1089
+ },
1090
+ }
1091
+
1092
+ export const Default: Story = {
1093
+ args: {
1094
+ className: "h-8 w-8 text-indigo-400",
1095
+ },
1096
+ parameters: storyParameters,
1097
+ render: (args) => (
1098
+ <div className="flex h-32 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
1099
+ <CameraIcon {...args} />
1100
+ </div>
1101
+ ),
1102
+ }
1103
+
1104
+ export const SizeVariations: Story = {
1105
+ parameters: {
1106
+ ...storyParameters,
1107
+ docs: {
1108
+ description: {
1109
+ story:
1110
+ "CameraIcon in different sizes, from small video call controls to large content creation interfaces.",
1111
+ },
1112
+ },
1113
+ },
1114
+ render: () => (
1115
+ <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">
1116
+ <div className="text-center">
1117
+ <CameraIcon className="!mx-auto mb-2 h-3 w-3 text-indigo-400" />
1118
+ <span className="text-xs text-white/60">12px</span>
1119
+ </div>
1120
+ <div className="text-center">
1121
+ <CameraIcon className="!mx-auto mb-2 h-4 w-4 text-indigo-400" />
1122
+ <span className="text-xs text-white/60">16px</span>
1123
+ </div>
1124
+ <div className="text-center">
1125
+ <CameraIcon className="!mx-auto mb-2 h-5 w-5 text-indigo-400" />
1126
+ <span className="text-xs text-white/60">20px</span>
1127
+ </div>
1128
+ <div className="text-center">
1129
+ <CameraIcon className="!mx-auto mb-2 h-6 w-6 text-indigo-400" />
1130
+ <span className="text-xs text-white/60">24px</span>
1131
+ </div>
1132
+ <div className="text-center">
1133
+ <CameraIcon className="!mx-auto mb-2 h-8 w-8 text-indigo-400" />
1134
+ <span className="text-xs text-white/60">32px</span>
1135
+ </div>
1136
+ <div className="text-center">
1137
+ <CameraIcon className="!mx-auto mb-2 h-12 w-12 text-indigo-400" />
1138
+ <span className="text-xs text-white/60">48px</span>
1139
+ </div>
1140
+ </div>
1141
+ ),
1142
+ }
1143
+
1144
+ export const ColorVariations: Story = {
1145
+ parameters: {
1146
+ ...storyParameters,
1147
+ docs: {
1148
+ description: {
1149
+ story:
1150
+ "CameraIcon in different semantic colors for various video and camera applications.",
1151
+ },
1152
+ },
1153
+ },
1154
+ render: () => (
1155
+ <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">
1156
+ <div className="text-center">
1157
+ <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">
1158
+ <CameraIcon className="h-8 w-8 text-indigo-400" />
1159
+ </div>
1160
+ <div className="text-sm font-medium text-white">Video Call</div>
1161
+ <div className="text-xs text-indigo-400">text-indigo-400</div>
1162
+ </div>
1163
+ <div className="text-center">
1164
+ <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">
1165
+ <CameraIcon className="h-8 w-8 text-blue-400" />
1166
+ </div>
1167
+ <div className="text-sm font-medium text-white">Live Stream</div>
1168
+ <div className="text-xs text-blue-400">text-blue-400</div>
1169
+ </div>
1170
+ <div className="text-center">
1171
+ <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">
1172
+ <CameraIcon className="h-8 w-8 text-emerald-400" />
1173
+ </div>
1174
+ <div className="text-sm font-medium text-white">Recording Active</div>
1175
+ <div className="text-xs text-emerald-400">text-emerald-400</div>
1176
+ </div>
1177
+ <div className="text-center">
1178
+ <div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-red-500/30 bg-red-500/20">
1179
+ <CameraIcon className="h-8 w-8 text-red-400" />
1180
+ </div>
1181
+ <div className="text-sm font-medium text-white">Camera Off</div>
1182
+ <div className="text-xs text-red-400">text-red-400</div>
1183
+ </div>
1184
+ </div>
1185
+ ),
1186
+ }
1187
+
1188
+ export const UsageExamples: Story = {
1189
+ parameters: {
1190
+ ...storyParameters,
1191
+ docs: {
1192
+ description: {
1193
+ story:
1194
+ "Real-world usage examples showing CameraIcon in different video and streaming contexts.",
1195
+ },
1196
+ },
1197
+ },
1198
+ render: () => (
1199
+ <div className="min-h-dvh !space-y-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
1200
+ {/* Video Call */}
1201
+ <div className="!space-y-2">
1202
+ <h3 className="text-sm font-medium text-white">Video Call Interface</h3>
1203
+ <div className="rounded-lg border border-white/10 bg-white/5 p-4">
1204
+ <div className="flex items-center gap-3 rounded-lg bg-black/60 p-3">
1205
+ <button className="rounded-lg border border-indigo-500/30 bg-indigo-500/20 p-2 transition-colors hover:bg-indigo-500/30">
1206
+ <CameraIcon className="h-5 w-5 text-indigo-400" />
1207
+ </button>
1208
+ <button className="rounded-lg border border-white/20 bg-white/10 p-2 transition-colors hover:bg-white/20">
1209
+ <div className="relative h-5 w-5">
1210
+ <div className="absolute inset-0 rounded-full bg-white"></div>
1211
+ <div className="absolute top-1 left-1 h-3 w-3 rounded-full bg-gray-800"></div>
1212
+ </div>
1213
+ </button>
1214
+ <button className="rounded-lg border border-red-500/30 bg-red-500/20 p-2 transition-colors hover:bg-red-500/30">
1215
+ <div className="relative h-5 w-5">
1216
+ <div className="absolute inset-0 rotate-45 border-2 border-red-400"></div>
1217
+ <div className="absolute inset-0 -rotate-45 border-2 border-red-400"></div>
1218
+ </div>
1219
+ </button>
1220
+ </div>
1221
+ </div>
1222
+ </div>
1223
+
1224
+ {/* Streaming Dashboard */}
1225
+ <div className="!space-y-2">
1226
+ <h3 className="text-sm font-medium text-white">
1227
+ Live Streaming Dashboard
1228
+ </h3>
1229
+ <div className="rounded-lg border border-white/10 bg-white/5 p-4">
1230
+ <div className="flex items-center justify-between rounded bg-white/5 p-3">
1231
+ <div className="flex items-center gap-3">
1232
+ <div className="h-3 w-3 animate-pulse rounded-full bg-red-500"></div>
1233
+ <span className="text-sm text-white">LIVE</span>
1234
+ <span className="text-sm text-white/60">1,247 viewers</span>
1235
+ </div>
1236
+ <div className="flex items-center gap-2">
1237
+ <button className="rounded border border-indigo-500/30 bg-indigo-500/20 p-2 transition-colors hover:bg-indigo-500/30">
1238
+ <CameraIcon className="h-4 w-4 text-indigo-400" />
1239
+ </button>
1240
+ </div>
1241
+ </div>
1242
+ </div>
1243
+ </div>
1244
+ </div>
1245
+ ),
1246
+ }
1247
+
1248
+ export const Playground: Story = {
1249
+ parameters: {
1250
+ ...storyParameters,
1251
+ docs: {
1252
+ description: {
1253
+ story:
1254
+ "Interactive playground to experiment with different CameraIcon configurations.",
1255
+ },
1256
+ },
1257
+ },
1258
+ args: {
1259
+ width: 24,
1260
+ height: 24,
1261
+ className: "text-indigo-400",
1262
+ strokeLinecap: "round",
1263
+ },
1264
+ render: (args) => (
1265
+ <div className="flex h-64 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
1266
+ <div className="rounded-lg border border-white/10 bg-white/5 p-8">
1267
+ <CameraIcon {...args} />
1268
+ </div>
1269
+ </div>
1270
+ ),
1271
+ }