aural-ui 2.0.1 → 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.
@@ -227,7 +227,7 @@ function DropdownMenuRadioItem({
227
227
  data-slot="dropdown-menu-radio-item"
228
228
  className={cn(
229
229
  // Base styles
230
- "rounded-fm-s relative flex cursor-default items-center gap-2 px-4 py-3 pl-8",
230
+ "rounded-fm-s relative flex cursor-default items-center gap-2 px-4 py-3",
231
231
  "text-fm-primary font-fm-text leading-fm-lg [font-size:var(--text-fm-lg)] tracking-wide",
232
232
  "transition-colors duration-200 outline-none select-none",
233
233
  // Hover and focus states
@@ -245,12 +245,7 @@ function DropdownMenuRadioItem({
245
245
  >
246
246
  <span className="pointer-events-none absolute left-4 flex size-3.5 items-center justify-center">
247
247
  <DropdownMenuPrimitive.ItemIndicator>
248
- <TickIcon
249
- className={cn(
250
- "text-fm-icon-active size-2 fill-current",
251
- classes?.indicator
252
- )}
253
- />
248
+ <TickIcon className={cn("text-fm-icon-active", classes?.indicator)} />
254
249
  </DropdownMenuPrimitive.ItemIndicator>
255
250
  </span>
256
251
  {children}
@@ -301,7 +301,9 @@ const closeIconVariants = cva(
301
301
  interface SheetContentProps
302
302
  extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,
303
303
  VariantProps<typeof sheetVariants>,
304
- ISheetOverlay {}
304
+ ISheetOverlay {
305
+ container: HTMLElement | null
306
+ }
305
307
 
306
308
  const SheetContent = React.forwardRef<
307
309
  React.ElementRef<typeof SheetPrimitive.Content>,
@@ -317,11 +319,12 @@ const SheetContent = React.forwardRef<
317
319
  noise,
318
320
  children,
319
321
  classes,
322
+ container,
320
323
  ...props
321
324
  },
322
325
  ref
323
326
  ) => (
324
- <SheetPortal>
327
+ <SheetPortal container={container}>
325
328
  <SheetOverlay
326
329
  opacity={opacity}
327
330
  glass={glass}
@@ -313,12 +313,23 @@ export const Icons: React.FC = () => {
313
313
  "content",
314
314
  "status",
315
315
  "social",
316
+ "ai",
317
+ "audio",
318
+ "design",
319
+ "text",
320
+ "system",
316
321
  ]
317
322
 
318
- // Get all icon components and categorize them
323
+ // Get all icon components from index and categorize them
319
324
  const allIcons = useMemo(() => {
320
325
  return Object.entries(IconSet)
321
- .filter(([name]) => name.endsWith("Icon"))
326
+ .filter(([, component]) => {
327
+ // Only include components that are likely to be React icon components
328
+ return (
329
+ typeof component === "function" ||
330
+ (typeof component === "object" && component !== null)
331
+ )
332
+ })
322
333
  .map(([name, component]) => ({
323
334
  name,
324
335
  component: component as React.ComponentType<
@@ -330,66 +341,186 @@ export const Icons: React.FC = () => {
330
341
  .sort((a, b) => a.name.localeCompare(b.name))
331
342
  }, [])
332
343
 
333
- // Categorize icons based on their names
344
+ // Enhanced categorize function based on icon names from index
334
345
  function categorizeIcon(iconName: string): string {
335
346
  const name = iconName.toLowerCase()
336
347
 
337
- if (name.includes("chevron") || name.includes("arrow")) {
348
+ // AI related icons
349
+ if (
350
+ name.includes("ai") ||
351
+ name.includes("sparkle") ||
352
+ name.includes("magic")
353
+ ) {
354
+ return "ai"
355
+ }
356
+
357
+ // Navigation icons
358
+ if (
359
+ name.includes("chevron") ||
360
+ name.includes("arrow") ||
361
+ name.includes("angle") ||
362
+ name.includes("corner")
363
+ ) {
338
364
  return "navigation"
339
365
  }
366
+
367
+ // Action icons
340
368
  if (
341
369
  name.includes("cross") ||
342
370
  name.includes("tick") ||
343
371
  name.includes("plus") ||
344
372
  name.includes("edit") ||
345
- name.includes("trash")
373
+ name.includes("trash") ||
374
+ name.includes("upload") ||
375
+ name.includes("import") ||
376
+ name.includes("pencil")
346
377
  ) {
347
378
  return "actions"
348
379
  }
380
+
381
+ // Interface icons
349
382
  if (
350
383
  name.includes("eye") ||
351
384
  name.includes("search") ||
352
385
  name.includes("command") ||
353
- name.includes("menu")
386
+ name.includes("menu") ||
387
+ name.includes("setting") ||
388
+ name.includes("grip") ||
389
+ name.includes("move") ||
390
+ name.includes("layout")
354
391
  ) {
355
392
  return "interface"
356
393
  }
394
+
395
+ // Content icons
357
396
  if (
358
397
  name.includes("file") ||
359
398
  name.includes("image") ||
360
399
  name.includes("bubble") ||
361
- name.includes("import")
400
+ name.includes("message") ||
401
+ name.includes("book") ||
402
+ name.includes("page")
362
403
  ) {
363
404
  return "content"
364
405
  }
406
+
407
+ // Status icons
365
408
  if (
366
409
  name.includes("alert") ||
367
410
  name.includes("maintenance") ||
368
- name.includes("bulb")
411
+ name.includes("bulb") ||
412
+ name.includes("spinner") ||
413
+ name.includes("check") ||
414
+ name.includes("circle")
369
415
  ) {
370
416
  return "status"
371
417
  }
372
418
 
419
+ // Audio icons
420
+ if (
421
+ name.includes("audio") ||
422
+ name.includes("musical") ||
423
+ name.includes("note")
424
+ ) {
425
+ return "audio"
426
+ }
427
+
428
+ // Design icons
429
+ if (
430
+ name.includes("art") ||
431
+ name.includes("paint") ||
432
+ name.includes("color") ||
433
+ name.includes("feature") ||
434
+ name.includes("board")
435
+ ) {
436
+ return "design"
437
+ }
438
+
439
+ // Text icons
440
+ if (
441
+ name.includes("text") ||
442
+ name.includes("capital") ||
443
+ name.includes("letter") ||
444
+ name.includes("indicator")
445
+ ) {
446
+ return "text"
447
+ }
448
+
449
+ // System icons
450
+ if (
451
+ name.includes("head") ||
452
+ name.includes("site") ||
453
+ name.includes("logo")
454
+ ) {
455
+ return "system"
456
+ }
457
+
373
458
  return "interface"
374
459
  }
375
460
 
376
- // Get icon description based on name
461
+ // Enhanced icon description function
377
462
  function getIconDescription(iconName: string): string {
378
463
  const descriptions: Record<string, string> = {
379
- ChevronRightIcon: "Navigate forward or expand",
380
- ChevronLeftIcon: "Navigate back or collapse",
464
+ AiAvatarIcon: "AI avatar representation",
465
+ AlertIcon: "Warning or attention indicator",
466
+ AngleDownIcon: "Dropdown or expand indicator",
467
+ ArrowBoxLeftIcon: "Navigate or move left",
468
+ ArrowCornerUpLeftIcon: "Corner navigation up-left",
469
+ ArrowCornerUpRightIcon: "Corner navigation up-right",
470
+ ArrowRightIcon: "Navigate or move right",
471
+ ArrowRightUpIcon: "Navigate up-right",
472
+ ArtBoardIcon: "Design canvas or artboard",
473
+ AudioBarIcon: "Audio level indicator",
474
+ BubbleCheckIcon: "Message with confirmation",
475
+ BubbleCrossedIcon: "Message with error",
476
+ BubbleSparkleIcon: "Enhanced or special message",
477
+ CapitalALetterIcon: "Text formatting indicator",
478
+ ChevronDoubleLeftIcon: "Fast backward navigation",
479
+ ChevronDoubleRightIcon: "Fast forward navigation",
480
+ ChevronDownIcon: "Expand or dropdown",
481
+ ChevronLeftIcon: "Navigate back",
482
+ ChevronRightIcon: "Navigate forward",
483
+ ChevronUpIcon: "Collapse or up",
484
+ CommandIcon: "Keyboard shortcut indicator",
485
+ CrossCircleIcon: "Error or cancel in circle",
381
486
  CrossIcon: "Close or cancel action",
382
- TickIcon: "Confirm or success state",
383
- SearchIcon: "Search functionality",
487
+ EditBigIcon: "Edit or modify (large)",
384
488
  EyeOpenIcon: "Show or visible state",
385
489
  EyeCloseIcon: "Hide or invisible state",
386
- AlertIcon: "Warning or attention",
490
+ FeatureShineIcon: "Highlight or featured item",
491
+ FileChartIcon: "Chart or analytics file",
492
+ FileTextIcon: "Text document",
493
+ GripVerticalIcon: "Drag handle vertical",
494
+ HeadIcon: "User profile or person",
495
+ ImageIcon: "Image or media content",
496
+ ImportFolderIcon: "Import files or folder",
497
+ LayoutColumnIcon: "Column layout",
498
+ LayoutLeftIcon: "Left sidebar layout",
499
+ LayoutRightIcon: "Right sidebar layout",
500
+ LightBulbSimpleIcon: "Idea or suggestion",
501
+ MagicBookIcon: "Documentation or guide",
502
+ MaintenanceIcon: "System maintenance",
503
+ MessageIcon: "Communication or chat",
504
+ MoveHorizontalIcon: "Resize horizontally",
505
+ MoveVerticalIcon: "Resize vertically",
506
+ MusicalNoteIcon: "Audio or music",
507
+ PageSearchIcon: "Search within page",
508
+ PaintRollIcon: "Theming or styling",
509
+ PencilIcon: "Edit or write",
387
510
  PlusIcon: "Add or create new",
388
- EditIcon: "Edit or modify",
511
+ SearchIcon: "Search functionality",
512
+ SettingIcon: "Configuration or settings",
513
+ SiteLogoIcon: "Brand or logo",
514
+ SparklesSoftIcon: "Enhancement or magic",
515
+ SpinnerGradientIcon: "Loading (gradient)",
516
+ SpinnerSolidIcon: "Loading (solid)",
517
+ SpinnerSolidNeutralIcon: "Loading (neutral)",
518
+ TextColorIcon: "Text color formatting",
519
+ TextIndicatorIcon: "Text formatting indicator",
520
+ TickCircleIcon: "Success or confirmation in circle",
521
+ TickIcon: "Confirm or success state",
389
522
  TrashIcon: "Delete or remove",
390
- ImageIcon: "Image content",
391
- FileChartIcon: "Chart or analytics",
392
- CommandIcon: "Keyboard shortcut",
523
+ UploadIcon: "Upload files",
393
524
  VerticalMenuIcon: "More options menu",
394
525
  }
395
526
 
@@ -462,7 +593,7 @@ export const Icons: React.FC = () => {
462
593
  <div className="flex items-center justify-center gap-8 pt-8">
463
594
  <div className="text-center">
464
595
  <div className="text-3xl font-bold text-purple-300">
465
- {totalIcons}+
596
+ {totalIcons}
466
597
  </div>
467
598
  <div className="text-sm text-white/60">Total icons</div>
468
599
  </div>
@@ -629,6 +760,11 @@ export const Icons: React.FC = () => {
629
760
  content: "Icons for content types like files, images, and media.",
630
761
  status: "Icons for states, alerts, and status indicators.",
631
762
  social: "Icons for social features and sharing functionality.",
763
+ ai: "Icons related to artificial intelligence and smart features.",
764
+ audio: "Icons for audio, music, and sound-related features.",
765
+ design: "Icons for design, styling, and creative tools.",
766
+ text: "Icons for text formatting and typography.",
767
+ system: "Icons for system-level features and branding.",
632
768
  }
633
769
 
634
770
  return (
@@ -645,66 +781,6 @@ export const Icons: React.FC = () => {
645
781
  </IconCategory>
646
782
  )
647
783
  })}
648
-
649
- {/* Featured Icons Section - only show when no filters applied */}
650
- {selectedCategory === "all" && !searchTerm && (
651
- <IconCategory category="Featured Icons">
652
- <div className="grid grid-cols-1 gap-8 lg:grid-cols-2">
653
- {/* Most Used Icons */}
654
- <div className="space-y-6">
655
- <h3 className="text-xl font-bold text-white">Most Used</h3>
656
- <div className="grid grid-cols-4 gap-4">
657
- {allIcons
658
- .filter((icon) =>
659
- [
660
- "ChevronRightIcon",
661
- "ChevronLeftIcon",
662
- "CrossIcon",
663
- "TickIcon",
664
- "SearchIcon",
665
- "PlusIcon",
666
- "EditIcon",
667
- "TrashIcon",
668
- ].includes(icon.name)
669
- )
670
- .map(({ name, component: IconComponent }) => (
671
- <div
672
- key={name}
673
- onClick={() => handleIconClick(name, IconComponent)}
674
- className="group cursor-pointer rounded-lg border border-white/10 bg-white/5 p-4 text-center transition-all hover:scale-105 hover:bg-white/10"
675
- >
676
- <IconComponent className="mx-auto mb-2 h-8 w-8 text-white transition-colors group-hover:text-blue-400" />
677
- <p className="text-xs text-white/70">
678
- {name.replace("Icon", "")}
679
- </p>
680
- </div>
681
- ))}
682
- </div>
683
- </div>
684
-
685
- {/* Recently Added */}
686
- <div className="space-y-6">
687
- <h3 className="text-xl font-bold text-white">Recently Added</h3>
688
- <div className="grid grid-cols-4 gap-4">
689
- {allIcons
690
- .slice(-8)
691
- .map(({ name, component: IconComponent }) => (
692
- <div
693
- key={name}
694
- onClick={() => handleIconClick(name, IconComponent)}
695
- className="group cursor-pointer rounded-lg border border-white/10 bg-white/5 p-4 text-center transition-all hover:scale-105 hover:bg-white/10"
696
- >
697
- <IconComponent className="mx-auto mb-2 h-8 w-8 text-white transition-colors group-hover:text-blue-400" />
698
- <p className="text-xs text-white/70">
699
- {name.replace("Icon", "")}
700
- </p>
701
- </div>
702
- ))}
703
- </div>
704
- </div>
705
- </div>
706
- </IconCategory>
707
- )}
708
784
  </div>
709
785
 
710
786
  {/* Footer */}