@almadar/ui 5.16.4 → 5.17.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 (106) hide show
  1. package/dist/avl/index.cjs +191 -153
  2. package/dist/avl/index.js +191 -153
  3. package/dist/components/atoms/Avatar.d.ts +4 -2
  4. package/dist/components/atoms/ConditionalWrapper.d.ts +2 -2
  5. package/dist/components/atoms/Icon.d.ts +6 -2
  6. package/dist/components/atoms/Input.d.ts +3 -2
  7. package/dist/components/atoms/LawReferenceTooltip.d.ts +2 -2
  8. package/dist/components/atoms/game/MiniMap.d.ts +15 -17
  9. package/dist/components/atoms/index.d.ts +1 -0
  10. package/dist/components/atoms/types.d.ts +40 -0
  11. package/dist/components/index.cjs +191 -153
  12. package/dist/components/index.js +191 -153
  13. package/dist/components/molecules/CTABanner.d.ts +3 -8
  14. package/dist/components/molecules/CalendarGrid.d.ts +2 -2
  15. package/dist/components/molecules/CommunityLinks.d.ts +15 -12
  16. package/dist/components/molecules/DataGrid.d.ts +2 -1
  17. package/dist/components/molecules/DataList.d.ts +12 -11
  18. package/dist/components/molecules/GraphView.d.ts +2 -2
  19. package/dist/components/molecules/HeroSection.d.ts +4 -12
  20. package/dist/components/molecules/MapView.d.ts +2 -2
  21. package/dist/components/molecules/MarketingFooter.d.ts +6 -5
  22. package/dist/components/molecules/Meter.d.ts +2 -1
  23. package/dist/components/molecules/OptionConstraintGroup.d.ts +5 -3
  24. package/dist/components/molecules/PricingCard.d.ts +2 -4
  25. package/dist/components/molecules/QrScanner.d.ts +2 -2
  26. package/dist/components/molecules/RepeatableFormSection.d.ts +2 -2
  27. package/dist/components/molecules/ShowcaseCard.d.ts +2 -4
  28. package/dist/components/molecules/SplitSection.d.ts +2 -4
  29. package/dist/components/molecules/StatDisplay.d.ts +2 -1
  30. package/dist/components/molecules/StatsGrid.d.ts +5 -4
  31. package/dist/components/molecules/TableView.d.ts +2 -1
  32. package/dist/components/molecules/ViolationAlert.d.ts +2 -2
  33. package/dist/components/molecules/game/CraftingRecipe.d.ts +11 -7
  34. package/dist/components/molecules/game/DialogueBox.d.ts +2 -2
  35. package/dist/components/molecules/game/HealthPanel.d.ts +6 -5
  36. package/dist/components/molecules/game/IsometricCanvas.d.ts +9 -13
  37. package/dist/components/organisms/Chart.d.ts +2 -1
  38. package/dist/components/organisms/CodeViewer.d.ts +8 -6
  39. package/dist/components/organisms/ComponentPatterns.d.ts +2 -1
  40. package/dist/components/organisms/ConfirmDialog.d.ts +2 -1
  41. package/dist/components/organisms/CustomPattern.d.ts +2 -1
  42. package/dist/components/organisms/DataTable.d.ts +6 -5
  43. package/dist/components/organisms/DetailPanel.d.ts +5 -4
  44. package/dist/components/organisms/DocumentViewer.d.ts +9 -7
  45. package/dist/components/organisms/DrawerSlot.d.ts +2 -1
  46. package/dist/components/organisms/Form.d.ts +5 -4
  47. package/dist/components/organisms/GraphCanvas.d.ts +2 -1
  48. package/dist/components/organisms/Header.d.ts +17 -14
  49. package/dist/components/organisms/JazariStateMachine.d.ts +2 -1
  50. package/dist/components/organisms/LayoutPatterns.d.ts +4 -3
  51. package/dist/components/organisms/List.d.ts +2 -2
  52. package/dist/components/organisms/Meter.d.ts +2 -1
  53. package/dist/components/organisms/ModalSlot.d.ts +2 -1
  54. package/dist/components/organisms/Navigation.d.ts +2 -1
  55. package/dist/components/organisms/OrbitalVisualization.d.ts +2 -1
  56. package/dist/components/organisms/PageHeader.d.ts +7 -5
  57. package/dist/components/organisms/Section.d.ts +2 -1
  58. package/dist/components/organisms/Sidebar.d.ts +2 -1
  59. package/dist/components/organisms/SignaturePad.d.ts +2 -1
  60. package/dist/components/organisms/Split.d.ts +2 -1
  61. package/dist/components/organisms/StateMachineView.d.ts +8 -4
  62. package/dist/components/organisms/Timeline.d.ts +2 -1
  63. package/dist/components/organisms/ToastSlot.d.ts +2 -1
  64. package/dist/components/organisms/UISlotRenderer.d.ts +4 -3
  65. package/dist/components/organisms/WizardContainer.d.ts +2 -1
  66. package/dist/components/organisms/book/types.d.ts +2 -2
  67. package/dist/components/organisms/game/BattleBoard.d.ts +4 -4
  68. package/dist/components/organisms/game/CanvasEffect.d.ts +2 -1
  69. package/dist/components/organisms/game/CastleBoard.d.ts +6 -5
  70. package/dist/components/organisms/game/GameAudioProvider.d.ts +2 -1
  71. package/dist/components/organisms/game/GameAudioToggle.d.ts +2 -1
  72. package/dist/components/organisms/game/TraitSlot.d.ts +4 -3
  73. package/dist/components/organisms/game/TraitStateViewer.d.ts +6 -5
  74. package/dist/components/organisms/game/UncontrolledBattleBoard.d.ts +9 -4
  75. package/dist/components/organisms/game/WorldMapBoard.d.ts +11 -9
  76. package/dist/components/organisms/game/physics-sim/SimulationControls.d.ts +8 -7
  77. package/dist/components/organisms/game/puzzles/builder/BuilderBoard.d.ts +3 -3
  78. package/dist/components/organisms/game/puzzles/classifier/ClassifierBoard.d.ts +3 -3
  79. package/dist/components/organisms/game/puzzles/debugger/DebuggerBoard.d.ts +3 -3
  80. package/dist/components/organisms/game/puzzles/event-handler/EventHandlerBoard.d.ts +7 -4
  81. package/dist/components/organisms/game/puzzles/event-handler/ObjectRulePanel.d.ts +2 -2
  82. package/dist/components/organisms/game/puzzles/event-handler/RuleEditor.d.ts +7 -9
  83. package/dist/components/organisms/game/puzzles/negotiator/NegotiatorBoard.d.ts +3 -3
  84. package/dist/components/organisms/game/puzzles/sequencer/SequencerBoard.d.ts +5 -4
  85. package/dist/components/organisms/game/puzzles/simulator/SimulatorBoard.d.ts +3 -3
  86. package/dist/components/organisms/game/puzzles/state-architect/StateArchitectBoard.d.ts +5 -4
  87. package/dist/components/organisms/game/puzzles/state-architect/StateNode.d.ts +2 -4
  88. package/dist/components/organisms/game/puzzles/state-architect/TransitionArrow.d.ts +3 -8
  89. package/dist/components/organisms/game/types/isometric.d.ts +4 -4
  90. package/dist/components/organisms/index.d.ts +1 -1
  91. package/dist/components/organisms/types.d.ts +3 -1
  92. package/dist/components/templates/DashboardLayout.d.ts +6 -5
  93. package/dist/components/templates/GameTemplate.d.ts +7 -6
  94. package/dist/components/templates/GenericAppTemplate.d.ts +1 -7
  95. package/dist/components/templates/types.d.ts +14 -6
  96. package/dist/docs/index.cjs +60 -22
  97. package/dist/docs/index.d.cts +9 -4
  98. package/dist/docs/index.js +58 -20
  99. package/dist/marketing/index.cjs +61 -23
  100. package/dist/marketing/index.d.cts +54 -55
  101. package/dist/marketing/index.js +58 -20
  102. package/dist/providers/index.cjs +191 -153
  103. package/dist/providers/index.js +191 -153
  104. package/dist/runtime/index.cjs +191 -153
  105. package/dist/runtime/index.js +191 -153
  106. package/package.json +1 -1
@@ -236,8 +236,12 @@ declare const Badge: React.ForwardRefExoticComponent<BadgeProps & React.RefAttri
236
236
  type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
237
237
  type IconAnimation = 'spin' | 'pulse' | 'none';
238
238
  interface IconProps {
239
- /** Lucide icon component (preferred for type-safe usage) */
240
- icon?: LucideIcon;
239
+ /**
240
+ * Lucide icon component (preferred for type-safe usage), OR a canonical
241
+ * kebab-case icon name string — a string is treated exactly like `name` so
242
+ * trait/factory authors can pass an icon by name through the `icon` prop.
243
+ */
244
+ icon?: LucideIcon | string;
241
245
  /** Icon name as string (resolved from iconMap) */
242
246
  name?: string;
243
247
  /** Size of the icon */
@@ -383,6 +387,20 @@ interface ContentSectionProps {
383
387
  }
384
388
  declare const ContentSection: React.ForwardRefExoticComponent<ContentSectionProps & React.RefAttributes<HTMLDivElement>>;
385
389
 
390
+ /**
391
+ * A labelled link/CTA used by marketing molecules (HeroSection, CTABanner,
392
+ * PricingCard) for their primary/secondary call-to-action props.
393
+ */
394
+ type LinkAction = {
395
+ label: string;
396
+ href: string;
397
+ };
398
+ /** An image with its required alt text. */
399
+ type ImageSource = {
400
+ src: string;
401
+ alt: string;
402
+ };
403
+
386
404
  /**
387
405
  * HeroSection Molecule Component
388
406
  *
@@ -397,19 +415,10 @@ interface HeroSectionProps {
397
415
  title: string;
398
416
  titleAccent?: string;
399
417
  subtitle: string;
400
- primaryAction?: {
401
- label: string;
402
- href: string;
403
- };
404
- secondaryAction?: {
405
- label: string;
406
- href: string;
407
- };
418
+ primaryAction?: LinkAction;
419
+ secondaryAction?: LinkAction;
408
420
  installCommand?: string;
409
- image?: {
410
- src: string;
411
- alt: string;
412
- };
421
+ image?: ImageSource;
413
422
  imagePosition?: 'below' | 'right' | 'background';
414
423
  background?: 'dark' | 'gradient' | 'subtle';
415
424
  align?: 'center' | 'left';
@@ -434,15 +443,9 @@ interface CTABannerProps {
434
443
  /** Supporting text below the title */
435
444
  subtitle?: string;
436
445
  /** Primary action button config */
437
- primaryAction?: {
438
- label: string;
439
- href: string;
440
- };
446
+ primaryAction?: LinkAction;
441
447
  /** Secondary action button config */
442
- secondaryAction?: {
443
- label: string;
444
- href: string;
445
- };
448
+ secondaryAction?: LinkAction;
446
449
  /** Background style */
447
450
  background?: CTABannerBackground;
448
451
  /** Content alignment */
@@ -510,10 +513,7 @@ interface PricingCardProps {
510
513
  price: string;
511
514
  description?: string;
512
515
  features: string[];
513
- action: {
514
- label: string;
515
- href: string;
516
- };
516
+ action: LinkAction;
517
517
  highlighted?: boolean;
518
518
  badge?: string;
519
519
  className?: string;
@@ -544,10 +544,7 @@ interface SplitSectionProps {
544
544
  title: string;
545
545
  description: string | React.ReactNode;
546
546
  bullets?: string[];
547
- image?: {
548
- src: string;
549
- alt: string;
550
- };
547
+ image?: ImageSource;
551
548
  imagePosition?: 'left' | 'right';
552
549
  background?: 'default' | 'alt';
553
550
  children?: React.ReactNode;
@@ -601,11 +598,12 @@ declare const StepFlow: React.FC<StepFlowProps>;
601
598
  * Uses StatDisplay internally when available for consistent styling.
602
599
  */
603
600
 
601
+ interface StatItem {
602
+ value: string;
603
+ label: string;
604
+ }
604
605
  interface StatsGridProps {
605
- stats: {
606
- value: string;
607
- label: string;
608
- }[];
606
+ stats: StatItem[];
609
607
  columns?: 2 | 3 | 4 | 6;
610
608
  className?: string;
611
609
  }
@@ -637,19 +635,22 @@ declare const TagCloud: React.FC<TagCloudProps>;
637
635
  * Composes VStack, HStack, Typography, Button, and Icon atoms.
638
636
  */
639
637
 
638
+ interface GithubLink {
639
+ url: string;
640
+ stars?: number;
641
+ }
642
+ interface DiscordLink {
643
+ url: string;
644
+ members?: number;
645
+ }
646
+ interface TwitterLink {
647
+ url: string;
648
+ followers?: number;
649
+ }
640
650
  interface CommunityLinksProps {
641
- github?: {
642
- url: string;
643
- stars?: number;
644
- };
645
- discord?: {
646
- url: string;
647
- members?: number;
648
- };
649
- twitter?: {
650
- url: string;
651
- followers?: number;
652
- };
651
+ github?: GithubLink;
652
+ discord?: DiscordLink;
653
+ twitter?: TwitterLink;
653
654
  heading?: string;
654
655
  subtitle?: string;
655
656
  className?: string;
@@ -686,10 +687,7 @@ declare const ServiceCatalog: React.FC<ServiceCatalogProps>;
686
687
  interface ShowcaseCardProps {
687
688
  title: string;
688
689
  description?: string;
689
- image: {
690
- src: string;
691
- alt: string;
692
- };
690
+ image: ImageSource;
693
691
  href?: string;
694
692
  badge?: string;
695
693
  accentColor?: string;
@@ -803,14 +801,15 @@ interface FooterLinkColumn {
803
801
  title: string;
804
802
  items: FooterLinkItem[];
805
803
  }
804
+ interface FooterLogo {
805
+ src: string;
806
+ alt: string;
807
+ href?: string;
808
+ }
806
809
  interface MarketingFooterProps {
807
810
  columns: FooterLinkColumn[];
808
811
  copyright?: string;
809
- logo?: {
810
- src: string;
811
- alt: string;
812
- href?: string;
813
- };
812
+ logo?: FooterLogo;
814
813
  className?: string;
815
814
  }
816
815
  declare const MarketingFooter: React.FC<MarketingFooterProps>;
@@ -1,7 +1,7 @@
1
1
  import React8, { createContext, useCallback, useState, useRef, useEffect, useContext, useMemo, useSyncExternalStore, useId } from 'react';
2
2
  import { createLogger } from '@almadar/logger';
3
3
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
4
- import * as LucideIcons from 'lucide-react';
4
+ import * as LucideIcons2 from 'lucide-react';
5
5
  import { Loader2, X } from 'lucide-react';
6
6
  import * as PhosphorIcons from '@phosphor-icons/react';
7
7
  import * as TablerIcons from '@tabler/icons-react';
@@ -3040,26 +3040,26 @@ function kebabToPascal(name) {
3040
3040
  }).join("");
3041
3041
  }
3042
3042
  var lucideAliases = {
3043
- close: LucideIcons.X,
3044
- trash: LucideIcons.Trash2,
3045
- loader: LucideIcons.Loader2,
3046
- stop: LucideIcons.Square,
3047
- volume: LucideIcons.Volume2,
3048
- "volume-off": LucideIcons.VolumeX,
3049
- refresh: LucideIcons.RefreshCw,
3050
- share: LucideIcons.Share2,
3051
- "sort-asc": LucideIcons.ArrowUpNarrowWide,
3052
- "sort-desc": LucideIcons.ArrowDownNarrowWide
3043
+ close: LucideIcons2.X,
3044
+ trash: LucideIcons2.Trash2,
3045
+ loader: LucideIcons2.Loader2,
3046
+ stop: LucideIcons2.Square,
3047
+ volume: LucideIcons2.Volume2,
3048
+ "volume-off": LucideIcons2.VolumeX,
3049
+ refresh: LucideIcons2.RefreshCw,
3050
+ share: LucideIcons2.Share2,
3051
+ "sort-asc": LucideIcons2.ArrowUpNarrowWide,
3052
+ "sort-desc": LucideIcons2.ArrowDownNarrowWide
3053
3053
  };
3054
3054
  function resolveLucide(name) {
3055
3055
  if (lucideAliases[name]) return lucideAliases[name];
3056
3056
  const pascal = kebabToPascal(name);
3057
- const lucideMap = LucideIcons;
3057
+ const lucideMap = LucideIcons2;
3058
3058
  const direct = lucideMap[pascal];
3059
3059
  if (direct && typeof direct === "object") return direct;
3060
3060
  const asIs = lucideMap[name];
3061
3061
  if (asIs && typeof asIs === "object") return asIs;
3062
- return LucideIcons.HelpCircle;
3062
+ return LucideIcons2.HelpCircle;
3063
3063
  }
3064
3064
  var phosphorAliases = {
3065
3065
  // lucide name → phosphor PascalCase name
@@ -3652,6 +3652,41 @@ function resolveIconForFamily(name, family) {
3652
3652
  }
3653
3653
  }
3654
3654
  }
3655
+ var iconAliases = {
3656
+ "close": LucideIcons2.X,
3657
+ "trash": LucideIcons2.Trash2,
3658
+ "loader": LucideIcons2.Loader2,
3659
+ "stop": LucideIcons2.Square,
3660
+ "volume": LucideIcons2.Volume2,
3661
+ "volume-off": LucideIcons2.VolumeX,
3662
+ "refresh": LucideIcons2.RefreshCw,
3663
+ "share": LucideIcons2.Share2,
3664
+ "sort-asc": LucideIcons2.ArrowUpNarrowWide,
3665
+ "sort-desc": LucideIcons2.ArrowDownNarrowWide
3666
+ };
3667
+ function kebabToPascal2(name) {
3668
+ return name.split("-").map((part) => {
3669
+ if (/^\d+$/.test(part)) return part;
3670
+ return part.charAt(0).toUpperCase() + part.slice(1);
3671
+ }).join("");
3672
+ }
3673
+ var resolvedCache = /* @__PURE__ */ new Map();
3674
+ function resolveIcon(name) {
3675
+ const cached = resolvedCache.get(name);
3676
+ if (cached) return cached;
3677
+ const resolved = doResolve(name);
3678
+ resolvedCache.set(name, resolved);
3679
+ return resolved;
3680
+ }
3681
+ function doResolve(name) {
3682
+ if (iconAliases[name]) return iconAliases[name];
3683
+ const pascalName = kebabToPascal2(name);
3684
+ const directLookup = LucideIcons2[pascalName];
3685
+ if (directLookup && typeof directLookup === "object") return directLookup;
3686
+ const asIs = LucideIcons2[name];
3687
+ if (asIs && typeof asIs === "object") return asIs;
3688
+ return LucideIcons2.HelpCircle;
3689
+ }
3655
3690
  var sizeClasses = {
3656
3691
  xs: "w-3 h-3",
3657
3692
  sm: "w-4 h-4",
@@ -3674,11 +3709,13 @@ var Icon = ({
3674
3709
  strokeWidth,
3675
3710
  style
3676
3711
  }) => {
3712
+ const directIcon = typeof icon === "string" ? void 0 : icon;
3713
+ const effectiveName = typeof icon === "string" ? icon : name;
3677
3714
  const family = useIconFamily();
3678
3715
  const RenderedComponent = React8.useMemo(() => {
3679
- if (icon) return null;
3680
- return name ? resolveIconForFamily(name, family) : null;
3681
- }, [icon, name, family]);
3716
+ if (directIcon) return null;
3717
+ return effectiveName ? resolveIconForFamily(effectiveName, family) : null;
3718
+ }, [directIcon, effectiveName, family]);
3682
3719
  const effectiveStrokeWidth = strokeWidth ?? void 0;
3683
3720
  const inlineStyle = {
3684
3721
  ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
@@ -3690,8 +3727,8 @@ var Icon = ({
3690
3727
  color ? color : "text-current",
3691
3728
  className
3692
3729
  );
3693
- if (icon) {
3694
- const Direct = icon;
3730
+ if (directIcon) {
3731
+ const Direct = directIcon;
3695
3732
  return /* @__PURE__ */ jsx(
3696
3733
  Direct,
3697
3734
  {
@@ -3711,7 +3748,7 @@ var Icon = ({
3711
3748
  }
3712
3749
  );
3713
3750
  }
3714
- const Fallback = LucideIcons.HelpCircle;
3751
+ const Fallback = LucideIcons2.HelpCircle;
3715
3752
  return /* @__PURE__ */ jsx(
3716
3753
  Fallback,
3717
3754
  {
@@ -5015,7 +5052,7 @@ var Avatar = ({
5015
5052
  alt,
5016
5053
  name,
5017
5054
  initials: providedInitials,
5018
- icon: IconComponent,
5055
+ icon: iconProp,
5019
5056
  size = "md",
5020
5057
  status,
5021
5058
  badge,
@@ -5026,6 +5063,7 @@ var Avatar = ({
5026
5063
  }) => {
5027
5064
  const eventBus = useEventBus();
5028
5065
  const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
5066
+ const IconComponent = typeof iconProp === "string" ? resolveIcon(iconProp) : iconProp;
5029
5067
  const hasImage = !!src;
5030
5068
  const hasInitials = !!initials;
5031
5069
  const hasIcon = !!IconComponent;