@almadar/ui 5.0.0 → 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.
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
  {
@@ -5697,12 +5700,378 @@ var init_UISlotContext = __esm({
5697
5700
  UISlotContext = createContext(null);
5698
5701
  }
5699
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
+ }
5700
5747
  function kebabToPascal(name) {
5701
5748
  return name.split("-").map((part) => {
5702
5749
  if (/^\d+$/.test(part)) return part;
5703
5750
  return part.charAt(0).toUpperCase() + part.slice(1);
5704
5751
  }).join("");
5705
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
+ }
5706
6075
  function resolveIcon(name) {
5707
6076
  const cached = resolvedCache.get(name);
5708
6077
  if (cached) return cached;
@@ -5712,28 +6081,30 @@ function resolveIcon(name) {
5712
6081
  }
5713
6082
  function doResolve(name) {
5714
6083
  if (iconAliases[name]) return iconAliases[name];
5715
- const pascalName = kebabToPascal(name);
5716
- const directLookup = LucideIcons[pascalName];
6084
+ const pascalName = kebabToPascal2(name);
6085
+ const directLookup = LucideIcons2[pascalName];
5717
6086
  if (directLookup && typeof directLookup === "object") return directLookup;
5718
- const asIs = LucideIcons[name];
6087
+ const asIs = LucideIcons2[name];
5719
6088
  if (asIs && typeof asIs === "object") return asIs;
5720
- return LucideIcons.HelpCircle;
6089
+ return LucideIcons2.HelpCircle;
5721
6090
  }
5722
6091
  var iconAliases, resolvedCache, sizeClasses, animationClasses, Icon;
5723
6092
  var init_Icon = __esm({
5724
6093
  "components/atoms/Icon.tsx"() {
6094
+ "use client";
5725
6095
  init_cn();
6096
+ init_iconFamily();
5726
6097
  iconAliases = {
5727
- "close": LucideIcons.X,
5728
- "trash": LucideIcons.Trash2,
5729
- "loader": LucideIcons.Loader2,
5730
- "stop": LucideIcons.Square,
5731
- "volume": LucideIcons.Volume2,
5732
- "volume-off": LucideIcons.VolumeX,
5733
- "refresh": LucideIcons.RefreshCw,
5734
- "share": LucideIcons.Share2,
5735
- "sort-asc": LucideIcons.ArrowUpNarrowWide,
5736
- "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
5737
6108
  };
5738
6109
  resolvedCache = /* @__PURE__ */ new Map();
5739
6110
  sizeClasses = {
@@ -5758,22 +6129,50 @@ var init_Icon = __esm({
5758
6129
  strokeWidth,
5759
6130
  style
5760
6131
  }) => {
5761
- 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]);
5762
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;
5763
6170
  return /* @__PURE__ */ jsx(
5764
- IconComponent,
6171
+ Fallback,
5765
6172
  {
5766
- className: cn(
5767
- sizeClasses[size],
5768
- animationClasses[animation],
5769
- color ? color : "text-current",
5770
- className
5771
- ),
6173
+ className: composedClassName,
5772
6174
  strokeWidth: effectiveStrokeWidth,
5773
- style: {
5774
- ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
5775
- ...style
5776
- }
6175
+ style: inlineStyle
5777
6176
  }
5778
6177
  );
5779
6178
  };
@@ -5783,14 +6182,13 @@ var init_Icon = __esm({
5783
6182
  function resolveIconProp(value, sizeClass) {
5784
6183
  if (!value) return null;
5785
6184
  if (typeof value === "string") {
5786
- const Resolved = resolveIcon(value);
5787
- return Resolved ? /* @__PURE__ */ jsx(Resolved, { className: sizeClass }) : null;
6185
+ return /* @__PURE__ */ jsx(Icon, { name: value, className: sizeClass });
5788
6186
  }
5789
6187
  if (typeof value === "function") {
5790
6188
  const IconComp = value;
5791
6189
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
5792
6190
  }
5793
- if (React96__default.isValidElement(value)) {
6191
+ if (React98__default.isValidElement(value)) {
5794
6192
  return value;
5795
6193
  }
5796
6194
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -5866,7 +6264,7 @@ var init_Button = __esm({
5866
6264
  md: "h-icon-default w-icon-default",
5867
6265
  lg: "h-5 w-5"
5868
6266
  };
5869
- Button = React96__default.forwardRef(
6267
+ Button = React98__default.forwardRef(
5870
6268
  ({
5871
6269
  className,
5872
6270
  variant = "primary",
@@ -5931,7 +6329,7 @@ var Dialog;
5931
6329
  var init_Dialog = __esm({
5932
6330
  "components/atoms/Dialog.tsx"() {
5933
6331
  init_cn();
5934
- Dialog = React96__default.forwardRef(
6332
+ Dialog = React98__default.forwardRef(
5935
6333
  ({
5936
6334
  role = "dialog",
5937
6335
  "aria-modal": ariaModal = true,
@@ -6165,7 +6563,7 @@ var init_Modal = __esm({
6165
6563
  {
6166
6564
  variant: "ghost",
6167
6565
  size: "sm",
6168
- icon: X,
6566
+ icon: "x",
6169
6567
  onClick: handleClose,
6170
6568
  "data-event": "CLOSE",
6171
6569
  "aria-label": "Close modal"
@@ -6322,7 +6720,7 @@ var init_Drawer = __esm({
6322
6720
  {
6323
6721
  variant: "ghost",
6324
6722
  size: "sm",
6325
- icon: X,
6723
+ icon: "x",
6326
6724
  onClick: handleClose,
6327
6725
  "aria-label": "Close drawer",
6328
6726
  className: cn(!title && "ml-auto")
@@ -6416,13 +6814,10 @@ var init_Badge = __esm({
6416
6814
  md: "px-2.5 py-1 text-sm",
6417
6815
  lg: "px-3 py-1.5 text-base"
6418
6816
  };
6419
- Badge = React96__default.forwardRef(
6817
+ Badge = React98__default.forwardRef(
6420
6818
  ({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
6421
6819
  const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
6422
- const resolvedIcon = typeof icon === "string" ? (() => {
6423
- const I = resolveIcon(icon);
6424
- return I ? /* @__PURE__ */ jsx(I, { className: iconSizes3[size] }) : null;
6425
- })() : icon;
6820
+ const resolvedIcon = typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: iconSizes3[size] }) : icon;
6426
6821
  return /* @__PURE__ */ jsxs(
6427
6822
  "span",
6428
6823
  {
@@ -6482,10 +6877,10 @@ var init_Toast = __esm({
6482
6877
  warning: "bg-card border-[length:var(--border-width)] border-warning"
6483
6878
  };
6484
6879
  iconMap = {
6485
- success: CheckCircle,
6486
- error: AlertCircle,
6487
- info: Info,
6488
- warning: AlertTriangle
6880
+ success: "check-circle",
6881
+ error: "alert-circle",
6882
+ info: "info",
6883
+ warning: "alert-triangle"
6489
6884
  };
6490
6885
  iconColors = {
6491
6886
  success: "text-success",
@@ -6542,7 +6937,7 @@ var init_Toast = __esm({
6542
6937
  /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
6543
6938
  Icon,
6544
6939
  {
6545
- icon: iconMap[variant],
6940
+ name: iconMap[variant],
6546
6941
  size: "md",
6547
6942
  className: iconColors[variant]
6548
6943
  }
@@ -6559,7 +6954,7 @@ var init_Toast = __esm({
6559
6954
  {
6560
6955
  variant: "ghost",
6561
6956
  size: "sm",
6562
- icon: X,
6957
+ icon: "x",
6563
6958
  onClick: handleDismiss,
6564
6959
  "aria-label": "Dismiss toast",
6565
6960
  className: "flex-shrink-0"
@@ -6730,7 +7125,7 @@ var init_SvgFlow = __esm({
6730
7125
  opacity = 1,
6731
7126
  className
6732
7127
  }) => {
6733
- const markerId = React96__default.useMemo(() => {
7128
+ const markerId = React98__default.useMemo(() => {
6734
7129
  flowIdCounter += 1;
6735
7130
  return `almadar-flow-arrow-${flowIdCounter}`;
6736
7131
  }, []);
@@ -7273,7 +7668,7 @@ var init_SvgRing = __esm({
7273
7668
  className,
7274
7669
  label
7275
7670
  }) => {
7276
- const gradientId = React96__default.useMemo(() => {
7671
+ const gradientId = React98__default.useMemo(() => {
7277
7672
  ringIdCounter += 1;
7278
7673
  return `almadar-ring-glow-${ringIdCounter}`;
7279
7674
  }, []);
@@ -7434,7 +7829,8 @@ var Input;
7434
7829
  var init_Input = __esm({
7435
7830
  "components/atoms/Input.tsx"() {
7436
7831
  init_cn();
7437
- Input = React96__default.forwardRef(
7832
+ init_Icon();
7833
+ Input = React98__default.forwardRef(
7438
7834
  ({
7439
7835
  className,
7440
7836
  inputType,
@@ -7484,7 +7880,7 @@ var init_Input = __esm({
7484
7880
  ]
7485
7881
  }
7486
7882
  ),
7487
- /* @__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-icon-default w-icon-default" }) })
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" }) })
7488
7884
  ] });
7489
7885
  }
7490
7886
  if (type === "textarea") {
@@ -7538,7 +7934,7 @@ var init_Input = __esm({
7538
7934
  type: "button",
7539
7935
  onClick: onClear,
7540
7936
  className: "absolute inset-y-0 right-0 pr-3 flex items-center text-muted-foreground hover:text-foreground",
7541
- children: /* @__PURE__ */ jsx(X, { className: "h-icon-default w-icon-default" })
7937
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-icon-default w-icon-default" })
7542
7938
  }
7543
7939
  ),
7544
7940
  rightIcon && !showClearButton && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center text-muted-foreground", children: rightIcon })
@@ -7552,7 +7948,7 @@ var Label;
7552
7948
  var init_Label = __esm({
7553
7949
  "components/atoms/Label.tsx"() {
7554
7950
  init_cn();
7555
- Label = React96__default.forwardRef(
7951
+ Label = React98__default.forwardRef(
7556
7952
  ({ className, required, children, ...props }, ref) => {
7557
7953
  return /* @__PURE__ */ jsxs(
7558
7954
  "label",
@@ -7578,7 +7974,7 @@ var Textarea;
7578
7974
  var init_Textarea = __esm({
7579
7975
  "components/atoms/Textarea.tsx"() {
7580
7976
  init_cn();
7581
- Textarea = React96__default.forwardRef(
7977
+ Textarea = React98__default.forwardRef(
7582
7978
  ({ className, error, ...props }, ref) => {
7583
7979
  return /* @__PURE__ */ jsx(
7584
7980
  "textarea",
@@ -7607,7 +8003,8 @@ var Select;
7607
8003
  var init_Select = __esm({
7608
8004
  "components/atoms/Select.tsx"() {
7609
8005
  init_cn();
7610
- Select = React96__default.forwardRef(
8006
+ init_Icon();
8007
+ Select = React98__default.forwardRef(
7611
8008
  ({ className, options, placeholder, error, ...props }, ref) => {
7612
8009
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
7613
8010
  /* @__PURE__ */ jsxs(
@@ -7638,7 +8035,7 @@ var init_Select = __esm({
7638
8035
  ]
7639
8036
  }
7640
8037
  ),
7641
- /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none", children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-icon-default w-icon-default 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" }) })
7642
8039
  ] });
7643
8040
  }
7644
8041
  );
@@ -7649,7 +8046,7 @@ var Checkbox;
7649
8046
  var init_Checkbox = __esm({
7650
8047
  "components/atoms/Checkbox.tsx"() {
7651
8048
  init_cn();
7652
- Checkbox = React96__default.forwardRef(
8049
+ Checkbox = React98__default.forwardRef(
7653
8050
  ({ className, label, id, ...props }, ref) => {
7654
8051
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
7655
8052
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -7731,7 +8128,7 @@ var init_Card = __esm({
7731
8128
  md: "shadow",
7732
8129
  lg: "shadow-elevation-dialog"
7733
8130
  };
7734
- Card = React96__default.forwardRef(
8131
+ Card = React98__default.forwardRef(
7735
8132
  ({
7736
8133
  className,
7737
8134
  variant = "bordered",
@@ -7767,9 +8164,9 @@ var init_Card = __esm({
7767
8164
  }
7768
8165
  );
7769
8166
  Card.displayName = "Card";
7770
- 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 }));
7771
8168
  CardHeader.displayName = "CardHeader";
7772
- CardTitle = React96__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8169
+ CardTitle = React98__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7773
8170
  "h3",
7774
8171
  {
7775
8172
  ref,
@@ -7782,11 +8179,11 @@ var init_Card = __esm({
7782
8179
  }
7783
8180
  ));
7784
8181
  CardTitle.displayName = "CardTitle";
7785
- 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 }));
7786
8183
  CardContent.displayName = "CardContent";
7787
8184
  CardBody = CardContent;
7788
8185
  CardBody.displayName = "CardBody";
7789
- CardFooter = React96__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
8186
+ CardFooter = React98__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
7790
8187
  "div",
7791
8188
  {
7792
8189
  ref,
@@ -7841,7 +8238,7 @@ var init_FilterPill = __esm({
7841
8238
  md: "w-3.5 h-3.5",
7842
8239
  lg: "w-4 h-4"
7843
8240
  };
7844
- FilterPill = React96__default.forwardRef(
8241
+ FilterPill = React98__default.forwardRef(
7845
8242
  ({
7846
8243
  className,
7847
8244
  variant = "default",
@@ -7866,11 +8263,7 @@ var init_FilterPill = __esm({
7866
8263
  onRemove?.();
7867
8264
  if (removeEvent) eventBus.emit(`UI:${removeEvent}`, { label: payloadLabel });
7868
8265
  }, [onRemove, removeEvent, eventBus, payloadLabel]);
7869
- const XIcon = resolveIcon("x");
7870
- const resolvedIcon = typeof icon === "string" ? (() => {
7871
- const I = resolveIcon(icon);
7872
- return I ? /* @__PURE__ */ jsx(I, { className: iconSizes[size] }) : null;
7873
- })() : icon;
8266
+ const resolvedIcon = typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: iconSizes[size] }) : icon;
7874
8267
  return /* @__PURE__ */ jsxs(
7875
8268
  "span",
7876
8269
  {
@@ -7899,7 +8292,7 @@ var init_FilterPill = __esm({
7899
8292
  className: cn(
7900
8293
  "ml-0.5 rounded-full hover:bg-foreground/10 transition-colors flex items-center justify-center"
7901
8294
  ),
7902
- 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] })
7903
8296
  }
7904
8297
  )
7905
8298
  ]
@@ -7914,13 +8307,14 @@ var sizeStyles5, Spinner;
7914
8307
  var init_Spinner = __esm({
7915
8308
  "components/atoms/Spinner.tsx"() {
7916
8309
  init_cn();
8310
+ init_Icon();
7917
8311
  sizeStyles5 = {
7918
8312
  xs: "h-3 w-3",
7919
8313
  sm: "h-4 w-4",
7920
8314
  md: "h-6 w-6",
7921
8315
  lg: "h-8 w-8"
7922
8316
  };
7923
- Spinner = React96__default.forwardRef(
8317
+ Spinner = React98__default.forwardRef(
7924
8318
  ({ className, size = "md", ...props }, ref) => {
7925
8319
  return /* @__PURE__ */ jsx(
7926
8320
  "div",
@@ -7928,7 +8322,7 @@ var init_Spinner = __esm({
7928
8322
  ref,
7929
8323
  className: cn("text-foreground", className),
7930
8324
  ...props,
7931
- children: /* @__PURE__ */ jsx(Loader2, { className: cn("animate-spin", sizeStyles5[size]) })
8325
+ children: /* @__PURE__ */ jsx(Icon, { name: "loader", className: cn("animate-spin", sizeStyles5[size]) })
7932
8326
  }
7933
8327
  );
7934
8328
  }
@@ -7947,6 +8341,7 @@ var sizeClasses3, iconSizeClasses, statusSizeClasses, statusClasses, badgeSizeCl
7947
8341
  var init_Avatar = __esm({
7948
8342
  "components/atoms/Avatar.tsx"() {
7949
8343
  "use client";
8344
+ init_Icon();
7950
8345
  init_cn();
7951
8346
  init_useEventBus();
7952
8347
  sizeClasses3 = {
@@ -7988,7 +8383,7 @@ var init_Avatar = __esm({
7988
8383
  alt,
7989
8384
  name,
7990
8385
  initials: providedInitials,
7991
- icon: Icon3,
8386
+ icon: IconComponent,
7992
8387
  size = "md",
7993
8388
  status,
7994
8389
  badge,
@@ -8001,7 +8396,7 @@ var init_Avatar = __esm({
8001
8396
  const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
8002
8397
  const hasImage = !!src;
8003
8398
  const hasInitials = !!initials;
8004
- const hasIcon = !!Icon3;
8399
+ const hasIcon = !!IconComponent;
8005
8400
  const getInitialsBackground = () => "bg-primary text-primary-foreground";
8006
8401
  const isClickable = action || onClick;
8007
8402
  const handleClick = () => {
@@ -8045,8 +8440,8 @@ var init_Avatar = __esm({
8045
8440
  ),
8046
8441
  children: initials.substring(0, 2).toUpperCase()
8047
8442
  }
8048
- ) : hasIcon ? /* @__PURE__ */ jsx(
8049
- Icon3,
8443
+ ) : hasIcon && IconComponent ? /* @__PURE__ */ jsx(
8444
+ IconComponent,
8050
8445
  {
8051
8446
  className: cn(
8052
8447
  "text-foreground",
@@ -8054,8 +8449,9 @@ var init_Avatar = __esm({
8054
8449
  )
8055
8450
  }
8056
8451
  ) : /* @__PURE__ */ jsx(
8057
- User,
8452
+ Icon,
8058
8453
  {
8454
+ name: "user",
8059
8455
  className: cn(
8060
8456
  "text-foreground",
8061
8457
  iconSizeClasses[size]
@@ -8368,7 +8764,7 @@ var Radio;
8368
8764
  var init_Radio = __esm({
8369
8765
  "components/atoms/Radio.tsx"() {
8370
8766
  init_cn();
8371
- Radio = React96__default.forwardRef(
8767
+ Radio = React98__default.forwardRef(
8372
8768
  ({
8373
8769
  label,
8374
8770
  helperText,
@@ -8540,7 +8936,7 @@ var init_Switch = __esm({
8540
8936
  "components/atoms/Switch.tsx"() {
8541
8937
  "use client";
8542
8938
  init_cn();
8543
- Switch = React96.forwardRef(
8939
+ Switch = React98.forwardRef(
8544
8940
  ({
8545
8941
  checked,
8546
8942
  defaultChecked = false,
@@ -8551,10 +8947,10 @@ var init_Switch = __esm({
8551
8947
  name,
8552
8948
  className
8553
8949
  }, ref) => {
8554
- const [isChecked, setIsChecked] = React96.useState(
8950
+ const [isChecked, setIsChecked] = React98.useState(
8555
8951
  checked !== void 0 ? checked : defaultChecked
8556
8952
  );
8557
- React96.useEffect(() => {
8953
+ React98.useEffect(() => {
8558
8954
  if (checked !== void 0) {
8559
8955
  setIsChecked(checked);
8560
8956
  }
@@ -8727,6 +9123,7 @@ var sizeClasses4, iconSizes2, ThemeToggle;
8727
9123
  var init_ThemeToggle = __esm({
8728
9124
  "components/atoms/ThemeToggle.tsx"() {
8729
9125
  "use client";
9126
+ init_Icon();
8730
9127
  init_cn();
8731
9128
  init_ThemeContext();
8732
9129
  sizeClasses4 = {
@@ -8764,13 +9161,15 @@ var init_ThemeToggle = __esm({
8764
9161
  title: isDark ? "Switch to light mode" : "Switch to dark mode",
8765
9162
  children: [
8766
9163
  isDark ? /* @__PURE__ */ jsx(
8767
- Sun,
9164
+ Icon,
8768
9165
  {
9166
+ name: "sun",
8769
9167
  className: cn(iconSizes2[size], "text-foreground")
8770
9168
  }
8771
9169
  ) : /* @__PURE__ */ jsx(
8772
- Moon,
9170
+ Icon,
8773
9171
  {
9172
+ name: "moon",
8774
9173
  className: cn(iconSizes2[size], "text-foreground")
8775
9174
  }
8776
9175
  ),
@@ -8821,7 +9220,7 @@ var Aside;
8821
9220
  var init_Aside = __esm({
8822
9221
  "components/atoms/Aside.tsx"() {
8823
9222
  init_cn();
8824
- Aside = React96__default.forwardRef(
9223
+ Aside = React98__default.forwardRef(
8825
9224
  ({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
8826
9225
  );
8827
9226
  Aside.displayName = "Aside";
@@ -8898,8 +9297,8 @@ var init_LawReferenceTooltip = __esm({
8898
9297
  position = "top",
8899
9298
  className
8900
9299
  }) => {
8901
- const [isVisible, setIsVisible] = React96__default.useState(false);
8902
- const timeoutRef = React96__default.useRef(null);
9300
+ const [isVisible, setIsVisible] = React98__default.useState(false);
9301
+ const timeoutRef = React98__default.useRef(null);
8903
9302
  const handleMouseEnter = () => {
8904
9303
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8905
9304
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -8908,7 +9307,7 @@ var init_LawReferenceTooltip = __esm({
8908
9307
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8909
9308
  setIsVisible(false);
8910
9309
  };
8911
- React96__default.useEffect(() => {
9310
+ React98__default.useEffect(() => {
8912
9311
  return () => {
8913
9312
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
8914
9313
  };
@@ -9118,7 +9517,7 @@ var init_StatusDot = __esm({
9118
9517
  md: "w-2.5 h-2.5",
9119
9518
  lg: "w-3 h-3"
9120
9519
  };
9121
- StatusDot = React96__default.forwardRef(
9520
+ StatusDot = React98__default.forwardRef(
9122
9521
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
9123
9522
  return /* @__PURE__ */ jsx(
9124
9523
  "span",
@@ -9157,21 +9556,22 @@ function resolveColor(dir, invert) {
9157
9556
  const isGood = invert ? !isPositive : isPositive;
9158
9557
  return isGood ? "text-success" : "text-error";
9159
9558
  }
9160
- var sizeStyles7, iconMap2, TrendIndicator;
9559
+ var sizeStyles7, iconNameMap, TrendIndicator;
9161
9560
  var init_TrendIndicator = __esm({
9162
9561
  "components/atoms/TrendIndicator.tsx"() {
9562
+ init_Icon();
9163
9563
  init_cn();
9164
9564
  sizeStyles7 = {
9165
9565
  sm: { icon: "w-3 h-3", text: "text-xs" },
9166
9566
  md: { icon: "w-4 h-4", text: "text-sm" },
9167
9567
  lg: { icon: "w-5 h-5", text: "text-base" }
9168
9568
  };
9169
- iconMap2 = {
9170
- up: TrendingUp,
9171
- down: TrendingDown,
9172
- flat: ArrowRight
9569
+ iconNameMap = {
9570
+ up: "trending-up",
9571
+ down: "trending-down",
9572
+ flat: "arrow-right"
9173
9573
  };
9174
- TrendIndicator = React96__default.forwardRef(
9574
+ TrendIndicator = React98__default.forwardRef(
9175
9575
  ({
9176
9576
  className,
9177
9577
  value,
@@ -9184,7 +9584,7 @@ var init_TrendIndicator = __esm({
9184
9584
  }, ref) => {
9185
9585
  const dir = resolveDirection(value, direction);
9186
9586
  const colorClass = resolveColor(dir, invert);
9187
- const IconComponent = iconMap2[dir];
9587
+ const iconName = iconNameMap[dir];
9188
9588
  const styles = sizeStyles7[size];
9189
9589
  const formattedValue = value !== void 0 ? `${value > 0 ? "+" : ""}${value}%` : void 0;
9190
9590
  const ariaLabel = label ?? (formattedValue ? `${dir} ${formattedValue}` : dir);
@@ -9202,7 +9602,7 @@ var init_TrendIndicator = __esm({
9202
9602
  "aria-label": ariaLabel,
9203
9603
  ...props,
9204
9604
  children: [
9205
- /* @__PURE__ */ jsx(IconComponent, { className: styles.icon }),
9605
+ /* @__PURE__ */ jsx(Icon, { name: iconName, className: styles.icon }),
9206
9606
  showValue && formattedValue && /* @__PURE__ */ jsx("span", { children: formattedValue })
9207
9607
  ]
9208
9608
  }
@@ -9238,7 +9638,7 @@ var init_RangeSlider = __esm({
9238
9638
  md: "w-4 h-4",
9239
9639
  lg: "w-5 h-5"
9240
9640
  };
9241
- RangeSlider = React96__default.forwardRef(
9641
+ RangeSlider = React98__default.forwardRef(
9242
9642
  ({
9243
9643
  className,
9244
9644
  min = 0,
@@ -9806,7 +10206,7 @@ var init_ContentSection = __esm({
9806
10206
  md: "py-16",
9807
10207
  lg: "py-24"
9808
10208
  };
9809
- ContentSection = React96__default.forwardRef(
10209
+ ContentSection = React98__default.forwardRef(
9810
10210
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
9811
10211
  return /* @__PURE__ */ jsx(
9812
10212
  Box,
@@ -10340,7 +10740,7 @@ var init_AnimatedReveal = __esm({
10340
10740
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
10341
10741
  "none": {}
10342
10742
  };
10343
- AnimatedReveal = React96__default.forwardRef(
10743
+ AnimatedReveal = React98__default.forwardRef(
10344
10744
  ({
10345
10745
  trigger = "scroll",
10346
10746
  animation = "fade-up",
@@ -10370,7 +10770,7 @@ var init_AnimatedReveal = __esm({
10370
10770
  if (trigger !== "scroll") return;
10371
10771
  const el = internalRef.current;
10372
10772
  if (!el) return;
10373
- const observer = new IntersectionObserver(
10773
+ const observer2 = new IntersectionObserver(
10374
10774
  ([entry]) => {
10375
10775
  if (entry.isIntersecting) {
10376
10776
  if (once && hasAnimated.current) return;
@@ -10382,8 +10782,8 @@ var init_AnimatedReveal = __esm({
10382
10782
  },
10383
10783
  { threshold }
10384
10784
  );
10385
- observer.observe(el);
10386
- return () => observer.disconnect();
10785
+ observer2.observe(el);
10786
+ return () => observer2.disconnect();
10387
10787
  }, [trigger, threshold, once]);
10388
10788
  const handleMouseEnter = trigger === "hover" ? () => setIsAnimated(true) : void 0;
10389
10789
  const handleMouseLeave = trigger === "hover" ? () => {
@@ -10500,7 +10900,7 @@ var init_AnimatedGraphic = __esm({
10500
10900
  "components/atoms/AnimatedGraphic.tsx"() {
10501
10901
  "use client";
10502
10902
  init_cn();
10503
- AnimatedGraphic = React96__default.forwardRef(
10903
+ AnimatedGraphic = React98__default.forwardRef(
10504
10904
  ({
10505
10905
  src,
10506
10906
  svgContent,
@@ -10523,7 +10923,7 @@ var init_AnimatedGraphic = __esm({
10523
10923
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
10524
10924
  const resolvedSvg = svgContent ?? fetchedSvg;
10525
10925
  const prevAnimateRef = useRef(animate);
10526
- const setRef = React96__default.useCallback(
10926
+ const setRef = React98__default.useCallback(
10527
10927
  (node) => {
10528
10928
  containerRef.current = node;
10529
10929
  if (typeof ref === "function") ref(node);
@@ -10750,9 +11150,9 @@ function ScoreDisplay({
10750
11150
  ...rest
10751
11151
  }) {
10752
11152
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
10753
- const [displayValue, setDisplayValue] = React96.useState(resolvedValue);
10754
- const [isAnimating, setIsAnimating] = React96.useState(false);
10755
- React96.useEffect(() => {
11153
+ const [displayValue, setDisplayValue] = React98.useState(resolvedValue);
11154
+ const [isAnimating, setIsAnimating] = React98.useState(false);
11155
+ React98.useEffect(() => {
10756
11156
  if (!animated || displayValue === resolvedValue) {
10757
11157
  setDisplayValue(resolvedValue);
10758
11158
  return;
@@ -10822,9 +11222,9 @@ function ControlButton({
10822
11222
  className
10823
11223
  }) {
10824
11224
  const eventBus = useEventBus();
10825
- const [isPressed, setIsPressed] = React96.useState(false);
11225
+ const [isPressed, setIsPressed] = React98.useState(false);
10826
11226
  const actualPressed = pressed ?? isPressed;
10827
- const handlePointerDown = React96.useCallback(
11227
+ const handlePointerDown = React98.useCallback(
10828
11228
  (e) => {
10829
11229
  e.preventDefault();
10830
11230
  if (disabled) return;
@@ -10834,7 +11234,7 @@ function ControlButton({
10834
11234
  },
10835
11235
  [disabled, pressEvent, eventBus, onPress]
10836
11236
  );
10837
- const handlePointerUp = React96.useCallback(
11237
+ const handlePointerUp = React98.useCallback(
10838
11238
  (e) => {
10839
11239
  e.preventDefault();
10840
11240
  if (disabled) return;
@@ -10844,7 +11244,7 @@ function ControlButton({
10844
11244
  },
10845
11245
  [disabled, releaseEvent, eventBus, onRelease]
10846
11246
  );
10847
- const handlePointerLeave = React96.useCallback(
11247
+ const handlePointerLeave = React98.useCallback(
10848
11248
  (e) => {
10849
11249
  if (isPressed) {
10850
11250
  setIsPressed(false);
@@ -11750,9 +12150,9 @@ function MiniMap({
11750
12150
  viewportRect,
11751
12151
  className
11752
12152
  }) {
11753
- const canvasRef = React96.useRef(null);
11754
- const frameRef = React96.useRef(0);
11755
- React96.useEffect(() => {
12153
+ const canvasRef = React98.useRef(null);
12154
+ const frameRef = React98.useRef(0);
12155
+ React98.useEffect(() => {
11756
12156
  const canvas = canvasRef.current;
11757
12157
  if (!canvas) return;
11758
12158
  const ctx = canvas.getContext("2d");
@@ -12002,6 +12402,7 @@ var init_ErrorState = __esm({
12002
12402
  init_Box();
12003
12403
  init_Stack();
12004
12404
  init_Typography();
12405
+ init_Icon();
12005
12406
  init_useEventBus();
12006
12407
  init_useTranslate();
12007
12408
  ErrorState = ({
@@ -12029,7 +12430,7 @@ var init_ErrorState = __esm({
12029
12430
  className
12030
12431
  ),
12031
12432
  children: [
12032
- /* @__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" }) }),
12033
12434
  /* @__PURE__ */ jsx(Typography, { variant: "h3", className: "text-lg font-medium text-foreground", children: resolvedTitle }),
12034
12435
  /* @__PURE__ */ jsx(Typography, { variant: "small", className: "mt-1 text-muted-foreground max-w-sm", children: resolvedMessage }),
12035
12436
  (onRetry || retryEvent) && /* @__PURE__ */ jsx(Button, { variant: "secondary", className: "mt-4", onClick: handleRetry, children: t("error.retry") })
@@ -12046,7 +12447,7 @@ var init_ErrorBoundary = __esm({
12046
12447
  "use client";
12047
12448
  init_cn();
12048
12449
  init_ErrorState();
12049
- ErrorBoundary = class extends React96__default.Component {
12450
+ ErrorBoundary = class extends React98__default.Component {
12050
12451
  constructor(props) {
12051
12452
  super(props);
12052
12453
  __publicField(this, "reset", () => {
@@ -12971,7 +13372,7 @@ var init_AboutPageTemplate = __esm({
12971
13372
  AboutPageTemplate.displayName = "AboutPageTemplate";
12972
13373
  }
12973
13374
  });
12974
- var variantBorderClasses, variantIconColors, iconMap3, Alert;
13375
+ var variantBorderClasses, variantIconColors, iconMap2, Alert;
12975
13376
  var init_Alert = __esm({
12976
13377
  "components/molecules/Alert.tsx"() {
12977
13378
  "use client";
@@ -12992,11 +13393,11 @@ var init_Alert = __esm({
12992
13393
  warning: "text-warning",
12993
13394
  error: "text-error"
12994
13395
  };
12995
- iconMap3 = {
12996
- info: Info,
12997
- success: CheckCircle,
12998
- warning: AlertTriangle,
12999
- error: AlertCircle
13396
+ iconMap2 = {
13397
+ info: "info",
13398
+ success: "check-circle",
13399
+ warning: "alert-triangle",
13400
+ error: "alert-circle"
13000
13401
  };
13001
13402
  Alert = ({
13002
13403
  children,
@@ -13031,7 +13432,7 @@ var init_Alert = __esm({
13031
13432
  /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
13032
13433
  Icon,
13033
13434
  {
13034
- icon: iconMap3[variant],
13435
+ name: iconMap2[variant],
13035
13436
  size: "md",
13036
13437
  className: variantIconColors[variant]
13037
13438
  }
@@ -13051,7 +13452,7 @@ var init_Alert = __esm({
13051
13452
  "hover:bg-muted"
13052
13453
  ),
13053
13454
  "aria-label": "Dismiss alert",
13054
- children: /* @__PURE__ */ jsx(Icon, { icon: X, size: "sm" })
13455
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "sm" })
13055
13456
  }
13056
13457
  )
13057
13458
  ] })
@@ -13127,8 +13528,8 @@ var init_Tooltip = __esm({
13127
13528
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
13128
13529
  };
13129
13530
  }, []);
13130
- const triggerElement = React96__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
13131
- 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, {
13132
13533
  ref: triggerRef,
13133
13534
  onMouseEnter: handleMouseEnter,
13134
13535
  onMouseLeave: handleMouseLeave,
@@ -13283,8 +13684,8 @@ var init_Popover = __esm({
13283
13684
  onMouseEnter: handleOpen,
13284
13685
  onMouseLeave: handleClose
13285
13686
  };
13286
- const childElement = React96__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
13287
- const triggerElement = React96__default.cloneElement(
13687
+ const childElement = React98__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
13688
+ const triggerElement = React98__default.cloneElement(
13288
13689
  childElement,
13289
13690
  {
13290
13691
  ref: triggerRef,
@@ -13400,8 +13801,8 @@ var init_Menu = __esm({
13400
13801
  "bottom-start": "top-full left-0 mt-2",
13401
13802
  "bottom-end": "top-full right-0 mt-2"
13402
13803
  };
13403
- const triggerChild = React96__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
13404
- 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(
13405
13806
  triggerChild,
13406
13807
  {
13407
13808
  ref: triggerRef,
@@ -13446,7 +13847,7 @@ var init_Menu = __esm({
13446
13847
  }
13447
13848
  ),
13448
13849
  item.badge !== void 0 && /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", children: item.badge }),
13449
- 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" })
13450
13851
  ] })
13451
13852
  },
13452
13853
  itemId
@@ -13591,7 +13992,7 @@ var init_Accordion = __esm({
13591
13992
  /* @__PURE__ */ jsx(
13592
13993
  Icon,
13593
13994
  {
13594
- icon: ChevronDown,
13995
+ name: "chevron-down",
13595
13996
  size: "sm",
13596
13997
  className: cn(
13597
13998
  "transition-transform duration-fast",
@@ -13616,15 +14017,6 @@ var init_Accordion = __esm({
13616
14017
  Accordion.displayName = "Accordion";
13617
14018
  }
13618
14019
  });
13619
- function resolveIcon2(name) {
13620
- const pascalName = name.split(/[-_]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
13621
- const icons = LucideIcons;
13622
- const icon = icons[pascalName];
13623
- if (icon) {
13624
- return icon;
13625
- }
13626
- return Plus;
13627
- }
13628
14020
  var FloatingActionButton;
13629
14021
  var init_FloatingActionButton = __esm({
13630
14022
  "components/molecules/FloatingActionButton.tsx"() {
@@ -13650,7 +14042,7 @@ var init_FloatingActionButton = __esm({
13650
14042
  const eventBus = useEventBus();
13651
14043
  const { t } = useTranslate();
13652
14044
  const resolvedAction = icon ? {
13653
- icon: resolveIcon2(icon),
14045
+ icon,
13654
14046
  onClick: () => {
13655
14047
  if (action) eventBus.emit(`UI:${action}`, actionPayload ?? {});
13656
14048
  onClick?.();
@@ -13760,7 +14152,7 @@ var init_FloatingActionButton = __esm({
13760
14152
  {
13761
14153
  variant: isExpanded ? "secondary" : "primary",
13762
14154
  size: "lg",
13763
- icon: isExpanded ? X : Plus,
14155
+ icon: isExpanded ? "x" : "plus",
13764
14156
  onClick: handleMainClick,
13765
14157
  className: "rounded-full shadow-lg transition-all duration-normal",
13766
14158
  "aria-label": isExpanded ? "Close actions" : "Open actions",
@@ -13817,13 +14209,13 @@ var init_MapView = __esm({
13817
14209
  shadowSize: [41, 41]
13818
14210
  });
13819
14211
  L.Marker.prototype.options.icon = defaultIcon;
13820
- const { useEffect: useEffect88, useRef: useRef88, useCallback: useCallback129, useState: useState123 } = React96__default;
14212
+ const { useEffect: useEffect89, useRef: useRef88, useCallback: useCallback129, useState: useState124 } = React98__default;
13821
14213
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
13822
14214
  const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
13823
14215
  function MapUpdater({ centerLat, centerLng, zoom }) {
13824
14216
  const map = useMap();
13825
14217
  const prevRef = useRef88({ centerLat, centerLng, zoom });
13826
- useEffect88(() => {
14218
+ useEffect89(() => {
13827
14219
  const prev = prevRef.current;
13828
14220
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
13829
14221
  map.setView([centerLat, centerLng], zoom);
@@ -13834,7 +14226,7 @@ var init_MapView = __esm({
13834
14226
  }
13835
14227
  function MapClickHandler({ onMapClick }) {
13836
14228
  const map = useMap();
13837
- useEffect88(() => {
14229
+ useEffect89(() => {
13838
14230
  if (!onMapClick) return;
13839
14231
  const handler = (e) => {
13840
14232
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -13862,7 +14254,7 @@ var init_MapView = __esm({
13862
14254
  showAttribution = true
13863
14255
  }) {
13864
14256
  const eventBus = useEventBus3();
13865
- const [clickedPosition, setClickedPosition] = useState123(null);
14257
+ const [clickedPosition, setClickedPosition] = useState124(null);
13866
14258
  const handleMapClick = useCallback129((lat, lng) => {
13867
14259
  if (showClickedPin) {
13868
14260
  setClickedPosition({ lat, lng });
@@ -14063,7 +14455,7 @@ function InputPattern({
14063
14455
  fieldName
14064
14456
  }) {
14065
14457
  const { emit } = useEventBus();
14066
- const [localValue, setLocalValue] = React96__default.useState(value);
14458
+ const [localValue, setLocalValue] = React98__default.useState(value);
14067
14459
  const handleChange = (e) => {
14068
14460
  setLocalValue(e.target.value);
14069
14461
  if (onChange) {
@@ -14101,7 +14493,7 @@ function TextareaPattern({
14101
14493
  fieldName
14102
14494
  }) {
14103
14495
  const { emit } = useEventBus();
14104
- const [localValue, setLocalValue] = React96__default.useState(value);
14496
+ const [localValue, setLocalValue] = React98__default.useState(value);
14105
14497
  const handleChange = (e) => {
14106
14498
  setLocalValue(e.target.value);
14107
14499
  if (onChange) {
@@ -14133,7 +14525,7 @@ function SelectPattern({
14133
14525
  fieldName
14134
14526
  }) {
14135
14527
  const { emit } = useEventBus();
14136
- const [localValue, setLocalValue] = React96__default.useState(value);
14528
+ const [localValue, setLocalValue] = React98__default.useState(value);
14137
14529
  const handleChange = (e) => {
14138
14530
  setLocalValue(e.target.value);
14139
14531
  if (onChange) {
@@ -14162,7 +14554,7 @@ function CheckboxPattern({
14162
14554
  className
14163
14555
  }) {
14164
14556
  const { emit } = useEventBus();
14165
- const [localChecked, setLocalChecked] = React96__default.useState(checked);
14557
+ const [localChecked, setLocalChecked] = React98__default.useState(checked);
14166
14558
  const handleChange = (e) => {
14167
14559
  setLocalChecked(e.target.checked);
14168
14560
  if (onChange) {
@@ -14393,8 +14785,8 @@ function ActionButtons({
14393
14785
  disabled
14394
14786
  }) {
14395
14787
  const eventBus = useEventBus();
14396
- const [activeButtons, setActiveButtons] = React96.useState(/* @__PURE__ */ new Set());
14397
- const handlePress = React96.useCallback(
14788
+ const [activeButtons, setActiveButtons] = React98.useState(/* @__PURE__ */ new Set());
14789
+ const handlePress = React98.useCallback(
14398
14790
  (id) => {
14399
14791
  setActiveButtons((prev) => new Set(prev).add(id));
14400
14792
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -14402,7 +14794,7 @@ function ActionButtons({
14402
14794
  },
14403
14795
  [actionEvent, eventBus, onAction]
14404
14796
  );
14405
- const handleRelease = React96.useCallback(
14797
+ const handleRelease = React98.useCallback(
14406
14798
  (id) => {
14407
14799
  setActiveButtons((prev) => {
14408
14800
  const next = new Set(prev);
@@ -15266,7 +15658,7 @@ function IsometricCanvas({
15266
15658
  const el = containerRef.current;
15267
15659
  if (!el) return;
15268
15660
  if (typeof ResizeObserver === "undefined") return;
15269
- const observer = new ResizeObserver((entries) => {
15661
+ const observer2 = new ResizeObserver((entries) => {
15270
15662
  const entry = entries[0];
15271
15663
  if (entry) {
15272
15664
  const w = Math.round(entry.contentRect.width) || 800;
@@ -15277,8 +15669,8 @@ function IsometricCanvas({
15277
15669
  });
15278
15670
  }
15279
15671
  });
15280
- observer.observe(el);
15281
- return () => observer.disconnect();
15672
+ observer2.observe(el);
15673
+ return () => observer2.disconnect();
15282
15674
  }, []);
15283
15675
  const units = useMemo(
15284
15676
  () => unitsProp.map((u) => u.position ? u : { ...u, position: { x: u.x ?? 0, y: u.y ?? 0 } }),
@@ -16466,7 +16858,7 @@ var init_MarkdownContent = __esm({
16466
16858
  init_Box();
16467
16859
  init_useTranslate();
16468
16860
  init_cn();
16469
- MarkdownContent = React96__default.memo(
16861
+ MarkdownContent = React98__default.memo(
16470
16862
  ({ content, direction, className }) => {
16471
16863
  const { t: _t } = useTranslate();
16472
16864
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -16612,6 +17004,7 @@ var init_CodeBlock = __esm({
16612
17004
  init_Badge();
16613
17005
  init_Stack();
16614
17006
  init_Textarea();
17007
+ init_Icon();
16615
17008
  init_useEventBus();
16616
17009
  init_useTranslate();
16617
17010
  SyntaxHighlighter.registerLanguage("json", langJson);
@@ -16684,7 +17077,7 @@ var init_CodeBlock = __esm({
16684
17077
  log8 = createLogger("almadar:ui:markdown-code");
16685
17078
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
16686
17079
  HIDDEN_LINE_NUMBERS = { display: "none" };
16687
- CodeBlock = React96__default.memo(
17080
+ CodeBlock = React98__default.memo(
16688
17081
  ({
16689
17082
  code: rawCode,
16690
17083
  language = "text",
@@ -16902,7 +17295,7 @@ var init_CodeBlock = __esm({
16902
17295
  onClick: handleCopy,
16903
17296
  className: "opacity-0 group-hover:opacity-100 focus:opacity-100 transition-opacity text-muted-foreground hover:text-white",
16904
17297
  "aria-label": "Copy code",
16905
- 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" })
16906
17299
  }
16907
17300
  )
16908
17301
  ]
@@ -17233,7 +17626,7 @@ var init_QuizBlock = __esm({
17233
17626
  className: "self-start ml-7",
17234
17627
  children: /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
17235
17628
  /* @__PURE__ */ jsx(Typography, { variant: "caption", children: revealed ? t("quiz.hideAnswer") : t("quiz.showAnswer") }),
17236
- 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" })
17237
17630
  ] })
17238
17631
  }
17239
17632
  )
@@ -17993,7 +18386,7 @@ var init_StateMachineView = __esm({
17993
18386
  style: { top: title ? 30 : 0 },
17994
18387
  children: [
17995
18388
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
17996
- 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(
17997
18390
  StateNode,
17998
18391
  {
17999
18392
  state,
@@ -19141,28 +19534,22 @@ var init_BookTableOfContents = __esm({
19141
19534
  BookTableOfContents.displayName = "BookTableOfContents";
19142
19535
  }
19143
19536
  });
19144
- var ICON_MAP, EmptyState;
19537
+ var ICON_NAME_ALIASES, EmptyState;
19145
19538
  var init_EmptyState = __esm({
19146
19539
  "components/molecules/EmptyState.tsx"() {
19147
19540
  "use client";
19148
19541
  init_cn();
19149
19542
  init_atoms();
19150
19543
  init_Box();
19544
+ init_Icon();
19151
19545
  init_Stack();
19152
19546
  init_Typography();
19153
19547
  init_useEventBus();
19154
19548
  init_useTranslate();
19155
- ICON_MAP = {
19156
- "check-circle": CheckCircle,
19157
- check: CheckCircle,
19158
- "x-circle": XCircle,
19159
- error: XCircle,
19160
- "alert-circle": AlertCircle,
19161
- warning: AlertCircle,
19162
- info: Info,
19163
- search: Search,
19164
- inbox: Inbox,
19165
- "file-question": FileQuestion
19549
+ ICON_NAME_ALIASES = {
19550
+ check: "check-circle",
19551
+ error: "x-circle",
19552
+ warning: "alert-circle"
19166
19553
  };
19167
19554
  EmptyState = ({
19168
19555
  icon,
@@ -19182,7 +19569,9 @@ var init_EmptyState = __esm({
19182
19569
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, {});
19183
19570
  onAction?.();
19184
19571
  };
19185
- 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);
19186
19575
  const isDestructive = destructive || variant === "error";
19187
19576
  const isSuccess = variant === "success";
19188
19577
  const displayText = title || message || t("empty.noItems");
@@ -19195,7 +19584,7 @@ var init_EmptyState = __esm({
19195
19584
  className
19196
19585
  ),
19197
19586
  children: [
19198
- Icon3 && /* @__PURE__ */ jsx(
19587
+ hasIcon && /* @__PURE__ */ jsx(
19199
19588
  Box,
19200
19589
  {
19201
19590
  className: cn(
@@ -19203,8 +19592,9 @@ var init_EmptyState = __esm({
19203
19592
  isDestructive ? "bg-error/10" : isSuccess ? "bg-success/10" : "bg-muted"
19204
19593
  ),
19205
19594
  children: /* @__PURE__ */ jsx(
19206
- Icon3,
19595
+ Icon,
19207
19596
  {
19597
+ ...iconName ? { name: iconName } : { icon: iconComponent },
19208
19598
  className: cn(
19209
19599
  "h-8 w-8",
19210
19600
  isDestructive ? "text-error" : isSuccess ? "text-success" : "text-muted-foreground"
@@ -19574,7 +19964,7 @@ var init_Grid = __esm({
19574
19964
  as: Component2 = "div"
19575
19965
  }) => {
19576
19966
  const mergedStyle = rows ? { gridTemplateRows: `repeat(${rows}, minmax(0, 1fr))`, ...style } : style;
19577
- return React96__default.createElement(
19967
+ return React98__default.createElement(
19578
19968
  Component2,
19579
19969
  {
19580
19970
  className: cn(
@@ -20187,7 +20577,7 @@ var init_Breadcrumb = __esm({
20187
20577
  init_useEventBus();
20188
20578
  Breadcrumb = ({
20189
20579
  items,
20190
- separator = ChevronRight,
20580
+ separator = "chevron-right",
20191
20581
  maxItems,
20192
20582
  className
20193
20583
  }) => {
@@ -20216,7 +20606,7 @@ var init_Breadcrumb = __esm({
20216
20606
  ),
20217
20607
  "aria-current": isLast ? "page" : void 0,
20218
20608
  children: [
20219
- 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" })),
20220
20610
  /* @__PURE__ */ jsx(
20221
20611
  Typography,
20222
20612
  {
@@ -20243,7 +20633,7 @@ var init_Breadcrumb = __esm({
20243
20633
  "aria-current": isLast ? "page" : void 0,
20244
20634
  disabled: isLast,
20245
20635
  children: [
20246
- 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" })),
20247
20637
  /* @__PURE__ */ jsx(
20248
20638
  Typography,
20249
20639
  {
@@ -20255,14 +20645,7 @@ var init_Breadcrumb = __esm({
20255
20645
  ]
20256
20646
  }
20257
20647
  ),
20258
- !isLast && /* @__PURE__ */ jsx(
20259
- Icon,
20260
- {
20261
- icon: separator,
20262
- size: "sm",
20263
- className: "text-muted-foreground"
20264
- }
20265
- )
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" }))
20266
20649
  ] }, index);
20267
20650
  }) })
20268
20651
  }
@@ -20783,7 +21166,7 @@ function CalendarGrid({
20783
21166
  {
20784
21167
  variant: "ghost",
20785
21168
  size: "sm",
20786
- icon: ChevronLeft,
21169
+ icon: "chevron-left",
20787
21170
  onClick: stepPrev,
20788
21171
  "aria-disabled": !canPrev || void 0,
20789
21172
  "aria-label": "Previous days",
@@ -20796,7 +21179,7 @@ function CalendarGrid({
20796
21179
  {
20797
21180
  variant: "ghost",
20798
21181
  size: "sm",
20799
- iconRight: ChevronRight,
21182
+ iconRight: "chevron-right",
20800
21183
  onClick: stepNext,
20801
21184
  "aria-disabled": !canNext || void 0,
20802
21185
  "aria-label": "Next days",
@@ -24710,7 +25093,7 @@ function CounterMinimal({
24710
25093
  size: sizeStyles9[size].button,
24711
25094
  onClick: onDecrement,
24712
25095
  disabled: resolved.decrementDisabled,
24713
- icon: Minus,
25096
+ icon: "minus",
24714
25097
  children: resolved.decrementLabel
24715
25098
  }
24716
25099
  ),
@@ -24732,7 +25115,7 @@ function CounterMinimal({
24732
25115
  size: sizeStyles9[size].button,
24733
25116
  onClick: onIncrement,
24734
25117
  disabled: resolved.incrementDisabled,
24735
- icon: Plus,
25118
+ icon: "plus",
24736
25119
  children: resolved.incrementLabel
24737
25120
  }
24738
25121
  )
@@ -24778,7 +25161,7 @@ function CounterStandard({
24778
25161
  size: sizeStyles9[size].button,
24779
25162
  onClick: onDecrement,
24780
25163
  disabled: resolved.decrementDisabled,
24781
- icon: Minus
25164
+ icon: "minus"
24782
25165
  }
24783
25166
  ),
24784
25167
  /* @__PURE__ */ jsx(
@@ -24788,7 +25171,7 @@ function CounterStandard({
24788
25171
  size: sizeStyles9[size].button,
24789
25172
  onClick: onIncrement,
24790
25173
  disabled: resolved.incrementDisabled,
24791
- icon: Plus
25174
+ icon: "plus"
24792
25175
  }
24793
25176
  )
24794
25177
  ] }),
@@ -24798,7 +25181,7 @@ function CounterStandard({
24798
25181
  variant: "ghost",
24799
25182
  size: "sm",
24800
25183
  onClick: onReset,
24801
- icon: RotateCcw,
25184
+ icon: "rotate-ccw",
24802
25185
  children: "Reset"
24803
25186
  }
24804
25187
  )
@@ -24847,7 +25230,7 @@ function CounterFull({
24847
25230
  size: sizeStyles9[size].button,
24848
25231
  onClick: onDecrement,
24849
25232
  disabled: resolved.decrementDisabled,
24850
- icon: Minus,
25233
+ icon: "minus",
24851
25234
  children: resolved.decrementLabel
24852
25235
  }
24853
25236
  ),
@@ -24858,7 +25241,7 @@ function CounterFull({
24858
25241
  size: sizeStyles9[size].button,
24859
25242
  onClick: onIncrement,
24860
25243
  disabled: resolved.incrementDisabled,
24861
- icon: Plus,
25244
+ icon: "plus",
24862
25245
  children: resolved.incrementLabel
24863
25246
  }
24864
25247
  )
@@ -24869,7 +25252,7 @@ function CounterFull({
24869
25252
  variant: "ghost",
24870
25253
  size: "sm",
24871
25254
  onClick: onReset,
24872
- icon: RotateCcw,
25255
+ icon: "rotate-ccw",
24873
25256
  children: "Reset to 0"
24874
25257
  }
24875
25258
  )
@@ -24917,7 +25300,7 @@ function CraftingRecipe({
24917
25300
  className
24918
25301
  }) {
24919
25302
  const eventBus = useEventBus();
24920
- const handleCraft = React96.useCallback(() => {
25303
+ const handleCraft = React98.useCallback(() => {
24921
25304
  onCraft?.();
24922
25305
  if (craftEvent) {
24923
25306
  eventBus.emit(craftEvent, { output: output.label });
@@ -24934,7 +25317,7 @@ function CraftingRecipe({
24934
25317
  children: [
24935
25318
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
24936
25319
  const hasSufficient = ingredient.available >= ingredient.required;
24937
- return /* @__PURE__ */ jsxs(React96.Fragment, { children: [
25320
+ return /* @__PURE__ */ jsxs(React98.Fragment, { children: [
24938
25321
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
24939
25322
  ItemSlot,
24940
25323
  {
@@ -24997,8 +25380,8 @@ function DPad({
24997
25380
  }) {
24998
25381
  const eventBus = useEventBus();
24999
25382
  const sizes = sizeMap15[size];
25000
- const [activeDirections, setActiveDirections] = React96.useState(/* @__PURE__ */ new Set());
25001
- const handlePress = React96.useCallback(
25383
+ const [activeDirections, setActiveDirections] = React98.useState(/* @__PURE__ */ new Set());
25384
+ const handlePress = React98.useCallback(
25002
25385
  (direction) => {
25003
25386
  setActiveDirections((prev) => new Set(prev).add(direction));
25004
25387
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -25006,7 +25389,7 @@ function DPad({
25006
25389
  },
25007
25390
  [directionEvent, eventBus, onDirection]
25008
25391
  );
25009
- const handleRelease = React96.useCallback(
25392
+ const handleRelease = React98.useCallback(
25010
25393
  (direction) => {
25011
25394
  setActiveDirections((prev) => {
25012
25395
  const next = new Set(prev);
@@ -25271,7 +25654,7 @@ var init_DashboardLayout = __esm({
25271
25654
  variant: "ghost",
25272
25655
  className: "@lg/dashboard:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground",
25273
25656
  onClick: () => setSidebarOpen(false),
25274
- children: /* @__PURE__ */ jsx(X, { className: "h-5 w-5" })
25657
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-5 w-5" })
25275
25658
  }
25276
25659
  )
25277
25660
  ]
@@ -25317,7 +25700,7 @@ var init_DashboardLayout = __esm({
25317
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",
25318
25701
  onClick: () => setSidebarOpen(true),
25319
25702
  "aria-label": "Open sidebar",
25320
- children: /* @__PURE__ */ jsx(Menu$1, { className: "h-5 w-5" })
25703
+ children: /* @__PURE__ */ jsx(Icon, { name: "menu", className: "h-5 w-5" })
25321
25704
  }
25322
25705
  ),
25323
25706
  isTopNav && /* @__PURE__ */ jsxs(
@@ -25360,7 +25743,7 @@ var init_DashboardLayout = __esm({
25360
25743
  }
25361
25744
  ),
25362
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: [
25363
- /* @__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" }),
25364
25747
  /* @__PURE__ */ jsx(
25365
25748
  Input,
25366
25749
  {
@@ -25411,7 +25794,7 @@ var init_DashboardLayout = __esm({
25411
25794
  onClick: handleNotificationClick,
25412
25795
  "aria-label": t("common.notifications"),
25413
25796
  children: [
25414
- /* @__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" }),
25415
25798
  unreadCount > 0 && /* @__PURE__ */ jsx(
25416
25799
  Box,
25417
25800
  {
@@ -25449,7 +25832,7 @@ var init_DashboardLayout = __esm({
25449
25832
  children: user.name
25450
25833
  }
25451
25834
  ),
25452
- /* @__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" })
25453
25836
  ]
25454
25837
  }
25455
25838
  ),
@@ -25492,7 +25875,7 @@ var init_DashboardLayout = __esm({
25492
25875
  },
25493
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",
25494
25877
  children: [
25495
- /* @__PURE__ */ jsx(LogOut, { className: "h-4 w-4" }),
25878
+ /* @__PURE__ */ jsx(Icon, { name: "log-out", className: "h-4 w-4" }),
25496
25879
  t("auth.signOut")
25497
25880
  ]
25498
25881
  }
@@ -25674,14 +26057,14 @@ function useDataDnd(args) {
25674
26057
  const isZone = Boolean(dragGroup || accepts || sortable);
25675
26058
  const enabled = isZone || Boolean(dndRoot);
25676
26059
  const eventBus = useEventBus();
25677
- const parentRoot = React96__default.useContext(RootCtx);
26060
+ const parentRoot = React98__default.useContext(RootCtx);
25678
26061
  const isRoot = enabled && parentRoot === null;
25679
- const zoneId = React96__default.useId();
26062
+ const zoneId = React98__default.useId();
25680
26063
  const ownGroup = dragGroup ?? accepts ?? zoneId;
25681
- const [optimisticOrders, setOptimisticOrders] = React96__default.useState(() => /* @__PURE__ */ new Map());
25682
- const optimisticOrdersRef = React96__default.useRef(optimisticOrders);
26064
+ const [optimisticOrders, setOptimisticOrders] = React98__default.useState(() => /* @__PURE__ */ new Map());
26065
+ const optimisticOrdersRef = React98__default.useRef(optimisticOrders);
25683
26066
  optimisticOrdersRef.current = optimisticOrders;
25684
- const clearOptimisticOrder = React96__default.useCallback((group) => {
26067
+ const clearOptimisticOrder = React98__default.useCallback((group) => {
25685
26068
  setOptimisticOrders((prev) => {
25686
26069
  if (!prev.has(group)) return prev;
25687
26070
  const next = new Map(prev);
@@ -25706,7 +26089,7 @@ function useDataDnd(args) {
25706
26089
  const raw = it[dndItemIdField];
25707
26090
  return String(raw ?? `__idx_${idx}`);
25708
26091
  }).join("|");
25709
- const itemIds = React96__default.useMemo(
26092
+ const itemIds = React98__default.useMemo(
25710
26093
  () => orderedItems.map((it, idx) => {
25711
26094
  const raw = it[dndItemIdField];
25712
26095
  return raw ?? `__idx_${idx}`;
@@ -25714,7 +26097,7 @@ function useDataDnd(args) {
25714
26097
  [itemIdsSignature]
25715
26098
  );
25716
26099
  const itemsContentSig = items.map((it, idx) => String(it[dndItemIdField] ?? `__${idx}`)).join("|");
25717
- React96__default.useEffect(() => {
26100
+ React98__default.useEffect(() => {
25718
26101
  const root = isRoot ? null : parentRoot;
25719
26102
  if (root) {
25720
26103
  root.clearOptimisticOrder(ownGroup);
@@ -25722,20 +26105,20 @@ function useDataDnd(args) {
25722
26105
  clearOptimisticOrder(ownGroup);
25723
26106
  }
25724
26107
  }, [itemsContentSig, ownGroup]);
25725
- const zonesRef = React96__default.useRef(/* @__PURE__ */ new Map());
25726
- const registerZone = React96__default.useCallback((zoneId2, meta2) => {
26108
+ const zonesRef = React98__default.useRef(/* @__PURE__ */ new Map());
26109
+ const registerZone = React98__default.useCallback((zoneId2, meta2) => {
25727
26110
  zonesRef.current.set(zoneId2, meta2);
25728
26111
  }, []);
25729
- const unregisterZone = React96__default.useCallback((zoneId2) => {
26112
+ const unregisterZone = React98__default.useCallback((zoneId2) => {
25730
26113
  zonesRef.current.delete(zoneId2);
25731
26114
  }, []);
25732
- const [activeDrag, setActiveDrag] = React96__default.useState(null);
25733
- const [overZoneGroup, setOverZoneGroup] = React96__default.useState(null);
25734
- 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(
25735
26118
  () => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
25736
26119
  [ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
25737
26120
  );
25738
- React96__default.useEffect(() => {
26121
+ React98__default.useEffect(() => {
25739
26122
  const target = isRoot ? null : parentRoot;
25740
26123
  if (!target) {
25741
26124
  zonesRef.current.set(zoneId, meta);
@@ -25754,7 +26137,7 @@ function useDataDnd(args) {
25754
26137
  }, [parentRoot, isRoot, zoneId, meta]);
25755
26138
  const sensors = useAlmadarDndSensors(true);
25756
26139
  const collisionDetection = almadarDndCollisionDetection;
25757
- const findZoneByItem = React96__default.useCallback(
26140
+ const findZoneByItem = React98__default.useCallback(
25758
26141
  (id) => {
25759
26142
  for (const z of zonesRef.current.values()) {
25760
26143
  if (z.itemIds.includes(id)) return z;
@@ -25763,7 +26146,7 @@ function useDataDnd(args) {
25763
26146
  },
25764
26147
  []
25765
26148
  );
25766
- React96__default.useCallback(
26149
+ React98__default.useCallback(
25767
26150
  (group) => {
25768
26151
  for (const z of zonesRef.current.values()) {
25769
26152
  if (z.group === group) return z;
@@ -25772,7 +26155,7 @@ function useDataDnd(args) {
25772
26155
  },
25773
26156
  []
25774
26157
  );
25775
- const handleDragEnd = React96__default.useCallback(
26158
+ const handleDragEnd = React98__default.useCallback(
25776
26159
  (event) => {
25777
26160
  const { active, over } = event;
25778
26161
  const activeIdStr = String(active.id);
@@ -25863,12 +26246,12 @@ function useDataDnd(args) {
25863
26246
  },
25864
26247
  [eventBus]
25865
26248
  );
25866
- const sortableData = React96__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
25867
- const SortableItem = React96__default.useCallback(
26249
+ const sortableData = React98__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
26250
+ const SortableItem = React98__default.useCallback(
25868
26251
  ({ id, children }) => {
25869
26252
  const {
25870
26253
  attributes,
25871
- listeners: listeners6,
26254
+ listeners: listeners7,
25872
26255
  setNodeRef,
25873
26256
  transform,
25874
26257
  transition,
@@ -25891,7 +26274,7 @@ function useDataDnd(args) {
25891
26274
  ref: setNodeRef,
25892
26275
  style,
25893
26276
  ...attributes,
25894
- ...listeners6,
26277
+ ...listeners7,
25895
26278
  children
25896
26279
  }
25897
26280
  );
@@ -25904,7 +26287,7 @@ function useDataDnd(args) {
25904
26287
  id: droppableId,
25905
26288
  data: sortableData
25906
26289
  });
25907
- const ctx = React96__default.useContext(RootCtx);
26290
+ const ctx = React98__default.useContext(RootCtx);
25908
26291
  const activeDrag2 = ctx?.activeDrag ?? null;
25909
26292
  const overZoneGroup2 = ctx?.overZoneGroup ?? null;
25910
26293
  const isThisZoneOver = overZoneGroup2 === ownGroup;
@@ -25919,7 +26302,7 @@ function useDataDnd(args) {
25919
26302
  showForeignPlaceholder,
25920
26303
  ctxAvailable: ctx != null
25921
26304
  });
25922
- React96__default.useEffect(() => {
26305
+ React98__default.useEffect(() => {
25923
26306
  dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
25924
26307
  }, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
25925
26308
  return /* @__PURE__ */ jsx(
@@ -25933,11 +26316,11 @@ function useDataDnd(args) {
25933
26316
  }
25934
26317
  );
25935
26318
  };
25936
- const rootContextValue = React96__default.useMemo(
26319
+ const rootContextValue = React98__default.useMemo(
25937
26320
  () => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
25938
26321
  [registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
25939
26322
  );
25940
- const handleDragStart = React96__default.useCallback((event) => {
26323
+ const handleDragStart = React98__default.useCallback((event) => {
25941
26324
  const sourceZone = findZoneByItem(event.active.id);
25942
26325
  const rect = event.active.rect.current.initial;
25943
26326
  const height = rect?.height && rect.height > 0 ? rect.height : 64;
@@ -25956,7 +26339,7 @@ function useDataDnd(args) {
25956
26339
  isRoot
25957
26340
  });
25958
26341
  }, [findZoneByItem, isRoot, zoneId]);
25959
- const handleDragOver = React96__default.useCallback((event) => {
26342
+ const handleDragOver = React98__default.useCallback((event) => {
25960
26343
  const { active, over } = event;
25961
26344
  const overData = over?.data?.current;
25962
26345
  const overGroup = overData?.dndGroup ?? null;
@@ -26026,7 +26409,7 @@ function useDataDnd(args) {
26026
26409
  return next;
26027
26410
  });
26028
26411
  }, []);
26029
- const handleDragCancel = React96__default.useCallback((event) => {
26412
+ const handleDragCancel = React98__default.useCallback((event) => {
26030
26413
  setActiveDrag(null);
26031
26414
  setOverZoneGroup(null);
26032
26415
  dndLog.warn("dragCancel", {
@@ -26034,12 +26417,12 @@ function useDataDnd(args) {
26034
26417
  reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
26035
26418
  });
26036
26419
  }, []);
26037
- const handleDragEndWithCleanup = React96__default.useCallback((event) => {
26420
+ const handleDragEndWithCleanup = React98__default.useCallback((event) => {
26038
26421
  handleDragEnd(event);
26039
26422
  setActiveDrag(null);
26040
26423
  setOverZoneGroup(null);
26041
26424
  }, [handleDragEnd]);
26042
- const wrapContainer = React96__default.useCallback(
26425
+ const wrapContainer = React98__default.useCallback(
26043
26426
  (children) => {
26044
26427
  if (!enabled) return children;
26045
26428
  const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
@@ -26093,7 +26476,7 @@ var init_useDataDnd = __esm({
26093
26476
  init_useAlmadarDndCollision();
26094
26477
  init_Box();
26095
26478
  dndLog = createLogger("almadar:ui:dnd");
26096
- RootCtx = React96__default.createContext(null);
26479
+ RootCtx = React98__default.createContext(null);
26097
26480
  }
26098
26481
  });
26099
26482
  function fieldLabel2(key) {
@@ -26582,7 +26965,7 @@ function DataList({
26582
26965
  }) {
26583
26966
  const eventBus = useEventBus();
26584
26967
  const { t } = useTranslate();
26585
- const [visibleCount, setVisibleCount] = React96__default.useState(pageSize || Infinity);
26968
+ const [visibleCount, setVisibleCount] = React98__default.useState(pageSize || Infinity);
26586
26969
  const fieldDefs = fields ?? columns ?? [];
26587
26970
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
26588
26971
  const dnd = useDataDnd({
@@ -26601,7 +26984,7 @@ function DataList({
26601
26984
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
26602
26985
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
26603
26986
  const hasRenderProp = typeof children === "function";
26604
- React96__default.useEffect(() => {
26987
+ React98__default.useEffect(() => {
26605
26988
  const renderItemTypeOf = typeof schemaRenderItem;
26606
26989
  const childrenTypeOf = typeof children;
26607
26990
  if (data.length > 0 && !hasRenderProp) {
@@ -26658,7 +27041,7 @@ function DataList({
26658
27041
  const items2 = data.map((item) => item);
26659
27042
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
26660
27043
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
26661
- 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: [
26662
27045
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
26663
27046
  group.items.map((itemData, index) => {
26664
27047
  const id = itemData.id || `${gi}-${index}`;
@@ -26846,7 +27229,7 @@ function DataList({
26846
27229
  className
26847
27230
  ),
26848
27231
  children: [
26849
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
27232
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
26850
27233
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
26851
27234
  group.items.map(
26852
27235
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -27136,6 +27519,7 @@ var init_FilterGroup = __esm({
27136
27519
  init_Select();
27137
27520
  init_Badge();
27138
27521
  init_Stack();
27522
+ init_Icon();
27139
27523
  init_useEventBus();
27140
27524
  init_useQuerySingleton();
27141
27525
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
@@ -27204,7 +27588,7 @@ var init_FilterGroup = __esm({
27204
27588
  const activeFilterCount = Object.keys(selectedValues).length;
27205
27589
  if (variant === "pills") {
27206
27590
  return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
27207
- 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" }),
27208
27592
  filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
27209
27593
  /* @__PURE__ */ jsxs("span", { className: "text-sm font-[var(--font-weight-medium)] text-muted-foreground", children: [
27210
27594
  filter.label,
@@ -27252,7 +27636,7 @@ var init_FilterGroup = __esm({
27252
27636
  variant: "ghost",
27253
27637
  size: "sm",
27254
27638
  onClick: handleClearAll,
27255
- 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" }),
27256
27640
  children: "Clear"
27257
27641
  }
27258
27642
  )
@@ -27261,7 +27645,7 @@ var init_FilterGroup = __esm({
27261
27645
  if (variant === "vertical") {
27262
27646
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
27263
27647
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
27264
- /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4" }),
27648
+ /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
27265
27649
  /* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--font-weight-bold)] uppercase tracking-wide", children: "Filters" })
27266
27650
  ] }),
27267
27651
  filters.map((filter) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
@@ -27334,7 +27718,7 @@ var init_FilterGroup = __esm({
27334
27718
  variant: "ghost",
27335
27719
  size: "sm",
27336
27720
  onClick: handleClearAll,
27337
- 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" }),
27338
27722
  className: "self-start",
27339
27723
  children: "Clear all"
27340
27724
  }
@@ -27343,7 +27727,7 @@ var init_FilterGroup = __esm({
27343
27727
  }
27344
27728
  if (variant === "compact") {
27345
27729
  return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
27346
- 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" }),
27347
27731
  filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
27348
27732
  Input,
27349
27733
  {
@@ -27419,7 +27803,7 @@ var init_FilterGroup = __esm({
27419
27803
  filterDef?.label,
27420
27804
  ": ",
27421
27805
  value,
27422
- /* @__PURE__ */ jsx(X, { className: "ml-1 h-3 w-3" })
27806
+ /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
27423
27807
  ]
27424
27808
  },
27425
27809
  field
@@ -27446,7 +27830,7 @@ var init_FilterGroup = __esm({
27446
27830
  align: "center",
27447
27831
  className: "text-muted-foreground",
27448
27832
  children: [
27449
- /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4" }),
27833
+ /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
27450
27834
  /* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--font-weight-bold)] uppercase tracking-wide", children: "Filters" })
27451
27835
  ]
27452
27836
  }
@@ -27532,7 +27916,7 @@ var init_FilterGroup = __esm({
27532
27916
  variant: "ghost",
27533
27917
  size: "sm",
27534
27918
  onClick: handleClearAll,
27535
- 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" }),
27536
27920
  children: "Clear all"
27537
27921
  }
27538
27922
  )
@@ -27749,6 +28133,7 @@ var init_RelationSelect = __esm({
27749
28133
  "use client";
27750
28134
  init_cn();
27751
28135
  init_Box();
28136
+ init_Icon();
27752
28137
  init_Stack();
27753
28138
  init_Input();
27754
28139
  init_Button();
@@ -27892,12 +28277,13 @@ var init_RelationSelect = __esm({
27892
28277
  as: "button",
27893
28278
  className: "p-0.5 hover:bg-muted rounded cursor-pointer",
27894
28279
  onClick: handleClear,
27895
- 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" })
27896
28281
  }
27897
28282
  ),
27898
28283
  /* @__PURE__ */ jsx(
27899
- ChevronDown,
28284
+ Icon,
27900
28285
  {
28286
+ name: "chevron-down",
27901
28287
  className: cn(
27902
28288
  "h-4 w-4 text-muted-foreground transition-transform",
27903
28289
  isOpen && "transform rotate-180"
@@ -28128,7 +28514,7 @@ var init_SidePanel = __esm({
28128
28514
  {
28129
28515
  variant: "ghost",
28130
28516
  size: "sm",
28131
- icon: X,
28517
+ icon: "x",
28132
28518
  onClick: handleClose,
28133
28519
  "aria-label": "Close panel",
28134
28520
  children: /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", className: "sr-only", children: "Close" })
@@ -28186,7 +28572,7 @@ var init_WizardProgress = __esm({
28186
28572
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
28187
28573
  const isActive = index === currentStep;
28188
28574
  const isCompleted = index < currentStep;
28189
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
28575
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
28190
28576
  /* @__PURE__ */ jsx(
28191
28577
  "button",
28192
28578
  {
@@ -28200,7 +28586,7 @@ var init_WizardProgress = __esm({
28200
28586
  isCompleted && "bg-foreground text-background cursor-pointer hover:bg-muted-foreground",
28201
28587
  !isActive && !isCompleted && "bg-card text-foreground"
28202
28588
  ),
28203
- children: isCompleted ? /* @__PURE__ */ jsx(Icon, { icon: Check, size: "sm" }) : index + 1
28589
+ children: isCompleted ? /* @__PURE__ */ jsx(Icon, { name: "check", size: "sm" }) : index + 1
28204
28590
  }
28205
28591
  ),
28206
28592
  !compact && /* @__PURE__ */ jsx(
@@ -28319,13 +28705,13 @@ var init_WizardNavigation = __esm({
28319
28705
  ),
28320
28706
  children: [
28321
28707
  showBack ? /* @__PURE__ */ jsxs(Button, { variant: "secondary", onClick: handleBack, disabled: isFirstStep, children: [
28322
- /* @__PURE__ */ jsx(Icon, { icon: ChevronLeft, size: "sm" }),
28708
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-left", size: "sm" }),
28323
28709
  resolvedBackLabel
28324
28710
  ] }) : /* @__PURE__ */ jsx(Box, {}),
28325
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) }) }) }),
28326
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: [
28327
28713
  resolvedNextLabel,
28328
- /* @__PURE__ */ jsx(Icon, { icon: ChevronRight, size: "sm" })
28714
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-right", size: "sm" })
28329
28715
  ] }) : /* @__PURE__ */ jsx(Box, {})
28330
28716
  ]
28331
28717
  }
@@ -29173,10 +29559,7 @@ function StatBadge({
29173
29559
  className
29174
29560
  ),
29175
29561
  children: [
29176
- icon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 text-lg", children: typeof icon === "string" ? (() => {
29177
- const I = resolveIcon(icon);
29178
- return I ? /* @__PURE__ */ jsx(I, { className: "w-4 h-4" }) : icon;
29179
- })() : 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 }),
29180
29563
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground font-medium", children: label }),
29181
29564
  format === "hearts" && max && /* @__PURE__ */ jsx(
29182
29565
  HealthBar,
@@ -29244,7 +29627,7 @@ function InventoryGrid({
29244
29627
  const eventBus = useEventBus();
29245
29628
  const slotCount = totalSlots ?? items.length;
29246
29629
  const emptySlotCount = Math.max(0, slotCount - items.length);
29247
- const handleSelect = React96.useCallback(
29630
+ const handleSelect = React98.useCallback(
29248
29631
  (id) => {
29249
29632
  onSelect?.(id);
29250
29633
  if (selectEvent) {
@@ -29457,15 +29840,15 @@ function GameCanvas2D({
29457
29840
  fps = 60,
29458
29841
  className
29459
29842
  }) {
29460
- const canvasRef = React96.useRef(null);
29461
- const rafRef = React96.useRef(0);
29462
- const frameRef = React96.useRef(0);
29463
- const lastTimeRef = React96.useRef(0);
29464
- 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);
29465
29848
  onDrawRef.current = onDraw;
29466
- const onTickRef = React96.useRef(onTick);
29849
+ const onTickRef = React98.useRef(onTick);
29467
29850
  onTickRef.current = onTick;
29468
- React96.useEffect(() => {
29851
+ React98.useEffect(() => {
29469
29852
  const canvas = canvasRef.current;
29470
29853
  if (!canvas) return;
29471
29854
  const ctx = canvas.getContext("2d");
@@ -29754,7 +30137,7 @@ function TurnPanel({
29754
30137
  className
29755
30138
  }) {
29756
30139
  const eventBus = useEventBus();
29757
- const handleAction = React96.useCallback(
30140
+ const handleAction = React98.useCallback(
29758
30141
  (event) => {
29759
30142
  if (event) {
29760
30143
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -29900,7 +30283,7 @@ function UnitCommandBar({
29900
30283
  className
29901
30284
  }) {
29902
30285
  const eventBus = useEventBus();
29903
- const handleCommand = React96.useCallback(
30286
+ const handleCommand = React98.useCallback(
29904
30287
  (event) => {
29905
30288
  if (event) {
29906
30289
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -30385,7 +30768,7 @@ function GameMenu({
30385
30768
  } catch {
30386
30769
  }
30387
30770
  const eventBus = eventBusProp || eventBusFromHook;
30388
- const handleOptionClick = React96.useCallback(
30771
+ const handleOptionClick = React98.useCallback(
30389
30772
  (option) => {
30390
30773
  if (option.event && eventBus) {
30391
30774
  eventBus.emit(`UI:${option.event}`, { option });
@@ -30499,7 +30882,7 @@ function GameOverScreen({
30499
30882
  } catch {
30500
30883
  }
30501
30884
  const eventBus = eventBusProp || eventBusFromHook;
30502
- const handleActionClick = React96.useCallback(
30885
+ const handleActionClick = React98.useCallback(
30503
30886
  (action) => {
30504
30887
  if (action.event && eventBus) {
30505
30888
  eventBus.emit(`UI:${action.event}`, { action });
@@ -31207,6 +31590,7 @@ var init_NumberStepper = __esm({
31207
31590
  "components/molecules/NumberStepper.tsx"() {
31208
31591
  "use client";
31209
31592
  init_cn();
31593
+ init_Icon();
31210
31594
  init_useEventBus();
31211
31595
  sizeStyles10 = {
31212
31596
  sm: {
@@ -31325,7 +31709,7 @@ var init_NumberStepper = __esm({
31325
31709
  styles.button
31326
31710
  ),
31327
31711
  "aria-label": "Decrease",
31328
- children: /* @__PURE__ */ jsx(Minus, { className: styles.icon })
31712
+ children: /* @__PURE__ */ jsx(Icon, { name: "minus", className: styles.icon })
31329
31713
  }
31330
31714
  ),
31331
31715
  /* @__PURE__ */ jsx(
@@ -31366,7 +31750,7 @@ var init_NumberStepper = __esm({
31366
31750
  styles.button
31367
31751
  ),
31368
31752
  "aria-label": "Increase",
31369
- children: /* @__PURE__ */ jsx(Plus, { className: styles.icon })
31753
+ children: /* @__PURE__ */ jsx(Icon, { name: "plus", className: styles.icon })
31370
31754
  }
31371
31755
  )
31372
31756
  ]
@@ -31391,6 +31775,7 @@ var init_StarRating = __esm({
31391
31775
  "components/molecules/StarRating.tsx"() {
31392
31776
  "use client";
31393
31777
  init_cn();
31778
+ init_Icon();
31394
31779
  init_useEventBus();
31395
31780
  sizeStyles11 = {
31396
31781
  sm: { star: "w-4 h-4", gap: "gap-0.5" },
@@ -31477,8 +31862,9 @@ var init_StarRating = __esm({
31477
31862
  },
31478
31863
  children: [
31479
31864
  /* @__PURE__ */ jsx(
31480
- Star,
31865
+ Icon,
31481
31866
  {
31867
+ name: "star",
31482
31868
  className: cn(
31483
31869
  styles.star,
31484
31870
  "text-muted",
@@ -31488,8 +31874,9 @@ var init_StarRating = __esm({
31488
31874
  }
31489
31875
  ),
31490
31876
  (isFull || isHalf) && /* @__PURE__ */ jsx(
31491
- Star,
31877
+ Icon,
31492
31878
  {
31879
+ name: "star",
31493
31880
  className: cn(
31494
31881
  styles.star,
31495
31882
  "absolute inset-0",
@@ -31681,7 +32068,7 @@ var init_UploadDropZone = __esm({
31681
32068
  "aria-hidden": "true"
31682
32069
  }
31683
32070
  ),
31684
- 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" }),
31685
32072
  /* @__PURE__ */ jsx(Typography, { variant: "body1", className: "text-center font-medium mb-1", children: isDragOver ? "Drop files here" : label }),
31686
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 })
31687
32074
  ]
@@ -31705,6 +32092,7 @@ var Lightbox;
31705
32092
  var init_Lightbox = __esm({
31706
32093
  "components/molecules/Lightbox.tsx"() {
31707
32094
  "use client";
32095
+ init_Icon();
31708
32096
  init_cn();
31709
32097
  init_useEventBus();
31710
32098
  Lightbox = ({
@@ -31812,7 +32200,7 @@ var init_Lightbox = __esm({
31812
32200
  "focus:outline-none focus:ring-2 focus:ring-white"
31813
32201
  ),
31814
32202
  "aria-label": "Close",
31815
- children: /* @__PURE__ */ jsx(X, { className: "w-6 h-6" })
32203
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "w-6 h-6" })
31816
32204
  }
31817
32205
  ),
31818
32206
  hasPrev && safeImages.length > 1 && /* @__PURE__ */ jsx(
@@ -31831,7 +32219,7 @@ var init_Lightbox = __esm({
31831
32219
  "focus:outline-none focus:ring-2 focus:ring-white"
31832
32220
  ),
31833
32221
  "aria-label": "Previous image",
31834
- children: /* @__PURE__ */ jsx(ChevronLeft, { className: "w-8 h-8" })
32222
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
31835
32223
  }
31836
32224
  ),
31837
32225
  /* @__PURE__ */ jsx(
@@ -31868,7 +32256,7 @@ var init_Lightbox = __esm({
31868
32256
  "focus:outline-none focus:ring-2 focus:ring-white"
31869
32257
  ),
31870
32258
  "aria-label": "Next image",
31871
- children: /* @__PURE__ */ jsx(ChevronRight, { className: "w-8 h-8" })
32259
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
31872
32260
  }
31873
32261
  ),
31874
32262
  /* @__PURE__ */ jsxs("div", { className: "absolute bottom-4 left-0 right-0 text-center", children: [
@@ -32949,7 +33337,7 @@ var init_PricingCard = __esm({
32949
33337
  /* @__PURE__ */ jsx(
32950
33338
  Icon,
32951
33339
  {
32952
- icon: Check,
33340
+ name: "check",
32953
33341
  size: "sm",
32954
33342
  className: "flex-shrink-0 text-success"
32955
33343
  }
@@ -33167,7 +33555,7 @@ var init_StepFlow = __esm({
33167
33555
  className
33168
33556
  }) => {
33169
33557
  if (orientation === "vertical") {
33170
- 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: [
33171
33559
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
33172
33560
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
33173
33561
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -33178,7 +33566,7 @@ var init_StepFlow = __esm({
33178
33566
  ] })
33179
33567
  ] }) }, index)) });
33180
33568
  }
33181
- 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: [
33182
33570
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
33183
33571
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
33184
33572
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -33992,6 +34380,7 @@ var init_VoteStack = __esm({
33992
34380
  "components/molecules/VoteStack.tsx"() {
33993
34381
  "use client";
33994
34382
  init_cn();
34383
+ init_Icon();
33995
34384
  init_useEventBus();
33996
34385
  sizeStyles12 = {
33997
34386
  sm: {
@@ -34073,7 +34462,7 @@ var init_VoteStack = __esm({
34073
34462
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
34074
34463
  styles.button
34075
34464
  ),
34076
- children: /* @__PURE__ */ jsx(ChevronUp, { className: styles.icon })
34465
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-up", className: styles.icon })
34077
34466
  }
34078
34467
  ),
34079
34468
  /* @__PURE__ */ jsx(
@@ -34110,7 +34499,7 @@ var init_VoteStack = __esm({
34110
34499
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
34111
34500
  styles.button
34112
34501
  ),
34113
- children: /* @__PURE__ */ jsx(ChevronDown, { className: styles.icon })
34502
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: styles.icon })
34114
34503
  }
34115
34504
  )
34116
34505
  ]
@@ -34152,7 +34541,7 @@ var init_LikertScale = __esm({
34152
34541
  md: "text-base",
34153
34542
  lg: "text-lg"
34154
34543
  };
34155
- LikertScale = React96__default.forwardRef(
34544
+ LikertScale = React98__default.forwardRef(
34156
34545
  ({
34157
34546
  question,
34158
34547
  options = DEFAULT_LIKERT_OPTIONS,
@@ -34164,7 +34553,7 @@ var init_LikertScale = __esm({
34164
34553
  variant = "radios",
34165
34554
  className
34166
34555
  }, ref) => {
34167
- const groupId = React96__default.useId();
34556
+ const groupId = React98__default.useId();
34168
34557
  const eventBus = useEventBus();
34169
34558
  const handleSelect = useCallback(
34170
34559
  (next) => {
@@ -34444,6 +34833,7 @@ var init_QrScanner = __esm({
34444
34833
  "use client";
34445
34834
  init_cn();
34446
34835
  init_atoms();
34836
+ init_Icon();
34447
34837
  init_useEventBus();
34448
34838
  QrScanner = ({
34449
34839
  onScan,
@@ -34594,7 +34984,7 @@ var init_QrScanner = __esm({
34594
34984
  padding: "lg",
34595
34985
  className: "inset-0 flex-col items-center justify-center gap-2 bg-black bg-opacity-80 text-center",
34596
34986
  children: [
34597
- /* @__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" }),
34598
34988
  /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-white", children: "Camera unavailable" }),
34599
34989
  /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-white opacity-70", children: cameraError.message })
34600
34990
  ]
@@ -34626,7 +35016,7 @@ var init_QrScanner = __esm({
34626
35016
  "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
34627
35017
  ),
34628
35018
  "aria-label": isPaused ? "Resume scanning" : "Pause scanning",
34629
- 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" })
34630
35020
  }
34631
35021
  ),
34632
35022
  /* @__PURE__ */ jsx(
@@ -34639,7 +35029,7 @@ var init_QrScanner = __esm({
34639
35029
  "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
34640
35030
  ),
34641
35031
  "aria-label": `Switch to ${currentFacing === "environment" ? "front" : "rear"} camera`,
34642
- children: /* @__PURE__ */ jsx(RefreshCw, { className: "h-4 w-4" })
35032
+ children: /* @__PURE__ */ jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
34643
35033
  }
34644
35034
  ),
34645
35035
  /* @__PURE__ */ jsx(
@@ -34855,11 +35245,11 @@ function getShapeClasses(shape) {
34855
35245
  function getStatusIcon(status) {
34856
35246
  switch (status) {
34857
35247
  case "seated":
34858
- return /* @__PURE__ */ jsx(Users, { className: "w-4 h-4" });
35248
+ return /* @__PURE__ */ jsx(Icon, { name: "users", className: "w-4 h-4" });
34859
35249
  case "ordered":
34860
- return /* @__PURE__ */ jsx(Coffee, { className: "w-4 h-4" });
35250
+ return /* @__PURE__ */ jsx(Icon, { name: "coffee", className: "w-4 h-4" });
34861
35251
  case "awaiting-bill":
34862
- return /* @__PURE__ */ jsx(AlertCircle, { className: "w-4 h-4" });
35252
+ return /* @__PURE__ */ jsx(Icon, { name: "alert-circle", className: "w-4 h-4" });
34863
35253
  default:
34864
35254
  return null;
34865
35255
  }
@@ -34871,6 +35261,7 @@ var init_PositionedCanvas = __esm({
34871
35261
  init_cn();
34872
35262
  init_useEventBus();
34873
35263
  init_atoms();
35264
+ init_Icon();
34874
35265
  STATUS_CLASSES = {
34875
35266
  empty: "bg-surface border-border text-foreground",
34876
35267
  seated: "bg-surface border-success text-success",
@@ -35175,7 +35566,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
35175
35566
  "transition-opacity"
35176
35567
  ),
35177
35568
  onClick: () => setOpen((v) => !v),
35178
- children: /* @__PURE__ */ jsx(MoreHorizontal, { size: 14 })
35569
+ children: /* @__PURE__ */ jsx(Icon, { name: "more-horizontal", className: "w-3.5 h-3.5" })
35179
35570
  }
35180
35571
  ),
35181
35572
  open && /* @__PURE__ */ jsxs(
@@ -35201,7 +35592,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
35201
35592
  setOpen(false);
35202
35593
  },
35203
35594
  children: [
35204
- /* @__PURE__ */ jsx(Plus, { size: 14 }),
35595
+ /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3.5 h-3.5" }),
35205
35596
  " Duplicate"
35206
35597
  ]
35207
35598
  }
@@ -35218,7 +35609,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
35218
35609
  setOpen(false);
35219
35610
  },
35220
35611
  children: [
35221
- /* @__PURE__ */ jsx(Trash, { size: 14 }),
35612
+ /* @__PURE__ */ jsx(Icon, { name: "trash", className: "w-3.5 h-3.5" }),
35222
35613
  " Delete"
35223
35614
  ]
35224
35615
  }
@@ -35447,7 +35838,7 @@ function BlockRow({
35447
35838
  "text-sm text-muted-foreground"
35448
35839
  ),
35449
35840
  children: [
35450
- /* @__PURE__ */ jsx(Image$1, { className: "mr-2", size: 16 }),
35841
+ /* @__PURE__ */ jsx(Icon, { name: "image", className: "mr-2 w-4 h-4" }),
35451
35842
  " No image URL set"
35452
35843
  ]
35453
35844
  }
@@ -35521,7 +35912,7 @@ function BlockRow({
35521
35912
  "opacity-0 group-hover/item:opacity-100 hover:bg-muted hover:text-foreground"
35522
35913
  ),
35523
35914
  onClick: () => removeListItem(child.id),
35524
- children: /* @__PURE__ */ jsx(Trash, { size: 12 })
35915
+ children: /* @__PURE__ */ jsx(Icon, { name: "trash", className: "w-3 h-3" })
35525
35916
  }
35526
35917
  )
35527
35918
  ] }, child.id)),
@@ -35536,7 +35927,7 @@ function BlockRow({
35536
35927
  ),
35537
35928
  onClick: addListItem,
35538
35929
  children: [
35539
- /* @__PURE__ */ jsx(Plus, { size: 12 }),
35930
+ /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3 h-3" }),
35540
35931
  " Add item"
35541
35932
  ]
35542
35933
  }
@@ -35585,7 +35976,7 @@ function BlockRow({
35585
35976
  "transition-opacity"
35586
35977
  ),
35587
35978
  onClick: () => onInsertAfter("paragraph"),
35588
- children: /* @__PURE__ */ jsx(Plus, { size: 14 })
35979
+ children: /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3.5 h-3.5" })
35589
35980
  }
35590
35981
  ),
35591
35982
  /* @__PURE__ */ jsx(
@@ -35615,6 +36006,7 @@ var init_RichBlockEditor = __esm({
35615
36006
  init_Box();
35616
36007
  init_Divider();
35617
36008
  init_Input();
36009
+ init_Icon();
35618
36010
  init_useEventBus();
35619
36011
  TOOLBAR_ENTRIES = [
35620
36012
  { type: "paragraph", label: "Text", icon: Type },
@@ -35858,7 +36250,7 @@ var init_ReplyTree = __esm({
35858
36250
  onClick: handleToggle,
35859
36251
  "aria-label": isCollapsed ? "Expand replies" : "Collapse replies",
35860
36252
  "aria-expanded": !isCollapsed,
35861
- leftIcon: isCollapsed ? ChevronRight : ChevronDown,
36253
+ leftIcon: isCollapsed ? "chevron-right" : "chevron-down",
35862
36254
  className: cn(
35863
36255
  "w-6 h-6 p-0 min-w-0",
35864
36256
  "rounded-sm text-muted-foreground",
@@ -35905,7 +36297,7 @@ var init_ReplyTree = __esm({
35905
36297
  {
35906
36298
  variant: "ghost",
35907
36299
  size: "sm",
35908
- leftIcon: MessageSquare,
36300
+ leftIcon: "message-square",
35909
36301
  onClick: handleReply,
35910
36302
  "aria-label": `Reply to ${node.authorName}`,
35911
36303
  children: "Reply"
@@ -35916,7 +36308,7 @@ var init_ReplyTree = __esm({
35916
36308
  {
35917
36309
  variant: "ghost",
35918
36310
  size: "sm",
35919
- leftIcon: Flag,
36311
+ leftIcon: "flag",
35920
36312
  onClick: handleFlag,
35921
36313
  "aria-label": `Flag reply by ${node.authorName}`,
35922
36314
  children: "Flag"
@@ -35929,7 +36321,7 @@ var init_ReplyTree = __esm({
35929
36321
  variant: "ghost",
35930
36322
  size: "sm",
35931
36323
  onClick: handleContinue,
35932
- rightIcon: ChevronRight,
36324
+ rightIcon: "chevron-right",
35933
36325
  className: cn(
35934
36326
  "self-start gap-1 px-0 h-auto",
35935
36327
  "text-sm text-primary hover:underline hover:bg-transparent"
@@ -36170,7 +36562,7 @@ var init_VersionDiff = __esm({
36170
36562
  className: "px-4 py-2 border-b border-border bg-muted/30 flex-wrap",
36171
36563
  children: [
36172
36564
  /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "flex-wrap", children: [
36173
- /* @__PURE__ */ jsx(Icon, { icon: GitCommit, size: "sm", className: "text-muted-foreground" }),
36565
+ /* @__PURE__ */ jsx(Icon, { name: "git-commit", size: "sm", className: "text-muted-foreground" }),
36174
36566
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "whitespace-nowrap", children: "Compare" }),
36175
36567
  /* @__PURE__ */ jsx(Box, { className: "min-w-0 md:min-w-[160px]", children: /* @__PURE__ */ jsx(
36176
36568
  Select,
@@ -36207,7 +36599,7 @@ var init_VersionDiff = __esm({
36207
36599
  {
36208
36600
  variant: "ghost",
36209
36601
  size: "sm",
36210
- icon: activeView === "side-by-side" ? AlignLeft : Columns,
36602
+ icon: activeView === "side-by-side" ? "align-left" : "columns",
36211
36603
  onClick: handleViewToggle,
36212
36604
  "aria-label": activeView === "side-by-side" ? "Switch to inline view" : "Switch to side-by-side view"
36213
36605
  }
@@ -36217,7 +36609,7 @@ var init_VersionDiff = __esm({
36217
36609
  {
36218
36610
  variant: "ghost",
36219
36611
  size: "sm",
36220
- icon: RotateCcw,
36612
+ icon: "rotate-ccw",
36221
36613
  onClick: handleRevert,
36222
36614
  children: "Revert"
36223
36615
  }
@@ -36394,7 +36786,7 @@ var init_DocBreadcrumb = __esm({
36394
36786
  "aria-label": "Breadcrumb",
36395
36787
  children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
36396
36788
  const isLast = idx === items.length - 1;
36397
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
36789
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
36398
36790
  idx > 0 && /* @__PURE__ */ jsx(
36399
36791
  Icon,
36400
36792
  {
@@ -38327,7 +38719,7 @@ var init_DocumentViewer = __esm({
38327
38719
  }
38328
38720
  });
38329
38721
  function extractTitle(children) {
38330
- if (!React96__default.isValidElement(children)) return void 0;
38722
+ if (!React98__default.isValidElement(children)) return void 0;
38331
38723
  const props = children.props;
38332
38724
  if (typeof props.title === "string") {
38333
38725
  return props.title;
@@ -38382,7 +38774,7 @@ function LinearView({
38382
38774
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
38383
38775
  const isDone = i < currentIdx;
38384
38776
  const isCurrent = i === currentIdx;
38385
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
38777
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
38386
38778
  i > 0 && /* @__PURE__ */ jsx(
38387
38779
  Typography,
38388
38780
  {
@@ -39283,12 +39675,12 @@ var init_Form = __esm({
39283
39675
  const isSchemaEntity = isOrbitalEntitySchema(entity);
39284
39676
  const resolvedEntity = isSchemaEntity ? entity : void 0;
39285
39677
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
39286
- const normalizedInitialData = React96__default.useMemo(() => {
39678
+ const normalizedInitialData = React98__default.useMemo(() => {
39287
39679
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
39288
39680
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
39289
39681
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
39290
39682
  }, [entity, initialData]);
39291
- const entityDerivedFields = React96__default.useMemo(() => {
39683
+ const entityDerivedFields = React98__default.useMemo(() => {
39292
39684
  if (fields && fields.length > 0) return void 0;
39293
39685
  if (!resolvedEntity) return void 0;
39294
39686
  return resolvedEntity.fields.map(
@@ -39308,16 +39700,16 @@ var init_Form = __esm({
39308
39700
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
39309
39701
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
39310
39702
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
39311
- const [formData, setFormData] = React96__default.useState(
39703
+ const [formData, setFormData] = React98__default.useState(
39312
39704
  normalizedInitialData
39313
39705
  );
39314
- const [collapsedSections, setCollapsedSections] = React96__default.useState(
39706
+ const [collapsedSections, setCollapsedSections] = React98__default.useState(
39315
39707
  /* @__PURE__ */ new Set()
39316
39708
  );
39317
- const [submitError, setSubmitError] = React96__default.useState(null);
39318
- const formRef = React96__default.useRef(null);
39709
+ const [submitError, setSubmitError] = React98__default.useState(null);
39710
+ const formRef = React98__default.useRef(null);
39319
39711
  const formMode = props.mode;
39320
- const mountedRef = React96__default.useRef(false);
39712
+ const mountedRef = React98__default.useRef(false);
39321
39713
  if (!mountedRef.current) {
39322
39714
  mountedRef.current = true;
39323
39715
  debug("forms", "mount", {
@@ -39330,7 +39722,7 @@ var init_Form = __esm({
39330
39722
  });
39331
39723
  }
39332
39724
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
39333
- const evalContext = React96__default.useMemo(
39725
+ const evalContext = React98__default.useMemo(
39334
39726
  () => ({
39335
39727
  formValues: formData,
39336
39728
  globalVariables: externalContext?.globalVariables ?? {},
@@ -39339,7 +39731,7 @@ var init_Form = __esm({
39339
39731
  }),
39340
39732
  [formData, externalContext]
39341
39733
  );
39342
- React96__default.useEffect(() => {
39734
+ React98__default.useEffect(() => {
39343
39735
  debug("forms", "initialData-sync", {
39344
39736
  mode: formMode,
39345
39737
  normalizedInitialData,
@@ -39350,7 +39742,7 @@ var init_Form = __esm({
39350
39742
  setFormData(normalizedInitialData);
39351
39743
  }
39352
39744
  }, [normalizedInitialData]);
39353
- const processCalculations = React96__default.useCallback(
39745
+ const processCalculations = React98__default.useCallback(
39354
39746
  (changedFieldId, newFormData) => {
39355
39747
  if (!hiddenCalculations.length) return;
39356
39748
  const context = {
@@ -39375,7 +39767,7 @@ var init_Form = __esm({
39375
39767
  },
39376
39768
  [hiddenCalculations, externalContext, eventBus]
39377
39769
  );
39378
- const checkViolations = React96__default.useCallback(
39770
+ const checkViolations = React98__default.useCallback(
39379
39771
  (changedFieldId, newFormData) => {
39380
39772
  if (!violationTriggers.length) return;
39381
39773
  const context = {
@@ -39413,7 +39805,7 @@ var init_Form = __esm({
39413
39805
  processCalculations(name, newFormData);
39414
39806
  checkViolations(name, newFormData);
39415
39807
  };
39416
- const isFieldVisible = React96__default.useCallback(
39808
+ const isFieldVisible = React98__default.useCallback(
39417
39809
  (fieldName) => {
39418
39810
  const condition = conditionalFields[fieldName];
39419
39811
  if (!condition) return true;
@@ -39421,7 +39813,7 @@ var init_Form = __esm({
39421
39813
  },
39422
39814
  [conditionalFields, evalContext]
39423
39815
  );
39424
- const isSectionVisible = React96__default.useCallback(
39816
+ const isSectionVisible = React98__default.useCallback(
39425
39817
  (section) => {
39426
39818
  if (!section.condition) return true;
39427
39819
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -39497,7 +39889,7 @@ var init_Form = __esm({
39497
39889
  eventBus.emit(`UI:${onCancel}`);
39498
39890
  }
39499
39891
  };
39500
- const renderField = React96__default.useCallback(
39892
+ const renderField = React98__default.useCallback(
39501
39893
  (field) => {
39502
39894
  const fieldName = field.name || field.field;
39503
39895
  if (!fieldName) return null;
@@ -39518,7 +39910,7 @@ var init_Form = __esm({
39518
39910
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
39519
39911
  );
39520
39912
  const effectiveFields = entityDerivedFields ?? fields;
39521
- const normalizedFields = React96__default.useMemo(() => {
39913
+ const normalizedFields = React98__default.useMemo(() => {
39522
39914
  if (!effectiveFields || effectiveFields.length === 0) return [];
39523
39915
  return effectiveFields.map((field) => {
39524
39916
  if (typeof field === "string") {
@@ -39541,7 +39933,7 @@ var init_Form = __esm({
39541
39933
  return field;
39542
39934
  });
39543
39935
  }, [effectiveFields, resolvedEntity]);
39544
- const schemaFields = React96__default.useMemo(() => {
39936
+ const schemaFields = React98__default.useMemo(() => {
39545
39937
  if (normalizedFields.length === 0) return null;
39546
39938
  if (isDebugEnabled()) {
39547
39939
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -39551,7 +39943,7 @@ var init_Form = __esm({
39551
39943
  }
39552
39944
  return normalizedFields.map(renderField).filter(Boolean);
39553
39945
  }, [normalizedFields, renderField, entityName, conditionalFields]);
39554
- const sectionElements = React96__default.useMemo(() => {
39946
+ const sectionElements = React98__default.useMemo(() => {
39555
39947
  if (!sections || sections.length === 0) return null;
39556
39948
  return sections.map((section) => {
39557
39949
  if (!isSectionVisible(section)) {
@@ -40256,7 +40648,7 @@ var init_GameTemplate = __esm({
40256
40648
  {
40257
40649
  variant: "secondary",
40258
40650
  size: "sm",
40259
- icon: Pause,
40651
+ icon: "pause",
40260
40652
  onClick: controls.onPause,
40261
40653
  children: "Pause"
40262
40654
  }
@@ -40265,7 +40657,7 @@ var init_GameTemplate = __esm({
40265
40657
  {
40266
40658
  variant: "primary",
40267
40659
  size: "sm",
40268
- icon: Play,
40660
+ icon: "play",
40269
40661
  onClick: controls.onPlay,
40270
40662
  children: "Play"
40271
40663
  }
@@ -40275,7 +40667,7 @@ var init_GameTemplate = __esm({
40275
40667
  {
40276
40668
  variant: "ghost",
40277
40669
  size: "sm",
40278
- icon: RotateCcw,
40670
+ icon: "rotate-ccw",
40279
40671
  onClick: controls.onReset,
40280
40672
  children: "Reset"
40281
40673
  }
@@ -41277,7 +41669,7 @@ var init_List = __esm({
41277
41669
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
41278
41670
  return [];
41279
41671
  }, [entity]);
41280
- const getItemActions = React96__default.useCallback(
41672
+ const getItemActions = React98__default.useCallback(
41281
41673
  (item) => {
41282
41674
  if (!itemActions) return [];
41283
41675
  if (typeof itemActions === "function") {
@@ -41750,7 +42142,7 @@ var init_MediaGallery = __esm({
41750
42142
  [selectable, selectedItems, selectionEvent, eventBus]
41751
42143
  );
41752
42144
  const entityData = Array.isArray(entity) ? entity : [];
41753
- const items = React96__default.useMemo(() => {
42145
+ const items = React98__default.useMemo(() => {
41754
42146
  if (propItems) return propItems;
41755
42147
  if (entityData.length === 0) return [];
41756
42148
  return entityData.map((record, idx) => ({
@@ -41914,7 +42306,7 @@ var init_MediaGallery = __esm({
41914
42306
  }
41915
42307
  });
41916
42308
  function extractTitle2(children) {
41917
- if (!React96__default.isValidElement(children)) return void 0;
42309
+ if (!React98__default.isValidElement(children)) return void 0;
41918
42310
  const props = children.props;
41919
42311
  if (typeof props.title === "string") {
41920
42312
  return props.title;
@@ -42627,7 +43019,7 @@ var init_PageHeader = __esm({
42627
43019
  info: "bg-info/10 text-info"
42628
43020
  };
42629
43021
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
42630
- 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: [
42631
43023
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
42632
43024
  crumb.href ? /* @__PURE__ */ jsx(
42633
43025
  "a",
@@ -42839,7 +43231,7 @@ var init_PricingPageTemplate = __esm({
42839
43231
 
42840
43232
  // lib/traitRegistry.ts
42841
43233
  function notifyListeners2() {
42842
- listeners.forEach((listener) => listener());
43234
+ listeners2.forEach((listener) => listener());
42843
43235
  }
42844
43236
  function registerTrait(info) {
42845
43237
  traits.set(info.id, info);
@@ -42861,14 +43253,14 @@ function getAllTraits() {
42861
43253
  return Array.from(traits.values());
42862
43254
  }
42863
43255
  function subscribeToTraitChanges(listener) {
42864
- listeners.add(listener);
42865
- return () => listeners.delete(listener);
43256
+ listeners2.add(listener);
43257
+ return () => listeners2.delete(listener);
42866
43258
  }
42867
- var traits, listeners;
43259
+ var traits, listeners2;
42868
43260
  var init_traitRegistry = __esm({
42869
43261
  "lib/traitRegistry.ts"() {
42870
43262
  traits = /* @__PURE__ */ new Map();
42871
- listeners = /* @__PURE__ */ new Set();
43263
+ listeners2 = /* @__PURE__ */ new Set();
42872
43264
  }
42873
43265
  });
42874
43266
 
@@ -42877,14 +43269,14 @@ function getAllTicks() {
42877
43269
  return Array.from(ticks.values());
42878
43270
  }
42879
43271
  function subscribeToTickChanges(listener) {
42880
- listeners2.add(listener);
42881
- return () => listeners2.delete(listener);
43272
+ listeners3.add(listener);
43273
+ return () => listeners3.delete(listener);
42882
43274
  }
42883
- var ticks, listeners2;
43275
+ var ticks, listeners3;
42884
43276
  var init_tickRegistry = __esm({
42885
43277
  "lib/tickRegistry.ts"() {
42886
43278
  ticks = /* @__PURE__ */ new Map();
42887
- listeners2 = /* @__PURE__ */ new Set();
43279
+ listeners3 = /* @__PURE__ */ new Set();
42888
43280
  }
42889
43281
  });
42890
43282
 
@@ -42893,14 +43285,14 @@ function getGuardHistory() {
42893
43285
  return [...guardHistory];
42894
43286
  }
42895
43287
  function subscribeToGuardChanges(listener) {
42896
- listeners3.add(listener);
42897
- return () => listeners3.delete(listener);
43288
+ listeners4.add(listener);
43289
+ return () => listeners4.delete(listener);
42898
43290
  }
42899
- var guardHistory, listeners3;
43291
+ var guardHistory, listeners4;
42900
43292
  var init_guardRegistry = __esm({
42901
43293
  "lib/guardRegistry.ts"() {
42902
43294
  guardHistory = [];
42903
- listeners3 = /* @__PURE__ */ new Set();
43295
+ listeners4 = /* @__PURE__ */ new Set();
42904
43296
  }
42905
43297
  });
42906
43298
 
@@ -42931,18 +43323,18 @@ function getDebugEvents() {
42931
43323
  return [...events];
42932
43324
  }
42933
43325
  function subscribeToDebugEvents(listener) {
42934
- listeners4.add(listener);
42935
- return () => listeners4.delete(listener);
43326
+ listeners5.add(listener);
43327
+ return () => listeners5.delete(listener);
42936
43328
  }
42937
- var events, listeners4;
43329
+ var events, listeners5;
42938
43330
  var init_debugRegistry = __esm({
42939
43331
  "lib/debugRegistry.ts"() {
42940
43332
  events = [];
42941
- listeners4 = /* @__PURE__ */ new Set();
43333
+ listeners5 = /* @__PURE__ */ new Set();
42942
43334
  }
42943
43335
  });
42944
43336
  function useDebugData() {
42945
- const [data, setData] = React96.useState(() => ({
43337
+ const [data, setData] = React98.useState(() => ({
42946
43338
  traits: [],
42947
43339
  ticks: [],
42948
43340
  guards: [],
@@ -42956,7 +43348,7 @@ function useDebugData() {
42956
43348
  },
42957
43349
  lastUpdate: Date.now()
42958
43350
  }));
42959
- React96.useEffect(() => {
43351
+ React98.useEffect(() => {
42960
43352
  const updateData = () => {
42961
43353
  setData({
42962
43354
  traits: getAllTraits(),
@@ -43015,14 +43407,14 @@ function isDebugEnabled2() {
43015
43407
  return localStorage.getItem(DEBUG_STORAGE_KEY) === "true";
43016
43408
  }
43017
43409
  function onDebugToggle(listener) {
43018
- listeners5.add(listener);
43019
- return () => listeners5.delete(listener);
43410
+ listeners6.add(listener);
43411
+ return () => listeners6.delete(listener);
43020
43412
  }
43021
- var DEBUG_STORAGE_KEY, listeners5;
43413
+ var DEBUG_STORAGE_KEY, listeners6;
43022
43414
  var init_debugUtils = __esm({
43023
43415
  "lib/debugUtils.ts"() {
43024
43416
  DEBUG_STORAGE_KEY = "orbital-debug";
43025
- listeners5 = /* @__PURE__ */ new Set();
43417
+ listeners6 = /* @__PURE__ */ new Set();
43026
43418
  }
43027
43419
  });
43028
43420
  function layoutGraph(states, transitions, initialState, width, height) {
@@ -43065,12 +43457,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
43065
43457
  return positions;
43066
43458
  }
43067
43459
  function WalkMinimap() {
43068
- const [walkStep, setWalkStep] = React96.useState(null);
43069
- const [traits2, setTraits] = React96.useState([]);
43070
- const [coveredEdges, setCoveredEdges] = React96.useState([]);
43071
- const [completedTraits, setCompletedTraits] = React96.useState(/* @__PURE__ */ new Set());
43072
- const prevTraitRef = React96.useRef(null);
43073
- 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(() => {
43074
43466
  const interval = setInterval(() => {
43075
43467
  const w = window;
43076
43468
  const step = w.__orbitalWalkStep;
@@ -43517,15 +43909,15 @@ var init_EntitiesTab = __esm({
43517
43909
  }
43518
43910
  });
43519
43911
  function EventFlowTab({ events: events2 }) {
43520
- const [filter, setFilter] = React96.useState("all");
43521
- const containerRef = React96.useRef(null);
43522
- const [autoScroll, setAutoScroll] = React96.useState(true);
43523
- 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(() => {
43524
43916
  if (autoScroll && containerRef.current) {
43525
43917
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
43526
43918
  }
43527
43919
  }, [events2.length, autoScroll]);
43528
- const filteredEvents = React96.useMemo(() => {
43920
+ const filteredEvents = React98.useMemo(() => {
43529
43921
  if (filter === "all") return events2;
43530
43922
  return events2.filter((e) => e.type === filter);
43531
43923
  }, [events2, filter]);
@@ -43644,7 +44036,7 @@ var init_EventFlowTab = __esm({
43644
44036
  }
43645
44037
  });
43646
44038
  function GuardsPanel({ guards }) {
43647
- const [filter, setFilter] = React96.useState("all");
44039
+ const [filter, setFilter] = React98.useState("all");
43648
44040
  if (guards.length === 0) {
43649
44041
  return /* @__PURE__ */ jsx(
43650
44042
  EmptyState,
@@ -43657,7 +44049,7 @@ function GuardsPanel({ guards }) {
43657
44049
  }
43658
44050
  const passedCount = guards.filter((g) => g.result).length;
43659
44051
  const failedCount = guards.length - passedCount;
43660
- const filteredGuards = React96.useMemo(() => {
44052
+ const filteredGuards = React98.useMemo(() => {
43661
44053
  if (filter === "all") return guards;
43662
44054
  if (filter === "passed") return guards.filter((g) => g.result);
43663
44055
  return guards.filter((g) => !g.result);
@@ -43818,10 +44210,10 @@ function EffectBadge({ effect }) {
43818
44210
  ] });
43819
44211
  }
43820
44212
  function TransitionTimeline({ transitions }) {
43821
- const containerRef = React96.useRef(null);
43822
- const [autoScroll, setAutoScroll] = React96.useState(true);
43823
- const [expandedId, setExpandedId] = React96.useState(null);
43824
- 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(() => {
43825
44217
  if (autoScroll && containerRef.current) {
43826
44218
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
43827
44219
  }
@@ -44107,9 +44499,9 @@ function getAllEvents(traits2) {
44107
44499
  }
44108
44500
  function EventDispatcherTab({ traits: traits2, schema }) {
44109
44501
  const eventBus = useEventBus();
44110
- const [log20, setLog] = React96.useState([]);
44111
- const prevStatesRef = React96.useRef(/* @__PURE__ */ new Map());
44112
- React96.useEffect(() => {
44502
+ const [log20, setLog] = React98.useState([]);
44503
+ const prevStatesRef = React98.useRef(/* @__PURE__ */ new Map());
44504
+ React98.useEffect(() => {
44113
44505
  for (const trait of traits2) {
44114
44506
  const prev = prevStatesRef.current.get(trait.id);
44115
44507
  if (prev && prev !== trait.currentState) {
@@ -44279,10 +44671,10 @@ function VerifyModePanel({
44279
44671
  serverCount,
44280
44672
  localCount
44281
44673
  }) {
44282
- const [expanded, setExpanded] = React96.useState(true);
44283
- const scrollRef = React96.useRef(null);
44284
- const prevCountRef = React96.useRef(0);
44285
- React96.useEffect(() => {
44674
+ const [expanded, setExpanded] = React98.useState(true);
44675
+ const scrollRef = React98.useRef(null);
44676
+ const prevCountRef = React98.useRef(0);
44677
+ React98.useEffect(() => {
44286
44678
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
44287
44679
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
44288
44680
  }
@@ -44348,10 +44740,10 @@ function RuntimeDebugger({
44348
44740
  defaultTab,
44349
44741
  schema
44350
44742
  }) {
44351
- const [isCollapsed, setIsCollapsed] = React96.useState(mode === "verify" ? true : defaultCollapsed);
44352
- 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());
44353
44745
  const debugData = useDebugData();
44354
- React96.useEffect(() => {
44746
+ React98.useEffect(() => {
44355
44747
  if (mode === "inline") return;
44356
44748
  return onDebugToggle((enabled) => {
44357
44749
  setIsVisible(enabled);
@@ -44360,7 +44752,7 @@ function RuntimeDebugger({
44360
44752
  }
44361
44753
  });
44362
44754
  }, [mode]);
44363
- React96.useEffect(() => {
44755
+ React98.useEffect(() => {
44364
44756
  if (mode === "inline") return;
44365
44757
  const handleKeyDown = (e) => {
44366
44758
  if (e.key === "`" && isVisible) {
@@ -44909,7 +45301,7 @@ function SequenceBar({
44909
45301
  onSlotRemove(index);
44910
45302
  }, [onSlotRemove, playing]);
44911
45303
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
44912
- 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: [
44913
45305
  i > 0 && /* @__PURE__ */ jsx(
44914
45306
  Typography,
44915
45307
  {
@@ -46311,7 +46703,7 @@ var init_StatCard = __esm({
46311
46703
  const labelToUse = propLabel ?? propTitle;
46312
46704
  const eventBus = useEventBus();
46313
46705
  const { t } = useTranslate();
46314
- const handleActionClick = React96__default.useCallback(() => {
46706
+ const handleActionClick = React98__default.useCallback(() => {
46315
46707
  if (action?.event) {
46316
46708
  eventBus.emit(`UI:${action.event}`, {});
46317
46709
  }
@@ -46322,7 +46714,7 @@ var init_StatCard = __esm({
46322
46714
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
46323
46715
  const isLoading = externalLoading ?? false;
46324
46716
  const error = externalError;
46325
- const computeMetricValue = React96__default.useCallback(
46717
+ const computeMetricValue = React98__default.useCallback(
46326
46718
  (metric, items) => {
46327
46719
  if (metric.value !== void 0) {
46328
46720
  return metric.value;
@@ -46361,7 +46753,7 @@ var init_StatCard = __esm({
46361
46753
  },
46362
46754
  []
46363
46755
  );
46364
- const schemaStats = React96__default.useMemo(() => {
46756
+ const schemaStats = React98__default.useMemo(() => {
46365
46757
  if (!metrics || metrics.length === 0) return null;
46366
46758
  return metrics.map((metric) => ({
46367
46759
  label: metric.label,
@@ -46369,7 +46761,7 @@ var init_StatCard = __esm({
46369
46761
  format: metric.format
46370
46762
  }));
46371
46763
  }, [metrics, data, computeMetricValue]);
46372
- const calculatedTrend = React96__default.useMemo(() => {
46764
+ const calculatedTrend = React98__default.useMemo(() => {
46373
46765
  if (manualTrend !== void 0) return manualTrend;
46374
46766
  if (previousValue === void 0 || currentValue === void 0)
46375
46767
  return void 0;
@@ -47480,7 +47872,7 @@ var init_Timeline = __esm({
47480
47872
  }) => {
47481
47873
  const { t } = useTranslate();
47482
47874
  const entityData = Array.isArray(entity) ? entity : [];
47483
- const items = React96__default.useMemo(() => {
47875
+ const items = React98__default.useMemo(() => {
47484
47876
  if (propItems) return propItems;
47485
47877
  if (entityData.length === 0) return [];
47486
47878
  return entityData.map((record, idx) => {
@@ -47587,7 +47979,7 @@ var init_Timeline = __esm({
47587
47979
  }
47588
47980
  });
47589
47981
  function extractToastProps(children) {
47590
- if (!React96__default.isValidElement(children)) {
47982
+ if (!React98__default.isValidElement(children)) {
47591
47983
  if (typeof children === "string") {
47592
47984
  return { message: children };
47593
47985
  }
@@ -47625,7 +48017,7 @@ var init_ToastSlot = __esm({
47625
48017
  eventBus.emit("UI:CLOSE");
47626
48018
  };
47627
48019
  if (!isVisible) return null;
47628
- const isCustomContent = React96__default.isValidElement(children) && !message;
48020
+ const isCustomContent = React98__default.isValidElement(children) && !message;
47629
48021
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
47630
48022
  Toast,
47631
48023
  {
@@ -47894,7 +48286,7 @@ var init_WizardContainer = __esm({
47894
48286
  const isCompleted = index < currentStep;
47895
48287
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
47896
48288
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
47897
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
48289
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
47898
48290
  /* @__PURE__ */ jsx(
47899
48291
  Button,
47900
48292
  {
@@ -50087,7 +50479,7 @@ function UnitRenderer({
50087
50479
  onAnimationStateChange,
50088
50480
  animationSpeed = 1
50089
50481
  }) {
50090
- const handleUnitClick = React96__default.useCallback(
50482
+ const handleUnitClick = React98__default.useCallback(
50091
50483
  (unit) => {
50092
50484
  onUnitClick?.(unit);
50093
50485
  },
@@ -53300,7 +53692,7 @@ var init_Avl3DViewer = __esm({
53300
53692
  const handleTraitClick = useCallback((name) => {
53301
53693
  dispatch({ type: "ZOOM_INTO_TRAIT", trait: name, targetPosition: { x: 0, y: 0 } });
53302
53694
  }, []);
53303
- const [highlightedTrait, setHighlightedTrait] = React96__default.useState(null);
53695
+ const [highlightedTrait, setHighlightedTrait] = React98__default.useState(null);
53304
53696
  const handleTransitionClick = useCallback((index) => {
53305
53697
  dispatch({ type: "ZOOM_INTO_TRANSITION", transitionIndex: index, targetPosition: { x: 0, y: 0 } });
53306
53698
  }, []);
@@ -53387,7 +53779,7 @@ var init_Avl3DViewer = __esm({
53387
53779
  gap: "xs",
53388
53780
  align: "center",
53389
53781
  className: "absolute top-2 left-2 z-10 bg-surface/80 backdrop-blur rounded-md px-3 py-1.5",
53390
- children: breadcrumbs.map((crumb, i) => /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
53782
+ children: breadcrumbs.map((crumb, i) => /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
53391
53783
  i > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", className: "mx-1", children: "/" }),
53392
53784
  i < breadcrumbs.length - 1 ? /* @__PURE__ */ jsx(
53393
53785
  Box,
@@ -53765,12 +54157,12 @@ var init_three = __esm({
53765
54157
  }
53766
54158
  });
53767
54159
  function lazyThree(name, loader) {
53768
- const Lazy = React96__default.lazy(() => loader().then((m) => ({ default: m[name] })));
54160
+ const Lazy = React98__default.lazy(() => loader().then((m) => ({ default: m[name] })));
53769
54161
  function ThreeWrapper(props) {
53770
- return React96__default.createElement(
53771
- React96__default.Suspense,
54162
+ return React98__default.createElement(
54163
+ React98__default.Suspense,
53772
54164
  { fallback: null },
53773
- React96__default.createElement(Lazy, props)
54165
+ React98__default.createElement(Lazy, props)
53774
54166
  );
53775
54167
  }
53776
54168
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -54386,7 +54778,7 @@ function SuspenseConfigProvider({
54386
54778
  config,
54387
54779
  children
54388
54780
  }) {
54389
- return React96__default.createElement(
54781
+ return React98__default.createElement(
54390
54782
  SuspenseConfigContext.Provider,
54391
54783
  { value: config },
54392
54784
  children
@@ -54869,7 +55261,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
54869
55261
  const key = `${parentId}-${index}-trait:${traitName}`;
54870
55262
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
54871
55263
  }
54872
- return /* @__PURE__ */ jsx(React96__default.Fragment, { children: child }, `${parentId}-${index}`);
55264
+ return /* @__PURE__ */ jsx(React98__default.Fragment, { children: child }, `${parentId}-${index}`);
54873
55265
  }
54874
55266
  if (!child || typeof child !== "object") return null;
54875
55267
  const childId = `${parentId}-${index}`;
@@ -54906,14 +55298,14 @@ function isPatternConfig(value) {
54906
55298
  if (value === null || value === void 0) return false;
54907
55299
  if (typeof value !== "object") return false;
54908
55300
  if (Array.isArray(value)) return false;
54909
- if (React96__default.isValidElement(value)) return false;
55301
+ if (React98__default.isValidElement(value)) return false;
54910
55302
  if (value instanceof Date) return false;
54911
55303
  if (typeof value === "function") return false;
54912
55304
  const record = value;
54913
55305
  return "type" in record && typeof record.type === "string";
54914
55306
  }
54915
55307
  function isPlainConfigObject(value) {
54916
- if (React96__default.isValidElement(value)) return false;
55308
+ if (React98__default.isValidElement(value)) return false;
54917
55309
  if (value instanceof Date) return false;
54918
55310
  const proto = Object.getPrototypeOf(value);
54919
55311
  return proto === Object.prototype || proto === null;
@@ -55369,7 +55761,7 @@ var AvlTransition = ({
55369
55761
  opacity = 1,
55370
55762
  className
55371
55763
  }) => {
55372
- const ids = React96__default.useMemo(() => {
55764
+ const ids = React98__default.useMemo(() => {
55373
55765
  avlTransitionId += 1;
55374
55766
  return { arrow: `avl-tr-${avlTransitionId}-arrow` };
55375
55767
  }, []);
@@ -55930,7 +56322,7 @@ var AvlStateMachine = ({
55930
56322
  color = "var(--color-primary)",
55931
56323
  animated = false
55932
56324
  }) => {
55933
- const ids = React96__default.useMemo(() => {
56325
+ const ids = React98__default.useMemo(() => {
55934
56326
  avlSmId += 1;
55935
56327
  const base = `avl-sm-${avlSmId}`;
55936
56328
  return { glow: `${base}-glow`, grad: `${base}-grad` };
@@ -56129,7 +56521,7 @@ var AvlOrbitalUnit = ({
56129
56521
  color = "var(--color-primary)",
56130
56522
  animated = false
56131
56523
  }) => {
56132
- const ids = React96__default.useMemo(() => {
56524
+ const ids = React98__default.useMemo(() => {
56133
56525
  avlOuId += 1;
56134
56526
  const base = `avl-ou-${avlOuId}`;
56135
56527
  return { glow: `${base}-glow`, grad: `${base}-grad` };
@@ -56225,7 +56617,7 @@ var AvlClosedCircuit = ({
56225
56617
  color = "var(--color-primary)",
56226
56618
  animated = false
56227
56619
  }) => {
56228
- const ids = React96__default.useMemo(() => {
56620
+ const ids = React98__default.useMemo(() => {
56229
56621
  avlCcId += 1;
56230
56622
  const base = `avl-cc-${avlCcId}`;
56231
56623
  return { glow: `${base}-glow`, grad: `${base}-grad`, arrow: `${base}-arrow` };
@@ -56380,7 +56772,7 @@ var AvlEmitListen = ({
56380
56772
  color = "var(--color-primary)",
56381
56773
  animated = false
56382
56774
  }) => {
56383
- const ids = React96__default.useMemo(() => {
56775
+ const ids = React98__default.useMemo(() => {
56384
56776
  avlElId += 1;
56385
56777
  const base = `avl-el-${avlElId}`;
56386
56778
  return { arrow: `${base}-arrow`, grad: `${base}-grad` };
@@ -56653,7 +57045,7 @@ function renderNode(node, color, glowId) {
56653
57045
  const baseR = node.type === "operator" ? 20 : 16;
56654
57046
  const r2 = Math.max(baseR, labelLen * 3.5 + 6);
56655
57047
  const nc = nodeColor(node.type, color);
56656
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
57048
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
56657
57049
  node.children.map((child, i) => {
56658
57050
  const childR = Math.max(
56659
57051
  child.type === "operator" ? 20 : 16,
@@ -56710,7 +57102,7 @@ var AvlExprTree = ({
56710
57102
  className,
56711
57103
  color = "var(--color-primary)"
56712
57104
  }) => {
56713
- const ids = React96__default.useMemo(() => {
57105
+ const ids = React98__default.useMemo(() => {
56714
57106
  avlEtId += 1;
56715
57107
  return { glow: `avl-et-${avlEtId}-glow` };
56716
57108
  }, []);
@@ -57273,7 +57665,7 @@ var SystemNode = ({ data }) => {
57273
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) => {
57274
57666
  const tc = transitionCounts[s.name] ?? 0;
57275
57667
  const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
57276
- return /* @__PURE__ */ jsxs(React96__default.Fragment, { children: [
57668
+ return /* @__PURE__ */ jsxs(React98__default.Fragment, { children: [
57277
57669
  /* @__PURE__ */ jsx(AvlState, { x: i * 14 + 1, y: 1, width: 10, height: 8, name: "", role, isInitial: s.isInitial, isTerminal: s.isTerminal }),
57278
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 })
57279
57671
  ] }, s.name);
@@ -57782,20 +58174,20 @@ function isBackwardTransition(from, to, states) {
57782
58174
  function extractTraitWires(orbitals, scope) {
57783
58175
  const wires = [];
57784
58176
  const emitters = [];
57785
- const listeners6 = [];
58177
+ const listeners7 = [];
57786
58178
  for (const orb of orbitals) {
57787
58179
  for (const trait of getTraits2(orb)) {
57788
58180
  for (const e of getEmits2(trait)) {
57789
58181
  emitters.push({ orbital: orb.name, trait: trait.name, event: e });
57790
58182
  }
57791
58183
  for (const l of getListens2(trait)) {
57792
- listeners6.push({ orbital: orb.name, trait: trait.name, event: l });
58184
+ listeners7.push({ orbital: orb.name, trait: trait.name, event: l });
57793
58185
  }
57794
58186
  }
57795
58187
  }
57796
58188
  const seen = /* @__PURE__ */ new Set();
57797
58189
  for (const em of emitters) {
57798
- for (const li of listeners6) {
58190
+ for (const li of listeners7) {
57799
58191
  if (em.event !== li.event) continue;
57800
58192
  if (scope === "cross-orbital" && em.orbital === li.orbital) continue;
57801
58193
  if (scope === "intra-orbital" && em.orbital !== li.orbital) continue;
@@ -58692,7 +59084,7 @@ function resolveLambdaBindings(body, argName, arg) {
58692
59084
  if (Array.isArray(body)) {
58693
59085
  return body.map((b) => resolveLambdaBindings(b, argName, arg));
58694
59086
  }
58695
- 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") {
58696
59088
  const out = {};
58697
59089
  for (const [k, v] of Object.entries(body)) {
58698
59090
  out[k] = resolveLambdaBindings(v, argName, arg);
@@ -58711,7 +59103,7 @@ function getSlotContentRenderer2() {
58711
59103
  function makeLambdaFn(argName, lambdaBody, callerKey) {
58712
59104
  return (item, index) => {
58713
59105
  const resolvedBody = resolveLambdaBindings(lambdaBody, argName, item);
58714
- 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) {
58715
59107
  return null;
58716
59108
  }
58717
59109
  const record = resolvedBody;
@@ -58729,7 +59121,7 @@ function makeLambdaFn(argName, lambdaBody, callerKey) {
58729
59121
  props: childProps,
58730
59122
  priority: 0
58731
59123
  };
58732
- return React96__default.createElement(SlotContentRenderer2, { content: childContent });
59124
+ return React98__default.createElement(SlotContentRenderer2, { content: childContent });
58733
59125
  };
58734
59126
  }
58735
59127
  function convertNode(node, callerKey) {
@@ -58748,7 +59140,7 @@ function convertNode(node, callerKey) {
58748
59140
  });
58749
59141
  return anyChanged ? mapped : node;
58750
59142
  }
58751
- if (typeof node === "object" && !React96__default.isValidElement(node) && !(node instanceof Date)) {
59143
+ if (typeof node === "object" && !React98__default.isValidElement(node) && !(node instanceof Date)) {
58752
59144
  return convertObjectProps(node);
58753
59145
  }
58754
59146
  return node;
@@ -60608,7 +61000,7 @@ function useCanvasDraggable({
60608
61000
  payload,
60609
61001
  disabled
60610
61002
  }) {
60611
- const { setNodeRef, attributes, listeners: listeners6, isDragging, transform } = useDraggable({
61003
+ const { setNodeRef, attributes, listeners: listeners7, isDragging, transform } = useDraggable({
60612
61004
  id,
60613
61005
  data: { payload },
60614
61006
  disabled
@@ -60619,7 +61011,7 @@ function useCanvasDraggable({
60619
61011
  opacity: isDragging ? 0.5 : 1,
60620
61012
  touchAction: "none"
60621
61013
  };
60622
- return { setNodeRef, attributes, listeners: listeners6, isDragging, style };
61014
+ return { setNodeRef, attributes, listeners: listeners7, isDragging, style };
60623
61015
  }
60624
61016
  var DEFAULT_ACCEPTS = ["pattern", "behavior"];
60625
61017
  function useCanvasDroppable({
@@ -60675,8 +61067,8 @@ function CanvasDndProvider({
60675
61067
  }) {
60676
61068
  const eventBus = useEventBus();
60677
61069
  const sensors = useAlmadarDndSensors(false);
60678
- const [activePayload, setActivePayload] = React96__default.useState(null);
60679
- const handleDragStart = React96__default.useCallback((e) => {
61070
+ const [activePayload, setActivePayload] = React98__default.useState(null);
61071
+ const handleDragStart = React98__default.useCallback((e) => {
60680
61072
  const data = e.active.data.current;
60681
61073
  const payload = data?.payload;
60682
61074
  if (payload) {
@@ -60687,7 +61079,7 @@ function CanvasDndProvider({
60687
61079
  log18.warn("dragStart:missing-payload", { id: e.active.id });
60688
61080
  }
60689
61081
  }, [eventBus]);
60690
- const handleDragEnd = React96__default.useCallback((e) => {
61082
+ const handleDragEnd = React98__default.useCallback((e) => {
60691
61083
  setActivePayload(null);
60692
61084
  const activeData = e.active.data.current;
60693
61085
  const payload = activeData?.payload;
@@ -60716,7 +61108,7 @@ function CanvasDndProvider({
60716
61108
  const suppressed = onDrop ? onDrop(drop) === true : false;
60717
61109
  if (!suppressed) defaultEmit(eventBus, drop);
60718
61110
  }, [eventBus, onDrop]);
60719
- const handleDragCancel = React96__default.useCallback(() => {
61111
+ const handleDragCancel = React98__default.useCallback(() => {
60720
61112
  setActivePayload(null);
60721
61113
  log18.info("dragCancel");
60722
61114
  }, []);
@@ -61360,7 +61752,7 @@ var OrbPreviewNodeInner = (props) => {
61360
61752
  }
61361
61753
  );
61362
61754
  };
61363
- var OrbPreviewNode = React96__default.memo(OrbPreviewNodeInner);
61755
+ var OrbPreviewNode = React98__default.memo(OrbPreviewNodeInner);
61364
61756
  OrbPreviewNode.displayName = "OrbPreviewNode";
61365
61757
  orbPreviewLog.debug("export-resolved", () => ({
61366
61758
  type: typeof OrbPreviewNode,
@@ -61465,7 +61857,7 @@ var EventFlowEdgeInner = (props) => {
61465
61857
  ) })
61466
61858
  ] });
61467
61859
  };
61468
- var EventFlowEdge = React96__default.memo(EventFlowEdgeInner);
61860
+ var EventFlowEdge = React98__default.memo(EventFlowEdgeInner);
61469
61861
  EventFlowEdge.displayName = "EventFlowEdge";
61470
61862
 
61471
61863
  // components/molecules/avl/BehaviorComposeNode.tsx
@@ -61612,7 +62004,7 @@ var BehaviorComposeNodeInner = (props) => {
61612
62004
  }
61613
62005
  );
61614
62006
  };
61615
- var BehaviorComposeNode = React96__default.memo(BehaviorComposeNodeInner);
62007
+ var BehaviorComposeNode = React98__default.memo(BehaviorComposeNodeInner);
61616
62008
  BehaviorComposeNode.displayName = "BehaviorComposeNode";
61617
62009
 
61618
62010
  // components/molecules/avl/avl-behavior-compose-converter.ts
@@ -62631,7 +63023,7 @@ var TraitCardNodeInner = (props) => {
62631
63023
  }
62632
63024
  );
62633
63025
  };
62634
- var TraitCardNode = React96__default.memo(TraitCardNodeInner);
63026
+ var TraitCardNode = React98__default.memo(TraitCardNodeInner);
62635
63027
  TraitCardNode.displayName = "TraitCardNode";
62636
63028
 
62637
63029
  // components/organisms/avl/FlowCanvas.tsx
@@ -62703,7 +63095,7 @@ function FlowCanvasInner({
62703
63095
  initialOrbital
62704
63096
  );
62705
63097
  const [expandedBehaviorAlias, setExpandedBehaviorAlias] = useState(void 0);
62706
- const screenSizeUserOverrideRef = React96__default.useRef(false);
63098
+ const screenSizeUserOverrideRef = React98__default.useRef(false);
62707
63099
  const [screenSize, setScreenSize] = useState(
62708
63100
  () => typeof window === "undefined" ? "laptop" : detectScreenSize(window.innerWidth)
62709
63101
  );
@@ -63087,7 +63479,7 @@ var ZoomBreadcrumb = ({
63087
63479
  if (eventName && band === "detail") {
63088
63480
  segments.push({ icon: "\u26A1", label: eventName });
63089
63481
  }
63090
- 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: [
63091
63483
  i > 0 && /* @__PURE__ */ jsx("span", { className: "opacity-40", children: ">" }),
63092
63484
  /* @__PURE__ */ jsx("span", { className: "opacity-60", children: seg.icon }),
63093
63485
  /* @__PURE__ */ jsx("span", { children: seg.label })
@@ -63295,7 +63687,7 @@ var EventWireOverlay = ({
63295
63687
  containerW,
63296
63688
  containerH
63297
63689
  }) => {
63298
- const ids = React96__default.useMemo(() => {
63690
+ const ids = React98__default.useMemo(() => {
63299
63691
  avlOczWireId += 1;
63300
63692
  return { arrow: `avl-ocz-wire-${avlOczWireId}-arrow` };
63301
63693
  }, []);
@@ -63661,7 +64053,7 @@ var AvlOrbitalsCosmicZoom = ({
63661
64053
  borderRadius: 6,
63662
64054
  border: `1px solid ${color}`
63663
64055
  },
63664
- 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: [
63665
64057
  i > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", style: { opacity: 0.5, color }, children: "/" }),
63666
64058
  i < breadcrumbs.length - 1 ? /* @__PURE__ */ jsx(
63667
64059
  Box,