@almadar/ui 4.57.5 → 5.1.0

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 (48) hide show
  1. package/dist/avl/index.cjs +2499 -1903
  2. package/dist/avl/index.js +1111 -518
  3. package/dist/components/atoms/Icon.d.ts +7 -4
  4. package/dist/components/index.cjs +2064 -1636
  5. package/dist/components/index.js +905 -480
  6. package/dist/components/molecules/Breadcrumb.d.ts +4 -4
  7. package/dist/components/molecules/EmptyState.d.ts +1 -1
  8. package/dist/components/templates/DashboardLayout.d.ts +1 -1
  9. package/dist/context/index.cjs +199 -0
  10. package/dist/context/index.js +199 -0
  11. package/dist/context/themeTokens.d.ts +1 -1
  12. package/dist/docs/index.cjs +456 -98
  13. package/dist/docs/index.d.cts +7 -4
  14. package/dist/docs/index.js +429 -74
  15. package/dist/lib/iconFamily.d.ts +41 -0
  16. package/dist/marketing/index.cjs +480 -124
  17. package/dist/marketing/index.d.cts +7 -4
  18. package/dist/marketing/index.js +446 -93
  19. package/dist/providers/index.cjs +1933 -1505
  20. package/dist/providers/index.js +909 -484
  21. package/dist/runtime/index.cjs +2130 -1534
  22. package/dist/runtime/index.js +1071 -478
  23. package/package.json +5 -2
  24. package/tailwind-preset.cjs +118 -3
  25. package/themes/_contract.md +198 -0
  26. package/themes/almadar-website.css +212 -0
  27. package/themes/almadar.css +210 -0
  28. package/themes/arctic.css +210 -0
  29. package/themes/atelier.css +427 -0
  30. package/themes/copper.css +210 -0
  31. package/themes/ember.css +210 -0
  32. package/themes/forest.css +210 -0
  33. package/themes/gazette.css +411 -0
  34. package/themes/index.css +12 -0
  35. package/themes/kiosk.css +412 -0
  36. package/themes/lavender.css +210 -0
  37. package/themes/midnight.css +210 -0
  38. package/themes/minimalist.css +210 -0
  39. package/themes/neon.css +210 -0
  40. package/themes/ocean.css +210 -0
  41. package/themes/prism.css +406 -0
  42. package/themes/rose.css +210 -0
  43. package/themes/sand.css +210 -0
  44. package/themes/slate.css +210 -0
  45. package/themes/sunset.css +210 -0
  46. package/themes/terminal.css +422 -0
  47. package/themes/trait-wars.css +210 -0
  48. package/themes/wireframe.css +216 -0
package/dist/avl/index.js CHANGED
@@ -1,12 +1,15 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { OrbitControls as OrbitControls$1, Grid as Grid$1, Stars, Sparkles, Html, RoundedBox } from '@react-three/drei';
3
- import * as React96 from 'react';
4
- import React96__default, { createContext, useState, useMemo, useRef, useEffect, useContext, useCallback, Suspense, useLayoutEffect, Profiler, useReducer, lazy, useId, forwardRef, useImperativeHandle, Component } from 'react';
3
+ import * as React98 from 'react';
4
+ import React98__default, { createContext, useState, useMemo, useRef, useEffect, useContext, useCallback, Suspense, useLayoutEffect, Profiler, useReducer, useSyncExternalStore, lazy, useId, forwardRef, useImperativeHandle, Component } from 'react';
5
5
  import { createLogger, isLogLevelEnabled } from '@almadar/logger';
6
6
  import ELK from 'elkjs/lib/elk.bundled.js';
7
7
  import { MarkerType, Handle, Position, getBezierPath, EdgeLabelRenderer, BaseEdge, ReactFlowProvider, useNodesState, useEdgesState, useReactFlow, ReactFlow, Controls, Background, BackgroundVariant } from '@xyflow/react';
8
- import * as LucideIcons from 'lucide-react';
9
- import { Loader2, X, ChevronDown, Check, Copy, AlertTriangle, Info, AlertCircle, CheckCircle, List, Printer, ChevronRight, ChevronLeft, GitBranch, Pencil, Eye, Plus, ArrowRight, Trash, Code, FileText, WrapText, Trash2, Menu as Menu$1, Search, Bell, LogOut, ZoomOut, ZoomIn, Download, FileQuestion, Inbox, XCircle, Filter, Pause, Play, RotateCcw, Package, Calendar, MoreHorizontal, Image as Image$1, Upload, Minus, ArrowLeft, Camera, RefreshCw, HelpCircle, ChevronUp, MessageSquare, Flag, Type, Heading1, Heading2, Heading3, ListOrdered, Quote, Eraser, Star, TrendingUp, TrendingDown, ArrowUp, ArrowDown, MoreVertical, Sun, Moon, Circle, Clock, CheckCircle2, FileWarning, GitCommit, AlignLeft, Columns, SkipForward, Bug, Send, Wrench, User, Tag, DollarSign, Coffee, Users, Zap, Sword, Move, Heart, Shield } from 'lucide-react';
8
+ import * as LucideIcons2 from 'lucide-react';
9
+ import { Loader2, X, List, Printer, ChevronRight, ChevronLeft, GitBranch, Pencil, Eye, Plus, ArrowRight, Trash, Code, FileText, WrapText, Check, Copy, AlertTriangle, Trash2, ZoomOut, ZoomIn, Download, RotateCcw, Menu as Menu$1, Package, Calendar, MoreHorizontal, Image as Image$1, Upload, ArrowLeft, HelpCircle, Search, Type, Heading1, Heading2, Heading3, ListOrdered, Quote, Minus, Eraser, TrendingUp, TrendingDown, ArrowUp, ArrowDown, MoreVertical, AlertCircle, Circle, Clock, CheckCircle2, CheckCircle, XCircle, Play, Pause, SkipForward, Bug, Send, ChevronUp, ChevronDown, Wrench, Tag, User, DollarSign, Zap, Sword, Move, Heart, Shield } from 'lucide-react';
10
+ import * as PhosphorIcons from '@phosphor-icons/react';
11
+ import * as TablerIcons from '@tabler/icons-react';
12
+ import * as FaIcons from 'react-icons/fa';
10
13
  import { evaluate, createMinimalContext } from '@almadar/evaluator';
11
14
  import { createPortal } from 'react-dom';
12
15
  import { Link, Outlet, useLocation } from 'react-router-dom';
@@ -3333,14 +3336,14 @@ function EventBusProvider({ children }) {
3333
3336
  timestamp: Date.now(),
3334
3337
  source
3335
3338
  };
3336
- const listeners6 = listenersRef.current.get(type);
3337
- const listenerCount = (listeners6?.size ?? 0) + anyListenersRef.current.size;
3339
+ const listeners7 = listenersRef.current.get(type);
3340
+ const listenerCount = (listeners7?.size ?? 0) + anyListenersRef.current.size;
3338
3341
  busLog.debug("emit", { type, payloadKeys: payload ? Object.keys(payload).length : 0, listenerCount });
3339
3342
  if (listenerCount === 0) {
3340
3343
  busLog.warn("emit:no-listeners", { type });
3341
3344
  }
3342
- if (listeners6) {
3343
- const listenersCopy = Array.from(listeners6);
3345
+ if (listeners7) {
3346
+ const listenersCopy = Array.from(listeners7);
3344
3347
  for (let i = 0; i < listenersCopy.length; i++) {
3345
3348
  const listener = listenersCopy[i];
3346
3349
  busLog.debug("emit:listener", {
@@ -3376,14 +3379,14 @@ function EventBusProvider({ children }) {
3376
3379
  if (!listenersRef.current.has(type)) {
3377
3380
  listenersRef.current.set(type, /* @__PURE__ */ new Set());
3378
3381
  }
3379
- const listeners6 = listenersRef.current.get(type);
3380
- listeners6.add(listener);
3382
+ const listeners7 = listenersRef.current.get(type);
3383
+ listeners7.add(listener);
3381
3384
  if (!listenerTags.has(listener)) listenerTags.set(listener, captureSubscriberTag(listener));
3382
- subLog.debug("subscribe", { type, totalListeners: listeners6.size, tag: listenerTags.get(listener) });
3385
+ subLog.debug("subscribe", { type, totalListeners: listeners7.size, tag: listenerTags.get(listener) });
3383
3386
  return () => {
3384
- listeners6.delete(listener);
3385
- subLog.debug("unsubscribe", { type, remaining: listeners6.size });
3386
- if (listeners6.size === 0) {
3387
+ listeners7.delete(listener);
3388
+ subLog.debug("unsubscribe", { type, remaining: listeners7.size });
3389
+ if (listeners7.size === 0) {
3387
3390
  listenersRef.current.delete(type);
3388
3391
  }
3389
3392
  };
@@ -3396,8 +3399,8 @@ function EventBusProvider({ children }) {
3396
3399
  return on(type, wrappedListener);
3397
3400
  }, [on]);
3398
3401
  const hasListeners = useCallback((type) => {
3399
- const listeners6 = listenersRef.current.get(type);
3400
- return listeners6 !== void 0 && listeners6.size > 0;
3402
+ const listeners7 = listenersRef.current.get(type);
3403
+ return listeners7 !== void 0 && listeners7.size > 0;
3401
3404
  }, []);
3402
3405
  const onAny = useCallback((listener) => {
3403
3406
  anyListenersRef.current.add(listener);
@@ -3726,7 +3729,7 @@ var init_Box = __esm({
3726
3729
  fixed: "fixed",
3727
3730
  sticky: "sticky"
3728
3731
  };
3729
- Box = React96__default.forwardRef(
3732
+ Box = React98__default.forwardRef(
3730
3733
  ({
3731
3734
  padding,
3732
3735
  paddingX,
@@ -3776,7 +3779,7 @@ var init_Box = __esm({
3776
3779
  onMouseLeave?.(e);
3777
3780
  }, [hoverEvent, eventBus, onMouseLeave]);
3778
3781
  const isClickable = action || onClick;
3779
- return React96__default.createElement(
3782
+ return React98__default.createElement(
3780
3783
  Component2,
3781
3784
  {
3782
3785
  ref,
@@ -4727,7 +4730,7 @@ var init_MiniStateMachine = __esm({
4727
4730
  const x = 2 + i * (NODE_W + GAP + ARROW_W + GAP);
4728
4731
  const tc = transitionCounts[s.name] ?? 0;
4729
4732
  const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
4730
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
4733
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
4731
4734
  /* @__PURE__ */ jsx(
4732
4735
  AvlState,
4733
4736
  {
@@ -5125,6 +5128,37 @@ var init_ThemeContext = __esm({
5125
5128
  displayName: "Copper",
5126
5129
  hasLightMode: true,
5127
5130
  hasDarkMode: true
5131
+ },
5132
+ // Layer 1 skin axes — truly-unique themes (compact tech / editorial / brutalist dense / display-heavy / touch-first)
5133
+ {
5134
+ name: "prism",
5135
+ displayName: "Prism",
5136
+ hasLightMode: true,
5137
+ hasDarkMode: true
5138
+ },
5139
+ {
5140
+ name: "gazette",
5141
+ displayName: "Gazette",
5142
+ hasLightMode: true,
5143
+ hasDarkMode: true
5144
+ },
5145
+ {
5146
+ name: "terminal",
5147
+ displayName: "Terminal",
5148
+ hasLightMode: true,
5149
+ hasDarkMode: true
5150
+ },
5151
+ {
5152
+ name: "atelier",
5153
+ displayName: "Atelier",
5154
+ hasLightMode: true,
5155
+ hasDarkMode: true
5156
+ },
5157
+ {
5158
+ name: "kiosk",
5159
+ displayName: "Kiosk",
5160
+ hasLightMode: true,
5161
+ hasDarkMode: true
5128
5162
  }
5129
5163
  ];
5130
5164
  ThemeContext = createContext(void 0);
@@ -5666,12 +5700,378 @@ var init_UISlotContext = __esm({
5666
5700
  UISlotContext = createContext(null);
5667
5701
  }
5668
5702
  });
5703
+ function getCurrentIconFamily() {
5704
+ if (typeof window === "undefined" || typeof document === "undefined") {
5705
+ return DEFAULT_FAMILY;
5706
+ }
5707
+ const raw = getComputedStyle(document.documentElement).getPropertyValue("--icon-family").trim().replace(/^["']|["']$/g, "");
5708
+ return VALID_FAMILIES.includes(raw) ? raw : DEFAULT_FAMILY;
5709
+ }
5710
+ function ensureObserver() {
5711
+ if (typeof window === "undefined" || observer) return;
5712
+ observer = new MutationObserver(() => {
5713
+ const next = getCurrentIconFamily();
5714
+ if (next !== cachedFamily) {
5715
+ cachedFamily = next;
5716
+ listeners.forEach((fn) => fn());
5717
+ }
5718
+ });
5719
+ observer.observe(document.documentElement, {
5720
+ attributes: true,
5721
+ attributeFilter: ["data-theme", "style"]
5722
+ });
5723
+ cachedFamily = getCurrentIconFamily();
5724
+ }
5725
+ function subscribeIconFamily(notify) {
5726
+ ensureObserver();
5727
+ listeners.add(notify);
5728
+ return () => {
5729
+ listeners.delete(notify);
5730
+ };
5731
+ }
5732
+ function getIconFamilySnapshot() {
5733
+ if (cachedFamily !== null) return cachedFamily;
5734
+ cachedFamily = getCurrentIconFamily();
5735
+ return cachedFamily;
5736
+ }
5737
+ function getIconFamilyServerSnapshot() {
5738
+ return DEFAULT_FAMILY;
5739
+ }
5740
+ function useIconFamily() {
5741
+ return useSyncExternalStore(
5742
+ subscribeIconFamily,
5743
+ getIconFamilySnapshot,
5744
+ getIconFamilyServerSnapshot
5745
+ );
5746
+ }
5669
5747
  function kebabToPascal(name) {
5670
5748
  return name.split("-").map((part) => {
5671
5749
  if (/^\d+$/.test(part)) return part;
5672
5750
  return part.charAt(0).toUpperCase() + part.slice(1);
5673
5751
  }).join("");
5674
5752
  }
5753
+ function resolveLucide(name) {
5754
+ if (lucideAliases[name]) return lucideAliases[name];
5755
+ const pascal = kebabToPascal(name);
5756
+ const lucideMap = LucideIcons2;
5757
+ const direct = lucideMap[pascal];
5758
+ if (direct && typeof direct === "object") return direct;
5759
+ const asIs = lucideMap[name];
5760
+ if (asIs && typeof asIs === "object") return asIs;
5761
+ return LucideIcons2.HelpCircle;
5762
+ }
5763
+ function resolvePhosphor(name, weight) {
5764
+ const target = phosphorAliases[name] ?? kebabToPascal(name);
5765
+ const map = PhosphorIcons;
5766
+ const PhosphorComp = map[target];
5767
+ if (!PhosphorComp || typeof PhosphorComp !== "object") return null;
5768
+ const Component2 = PhosphorComp;
5769
+ const Adapter = (props) => /* @__PURE__ */ jsx(
5770
+ Component2,
5771
+ {
5772
+ weight,
5773
+ className: props.className,
5774
+ style: props.style,
5775
+ size: props.size ?? "1em"
5776
+ }
5777
+ );
5778
+ Adapter.displayName = `Phosphor.${target}.${weight}`;
5779
+ return Adapter;
5780
+ }
5781
+ function resolveTabler(name) {
5782
+ const suffix = tablerAliases[name] ?? kebabToPascal(name);
5783
+ const target = `Icon${suffix}`;
5784
+ const map = TablerIcons;
5785
+ const TablerComp = map[target];
5786
+ if (!TablerComp || typeof TablerComp !== "object") return null;
5787
+ const Component2 = TablerComp;
5788
+ const Adapter = (props) => /* @__PURE__ */ jsx(
5789
+ Component2,
5790
+ {
5791
+ stroke: props.strokeWidth ?? 1.5,
5792
+ className: props.className,
5793
+ style: props.style,
5794
+ size: props.size ?? 24
5795
+ }
5796
+ );
5797
+ Adapter.displayName = `Tabler.${target}`;
5798
+ return Adapter;
5799
+ }
5800
+ function resolveFa(name) {
5801
+ const suffix = faAliases[name] ?? kebabToPascal(name);
5802
+ const target = `Fa${suffix}`;
5803
+ const map = FaIcons;
5804
+ const FaComp = map[target];
5805
+ if (!FaComp || typeof FaComp !== "function") return null;
5806
+ const Component2 = FaComp;
5807
+ const Adapter = (props) => /* @__PURE__ */ jsx(
5808
+ Component2,
5809
+ {
5810
+ className: props.className,
5811
+ style: props.style,
5812
+ size: props.size ?? "1em"
5813
+ }
5814
+ );
5815
+ Adapter.displayName = `Fa.${target}`;
5816
+ return Adapter;
5817
+ }
5818
+ function warnFallback(name, family) {
5819
+ const key = `${family}::${name}`;
5820
+ if (warned.has(key)) return;
5821
+ warned.add(key);
5822
+ if (typeof console !== "undefined") {
5823
+ console.warn(
5824
+ `[iconFamily] No '${name}' mapping in family '${family}'; falling back to lucide. Add an alias in lib/iconFamily.ts.`
5825
+ );
5826
+ }
5827
+ }
5828
+ function makeLucideAdapter(name) {
5829
+ const LucideComp = resolveLucide(name);
5830
+ const Adapter = (props) => /* @__PURE__ */ jsx(
5831
+ LucideComp,
5832
+ {
5833
+ className: props.className,
5834
+ strokeWidth: props.strokeWidth,
5835
+ style: props.style,
5836
+ size: props.size
5837
+ }
5838
+ );
5839
+ Adapter.displayName = `Lucide.${name}`;
5840
+ return Adapter;
5841
+ }
5842
+ function resolveIconForFamily(name, family) {
5843
+ switch (family) {
5844
+ case "lucide":
5845
+ return makeLucideAdapter(name);
5846
+ case "phosphor-outline": {
5847
+ const p2 = resolvePhosphor(name, "regular");
5848
+ if (p2) return p2;
5849
+ warnFallback(name, family);
5850
+ return makeLucideAdapter(name);
5851
+ }
5852
+ case "phosphor-fill": {
5853
+ const p2 = resolvePhosphor(name, "fill");
5854
+ if (p2) return p2;
5855
+ warnFallback(name, family);
5856
+ return makeLucideAdapter(name);
5857
+ }
5858
+ case "phosphor-duotone": {
5859
+ const p2 = resolvePhosphor(name, "duotone");
5860
+ if (p2) return p2;
5861
+ warnFallback(name, family);
5862
+ return makeLucideAdapter(name);
5863
+ }
5864
+ case "tabler": {
5865
+ const t = resolveTabler(name);
5866
+ if (t) return t;
5867
+ warnFallback(name, family);
5868
+ return makeLucideAdapter(name);
5869
+ }
5870
+ case "fa-solid": {
5871
+ const f3 = resolveFa(name);
5872
+ if (f3) return f3;
5873
+ warnFallback(name, family);
5874
+ return makeLucideAdapter(name);
5875
+ }
5876
+ }
5877
+ }
5878
+ var DEFAULT_FAMILY, VALID_FAMILIES, cachedFamily, listeners, observer, lucideAliases, phosphorAliases, tablerAliases, faAliases, warned;
5879
+ var init_iconFamily = __esm({
5880
+ "lib/iconFamily.tsx"() {
5881
+ "use client";
5882
+ DEFAULT_FAMILY = "lucide";
5883
+ VALID_FAMILIES = [
5884
+ "lucide",
5885
+ "phosphor-outline",
5886
+ "phosphor-fill",
5887
+ "phosphor-duotone",
5888
+ "tabler",
5889
+ "fa-solid"
5890
+ ];
5891
+ cachedFamily = null;
5892
+ listeners = /* @__PURE__ */ new Set();
5893
+ observer = null;
5894
+ lucideAliases = {
5895
+ close: LucideIcons2.X,
5896
+ trash: LucideIcons2.Trash2,
5897
+ loader: LucideIcons2.Loader2,
5898
+ stop: LucideIcons2.Square,
5899
+ volume: LucideIcons2.Volume2,
5900
+ "volume-off": LucideIcons2.VolumeX,
5901
+ refresh: LucideIcons2.RefreshCw,
5902
+ share: LucideIcons2.Share2,
5903
+ "sort-asc": LucideIcons2.ArrowUpNarrowWide,
5904
+ "sort-desc": LucideIcons2.ArrowDownNarrowWide
5905
+ };
5906
+ phosphorAliases = {
5907
+ // lucide name → phosphor PascalCase name
5908
+ search: "MagnifyingGlass",
5909
+ close: "X",
5910
+ loader: "CircleNotch",
5911
+ refresh: "ArrowsClockwise",
5912
+ "sort-asc": "SortAscending",
5913
+ "sort-desc": "SortDescending",
5914
+ "chevron-down": "CaretDown",
5915
+ "chevron-up": "CaretUp",
5916
+ "chevron-left": "CaretLeft",
5917
+ "chevron-right": "CaretRight",
5918
+ "help-circle": "Question",
5919
+ "alert-triangle": "Warning",
5920
+ "alert-circle": "WarningCircle",
5921
+ "check-circle": "CheckCircle",
5922
+ "x-circle": "XCircle",
5923
+ edit: "PencilSimple",
5924
+ pencil: "PencilSimple",
5925
+ trash: "Trash",
5926
+ send: "PaperPlaneRight",
5927
+ external: "ArrowSquareOut",
5928
+ "external-link": "ArrowSquareOut",
5929
+ plus: "Plus",
5930
+ minus: "Minus",
5931
+ x: "X",
5932
+ check: "Check",
5933
+ star: "Star",
5934
+ heart: "Heart",
5935
+ home: "House",
5936
+ user: "User",
5937
+ users: "Users",
5938
+ settings: "Gear",
5939
+ menu: "List",
5940
+ "arrow-up": "ArrowUp",
5941
+ "arrow-down": "ArrowDown",
5942
+ "arrow-left": "ArrowLeft",
5943
+ "arrow-right": "ArrowRight",
5944
+ copy: "Copy",
5945
+ download: "DownloadSimple",
5946
+ upload: "UploadSimple",
5947
+ filter: "Funnel",
5948
+ calendar: "Calendar",
5949
+ clock: "Clock",
5950
+ bell: "Bell",
5951
+ mail: "Envelope",
5952
+ envelope: "Envelope",
5953
+ lock: "Lock",
5954
+ unlock: "LockOpen",
5955
+ eye: "Eye",
5956
+ "eye-off": "EyeSlash",
5957
+ more: "DotsThree",
5958
+ "more-vertical": "DotsThreeVertical",
5959
+ info: "Info",
5960
+ warning: "Warning",
5961
+ error: "WarningCircle"
5962
+ };
5963
+ tablerAliases = {
5964
+ // lucide name → tabler suffix (after the `Icon` prefix)
5965
+ search: "Search",
5966
+ close: "X",
5967
+ loader: "Loader2",
5968
+ refresh: "Refresh",
5969
+ "sort-asc": "SortAscending",
5970
+ "sort-desc": "SortDescending",
5971
+ "chevron-down": "ChevronDown",
5972
+ "chevron-up": "ChevronUp",
5973
+ "chevron-left": "ChevronLeft",
5974
+ "chevron-right": "ChevronRight",
5975
+ "help-circle": "HelpCircle",
5976
+ "alert-triangle": "AlertTriangle",
5977
+ "alert-circle": "AlertCircle",
5978
+ "check-circle": "CircleCheck",
5979
+ "x-circle": "CircleX",
5980
+ edit: "Pencil",
5981
+ trash: "Trash",
5982
+ send: "Send",
5983
+ external: "ExternalLink",
5984
+ plus: "Plus",
5985
+ x: "X",
5986
+ check: "Check",
5987
+ star: "Star",
5988
+ heart: "Heart",
5989
+ home: "Home",
5990
+ user: "User",
5991
+ users: "Users",
5992
+ settings: "Settings",
5993
+ menu: "Menu2",
5994
+ copy: "Copy",
5995
+ download: "Download",
5996
+ upload: "Upload",
5997
+ filter: "Filter",
5998
+ calendar: "Calendar",
5999
+ clock: "Clock",
6000
+ bell: "Bell",
6001
+ mail: "Mail",
6002
+ envelope: "Mail",
6003
+ lock: "Lock",
6004
+ unlock: "LockOpen",
6005
+ eye: "Eye",
6006
+ "eye-off": "EyeOff",
6007
+ more: "Dots",
6008
+ "more-vertical": "DotsVertical",
6009
+ info: "InfoCircle"
6010
+ };
6011
+ faAliases = {
6012
+ // lucide name → fa-solid suffix (after the `Fa` prefix)
6013
+ search: "Search",
6014
+ close: "Times",
6015
+ x: "Times",
6016
+ loader: "Spinner",
6017
+ refresh: "Sync",
6018
+ "sort-asc": "SortAmountUp",
6019
+ "sort-desc": "SortAmountDown",
6020
+ "chevron-down": "ChevronDown",
6021
+ "chevron-up": "ChevronUp",
6022
+ "chevron-left": "ChevronLeft",
6023
+ "chevron-right": "ChevronRight",
6024
+ "help-circle": "QuestionCircle",
6025
+ "alert-triangle": "ExclamationTriangle",
6026
+ "alert-circle": "ExclamationCircle",
6027
+ "check-circle": "CheckCircle",
6028
+ "x-circle": "TimesCircle",
6029
+ edit: "Edit",
6030
+ pencil: "Pencil",
6031
+ trash: "Trash",
6032
+ send: "PaperPlane",
6033
+ external: "ExternalLinkAlt",
6034
+ plus: "Plus",
6035
+ minus: "Minus",
6036
+ check: "Check",
6037
+ star: "Star",
6038
+ heart: "Heart",
6039
+ home: "Home",
6040
+ user: "User",
6041
+ users: "Users",
6042
+ settings: "Cog",
6043
+ menu: "Bars",
6044
+ "arrow-up": "ArrowUp",
6045
+ "arrow-down": "ArrowDown",
6046
+ "arrow-left": "ArrowLeft",
6047
+ "arrow-right": "ArrowRight",
6048
+ copy: "Copy",
6049
+ download: "Download",
6050
+ upload: "Upload",
6051
+ filter: "Filter",
6052
+ calendar: "Calendar",
6053
+ clock: "Clock",
6054
+ bell: "Bell",
6055
+ mail: "Envelope",
6056
+ envelope: "Envelope",
6057
+ lock: "Lock",
6058
+ unlock: "LockOpen",
6059
+ eye: "Eye",
6060
+ "eye-off": "EyeSlash",
6061
+ more: "EllipsisH",
6062
+ "more-vertical": "EllipsisV",
6063
+ info: "InfoCircle",
6064
+ warning: "ExclamationTriangle"
6065
+ };
6066
+ warned = /* @__PURE__ */ new Set();
6067
+ }
6068
+ });
6069
+ function kebabToPascal2(name) {
6070
+ return name.split("-").map((part) => {
6071
+ if (/^\d+$/.test(part)) return part;
6072
+ return part.charAt(0).toUpperCase() + part.slice(1);
6073
+ }).join("");
6074
+ }
5675
6075
  function resolveIcon(name) {
5676
6076
  const cached = resolvedCache.get(name);
5677
6077
  if (cached) return cached;
@@ -5681,28 +6081,30 @@ function resolveIcon(name) {
5681
6081
  }
5682
6082
  function doResolve(name) {
5683
6083
  if (iconAliases[name]) return iconAliases[name];
5684
- const pascalName = kebabToPascal(name);
5685
- const directLookup = LucideIcons[pascalName];
6084
+ const pascalName = kebabToPascal2(name);
6085
+ const directLookup = LucideIcons2[pascalName];
5686
6086
  if (directLookup && typeof directLookup === "object") return directLookup;
5687
- const asIs = LucideIcons[name];
6087
+ const asIs = LucideIcons2[name];
5688
6088
  if (asIs && typeof asIs === "object") return asIs;
5689
- return LucideIcons.HelpCircle;
6089
+ return LucideIcons2.HelpCircle;
5690
6090
  }
5691
6091
  var iconAliases, resolvedCache, sizeClasses, animationClasses, Icon;
5692
6092
  var init_Icon = __esm({
5693
6093
  "components/atoms/Icon.tsx"() {
6094
+ "use client";
5694
6095
  init_cn();
6096
+ init_iconFamily();
5695
6097
  iconAliases = {
5696
- "close": LucideIcons.X,
5697
- "trash": LucideIcons.Trash2,
5698
- "loader": LucideIcons.Loader2,
5699
- "stop": LucideIcons.Square,
5700
- "volume": LucideIcons.Volume2,
5701
- "volume-off": LucideIcons.VolumeX,
5702
- "refresh": LucideIcons.RefreshCw,
5703
- "share": LucideIcons.Share2,
5704
- "sort-asc": LucideIcons.ArrowUpNarrowWide,
5705
- "sort-desc": LucideIcons.ArrowDownNarrowWide
6098
+ "close": LucideIcons2.X,
6099
+ "trash": LucideIcons2.Trash2,
6100
+ "loader": LucideIcons2.Loader2,
6101
+ "stop": LucideIcons2.Square,
6102
+ "volume": LucideIcons2.Volume2,
6103
+ "volume-off": LucideIcons2.VolumeX,
6104
+ "refresh": LucideIcons2.RefreshCw,
6105
+ "share": LucideIcons2.Share2,
6106
+ "sort-asc": LucideIcons2.ArrowUpNarrowWide,
6107
+ "sort-desc": LucideIcons2.ArrowDownNarrowWide
5706
6108
  };
5707
6109
  resolvedCache = /* @__PURE__ */ new Map();
5708
6110
  sizeClasses = {
@@ -5727,22 +6129,50 @@ var init_Icon = __esm({
5727
6129
  strokeWidth,
5728
6130
  style
5729
6131
  }) => {
5730
- const IconComponent = icon ?? (name ? resolveIcon(name) : LucideIcons.HelpCircle);
6132
+ const family = useIconFamily();
6133
+ const RenderedComponent = React98__default.useMemo(() => {
6134
+ if (icon) return null;
6135
+ return name ? resolveIconForFamily(name, family) : null;
6136
+ }, [icon, name, family]);
5731
6137
  const effectiveStrokeWidth = strokeWidth ?? void 0;
6138
+ const inlineStyle = {
6139
+ ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
6140
+ ...style
6141
+ };
6142
+ const composedClassName = cn(
6143
+ sizeClasses[size],
6144
+ animationClasses[animation],
6145
+ color ? color : "text-current",
6146
+ className
6147
+ );
6148
+ if (icon) {
6149
+ const Direct = icon;
6150
+ return /* @__PURE__ */ jsx(
6151
+ Direct,
6152
+ {
6153
+ className: composedClassName,
6154
+ strokeWidth: effectiveStrokeWidth,
6155
+ style: inlineStyle
6156
+ }
6157
+ );
6158
+ }
6159
+ if (RenderedComponent) {
6160
+ return /* @__PURE__ */ jsx(
6161
+ RenderedComponent,
6162
+ {
6163
+ className: composedClassName,
6164
+ strokeWidth: effectiveStrokeWidth,
6165
+ style: inlineStyle
6166
+ }
6167
+ );
6168
+ }
6169
+ const Fallback = LucideIcons2.HelpCircle;
5732
6170
  return /* @__PURE__ */ jsx(
5733
- IconComponent,
6171
+ Fallback,
5734
6172
  {
5735
- className: cn(
5736
- sizeClasses[size],
5737
- animationClasses[animation],
5738
- color ? color : "text-current",
5739
- className
5740
- ),
6173
+ className: composedClassName,
5741
6174
  strokeWidth: effectiveStrokeWidth,
5742
- style: {
5743
- ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
5744
- ...style
5745
- }
6175
+ style: inlineStyle
5746
6176
  }
5747
6177
  );
5748
6178
  };
@@ -5752,14 +6182,13 @@ var init_Icon = __esm({
5752
6182
  function resolveIconProp(value, sizeClass) {
5753
6183
  if (!value) return null;
5754
6184
  if (typeof value === "string") {
5755
- const Resolved = resolveIcon(value);
5756
- return Resolved ? /* @__PURE__ */ jsx(Resolved, { className: sizeClass }) : null;
6185
+ return /* @__PURE__ */ jsx(Icon, { name: value, className: sizeClass });
5757
6186
  }
5758
6187
  if (typeof value === "function") {
5759
6188
  const IconComp = value;
5760
6189
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
5761
6190
  }
5762
- if (React96__default.isValidElement(value)) {
6191
+ if (React98__default.isValidElement(value)) {
5763
6192
  return value;
5764
6193
  }
5765
6194
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -5832,10 +6261,10 @@ var init_Button = __esm({
5832
6261
  };
5833
6262
  iconSizeStyles = {
5834
6263
  sm: "h-3.5 w-3.5",
5835
- md: "h-4 w-4",
6264
+ md: "h-icon-default w-icon-default",
5836
6265
  lg: "h-5 w-5"
5837
6266
  };
5838
- Button = React96__default.forwardRef(
6267
+ Button = React98__default.forwardRef(
5839
6268
  ({
5840
6269
  className,
5841
6270
  variant = "primary",
@@ -5885,7 +6314,7 @@ var init_Button = __esm({
5885
6314
  ...props,
5886
6315
  "data-testid": props["data-testid"] ?? (action ? `action-${action}` : void 0),
5887
6316
  children: [
5888
- isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : resolvedLeftIcon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedLeftIcon }),
6317
+ isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "h-icon-default w-icon-default animate-spin" }) : resolvedLeftIcon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedLeftIcon }),
5889
6318
  children || label,
5890
6319
  resolvedRightIcon && !isLoading && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedRightIcon })
5891
6320
  ]
@@ -5900,7 +6329,7 @@ var Dialog;
5900
6329
  var init_Dialog = __esm({
5901
6330
  "components/atoms/Dialog.tsx"() {
5902
6331
  init_cn();
5903
- Dialog = React96__default.forwardRef(
6332
+ Dialog = React98__default.forwardRef(
5904
6333
  ({
5905
6334
  role = "dialog",
5906
6335
  "aria-modal": ariaModal = true,
@@ -6074,7 +6503,7 @@ var init_Modal = __esm({
6074
6503
  // Reset browser-default dialog chrome — we own styling.
6075
6504
  "m-0 p-0 border-0 bg-transparent",
6076
6505
  // Pre-existing dialog frame
6077
- "pointer-events-auto w-full flex flex-col bg-surface border shadow-lg rounded-md",
6506
+ "pointer-events-auto w-full flex flex-col bg-surface border shadow-elevation-dialog rounded-container",
6078
6507
  // Desktop sizing + viewport-aware floor.
6079
6508
  sizeClasses2[size],
6080
6509
  minWidthClasses[size],
@@ -6134,7 +6563,7 @@ var init_Modal = __esm({
6134
6563
  {
6135
6564
  variant: "ghost",
6136
6565
  size: "sm",
6137
- icon: X,
6566
+ icon: "x",
6138
6567
  onClick: handleClose,
6139
6568
  "data-event": "CLOSE",
6140
6569
  "aria-label": "Close modal"
@@ -6291,7 +6720,7 @@ var init_Drawer = __esm({
6291
6720
  {
6292
6721
  variant: "ghost",
6293
6722
  size: "sm",
6294
- icon: X,
6723
+ icon: "x",
6295
6724
  onClick: handleClose,
6296
6725
  "aria-label": "Close drawer",
6297
6726
  className: cn(!title && "ml-auto")
@@ -6385,13 +6814,10 @@ var init_Badge = __esm({
6385
6814
  md: "px-2.5 py-1 text-sm",
6386
6815
  lg: "px-3 py-1.5 text-base"
6387
6816
  };
6388
- Badge = React96__default.forwardRef(
6817
+ Badge = React98__default.forwardRef(
6389
6818
  ({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
6390
6819
  const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
6391
- const resolvedIcon = typeof icon === "string" ? (() => {
6392
- const I = resolveIcon(icon);
6393
- return I ? /* @__PURE__ */ jsx(I, { className: iconSizes3[size] }) : null;
6394
- })() : icon;
6820
+ const resolvedIcon = typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: iconSizes3[size] }) : icon;
6395
6821
  return /* @__PURE__ */ jsxs(
6396
6822
  "span",
6397
6823
  {
@@ -6451,10 +6877,10 @@ var init_Toast = __esm({
6451
6877
  warning: "bg-card border-[length:var(--border-width)] border-warning"
6452
6878
  };
6453
6879
  iconMap = {
6454
- success: CheckCircle,
6455
- error: AlertCircle,
6456
- info: Info,
6457
- warning: AlertTriangle
6880
+ success: "check-circle",
6881
+ error: "alert-circle",
6882
+ info: "info",
6883
+ warning: "alert-triangle"
6458
6884
  };
6459
6885
  iconColors = {
6460
6886
  success: "text-success",
@@ -6501,7 +6927,7 @@ var init_Toast = __esm({
6501
6927
  // `min-w-[300px]` only kicks in at `sm:` and above so a phone
6502
6928
  // viewport doesn't get a toast wider than the screen near the
6503
6929
  // edge. `max-w-[calc(100vw-2rem)]` clamps to viewport too.
6504
- "border-l-4 p-4 shadow min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
6930
+ "border-l-4 p-4 shadow-elevation-toast min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
6505
6931
  "rounded-sm",
6506
6932
  variantClasses[variant],
6507
6933
  className
@@ -6511,7 +6937,7 @@ var init_Toast = __esm({
6511
6937
  /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
6512
6938
  Icon,
6513
6939
  {
6514
- icon: iconMap[variant],
6940
+ name: iconMap[variant],
6515
6941
  size: "md",
6516
6942
  className: iconColors[variant]
6517
6943
  }
@@ -6528,7 +6954,7 @@ var init_Toast = __esm({
6528
6954
  {
6529
6955
  variant: "ghost",
6530
6956
  size: "sm",
6531
- icon: X,
6957
+ icon: "x",
6532
6958
  onClick: handleDismiss,
6533
6959
  "aria-label": "Dismiss toast",
6534
6960
  className: "flex-shrink-0"
@@ -6699,7 +7125,7 @@ var init_SvgFlow = __esm({
6699
7125
  opacity = 1,
6700
7126
  className
6701
7127
  }) => {
6702
- const markerId = React96__default.useMemo(() => {
7128
+ const markerId = React98__default.useMemo(() => {
6703
7129
  flowIdCounter += 1;
6704
7130
  return `almadar-flow-arrow-${flowIdCounter}`;
6705
7131
  }, []);
@@ -7242,7 +7668,7 @@ var init_SvgRing = __esm({
7242
7668
  className,
7243
7669
  label
7244
7670
  }) => {
7245
- const gradientId = React96__default.useMemo(() => {
7671
+ const gradientId = React98__default.useMemo(() => {
7246
7672
  ringIdCounter += 1;
7247
7673
  return `almadar-ring-glow-${ringIdCounter}`;
7248
7674
  }, []);
@@ -7403,7 +7829,8 @@ var Input;
7403
7829
  var init_Input = __esm({
7404
7830
  "components/atoms/Input.tsx"() {
7405
7831
  init_cn();
7406
- Input = React96__default.forwardRef(
7832
+ init_Icon();
7833
+ Input = React98__default.forwardRef(
7407
7834
  ({
7408
7835
  className,
7409
7836
  inputType,
@@ -7421,7 +7848,7 @@ var init_Input = __esm({
7421
7848
  ...props
7422
7849
  }, ref) => {
7423
7850
  const type = inputType || htmlType || "text";
7424
- const resolvedLeftIcon = leftIcon || IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "h-4 w-4" });
7851
+ const resolvedLeftIcon = leftIcon || IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "h-icon-default w-icon-default" });
7425
7852
  const showClearButton = clearable && value && String(value).length > 0;
7426
7853
  const baseClassName = cn(
7427
7854
  "block w-full rounded-sm transition-all duration-[var(--transition-fast)]",
@@ -7453,7 +7880,7 @@ var init_Input = __esm({
7453
7880
  ]
7454
7881
  }
7455
7882
  ),
7456
- /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-muted-foreground", children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" }) })
7883
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-muted-foreground", children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: "h-icon-default w-icon-default" }) })
7457
7884
  ] });
7458
7885
  }
7459
7886
  if (type === "textarea") {
@@ -7507,7 +7934,7 @@ var init_Input = __esm({
7507
7934
  type: "button",
7508
7935
  onClick: onClear,
7509
7936
  className: "absolute inset-y-0 right-0 pr-3 flex items-center text-muted-foreground hover:text-foreground",
7510
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
7937
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-icon-default w-icon-default" })
7511
7938
  }
7512
7939
  ),
7513
7940
  rightIcon && !showClearButton && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center text-muted-foreground", children: rightIcon })
@@ -7521,7 +7948,7 @@ var Label;
7521
7948
  var init_Label = __esm({
7522
7949
  "components/atoms/Label.tsx"() {
7523
7950
  init_cn();
7524
- Label = React96__default.forwardRef(
7951
+ Label = React98__default.forwardRef(
7525
7952
  ({ className, required, children, ...props }, ref) => {
7526
7953
  return /* @__PURE__ */ jsxs(
7527
7954
  "label",
@@ -7547,7 +7974,7 @@ var Textarea;
7547
7974
  var init_Textarea = __esm({
7548
7975
  "components/atoms/Textarea.tsx"() {
7549
7976
  init_cn();
7550
- Textarea = React96__default.forwardRef(
7977
+ Textarea = React98__default.forwardRef(
7551
7978
  ({ className, error, ...props }, ref) => {
7552
7979
  return /* @__PURE__ */ jsx(
7553
7980
  "textarea",
@@ -7576,7 +8003,8 @@ var Select;
7576
8003
  var init_Select = __esm({
7577
8004
  "components/atoms/Select.tsx"() {
7578
8005
  init_cn();
7579
- Select = React96__default.forwardRef(
8006
+ init_Icon();
8007
+ Select = React98__default.forwardRef(
7580
8008
  ({ className, options, placeholder, error, ...props }, ref) => {
7581
8009
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
7582
8010
  /* @__PURE__ */ jsxs(
@@ -7607,7 +8035,7 @@ var init_Select = __esm({
7607
8035
  ]
7608
8036
  }
7609
8037
  ),
7610
- /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none", children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 text-foreground" }) })
8038
+ /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none", children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: "h-icon-default w-icon-default text-foreground" }) })
7611
8039
  ] });
7612
8040
  }
7613
8041
  );
@@ -7618,7 +8046,7 @@ var Checkbox;
7618
8046
  var init_Checkbox = __esm({
7619
8047
  "components/atoms/Checkbox.tsx"() {
7620
8048
  init_cn();
7621
- Checkbox = React96__default.forwardRef(
8049
+ Checkbox = React98__default.forwardRef(
7622
8050
  ({ className, label, id, ...props }, ref) => {
7623
8051
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
7624
8052
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -7660,23 +8088,23 @@ var init_Card = __esm({
7660
8088
  default: [
7661
8089
  "bg-card",
7662
8090
  "border-[length:var(--border-width)] border-border",
7663
- "shadow-sm",
8091
+ "shadow-elevation-card",
7664
8092
  "transition-all duration-[var(--transition-normal)]",
7665
- "hover:shadow-lg hover:-translate-y-0.5"
8093
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
7666
8094
  ].join(" "),
7667
8095
  bordered: [
7668
8096
  "bg-card",
7669
8097
  "border-[length:var(--border-width)] border-border",
7670
- "shadow-sm",
8098
+ "shadow-elevation-card",
7671
8099
  "transition-all duration-[var(--transition-normal)]",
7672
- "hover:shadow-lg hover:-translate-y-0.5"
8100
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
7673
8101
  ].join(" "),
7674
8102
  elevated: [
7675
8103
  "bg-card",
7676
8104
  "border-[length:var(--border-width)] border-border",
7677
8105
  "shadow",
7678
8106
  "transition-all duration-[var(--transition-normal)]",
7679
- "hover:shadow-lg hover:-translate-y-0.5"
8107
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
7680
8108
  ].join(" "),
7681
8109
  // Interactive variant with theme-specific hover effects
7682
8110
  interactive: [
@@ -7685,22 +8113,22 @@ var init_Card = __esm({
7685
8113
  "shadow",
7686
8114
  "cursor-pointer",
7687
8115
  "transition-all duration-[var(--transition-normal)]",
7688
- "hover:shadow-lg"
8116
+ "hover:shadow-elevation-dialog"
7689
8117
  ].join(" ")
7690
8118
  };
7691
8119
  paddingStyles2 = {
7692
8120
  none: "",
7693
- sm: "p-3",
7694
- md: "p-4",
7695
- lg: "p-6"
8121
+ sm: "p-card-sm",
8122
+ md: "p-card-md",
8123
+ lg: "p-card-lg"
7696
8124
  };
7697
8125
  shadowStyles2 = {
7698
8126
  none: "shadow-none",
7699
- sm: "shadow-sm",
8127
+ sm: "shadow-elevation-card",
7700
8128
  md: "shadow",
7701
- lg: "shadow-lg"
8129
+ lg: "shadow-elevation-dialog"
7702
8130
  };
7703
- Card = React96__default.forwardRef(
8131
+ Card = React98__default.forwardRef(
7704
8132
  ({
7705
8133
  className,
7706
8134
  variant = "bordered",
@@ -7716,7 +8144,7 @@ var init_Card = __esm({
7716
8144
  {
7717
8145
  ref,
7718
8146
  className: cn(
7719
- "rounded-md",
8147
+ "rounded-container",
7720
8148
  "transition-all duration-[var(--transition-normal)]",
7721
8149
  variantStyles4[variant],
7722
8150
  paddingStyles2[padding],
@@ -7736,9 +8164,9 @@ var init_Card = __esm({
7736
8164
  }
7737
8165
  );
7738
8166
  Card.displayName = "Card";
7739
- CardHeader = React96__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
8167
+ CardHeader = React98__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
7740
8168
  CardHeader.displayName = "CardHeader";
7741
- CardTitle = React96__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8169
+ CardTitle = React98__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7742
8170
  "h3",
7743
8171
  {
7744
8172
  ref,
@@ -7751,11 +8179,11 @@ var init_Card = __esm({
7751
8179
  }
7752
8180
  ));
7753
8181
  CardTitle.displayName = "CardTitle";
7754
- CardContent = React96__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
8182
+ CardContent = React98__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
7755
8183
  CardContent.displayName = "CardContent";
7756
8184
  CardBody = CardContent;
7757
8185
  CardBody.displayName = "CardBody";
7758
- CardFooter = React96__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8186
+ CardFooter = React98__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7759
8187
  "div",
7760
8188
  {
7761
8189
  ref,
@@ -7810,7 +8238,7 @@ var init_FilterPill = __esm({
7810
8238
  md: "w-3.5 h-3.5",
7811
8239
  lg: "w-4 h-4"
7812
8240
  };
7813
- FilterPill = React96__default.forwardRef(
8241
+ FilterPill = React98__default.forwardRef(
7814
8242
  ({
7815
8243
  className,
7816
8244
  variant = "default",
@@ -7835,17 +8263,13 @@ var init_FilterPill = __esm({
7835
8263
  onRemove?.();
7836
8264
  if (removeEvent) eventBus.emit(`UI:${removeEvent}`, { label: payloadLabel });
7837
8265
  }, [onRemove, removeEvent, eventBus, payloadLabel]);
7838
- const XIcon = resolveIcon("x");
7839
- const resolvedIcon = typeof icon === "string" ? (() => {
7840
- const I = resolveIcon(icon);
7841
- return I ? /* @__PURE__ */ jsx(I, { className: iconSizes[size] }) : null;
7842
- })() : icon;
8266
+ const resolvedIcon = typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: iconSizes[size] }) : icon;
7843
8267
  return /* @__PURE__ */ jsxs(
7844
8268
  "span",
7845
8269
  {
7846
8270
  ref,
7847
8271
  className: cn(
7848
- "inline-flex items-center gap-1 font-bold rounded-full",
8272
+ "inline-flex items-center gap-1 font-bold rounded-pill",
7849
8273
  variantStyles5[variant],
7850
8274
  sizeStyles4[size],
7851
8275
  (onClick || clickEvent) && "cursor-pointer",
@@ -7868,7 +8292,7 @@ var init_FilterPill = __esm({
7868
8292
  className: cn(
7869
8293
  "ml-0.5 rounded-full hover:bg-foreground/10 transition-colors flex items-center justify-center"
7870
8294
  ),
7871
- children: XIcon ? /* @__PURE__ */ jsx(XIcon, { className: iconSizes[size] }) : /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: "\xD7" })
8295
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: iconSizes[size] })
7872
8296
  }
7873
8297
  )
7874
8298
  ]
@@ -7883,13 +8307,14 @@ var sizeStyles5, Spinner;
7883
8307
  var init_Spinner = __esm({
7884
8308
  "components/atoms/Spinner.tsx"() {
7885
8309
  init_cn();
8310
+ init_Icon();
7886
8311
  sizeStyles5 = {
7887
8312
  xs: "h-3 w-3",
7888
8313
  sm: "h-4 w-4",
7889
8314
  md: "h-6 w-6",
7890
8315
  lg: "h-8 w-8"
7891
8316
  };
7892
- Spinner = React96__default.forwardRef(
8317
+ Spinner = React98__default.forwardRef(
7893
8318
  ({ className, size = "md", ...props }, ref) => {
7894
8319
  return /* @__PURE__ */ jsx(
7895
8320
  "div",
@@ -7897,7 +8322,7 @@ var init_Spinner = __esm({
7897
8322
  ref,
7898
8323
  className: cn("text-foreground", className),
7899
8324
  ...props,
7900
- children: /* @__PURE__ */ jsx(Loader2, { className: cn("animate-spin", sizeStyles5[size]) })
8325
+ children: /* @__PURE__ */ jsx(Icon, { name: "loader", className: cn("animate-spin", sizeStyles5[size]) })
7901
8326
  }
7902
8327
  );
7903
8328
  }
@@ -7916,6 +8341,7 @@ var sizeClasses3, iconSizeClasses, statusSizeClasses, statusClasses, badgeSizeCl
7916
8341
  var init_Avatar = __esm({
7917
8342
  "components/atoms/Avatar.tsx"() {
7918
8343
  "use client";
8344
+ init_Icon();
7919
8345
  init_cn();
7920
8346
  init_useEventBus();
7921
8347
  sizeClasses3 = {
@@ -7946,8 +8372,8 @@ var init_Avatar = __esm({
7946
8372
  busy: "bg-error"
7947
8373
  };
7948
8374
  badgeSizeClasses = {
7949
- xs: "w-3 h-3 text-[8px]",
7950
- sm: "w-4 h-4 text-[10px]",
8375
+ xs: "w-3 h-3 text-xs",
8376
+ sm: "w-4 h-4 text-xs",
7951
8377
  md: "w-5 h-5 text-xs",
7952
8378
  lg: "w-6 h-6 text-sm",
7953
8379
  xl: "w-7 h-7 text-base"
@@ -7957,7 +8383,7 @@ var init_Avatar = __esm({
7957
8383
  alt,
7958
8384
  name,
7959
8385
  initials: providedInitials,
7960
- icon: Icon3,
8386
+ icon: IconComponent,
7961
8387
  size = "md",
7962
8388
  status,
7963
8389
  badge,
@@ -7970,7 +8396,7 @@ var init_Avatar = __esm({
7970
8396
  const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
7971
8397
  const hasImage = !!src;
7972
8398
  const hasInitials = !!initials;
7973
- const hasIcon = !!Icon3;
8399
+ const hasIcon = !!IconComponent;
7974
8400
  const getInitialsBackground = () => "bg-primary text-primary-foreground";
7975
8401
  const isClickable = action || onClick;
7976
8402
  const handleClick = () => {
@@ -8014,8 +8440,8 @@ var init_Avatar = __esm({
8014
8440
  ),
8015
8441
  children: initials.substring(0, 2).toUpperCase()
8016
8442
  }
8017
- ) : hasIcon ? /* @__PURE__ */ jsx(
8018
- Icon3,
8443
+ ) : hasIcon && IconComponent ? /* @__PURE__ */ jsx(
8444
+ IconComponent,
8019
8445
  {
8020
8446
  className: cn(
8021
8447
  "text-foreground",
@@ -8023,8 +8449,9 @@ var init_Avatar = __esm({
8023
8449
  )
8024
8450
  }
8025
8451
  ) : /* @__PURE__ */ jsx(
8026
- User,
8452
+ Icon,
8027
8453
  {
8454
+ name: "user",
8028
8455
  className: cn(
8029
8456
  "text-foreground",
8030
8457
  iconSizeClasses[size]
@@ -8219,7 +8646,7 @@ var init_ProgressBar = __esm({
8219
8646
  "div",
8220
8647
  {
8221
8648
  className: cn(
8222
- "h-full transition-all duration-300 ease-out",
8649
+ "h-full transition-all duration-normal ease-emphasized",
8223
8650
  colorClasses[effectiveColor]
8224
8651
  ),
8225
8652
  style: { width: `${percentage}%` },
@@ -8275,7 +8702,7 @@ var init_ProgressBar = __esm({
8275
8702
  strokeDashoffset: offset,
8276
8703
  strokeLinecap: "round",
8277
8704
  className: cn(
8278
- "transition-all duration-300 ease-out",
8705
+ "transition-all duration-normal ease-emphasized",
8279
8706
  colorClasses[effectiveColor]
8280
8707
  )
8281
8708
  }
@@ -8314,7 +8741,7 @@ var init_ProgressBar = __esm({
8314
8741
  "div",
8315
8742
  {
8316
8743
  className: cn(
8317
- "h-full transition-all duration-300 ease-out",
8744
+ "h-full transition-all duration-normal ease-emphasized",
8318
8745
  (isActive || isPartial) && colorClasses[effectiveColor]
8319
8746
  ),
8320
8747
  style: {
@@ -8337,7 +8764,7 @@ var Radio;
8337
8764
  var init_Radio = __esm({
8338
8765
  "components/atoms/Radio.tsx"() {
8339
8766
  init_cn();
8340
- Radio = React96__default.forwardRef(
8767
+ Radio = React98__default.forwardRef(
8341
8768
  ({
8342
8769
  label,
8343
8770
  helperText,
@@ -8509,7 +8936,7 @@ var init_Switch = __esm({
8509
8936
  "components/atoms/Switch.tsx"() {
8510
8937
  "use client";
8511
8938
  init_cn();
8512
- Switch = React96.forwardRef(
8939
+ Switch = React98.forwardRef(
8513
8940
  ({
8514
8941
  checked,
8515
8942
  defaultChecked = false,
@@ -8520,10 +8947,10 @@ var init_Switch = __esm({
8520
8947
  name,
8521
8948
  className
8522
8949
  }, ref) => {
8523
- const [isChecked, setIsChecked] = React96.useState(
8950
+ const [isChecked, setIsChecked] = React98.useState(
8524
8951
  checked !== void 0 ? checked : defaultChecked
8525
8952
  );
8526
- React96.useEffect(() => {
8953
+ React98.useEffect(() => {
8527
8954
  if (checked !== void 0) {
8528
8955
  setIsChecked(checked);
8529
8956
  }
@@ -8696,6 +9123,7 @@ var sizeClasses4, iconSizes2, ThemeToggle;
8696
9123
  var init_ThemeToggle = __esm({
8697
9124
  "components/atoms/ThemeToggle.tsx"() {
8698
9125
  "use client";
9126
+ init_Icon();
8699
9127
  init_cn();
8700
9128
  init_ThemeContext();
8701
9129
  sizeClasses4 = {
@@ -8725,7 +9153,7 @@ var init_ThemeToggle = __esm({
8725
9153
  "text-foreground",
8726
9154
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
8727
9155
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
8728
- "transition-colors duration-200",
9156
+ "transition-colors duration-fast",
8729
9157
  sizeClasses4[size],
8730
9158
  className
8731
9159
  ),
@@ -8733,13 +9161,15 @@ var init_ThemeToggle = __esm({
8733
9161
  title: isDark ? "Switch to light mode" : "Switch to dark mode",
8734
9162
  children: [
8735
9163
  isDark ? /* @__PURE__ */ jsx(
8736
- Sun,
9164
+ Icon,
8737
9165
  {
9166
+ name: "sun",
8738
9167
  className: cn(iconSizes2[size], "text-foreground")
8739
9168
  }
8740
9169
  ) : /* @__PURE__ */ jsx(
8741
- Moon,
9170
+ Icon,
8742
9171
  {
9172
+ name: "moon",
8743
9173
  className: cn(iconSizes2[size], "text-foreground")
8744
9174
  }
8745
9175
  ),
@@ -8772,7 +9202,7 @@ var init_FlipContainer = __esm({
8772
9202
  children: /* @__PURE__ */ jsx(
8773
9203
  Box,
8774
9204
  {
8775
- className: "relative w-full h-full transition-transform duration-500",
9205
+ className: "relative w-full h-full transition-transform duration-slow",
8776
9206
  style: {
8777
9207
  transformStyle: "preserve-3d",
8778
9208
  transform: flipped ? "rotateY(180deg)" : "rotateY(0deg)"
@@ -8790,7 +9220,7 @@ var Aside;
8790
9220
  var init_Aside = __esm({
8791
9221
  "components/atoms/Aside.tsx"() {
8792
9222
  init_cn();
8793
- Aside = React96__default.forwardRef(
9223
+ Aside = React98__default.forwardRef(
8794
9224
  ({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
8795
9225
  );
8796
9226
  Aside.displayName = "Aside";
@@ -8830,7 +9260,7 @@ var init_ConditionalWrapper = __esm({
8830
9260
  Box,
8831
9261
  {
8832
9262
  overflow: "hidden",
8833
- className: `transition-all duration-200 ${isVisible ? "opacity-100 max-h-[1000px]" : "opacity-0 max-h-0"}`,
9263
+ className: `transition-all duration-fast ${isVisible ? "opacity-100 max-h-[1000px]" : "opacity-0 max-h-0"}`,
8834
9264
  children: isVisible ? children : fallback
8835
9265
  }
8836
9266
  );
@@ -8867,8 +9297,8 @@ var init_LawReferenceTooltip = __esm({
8867
9297
  position = "top",
8868
9298
  className
8869
9299
  }) => {
8870
- const [isVisible, setIsVisible] = React96__default.useState(false);
8871
- const timeoutRef = React96__default.useRef(null);
9300
+ const [isVisible, setIsVisible] = React98__default.useState(false);
9301
+ const timeoutRef = React98__default.useRef(null);
8872
9302
  const handleMouseEnter = () => {
8873
9303
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8874
9304
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -8877,7 +9307,7 @@ var init_LawReferenceTooltip = __esm({
8877
9307
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8878
9308
  setIsVisible(false);
8879
9309
  };
8880
- React96__default.useEffect(() => {
9310
+ React98__default.useEffect(() => {
8881
9311
  return () => {
8882
9312
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8883
9313
  };
@@ -9087,7 +9517,7 @@ var init_StatusDot = __esm({
9087
9517
  md: "w-2.5 h-2.5",
9088
9518
  lg: "w-3 h-3"
9089
9519
  };
9090
- StatusDot = React96__default.forwardRef(
9520
+ StatusDot = React98__default.forwardRef(
9091
9521
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
9092
9522
  return /* @__PURE__ */ jsx(
9093
9523
  "span",
@@ -9126,21 +9556,22 @@ function resolveColor(dir, invert) {
9126
9556
  const isGood = invert ? !isPositive : isPositive;
9127
9557
  return isGood ? "text-success" : "text-error";
9128
9558
  }
9129
- var sizeStyles7, iconMap2, TrendIndicator;
9559
+ var sizeStyles7, iconNameMap, TrendIndicator;
9130
9560
  var init_TrendIndicator = __esm({
9131
9561
  "components/atoms/TrendIndicator.tsx"() {
9562
+ init_Icon();
9132
9563
  init_cn();
9133
9564
  sizeStyles7 = {
9134
9565
  sm: { icon: "w-3 h-3", text: "text-xs" },
9135
9566
  md: { icon: "w-4 h-4", text: "text-sm" },
9136
9567
  lg: { icon: "w-5 h-5", text: "text-base" }
9137
9568
  };
9138
- iconMap2 = {
9139
- up: TrendingUp,
9140
- down: TrendingDown,
9141
- flat: ArrowRight
9569
+ iconNameMap = {
9570
+ up: "trending-up",
9571
+ down: "trending-down",
9572
+ flat: "arrow-right"
9142
9573
  };
9143
- TrendIndicator = React96__default.forwardRef(
9574
+ TrendIndicator = React98__default.forwardRef(
9144
9575
  ({
9145
9576
  className,
9146
9577
  value,
@@ -9153,7 +9584,7 @@ var init_TrendIndicator = __esm({
9153
9584
  }, ref) => {
9154
9585
  const dir = resolveDirection(value, direction);
9155
9586
  const colorClass = resolveColor(dir, invert);
9156
- const IconComponent = iconMap2[dir];
9587
+ const iconName = iconNameMap[dir];
9157
9588
  const styles = sizeStyles7[size];
9158
9589
  const formattedValue = value !== void 0 ? `${value > 0 ? "+" : ""}${value}%` : void 0;
9159
9590
  const ariaLabel = label ?? (formattedValue ? `${dir} ${formattedValue}` : dir);
@@ -9171,7 +9602,7 @@ var init_TrendIndicator = __esm({
9171
9602
  "aria-label": ariaLabel,
9172
9603
  ...props,
9173
9604
  children: [
9174
- /* @__PURE__ */ jsx(IconComponent, { className: styles.icon }),
9605
+ /* @__PURE__ */ jsx(Icon, { name: iconName, className: styles.icon }),
9175
9606
  showValue && formattedValue && /* @__PURE__ */ jsx("span", { children: formattedValue })
9176
9607
  ]
9177
9608
  }
@@ -9207,7 +9638,7 @@ var init_RangeSlider = __esm({
9207
9638
  md: "w-4 h-4",
9208
9639
  lg: "w-5 h-5"
9209
9640
  };
9210
- RangeSlider = React96__default.forwardRef(
9641
+ RangeSlider = React98__default.forwardRef(
9211
9642
  ({
9212
9643
  className,
9213
9644
  min = 0,
@@ -9775,7 +10206,7 @@ var init_ContentSection = __esm({
9775
10206
  md: "py-16",
9776
10207
  lg: "py-24"
9777
10208
  };
9778
- ContentSection = React96__default.forwardRef(
10209
+ ContentSection = React98__default.forwardRef(
9779
10210
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
9780
10211
  return /* @__PURE__ */ jsx(
9781
10212
  Box,
@@ -10309,7 +10740,7 @@ var init_AnimatedReveal = __esm({
10309
10740
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
10310
10741
  "none": {}
10311
10742
  };
10312
- AnimatedReveal = React96__default.forwardRef(
10743
+ AnimatedReveal = React98__default.forwardRef(
10313
10744
  ({
10314
10745
  trigger = "scroll",
10315
10746
  animation = "fade-up",
@@ -10339,7 +10770,7 @@ var init_AnimatedReveal = __esm({
10339
10770
  if (trigger !== "scroll") return;
10340
10771
  const el = internalRef.current;
10341
10772
  if (!el) return;
10342
- const observer = new IntersectionObserver(
10773
+ const observer2 = new IntersectionObserver(
10343
10774
  ([entry]) => {
10344
10775
  if (entry.isIntersecting) {
10345
10776
  if (once && hasAnimated.current) return;
@@ -10351,8 +10782,8 @@ var init_AnimatedReveal = __esm({
10351
10782
  },
10352
10783
  { threshold }
10353
10784
  );
10354
- observer.observe(el);
10355
- return () => observer.disconnect();
10785
+ observer2.observe(el);
10786
+ return () => observer2.disconnect();
10356
10787
  }, [trigger, threshold, once]);
10357
10788
  const handleMouseEnter = trigger === "hover" ? () => setIsAnimated(true) : void 0;
10358
10789
  const handleMouseLeave = trigger === "hover" ? () => {
@@ -10469,7 +10900,7 @@ var init_AnimatedGraphic = __esm({
10469
10900
  "components/atoms/AnimatedGraphic.tsx"() {
10470
10901
  "use client";
10471
10902
  init_cn();
10472
- AnimatedGraphic = React96__default.forwardRef(
10903
+ AnimatedGraphic = React98__default.forwardRef(
10473
10904
  ({
10474
10905
  src,
10475
10906
  svgContent,
@@ -10492,7 +10923,7 @@ var init_AnimatedGraphic = __esm({
10492
10923
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
10493
10924
  const resolvedSvg = svgContent ?? fetchedSvg;
10494
10925
  const prevAnimateRef = useRef(animate);
10495
- const setRef = React96__default.useCallback(
10926
+ const setRef = React98__default.useCallback(
10496
10927
  (node) => {
10497
10928
  containerRef.current = node;
10498
10929
  if (typeof ref === "function") ref(node);
@@ -10719,9 +11150,9 @@ function ScoreDisplay({
10719
11150
  ...rest
10720
11151
  }) {
10721
11152
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
10722
- const [displayValue, setDisplayValue] = React96.useState(resolvedValue);
10723
- const [isAnimating, setIsAnimating] = React96.useState(false);
10724
- React96.useEffect(() => {
11153
+ const [displayValue, setDisplayValue] = React98.useState(resolvedValue);
11154
+ const [isAnimating, setIsAnimating] = React98.useState(false);
11155
+ React98.useEffect(() => {
10725
11156
  if (!animated || displayValue === resolvedValue) {
10726
11157
  setDisplayValue(resolvedValue);
10727
11158
  return;
@@ -10791,9 +11222,9 @@ function ControlButton({
10791
11222
  className
10792
11223
  }) {
10793
11224
  const eventBus = useEventBus();
10794
- const [isPressed, setIsPressed] = React96.useState(false);
11225
+ const [isPressed, setIsPressed] = React98.useState(false);
10795
11226
  const actualPressed = pressed ?? isPressed;
10796
- const handlePointerDown = React96.useCallback(
11227
+ const handlePointerDown = React98.useCallback(
10797
11228
  (e) => {
10798
11229
  e.preventDefault();
10799
11230
  if (disabled) return;
@@ -10803,7 +11234,7 @@ function ControlButton({
10803
11234
  },
10804
11235
  [disabled, pressEvent, eventBus, onPress]
10805
11236
  );
10806
- const handlePointerUp = React96.useCallback(
11237
+ const handlePointerUp = React98.useCallback(
10807
11238
  (e) => {
10808
11239
  e.preventDefault();
10809
11240
  if (disabled) return;
@@ -10813,7 +11244,7 @@ function ControlButton({
10813
11244
  },
10814
11245
  [disabled, releaseEvent, eventBus, onRelease]
10815
11246
  );
10816
- const handlePointerLeave = React96.useCallback(
11247
+ const handlePointerLeave = React98.useCallback(
10817
11248
  (e) => {
10818
11249
  if (isPressed) {
10819
11250
  setIsPressed(false);
@@ -11719,9 +12150,9 @@ function MiniMap({
11719
12150
  viewportRect,
11720
12151
  className
11721
12152
  }) {
11722
- const canvasRef = React96.useRef(null);
11723
- const frameRef = React96.useRef(0);
11724
- React96.useEffect(() => {
12153
+ const canvasRef = React98.useRef(null);
12154
+ const frameRef = React98.useRef(0);
12155
+ React98.useEffect(() => {
11725
12156
  const canvas = canvasRef.current;
11726
12157
  if (!canvas) return;
11727
12158
  const ctx = canvas.getContext("2d");
@@ -11971,6 +12402,7 @@ var init_ErrorState = __esm({
11971
12402
  init_Box();
11972
12403
  init_Stack();
11973
12404
  init_Typography();
12405
+ init_Icon();
11974
12406
  init_useEventBus();
11975
12407
  init_useTranslate();
11976
12408
  ErrorState = ({
@@ -11998,7 +12430,7 @@ var init_ErrorState = __esm({
11998
12430
  className
11999
12431
  ),
12000
12432
  children: [
12001
- /* @__PURE__ */ jsx(Box, { className: "mb-4 rounded-full bg-error/10 p-3", children: /* @__PURE__ */ jsx(AlertCircle, { className: "h-8 w-8 text-error" }) }),
12433
+ /* @__PURE__ */ jsx(Box, { className: "mb-4 rounded-full bg-error/10 p-3", children: /* @__PURE__ */ jsx(Icon, { name: "alert-circle", className: "h-8 w-8 text-error" }) }),
12002
12434
  /* @__PURE__ */ jsx(Typography, { variant: "h3", className: "text-lg font-medium text-foreground", children: resolvedTitle }),
12003
12435
  /* @__PURE__ */ jsx(Typography, { variant: "small", className: "mt-1 text-muted-foreground max-w-sm", children: resolvedMessage }),
12004
12436
  (onRetry || retryEvent) && /* @__PURE__ */ jsx(Button, { variant: "secondary", className: "mt-4", onClick: handleRetry, children: t("error.retry") })
@@ -12015,7 +12447,7 @@ var init_ErrorBoundary = __esm({
12015
12447
  "use client";
12016
12448
  init_cn();
12017
12449
  init_ErrorState();
12018
- ErrorBoundary = class extends React96__default.Component {
12450
+ ErrorBoundary = class extends React98__default.Component {
12019
12451
  constructor(props) {
12020
12452
  super(props);
12021
12453
  __publicField(this, "reset", () => {
@@ -12386,7 +12818,7 @@ var init_InstallBox = __esm({
12386
12818
  /* @__PURE__ */ jsx(
12387
12819
  Box,
12388
12820
  {
12389
- className: "bg-surface rounded-md border-[length:var(--border-width)] border-border",
12821
+ className: "bg-surface rounded-container border-[length:var(--border-width)] border-border",
12390
12822
  padding: "md",
12391
12823
  children: /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-3", children: [
12392
12824
  /* @__PURE__ */ jsx(
@@ -12940,7 +13372,7 @@ var init_AboutPageTemplate = __esm({
12940
13372
  AboutPageTemplate.displayName = "AboutPageTemplate";
12941
13373
  }
12942
13374
  });
12943
- var variantBorderClasses, variantIconColors, iconMap3, Alert;
13375
+ var variantBorderClasses, variantIconColors, iconMap2, Alert;
12944
13376
  var init_Alert = __esm({
12945
13377
  "components/molecules/Alert.tsx"() {
12946
13378
  "use client";
@@ -12961,11 +13393,11 @@ var init_Alert = __esm({
12961
13393
  warning: "text-warning",
12962
13394
  error: "text-error"
12963
13395
  };
12964
- iconMap3 = {
12965
- info: Info,
12966
- success: CheckCircle,
12967
- warning: AlertTriangle,
12968
- error: AlertCircle
13396
+ iconMap2 = {
13397
+ info: "info",
13398
+ success: "check-circle",
13399
+ warning: "alert-triangle",
13400
+ error: "alert-circle"
12969
13401
  };
12970
13402
  Alert = ({
12971
13403
  children,
@@ -13000,7 +13432,7 @@ var init_Alert = __esm({
13000
13432
  /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
13001
13433
  Icon,
13002
13434
  {
13003
- icon: iconMap3[variant],
13435
+ name: iconMap2[variant],
13004
13436
  size: "md",
13005
13437
  className: variantIconColors[variant]
13006
13438
  }
@@ -13020,7 +13452,7 @@ var init_Alert = __esm({
13020
13452
  "hover:bg-muted"
13021
13453
  ),
13022
13454
  "aria-label": "Dismiss alert",
13023
- children: /* @__PURE__ */ jsx(Icon, { icon: X, size: "sm" })
13455
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "sm" })
13024
13456
  }
13025
13457
  )
13026
13458
  ] })
@@ -13096,8 +13528,8 @@ var init_Tooltip = __esm({
13096
13528
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
13097
13529
  };
13098
13530
  }, []);
13099
- const triggerElement = React96__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
13100
- const trigger = React96__default.cloneElement(triggerElement, {
13531
+ const triggerElement = React98__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
13532
+ const trigger = React98__default.cloneElement(triggerElement, {
13101
13533
  ref: triggerRef,
13102
13534
  onMouseEnter: handleMouseEnter,
13103
13535
  onMouseLeave: handleMouseLeave,
@@ -13111,7 +13543,7 @@ var init_Tooltip = __esm({
13111
13543
  className: cn(
13112
13544
  "fixed z-50 px-3 py-2 max-w-xs",
13113
13545
  "bg-primary text-primary-foreground",
13114
- "shadow-sm rounded-sm",
13546
+ "shadow-elevation-popover rounded-sm",
13115
13547
  "text-sm pointer-events-none",
13116
13548
  "break-words whitespace-normal",
13117
13549
  "h-auto min-h-fit",
@@ -13252,8 +13684,8 @@ var init_Popover = __esm({
13252
13684
  onMouseEnter: handleOpen,
13253
13685
  onMouseLeave: handleClose
13254
13686
  };
13255
- const childElement = React96__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
13256
- const triggerElement = React96__default.cloneElement(
13687
+ const childElement = React98__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
13688
+ const triggerElement = React98__default.cloneElement(
13257
13689
  childElement,
13258
13690
  {
13259
13691
  ref: triggerRef,
@@ -13266,7 +13698,7 @@ var init_Popover = __esm({
13266
13698
  ref: popoverRef,
13267
13699
  className: cn(
13268
13700
  "fixed z-50 p-4",
13269
- "bg-card border-2 border-border shadow-lg",
13701
+ "bg-card border-2 border-border shadow-elevation-popover",
13270
13702
  positionClasses2[position],
13271
13703
  className
13272
13704
  ),
@@ -13369,8 +13801,8 @@ var init_Menu = __esm({
13369
13801
  "bottom-start": "top-full left-0 mt-2",
13370
13802
  "bottom-end": "top-full right-0 mt-2"
13371
13803
  };
13372
- const triggerChild = React96__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
13373
- const triggerElement = React96__default.cloneElement(
13804
+ const triggerChild = React98__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
13805
+ const triggerElement = React98__default.cloneElement(
13374
13806
  triggerChild,
13375
13807
  {
13376
13808
  ref: triggerRef,
@@ -13380,7 +13812,7 @@ var init_Menu = __esm({
13380
13812
  const menuContainerStyles = cn(
13381
13813
  "bg-card",
13382
13814
  "border-[length:var(--border-width)] border-border",
13383
- "shadow",
13815
+ "shadow-elevation-popover",
13384
13816
  "rounded-sm",
13385
13817
  "min-w-0 sm:min-w-[200px] max-w-[calc(100vw-1rem)] py-1"
13386
13818
  );
@@ -13415,7 +13847,7 @@ var init_Menu = __esm({
13415
13847
  }
13416
13848
  ),
13417
13849
  item.badge !== void 0 && /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", children: item.badge }),
13418
- hasSubMenu && /* @__PURE__ */ jsx(Icon, { icon: ChevronRight, size: "sm", className: "flex-shrink-0" })
13850
+ hasSubMenu && /* @__PURE__ */ jsx(Icon, { name: "chevron-right", size: "sm", className: "flex-shrink-0" })
13419
13851
  ] })
13420
13852
  },
13421
13853
  itemId
@@ -13548,7 +13980,7 @@ var init_Accordion = __esm({
13548
13980
  "w-full flex items-center justify-between px-4 py-3",
13549
13981
  "bg-card",
13550
13982
  "hover:bg-muted",
13551
- "transition-colors duration-200",
13983
+ "transition-colors duration-fast",
13552
13984
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
13553
13985
  "disabled:opacity-50 disabled:cursor-not-allowed",
13554
13986
  isOpen && "bg-muted font-bold"
@@ -13560,10 +13992,10 @@ var init_Accordion = __esm({
13560
13992
  /* @__PURE__ */ jsx(
13561
13993
  Icon,
13562
13994
  {
13563
- icon: ChevronDown,
13995
+ name: "chevron-down",
13564
13996
  size: "sm",
13565
13997
  className: cn(
13566
- "transition-transform duration-200",
13998
+ "transition-transform duration-fast",
13567
13999
  isOpen && "transform rotate-180"
13568
14000
  )
13569
14001
  }
@@ -13585,15 +14017,6 @@ var init_Accordion = __esm({
13585
14017
  Accordion.displayName = "Accordion";
13586
14018
  }
13587
14019
  });
13588
- function resolveIcon2(name) {
13589
- const pascalName = name.split(/[-_]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
13590
- const icons = LucideIcons;
13591
- const icon = icons[pascalName];
13592
- if (icon) {
13593
- return icon;
13594
- }
13595
- return Plus;
13596
- }
13597
14020
  var FloatingActionButton;
13598
14021
  var init_FloatingActionButton = __esm({
13599
14022
  "components/molecules/FloatingActionButton.tsx"() {
@@ -13619,7 +14042,7 @@ var init_FloatingActionButton = __esm({
13619
14042
  const eventBus = useEventBus();
13620
14043
  const { t } = useTranslate();
13621
14044
  const resolvedAction = icon ? {
13622
- icon: resolveIcon2(icon),
14045
+ icon,
13623
14046
  onClick: () => {
13624
14047
  if (action) eventBus.emit(`UI:${action}`, actionPayload ?? {});
13625
14048
  onClick?.();
@@ -13693,7 +14116,7 @@ var init_FloatingActionButton = __esm({
13693
14116
  {
13694
14117
  align: "center",
13695
14118
  gap: "sm",
13696
- className: "transition-all duration-200",
14119
+ className: "transition-all duration-fast",
13697
14120
  style: {
13698
14121
  opacity: isExpanded ? 1 : 0,
13699
14122
  transform: isExpanded ? "translateY(0)" : "translateY(10px)",
@@ -13729,9 +14152,9 @@ var init_FloatingActionButton = __esm({
13729
14152
  {
13730
14153
  variant: isExpanded ? "secondary" : "primary",
13731
14154
  size: "lg",
13732
- icon: isExpanded ? X : Plus,
14155
+ icon: isExpanded ? "x" : "plus",
13733
14156
  onClick: handleMainClick,
13734
- className: "rounded-full shadow-lg transition-all duration-300",
14157
+ className: "rounded-full shadow-lg transition-all duration-normal",
13735
14158
  "aria-label": isExpanded ? "Close actions" : "Open actions",
13736
14159
  "aria-expanded": isExpanded,
13737
14160
  children: /* @__PURE__ */ jsx(Typography, { as: "span", className: "sr-only", children: isExpanded ? t("common.close") : t("common.open") })
@@ -13786,13 +14209,13 @@ var init_MapView = __esm({
13786
14209
  shadowSize: [41, 41]
13787
14210
  });
13788
14211
  L.Marker.prototype.options.icon = defaultIcon;
13789
- const { useEffect: useEffect88, useRef: useRef88, useCallback: useCallback129, useState: useState123 } = React96__default;
14212
+ const { useEffect: useEffect89, useRef: useRef88, useCallback: useCallback129, useState: useState124 } = React98__default;
13790
14213
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
13791
14214
  const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
13792
14215
  function MapUpdater({ centerLat, centerLng, zoom }) {
13793
14216
  const map = useMap();
13794
14217
  const prevRef = useRef88({ centerLat, centerLng, zoom });
13795
- useEffect88(() => {
14218
+ useEffect89(() => {
13796
14219
  const prev = prevRef.current;
13797
14220
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
13798
14221
  map.setView([centerLat, centerLng], zoom);
@@ -13803,7 +14226,7 @@ var init_MapView = __esm({
13803
14226
  }
13804
14227
  function MapClickHandler({ onMapClick }) {
13805
14228
  const map = useMap();
13806
- useEffect88(() => {
14229
+ useEffect89(() => {
13807
14230
  if (!onMapClick) return;
13808
14231
  const handler = (e) => {
13809
14232
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -13831,7 +14254,7 @@ var init_MapView = __esm({
13831
14254
  showAttribution = true
13832
14255
  }) {
13833
14256
  const eventBus = useEventBus3();
13834
- const [clickedPosition, setClickedPosition] = useState123(null);
14257
+ const [clickedPosition, setClickedPosition] = useState124(null);
13835
14258
  const handleMapClick = useCallback129((lat, lng) => {
13836
14259
  if (showClickedPin) {
13837
14260
  setClickedPosition({ lat, lng });
@@ -14032,7 +14455,7 @@ function InputPattern({
14032
14455
  fieldName
14033
14456
  }) {
14034
14457
  const { emit } = useEventBus();
14035
- const [localValue, setLocalValue] = React96__default.useState(value);
14458
+ const [localValue, setLocalValue] = React98__default.useState(value);
14036
14459
  const handleChange = (e) => {
14037
14460
  setLocalValue(e.target.value);
14038
14461
  if (onChange) {
@@ -14070,7 +14493,7 @@ function TextareaPattern({
14070
14493
  fieldName
14071
14494
  }) {
14072
14495
  const { emit } = useEventBus();
14073
- const [localValue, setLocalValue] = React96__default.useState(value);
14496
+ const [localValue, setLocalValue] = React98__default.useState(value);
14074
14497
  const handleChange = (e) => {
14075
14498
  setLocalValue(e.target.value);
14076
14499
  if (onChange) {
@@ -14102,7 +14525,7 @@ function SelectPattern({
14102
14525
  fieldName
14103
14526
  }) {
14104
14527
  const { emit } = useEventBus();
14105
- const [localValue, setLocalValue] = React96__default.useState(value);
14528
+ const [localValue, setLocalValue] = React98__default.useState(value);
14106
14529
  const handleChange = (e) => {
14107
14530
  setLocalValue(e.target.value);
14108
14531
  if (onChange) {
@@ -14131,7 +14554,7 @@ function CheckboxPattern({
14131
14554
  className
14132
14555
  }) {
14133
14556
  const { emit } = useEventBus();
14134
- const [localChecked, setLocalChecked] = React96__default.useState(checked);
14557
+ const [localChecked, setLocalChecked] = React98__default.useState(checked);
14135
14558
  const handleChange = (e) => {
14136
14559
  setLocalChecked(e.target.checked);
14137
14560
  if (onChange) {
@@ -14362,8 +14785,8 @@ function ActionButtons({
14362
14785
  disabled
14363
14786
  }) {
14364
14787
  const eventBus = useEventBus();
14365
- const [activeButtons, setActiveButtons] = React96.useState(/* @__PURE__ */ new Set());
14366
- const handlePress = React96.useCallback(
14788
+ const [activeButtons, setActiveButtons] = React98.useState(/* @__PURE__ */ new Set());
14789
+ const handlePress = React98.useCallback(
14367
14790
  (id) => {
14368
14791
  setActiveButtons((prev) => new Set(prev).add(id));
14369
14792
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -14371,7 +14794,7 @@ function ActionButtons({
14371
14794
  },
14372
14795
  [actionEvent, eventBus, onAction]
14373
14796
  );
14374
- const handleRelease = React96.useCallback(
14797
+ const handleRelease = React98.useCallback(
14375
14798
  (id) => {
14376
14799
  setActiveButtons((prev) => {
14377
14800
  const next = new Set(prev);
@@ -15235,7 +15658,7 @@ function IsometricCanvas({
15235
15658
  const el = containerRef.current;
15236
15659
  if (!el) return;
15237
15660
  if (typeof ResizeObserver === "undefined") return;
15238
- const observer = new ResizeObserver((entries) => {
15661
+ const observer2 = new ResizeObserver((entries) => {
15239
15662
  const entry = entries[0];
15240
15663
  if (entry) {
15241
15664
  const w = Math.round(entry.contentRect.width) || 800;
@@ -15246,8 +15669,8 @@ function IsometricCanvas({
15246
15669
  });
15247
15670
  }
15248
15671
  });
15249
- observer.observe(el);
15250
- return () => observer.disconnect();
15672
+ observer2.observe(el);
15673
+ return () => observer2.disconnect();
15251
15674
  }, []);
15252
15675
  const units = useMemo(
15253
15676
  () => unitsProp.map((u) => u.position ? u : { ...u, position: { x: u.x ?? 0, y: u.y ?? 0 } }),
@@ -16435,7 +16858,7 @@ var init_MarkdownContent = __esm({
16435
16858
  init_Box();
16436
16859
  init_useTranslate();
16437
16860
  init_cn();
16438
- MarkdownContent = React96__default.memo(
16861
+ MarkdownContent = React98__default.memo(
16439
16862
  ({ content, direction, className }) => {
16440
16863
  const { t: _t } = useTranslate();
16441
16864
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -16581,6 +17004,7 @@ var init_CodeBlock = __esm({
16581
17004
  init_Badge();
16582
17005
  init_Stack();
16583
17006
  init_Textarea();
17007
+ init_Icon();
16584
17008
  init_useEventBus();
16585
17009
  init_useTranslate();
16586
17010
  SyntaxHighlighter.registerLanguage("json", langJson);
@@ -16653,7 +17077,7 @@ var init_CodeBlock = __esm({
16653
17077
  log8 = createLogger("almadar:ui:markdown-code");
16654
17078
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
16655
17079
  HIDDEN_LINE_NUMBERS = { display: "none" };
16656
- CodeBlock = React96__default.memo(
17080
+ CodeBlock = React98__default.memo(
16657
17081
  ({
16658
17082
  code: rawCode,
16659
17083
  language = "text",
@@ -16871,7 +17295,7 @@ var init_CodeBlock = __esm({
16871
17295
  onClick: handleCopy,
16872
17296
  className: "opacity-0 group-hover:opacity-100 focus:opacity-100 transition-opacity text-muted-foreground hover:text-white",
16873
17297
  "aria-label": "Copy code",
16874
- children: copied ? /* @__PURE__ */ jsx(Check, { size: 16, className: "text-green-400" }) : /* @__PURE__ */ jsx(Copy, { size: 16 })
17298
+ children: copied ? /* @__PURE__ */ jsx(Icon, { name: "check", className: "w-4 h-4 text-green-400" }) : /* @__PURE__ */ jsx(Icon, { name: "copy", className: "w-4 h-4" })
16875
17299
  }
16876
17300
  )
16877
17301
  ]
@@ -17107,8 +17531,8 @@ function Card2({
17107
17531
  className: `
17108
17532
  bg-card
17109
17533
  border border-border
17110
- rounded-md shadow-sm
17111
- ${isClickable ? "cursor-pointer hover:shadow-lg transition-shadow" : ""}
17534
+ rounded-container shadow-elevation-card
17535
+ ${isClickable ? "cursor-pointer hover:shadow-elevation-dialog transition-shadow" : ""}
17112
17536
  ${className}
17113
17537
  `,
17114
17538
  onClick: isClickable ? handleClick : void 0,
@@ -17202,7 +17626,7 @@ var init_QuizBlock = __esm({
17202
17626
  className: "self-start ml-7",
17203
17627
  children: /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
17204
17628
  /* @__PURE__ */ jsx(Typography, { variant: "caption", children: revealed ? t("quiz.hideAnswer") : t("quiz.showAnswer") }),
17205
- revealed ? /* @__PURE__ */ jsx(ChevronUp, { size: 14 }) : /* @__PURE__ */ jsx(ChevronDown, { size: 14 })
17629
+ revealed ? /* @__PURE__ */ jsx(Icon, { name: "chevron-up", className: "w-3.5 h-3.5" }) : /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: "w-3.5 h-3.5" })
17206
17630
  ] })
17207
17631
  }
17208
17632
  )
@@ -17962,7 +18386,7 @@ var init_StateMachineView = __esm({
17962
18386
  style: { top: title ? 30 : 0 },
17963
18387
  children: [
17964
18388
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
17965
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React96__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
18389
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React98__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
17966
18390
  StateNode,
17967
18391
  {
17968
18392
  state,
@@ -19110,28 +19534,22 @@ var init_BookTableOfContents = __esm({
19110
19534
  BookTableOfContents.displayName = "BookTableOfContents";
19111
19535
  }
19112
19536
  });
19113
- var ICON_MAP, EmptyState;
19537
+ var ICON_NAME_ALIASES, EmptyState;
19114
19538
  var init_EmptyState = __esm({
19115
19539
  "components/molecules/EmptyState.tsx"() {
19116
19540
  "use client";
19117
19541
  init_cn();
19118
19542
  init_atoms();
19119
19543
  init_Box();
19544
+ init_Icon();
19120
19545
  init_Stack();
19121
19546
  init_Typography();
19122
19547
  init_useEventBus();
19123
19548
  init_useTranslate();
19124
- ICON_MAP = {
19125
- "check-circle": CheckCircle,
19126
- check: CheckCircle,
19127
- "x-circle": XCircle,
19128
- error: XCircle,
19129
- "alert-circle": AlertCircle,
19130
- warning: AlertCircle,
19131
- info: Info,
19132
- search: Search,
19133
- inbox: Inbox,
19134
- "file-question": FileQuestion
19549
+ ICON_NAME_ALIASES = {
19550
+ check: "check-circle",
19551
+ error: "x-circle",
19552
+ warning: "alert-circle"
19135
19553
  };
19136
19554
  EmptyState = ({
19137
19555
  icon,
@@ -19151,7 +19569,9 @@ var init_EmptyState = __esm({
19151
19569
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, {});
19152
19570
  onAction?.();
19153
19571
  };
19154
- const Icon3 = typeof icon === "string" ? ICON_MAP[icon] : icon;
19572
+ const iconName = typeof icon === "string" ? ICON_NAME_ALIASES[icon] ?? icon : void 0;
19573
+ const iconComponent = typeof icon === "function" ? icon : void 0;
19574
+ const hasIcon = Boolean(iconName || iconComponent);
19155
19575
  const isDestructive = destructive || variant === "error";
19156
19576
  const isSuccess = variant === "success";
19157
19577
  const displayText = title || message || t("empty.noItems");
@@ -19164,7 +19584,7 @@ var init_EmptyState = __esm({
19164
19584
  className
19165
19585
  ),
19166
19586
  children: [
19167
- Icon3 && /* @__PURE__ */ jsx(
19587
+ hasIcon && /* @__PURE__ */ jsx(
19168
19588
  Box,
19169
19589
  {
19170
19590
  className: cn(
@@ -19172,8 +19592,9 @@ var init_EmptyState = __esm({
19172
19592
  isDestructive ? "bg-error/10" : isSuccess ? "bg-success/10" : "bg-muted"
19173
19593
  ),
19174
19594
  children: /* @__PURE__ */ jsx(
19175
- Icon3,
19595
+ Icon,
19176
19596
  {
19597
+ ...iconName ? { name: iconName } : { icon: iconComponent },
19177
19598
  className: cn(
19178
19599
  "h-8 w-8",
19179
19600
  isDestructive ? "text-error" : isSuccess ? "text-success" : "text-muted-foreground"
@@ -19543,7 +19964,7 @@ var init_Grid = __esm({
19543
19964
  as: Component2 = "div"
19544
19965
  }) => {
19545
19966
  const mergedStyle = rows ? { gridTemplateRows: `repeat(${rows}, minmax(0, 1fr))`, ...style } : style;
19546
- return React96__default.createElement(
19967
+ return React98__default.createElement(
19547
19968
  Component2,
19548
19969
  {
19549
19970
  className: cn(
@@ -19913,7 +20334,7 @@ var init_BranchingLogicBuilder = __esm({
19913
20334
  const height = PADDING * 2 + items.length * (NODE_HEIGHT + NODE_GAP_Y);
19914
20335
  return { items, positions, width, height };
19915
20336
  }, [questions]);
19916
- return /* @__PURE__ */ jsx(Box, { className: "overflow-auto rounded-md border border-border bg-card p-2", children: /* @__PURE__ */ jsxs(
20337
+ return /* @__PURE__ */ jsx(Box, { className: "overflow-auto rounded-container border border-border bg-card p-2", children: /* @__PURE__ */ jsxs(
19917
20338
  "svg",
19918
20339
  {
19919
20340
  width: layout.width,
@@ -20156,7 +20577,7 @@ var init_Breadcrumb = __esm({
20156
20577
  init_useEventBus();
20157
20578
  Breadcrumb = ({
20158
20579
  items,
20159
- separator = ChevronRight,
20580
+ separator = "chevron-right",
20160
20581
  maxItems,
20161
20582
  className
20162
20583
  }) => {
@@ -20185,7 +20606,7 @@ var init_Breadcrumb = __esm({
20185
20606
  ),
20186
20607
  "aria-current": isLast ? "page" : void 0,
20187
20608
  children: [
20188
- item.icon && /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" }),
20609
+ item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" })),
20189
20610
  /* @__PURE__ */ jsx(
20190
20611
  Typography,
20191
20612
  {
@@ -20212,7 +20633,7 @@ var init_Breadcrumb = __esm({
20212
20633
  "aria-current": isLast ? "page" : void 0,
20213
20634
  disabled: isLast,
20214
20635
  children: [
20215
- item.icon && /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" }),
20636
+ item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" })),
20216
20637
  /* @__PURE__ */ jsx(
20217
20638
  Typography,
20218
20639
  {
@@ -20224,14 +20645,7 @@ var init_Breadcrumb = __esm({
20224
20645
  ]
20225
20646
  }
20226
20647
  ),
20227
- !isLast && /* @__PURE__ */ jsx(
20228
- Icon,
20229
- {
20230
- icon: separator,
20231
- size: "sm",
20232
- className: "text-muted-foreground"
20233
- }
20234
- )
20648
+ !isLast && (typeof separator === "string" ? /* @__PURE__ */ jsx(Icon, { name: separator, size: "sm", className: "text-muted-foreground" }) : /* @__PURE__ */ jsx(Icon, { icon: separator, size: "sm", className: "text-muted-foreground" }))
20235
20649
  ] }, index);
20236
20650
  }) })
20237
20651
  }
@@ -20752,7 +21166,7 @@ function CalendarGrid({
20752
21166
  {
20753
21167
  variant: "ghost",
20754
21168
  size: "sm",
20755
- icon: ChevronLeft,
21169
+ icon: "chevron-left",
20756
21170
  onClick: stepPrev,
20757
21171
  "aria-disabled": !canPrev || void 0,
20758
21172
  "aria-label": "Previous days",
@@ -20765,7 +21179,7 @@ function CalendarGrid({
20765
21179
  {
20766
21180
  variant: "ghost",
20767
21181
  size: "sm",
20768
- iconRight: ChevronRight,
21182
+ iconRight: "chevron-right",
20769
21183
  onClick: stepNext,
20770
21184
  "aria-disabled": !canNext || void 0,
20771
21185
  "aria-label": "Next days",
@@ -22811,7 +23225,7 @@ var init_Carousel = __esm({
22811
23225
  Box,
22812
23226
  {
22813
23227
  className: cn(
22814
- "rounded-full cursor-pointer transition-all duration-200"
23228
+ "rounded-full cursor-pointer transition-all duration-fast"
22815
23229
  ),
22816
23230
  style: {
22817
23231
  width: isActive ? 10 : 8,
@@ -23903,7 +24317,7 @@ var init_CodeExample = __esm({
23903
24317
  {
23904
24318
  className: cn(
23905
24319
  "bg-foreground",
23906
- "rounded-md",
24320
+ "rounded-container",
23907
24321
  "border-[length:var(--border-width)] border-border",
23908
24322
  "overflow-hidden",
23909
24323
  className
@@ -24679,7 +25093,7 @@ function CounterMinimal({
24679
25093
  size: sizeStyles9[size].button,
24680
25094
  onClick: onDecrement,
24681
25095
  disabled: resolved.decrementDisabled,
24682
- icon: Minus,
25096
+ icon: "minus",
24683
25097
  children: resolved.decrementLabel
24684
25098
  }
24685
25099
  ),
@@ -24701,7 +25115,7 @@ function CounterMinimal({
24701
25115
  size: sizeStyles9[size].button,
24702
25116
  onClick: onIncrement,
24703
25117
  disabled: resolved.incrementDisabled,
24704
- icon: Plus,
25118
+ icon: "plus",
24705
25119
  children: resolved.incrementLabel
24706
25120
  }
24707
25121
  )
@@ -24747,7 +25161,7 @@ function CounterStandard({
24747
25161
  size: sizeStyles9[size].button,
24748
25162
  onClick: onDecrement,
24749
25163
  disabled: resolved.decrementDisabled,
24750
- icon: Minus
25164
+ icon: "minus"
24751
25165
  }
24752
25166
  ),
24753
25167
  /* @__PURE__ */ jsx(
@@ -24757,7 +25171,7 @@ function CounterStandard({
24757
25171
  size: sizeStyles9[size].button,
24758
25172
  onClick: onIncrement,
24759
25173
  disabled: resolved.incrementDisabled,
24760
- icon: Plus
25174
+ icon: "plus"
24761
25175
  }
24762
25176
  )
24763
25177
  ] }),
@@ -24767,7 +25181,7 @@ function CounterStandard({
24767
25181
  variant: "ghost",
24768
25182
  size: "sm",
24769
25183
  onClick: onReset,
24770
- icon: RotateCcw,
25184
+ icon: "rotate-ccw",
24771
25185
  children: "Reset"
24772
25186
  }
24773
25187
  )
@@ -24816,7 +25230,7 @@ function CounterFull({
24816
25230
  size: sizeStyles9[size].button,
24817
25231
  onClick: onDecrement,
24818
25232
  disabled: resolved.decrementDisabled,
24819
- icon: Minus,
25233
+ icon: "minus",
24820
25234
  children: resolved.decrementLabel
24821
25235
  }
24822
25236
  ),
@@ -24827,7 +25241,7 @@ function CounterFull({
24827
25241
  size: sizeStyles9[size].button,
24828
25242
  onClick: onIncrement,
24829
25243
  disabled: resolved.incrementDisabled,
24830
- icon: Plus,
25244
+ icon: "plus",
24831
25245
  children: resolved.incrementLabel
24832
25246
  }
24833
25247
  )
@@ -24838,7 +25252,7 @@ function CounterFull({
24838
25252
  variant: "ghost",
24839
25253
  size: "sm",
24840
25254
  onClick: onReset,
24841
- icon: RotateCcw,
25255
+ icon: "rotate-ccw",
24842
25256
  children: "Reset to 0"
24843
25257
  }
24844
25258
  )
@@ -24886,7 +25300,7 @@ function CraftingRecipe({
24886
25300
  className
24887
25301
  }) {
24888
25302
  const eventBus = useEventBus();
24889
- const handleCraft = React96.useCallback(() => {
25303
+ const handleCraft = React98.useCallback(() => {
24890
25304
  onCraft?.();
24891
25305
  if (craftEvent) {
24892
25306
  eventBus.emit(craftEvent, { output: output.label });
@@ -24903,7 +25317,7 @@ function CraftingRecipe({
24903
25317
  children: [
24904
25318
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
24905
25319
  const hasSufficient = ingredient.available >= ingredient.required;
24906
- return /* @__PURE__ */ jsxs(React96.Fragment, { children: [
25320
+ return /* @__PURE__ */ jsxs(React98.Fragment, { children: [
24907
25321
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
24908
25322
  ItemSlot,
24909
25323
  {
@@ -24966,8 +25380,8 @@ function DPad({
24966
25380
  }) {
24967
25381
  const eventBus = useEventBus();
24968
25382
  const sizes = sizeMap15[size];
24969
- const [activeDirections, setActiveDirections] = React96.useState(/* @__PURE__ */ new Set());
24970
- const handlePress = React96.useCallback(
25383
+ const [activeDirections, setActiveDirections] = React98.useState(/* @__PURE__ */ new Set());
25384
+ const handlePress = React98.useCallback(
24971
25385
  (direction) => {
24972
25386
  setActiveDirections((prev) => new Set(prev).add(direction));
24973
25387
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -24975,7 +25389,7 @@ function DPad({
24975
25389
  },
24976
25390
  [directionEvent, eventBus, onDirection]
24977
25391
  );
24978
- const handleRelease = React96.useCallback(
25392
+ const handleRelease = React98.useCallback(
24979
25393
  (direction) => {
24980
25394
  setActiveDirections((prev) => {
24981
25395
  const next = new Set(prev);
@@ -25240,7 +25654,7 @@ var init_DashboardLayout = __esm({
25240
25654
  variant: "ghost",
25241
25655
  className: "@lg/dashboard:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground",
25242
25656
  onClick: () => setSidebarOpen(false),
25243
- children: /* @__PURE__ */ jsx(X, { className: "h-5 w-5" })
25657
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-5 w-5" })
25244
25658
  }
25245
25659
  )
25246
25660
  ]
@@ -25286,7 +25700,7 @@ var init_DashboardLayout = __esm({
25286
25700
  className: "@lg/dashboard:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground touch-manipulation min-h-[44px] min-w-[44px] flex items-center justify-center",
25287
25701
  onClick: () => setSidebarOpen(true),
25288
25702
  "aria-label": "Open sidebar",
25289
- children: /* @__PURE__ */ jsx(Menu$1, { className: "h-5 w-5" })
25703
+ children: /* @__PURE__ */ jsx(Icon, { name: "menu", className: "h-5 w-5" })
25290
25704
  }
25291
25705
  ),
25292
25706
  isTopNav && /* @__PURE__ */ jsxs(
@@ -25329,7 +25743,7 @@ var init_DashboardLayout = __esm({
25329
25743
  }
25330
25744
  ),
25331
25745
  searchEnabled && /* @__PURE__ */ jsx(Box, { className: "hidden @sm/dashboard:block flex-1 min-w-0 @xl/dashboard:max-w-md", children: /* @__PURE__ */ jsxs(Box, { className: "relative", children: [
25332
- /* @__PURE__ */ jsx(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground dark:text-muted-foreground" }),
25746
+ /* @__PURE__ */ jsx(Icon, { name: "search", className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground dark:text-muted-foreground" }),
25333
25747
  /* @__PURE__ */ jsx(
25334
25748
  Input,
25335
25749
  {
@@ -25380,7 +25794,7 @@ var init_DashboardLayout = __esm({
25380
25794
  onClick: handleNotificationClick,
25381
25795
  "aria-label": t("common.notifications"),
25382
25796
  children: [
25383
- /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
25797
+ /* @__PURE__ */ jsx(Icon, { name: "bell", className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
25384
25798
  unreadCount > 0 && /* @__PURE__ */ jsx(
25385
25799
  Box,
25386
25800
  {
@@ -25418,7 +25832,7 @@ var init_DashboardLayout = __esm({
25418
25832
  children: user.name
25419
25833
  }
25420
25834
  ),
25421
- /* @__PURE__ */ jsx(ChevronDown, { className: "hidden @sm/dashboard:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
25835
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: "hidden @sm/dashboard:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
25422
25836
  ]
25423
25837
  }
25424
25838
  ),
@@ -25461,7 +25875,7 @@ var init_DashboardLayout = __esm({
25461
25875
  },
25462
25876
  className: "w-full flex items-center gap-2 px-4 py-2 text-sm text-error dark:text-error hover:bg-error/10 dark:hover:bg-error/20",
25463
25877
  children: [
25464
- /* @__PURE__ */ jsx(LogOut, { className: "h-4 w-4" }),
25878
+ /* @__PURE__ */ jsx(Icon, { name: "log-out", className: "h-4 w-4" }),
25465
25879
  t("auth.signOut")
25466
25880
  ]
25467
25881
  }
@@ -25643,14 +26057,14 @@ function useDataDnd(args) {
25643
26057
  const isZone = Boolean(dragGroup || accepts || sortable);
25644
26058
  const enabled = isZone || Boolean(dndRoot);
25645
26059
  const eventBus = useEventBus();
25646
- const parentRoot = React96__default.useContext(RootCtx);
26060
+ const parentRoot = React98__default.useContext(RootCtx);
25647
26061
  const isRoot = enabled && parentRoot === null;
25648
- const zoneId = React96__default.useId();
26062
+ const zoneId = React98__default.useId();
25649
26063
  const ownGroup = dragGroup ?? accepts ?? zoneId;
25650
- const [optimisticOrders, setOptimisticOrders] = React96__default.useState(() => /* @__PURE__ */ new Map());
25651
- const optimisticOrdersRef = React96__default.useRef(optimisticOrders);
26064
+ const [optimisticOrders, setOptimisticOrders] = React98__default.useState(() => /* @__PURE__ */ new Map());
26065
+ const optimisticOrdersRef = React98__default.useRef(optimisticOrders);
25652
26066
  optimisticOrdersRef.current = optimisticOrders;
25653
- const clearOptimisticOrder = React96__default.useCallback((group) => {
26067
+ const clearOptimisticOrder = React98__default.useCallback((group) => {
25654
26068
  setOptimisticOrders((prev) => {
25655
26069
  if (!prev.has(group)) return prev;
25656
26070
  const next = new Map(prev);
@@ -25675,7 +26089,7 @@ function useDataDnd(args) {
25675
26089
  const raw = it[dndItemIdField];
25676
26090
  return String(raw ?? `__idx_${idx}`);
25677
26091
  }).join("|");
25678
- const itemIds = React96__default.useMemo(
26092
+ const itemIds = React98__default.useMemo(
25679
26093
  () => orderedItems.map((it, idx) => {
25680
26094
  const raw = it[dndItemIdField];
25681
26095
  return raw ?? `__idx_${idx}`;
@@ -25683,7 +26097,7 @@ function useDataDnd(args) {
25683
26097
  [itemIdsSignature]
25684
26098
  );
25685
26099
  const itemsContentSig = items.map((it, idx) => String(it[dndItemIdField] ?? `__${idx}`)).join("|");
25686
- React96__default.useEffect(() => {
26100
+ React98__default.useEffect(() => {
25687
26101
  const root = isRoot ? null : parentRoot;
25688
26102
  if (root) {
25689
26103
  root.clearOptimisticOrder(ownGroup);
@@ -25691,20 +26105,20 @@ function useDataDnd(args) {
25691
26105
  clearOptimisticOrder(ownGroup);
25692
26106
  }
25693
26107
  }, [itemsContentSig, ownGroup]);
25694
- const zonesRef = React96__default.useRef(/* @__PURE__ */ new Map());
25695
- const registerZone = React96__default.useCallback((zoneId2, meta2) => {
26108
+ const zonesRef = React98__default.useRef(/* @__PURE__ */ new Map());
26109
+ const registerZone = React98__default.useCallback((zoneId2, meta2) => {
25696
26110
  zonesRef.current.set(zoneId2, meta2);
25697
26111
  }, []);
25698
- const unregisterZone = React96__default.useCallback((zoneId2) => {
26112
+ const unregisterZone = React98__default.useCallback((zoneId2) => {
25699
26113
  zonesRef.current.delete(zoneId2);
25700
26114
  }, []);
25701
- const [activeDrag, setActiveDrag] = React96__default.useState(null);
25702
- const [overZoneGroup, setOverZoneGroup] = React96__default.useState(null);
25703
- const meta = React96__default.useMemo(
26115
+ const [activeDrag, setActiveDrag] = React98__default.useState(null);
26116
+ const [overZoneGroup, setOverZoneGroup] = React98__default.useState(null);
26117
+ const meta = React98__default.useMemo(
25704
26118
  () => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
25705
26119
  [ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
25706
26120
  );
25707
- React96__default.useEffect(() => {
26121
+ React98__default.useEffect(() => {
25708
26122
  const target = isRoot ? null : parentRoot;
25709
26123
  if (!target) {
25710
26124
  zonesRef.current.set(zoneId, meta);
@@ -25723,7 +26137,7 @@ function useDataDnd(args) {
25723
26137
  }, [parentRoot, isRoot, zoneId, meta]);
25724
26138
  const sensors = useAlmadarDndSensors(true);
25725
26139
  const collisionDetection = almadarDndCollisionDetection;
25726
- const findZoneByItem = React96__default.useCallback(
26140
+ const findZoneByItem = React98__default.useCallback(
25727
26141
  (id) => {
25728
26142
  for (const z of zonesRef.current.values()) {
25729
26143
  if (z.itemIds.includes(id)) return z;
@@ -25732,7 +26146,7 @@ function useDataDnd(args) {
25732
26146
  },
25733
26147
  []
25734
26148
  );
25735
- React96__default.useCallback(
26149
+ React98__default.useCallback(
25736
26150
  (group) => {
25737
26151
  for (const z of zonesRef.current.values()) {
25738
26152
  if (z.group === group) return z;
@@ -25741,7 +26155,7 @@ function useDataDnd(args) {
25741
26155
  },
25742
26156
  []
25743
26157
  );
25744
- const handleDragEnd = React96__default.useCallback(
26158
+ const handleDragEnd = React98__default.useCallback(
25745
26159
  (event) => {
25746
26160
  const { active, over } = event;
25747
26161
  const activeIdStr = String(active.id);
@@ -25832,12 +26246,12 @@ function useDataDnd(args) {
25832
26246
  },
25833
26247
  [eventBus]
25834
26248
  );
25835
- const sortableData = React96__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
25836
- const SortableItem = React96__default.useCallback(
26249
+ const sortableData = React98__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
26250
+ const SortableItem = React98__default.useCallback(
25837
26251
  ({ id, children }) => {
25838
26252
  const {
25839
26253
  attributes,
25840
- listeners: listeners6,
26254
+ listeners: listeners7,
25841
26255
  setNodeRef,
25842
26256
  transform,
25843
26257
  transition,
@@ -25860,7 +26274,7 @@ function useDataDnd(args) {
25860
26274
  ref: setNodeRef,
25861
26275
  style,
25862
26276
  ...attributes,
25863
- ...listeners6,
26277
+ ...listeners7,
25864
26278
  children
25865
26279
  }
25866
26280
  );
@@ -25873,7 +26287,7 @@ function useDataDnd(args) {
25873
26287
  id: droppableId,
25874
26288
  data: sortableData
25875
26289
  });
25876
- const ctx = React96__default.useContext(RootCtx);
26290
+ const ctx = React98__default.useContext(RootCtx);
25877
26291
  const activeDrag2 = ctx?.activeDrag ?? null;
25878
26292
  const overZoneGroup2 = ctx?.overZoneGroup ?? null;
25879
26293
  const isThisZoneOver = overZoneGroup2 === ownGroup;
@@ -25888,7 +26302,7 @@ function useDataDnd(args) {
25888
26302
  showForeignPlaceholder,
25889
26303
  ctxAvailable: ctx != null
25890
26304
  });
25891
- React96__default.useEffect(() => {
26305
+ React98__default.useEffect(() => {
25892
26306
  dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
25893
26307
  }, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
25894
26308
  return /* @__PURE__ */ jsx(
@@ -25902,11 +26316,11 @@ function useDataDnd(args) {
25902
26316
  }
25903
26317
  );
25904
26318
  };
25905
- const rootContextValue = React96__default.useMemo(
26319
+ const rootContextValue = React98__default.useMemo(
25906
26320
  () => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
25907
26321
  [registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
25908
26322
  );
25909
- const handleDragStart = React96__default.useCallback((event) => {
26323
+ const handleDragStart = React98__default.useCallback((event) => {
25910
26324
  const sourceZone = findZoneByItem(event.active.id);
25911
26325
  const rect = event.active.rect.current.initial;
25912
26326
  const height = rect?.height && rect.height > 0 ? rect.height : 64;
@@ -25925,7 +26339,7 @@ function useDataDnd(args) {
25925
26339
  isRoot
25926
26340
  });
25927
26341
  }, [findZoneByItem, isRoot, zoneId]);
25928
- const handleDragOver = React96__default.useCallback((event) => {
26342
+ const handleDragOver = React98__default.useCallback((event) => {
25929
26343
  const { active, over } = event;
25930
26344
  const overData = over?.data?.current;
25931
26345
  const overGroup = overData?.dndGroup ?? null;
@@ -25995,7 +26409,7 @@ function useDataDnd(args) {
25995
26409
  return next;
25996
26410
  });
25997
26411
  }, []);
25998
- const handleDragCancel = React96__default.useCallback((event) => {
26412
+ const handleDragCancel = React98__default.useCallback((event) => {
25999
26413
  setActiveDrag(null);
26000
26414
  setOverZoneGroup(null);
26001
26415
  dndLog.warn("dragCancel", {
@@ -26003,12 +26417,12 @@ function useDataDnd(args) {
26003
26417
  reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
26004
26418
  });
26005
26419
  }, []);
26006
- const handleDragEndWithCleanup = React96__default.useCallback((event) => {
26420
+ const handleDragEndWithCleanup = React98__default.useCallback((event) => {
26007
26421
  handleDragEnd(event);
26008
26422
  setActiveDrag(null);
26009
26423
  setOverZoneGroup(null);
26010
26424
  }, [handleDragEnd]);
26011
- const wrapContainer = React96__default.useCallback(
26425
+ const wrapContainer = React98__default.useCallback(
26012
26426
  (children) => {
26013
26427
  if (!enabled) return children;
26014
26428
  const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
@@ -26062,7 +26476,7 @@ var init_useDataDnd = __esm({
26062
26476
  init_useAlmadarDndCollision();
26063
26477
  init_Box();
26064
26478
  dndLog = createLogger("almadar:ui:dnd");
26065
- RootCtx = React96__default.createContext(null);
26479
+ RootCtx = React98__default.createContext(null);
26066
26480
  }
26067
26481
  });
26068
26482
  function fieldLabel2(key) {
@@ -26284,7 +26698,7 @@ function DataGrid({
26284
26698
  className: cn(
26285
26699
  "bg-card rounded-lg",
26286
26700
  "border border-border",
26287
- "shadow-sm hover:shadow-lg",
26701
+ "shadow-elevation-card hover:shadow-elevation-dialog",
26288
26702
  "hover:border-primary transition-all",
26289
26703
  "flex flex-col",
26290
26704
  isSelected && "ring-2 ring-primary border-primary"
@@ -26551,7 +26965,7 @@ function DataList({
26551
26965
  }) {
26552
26966
  const eventBus = useEventBus();
26553
26967
  const { t } = useTranslate();
26554
- const [visibleCount, setVisibleCount] = React96__default.useState(pageSize || Infinity);
26968
+ const [visibleCount, setVisibleCount] = React98__default.useState(pageSize || Infinity);
26555
26969
  const fieldDefs = fields ?? columns ?? [];
26556
26970
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
26557
26971
  const dnd = useDataDnd({
@@ -26570,7 +26984,7 @@ function DataList({
26570
26984
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
26571
26985
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
26572
26986
  const hasRenderProp = typeof children === "function";
26573
- React96__default.useEffect(() => {
26987
+ React98__default.useEffect(() => {
26574
26988
  const renderItemTypeOf = typeof schemaRenderItem;
26575
26989
  const childrenTypeOf = typeof children;
26576
26990
  if (data.length > 0 && !hasRenderProp) {
@@ -26627,7 +27041,7 @@ function DataList({
26627
27041
  const items2 = data.map((item) => item);
26628
27042
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
26629
27043
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
26630
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
27044
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
26631
27045
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
26632
27046
  group.items.map((itemData, index) => {
26633
27047
  const id = itemData.id || `${gi}-${index}`;
@@ -26658,7 +27072,7 @@ function DataList({
26658
27072
  {
26659
27073
  variant: "caption",
26660
27074
  className: cn(
26661
- "mt-1 text-[0.65rem]",
27075
+ "mt-1 text-xs",
26662
27076
  isSent ? "opacity-70" : "text-muted-foreground"
26663
27077
  ),
26664
27078
  children: formatDate3(timestamp)
@@ -26723,7 +27137,7 @@ function DataList({
26723
27137
  Box,
26724
27138
  {
26725
27139
  className: cn(
26726
- "group flex items-center gap-4 transition-all duration-200",
27140
+ "group flex items-center gap-4 transition-all duration-fast",
26727
27141
  isCompact ? "px-4 py-2" : "px-6 py-4",
26728
27142
  "hover:bg-muted/80",
26729
27143
  !isCard && !isCompact && "rounded-lg border border-transparent hover:border-border"
@@ -26810,12 +27224,12 @@ function DataList({
26810
27224
  Box,
26811
27225
  {
26812
27226
  className: cn(
26813
- isCard && "bg-card rounded-xl border border-border shadow-lg overflow-hidden",
27227
+ isCard && "bg-card rounded-xl border border-border shadow-elevation-dialog overflow-hidden",
26814
27228
  !isCard && gapClass,
26815
27229
  className
26816
27230
  ),
26817
27231
  children: [
26818
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
27232
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
26819
27233
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
26820
27234
  group.items.map(
26821
27235
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -26952,7 +27366,7 @@ var init_FileTree = __esm({
26952
27366
  Typography,
26953
27367
  {
26954
27368
  variant: "caption",
26955
- className: `truncate font-mono text-[11px] !text-inherit ${isSelected ? "font-semibold" : ""}`,
27369
+ className: `truncate font-mono text-xs !text-inherit ${isSelected ? "font-semibold" : ""}`,
26956
27370
  children: node.name
26957
27371
  }
26958
27372
  ),
@@ -27105,6 +27519,7 @@ var init_FilterGroup = __esm({
27105
27519
  init_Select();
27106
27520
  init_Badge();
27107
27521
  init_Stack();
27522
+ init_Icon();
27108
27523
  init_useEventBus();
27109
27524
  init_useQuerySingleton();
27110
27525
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
@@ -27173,7 +27588,7 @@ var init_FilterGroup = __esm({
27173
27588
  const activeFilterCount = Object.keys(selectedValues).length;
27174
27589
  if (variant === "pills") {
27175
27590
  return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
27176
- showIcon && /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4 text-muted-foreground" }),
27591
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
27177
27592
  filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
27178
27593
  /* @__PURE__ */ jsxs("span", { className: "text-sm font-[var(--font-weight-medium)] text-muted-foreground", children: [
27179
27594
  filter.label,
@@ -27221,7 +27636,7 @@ var init_FilterGroup = __esm({
27221
27636
  variant: "ghost",
27222
27637
  size: "sm",
27223
27638
  onClick: handleClearAll,
27224
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
27639
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
27225
27640
  children: "Clear"
27226
27641
  }
27227
27642
  )
@@ -27230,7 +27645,7 @@ var init_FilterGroup = __esm({
27230
27645
  if (variant === "vertical") {
27231
27646
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
27232
27647
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
27233
- /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4" }),
27648
+ /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
27234
27649
  /* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--font-weight-bold)] uppercase tracking-wide", children: "Filters" })
27235
27650
  ] }),
27236
27651
  filters.map((filter) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
@@ -27303,7 +27718,7 @@ var init_FilterGroup = __esm({
27303
27718
  variant: "ghost",
27304
27719
  size: "sm",
27305
27720
  onClick: handleClearAll,
27306
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
27721
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
27307
27722
  className: "self-start",
27308
27723
  children: "Clear all"
27309
27724
  }
@@ -27312,7 +27727,7 @@ var init_FilterGroup = __esm({
27312
27727
  }
27313
27728
  if (variant === "compact") {
27314
27729
  return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
27315
- showIcon && /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4 text-muted-foreground" }),
27730
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
27316
27731
  filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
27317
27732
  Input,
27318
27733
  {
@@ -27388,7 +27803,7 @@ var init_FilterGroup = __esm({
27388
27803
  filterDef?.label,
27389
27804
  ": ",
27390
27805
  value,
27391
- /* @__PURE__ */ jsx(X, { className: "ml-1 h-3 w-3" })
27806
+ /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
27392
27807
  ]
27393
27808
  },
27394
27809
  field
@@ -27402,7 +27817,7 @@ var init_FilterGroup = __esm({
27402
27817
  "div",
27403
27818
  {
27404
27819
  className: cn(
27405
- "p-4 rounded-md",
27820
+ "p-4 rounded-container",
27406
27821
  "bg-card",
27407
27822
  "border-[length:var(--border-width)] border-border",
27408
27823
  className
@@ -27415,7 +27830,7 @@ var init_FilterGroup = __esm({
27415
27830
  align: "center",
27416
27831
  className: "text-muted-foreground",
27417
27832
  children: [
27418
- /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4" }),
27833
+ /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
27419
27834
  /* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--font-weight-bold)] uppercase tracking-wide", children: "Filters" })
27420
27835
  ]
27421
27836
  }
@@ -27501,7 +27916,7 @@ var init_FilterGroup = __esm({
27501
27916
  variant: "ghost",
27502
27917
  size: "sm",
27503
27918
  onClick: handleClearAll,
27504
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
27919
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
27505
27920
  children: "Clear all"
27506
27921
  }
27507
27922
  )
@@ -27718,6 +28133,7 @@ var init_RelationSelect = __esm({
27718
28133
  "use client";
27719
28134
  init_cn();
27720
28135
  init_Box();
28136
+ init_Icon();
27721
28137
  init_Stack();
27722
28138
  init_Input();
27723
28139
  init_Button();
@@ -27861,12 +28277,13 @@ var init_RelationSelect = __esm({
27861
28277
  as: "button",
27862
28278
  className: "p-0.5 hover:bg-muted rounded cursor-pointer",
27863
28279
  onClick: handleClear,
27864
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4 text-muted-foreground" })
28280
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-4 w-4 text-muted-foreground" })
27865
28281
  }
27866
28282
  ),
27867
28283
  /* @__PURE__ */ jsx(
27868
- ChevronDown,
28284
+ Icon,
27869
28285
  {
28286
+ name: "chevron-down",
27870
28287
  className: cn(
27871
28288
  "h-4 w-4 text-muted-foreground transition-transform",
27872
28289
  isOpen && "transform rotate-180"
@@ -28084,7 +28501,7 @@ var init_SidePanel = __esm({
28084
28501
  "border-l-2 border-border",
28085
28502
  position === "left" && "border-l-0 border-r-2",
28086
28503
  "flex flex-col",
28087
- "transition-transform duration-300 ease-in-out",
28504
+ "transition-transform duration-normal ease-standard",
28088
28505
  width,
28089
28506
  position === "right" ? "right-0" : "left-0",
28090
28507
  className
@@ -28097,7 +28514,7 @@ var init_SidePanel = __esm({
28097
28514
  {
28098
28515
  variant: "ghost",
28099
28516
  size: "sm",
28100
- icon: X,
28517
+ icon: "x",
28101
28518
  onClick: handleClose,
28102
28519
  "aria-label": "Close panel",
28103
28520
  children: /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", className: "sr-only", children: "Close" })
@@ -28155,7 +28572,7 @@ var init_WizardProgress = __esm({
28155
28572
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
28156
28573
  const isActive = index === currentStep;
28157
28574
  const isCompleted = index < currentStep;
28158
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
28575
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
28159
28576
  /* @__PURE__ */ jsx(
28160
28577
  "button",
28161
28578
  {
@@ -28169,7 +28586,7 @@ var init_WizardProgress = __esm({
28169
28586
  isCompleted && "bg-foreground text-background cursor-pointer hover:bg-muted-foreground",
28170
28587
  !isActive && !isCompleted && "bg-card text-foreground"
28171
28588
  ),
28172
- children: isCompleted ? /* @__PURE__ */ jsx(Icon, { icon: Check, size: "sm" }) : index + 1
28589
+ children: isCompleted ? /* @__PURE__ */ jsx(Icon, { name: "check", size: "sm" }) : index + 1
28173
28590
  }
28174
28591
  ),
28175
28592
  !compact && /* @__PURE__ */ jsx(
@@ -28288,13 +28705,13 @@ var init_WizardNavigation = __esm({
28288
28705
  ),
28289
28706
  children: [
28290
28707
  showBack ? /* @__PURE__ */ jsxs(Button, { variant: "secondary", onClick: handleBack, disabled: isFirstStep, children: [
28291
- /* @__PURE__ */ jsx(Icon, { icon: ChevronLeft, size: "sm" }),
28708
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-left", size: "sm" }),
28292
28709
  resolvedBackLabel
28293
28710
  ] }) : /* @__PURE__ */ jsx(Box, {}),
28294
28711
  /* @__PURE__ */ jsx(HStack, { align: "center", gap: "sm", children: /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-neutral-500", children: t("wizard.stepOf", { current: String(currentStep + 1), total: String(totalSteps) }) }) }),
28295
28712
  isLastStep && showComplete ? /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: handleComplete, disabled: !isValid, children: resolvedCompleteLabel }) : showNext ? /* @__PURE__ */ jsxs(Button, { variant: "primary", onClick: handleNext, disabled: !isValid, children: [
28296
28713
  resolvedNextLabel,
28297
- /* @__PURE__ */ jsx(Icon, { icon: ChevronRight, size: "sm" })
28714
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-right", size: "sm" })
28298
28715
  ] }) : /* @__PURE__ */ jsx(Box, {})
28299
28716
  ]
28300
28717
  }
@@ -28486,7 +28903,7 @@ var init_ViolationAlert = __esm({
28486
28903
  Box,
28487
28904
  {
28488
28905
  className: cn(
28489
- "px-3 py-2 rounded-md border",
28906
+ "px-3 py-2 rounded-container border",
28490
28907
  bgColor,
28491
28908
  className
28492
28909
  ),
@@ -28747,7 +29164,7 @@ var init_FlipCard = __esm({
28747
29164
  /* @__PURE__ */ jsx(
28748
29165
  Box,
28749
29166
  {
28750
- className: "absolute inset-0 w-full h-full rounded-lg shadow-lg flex items-center justify-center p-6",
29167
+ className: "absolute inset-0 w-full h-full rounded-lg shadow-elevation-dialog flex items-center justify-center p-6",
28751
29168
  style: { backfaceVisibility: "hidden", transform: "rotateY(0deg)" },
28752
29169
  children: front
28753
29170
  }
@@ -28755,7 +29172,7 @@ var init_FlipCard = __esm({
28755
29172
  /* @__PURE__ */ jsx(
28756
29173
  Box,
28757
29174
  {
28758
- className: "absolute inset-0 w-full h-full rounded-lg shadow-lg flex items-center justify-center p-6",
29175
+ className: "absolute inset-0 w-full h-full rounded-lg shadow-elevation-dialog flex items-center justify-center p-6",
28759
29176
  style: { backfaceVisibility: "hidden", transform: "rotateY(180deg)" },
28760
29177
  children: back
28761
29178
  }
@@ -29100,7 +29517,7 @@ var init_ProgressDots = __esm({
29100
29517
  Box,
29101
29518
  {
29102
29519
  className: cn(
29103
- "rounded-full transition-all duration-200",
29520
+ "rounded-full transition-all duration-fast",
29104
29521
  onDotClick && "cursor-pointer"
29105
29522
  ),
29106
29523
  style: {
@@ -29142,10 +29559,7 @@ function StatBadge({
29142
29559
  className
29143
29560
  ),
29144
29561
  children: [
29145
- icon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 text-lg", children: typeof icon === "string" ? (() => {
29146
- const I = resolveIcon(icon);
29147
- return I ? /* @__PURE__ */ jsx(I, { className: "w-4 h-4" }) : icon;
29148
- })() : icon }),
29562
+ icon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 text-lg", children: typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: "w-4 h-4" }) : icon }),
29149
29563
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground font-medium", children: label }),
29150
29564
  format === "hearts" && max && /* @__PURE__ */ jsx(
29151
29565
  HealthBar,
@@ -29213,7 +29627,7 @@ function InventoryGrid({
29213
29627
  const eventBus = useEventBus();
29214
29628
  const slotCount = totalSlots ?? items.length;
29215
29629
  const emptySlotCount = Math.max(0, slotCount - items.length);
29216
- const handleSelect = React96.useCallback(
29630
+ const handleSelect = React98.useCallback(
29217
29631
  (id) => {
29218
29632
  onSelect?.(id);
29219
29633
  if (selectEvent) {
@@ -29426,15 +29840,15 @@ function GameCanvas2D({
29426
29840
  fps = 60,
29427
29841
  className
29428
29842
  }) {
29429
- const canvasRef = React96.useRef(null);
29430
- const rafRef = React96.useRef(0);
29431
- const frameRef = React96.useRef(0);
29432
- const lastTimeRef = React96.useRef(0);
29433
- const onDrawRef = React96.useRef(onDraw);
29843
+ const canvasRef = React98.useRef(null);
29844
+ const rafRef = React98.useRef(0);
29845
+ const frameRef = React98.useRef(0);
29846
+ const lastTimeRef = React98.useRef(0);
29847
+ const onDrawRef = React98.useRef(onDraw);
29434
29848
  onDrawRef.current = onDraw;
29435
- const onTickRef = React96.useRef(onTick);
29849
+ const onTickRef = React98.useRef(onTick);
29436
29850
  onTickRef.current = onTick;
29437
- React96.useEffect(() => {
29851
+ React98.useEffect(() => {
29438
29852
  const canvas = canvasRef.current;
29439
29853
  if (!canvas) return;
29440
29854
  const ctx = canvas.getContext("2d");
@@ -29723,7 +30137,7 @@ function TurnPanel({
29723
30137
  className
29724
30138
  }) {
29725
30139
  const eventBus = useEventBus();
29726
- const handleAction = React96.useCallback(
30140
+ const handleAction = React98.useCallback(
29727
30141
  (event) => {
29728
30142
  if (event) {
29729
30143
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -29869,7 +30283,7 @@ function UnitCommandBar({
29869
30283
  className
29870
30284
  }) {
29871
30285
  const eventBus = useEventBus();
29872
- const handleCommand = React96.useCallback(
30286
+ const handleCommand = React98.useCallback(
29873
30287
  (event) => {
29874
30288
  if (event) {
29875
30289
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -30354,7 +30768,7 @@ function GameMenu({
30354
30768
  } catch {
30355
30769
  }
30356
30770
  const eventBus = eventBusProp || eventBusFromHook;
30357
- const handleOptionClick = React96.useCallback(
30771
+ const handleOptionClick = React98.useCallback(
30358
30772
  (option) => {
30359
30773
  if (option.event && eventBus) {
30360
30774
  eventBus.emit(`UI:${option.event}`, { option });
@@ -30468,7 +30882,7 @@ function GameOverScreen({
30468
30882
  } catch {
30469
30883
  }
30470
30884
  const eventBus = eventBusProp || eventBusFromHook;
30471
- const handleActionClick = React96.useCallback(
30885
+ const handleActionClick = React98.useCallback(
30472
30886
  (action) => {
30473
30887
  if (action.event && eventBus) {
30474
30888
  eventBus.emit(`UI:${action.event}`, { action });
@@ -31176,6 +31590,7 @@ var init_NumberStepper = __esm({
31176
31590
  "components/molecules/NumberStepper.tsx"() {
31177
31591
  "use client";
31178
31592
  init_cn();
31593
+ init_Icon();
31179
31594
  init_useEventBus();
31180
31595
  sizeStyles10 = {
31181
31596
  sm: {
@@ -31294,7 +31709,7 @@ var init_NumberStepper = __esm({
31294
31709
  styles.button
31295
31710
  ),
31296
31711
  "aria-label": "Decrease",
31297
- children: /* @__PURE__ */ jsx(Minus, { className: styles.icon })
31712
+ children: /* @__PURE__ */ jsx(Icon, { name: "minus", className: styles.icon })
31298
31713
  }
31299
31714
  ),
31300
31715
  /* @__PURE__ */ jsx(
@@ -31335,7 +31750,7 @@ var init_NumberStepper = __esm({
31335
31750
  styles.button
31336
31751
  ),
31337
31752
  "aria-label": "Increase",
31338
- children: /* @__PURE__ */ jsx(Plus, { className: styles.icon })
31753
+ children: /* @__PURE__ */ jsx(Icon, { name: "plus", className: styles.icon })
31339
31754
  }
31340
31755
  )
31341
31756
  ]
@@ -31360,6 +31775,7 @@ var init_StarRating = __esm({
31360
31775
  "components/molecules/StarRating.tsx"() {
31361
31776
  "use client";
31362
31777
  init_cn();
31778
+ init_Icon();
31363
31779
  init_useEventBus();
31364
31780
  sizeStyles11 = {
31365
31781
  sm: { star: "w-4 h-4", gap: "gap-0.5" },
@@ -31446,8 +31862,9 @@ var init_StarRating = __esm({
31446
31862
  },
31447
31863
  children: [
31448
31864
  /* @__PURE__ */ jsx(
31449
- Star,
31865
+ Icon,
31450
31866
  {
31867
+ name: "star",
31451
31868
  className: cn(
31452
31869
  styles.star,
31453
31870
  "text-muted",
@@ -31457,8 +31874,9 @@ var init_StarRating = __esm({
31457
31874
  }
31458
31875
  ),
31459
31876
  (isFull || isHalf) && /* @__PURE__ */ jsx(
31460
- Star,
31877
+ Icon,
31461
31878
  {
31879
+ name: "star",
31462
31880
  className: cn(
31463
31881
  styles.star,
31464
31882
  "absolute inset-0",
@@ -31650,7 +32068,7 @@ var init_UploadDropZone = __esm({
31650
32068
  "aria-hidden": "true"
31651
32069
  }
31652
32070
  ),
31653
- error ? /* @__PURE__ */ jsx(Icon, { icon: FileWarning, size: "lg", className: "text-error mb-2" }) : /* @__PURE__ */ jsx(Icon, { icon: Upload, size: "lg", className: "text-muted-foreground mb-2" }),
32071
+ error ? /* @__PURE__ */ jsx(Icon, { name: "file-warning", size: "lg", className: "text-error mb-2" }) : /* @__PURE__ */ jsx(Icon, { name: "upload", size: "lg", className: "text-muted-foreground mb-2" }),
31654
32072
  /* @__PURE__ */ jsx(Typography, { variant: "body1", className: "text-center font-medium mb-1", children: isDragOver ? "Drop files here" : label }),
31655
32073
  error ? /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "error", className: "text-center", children: error }) : /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-center", children: description ?? defaultDescription })
31656
32074
  ]
@@ -31674,6 +32092,7 @@ var Lightbox;
31674
32092
  var init_Lightbox = __esm({
31675
32093
  "components/molecules/Lightbox.tsx"() {
31676
32094
  "use client";
32095
+ init_Icon();
31677
32096
  init_cn();
31678
32097
  init_useEventBus();
31679
32098
  Lightbox = ({
@@ -31781,7 +32200,7 @@ var init_Lightbox = __esm({
31781
32200
  "focus:outline-none focus:ring-2 focus:ring-white"
31782
32201
  ),
31783
32202
  "aria-label": "Close",
31784
- children: /* @__PURE__ */ jsx(X, { className: "w-6 h-6" })
32203
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "w-6 h-6" })
31785
32204
  }
31786
32205
  ),
31787
32206
  hasPrev && safeImages.length > 1 && /* @__PURE__ */ jsx(
@@ -31800,7 +32219,7 @@ var init_Lightbox = __esm({
31800
32219
  "focus:outline-none focus:ring-2 focus:ring-white"
31801
32220
  ),
31802
32221
  "aria-label": "Previous image",
31803
- children: /* @__PURE__ */ jsx(ChevronLeft, { className: "w-8 h-8" })
32222
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
31804
32223
  }
31805
32224
  ),
31806
32225
  /* @__PURE__ */ jsx(
@@ -31837,7 +32256,7 @@ var init_Lightbox = __esm({
31837
32256
  "focus:outline-none focus:ring-2 focus:ring-white"
31838
32257
  ),
31839
32258
  "aria-label": "Next image",
31840
- children: /* @__PURE__ */ jsx(ChevronRight, { className: "w-8 h-8" })
32259
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
31841
32260
  }
31842
32261
  ),
31843
32262
  /* @__PURE__ */ jsxs("div", { className: "absolute bottom-4 left-0 right-0 text-center", children: [
@@ -32121,7 +32540,7 @@ var init_Meter = __esm({
32121
32540
  strokeDasharray: circumference,
32122
32541
  strokeDashoffset: offset,
32123
32542
  strokeLinecap: "round",
32124
- className: "transition-all duration-500 ease-out"
32543
+ className: "transition-all duration-slow ease-emphasized"
32125
32544
  }
32126
32545
  )
32127
32546
  ]
@@ -32164,7 +32583,7 @@ var init_Meter = __esm({
32164
32583
  Box,
32165
32584
  {
32166
32585
  className: cn(
32167
- "h-2 flex-1 rounded-sm transition-all duration-300",
32586
+ "h-2 flex-1 rounded-sm transition-all duration-normal",
32168
32587
  !isActive && "bg-muted"
32169
32588
  ),
32170
32589
  style: isActive ? { backgroundColor: segColor } : void 0
@@ -32183,7 +32602,7 @@ var init_Meter = __esm({
32183
32602
  /* @__PURE__ */ jsx(Box, { className: "w-full h-3 bg-muted rounded-full overflow-hidden", children: /* @__PURE__ */ jsx(
32184
32603
  Box,
32185
32604
  {
32186
- className: "h-full rounded-full transition-all duration-500 ease-out",
32605
+ className: "h-full rounded-full transition-all duration-slow ease-emphasized",
32187
32606
  style: {
32188
32607
  width: `${percentage}%`,
32189
32608
  backgroundColor: activeColor
@@ -32709,7 +33128,7 @@ var init_PullToRefresh = __esm({
32709
33128
  className: cn(
32710
33129
  "top-0 left-0 right-0 z-10",
32711
33130
  "items-center justify-center",
32712
- "transition-opacity duration-200",
33131
+ "transition-opacity duration-fast",
32713
33132
  showIndicator ? "opacity-100" : "opacity-0"
32714
33133
  ),
32715
33134
  style: {
@@ -32895,7 +33314,7 @@ var init_PricingCard = __esm({
32895
33314
  "hover:-translate-y-1 transition-all",
32896
33315
  highlighted && [
32897
33316
  "border-[length:2px] border-primary",
32898
- "shadow-lg",
33317
+ "shadow-elevation-dialog",
32899
33318
  "scale-[1.05]",
32900
33319
  "ring-2 ring-primary"
32901
33320
  ],
@@ -32918,7 +33337,7 @@ var init_PricingCard = __esm({
32918
33337
  /* @__PURE__ */ jsx(
32919
33338
  Icon,
32920
33339
  {
32921
- icon: Check,
33340
+ name: "check",
32922
33341
  size: "sm",
32923
33342
  className: "flex-shrink-0 text-success"
32924
33343
  }
@@ -33136,7 +33555,7 @@ var init_StepFlow = __esm({
33136
33555
  className
33137
33556
  }) => {
33138
33557
  if (orientation === "vertical") {
33139
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React96__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
33558
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React98__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
33140
33559
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
33141
33560
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
33142
33561
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -33147,7 +33566,7 @@ var init_StepFlow = __esm({
33147
33566
  ] })
33148
33567
  ] }) }, index)) });
33149
33568
  }
33150
- return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
33569
+ return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
33151
33570
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
33152
33571
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
33153
33572
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -33961,6 +34380,7 @@ var init_VoteStack = __esm({
33961
34380
  "components/molecules/VoteStack.tsx"() {
33962
34381
  "use client";
33963
34382
  init_cn();
34383
+ init_Icon();
33964
34384
  init_useEventBus();
33965
34385
  sizeStyles12 = {
33966
34386
  sm: {
@@ -34042,7 +34462,7 @@ var init_VoteStack = __esm({
34042
34462
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
34043
34463
  styles.button
34044
34464
  ),
34045
- children: /* @__PURE__ */ jsx(ChevronUp, { className: styles.icon })
34465
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-up", className: styles.icon })
34046
34466
  }
34047
34467
  ),
34048
34468
  /* @__PURE__ */ jsx(
@@ -34079,7 +34499,7 @@ var init_VoteStack = __esm({
34079
34499
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
34080
34500
  styles.button
34081
34501
  ),
34082
- children: /* @__PURE__ */ jsx(ChevronDown, { className: styles.icon })
34502
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: styles.icon })
34083
34503
  }
34084
34504
  )
34085
34505
  ]
@@ -34121,7 +34541,7 @@ var init_LikertScale = __esm({
34121
34541
  md: "text-base",
34122
34542
  lg: "text-lg"
34123
34543
  };
34124
- LikertScale = React96__default.forwardRef(
34544
+ LikertScale = React98__default.forwardRef(
34125
34545
  ({
34126
34546
  question,
34127
34547
  options = DEFAULT_LIKERT_OPTIONS,
@@ -34133,7 +34553,7 @@ var init_LikertScale = __esm({
34133
34553
  variant = "radios",
34134
34554
  className
34135
34555
  }, ref) => {
34136
- const groupId = React96__default.useId();
34556
+ const groupId = React98__default.useId();
34137
34557
  const eventBus = useEventBus();
34138
34558
  const handleSelect = useCallback(
34139
34559
  (next) => {
@@ -34413,6 +34833,7 @@ var init_QrScanner = __esm({
34413
34833
  "use client";
34414
34834
  init_cn();
34415
34835
  init_atoms();
34836
+ init_Icon();
34416
34837
  init_useEventBus();
34417
34838
  QrScanner = ({
34418
34839
  onScan,
@@ -34563,7 +34984,7 @@ var init_QrScanner = __esm({
34563
34984
  padding: "lg",
34564
34985
  className: "inset-0 flex-col items-center justify-center gap-2 bg-black bg-opacity-80 text-center",
34565
34986
  children: [
34566
- /* @__PURE__ */ jsx(Camera, { className: "h-8 w-8 text-white", "aria-hidden": "true" }),
34987
+ /* @__PURE__ */ jsx(Icon, { name: "camera", className: "h-8 w-8 text-white", "aria-hidden": "true" }),
34567
34988
  /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-white", children: "Camera unavailable" }),
34568
34989
  /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-white opacity-70", children: cameraError.message })
34569
34990
  ]
@@ -34595,7 +35016,7 @@ var init_QrScanner = __esm({
34595
35016
  "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
34596
35017
  ),
34597
35018
  "aria-label": isPaused ? "Resume scanning" : "Pause scanning",
34598
- children: isPaused ? /* @__PURE__ */ jsx(Play, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Pause, { className: "h-4 w-4" })
35019
+ children: isPaused ? /* @__PURE__ */ jsx(Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Icon, { name: "pause", className: "h-4 w-4" })
34599
35020
  }
34600
35021
  ),
34601
35022
  /* @__PURE__ */ jsx(
@@ -34608,7 +35029,7 @@ var init_QrScanner = __esm({
34608
35029
  "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
34609
35030
  ),
34610
35031
  "aria-label": `Switch to ${currentFacing === "environment" ? "front" : "rear"} camera`,
34611
- children: /* @__PURE__ */ jsx(RefreshCw, { className: "h-4 w-4" })
35032
+ children: /* @__PURE__ */ jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
34612
35033
  }
34613
35034
  ),
34614
35035
  /* @__PURE__ */ jsx(
@@ -34824,11 +35245,11 @@ function getShapeClasses(shape) {
34824
35245
  function getStatusIcon(status) {
34825
35246
  switch (status) {
34826
35247
  case "seated":
34827
- return /* @__PURE__ */ jsx(Users, { className: "w-4 h-4" });
35248
+ return /* @__PURE__ */ jsx(Icon, { name: "users", className: "w-4 h-4" });
34828
35249
  case "ordered":
34829
- return /* @__PURE__ */ jsx(Coffee, { className: "w-4 h-4" });
35250
+ return /* @__PURE__ */ jsx(Icon, { name: "coffee", className: "w-4 h-4" });
34830
35251
  case "awaiting-bill":
34831
- return /* @__PURE__ */ jsx(AlertCircle, { className: "w-4 h-4" });
35252
+ return /* @__PURE__ */ jsx(Icon, { name: "alert-circle", className: "w-4 h-4" });
34832
35253
  default:
34833
35254
  return null;
34834
35255
  }
@@ -34840,6 +35261,7 @@ var init_PositionedCanvas = __esm({
34840
35261
  init_cn();
34841
35262
  init_useEventBus();
34842
35263
  init_atoms();
35264
+ init_Icon();
34843
35265
  STATUS_CLASSES = {
34844
35266
  empty: "bg-surface border-border text-foreground",
34845
35267
  seated: "bg-surface border-success text-success",
@@ -34952,7 +35374,7 @@ var init_PositionedCanvas = __esm({
34952
35374
  {
34953
35375
  ref: containerRef,
34954
35376
  "data-testid": "positioned-canvas",
34955
- className: "relative bg-background border border-border rounded-md overflow-hidden",
35377
+ className: "relative bg-background border border-border rounded-container overflow-hidden",
34956
35378
  style: { width, height },
34957
35379
  onClick: handleContainerClick,
34958
35380
  children: items.map((item) => {
@@ -35144,7 +35566,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
35144
35566
  "transition-opacity"
35145
35567
  ),
35146
35568
  onClick: () => setOpen((v) => !v),
35147
- children: /* @__PURE__ */ jsx(MoreHorizontal, { size: 14 })
35569
+ children: /* @__PURE__ */ jsx(Icon, { name: "more-horizontal", className: "w-3.5 h-3.5" })
35148
35570
  }
35149
35571
  ),
35150
35572
  open && /* @__PURE__ */ jsxs(
@@ -35153,7 +35575,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
35153
35575
  role: "menu",
35154
35576
  className: cn(
35155
35577
  "absolute right-0 z-10 mt-1 w-44",
35156
- "rounded-md border border-border bg-popover shadow-md",
35578
+ "rounded-container border border-border bg-popover shadow-elevation-popover",
35157
35579
  "py-1 text-sm"
35158
35580
  ),
35159
35581
  children: [
@@ -35170,7 +35592,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
35170
35592
  setOpen(false);
35171
35593
  },
35172
35594
  children: [
35173
- /* @__PURE__ */ jsx(Plus, { size: 14 }),
35595
+ /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3.5 h-3.5" }),
35174
35596
  " Duplicate"
35175
35597
  ]
35176
35598
  }
@@ -35187,7 +35609,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
35187
35609
  setOpen(false);
35188
35610
  },
35189
35611
  children: [
35190
- /* @__PURE__ */ jsx(Trash, { size: 14 }),
35612
+ /* @__PURE__ */ jsx(Icon, { name: "trash", className: "w-3.5 h-3.5" }),
35191
35613
  " Delete"
35192
35614
  ]
35193
35615
  }
@@ -35416,7 +35838,7 @@ function BlockRow({
35416
35838
  "text-sm text-muted-foreground"
35417
35839
  ),
35418
35840
  children: [
35419
- /* @__PURE__ */ jsx(Image$1, { className: "mr-2", size: 16 }),
35841
+ /* @__PURE__ */ jsx(Icon, { name: "image", className: "mr-2 w-4 h-4" }),
35420
35842
  " No image URL set"
35421
35843
  ]
35422
35844
  }
@@ -35490,7 +35912,7 @@ function BlockRow({
35490
35912
  "opacity-0 group-hover/item:opacity-100 hover:bg-muted hover:text-foreground"
35491
35913
  ),
35492
35914
  onClick: () => removeListItem(child.id),
35493
- children: /* @__PURE__ */ jsx(Trash, { size: 12 })
35915
+ children: /* @__PURE__ */ jsx(Icon, { name: "trash", className: "w-3 h-3" })
35494
35916
  }
35495
35917
  )
35496
35918
  ] }, child.id)),
@@ -35505,7 +35927,7 @@ function BlockRow({
35505
35927
  ),
35506
35928
  onClick: addListItem,
35507
35929
  children: [
35508
- /* @__PURE__ */ jsx(Plus, { size: 12 }),
35930
+ /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3 h-3" }),
35509
35931
  " Add item"
35510
35932
  ]
35511
35933
  }
@@ -35554,7 +35976,7 @@ function BlockRow({
35554
35976
  "transition-opacity"
35555
35977
  ),
35556
35978
  onClick: () => onInsertAfter("paragraph"),
35557
- children: /* @__PURE__ */ jsx(Plus, { size: 14 })
35979
+ children: /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3.5 h-3.5" })
35558
35980
  }
35559
35981
  ),
35560
35982
  /* @__PURE__ */ jsx(
@@ -35584,6 +36006,7 @@ var init_RichBlockEditor = __esm({
35584
36006
  init_Box();
35585
36007
  init_Divider();
35586
36008
  init_Input();
36009
+ init_Icon();
35587
36010
  init_useEventBus();
35588
36011
  TOOLBAR_ENTRIES = [
35589
36012
  { type: "paragraph", label: "Text", icon: Type },
@@ -35827,7 +36250,7 @@ var init_ReplyTree = __esm({
35827
36250
  onClick: handleToggle,
35828
36251
  "aria-label": isCollapsed ? "Expand replies" : "Collapse replies",
35829
36252
  "aria-expanded": !isCollapsed,
35830
- leftIcon: isCollapsed ? ChevronRight : ChevronDown,
36253
+ leftIcon: isCollapsed ? "chevron-right" : "chevron-down",
35831
36254
  className: cn(
35832
36255
  "w-6 h-6 p-0 min-w-0",
35833
36256
  "rounded-sm text-muted-foreground",
@@ -35874,7 +36297,7 @@ var init_ReplyTree = __esm({
35874
36297
  {
35875
36298
  variant: "ghost",
35876
36299
  size: "sm",
35877
- leftIcon: MessageSquare,
36300
+ leftIcon: "message-square",
35878
36301
  onClick: handleReply,
35879
36302
  "aria-label": `Reply to ${node.authorName}`,
35880
36303
  children: "Reply"
@@ -35885,7 +36308,7 @@ var init_ReplyTree = __esm({
35885
36308
  {
35886
36309
  variant: "ghost",
35887
36310
  size: "sm",
35888
- leftIcon: Flag,
36311
+ leftIcon: "flag",
35889
36312
  onClick: handleFlag,
35890
36313
  "aria-label": `Flag reply by ${node.authorName}`,
35891
36314
  children: "Flag"
@@ -35898,7 +36321,7 @@ var init_ReplyTree = __esm({
35898
36321
  variant: "ghost",
35899
36322
  size: "sm",
35900
36323
  onClick: handleContinue,
35901
- rightIcon: ChevronRight,
36324
+ rightIcon: "chevron-right",
35902
36325
  className: cn(
35903
36326
  "self-start gap-1 px-0 h-auto",
35904
36327
  "text-sm text-primary hover:underline hover:bg-transparent"
@@ -36139,7 +36562,7 @@ var init_VersionDiff = __esm({
36139
36562
  className: "px-4 py-2 border-b border-border bg-muted/30 flex-wrap",
36140
36563
  children: [
36141
36564
  /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "flex-wrap", children: [
36142
- /* @__PURE__ */ jsx(Icon, { icon: GitCommit, size: "sm", className: "text-muted-foreground" }),
36565
+ /* @__PURE__ */ jsx(Icon, { name: "git-commit", size: "sm", className: "text-muted-foreground" }),
36143
36566
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "whitespace-nowrap", children: "Compare" }),
36144
36567
  /* @__PURE__ */ jsx(Box, { className: "min-w-0 md:min-w-[160px]", children: /* @__PURE__ */ jsx(
36145
36568
  Select,
@@ -36176,7 +36599,7 @@ var init_VersionDiff = __esm({
36176
36599
  {
36177
36600
  variant: "ghost",
36178
36601
  size: "sm",
36179
- icon: activeView === "side-by-side" ? AlignLeft : Columns,
36602
+ icon: activeView === "side-by-side" ? "align-left" : "columns",
36180
36603
  onClick: handleViewToggle,
36181
36604
  "aria-label": activeView === "side-by-side" ? "Switch to inline view" : "Switch to side-by-side view"
36182
36605
  }
@@ -36186,7 +36609,7 @@ var init_VersionDiff = __esm({
36186
36609
  {
36187
36610
  variant: "ghost",
36188
36611
  size: "sm",
36189
- icon: RotateCcw,
36612
+ icon: "rotate-ccw",
36190
36613
  onClick: handleRevert,
36191
36614
  children: "Revert"
36192
36615
  }
@@ -36363,7 +36786,7 @@ var init_DocBreadcrumb = __esm({
36363
36786
  "aria-label": "Breadcrumb",
36364
36787
  children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
36365
36788
  const isLast = idx === items.length - 1;
36366
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
36789
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
36367
36790
  idx > 0 && /* @__PURE__ */ jsx(
36368
36791
  Icon,
36369
36792
  {
@@ -36429,7 +36852,7 @@ function DocCodeBlock({
36429
36852
  Box,
36430
36853
  {
36431
36854
  className: cn(
36432
- "rounded-md border border-border overflow-hidden",
36855
+ "rounded-container border border-border overflow-hidden",
36433
36856
  className
36434
36857
  ),
36435
36858
  position: "relative",
@@ -36588,11 +37011,11 @@ var init_DocPagination = __esm({
36588
37011
  init_Typography();
36589
37012
  linkCardStyles = [
36590
37013
  "border border-border",
36591
- "rounded-md",
37014
+ "rounded-container",
36592
37015
  "p-4",
36593
37016
  "transition-all",
36594
37017
  "hover:border-primary",
36595
- "hover:shadow-lg",
37018
+ "hover:shadow-elevation-dialog",
36596
37019
  "no-underline",
36597
37020
  "flex-1",
36598
37021
  "min-w-0",
@@ -36729,7 +37152,7 @@ function DocSearch({
36729
37152
  Box,
36730
37153
  {
36731
37154
  position: "absolute",
36732
- className: "top-full left-0 right-0 mt-1 z-50 bg-card border border-border rounded-md shadow-lg max-h-80 overflow-y-auto",
37155
+ className: "top-full left-0 right-0 mt-1 z-50 bg-card border border-border rounded-container shadow-elevation-popover max-h-80 overflow-y-auto",
36733
37156
  children: /* @__PURE__ */ jsx(VStack, { gap: "none", children: results.map((result, index) => /* @__PURE__ */ jsx(
36734
37157
  Box,
36735
37158
  {
@@ -38296,7 +38719,7 @@ var init_DocumentViewer = __esm({
38296
38719
  }
38297
38720
  });
38298
38721
  function extractTitle(children) {
38299
- if (!React96__default.isValidElement(children)) return void 0;
38722
+ if (!React98__default.isValidElement(children)) return void 0;
38300
38723
  const props = children.props;
38301
38724
  if (typeof props.title === "string") {
38302
38725
  return props.title;
@@ -38351,7 +38774,7 @@ function LinearView({
38351
38774
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
38352
38775
  const isDone = i < currentIdx;
38353
38776
  const isCurrent = i === currentIdx;
38354
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
38777
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
38355
38778
  i > 0 && /* @__PURE__ */ jsx(
38356
38779
  Typography,
38357
38780
  {
@@ -39252,12 +39675,12 @@ var init_Form = __esm({
39252
39675
  const isSchemaEntity = isOrbitalEntitySchema(entity);
39253
39676
  const resolvedEntity = isSchemaEntity ? entity : void 0;
39254
39677
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
39255
- const normalizedInitialData = React96__default.useMemo(() => {
39678
+ const normalizedInitialData = React98__default.useMemo(() => {
39256
39679
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
39257
39680
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
39258
39681
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
39259
39682
  }, [entity, initialData]);
39260
- const entityDerivedFields = React96__default.useMemo(() => {
39683
+ const entityDerivedFields = React98__default.useMemo(() => {
39261
39684
  if (fields && fields.length > 0) return void 0;
39262
39685
  if (!resolvedEntity) return void 0;
39263
39686
  return resolvedEntity.fields.map(
@@ -39266,26 +39689,27 @@ var init_Form = __esm({
39266
39689
  type: f3.type,
39267
39690
  required: f3.required,
39268
39691
  defaultValue: f3.default,
39269
- values: f3.values,
39692
+ // EntityField is a discriminated union — `values` lives on Scalar/Enum, `relation` lives on Relation.
39693
+ values: "values" in f3 ? f3.values : void 0,
39270
39694
  min: f3.min,
39271
39695
  max: f3.max,
39272
- relation: f3.relation ? { entity: f3.relation.entity } : void 0
39696
+ relation: "relation" in f3 ? { entity: f3.relation.entity } : void 0
39273
39697
  })
39274
39698
  );
39275
39699
  }, [entity, fields]);
39276
39700
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
39277
39701
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
39278
39702
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
39279
- const [formData, setFormData] = React96__default.useState(
39703
+ const [formData, setFormData] = React98__default.useState(
39280
39704
  normalizedInitialData
39281
39705
  );
39282
- const [collapsedSections, setCollapsedSections] = React96__default.useState(
39706
+ const [collapsedSections, setCollapsedSections] = React98__default.useState(
39283
39707
  /* @__PURE__ */ new Set()
39284
39708
  );
39285
- const [submitError, setSubmitError] = React96__default.useState(null);
39286
- const formRef = React96__default.useRef(null);
39709
+ const [submitError, setSubmitError] = React98__default.useState(null);
39710
+ const formRef = React98__default.useRef(null);
39287
39711
  const formMode = props.mode;
39288
- const mountedRef = React96__default.useRef(false);
39712
+ const mountedRef = React98__default.useRef(false);
39289
39713
  if (!mountedRef.current) {
39290
39714
  mountedRef.current = true;
39291
39715
  debug("forms", "mount", {
@@ -39298,7 +39722,7 @@ var init_Form = __esm({
39298
39722
  });
39299
39723
  }
39300
39724
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
39301
- const evalContext = React96__default.useMemo(
39725
+ const evalContext = React98__default.useMemo(
39302
39726
  () => ({
39303
39727
  formValues: formData,
39304
39728
  globalVariables: externalContext?.globalVariables ?? {},
@@ -39307,7 +39731,7 @@ var init_Form = __esm({
39307
39731
  }),
39308
39732
  [formData, externalContext]
39309
39733
  );
39310
- React96__default.useEffect(() => {
39734
+ React98__default.useEffect(() => {
39311
39735
  debug("forms", "initialData-sync", {
39312
39736
  mode: formMode,
39313
39737
  normalizedInitialData,
@@ -39318,7 +39742,7 @@ var init_Form = __esm({
39318
39742
  setFormData(normalizedInitialData);
39319
39743
  }
39320
39744
  }, [normalizedInitialData]);
39321
- const processCalculations = React96__default.useCallback(
39745
+ const processCalculations = React98__default.useCallback(
39322
39746
  (changedFieldId, newFormData) => {
39323
39747
  if (!hiddenCalculations.length) return;
39324
39748
  const context = {
@@ -39343,7 +39767,7 @@ var init_Form = __esm({
39343
39767
  },
39344
39768
  [hiddenCalculations, externalContext, eventBus]
39345
39769
  );
39346
- const checkViolations = React96__default.useCallback(
39770
+ const checkViolations = React98__default.useCallback(
39347
39771
  (changedFieldId, newFormData) => {
39348
39772
  if (!violationTriggers.length) return;
39349
39773
  const context = {
@@ -39381,7 +39805,7 @@ var init_Form = __esm({
39381
39805
  processCalculations(name, newFormData);
39382
39806
  checkViolations(name, newFormData);
39383
39807
  };
39384
- const isFieldVisible = React96__default.useCallback(
39808
+ const isFieldVisible = React98__default.useCallback(
39385
39809
  (fieldName) => {
39386
39810
  const condition = conditionalFields[fieldName];
39387
39811
  if (!condition) return true;
@@ -39389,7 +39813,7 @@ var init_Form = __esm({
39389
39813
  },
39390
39814
  [conditionalFields, evalContext]
39391
39815
  );
39392
- const isSectionVisible = React96__default.useCallback(
39816
+ const isSectionVisible = React98__default.useCallback(
39393
39817
  (section) => {
39394
39818
  if (!section.condition) return true;
39395
39819
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -39465,7 +39889,7 @@ var init_Form = __esm({
39465
39889
  eventBus.emit(`UI:${onCancel}`);
39466
39890
  }
39467
39891
  };
39468
- const renderField = React96__default.useCallback(
39892
+ const renderField = React98__default.useCallback(
39469
39893
  (field) => {
39470
39894
  const fieldName = field.name || field.field;
39471
39895
  if (!fieldName) return null;
@@ -39486,7 +39910,7 @@ var init_Form = __esm({
39486
39910
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
39487
39911
  );
39488
39912
  const effectiveFields = entityDerivedFields ?? fields;
39489
- const normalizedFields = React96__default.useMemo(() => {
39913
+ const normalizedFields = React98__default.useMemo(() => {
39490
39914
  if (!effectiveFields || effectiveFields.length === 0) return [];
39491
39915
  return effectiveFields.map((field) => {
39492
39916
  if (typeof field === "string") {
@@ -39497,10 +39921,11 @@ var init_Form = __esm({
39497
39921
  type: entityField.type,
39498
39922
  required: entityField.required,
39499
39923
  defaultValue: entityField.default,
39500
- values: entityField.values,
39924
+ // EntityField is a discriminated union — `values` lives on Scalar/Enum, `relation` lives on Relation.
39925
+ values: "values" in entityField ? entityField.values : void 0,
39501
39926
  min: entityField.min,
39502
39927
  max: entityField.max,
39503
- relation: entityField.relation ? { entity: entityField.relation.entity } : void 0
39928
+ relation: "relation" in entityField ? { entity: entityField.relation.entity } : void 0
39504
39929
  };
39505
39930
  }
39506
39931
  return { name: field, type: "string" };
@@ -39508,7 +39933,7 @@ var init_Form = __esm({
39508
39933
  return field;
39509
39934
  });
39510
39935
  }, [effectiveFields, resolvedEntity]);
39511
- const schemaFields = React96__default.useMemo(() => {
39936
+ const schemaFields = React98__default.useMemo(() => {
39512
39937
  if (normalizedFields.length === 0) return null;
39513
39938
  if (isDebugEnabled()) {
39514
39939
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -39518,7 +39943,7 @@ var init_Form = __esm({
39518
39943
  }
39519
39944
  return normalizedFields.map(renderField).filter(Boolean);
39520
39945
  }, [normalizedFields, renderField, entityName, conditionalFields]);
39521
- const sectionElements = React96__default.useMemo(() => {
39946
+ const sectionElements = React98__default.useMemo(() => {
39522
39947
  if (!sections || sections.length === 0) return null;
39523
39948
  return sections.map((section) => {
39524
39949
  if (!isSectionVisible(section)) {
@@ -40223,7 +40648,7 @@ var init_GameTemplate = __esm({
40223
40648
  {
40224
40649
  variant: "secondary",
40225
40650
  size: "sm",
40226
- icon: Pause,
40651
+ icon: "pause",
40227
40652
  onClick: controls.onPause,
40228
40653
  children: "Pause"
40229
40654
  }
@@ -40232,7 +40657,7 @@ var init_GameTemplate = __esm({
40232
40657
  {
40233
40658
  variant: "primary",
40234
40659
  size: "sm",
40235
- icon: Play,
40660
+ icon: "play",
40236
40661
  onClick: controls.onPlay,
40237
40662
  children: "Play"
40238
40663
  }
@@ -40242,7 +40667,7 @@ var init_GameTemplate = __esm({
40242
40667
  {
40243
40668
  variant: "ghost",
40244
40669
  size: "sm",
40245
- icon: RotateCcw,
40670
+ icon: "rotate-ccw",
40246
40671
  onClick: controls.onReset,
40247
40672
  children: "Reset"
40248
40673
  }
@@ -41244,7 +41669,7 @@ var init_List = __esm({
41244
41669
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
41245
41670
  return [];
41246
41671
  }, [entity]);
41247
- const getItemActions = React96__default.useCallback(
41672
+ const getItemActions = React98__default.useCallback(
41248
41673
  (item) => {
41249
41674
  if (!itemActions) return [];
41250
41675
  if (typeof itemActions === "function") {
@@ -41717,7 +42142,7 @@ var init_MediaGallery = __esm({
41717
42142
  [selectable, selectedItems, selectionEvent, eventBus]
41718
42143
  );
41719
42144
  const entityData = Array.isArray(entity) ? entity : [];
41720
- const items = React96__default.useMemo(() => {
42145
+ const items = React98__default.useMemo(() => {
41721
42146
  if (propItems) return propItems;
41722
42147
  if (entityData.length === 0) return [];
41723
42148
  return entityData.map((record, idx) => ({
@@ -41881,7 +42306,7 @@ var init_MediaGallery = __esm({
41881
42306
  }
41882
42307
  });
41883
42308
  function extractTitle2(children) {
41884
- if (!React96__default.isValidElement(children)) return void 0;
42309
+ if (!React98__default.isValidElement(children)) return void 0;
41885
42310
  const props = children.props;
41886
42311
  if (typeof props.title === "string") {
41887
42312
  return props.title;
@@ -42594,7 +43019,7 @@ var init_PageHeader = __esm({
42594
43019
  info: "bg-info/10 text-info"
42595
43020
  };
42596
43021
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
42597
- breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
43022
+ breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
42598
43023
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
42599
43024
  crumb.href ? /* @__PURE__ */ jsx(
42600
43025
  "a",
@@ -42806,7 +43231,7 @@ var init_PricingPageTemplate = __esm({
42806
43231
 
42807
43232
  // lib/traitRegistry.ts
42808
43233
  function notifyListeners2() {
42809
- listeners.forEach((listener) => listener());
43234
+ listeners2.forEach((listener) => listener());
42810
43235
  }
42811
43236
  function registerTrait(info) {
42812
43237
  traits.set(info.id, info);
@@ -42828,14 +43253,14 @@ function getAllTraits() {
42828
43253
  return Array.from(traits.values());
42829
43254
  }
42830
43255
  function subscribeToTraitChanges(listener) {
42831
- listeners.add(listener);
42832
- return () => listeners.delete(listener);
43256
+ listeners2.add(listener);
43257
+ return () => listeners2.delete(listener);
42833
43258
  }
42834
- var traits, listeners;
43259
+ var traits, listeners2;
42835
43260
  var init_traitRegistry = __esm({
42836
43261
  "lib/traitRegistry.ts"() {
42837
43262
  traits = /* @__PURE__ */ new Map();
42838
- listeners = /* @__PURE__ */ new Set();
43263
+ listeners2 = /* @__PURE__ */ new Set();
42839
43264
  }
42840
43265
  });
42841
43266
 
@@ -42844,14 +43269,14 @@ function getAllTicks() {
42844
43269
  return Array.from(ticks.values());
42845
43270
  }
42846
43271
  function subscribeToTickChanges(listener) {
42847
- listeners2.add(listener);
42848
- return () => listeners2.delete(listener);
43272
+ listeners3.add(listener);
43273
+ return () => listeners3.delete(listener);
42849
43274
  }
42850
- var ticks, listeners2;
43275
+ var ticks, listeners3;
42851
43276
  var init_tickRegistry = __esm({
42852
43277
  "lib/tickRegistry.ts"() {
42853
43278
  ticks = /* @__PURE__ */ new Map();
42854
- listeners2 = /* @__PURE__ */ new Set();
43279
+ listeners3 = /* @__PURE__ */ new Set();
42855
43280
  }
42856
43281
  });
42857
43282
 
@@ -42860,14 +43285,14 @@ function getGuardHistory() {
42860
43285
  return [...guardHistory];
42861
43286
  }
42862
43287
  function subscribeToGuardChanges(listener) {
42863
- listeners3.add(listener);
42864
- return () => listeners3.delete(listener);
43288
+ listeners4.add(listener);
43289
+ return () => listeners4.delete(listener);
42865
43290
  }
42866
- var guardHistory, listeners3;
43291
+ var guardHistory, listeners4;
42867
43292
  var init_guardRegistry = __esm({
42868
43293
  "lib/guardRegistry.ts"() {
42869
43294
  guardHistory = [];
42870
- listeners3 = /* @__PURE__ */ new Set();
43295
+ listeners4 = /* @__PURE__ */ new Set();
42871
43296
  }
42872
43297
  });
42873
43298
 
@@ -42898,18 +43323,18 @@ function getDebugEvents() {
42898
43323
  return [...events];
42899
43324
  }
42900
43325
  function subscribeToDebugEvents(listener) {
42901
- listeners4.add(listener);
42902
- return () => listeners4.delete(listener);
43326
+ listeners5.add(listener);
43327
+ return () => listeners5.delete(listener);
42903
43328
  }
42904
- var events, listeners4;
43329
+ var events, listeners5;
42905
43330
  var init_debugRegistry = __esm({
42906
43331
  "lib/debugRegistry.ts"() {
42907
43332
  events = [];
42908
- listeners4 = /* @__PURE__ */ new Set();
43333
+ listeners5 = /* @__PURE__ */ new Set();
42909
43334
  }
42910
43335
  });
42911
43336
  function useDebugData() {
42912
- const [data, setData] = React96.useState(() => ({
43337
+ const [data, setData] = React98.useState(() => ({
42913
43338
  traits: [],
42914
43339
  ticks: [],
42915
43340
  guards: [],
@@ -42923,7 +43348,7 @@ function useDebugData() {
42923
43348
  },
42924
43349
  lastUpdate: Date.now()
42925
43350
  }));
42926
- React96.useEffect(() => {
43351
+ React98.useEffect(() => {
42927
43352
  const updateData = () => {
42928
43353
  setData({
42929
43354
  traits: getAllTraits(),
@@ -42982,14 +43407,14 @@ function isDebugEnabled2() {
42982
43407
  return localStorage.getItem(DEBUG_STORAGE_KEY) === "true";
42983
43408
  }
42984
43409
  function onDebugToggle(listener) {
42985
- listeners5.add(listener);
42986
- return () => listeners5.delete(listener);
43410
+ listeners6.add(listener);
43411
+ return () => listeners6.delete(listener);
42987
43412
  }
42988
- var DEBUG_STORAGE_KEY, listeners5;
43413
+ var DEBUG_STORAGE_KEY, listeners6;
42989
43414
  var init_debugUtils = __esm({
42990
43415
  "lib/debugUtils.ts"() {
42991
43416
  DEBUG_STORAGE_KEY = "orbital-debug";
42992
- listeners5 = /* @__PURE__ */ new Set();
43417
+ listeners6 = /* @__PURE__ */ new Set();
42993
43418
  }
42994
43419
  });
42995
43420
  function layoutGraph(states, transitions, initialState, width, height) {
@@ -43032,12 +43457,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
43032
43457
  return positions;
43033
43458
  }
43034
43459
  function WalkMinimap() {
43035
- const [walkStep, setWalkStep] = React96.useState(null);
43036
- const [traits2, setTraits] = React96.useState([]);
43037
- const [coveredEdges, setCoveredEdges] = React96.useState([]);
43038
- const [completedTraits, setCompletedTraits] = React96.useState(/* @__PURE__ */ new Set());
43039
- const prevTraitRef = React96.useRef(null);
43040
- React96.useEffect(() => {
43460
+ const [walkStep, setWalkStep] = React98.useState(null);
43461
+ const [traits2, setTraits] = React98.useState([]);
43462
+ const [coveredEdges, setCoveredEdges] = React98.useState([]);
43463
+ const [completedTraits, setCompletedTraits] = React98.useState(/* @__PURE__ */ new Set());
43464
+ const prevTraitRef = React98.useRef(null);
43465
+ React98.useEffect(() => {
43041
43466
  const interval = setInterval(() => {
43042
43467
  const w = window;
43043
43468
  const step = w.__orbitalWalkStep;
@@ -43484,15 +43909,15 @@ var init_EntitiesTab = __esm({
43484
43909
  }
43485
43910
  });
43486
43911
  function EventFlowTab({ events: events2 }) {
43487
- const [filter, setFilter] = React96.useState("all");
43488
- const containerRef = React96.useRef(null);
43489
- const [autoScroll, setAutoScroll] = React96.useState(true);
43490
- React96.useEffect(() => {
43912
+ const [filter, setFilter] = React98.useState("all");
43913
+ const containerRef = React98.useRef(null);
43914
+ const [autoScroll, setAutoScroll] = React98.useState(true);
43915
+ React98.useEffect(() => {
43491
43916
  if (autoScroll && containerRef.current) {
43492
43917
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
43493
43918
  }
43494
43919
  }, [events2.length, autoScroll]);
43495
- const filteredEvents = React96.useMemo(() => {
43920
+ const filteredEvents = React98.useMemo(() => {
43496
43921
  if (filter === "all") return events2;
43497
43922
  return events2.filter((e) => e.type === filter);
43498
43923
  }, [events2, filter]);
@@ -43611,7 +44036,7 @@ var init_EventFlowTab = __esm({
43611
44036
  }
43612
44037
  });
43613
44038
  function GuardsPanel({ guards }) {
43614
- const [filter, setFilter] = React96.useState("all");
44039
+ const [filter, setFilter] = React98.useState("all");
43615
44040
  if (guards.length === 0) {
43616
44041
  return /* @__PURE__ */ jsx(
43617
44042
  EmptyState,
@@ -43624,7 +44049,7 @@ function GuardsPanel({ guards }) {
43624
44049
  }
43625
44050
  const passedCount = guards.filter((g) => g.result).length;
43626
44051
  const failedCount = guards.length - passedCount;
43627
- const filteredGuards = React96.useMemo(() => {
44052
+ const filteredGuards = React98.useMemo(() => {
43628
44053
  if (filter === "all") return guards;
43629
44054
  if (filter === "passed") return guards.filter((g) => g.result);
43630
44055
  return guards.filter((g) => !g.result);
@@ -43785,10 +44210,10 @@ function EffectBadge({ effect }) {
43785
44210
  ] });
43786
44211
  }
43787
44212
  function TransitionTimeline({ transitions }) {
43788
- const containerRef = React96.useRef(null);
43789
- const [autoScroll, setAutoScroll] = React96.useState(true);
43790
- const [expandedId, setExpandedId] = React96.useState(null);
43791
- React96.useEffect(() => {
44213
+ const containerRef = React98.useRef(null);
44214
+ const [autoScroll, setAutoScroll] = React98.useState(true);
44215
+ const [expandedId, setExpandedId] = React98.useState(null);
44216
+ React98.useEffect(() => {
43792
44217
  if (autoScroll && containerRef.current) {
43793
44218
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
43794
44219
  }
@@ -44074,9 +44499,9 @@ function getAllEvents(traits2) {
44074
44499
  }
44075
44500
  function EventDispatcherTab({ traits: traits2, schema }) {
44076
44501
  const eventBus = useEventBus();
44077
- const [log20, setLog] = React96.useState([]);
44078
- const prevStatesRef = React96.useRef(/* @__PURE__ */ new Map());
44079
- React96.useEffect(() => {
44502
+ const [log20, setLog] = React98.useState([]);
44503
+ const prevStatesRef = React98.useRef(/* @__PURE__ */ new Map());
44504
+ React98.useEffect(() => {
44080
44505
  for (const trait of traits2) {
44081
44506
  const prev = prevStatesRef.current.get(trait.id);
44082
44507
  if (prev && prev !== trait.currentState) {
@@ -44246,10 +44671,10 @@ function VerifyModePanel({
44246
44671
  serverCount,
44247
44672
  localCount
44248
44673
  }) {
44249
- const [expanded, setExpanded] = React96.useState(true);
44250
- const scrollRef = React96.useRef(null);
44251
- const prevCountRef = React96.useRef(0);
44252
- React96.useEffect(() => {
44674
+ const [expanded, setExpanded] = React98.useState(true);
44675
+ const scrollRef = React98.useRef(null);
44676
+ const prevCountRef = React98.useRef(0);
44677
+ React98.useEffect(() => {
44253
44678
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
44254
44679
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
44255
44680
  }
@@ -44315,10 +44740,10 @@ function RuntimeDebugger({
44315
44740
  defaultTab,
44316
44741
  schema
44317
44742
  }) {
44318
- const [isCollapsed, setIsCollapsed] = React96.useState(mode === "verify" ? true : defaultCollapsed);
44319
- const [isVisible, setIsVisible] = React96.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
44743
+ const [isCollapsed, setIsCollapsed] = React98.useState(mode === "verify" ? true : defaultCollapsed);
44744
+ const [isVisible, setIsVisible] = React98.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
44320
44745
  const debugData = useDebugData();
44321
- React96.useEffect(() => {
44746
+ React98.useEffect(() => {
44322
44747
  if (mode === "inline") return;
44323
44748
  return onDebugToggle((enabled) => {
44324
44749
  setIsVisible(enabled);
@@ -44327,7 +44752,7 @@ function RuntimeDebugger({
44327
44752
  }
44328
44753
  });
44329
44754
  }, [mode]);
44330
- React96.useEffect(() => {
44755
+ React98.useEffect(() => {
44331
44756
  if (mode === "inline") return;
44332
44757
  const handleKeyDown = (e) => {
44333
44758
  if (e.key === "`" && isVisible) {
@@ -44876,7 +45301,7 @@ function SequenceBar({
44876
45301
  onSlotRemove(index);
44877
45302
  }, [onSlotRemove, playing]);
44878
45303
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
44879
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
45304
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
44880
45305
  i > 0 && /* @__PURE__ */ jsx(
44881
45306
  Typography,
44882
45307
  {
@@ -46278,7 +46703,7 @@ var init_StatCard = __esm({
46278
46703
  const labelToUse = propLabel ?? propTitle;
46279
46704
  const eventBus = useEventBus();
46280
46705
  const { t } = useTranslate();
46281
- const handleActionClick = React96__default.useCallback(() => {
46706
+ const handleActionClick = React98__default.useCallback(() => {
46282
46707
  if (action?.event) {
46283
46708
  eventBus.emit(`UI:${action.event}`, {});
46284
46709
  }
@@ -46289,7 +46714,7 @@ var init_StatCard = __esm({
46289
46714
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
46290
46715
  const isLoading = externalLoading ?? false;
46291
46716
  const error = externalError;
46292
- const computeMetricValue = React96__default.useCallback(
46717
+ const computeMetricValue = React98__default.useCallback(
46293
46718
  (metric, items) => {
46294
46719
  if (metric.value !== void 0) {
46295
46720
  return metric.value;
@@ -46328,7 +46753,7 @@ var init_StatCard = __esm({
46328
46753
  },
46329
46754
  []
46330
46755
  );
46331
- const schemaStats = React96__default.useMemo(() => {
46756
+ const schemaStats = React98__default.useMemo(() => {
46332
46757
  if (!metrics || metrics.length === 0) return null;
46333
46758
  return metrics.map((metric) => ({
46334
46759
  label: metric.label,
@@ -46336,7 +46761,7 @@ var init_StatCard = __esm({
46336
46761
  format: metric.format
46337
46762
  }));
46338
46763
  }, [metrics, data, computeMetricValue]);
46339
- const calculatedTrend = React96__default.useMemo(() => {
46764
+ const calculatedTrend = React98__default.useMemo(() => {
46340
46765
  if (manualTrend !== void 0) return manualTrend;
46341
46766
  if (previousValue === void 0 || currentValue === void 0)
46342
46767
  return void 0;
@@ -47447,7 +47872,7 @@ var init_Timeline = __esm({
47447
47872
  }) => {
47448
47873
  const { t } = useTranslate();
47449
47874
  const entityData = Array.isArray(entity) ? entity : [];
47450
- const items = React96__default.useMemo(() => {
47875
+ const items = React98__default.useMemo(() => {
47451
47876
  if (propItems) return propItems;
47452
47877
  if (entityData.length === 0) return [];
47453
47878
  return entityData.map((record, idx) => {
@@ -47554,7 +47979,7 @@ var init_Timeline = __esm({
47554
47979
  }
47555
47980
  });
47556
47981
  function extractToastProps(children) {
47557
- if (!React96__default.isValidElement(children)) {
47982
+ if (!React98__default.isValidElement(children)) {
47558
47983
  if (typeof children === "string") {
47559
47984
  return { message: children };
47560
47985
  }
@@ -47592,7 +48017,7 @@ var init_ToastSlot = __esm({
47592
48017
  eventBus.emit("UI:CLOSE");
47593
48018
  };
47594
48019
  if (!isVisible) return null;
47595
- const isCustomContent = React96__default.isValidElement(children) && !message;
48020
+ const isCustomContent = React98__default.isValidElement(children) && !message;
47596
48021
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
47597
48022
  Toast,
47598
48023
  {
@@ -47861,7 +48286,7 @@ var init_WizardContainer = __esm({
47861
48286
  const isCompleted = index < currentStep;
47862
48287
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
47863
48288
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
47864
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
48289
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
47865
48290
  /* @__PURE__ */ jsx(
47866
48291
  Button,
47867
48292
  {
@@ -50054,7 +50479,7 @@ function UnitRenderer({
50054
50479
  onAnimationStateChange,
50055
50480
  animationSpeed = 1
50056
50481
  }) {
50057
- const handleUnitClick = React96__default.useCallback(
50482
+ const handleUnitClick = React98__default.useCallback(
50058
50483
  (unit) => {
50059
50484
  onUnitClick?.(unit);
50060
50485
  },
@@ -53267,7 +53692,7 @@ var init_Avl3DViewer = __esm({
53267
53692
  const handleTraitClick = useCallback((name) => {
53268
53693
  dispatch({ type: "ZOOM_INTO_TRAIT", trait: name, targetPosition: { x: 0, y: 0 } });
53269
53694
  }, []);
53270
- const [highlightedTrait, setHighlightedTrait] = React96__default.useState(null);
53695
+ const [highlightedTrait, setHighlightedTrait] = React98__default.useState(null);
53271
53696
  const handleTransitionClick = useCallback((index) => {
53272
53697
  dispatch({ type: "ZOOM_INTO_TRANSITION", transitionIndex: index, targetPosition: { x: 0, y: 0 } });
53273
53698
  }, []);
@@ -53354,7 +53779,7 @@ var init_Avl3DViewer = __esm({
53354
53779
  gap: "xs",
53355
53780
  align: "center",
53356
53781
  className: "absolute top-2 left-2 z-10 bg-surface/80 backdrop-blur rounded-md px-3 py-1.5",
53357
- children: breadcrumbs.map((crumb, i) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
53782
+ children: breadcrumbs.map((crumb, i) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
53358
53783
  i > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", className: "mx-1", children: "/" }),
53359
53784
  i < breadcrumbs.length - 1 ? /* @__PURE__ */ jsx(
53360
53785
  Box,
@@ -53732,12 +54157,12 @@ var init_three = __esm({
53732
54157
  }
53733
54158
  });
53734
54159
  function lazyThree(name, loader) {
53735
- const Lazy = React96__default.lazy(() => loader().then((m) => ({ default: m[name] })));
54160
+ const Lazy = React98__default.lazy(() => loader().then((m) => ({ default: m[name] })));
53736
54161
  function ThreeWrapper(props) {
53737
- return React96__default.createElement(
53738
- React96__default.Suspense,
54162
+ return React98__default.createElement(
54163
+ React98__default.Suspense,
53739
54164
  { fallback: null },
53740
- React96__default.createElement(Lazy, props)
54165
+ React98__default.createElement(Lazy, props)
53741
54166
  );
53742
54167
  }
53743
54168
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -54353,7 +54778,7 @@ function SuspenseConfigProvider({
54353
54778
  config,
54354
54779
  children
54355
54780
  }) {
54356
- return React96__default.createElement(
54781
+ return React98__default.createElement(
54357
54782
  SuspenseConfigContext.Provider,
54358
54783
  { value: config },
54359
54784
  children
@@ -54836,7 +55261,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
54836
55261
  const key = `${parentId}-${index}-trait:${traitName}`;
54837
55262
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
54838
55263
  }
54839
- return /* @__PURE__ */ jsx(React96__default.Fragment, { children: child }, `${parentId}-${index}`);
55264
+ return /* @__PURE__ */ jsx(React98__default.Fragment, { children: child }, `${parentId}-${index}`);
54840
55265
  }
54841
55266
  if (!child || typeof child !== "object") return null;
54842
55267
  const childId = `${parentId}-${index}`;
@@ -54873,14 +55298,14 @@ function isPatternConfig(value) {
54873
55298
  if (value === null || value === void 0) return false;
54874
55299
  if (typeof value !== "object") return false;
54875
55300
  if (Array.isArray(value)) return false;
54876
- if (React96__default.isValidElement(value)) return false;
55301
+ if (React98__default.isValidElement(value)) return false;
54877
55302
  if (value instanceof Date) return false;
54878
55303
  if (typeof value === "function") return false;
54879
55304
  const record = value;
54880
55305
  return "type" in record && typeof record.type === "string";
54881
55306
  }
54882
55307
  function isPlainConfigObject(value) {
54883
- if (React96__default.isValidElement(value)) return false;
55308
+ if (React98__default.isValidElement(value)) return false;
54884
55309
  if (value instanceof Date) return false;
54885
55310
  const proto = Object.getPrototypeOf(value);
54886
55311
  return proto === Object.prototype || proto === null;
@@ -55336,7 +55761,7 @@ var AvlTransition = ({
55336
55761
  opacity = 1,
55337
55762
  className
55338
55763
  }) => {
55339
- const ids = React96__default.useMemo(() => {
55764
+ const ids = React98__default.useMemo(() => {
55340
55765
  avlTransitionId += 1;
55341
55766
  return { arrow: `avl-tr-${avlTransitionId}-arrow` };
55342
55767
  }, []);
@@ -55897,7 +56322,7 @@ var AvlStateMachine = ({
55897
56322
  color = "var(--color-primary)",
55898
56323
  animated = false
55899
56324
  }) => {
55900
- const ids = React96__default.useMemo(() => {
56325
+ const ids = React98__default.useMemo(() => {
55901
56326
  avlSmId += 1;
55902
56327
  const base = `avl-sm-${avlSmId}`;
55903
56328
  return { glow: `${base}-glow`, grad: `${base}-grad` };
@@ -56096,7 +56521,7 @@ var AvlOrbitalUnit = ({
56096
56521
  color = "var(--color-primary)",
56097
56522
  animated = false
56098
56523
  }) => {
56099
- const ids = React96__default.useMemo(() => {
56524
+ const ids = React98__default.useMemo(() => {
56100
56525
  avlOuId += 1;
56101
56526
  const base = `avl-ou-${avlOuId}`;
56102
56527
  return { glow: `${base}-glow`, grad: `${base}-grad` };
@@ -56192,7 +56617,7 @@ var AvlClosedCircuit = ({
56192
56617
  color = "var(--color-primary)",
56193
56618
  animated = false
56194
56619
  }) => {
56195
- const ids = React96__default.useMemo(() => {
56620
+ const ids = React98__default.useMemo(() => {
56196
56621
  avlCcId += 1;
56197
56622
  const base = `avl-cc-${avlCcId}`;
56198
56623
  return { glow: `${base}-glow`, grad: `${base}-grad`, arrow: `${base}-arrow` };
@@ -56347,7 +56772,7 @@ var AvlEmitListen = ({
56347
56772
  color = "var(--color-primary)",
56348
56773
  animated = false
56349
56774
  }) => {
56350
- const ids = React96__default.useMemo(() => {
56775
+ const ids = React98__default.useMemo(() => {
56351
56776
  avlElId += 1;
56352
56777
  const base = `avl-el-${avlElId}`;
56353
56778
  return { arrow: `${base}-arrow`, grad: `${base}-grad` };
@@ -56620,7 +57045,7 @@ function renderNode(node, color, glowId) {
56620
57045
  const baseR = node.type === "operator" ? 20 : 16;
56621
57046
  const r2 = Math.max(baseR, labelLen * 3.5 + 6);
56622
57047
  const nc = nodeColor(node.type, color);
56623
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
57048
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
56624
57049
  node.children.map((child, i) => {
56625
57050
  const childR = Math.max(
56626
57051
  child.type === "operator" ? 20 : 16,
@@ -56677,7 +57102,7 @@ var AvlExprTree = ({
56677
57102
  className,
56678
57103
  color = "var(--color-primary)"
56679
57104
  }) => {
56680
- const ids = React96__default.useMemo(() => {
57105
+ const ids = React98__default.useMemo(() => {
56681
57106
  avlEtId += 1;
56682
57107
  return { glow: `avl-et-${avlEtId}-glow` };
56683
57108
  }, []);
@@ -57240,7 +57665,7 @@ var SystemNode = ({ data }) => {
57240
57665
  stateChain.length > 0 && /* @__PURE__ */ jsx("svg", { width: stateChain.length * 14 + 2, height: 10, viewBox: `0 0 ${stateChain.length * 14 + 2} 10`, children: stateChain.map((s, i) => {
57241
57666
  const tc = transitionCounts[s.name] ?? 0;
57242
57667
  const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
57243
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
57668
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
57244
57669
  /* @__PURE__ */ jsx(AvlState, { x: i * 14 + 1, y: 1, width: 10, height: 8, name: "", role, isInitial: s.isInitial, isTerminal: s.isTerminal }),
57245
57670
  i < stateChain.length - 1 && /* @__PURE__ */ jsx("line", { x1: i * 14 + 12, y1: 5, x2: i * 14 + 15, y2: 5, stroke: "var(--color-border)", strokeWidth: 0.5 })
57246
57671
  ] }, s.name);
@@ -57749,20 +58174,20 @@ function isBackwardTransition(from, to, states) {
57749
58174
  function extractTraitWires(orbitals, scope) {
57750
58175
  const wires = [];
57751
58176
  const emitters = [];
57752
- const listeners6 = [];
58177
+ const listeners7 = [];
57753
58178
  for (const orb of orbitals) {
57754
58179
  for (const trait of getTraits2(orb)) {
57755
58180
  for (const e of getEmits2(trait)) {
57756
58181
  emitters.push({ orbital: orb.name, trait: trait.name, event: e });
57757
58182
  }
57758
58183
  for (const l of getListens2(trait)) {
57759
- listeners6.push({ orbital: orb.name, trait: trait.name, event: l });
58184
+ listeners7.push({ orbital: orb.name, trait: trait.name, event: l });
57760
58185
  }
57761
58186
  }
57762
58187
  }
57763
58188
  const seen = /* @__PURE__ */ new Set();
57764
58189
  for (const em of emitters) {
57765
- for (const li of listeners6) {
58190
+ for (const li of listeners7) {
57766
58191
  if (em.event !== li.event) continue;
57767
58192
  if (scope === "cross-orbital" && em.orbital === li.orbital) continue;
57768
58193
  if (scope === "intra-orbital" && em.orbital !== li.orbital) continue;
@@ -58659,7 +59084,7 @@ function resolveLambdaBindings(body, argName, arg) {
58659
59084
  if (Array.isArray(body)) {
58660
59085
  return body.map((b) => resolveLambdaBindings(b, argName, arg));
58661
59086
  }
58662
- if (body !== null && typeof body === "object" && !React96__default.isValidElement(body) && !(body instanceof Date) && typeof body !== "function") {
59087
+ if (body !== null && typeof body === "object" && !React98__default.isValidElement(body) && !(body instanceof Date) && typeof body !== "function") {
58663
59088
  const out = {};
58664
59089
  for (const [k, v] of Object.entries(body)) {
58665
59090
  out[k] = resolveLambdaBindings(v, argName, arg);
@@ -58678,7 +59103,7 @@ function getSlotContentRenderer2() {
58678
59103
  function makeLambdaFn(argName, lambdaBody, callerKey) {
58679
59104
  return (item, index) => {
58680
59105
  const resolvedBody = resolveLambdaBindings(lambdaBody, argName, item);
58681
- if (resolvedBody === null || typeof resolvedBody !== "object" || Array.isArray(resolvedBody) || typeof resolvedBody === "function" || React96__default.isValidElement(resolvedBody) || resolvedBody instanceof Date) {
59106
+ if (resolvedBody === null || typeof resolvedBody !== "object" || Array.isArray(resolvedBody) || typeof resolvedBody === "function" || React98__default.isValidElement(resolvedBody) || resolvedBody instanceof Date) {
58682
59107
  return null;
58683
59108
  }
58684
59109
  const record = resolvedBody;
@@ -58696,7 +59121,7 @@ function makeLambdaFn(argName, lambdaBody, callerKey) {
58696
59121
  props: childProps,
58697
59122
  priority: 0
58698
59123
  };
58699
- return React96__default.createElement(SlotContentRenderer2, { content: childContent });
59124
+ return React98__default.createElement(SlotContentRenderer2, { content: childContent });
58700
59125
  };
58701
59126
  }
58702
59127
  function convertNode(node, callerKey) {
@@ -58715,7 +59140,7 @@ function convertNode(node, callerKey) {
58715
59140
  });
58716
59141
  return anyChanged ? mapped : node;
58717
59142
  }
58718
- if (typeof node === "object" && !React96__default.isValidElement(node) && !(node instanceof Date)) {
59143
+ if (typeof node === "object" && !React98__default.isValidElement(node) && !(node instanceof Date)) {
58719
59144
  return convertObjectProps(node);
58720
59145
  }
58721
59146
  return node;
@@ -59686,8 +60111,176 @@ function themeTokensToCssVars(tokens, mode = "light", darkVariant) {
59686
60111
  vars[`--shadow-${key}`] = value;
59687
60112
  }
59688
60113
  }
60114
+ const pickDensity = isDark && darkVariant?.density ? darkVariant.density : tokens.density;
60115
+ emitDensity(pickDensity, vars);
60116
+ const pickTypeScale = isDark && darkVariant?.typeScale ? darkVariant.typeScale : tokens.typeScale;
60117
+ emitTypeScale(pickTypeScale, vars);
60118
+ const pickMotion = isDark && darkVariant?.motion ? darkVariant.motion : tokens.motion;
60119
+ emitMotion(pickMotion, vars);
60120
+ const pickIconography = isDark && darkVariant?.iconography ? darkVariant.iconography : tokens.iconography;
60121
+ emitIconography(pickIconography, vars);
60122
+ const pickElevation = isDark && darkVariant?.elevation ? darkVariant.elevation : tokens.elevation;
60123
+ emitElevation(pickElevation, vars);
60124
+ const pickGeometry = isDark && darkVariant?.geometry ? darkVariant.geometry : tokens.geometry;
60125
+ emitGeometry(pickGeometry, vars);
59689
60126
  return vars;
59690
60127
  }
60128
+ function emitDensity(density, vars) {
60129
+ if (!density) return;
60130
+ if (density.spacing) {
60131
+ const s = density.spacing;
60132
+ const pairs2 = [
60133
+ ["0", s.space0],
60134
+ ["1", s.space1],
60135
+ ["2", s.space2],
60136
+ ["3", s.space3],
60137
+ ["4", s.space4],
60138
+ ["5", s.space5],
60139
+ ["6", s.space6],
60140
+ ["7", s.space7],
60141
+ ["8", s.space8],
60142
+ ["9", s.space9],
60143
+ ["10", s.space10],
60144
+ ["11", s.space11],
60145
+ ["12", s.space12]
60146
+ ];
60147
+ for (const [k, v] of pairs2) {
60148
+ if (v !== void 0) vars[`--space-${k}`] = v;
60149
+ }
60150
+ }
60151
+ const pairs = [
60152
+ ["button-height-sm", density.buttonHeightSm],
60153
+ ["button-height-md", density.buttonHeightMd],
60154
+ ["button-height-lg", density.buttonHeightLg],
60155
+ ["input-height-sm", density.inputHeightSm],
60156
+ ["input-height-md", density.inputHeightMd],
60157
+ ["input-height-lg", density.inputHeightLg],
60158
+ ["row-height-compact", density.rowHeightCompact],
60159
+ ["row-height-normal", density.rowHeightNormal],
60160
+ ["row-height-spacious", density.rowHeightSpacious],
60161
+ ["card-padding-sm", density.cardPaddingSm],
60162
+ ["card-padding-md", density.cardPaddingMd],
60163
+ ["card-padding-lg", density.cardPaddingLg],
60164
+ ["dialog-padding", density.dialogPadding],
60165
+ ["section-gap", density.sectionGap]
60166
+ ];
60167
+ for (const [k, v] of pairs) {
60168
+ if (v !== void 0) vars[`--${k}`] = v;
60169
+ }
60170
+ }
60171
+ function typeSizeKeyStr(k) {
60172
+ return k;
60173
+ }
60174
+ function typeWeightStr(w) {
60175
+ return w;
60176
+ }
60177
+ function emitTypeIntent(name, intent, vars) {
60178
+ const sizeKey = typeSizeKeyStr(intent.size);
60179
+ const weight = typeWeightStr(intent.weight);
60180
+ vars[`--intent-${name}-size`] = `var(--text-${sizeKey})`;
60181
+ vars[`--intent-${name}-weight`] = `var(--font-weight-${weight})`;
60182
+ vars[`--intent-${name}-leading`] = `var(--leading-${sizeKey})`;
60183
+ }
60184
+ function emitTypeScale(ts, vars) {
60185
+ if (!ts) return;
60186
+ if (ts.displayFamily !== void 0) vars["--font-family-display"] = ts.displayFamily;
60187
+ if (ts.bodyFamily !== void 0) vars["--font-family-body"] = ts.bodyFamily;
60188
+ if (ts.monoFamily !== void 0) vars["--font-family-mono"] = ts.monoFamily;
60189
+ if (ts.scale) {
60190
+ const s = ts.scale;
60191
+ const pairs = [
60192
+ ["xs", s.xs],
60193
+ ["sm", s.sm],
60194
+ ["base", s.base],
60195
+ ["lg", s.lg],
60196
+ ["xl", s.xl],
60197
+ ["2xl", s["2xl"]],
60198
+ ["3xl", s["3xl"]],
60199
+ ["4xl", s["4xl"]],
60200
+ ["display-1", s["display-1"]],
60201
+ ["display-2", s["display-2"]]
60202
+ ];
60203
+ for (const [k, entry] of pairs) {
60204
+ if (entry !== void 0) {
60205
+ vars[`--text-${k}`] = entry.size;
60206
+ vars[`--leading-${k}`] = entry.lineHeight;
60207
+ }
60208
+ }
60209
+ }
60210
+ if (ts.intents) {
60211
+ const i = ts.intents;
60212
+ if (i.headingMajor) emitTypeIntent("heading-major", i.headingMajor, vars);
60213
+ if (i.headingMinor) emitTypeIntent("heading-minor", i.headingMinor, vars);
60214
+ if (i.bodyEmphasis) emitTypeIntent("body-emphasis", i.bodyEmphasis, vars);
60215
+ if (i.bodyDefault) emitTypeIntent("body-default", i.bodyDefault, vars);
60216
+ if (i.bodyQuiet) emitTypeIntent("body-quiet", i.bodyQuiet, vars);
60217
+ if (i.caption) emitTypeIntent("caption", i.caption, vars);
60218
+ if (i.numeric) emitTypeIntent("numeric", i.numeric, vars);
60219
+ }
60220
+ }
60221
+ function emitMotionIntent(name, intent, vars) {
60222
+ vars[`--intent-${name}-duration`] = `var(--duration-${intent.duration})`;
60223
+ vars[`--intent-${name}-easing`] = `var(--easing-${intent.easing})`;
60224
+ }
60225
+ function emitMotion(m, vars) {
60226
+ if (!m) return;
60227
+ if (m.durations) {
60228
+ const d = m.durations;
60229
+ const pairs = [
60230
+ ["instant", d.instant],
60231
+ ["fast", d.fast],
60232
+ ["normal", d.normal],
60233
+ ["slow", d.slow],
60234
+ ["dramatic", d.dramatic]
60235
+ ];
60236
+ for (const [k, v] of pairs) {
60237
+ if (v !== void 0) vars[`--duration-${k}`] = v;
60238
+ }
60239
+ }
60240
+ if (m.easings) {
60241
+ const e = m.easings;
60242
+ const pairs = [
60243
+ ["linear", e.linear],
60244
+ ["standard", e.standard],
60245
+ ["emphasized", e.emphasized],
60246
+ ["spring", e.spring]
60247
+ ];
60248
+ for (const [k, v] of pairs) {
60249
+ if (v !== void 0) vars[`--easing-${k}`] = v;
60250
+ }
60251
+ }
60252
+ if (m.intents) {
60253
+ const i = m.intents;
60254
+ if (i.enter) emitMotionIntent("enter", i.enter, vars);
60255
+ if (i.exit) emitMotionIntent("exit", i.exit, vars);
60256
+ if (i.hover) emitMotionIntent("hover", i.hover, vars);
60257
+ if (i.press) emitMotionIntent("press", i.press, vars);
60258
+ if (i.expand) emitMotionIntent("expand", i.expand, vars);
60259
+ if (i.transition) emitMotionIntent("transition", i.transition, vars);
60260
+ }
60261
+ }
60262
+ function emitIconography(i, vars) {
60263
+ if (!i) return;
60264
+ if (i.family !== void 0) vars["--icon-family"] = i.family;
60265
+ if (i.strokeWidth !== void 0) vars["--icon-stroke-width"] = i.strokeWidth;
60266
+ if (i.defaultSize !== void 0) vars["--icon-default-size"] = i.defaultSize;
60267
+ }
60268
+ function emitElevation(e, vars) {
60269
+ if (!e) return;
60270
+ if (e.cardElevation !== void 0) vars["--elevation-card"] = e.cardElevation;
60271
+ if (e.popoverElevation !== void 0) vars["--elevation-popover"] = e.popoverElevation;
60272
+ if (e.dialogElevation !== void 0) vars["--elevation-dialog"] = e.dialogElevation;
60273
+ if (e.toastElevation !== void 0) vars["--elevation-toast"] = e.toastElevation;
60274
+ }
60275
+ function emitGeometry(g, vars) {
60276
+ if (!g) return;
60277
+ if (g.radiusContainer !== void 0) vars["--radius-container"] = g.radiusContainer;
60278
+ if (g.radiusInteractive !== void 0) vars["--radius-interactive"] = g.radiusInteractive;
60279
+ if (g.radiusPill !== void 0) vars["--radius-pill"] = g.radiusPill;
60280
+ if (g.borderHairline !== void 0) vars["--border-hairline"] = g.borderHairline;
60281
+ if (g.borderStandard !== void 0) vars["--border-standard"] = g.borderStandard;
60282
+ if (g.borderHeavy !== void 0) vars["--border-heavy"] = g.borderHeavy;
60283
+ }
59691
60284
  function resolveThemeForRuntime(theme) {
59692
60285
  if (theme === void 0) return void 0;
59693
60286
  if (typeof theme === "string") return void 0;
@@ -59789,7 +60382,7 @@ function generateEntityRow(entity, idx) {
59789
60382
  return row;
59790
60383
  }
59791
60384
  function generateFieldValue(entityName, field, idx) {
59792
- if (field.values && field.values.length > 0) {
60385
+ if ("values" in field && field.values && field.values.length > 0) {
59793
60386
  return field.values[(idx - 1) % field.values.length];
59794
60387
  }
59795
60388
  const fieldName = field.name ?? "";
@@ -60407,7 +61000,7 @@ function useCanvasDraggable({
60407
61000
  payload,
60408
61001
  disabled
60409
61002
  }) {
60410
- const { setNodeRef, attributes, listeners: listeners6, isDragging, transform } = useDraggable({
61003
+ const { setNodeRef, attributes, listeners: listeners7, isDragging, transform } = useDraggable({
60411
61004
  id,
60412
61005
  data: { payload },
60413
61006
  disabled
@@ -60418,7 +61011,7 @@ function useCanvasDraggable({
60418
61011
  opacity: isDragging ? 0.5 : 1,
60419
61012
  touchAction: "none"
60420
61013
  };
60421
- return { setNodeRef, attributes, listeners: listeners6, isDragging, style };
61014
+ return { setNodeRef, attributes, listeners: listeners7, isDragging, style };
60422
61015
  }
60423
61016
  var DEFAULT_ACCEPTS = ["pattern", "behavior"];
60424
61017
  function useCanvasDroppable({
@@ -60474,8 +61067,8 @@ function CanvasDndProvider({
60474
61067
  }) {
60475
61068
  const eventBus = useEventBus();
60476
61069
  const sensors = useAlmadarDndSensors(false);
60477
- const [activePayload, setActivePayload] = React96__default.useState(null);
60478
- const handleDragStart = React96__default.useCallback((e) => {
61070
+ const [activePayload, setActivePayload] = React98__default.useState(null);
61071
+ const handleDragStart = React98__default.useCallback((e) => {
60479
61072
  const data = e.active.data.current;
60480
61073
  const payload = data?.payload;
60481
61074
  if (payload) {
@@ -60486,7 +61079,7 @@ function CanvasDndProvider({
60486
61079
  log18.warn("dragStart:missing-payload", { id: e.active.id });
60487
61080
  }
60488
61081
  }, [eventBus]);
60489
- const handleDragEnd = React96__default.useCallback((e) => {
61082
+ const handleDragEnd = React98__default.useCallback((e) => {
60490
61083
  setActivePayload(null);
60491
61084
  const activeData = e.active.data.current;
60492
61085
  const payload = activeData?.payload;
@@ -60515,7 +61108,7 @@ function CanvasDndProvider({
60515
61108
  const suppressed = onDrop ? onDrop(drop) === true : false;
60516
61109
  if (!suppressed) defaultEmit(eventBus, drop);
60517
61110
  }, [eventBus, onDrop]);
60518
- const handleDragCancel = React96__default.useCallback(() => {
61111
+ const handleDragCancel = React98__default.useCallback(() => {
60519
61112
  setActivePayload(null);
60520
61113
  log18.info("dragCancel");
60521
61114
  }, []);
@@ -61159,7 +61752,7 @@ var OrbPreviewNodeInner = (props) => {
61159
61752
  }
61160
61753
  );
61161
61754
  };
61162
- var OrbPreviewNode = React96__default.memo(OrbPreviewNodeInner);
61755
+ var OrbPreviewNode = React98__default.memo(OrbPreviewNodeInner);
61163
61756
  OrbPreviewNode.displayName = "OrbPreviewNode";
61164
61757
  orbPreviewLog.debug("export-resolved", () => ({
61165
61758
  type: typeof OrbPreviewNode,
@@ -61264,7 +61857,7 @@ var EventFlowEdgeInner = (props) => {
61264
61857
  ) })
61265
61858
  ] });
61266
61859
  };
61267
- var EventFlowEdge = React96__default.memo(EventFlowEdgeInner);
61860
+ var EventFlowEdge = React98__default.memo(EventFlowEdgeInner);
61268
61861
  EventFlowEdge.displayName = "EventFlowEdge";
61269
61862
 
61270
61863
  // components/molecules/avl/BehaviorComposeNode.tsx
@@ -61411,7 +62004,7 @@ var BehaviorComposeNodeInner = (props) => {
61411
62004
  }
61412
62005
  );
61413
62006
  };
61414
- var BehaviorComposeNode = React96__default.memo(BehaviorComposeNodeInner);
62007
+ var BehaviorComposeNode = React98__default.memo(BehaviorComposeNodeInner);
61415
62008
  BehaviorComposeNode.displayName = "BehaviorComposeNode";
61416
62009
 
61417
62010
  // components/molecules/avl/avl-behavior-compose-converter.ts
@@ -62430,7 +63023,7 @@ var TraitCardNodeInner = (props) => {
62430
63023
  }
62431
63024
  );
62432
63025
  };
62433
- var TraitCardNode = React96__default.memo(TraitCardNodeInner);
63026
+ var TraitCardNode = React98__default.memo(TraitCardNodeInner);
62434
63027
  TraitCardNode.displayName = "TraitCardNode";
62435
63028
 
62436
63029
  // components/organisms/avl/FlowCanvas.tsx
@@ -62502,7 +63095,7 @@ function FlowCanvasInner({
62502
63095
  initialOrbital
62503
63096
  );
62504
63097
  const [expandedBehaviorAlias, setExpandedBehaviorAlias] = useState(void 0);
62505
- const screenSizeUserOverrideRef = React96__default.useRef(false);
63098
+ const screenSizeUserOverrideRef = React98__default.useRef(false);
62506
63099
  const [screenSize, setScreenSize] = useState(
62507
63100
  () => typeof window === "undefined" ? "laptop" : detectScreenSize(window.innerWidth)
62508
63101
  );
@@ -62886,7 +63479,7 @@ var ZoomBreadcrumb = ({
62886
63479
  if (eventName && band === "detail") {
62887
63480
  segments.push({ icon: "\u26A1", label: eventName });
62888
63481
  }
62889
- return /* @__PURE__ */ jsx("div", { className: "absolute top-2 left-2 z-10 flex items-center gap-1 px-2 py-1 rounded-md bg-card/90 border border-border text-[11px] text-muted-foreground backdrop-blur-sm", children: segments.map((seg, i) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
63482
+ return /* @__PURE__ */ jsx("div", { className: "absolute top-2 left-2 z-10 flex items-center gap-1 px-2 py-1 rounded-md bg-card/90 border border-border text-[11px] text-muted-foreground backdrop-blur-sm", children: segments.map((seg, i) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
62890
63483
  i > 0 && /* @__PURE__ */ jsx("span", { className: "opacity-40", children: ">" }),
62891
63484
  /* @__PURE__ */ jsx("span", { className: "opacity-60", children: seg.icon }),
62892
63485
  /* @__PURE__ */ jsx("span", { children: seg.label })
@@ -63094,7 +63687,7 @@ var EventWireOverlay = ({
63094
63687
  containerW,
63095
63688
  containerH
63096
63689
  }) => {
63097
- const ids = React96__default.useMemo(() => {
63690
+ const ids = React98__default.useMemo(() => {
63098
63691
  avlOczWireId += 1;
63099
63692
  return { arrow: `avl-ocz-wire-${avlOczWireId}-arrow` };
63100
63693
  }, []);
@@ -63460,7 +64053,7 @@ var AvlOrbitalsCosmicZoom = ({
63460
64053
  borderRadius: 6,
63461
64054
  border: `1px solid ${color}`
63462
64055
  },
63463
- children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", children: breadcrumbs.map((crumb, i) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
64056
+ children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", children: breadcrumbs.map((crumb, i) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
63464
64057
  i > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", style: { opacity: 0.5, color }, children: "/" }),
63465
64058
  i < breadcrumbs.length - 1 ? /* @__PURE__ */ jsx(
63466
64059
  Box,