aural-ui 2.0.2 → 2.0.3

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 (41) hide show
  1. package/dist/components/button/Button.stories.tsx +43 -0
  2. package/dist/components/button/index.tsx +10 -4
  3. package/dist/components/chip/index.tsx +3 -3
  4. package/dist/components/icon-button/IconButton.stories.tsx +48 -0
  5. package/dist/components/icon-button/index.tsx +6 -2
  6. package/dist/components/input/index.tsx +4 -0
  7. package/dist/components/overlay/index.tsx +22 -5
  8. package/dist/components/tag/index.tsx +2 -2
  9. package/dist/components/textarea/index.tsx +2 -0
  10. package/dist/components/tooltip/index.tsx +45 -0
  11. package/dist/hooks/index.ts +1 -0
  12. package/dist/hooks/use-change-state/UseChangeState.stories.tsx +744 -0
  13. package/dist/hooks/use-change-state/index.tsx +17 -0
  14. package/dist/hooks/use-change-state/meta.ts +6 -0
  15. package/dist/icons/circle-tick-icon/CircleTickIcon.stories.tsx +1204 -0
  16. package/dist/icons/circle-tick-icon/index.tsx +22 -0
  17. package/dist/icons/circle-tick-icon/meta.ts +8 -0
  18. package/dist/icons/copy-icon/CopyIcon.stories.tsx +1021 -0
  19. package/dist/icons/copy-icon/index.tsx +21 -0
  20. package/dist/icons/copy-icon/meta.ts +8 -0
  21. package/dist/icons/download-icon/DownloadIcon.stories.tsx +877 -0
  22. package/dist/icons/download-icon/index.tsx +22 -0
  23. package/dist/icons/download-icon/meta.ts +8 -0
  24. package/dist/icons/filter-bar-row-icon/FilterBarRowIcon.stories.tsx +1109 -0
  25. package/dist/icons/filter-bar-row-icon/index.tsx +24 -0
  26. package/dist/icons/filter-bar-row-icon/meta.ts +8 -0
  27. package/dist/icons/index.ts +8 -0
  28. package/dist/icons/notepad-icon/NotepadIcon.stories.tsx +1159 -0
  29. package/dist/icons/notepad-icon/index.tsx +21 -0
  30. package/dist/icons/notepad-icon/meta.ts +8 -0
  31. package/dist/icons/notes-icon/NotesIcon.stories.tsx +1159 -0
  32. package/dist/icons/notes-icon/index.tsx +24 -0
  33. package/dist/icons/notes-icon/meta.ts +8 -0
  34. package/dist/icons/paper-plane-icon/PaperPlaneIcon.stories.tsx +936 -0
  35. package/dist/icons/paper-plane-icon/index.tsx +33 -0
  36. package/dist/icons/paper-plane-icon/meta.ts +8 -0
  37. package/dist/icons/suggestion-icon/SuggestionIcon.stories.tsx +907 -0
  38. package/dist/icons/suggestion-icon/index.tsx +33 -0
  39. package/dist/icons/suggestion-icon/meta.ts +8 -0
  40. package/dist/index.js +1 -1
  41. package/package.json +1 -1
@@ -0,0 +1,1109 @@
1
+ import React from "react"
2
+ import type { Meta, StoryObj } from "@storybook/react"
3
+
4
+ import { FilterBarRowIcon } from "."
5
+
6
+ const meta: Meta<typeof FilterBarRowIcon> = {
7
+ title: "Icons/FilterBarRowIcon",
8
+ component: FilterBarRowIcon,
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
+ @keyframes search-pulse {
81
+ 0%, 100% { transform: scale(1); opacity: 1; }
82
+ 50% { transform: scale(1.05); opacity: 0.8; }
83
+ }
84
+ .animate-search-pulse {
85
+ animation: search-pulse 2s ease-in-out infinite;
86
+ }
87
+ @keyframes document-slide {
88
+ 0%, 100% { transform: translateX(0) rotate(0deg); }
89
+ 50% { transform: translateX(-2px) rotate(-1deg); }
90
+ }
91
+ .animate-document-slide {
92
+ animation: document-slide 3s ease-in-out infinite;
93
+ }
94
+ `}
95
+ </style>
96
+
97
+ <div className="min-h-screen bg-gradient-to-br from-gray-900 via-indigo-900/20 to-gray-900">
98
+ {/* Header */}
99
+ <div className="relative overflow-hidden border-b border-white/10 bg-black/20 backdrop-blur-xl">
100
+ <div className="absolute inset-0 bg-gradient-to-r from-indigo-500/10 via-transparent to-cyan-500/10" />
101
+ <div className="relative !mx-auto max-w-7xl px-6 py-16">
102
+ <div className="!space-y-6 text-center">
103
+ <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-cyan-500/20">
104
+ <FilterBarRowIcon className="h-12 w-12 text-indigo-400" />
105
+ </div>
106
+ <h1 className="!text-fm-primary text-5xl font-bold">
107
+ FilterBarRowIcon
108
+ </h1>
109
+ <p className="!mx-auto max-w-3xl text-xl leading-relaxed !text-white/70">
110
+ A filter bar row icon symbolizing sorting, filtering, and
111
+ refining data. Ideal for use in features like search
112
+ filters, list views, dashboards, or customizable data grids.
113
+ Built with accessibility in mind using Radix UI's
114
+ AccessibleIcon wrapper.
115
+ </p>
116
+
117
+ {/* Stats */}
118
+ <div className="flex items-center justify-center gap-8 pt-8">
119
+ <div className="text-center">
120
+ <div className="text-3xl font-bold text-indigo-300">
121
+ Write
122
+ </div>
123
+ <div className="text-sm text-white/60">
124
+ Capture thoughts
125
+ </div>
126
+ </div>
127
+ <div className="h-8 w-px bg-white/20" />
128
+ <div className="text-center">
129
+ <div className="text-3xl font-bold text-cyan-300">
130
+ Edit
131
+ </div>
132
+ <div className="text-sm text-white/60">Update notes</div>
133
+ </div>
134
+ <div className="h-8 w-px bg-white/20" />
135
+ <div className="text-center">
136
+ <div className="text-3xl font-bold text-blue-300">
137
+ Organize
138
+ </div>
139
+ <div className="text-sm text-white/60">
140
+ Structure ideas
141
+ </div>
142
+ </div>
143
+ </div>
144
+ </div>
145
+ </div>
146
+ </div>
147
+
148
+ {/* Content */}
149
+ <div className="!mx-auto max-w-7xl !space-y-16 px-6 py-12">
150
+ {/* Quick Usage */}
151
+ <div className="!space-y-8">
152
+ <h2 className="text-center text-3xl font-bold !text-white">
153
+ Quick Start
154
+ </h2>
155
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
156
+ {/* Basic Usage */}
157
+ <div className="!space-y-4">
158
+ <h3 className="text-xl font-semibold !text-indigo-300">
159
+ Basic Usage
160
+ </h3>
161
+ <div className="rounded-lg bg-black/40 p-4">
162
+ <pre className="overflow-x-auto text-sm !text-green-300">
163
+ {`import { FilterBarRowIcon } from "@icons/filter-icon"
164
+
165
+ function FilterButton() {
166
+ return (
167
+ <button
168
+ aria-label="Open filters"
169
+ className="flex items-center gap-2 rounded border border-indigo-500/30 bg-indigo-500/10 px-4 py-2 text-indigo-300 hover:bg-indigo-500/20"
170
+ >
171
+ <FilterBarRowIcon className="h-4 w-4" />
172
+ Filters
173
+ </button>
174
+ )
175
+ }`}
176
+ </pre>
177
+ </div>
178
+ </div>
179
+
180
+ {/* Live Preview */}
181
+ <div className="!space-y-4">
182
+ <h3 className="text-xl font-semibold !text-indigo-300">
183
+ Live Preview
184
+ </h3>
185
+ <div className="flex h-32 items-center justify-center rounded-lg border border-white/10 bg-white/5">
186
+ <button className="flex items-center gap-2 rounded border border-indigo-500/30 bg-indigo-500/10 px-4 py-2 text-indigo-300 hover:bg-indigo-500/20">
187
+ <FilterBarRowIcon className="h-4 w-4" />
188
+ Filters
189
+ </button>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ </div>
194
+
195
+ {/* Props Documentation */}
196
+ <div className="!space-y-8">
197
+ <h2 className="text-center text-3xl font-bold !text-white">
198
+ Props & Configuration
199
+ </h2>
200
+
201
+ <div className="overflow-hidden rounded-lg border border-white/10 bg-white/5">
202
+ <div className="bg-white/5 p-4">
203
+ <h3 className="text-xl font-semibold !text-white">Props</h3>
204
+ </div>
205
+ <table className="!my-0 w-full">
206
+ <thead className="bg-white/5">
207
+ <tr className="border-b border-white/10">
208
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
209
+ Prop
210
+ </th>
211
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
212
+ Type
213
+ </th>
214
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
215
+ Default
216
+ </th>
217
+ <th className="px-6 py-4 text-left text-sm font-semibold !text-white">
218
+ Description
219
+ </th>
220
+ </tr>
221
+ </thead>
222
+ <tbody>
223
+ <tr className="border-b border-white/5">
224
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
225
+ width
226
+ </td>
227
+ <td className="px-6 py-4 text-sm !text-white/70">
228
+ number | string
229
+ </td>
230
+ <td className="px-6 py-4 text-sm !text-white/50">20</td>
231
+ <td className="px-6 py-4 text-sm !text-white/70">
232
+ Width of the icon in pixels
233
+ </td>
234
+ </tr>
235
+ <tr className="border-b border-white/5 !bg-black/10">
236
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
237
+ height
238
+ </td>
239
+ <td className="px-6 py-4 text-sm !text-white/70">
240
+ number | string
241
+ </td>
242
+ <td className="px-6 py-4 text-sm !text-white/50">20</td>
243
+ <td className="px-6 py-4 text-sm !text-white/70">
244
+ Height of the icon in pixels
245
+ </td>
246
+ </tr>
247
+ <tr className="border-b border-white/5">
248
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
249
+ stroke
250
+ </td>
251
+ <td className="px-6 py-4 text-sm !text-white/70">
252
+ string
253
+ </td>
254
+ <td className="px-6 py-4 text-sm !text-white/50">
255
+ currentColor
256
+ </td>
257
+ <td className="px-6 py-4 text-sm !text-white/70">
258
+ Stroke color of the icon lines
259
+ </td>
260
+ </tr>
261
+ <tr className="border-b border-white/5 !bg-black/10">
262
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
263
+ strokeLinecap
264
+ </td>
265
+ <td className="px-6 py-4 text-sm !text-white/70">
266
+ string
267
+ </td>
268
+ <td className="px-6 py-4 text-sm !text-white/50">
269
+ square
270
+ </td>
271
+ <td className="px-6 py-4 text-sm !text-white/70">
272
+ Style of line endings
273
+ </td>
274
+ </tr>
275
+ <tr className="border-b border-white/5">
276
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
277
+ className
278
+ </td>
279
+ <td className="px-6 py-4 text-sm !text-white/70">
280
+ string
281
+ </td>
282
+ <td className="px-6 py-4 text-sm !text-white/50">-</td>
283
+ <td className="px-6 py-4 text-sm !text-white/70">
284
+ CSS classes for styling (use for overrides)
285
+ </td>
286
+ </tr>
287
+ <tr className="!bg-black/10">
288
+ <td className="px-6 py-4 font-mono text-sm !text-indigo-300">
289
+ ...svgProps
290
+ </td>
291
+ <td className="px-6 py-4 text-sm !text-white/70">
292
+ SVGProps
293
+ </td>
294
+ <td className="px-6 py-4 text-sm !text-white/50">-</td>
295
+ <td className="px-6 py-4 text-sm !text-white/70">
296
+ All standard SVG element props
297
+ </td>
298
+ </tr>
299
+ </tbody>
300
+ </table>
301
+ </div>
302
+ </div>
303
+
304
+ {/* Size Variations */}
305
+ <div className="!space-y-8">
306
+ <h2 className="text-center text-3xl font-bold !text-white">
307
+ Size Variations
308
+ </h2>
309
+ <div className="rounded-lg border border-white/10 bg-white/5 p-8">
310
+ <div className="!space-y-6">
311
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2">
312
+ <div className="!space-y-4">
313
+ <h3 className="text-lg font-semibold !text-indigo-300">
314
+ Standard Sizes
315
+ </h3>
316
+ <div className="flex items-end gap-6 rounded-lg bg-black/20 p-6">
317
+ <div className="text-center">
318
+ <FilterBarRowIcon className="!mx-auto mb-2 h-3 w-3 text-indigo-400" />
319
+ <span className="text-xs text-white/60">12px</span>
320
+ </div>
321
+ <div className="text-center">
322
+ <FilterBarRowIcon className="!mx-auto mb-2 h-4 w-4 text-indigo-400" />
323
+ <span className="text-xs text-white/60">16px</span>
324
+ </div>
325
+ <div className="text-center">
326
+ <FilterBarRowIcon className="!mx-auto mb-2 h-5 w-5 text-indigo-400" />
327
+ <span className="text-xs text-white/60">20px</span>
328
+ </div>
329
+ <div className="text-center">
330
+ <FilterBarRowIcon className="!mx-auto mb-2 h-6 w-6 text-indigo-400" />
331
+ <span className="text-xs text-white/60">24px</span>
332
+ </div>
333
+ <div className="text-center">
334
+ <FilterBarRowIcon className="!mx-auto mb-2 h-8 w-8 text-indigo-400" />
335
+ <span className="text-xs text-white/60">32px</span>
336
+ </div>
337
+ <div className="text-center">
338
+ <FilterBarRowIcon className="!mx-auto mb-2 h-12 w-12 text-indigo-400" />
339
+ <span className="text-xs text-white/60">48px</span>
340
+ </div>
341
+ </div>
342
+ </div>
343
+
344
+ <div className="!space-y-4">
345
+ <h3 className="text-lg font-semibold !text-indigo-300">
346
+ Code Example
347
+ </h3>
348
+ <div className="rounded-lg bg-black/40 p-4">
349
+ <pre className="overflow-x-auto text-sm !text-cyan-300">
350
+ {`// Small (16px)
351
+ <FilterBarRowIcon className="h-4 w-4 " />
352
+
353
+ // Medium (24px)
354
+ <FilterBarRowIcon className="h-6 w-6 " />
355
+
356
+ // Large (32px)
357
+ <FilterBarRowIcon className="h-8 w-8 " />
358
+
359
+ // Custom size with props
360
+ <FilterBarRowIcon width={40} height={40} />`}
361
+ </pre>
362
+ </div>
363
+ </div>
364
+ </div>
365
+ </div>
366
+ </div>
367
+ </div>
368
+
369
+ {/* Color Variations */}
370
+ <div className="!space-y-8">
371
+ <h2 className="text-center text-3xl font-bold !text-white">
372
+ Color Variations
373
+ </h2>
374
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
375
+ <div className="!space-y-4">
376
+ <h3 className="text-lg font-semibold !text-indigo-300">
377
+ Semantic Colors
378
+ </h3>
379
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
380
+ <div className="flex items-center gap-4">
381
+ <FilterBarRowIcon className="h-6 w-6 text-indigo-400" />
382
+ <div>
383
+ <div className="text-sm font-medium text-white">
384
+ Primary
385
+ </div>
386
+ <div className="text-xs text-white/60">
387
+ text-indigo-400
388
+ </div>
389
+ </div>
390
+ </div>
391
+ <div className="flex items-center gap-4">
392
+ <FilterBarRowIcon className="h-6 w-6 text-cyan-400" />
393
+ <div>
394
+ <div className="text-sm font-medium text-white">
395
+ Search Active
396
+ </div>
397
+ <div className="text-xs text-white/60">
398
+ text-cyan-400
399
+ </div>
400
+ </div>
401
+ </div>
402
+ <div className="flex items-center gap-4">
403
+ <FilterBarRowIcon className="h-6 w-6 text-gray-400" />
404
+ <div>
405
+ <div className="text-sm font-medium text-white">
406
+ Disabled
407
+ </div>
408
+ <div className="text-xs text-white/60">
409
+ text-gray-400
410
+ </div>
411
+ </div>
412
+ </div>
413
+ <div className="flex items-center gap-4">
414
+ <FilterBarRowIcon className="h-6 w-6 text-blue-400" />
415
+ <div>
416
+ <div className="text-sm font-medium text-white">
417
+ Info
418
+ </div>
419
+ <div className="text-xs text-white/60">
420
+ text-blue-400
421
+ </div>
422
+ </div>
423
+ </div>
424
+ </div>
425
+ </div>
426
+
427
+ <div className="!space-y-4">
428
+ <h3 className="text-lg font-semibold !text-indigo-300">
429
+ Custom Colors
430
+ </h3>
431
+ <div className="rounded-lg bg-black/40 p-4">
432
+ <pre className="overflow-x-auto text-sm !text-green-300">
433
+ {`// Using Tailwind classes with
434
+ <FilterBarRowIcon className="h-6 w-6 text-indigo-400 " />
435
+ <FilterBarRowIcon className="h-6 w-6 text-cyan-500 " />
436
+
437
+ // Using CSS custom properties
438
+ <FilterBarRowIcon
439
+ className="h-6 w-6 "
440
+ style={{ color: 'var(--color-primary)' }}
441
+ />
442
+
443
+ // Direct stroke prop
444
+ <FilterBarRowIcon
445
+ width={24}
446
+ height={24}
447
+ stroke="#3b82f6"
448
+ />`}
449
+ </pre>
450
+ </div>
451
+ </div>
452
+ </div>
453
+ </div>
454
+
455
+ {/* Usage Examples */}
456
+ <div className="!space-y-8">
457
+ <h2 className="text-center text-3xl font-bold !text-white">
458
+ Usage Examples
459
+ </h2>
460
+
461
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
462
+ {/* Filter Trigger Button */}
463
+ <div className="!space-y-4">
464
+ <h3 className="text-lg font-semibold !text-indigo-300">
465
+ Filter Panel Button
466
+ </h3>
467
+ <div className="!space-y-4">
468
+ <div>
469
+ <button className="flex items-center gap-2 rounded-lg border border-indigo-500/30 bg-indigo-500/10 px-4 py-2 text-indigo-200 transition-colors hover:bg-indigo-500/20">
470
+ <FilterBarRowIcon className="h-4 w-4" />
471
+ Open Filters
472
+ </button>
473
+ </div>
474
+ <div className="rounded-lg bg-black/40 p-4">
475
+ <pre className="overflow-x-auto text-sm !text-green-300">
476
+ {`<button className="flex items-center gap-2 bg-indigo-500/10 border border-indigo-500/30 px-4 py-2 rounded-lg">
477
+ <FilterBarRowIcon className="h-4 w-4" />
478
+ Open Filters
479
+ </button>`}
480
+ </pre>
481
+ </div>
482
+ </div>
483
+ </div>
484
+
485
+ {/* Applied Filter Result Row */}
486
+ <div className="!space-y-4">
487
+ <h3 className="text-lg font-semibold !text-indigo-300">
488
+ Filtered Result Row
489
+ </h3>
490
+ <div className="!space-y-4">
491
+ <div className="rounded-lg border border-white/10 bg-white/5 p-4">
492
+ <div className="flex items-center gap-3">
493
+ <FilterBarRowIcon className="h-5 w-5 text-indigo-400" />
494
+ <div className="flex-1">
495
+ <div className="text-sm font-medium text-white">
496
+ Showing results for:{" "}
497
+ <span className="text-indigo-300">
498
+ Category: Design
499
+ </span>
500
+ </div>
501
+ <div className="text-xs text-white/60">
502
+ 3 filters applied
503
+ </div>
504
+ </div>
505
+ </div>
506
+ </div>
507
+ <div className="rounded-lg bg-black/40 p-4">
508
+ <pre className="overflow-x-auto text-sm !text-green-300">
509
+ {`<div className="flex items-center gap-3 p-4 border border-white/10 bg-white/5">
510
+ <FilterBarRowIcon className="h-5 w-5 text-indigo-400" />
511
+ <div className="flex-1">
512
+ <div className="text-sm font-medium text-white">
513
+ Showing results for: Category: Design
514
+ </div>
515
+ <div className="text-xs text-white/60">3 filters applied</div>
516
+ </div>
517
+ </div>`}
518
+ </pre>
519
+ </div>
520
+ </div>
521
+ </div>
522
+
523
+ {/* Empty Filter State */}
524
+ <div className="!space-y-4">
525
+ <h3 className="text-lg font-semibold !text-indigo-300">
526
+ No Results After Filter
527
+ </h3>
528
+ <div className="!space-y-4">
529
+ <div className="flex flex-col items-center justify-center rounded-lg border border-white/10 bg-white/5 p-8">
530
+ <FilterBarRowIcon className="mb-4 h-12 w-12 text-white/30" />
531
+ <h4 className="mb-2 text-lg font-medium !text-white/80">
532
+ No results match your filters
533
+ </h4>
534
+ <p className="text-center text-sm !text-white/50">
535
+ Try removing or adjusting your filters to broaden your
536
+ results.
537
+ </p>
538
+ <button className="mt-4 flex items-center gap-2 rounded-lg border border-indigo-500/30 bg-indigo-500/20 px-4 py-2 text-sm text-indigo-200">
539
+ <FilterBarRowIcon className="h-4 w-4" />
540
+ Reset Filters
541
+ </button>
542
+ </div>
543
+ <div className="rounded-lg bg-black/40 p-4">
544
+ <pre className="overflow-x-auto text-sm !text-green-300">
545
+ {`<div className="flex flex-col items-center p-8 border border-white/10 bg-white/5">
546
+ <FilterBarRowIcon className="h-12 w-12 text-white/30 mb-4" />
547
+ <h4 className="text-lg font-medium text-white/80 mb-2">
548
+ No results match your filters
549
+ </h4>
550
+ <p className="text-sm text-white/50 text-center">
551
+ Try removing or adjusting your filters to broaden your results.
552
+ </p>
553
+ <button className="mt-4 flex items-center gap-2 text-sm">
554
+ <FilterBarRowIcon className="h-4 w-4" />
555
+ Reset Filters
556
+ </button>
557
+ </div>`}
558
+ </pre>
559
+ </div>
560
+ </div>
561
+ </div>
562
+ </div>
563
+ </div>
564
+
565
+ {/* Interactive States */}
566
+ <div className="!space-y-8">
567
+ <h2 className="text-center text-3xl font-bold !text-white">
568
+ Interactive States & Animations
569
+ </h2>
570
+ <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
571
+ <div className="!space-y-4">
572
+ <h3 className="text-lg font-semibold !text-indigo-300">
573
+ Hover & Animation Effects
574
+ </h3>
575
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
576
+ <div className="flex items-center gap-4">
577
+ <FilterBarRowIcon className="h-6 w-6 text-white/60 transition-colors hover:text-indigo-400" />
578
+ <div>
579
+ <div className="text-sm font-medium text-white">
580
+ Color Change
581
+ </div>
582
+ <div className="text-xs text-white/60">
583
+ Hover to see effect
584
+ </div>
585
+ </div>
586
+ </div>
587
+ <div className="flex items-center gap-4">
588
+ <FilterBarRowIcon className="h-6 w-6 text-white transition-transform hover:scale-110" />
589
+ <div>
590
+ <div className="text-sm font-medium text-white">
591
+ Scale Up
592
+ </div>
593
+ <div className="text-xs text-white/60">
594
+ Scale on hover
595
+ </div>
596
+ </div>
597
+ </div>
598
+ <div className="flex items-center gap-4">
599
+ <FilterBarRowIcon className="animate-search-pulse h-6 w-6 text-indigo-400" />
600
+ <div>
601
+ <div className="text-sm font-medium text-white">
602
+ Search Pulse
603
+ </div>
604
+ <div className="text-xs text-white/60">
605
+ Continuous animation
606
+ </div>
607
+ </div>
608
+ </div>
609
+ <div className="flex items-center gap-4">
610
+ <FilterBarRowIcon className="animate-document-slide h-6 w-6 text-cyan-400" />
611
+ <div>
612
+ <div className="text-sm font-medium text-white">
613
+ Document Slide
614
+ </div>
615
+ <div className="text-xs text-white/60">
616
+ Subtle movement
617
+ </div>
618
+ </div>
619
+ </div>
620
+ </div>
621
+ </div>
622
+
623
+ <div className="!space-y-4">
624
+ <h3 className="text-lg font-semibold !text-indigo-300">
625
+ State Examples
626
+ </h3>
627
+ <div className="rounded-lg bg-black/40 p-4">
628
+ <pre className="overflow-x-auto text-sm !text-cyan-300">
629
+ {`// Color change on hover
630
+ <FilterBarRowIcon className="h-6 w-6 text-white/60 transition-colors hover:text-indigo-400 " />
631
+
632
+ // Scale up on hover
633
+ <FilterBarRowIcon className="h-6 w-6 text-white transition-transform hover:scale-110 " />
634
+
635
+ // Loading/searching state
636
+ <FilterBarRowIcon className="h-6 w-6 animate-pulse text-indigo-400 " />
637
+
638
+ // Active search state
639
+ <FilterBarRowIcon className="h-6 w-6 text-cyan-400 animate-search-pulse " />
640
+
641
+ // Disabled state
642
+ <FilterBarRowIcon className="h-6 w-6 text-gray-400 opacity-50 " />`}
643
+ </pre>
644
+ </div>
645
+ </div>
646
+ </div>
647
+ </div>
648
+
649
+ {/* Accessibility */}
650
+ <div className="!space-y-8">
651
+ <h2 className="text-center text-3xl font-bold !text-white">
652
+ Accessibility Features
653
+ </h2>
654
+ <div className="grid grid-cols-1 gap-8 md:grid-cols-2">
655
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
656
+ <h3 className="text-lg font-semibold !text-green-300">
657
+ ✅ Built-in Features
658
+ </h3>
659
+ <ul className="!space-y-2 text-sm !text-white/70">
660
+ <li className="!text-white/70">
661
+ Uses Radix UI AccessibleIcon wrapper
662
+ </li>
663
+ <li className="!text-white/70">
664
+ Provides screen reader label "Page Search icon"
665
+ </li>
666
+ <li className="!text-white/70">
667
+ Supports keyboard navigation when interactive
668
+ </li>
669
+ <li className="!text-white/70">
670
+ Maintains proper color contrast ratios
671
+ </li>
672
+ <li className="!text-white/70">
673
+ Scales with user's font size preferences
674
+ </li>
675
+ </ul>
676
+ </div>
677
+
678
+ <div className="!space-y-4 rounded-lg border border-white/10 bg-white/5 p-6">
679
+ <h3 className="text-lg font-semibold !text-indigo-300">
680
+ 💡 Best Practices
681
+ </h3>
682
+ <ul className="!space-y-2 text-sm text-white/70">
683
+ <li className="!text-white/70">
684
+ Always provide descriptive labels for search
685
+ functionality
686
+ </li>
687
+ <li className="!text-white/70">
688
+ Use consistent placement in search interfaces
689
+ </li>
690
+ <li className="!text-white/70">
691
+ Ensure sufficient click/touch target sizes
692
+ </li>
693
+ <li className="!text-white/70">
694
+ Add focus states for keyboard navigation
695
+ </li>
696
+ <li className="!text-white/70">
697
+ Consider motion sensitivity for search animations
698
+ </li>
699
+ </ul>
700
+ </div>
701
+ </div>
702
+
703
+ <div className="rounded-lg border border-white/10 bg-white/5 p-6">
704
+ <h3 className="mb-4 text-lg font-semibold !text-purple-300">
705
+ Custom Accessibility Implementation
706
+ </h3>
707
+ <div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
708
+ {/* Code Example Block */}
709
+ <div className="rounded-lg bg-black/40 p-4">
710
+ <pre className="overflow-x-auto text-sm !text-cyan-300">
711
+ {`// Filter toggle button with ARIA
712
+ <button
713
+ aria-label="Toggle filter panel"
714
+ aria-pressed={filtersOpen}
715
+ className="flex items-center gap-2 p-2"
716
+ >
717
+ <FilterBarRowIcon className="h-4 w-4" />
718
+ <span className="sr-only">Open Filters</span>
719
+ </button>
720
+
721
+ // Filter group with description
722
+ <fieldset aria-labelledby="filter-heading" className="space-y-2">
723
+ <legend id="filter-heading" className="sr-only">Filter Options</legend>
724
+ <div>
725
+ <label className="inline-flex items-center gap-2">
726
+ <input type="checkbox" aria-describedby="filter-desc" />
727
+ Design
728
+ </label>
729
+ </div>
730
+ <div>
731
+ <label className="inline-flex items-center gap-2">
732
+ <input type="checkbox" />
733
+ Development
734
+ </label>
735
+ </div>
736
+ </fieldset>
737
+ <p id="filter-desc" className="sr-only">
738
+ Choose one or more categories to filter the results
739
+ </p>`}
740
+ </pre>
741
+ </div>
742
+
743
+ {/* Accessibility Note */}
744
+ <div className="!space-y-4">
745
+ <p className="text-sm !text-white/70">
746
+ When using <code>FilterBarRowIcon</code> for toggling or
747
+ displaying filters, ensure ARIA labels clearly explain
748
+ what will be shown or changed. Group filters with
749
+ semantic roles for screen reader clarity.
750
+ </p>
751
+ <div className="rounded-lg border border-indigo-500/20 bg-indigo-500/10 p-4">
752
+ <div className="flex items-center gap-2 text-sm text-indigo-200">
753
+ <FilterBarRowIcon className="h-4 w-4" />
754
+ <span>
755
+ Use <code>aria-pressed</code> or{" "}
756
+ <code>aria-expanded</code> for toggles and{" "}
757
+ <code>legend</code>/<code>fieldset</code> for
758
+ grouped filters.
759
+ </span>
760
+ </div>
761
+ </div>
762
+ </div>
763
+ </div>
764
+ </div>
765
+ </div>
766
+
767
+ {/* Related Icons */}
768
+ <div className="!space-y-8">
769
+ <h2 className="text-center text-3xl font-bold !text-white">
770
+ Related Icons
771
+ </h2>
772
+ <div className="grid grid-cols-2 gap-6 md:grid-cols-4">
773
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
774
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-blue-500/20">
775
+ <span className="text-2xl">🔍</span>
776
+ </div>
777
+ <div>
778
+ <div className="font-medium text-white">SearchIcon</div>
779
+ <div className="text-xs text-white/60">
780
+ General search
781
+ </div>
782
+ </div>
783
+ </div>
784
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
785
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-purple-500/20">
786
+ <span className="text-2xl">📄</span>
787
+ </div>
788
+ <div>
789
+ <div className="font-medium text-white">DocumentIcon</div>
790
+ <div className="text-xs text-white/60">Document view</div>
791
+ </div>
792
+ </div>
793
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
794
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-cyan-500/20">
795
+ <span className="text-2xl">🗂️</span>
796
+ </div>
797
+ <div>
798
+ <div className="font-medium text-white">FolderIcon</div>
799
+ <div className="text-xs text-white/60">File browsing</div>
800
+ </div>
801
+ </div>
802
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4 text-center">
803
+ <div className="!mx-auto flex h-12 w-12 items-center justify-center rounded-lg bg-green-500/20">
804
+ <span className="text-2xl">🔎</span>
805
+ </div>
806
+ <div>
807
+ <div className="font-medium text-white">FilterIcon</div>
808
+ <div className="text-xs text-white/60">
809
+ Content filtering
810
+ </div>
811
+ </div>
812
+ </div>
813
+ </div>
814
+ </div>
815
+ </div>
816
+
817
+ {/* Footer */}
818
+ <div className="border-t border-white/10 bg-black/20 backdrop-blur-xl">
819
+ <div className="!mx-auto max-w-7xl px-6 py-8">
820
+ <div className="!space-y-4 text-center">
821
+ <p className="!text-white/60">
822
+ FilterBarRowIcon is part of the Aural UI icon library, built
823
+ for document search, content discovery, and page navigation
824
+ functionality.
825
+ </p>
826
+ <p className="text-sm !text-white/40">
827
+ All icons use Radix UI's AccessibleIcon for screen reader
828
+ compatibility and follow WCAG guidelines for search
829
+ interfaces.
830
+ </p>
831
+ </div>
832
+ </div>
833
+ </div>
834
+ </div>
835
+ </>
836
+ ),
837
+ },
838
+ },
839
+ tags: ["autodocs"],
840
+ argTypes: {
841
+ width: {
842
+ control: { type: "range", min: 8, max: 96, step: 2 },
843
+ description: "Width of the icon in pixels",
844
+ },
845
+ height: {
846
+ control: { type: "range", min: 8, max: 96, step: 2 },
847
+ description: "Height of the icon in pixels",
848
+ },
849
+ stroke: {
850
+ control: "color",
851
+ description: "Stroke color of the icon lines",
852
+ },
853
+ strokeLinecap: {
854
+ control: "select",
855
+ options: ["butt", "round", "square"],
856
+ description: "Style of line endings",
857
+ },
858
+ className: {
859
+ control: "text",
860
+ description: "CSS classes for styling (use for overrides)",
861
+ },
862
+ },
863
+ }
864
+
865
+ export default meta
866
+ type Story = StoryObj<typeof FilterBarRowIcon>
867
+
868
+ // Story parameters for consistent dark theme
869
+ const storyParameters = {
870
+ backgrounds: {
871
+ default: "dark",
872
+ values: [
873
+ { name: "dark", value: "#0a0a0a" },
874
+ { name: "darker", value: "#000000" },
875
+ ],
876
+ },
877
+ }
878
+
879
+ export const Default: Story = {
880
+ args: {
881
+ width: 24,
882
+ height: 24,
883
+ className: "text-indigo-400 ",
884
+ },
885
+ parameters: storyParameters,
886
+ render: (args) => (
887
+ <div className="flex h-32 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
888
+ <FilterBarRowIcon {...args} />
889
+ </div>
890
+ ),
891
+ }
892
+
893
+ export const SizeVariations: Story = {
894
+ parameters: {
895
+ ...storyParameters,
896
+ docs: {
897
+ description: {
898
+ story:
899
+ "FilterBarRowIcon in different sizes, from small search inputs to large interface elements.",
900
+ },
901
+ },
902
+ },
903
+ render: () => (
904
+ <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">
905
+ <div className="text-center">
906
+ <FilterBarRowIcon className="!mx-auto mb-2 h-3 w-3 text-indigo-400" />
907
+ <span className="text-xs text-white/60">12px</span>
908
+ </div>
909
+ <div className="text-center">
910
+ <FilterBarRowIcon className="!mx-auto mb-2 h-4 w-4 text-indigo-400" />
911
+ <span className="text-xs text-white/60">16px</span>
912
+ </div>
913
+ <div className="text-center">
914
+ <FilterBarRowIcon className="!mx-auto mb-2 h-5 w-5 text-indigo-400" />
915
+ <span className="text-xs text-white/60">20px</span>
916
+ </div>
917
+ <div className="text-center">
918
+ <FilterBarRowIcon className="!mx-auto mb-2 h-6 w-6 text-indigo-400" />
919
+ <span className="text-xs text-white/60">24px</span>
920
+ </div>
921
+ <div className="text-center">
922
+ <FilterBarRowIcon className="!mx-auto mb-2 h-8 w-8 text-indigo-400" />
923
+ <span className="text-xs text-white/60">32px</span>
924
+ </div>
925
+ <div className="text-center">
926
+ <FilterBarRowIcon className="!mx-auto mb-2 h-12 w-12 text-indigo-400" />
927
+ <span className="text-xs text-white/60">48px</span>
928
+ </div>
929
+ </div>
930
+ ),
931
+ }
932
+
933
+ export const ColorVariations: Story = {
934
+ parameters: {
935
+ ...storyParameters,
936
+ docs: {
937
+ description: {
938
+ story:
939
+ "FilterBarRowIcon in different colors for various search states and contexts.",
940
+ },
941
+ },
942
+ },
943
+ render: () => (
944
+ <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">
945
+ <div className="text-center">
946
+ <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">
947
+ <FilterBarRowIcon className="h-8 w-8 text-indigo-400" />
948
+ </div>
949
+ <div className="text-sm font-medium text-white">Primary</div>
950
+ <div className="text-xs text-indigo-400">text-indigo-400</div>
951
+ </div>
952
+ <div className="text-center">
953
+ <div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-cyan-500/30 bg-cyan-500/20">
954
+ <FilterBarRowIcon className="h-8 w-8 text-cyan-400" />
955
+ </div>
956
+ <div className="text-sm font-medium text-white">Active</div>
957
+ <div className="text-xs text-cyan-400">text-cyan-400</div>
958
+ </div>
959
+ <div className="text-center">
960
+ <div className="!mx-auto mb-3 flex h-16 w-16 items-center justify-center rounded-lg border border-gray-500/30 bg-gray-500/20">
961
+ <FilterBarRowIcon className="h-8 w-8 text-gray-400" />
962
+ </div>
963
+ <div className="text-sm font-medium text-white">Disabled</div>
964
+ <div className="text-xs text-gray-400">text-gray-400</div>
965
+ </div>
966
+ <div className="text-center">
967
+ <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">
968
+ <FilterBarRowIcon className="h-8 w-8 text-blue-400" />
969
+ </div>
970
+ <div className="text-sm font-medium text-white">Info</div>
971
+ <div className="text-xs text-blue-400">text-blue-400</div>
972
+ </div>
973
+ </div>
974
+ ),
975
+ }
976
+
977
+ export const UsageExamples: Story = {
978
+ parameters: {
979
+ ...storyParameters,
980
+ docs: {
981
+ description: {
982
+ story:
983
+ "Real-world usage examples showing FilterBarRowIcon used in contexts like note-taking, editing annotations, and document preparation interfaces.",
984
+ },
985
+ },
986
+ },
987
+ render: () => (
988
+ <div className="min-h-dvh !space-y-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
989
+ {/* Note Editor Toolbar */}
990
+ <div className="!space-y-2">
991
+ <h3 className="text-sm font-medium text-white">Note Editor Toolbar</h3>
992
+ <div className="flex gap-4">
993
+ <button className="flex items-center gap-2 rounded-lg border border-indigo-500/30 bg-indigo-500/20 px-4 py-2 text-indigo-200 transition-colors hover:bg-indigo-500/30">
994
+ <FilterBarRowIcon className="h-4 w-4" />
995
+ New Note
996
+ </button>
997
+ <button className="flex items-center gap-2 rounded-lg border border-green-500/30 bg-green-500/20 px-4 py-2 text-green-200 transition-colors hover:bg-green-500/30">
998
+ <FilterBarRowIcon className="h-4 w-4" />
999
+ Edit Note
1000
+ </button>
1001
+ </div>
1002
+ </div>
1003
+
1004
+ {/* Recent Notes List */}
1005
+ <div className="!space-y-2">
1006
+ <h3 className="text-sm font-medium text-white">Recent Notes</h3>
1007
+ <div className="!space-y-3 rounded-lg border border-white/10 bg-white/5 p-4">
1008
+ {[
1009
+ { title: "Meeting Notes", date: "Jun 25, 2025" },
1010
+ { title: "Weekly Plan", date: "Jun 23, 2025" },
1011
+ { title: "Project Draft", date: "Jun 20, 2025" },
1012
+ ].map((note, index) => (
1013
+ <div
1014
+ key={index}
1015
+ className="flex items-center gap-3 rounded border border-white/10 bg-white/5 p-3"
1016
+ >
1017
+ <FilterBarRowIcon className="h-5 w-5 text-indigo-400" />
1018
+ <div className="flex-1">
1019
+ <div className="text-sm font-medium text-white">
1020
+ {note.title}
1021
+ </div>
1022
+ <div className="text-xs text-white/60">{note.date}</div>
1023
+ </div>
1024
+ </div>
1025
+ ))}
1026
+ </div>
1027
+ </div>
1028
+
1029
+ {/* Annotate / Comment Actions */}
1030
+ <div className="!space-y-2">
1031
+ <h3 className="text-sm font-medium text-white">Annotation Actions</h3>
1032
+ <div className="flex gap-4">
1033
+ <button className="flex items-center gap-2 rounded-lg border border-yellow-500/30 bg-yellow-500/20 px-4 py-2 text-yellow-200 transition-colors hover:bg-yellow-500/30">
1034
+ <FilterBarRowIcon className="h-4 w-4" />
1035
+ Add Comment
1036
+ </button>
1037
+ <button className="flex items-center gap-2 rounded-lg border border-pink-500/30 bg-pink-500/20 px-4 py-2 text-pink-200 transition-colors hover:bg-pink-500/30">
1038
+ <FilterBarRowIcon className="h-4 w-4" />
1039
+ Annotate Page
1040
+ </button>
1041
+ </div>
1042
+ </div>
1043
+ </div>
1044
+ ),
1045
+ }
1046
+
1047
+ export const InteractiveStates: Story = {
1048
+ parameters: {
1049
+ ...storyParameters,
1050
+ docs: {
1051
+ description: {
1052
+ story:
1053
+ "Interactive states showing hover effects, animations, and different search states.",
1054
+ },
1055
+ },
1056
+ },
1057
+ render: () => (
1058
+ <div className="min-h-dvh !space-y-8 rounded-lg bg-gradient-to-br from-gray-900 to-gray-800 p-8">
1059
+ <div className="!space-y-4">
1060
+ <h3 className="text-sm font-medium text-white/70">
1061
+ Hover & Animation Effects
1062
+ </h3>
1063
+ <div className="flex gap-8">
1064
+ <div className="flex flex-col items-center gap-2">
1065
+ <FilterBarRowIcon className="h-8 w-8 text-white/60 transition-colors hover:text-indigo-400" />
1066
+ <span className="text-xs text-white/60">Color Change</span>
1067
+ </div>
1068
+ <div className="flex flex-col items-center gap-2">
1069
+ <FilterBarRowIcon className="h-8 w-8 text-white transition-transform hover:scale-110" />
1070
+ <span className="text-xs text-white/60">Scale Up</span>
1071
+ </div>
1072
+ <div className="flex flex-col items-center gap-2">
1073
+ <FilterBarRowIcon className="animate-search-pulse h-8 w-8 text-indigo-400" />
1074
+ <span className="text-xs text-white/60">Search Pulse</span>
1075
+ </div>
1076
+ <div className="flex flex-col items-center gap-2">
1077
+ <FilterBarRowIcon className="animate-document-slide h-8 w-8 text-cyan-400" />
1078
+ <span className="text-xs text-white/60">Document Slide</span>
1079
+ </div>
1080
+ </div>
1081
+ </div>
1082
+ </div>
1083
+ ),
1084
+ }
1085
+
1086
+ export const Playground: Story = {
1087
+ parameters: {
1088
+ ...storyParameters,
1089
+ docs: {
1090
+ description: {
1091
+ story:
1092
+ "Interactive playground to experiment with different FilterBarRowIcon configurations.",
1093
+ },
1094
+ },
1095
+ },
1096
+ args: {
1097
+ width: 32,
1098
+ height: 32,
1099
+ className: "text-indigo-400 ",
1100
+ strokeLinecap: "square",
1101
+ },
1102
+ render: (args) => (
1103
+ <div className="flex h-64 min-h-dvh items-center justify-center rounded-lg bg-gradient-to-br from-gray-900 to-gray-800">
1104
+ <div className="rounded-lg border border-white/10 bg-white/5 p-8">
1105
+ <FilterBarRowIcon {...args} />
1106
+ </div>
1107
+ </div>
1108
+ ),
1109
+ }