@almadar/ui 4.57.5 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/avl/index.cjs +2499 -1903
  2. package/dist/avl/index.js +1111 -518
  3. package/dist/components/atoms/Icon.d.ts +7 -4
  4. package/dist/components/index.cjs +2064 -1636
  5. package/dist/components/index.js +905 -480
  6. package/dist/components/molecules/Breadcrumb.d.ts +4 -4
  7. package/dist/components/molecules/EmptyState.d.ts +1 -1
  8. package/dist/components/templates/DashboardLayout.d.ts +1 -1
  9. package/dist/context/index.cjs +199 -0
  10. package/dist/context/index.js +199 -0
  11. package/dist/context/themeTokens.d.ts +1 -1
  12. package/dist/docs/index.cjs +456 -98
  13. package/dist/docs/index.d.cts +7 -4
  14. package/dist/docs/index.js +429 -74
  15. package/dist/lib/iconFamily.d.ts +41 -0
  16. package/dist/marketing/index.cjs +480 -124
  17. package/dist/marketing/index.d.cts +7 -4
  18. package/dist/marketing/index.js +446 -93
  19. package/dist/providers/index.cjs +1933 -1505
  20. package/dist/providers/index.js +909 -484
  21. package/dist/runtime/index.cjs +2130 -1534
  22. package/dist/runtime/index.js +1071 -478
  23. package/package.json +5 -2
  24. package/tailwind-preset.cjs +118 -3
  25. package/themes/_contract.md +198 -0
  26. package/themes/almadar-website.css +212 -0
  27. package/themes/almadar.css +210 -0
  28. package/themes/arctic.css +210 -0
  29. package/themes/atelier.css +427 -0
  30. package/themes/copper.css +210 -0
  31. package/themes/ember.css +210 -0
  32. package/themes/forest.css +210 -0
  33. package/themes/gazette.css +411 -0
  34. package/themes/index.css +12 -0
  35. package/themes/kiosk.css +412 -0
  36. package/themes/lavender.css +210 -0
  37. package/themes/midnight.css +210 -0
  38. package/themes/minimalist.css +210 -0
  39. package/themes/neon.css +210 -0
  40. package/themes/ocean.css +210 -0
  41. package/themes/prism.css +406 -0
  42. package/themes/rose.css +210 -0
  43. package/themes/sand.css +210 -0
  44. package/themes/slate.css +210 -0
  45. package/themes/sunset.css +210 -0
  46. package/themes/terminal.css +422 -0
  47. package/themes/trait-wars.css +210 -0
  48. package/themes/wireframe.css +216 -0
@@ -1,12 +1,15 @@
1
- import * as React83 from 'react';
2
- import React83__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, Suspense, useState, useSyncExternalStore, useLayoutEffect, lazy, useId } from 'react';
1
+ import * as React85 from 'react';
2
+ import React85__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, Suspense, useState, useSyncExternalStore, useLayoutEffect, lazy, useId } from 'react';
3
3
  import { EventBusContext, useTraitScope, OrbitalProvider, TraitScopeProvider, VerificationProvider } from '@almadar/ui/providers';
4
4
  import { createLogger, isLogLevelEnabled } from '@almadar/logger';
5
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
6
  import { clsx } from 'clsx';
7
7
  import { twMerge } from 'tailwind-merge';
8
- import * as LucideIcons from 'lucide-react';
9
- import { X, AlertTriangle, Info, AlertCircle, CheckCircle, Loader2, List, Printer, ChevronRight, ChevronLeft, GitBranch, Pencil, Eye, Plus, ArrowRight, Trash, Check, Copy, Code, FileText, WrapText, Trash2, Menu as Menu$1, Search, Bell, ChevronDown, 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 { useUISlots, UISlotProvider } from '@almadar/ui/context';
12
15
  import { createPortal } from 'react-dom';
@@ -888,7 +891,7 @@ var init_Box = __esm({
888
891
  fixed: "fixed",
889
892
  sticky: "sticky"
890
893
  };
891
- Box = React83__default.forwardRef(
894
+ Box = React85__default.forwardRef(
892
895
  ({
893
896
  padding,
894
897
  paddingX,
@@ -938,7 +941,7 @@ var init_Box = __esm({
938
941
  onMouseLeave?.(e);
939
942
  }, [hoverEvent, eventBus, onMouseLeave]);
940
943
  const isClickable = action || onClick;
941
- return React83__default.createElement(
944
+ return React85__default.createElement(
942
945
  Component,
943
946
  {
944
947
  ref,
@@ -974,12 +977,378 @@ var init_Box = __esm({
974
977
  Box.displayName = "Box";
975
978
  }
976
979
  });
980
+ function getCurrentIconFamily() {
981
+ if (typeof window === "undefined" || typeof document === "undefined") {
982
+ return DEFAULT_FAMILY;
983
+ }
984
+ const raw = getComputedStyle(document.documentElement).getPropertyValue("--icon-family").trim().replace(/^["']|["']$/g, "");
985
+ return VALID_FAMILIES.includes(raw) ? raw : DEFAULT_FAMILY;
986
+ }
987
+ function ensureObserver() {
988
+ if (typeof window === "undefined" || observer) return;
989
+ observer = new MutationObserver(() => {
990
+ const next = getCurrentIconFamily();
991
+ if (next !== cachedFamily) {
992
+ cachedFamily = next;
993
+ listeners.forEach((fn) => fn());
994
+ }
995
+ });
996
+ observer.observe(document.documentElement, {
997
+ attributes: true,
998
+ attributeFilter: ["data-theme", "style"]
999
+ });
1000
+ cachedFamily = getCurrentIconFamily();
1001
+ }
1002
+ function subscribeIconFamily(notify) {
1003
+ ensureObserver();
1004
+ listeners.add(notify);
1005
+ return () => {
1006
+ listeners.delete(notify);
1007
+ };
1008
+ }
1009
+ function getIconFamilySnapshot() {
1010
+ if (cachedFamily !== null) return cachedFamily;
1011
+ cachedFamily = getCurrentIconFamily();
1012
+ return cachedFamily;
1013
+ }
1014
+ function getIconFamilyServerSnapshot() {
1015
+ return DEFAULT_FAMILY;
1016
+ }
1017
+ function useIconFamily() {
1018
+ return useSyncExternalStore(
1019
+ subscribeIconFamily,
1020
+ getIconFamilySnapshot,
1021
+ getIconFamilyServerSnapshot
1022
+ );
1023
+ }
977
1024
  function kebabToPascal(name) {
978
1025
  return name.split("-").map((part) => {
979
1026
  if (/^\d+$/.test(part)) return part;
980
1027
  return part.charAt(0).toUpperCase() + part.slice(1);
981
1028
  }).join("");
982
1029
  }
1030
+ function resolveLucide(name) {
1031
+ if (lucideAliases[name]) return lucideAliases[name];
1032
+ const pascal = kebabToPascal(name);
1033
+ const lucideMap = LucideIcons2;
1034
+ const direct = lucideMap[pascal];
1035
+ if (direct && typeof direct === "object") return direct;
1036
+ const asIs = lucideMap[name];
1037
+ if (asIs && typeof asIs === "object") return asIs;
1038
+ return LucideIcons2.HelpCircle;
1039
+ }
1040
+ function resolvePhosphor(name, weight) {
1041
+ const target = phosphorAliases[name] ?? kebabToPascal(name);
1042
+ const map = PhosphorIcons;
1043
+ const PhosphorComp = map[target];
1044
+ if (!PhosphorComp || typeof PhosphorComp !== "object") return null;
1045
+ const Component = PhosphorComp;
1046
+ const Adapter = (props) => /* @__PURE__ */ jsx(
1047
+ Component,
1048
+ {
1049
+ weight,
1050
+ className: props.className,
1051
+ style: props.style,
1052
+ size: props.size ?? "1em"
1053
+ }
1054
+ );
1055
+ Adapter.displayName = `Phosphor.${target}.${weight}`;
1056
+ return Adapter;
1057
+ }
1058
+ function resolveTabler(name) {
1059
+ const suffix = tablerAliases[name] ?? kebabToPascal(name);
1060
+ const target = `Icon${suffix}`;
1061
+ const map = TablerIcons;
1062
+ const TablerComp = map[target];
1063
+ if (!TablerComp || typeof TablerComp !== "object") return null;
1064
+ const Component = TablerComp;
1065
+ const Adapter = (props) => /* @__PURE__ */ jsx(
1066
+ Component,
1067
+ {
1068
+ stroke: props.strokeWidth ?? 1.5,
1069
+ className: props.className,
1070
+ style: props.style,
1071
+ size: props.size ?? 24
1072
+ }
1073
+ );
1074
+ Adapter.displayName = `Tabler.${target}`;
1075
+ return Adapter;
1076
+ }
1077
+ function resolveFa(name) {
1078
+ const suffix = faAliases[name] ?? kebabToPascal(name);
1079
+ const target = `Fa${suffix}`;
1080
+ const map = FaIcons;
1081
+ const FaComp = map[target];
1082
+ if (!FaComp || typeof FaComp !== "function") return null;
1083
+ const Component = FaComp;
1084
+ const Adapter = (props) => /* @__PURE__ */ jsx(
1085
+ Component,
1086
+ {
1087
+ className: props.className,
1088
+ style: props.style,
1089
+ size: props.size ?? "1em"
1090
+ }
1091
+ );
1092
+ Adapter.displayName = `Fa.${target}`;
1093
+ return Adapter;
1094
+ }
1095
+ function warnFallback(name, family) {
1096
+ const key = `${family}::${name}`;
1097
+ if (warned.has(key)) return;
1098
+ warned.add(key);
1099
+ if (typeof console !== "undefined") {
1100
+ console.warn(
1101
+ `[iconFamily] No '${name}' mapping in family '${family}'; falling back to lucide. Add an alias in lib/iconFamily.ts.`
1102
+ );
1103
+ }
1104
+ }
1105
+ function makeLucideAdapter(name) {
1106
+ const LucideComp = resolveLucide(name);
1107
+ const Adapter = (props) => /* @__PURE__ */ jsx(
1108
+ LucideComp,
1109
+ {
1110
+ className: props.className,
1111
+ strokeWidth: props.strokeWidth,
1112
+ style: props.style,
1113
+ size: props.size
1114
+ }
1115
+ );
1116
+ Adapter.displayName = `Lucide.${name}`;
1117
+ return Adapter;
1118
+ }
1119
+ function resolveIconForFamily(name, family) {
1120
+ switch (family) {
1121
+ case "lucide":
1122
+ return makeLucideAdapter(name);
1123
+ case "phosphor-outline": {
1124
+ const p2 = resolvePhosphor(name, "regular");
1125
+ if (p2) return p2;
1126
+ warnFallback(name, family);
1127
+ return makeLucideAdapter(name);
1128
+ }
1129
+ case "phosphor-fill": {
1130
+ const p2 = resolvePhosphor(name, "fill");
1131
+ if (p2) return p2;
1132
+ warnFallback(name, family);
1133
+ return makeLucideAdapter(name);
1134
+ }
1135
+ case "phosphor-duotone": {
1136
+ const p2 = resolvePhosphor(name, "duotone");
1137
+ if (p2) return p2;
1138
+ warnFallback(name, family);
1139
+ return makeLucideAdapter(name);
1140
+ }
1141
+ case "tabler": {
1142
+ const t = resolveTabler(name);
1143
+ if (t) return t;
1144
+ warnFallback(name, family);
1145
+ return makeLucideAdapter(name);
1146
+ }
1147
+ case "fa-solid": {
1148
+ const f3 = resolveFa(name);
1149
+ if (f3) return f3;
1150
+ warnFallback(name, family);
1151
+ return makeLucideAdapter(name);
1152
+ }
1153
+ }
1154
+ }
1155
+ var DEFAULT_FAMILY, VALID_FAMILIES, cachedFamily, listeners, observer, lucideAliases, phosphorAliases, tablerAliases, faAliases, warned;
1156
+ var init_iconFamily = __esm({
1157
+ "lib/iconFamily.tsx"() {
1158
+ "use client";
1159
+ DEFAULT_FAMILY = "lucide";
1160
+ VALID_FAMILIES = [
1161
+ "lucide",
1162
+ "phosphor-outline",
1163
+ "phosphor-fill",
1164
+ "phosphor-duotone",
1165
+ "tabler",
1166
+ "fa-solid"
1167
+ ];
1168
+ cachedFamily = null;
1169
+ listeners = /* @__PURE__ */ new Set();
1170
+ observer = null;
1171
+ lucideAliases = {
1172
+ close: LucideIcons2.X,
1173
+ trash: LucideIcons2.Trash2,
1174
+ loader: LucideIcons2.Loader2,
1175
+ stop: LucideIcons2.Square,
1176
+ volume: LucideIcons2.Volume2,
1177
+ "volume-off": LucideIcons2.VolumeX,
1178
+ refresh: LucideIcons2.RefreshCw,
1179
+ share: LucideIcons2.Share2,
1180
+ "sort-asc": LucideIcons2.ArrowUpNarrowWide,
1181
+ "sort-desc": LucideIcons2.ArrowDownNarrowWide
1182
+ };
1183
+ phosphorAliases = {
1184
+ // lucide name → phosphor PascalCase name
1185
+ search: "MagnifyingGlass",
1186
+ close: "X",
1187
+ loader: "CircleNotch",
1188
+ refresh: "ArrowsClockwise",
1189
+ "sort-asc": "SortAscending",
1190
+ "sort-desc": "SortDescending",
1191
+ "chevron-down": "CaretDown",
1192
+ "chevron-up": "CaretUp",
1193
+ "chevron-left": "CaretLeft",
1194
+ "chevron-right": "CaretRight",
1195
+ "help-circle": "Question",
1196
+ "alert-triangle": "Warning",
1197
+ "alert-circle": "WarningCircle",
1198
+ "check-circle": "CheckCircle",
1199
+ "x-circle": "XCircle",
1200
+ edit: "PencilSimple",
1201
+ pencil: "PencilSimple",
1202
+ trash: "Trash",
1203
+ send: "PaperPlaneRight",
1204
+ external: "ArrowSquareOut",
1205
+ "external-link": "ArrowSquareOut",
1206
+ plus: "Plus",
1207
+ minus: "Minus",
1208
+ x: "X",
1209
+ check: "Check",
1210
+ star: "Star",
1211
+ heart: "Heart",
1212
+ home: "House",
1213
+ user: "User",
1214
+ users: "Users",
1215
+ settings: "Gear",
1216
+ menu: "List",
1217
+ "arrow-up": "ArrowUp",
1218
+ "arrow-down": "ArrowDown",
1219
+ "arrow-left": "ArrowLeft",
1220
+ "arrow-right": "ArrowRight",
1221
+ copy: "Copy",
1222
+ download: "DownloadSimple",
1223
+ upload: "UploadSimple",
1224
+ filter: "Funnel",
1225
+ calendar: "Calendar",
1226
+ clock: "Clock",
1227
+ bell: "Bell",
1228
+ mail: "Envelope",
1229
+ envelope: "Envelope",
1230
+ lock: "Lock",
1231
+ unlock: "LockOpen",
1232
+ eye: "Eye",
1233
+ "eye-off": "EyeSlash",
1234
+ more: "DotsThree",
1235
+ "more-vertical": "DotsThreeVertical",
1236
+ info: "Info",
1237
+ warning: "Warning",
1238
+ error: "WarningCircle"
1239
+ };
1240
+ tablerAliases = {
1241
+ // lucide name → tabler suffix (after the `Icon` prefix)
1242
+ search: "Search",
1243
+ close: "X",
1244
+ loader: "Loader2",
1245
+ refresh: "Refresh",
1246
+ "sort-asc": "SortAscending",
1247
+ "sort-desc": "SortDescending",
1248
+ "chevron-down": "ChevronDown",
1249
+ "chevron-up": "ChevronUp",
1250
+ "chevron-left": "ChevronLeft",
1251
+ "chevron-right": "ChevronRight",
1252
+ "help-circle": "HelpCircle",
1253
+ "alert-triangle": "AlertTriangle",
1254
+ "alert-circle": "AlertCircle",
1255
+ "check-circle": "CircleCheck",
1256
+ "x-circle": "CircleX",
1257
+ edit: "Pencil",
1258
+ trash: "Trash",
1259
+ send: "Send",
1260
+ external: "ExternalLink",
1261
+ plus: "Plus",
1262
+ x: "X",
1263
+ check: "Check",
1264
+ star: "Star",
1265
+ heart: "Heart",
1266
+ home: "Home",
1267
+ user: "User",
1268
+ users: "Users",
1269
+ settings: "Settings",
1270
+ menu: "Menu2",
1271
+ copy: "Copy",
1272
+ download: "Download",
1273
+ upload: "Upload",
1274
+ filter: "Filter",
1275
+ calendar: "Calendar",
1276
+ clock: "Clock",
1277
+ bell: "Bell",
1278
+ mail: "Mail",
1279
+ envelope: "Mail",
1280
+ lock: "Lock",
1281
+ unlock: "LockOpen",
1282
+ eye: "Eye",
1283
+ "eye-off": "EyeOff",
1284
+ more: "Dots",
1285
+ "more-vertical": "DotsVertical",
1286
+ info: "InfoCircle"
1287
+ };
1288
+ faAliases = {
1289
+ // lucide name → fa-solid suffix (after the `Fa` prefix)
1290
+ search: "Search",
1291
+ close: "Times",
1292
+ x: "Times",
1293
+ loader: "Spinner",
1294
+ refresh: "Sync",
1295
+ "sort-asc": "SortAmountUp",
1296
+ "sort-desc": "SortAmountDown",
1297
+ "chevron-down": "ChevronDown",
1298
+ "chevron-up": "ChevronUp",
1299
+ "chevron-left": "ChevronLeft",
1300
+ "chevron-right": "ChevronRight",
1301
+ "help-circle": "QuestionCircle",
1302
+ "alert-triangle": "ExclamationTriangle",
1303
+ "alert-circle": "ExclamationCircle",
1304
+ "check-circle": "CheckCircle",
1305
+ "x-circle": "TimesCircle",
1306
+ edit: "Edit",
1307
+ pencil: "Pencil",
1308
+ trash: "Trash",
1309
+ send: "PaperPlane",
1310
+ external: "ExternalLinkAlt",
1311
+ plus: "Plus",
1312
+ minus: "Minus",
1313
+ check: "Check",
1314
+ star: "Star",
1315
+ heart: "Heart",
1316
+ home: "Home",
1317
+ user: "User",
1318
+ users: "Users",
1319
+ settings: "Cog",
1320
+ menu: "Bars",
1321
+ "arrow-up": "ArrowUp",
1322
+ "arrow-down": "ArrowDown",
1323
+ "arrow-left": "ArrowLeft",
1324
+ "arrow-right": "ArrowRight",
1325
+ copy: "Copy",
1326
+ download: "Download",
1327
+ upload: "Upload",
1328
+ filter: "Filter",
1329
+ calendar: "Calendar",
1330
+ clock: "Clock",
1331
+ bell: "Bell",
1332
+ mail: "Envelope",
1333
+ envelope: "Envelope",
1334
+ lock: "Lock",
1335
+ unlock: "LockOpen",
1336
+ eye: "Eye",
1337
+ "eye-off": "EyeSlash",
1338
+ more: "EllipsisH",
1339
+ "more-vertical": "EllipsisV",
1340
+ info: "InfoCircle",
1341
+ warning: "ExclamationTriangle"
1342
+ };
1343
+ warned = /* @__PURE__ */ new Set();
1344
+ }
1345
+ });
1346
+ function kebabToPascal2(name) {
1347
+ return name.split("-").map((part) => {
1348
+ if (/^\d+$/.test(part)) return part;
1349
+ return part.charAt(0).toUpperCase() + part.slice(1);
1350
+ }).join("");
1351
+ }
983
1352
  function resolveIcon(name) {
984
1353
  const cached = resolvedCache.get(name);
985
1354
  if (cached) return cached;
@@ -989,28 +1358,30 @@ function resolveIcon(name) {
989
1358
  }
990
1359
  function doResolve(name) {
991
1360
  if (iconAliases[name]) return iconAliases[name];
992
- const pascalName = kebabToPascal(name);
993
- const directLookup = LucideIcons[pascalName];
1361
+ const pascalName = kebabToPascal2(name);
1362
+ const directLookup = LucideIcons2[pascalName];
994
1363
  if (directLookup && typeof directLookup === "object") return directLookup;
995
- const asIs = LucideIcons[name];
1364
+ const asIs = LucideIcons2[name];
996
1365
  if (asIs && typeof asIs === "object") return asIs;
997
- return LucideIcons.HelpCircle;
1366
+ return LucideIcons2.HelpCircle;
998
1367
  }
999
1368
  var iconAliases, resolvedCache, sizeClasses, animationClasses, Icon;
1000
1369
  var init_Icon = __esm({
1001
1370
  "components/atoms/Icon.tsx"() {
1371
+ "use client";
1002
1372
  init_cn();
1373
+ init_iconFamily();
1003
1374
  iconAliases = {
1004
- "close": LucideIcons.X,
1005
- "trash": LucideIcons.Trash2,
1006
- "loader": LucideIcons.Loader2,
1007
- "stop": LucideIcons.Square,
1008
- "volume": LucideIcons.Volume2,
1009
- "volume-off": LucideIcons.VolumeX,
1010
- "refresh": LucideIcons.RefreshCw,
1011
- "share": LucideIcons.Share2,
1012
- "sort-asc": LucideIcons.ArrowUpNarrowWide,
1013
- "sort-desc": LucideIcons.ArrowDownNarrowWide
1375
+ "close": LucideIcons2.X,
1376
+ "trash": LucideIcons2.Trash2,
1377
+ "loader": LucideIcons2.Loader2,
1378
+ "stop": LucideIcons2.Square,
1379
+ "volume": LucideIcons2.Volume2,
1380
+ "volume-off": LucideIcons2.VolumeX,
1381
+ "refresh": LucideIcons2.RefreshCw,
1382
+ "share": LucideIcons2.Share2,
1383
+ "sort-asc": LucideIcons2.ArrowUpNarrowWide,
1384
+ "sort-desc": LucideIcons2.ArrowDownNarrowWide
1014
1385
  };
1015
1386
  resolvedCache = /* @__PURE__ */ new Map();
1016
1387
  sizeClasses = {
@@ -1035,22 +1406,50 @@ var init_Icon = __esm({
1035
1406
  strokeWidth,
1036
1407
  style
1037
1408
  }) => {
1038
- const IconComponent = icon ?? (name ? resolveIcon(name) : LucideIcons.HelpCircle);
1409
+ const family = useIconFamily();
1410
+ const RenderedComponent = React85__default.useMemo(() => {
1411
+ if (icon) return null;
1412
+ return name ? resolveIconForFamily(name, family) : null;
1413
+ }, [icon, name, family]);
1039
1414
  const effectiveStrokeWidth = strokeWidth ?? void 0;
1415
+ const inlineStyle = {
1416
+ ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
1417
+ ...style
1418
+ };
1419
+ const composedClassName = cn(
1420
+ sizeClasses[size],
1421
+ animationClasses[animation],
1422
+ color ? color : "text-current",
1423
+ className
1424
+ );
1425
+ if (icon) {
1426
+ const Direct = icon;
1427
+ return /* @__PURE__ */ jsx(
1428
+ Direct,
1429
+ {
1430
+ className: composedClassName,
1431
+ strokeWidth: effectiveStrokeWidth,
1432
+ style: inlineStyle
1433
+ }
1434
+ );
1435
+ }
1436
+ if (RenderedComponent) {
1437
+ return /* @__PURE__ */ jsx(
1438
+ RenderedComponent,
1439
+ {
1440
+ className: composedClassName,
1441
+ strokeWidth: effectiveStrokeWidth,
1442
+ style: inlineStyle
1443
+ }
1444
+ );
1445
+ }
1446
+ const Fallback = LucideIcons2.HelpCircle;
1040
1447
  return /* @__PURE__ */ jsx(
1041
- IconComponent,
1448
+ Fallback,
1042
1449
  {
1043
- className: cn(
1044
- sizeClasses[size],
1045
- animationClasses[animation],
1046
- color ? color : "text-current",
1047
- className
1048
- ),
1450
+ className: composedClassName,
1049
1451
  strokeWidth: effectiveStrokeWidth,
1050
- style: {
1051
- ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
1052
- ...style
1053
- }
1452
+ style: inlineStyle
1054
1453
  }
1055
1454
  );
1056
1455
  };
@@ -1060,14 +1459,13 @@ var init_Icon = __esm({
1060
1459
  function resolveIconProp(value, sizeClass) {
1061
1460
  if (!value) return null;
1062
1461
  if (typeof value === "string") {
1063
- const Resolved = resolveIcon(value);
1064
- return Resolved ? /* @__PURE__ */ jsx(Resolved, { className: sizeClass }) : null;
1462
+ return /* @__PURE__ */ jsx(Icon, { name: value, className: sizeClass });
1065
1463
  }
1066
1464
  if (typeof value === "function") {
1067
1465
  const IconComp = value;
1068
1466
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
1069
1467
  }
1070
- if (React83__default.isValidElement(value)) {
1468
+ if (React85__default.isValidElement(value)) {
1071
1469
  return value;
1072
1470
  }
1073
1471
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -1140,10 +1538,10 @@ var init_Button = __esm({
1140
1538
  };
1141
1539
  iconSizeStyles = {
1142
1540
  sm: "h-3.5 w-3.5",
1143
- md: "h-4 w-4",
1541
+ md: "h-icon-default w-icon-default",
1144
1542
  lg: "h-5 w-5"
1145
1543
  };
1146
- Button = React83__default.forwardRef(
1544
+ Button = React85__default.forwardRef(
1147
1545
  ({
1148
1546
  className,
1149
1547
  variant = "primary",
@@ -1193,7 +1591,7 @@ var init_Button = __esm({
1193
1591
  ...props,
1194
1592
  "data-testid": props["data-testid"] ?? (action ? `action-${action}` : void 0),
1195
1593
  children: [
1196
- isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : resolvedLeftIcon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedLeftIcon }),
1594
+ isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "h-icon-default w-icon-default animate-spin" }) : resolvedLeftIcon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedLeftIcon }),
1197
1595
  children || label,
1198
1596
  resolvedRightIcon && !isLoading && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedRightIcon })
1199
1597
  ]
@@ -1208,7 +1606,7 @@ var Dialog;
1208
1606
  var init_Dialog = __esm({
1209
1607
  "components/atoms/Dialog.tsx"() {
1210
1608
  init_cn();
1211
- Dialog = React83__default.forwardRef(
1609
+ Dialog = React85__default.forwardRef(
1212
1610
  ({
1213
1611
  role = "dialog",
1214
1612
  "aria-modal": ariaModal = true,
@@ -1543,7 +1941,7 @@ var init_Modal = __esm({
1543
1941
  // Reset browser-default dialog chrome — we own styling.
1544
1942
  "m-0 p-0 border-0 bg-transparent",
1545
1943
  // Pre-existing dialog frame
1546
- "pointer-events-auto w-full flex flex-col bg-surface border shadow-lg rounded-md",
1944
+ "pointer-events-auto w-full flex flex-col bg-surface border shadow-elevation-dialog rounded-container",
1547
1945
  // Desktop sizing + viewport-aware floor.
1548
1946
  sizeClasses2[size],
1549
1947
  minWidthClasses[size],
@@ -1603,7 +2001,7 @@ var init_Modal = __esm({
1603
2001
  {
1604
2002
  variant: "ghost",
1605
2003
  size: "sm",
1606
- icon: X,
2004
+ icon: "x",
1607
2005
  onClick: handleClose,
1608
2006
  "data-event": "CLOSE",
1609
2007
  "aria-label": "Close modal"
@@ -1760,7 +2158,7 @@ var init_Drawer = __esm({
1760
2158
  {
1761
2159
  variant: "ghost",
1762
2160
  size: "sm",
1763
- icon: X,
2161
+ icon: "x",
1764
2162
  onClick: handleClose,
1765
2163
  "aria-label": "Close drawer",
1766
2164
  className: cn(!title && "ml-auto")
@@ -1854,13 +2252,10 @@ var init_Badge = __esm({
1854
2252
  md: "px-2.5 py-1 text-sm",
1855
2253
  lg: "px-3 py-1.5 text-base"
1856
2254
  };
1857
- Badge = React83__default.forwardRef(
2255
+ Badge = React85__default.forwardRef(
1858
2256
  ({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
1859
2257
  const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
1860
- const resolvedIcon = typeof icon === "string" ? (() => {
1861
- const I = resolveIcon(icon);
1862
- return I ? /* @__PURE__ */ jsx(I, { className: iconSizes3[size] }) : null;
1863
- })() : icon;
2258
+ const resolvedIcon = typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: iconSizes3[size] }) : icon;
1864
2259
  return /* @__PURE__ */ jsxs(
1865
2260
  "span",
1866
2261
  {
@@ -1920,10 +2315,10 @@ var init_Toast = __esm({
1920
2315
  warning: "bg-card border-[length:var(--border-width)] border-warning"
1921
2316
  };
1922
2317
  iconMap = {
1923
- success: CheckCircle,
1924
- error: AlertCircle,
1925
- info: Info,
1926
- warning: AlertTriangle
2318
+ success: "check-circle",
2319
+ error: "alert-circle",
2320
+ info: "info",
2321
+ warning: "alert-triangle"
1927
2322
  };
1928
2323
  iconColors = {
1929
2324
  success: "text-success",
@@ -1970,7 +2365,7 @@ var init_Toast = __esm({
1970
2365
  // `min-w-[300px]` only kicks in at `sm:` and above so a phone
1971
2366
  // viewport doesn't get a toast wider than the screen near the
1972
2367
  // edge. `max-w-[calc(100vw-2rem)]` clamps to viewport too.
1973
- "border-l-4 p-4 shadow min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
2368
+ "border-l-4 p-4 shadow-elevation-toast min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
1974
2369
  "rounded-sm",
1975
2370
  variantClasses[variant],
1976
2371
  className
@@ -1980,7 +2375,7 @@ var init_Toast = __esm({
1980
2375
  /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
1981
2376
  Icon,
1982
2377
  {
1983
- icon: iconMap[variant],
2378
+ name: iconMap[variant],
1984
2379
  size: "md",
1985
2380
  className: iconColors[variant]
1986
2381
  }
@@ -1997,7 +2392,7 @@ var init_Toast = __esm({
1997
2392
  {
1998
2393
  variant: "ghost",
1999
2394
  size: "sm",
2000
- icon: X,
2395
+ icon: "x",
2001
2396
  onClick: handleDismiss,
2002
2397
  "aria-label": "Dismiss toast",
2003
2398
  className: "flex-shrink-0"
@@ -2168,7 +2563,7 @@ var init_SvgFlow = __esm({
2168
2563
  opacity = 1,
2169
2564
  className
2170
2565
  }) => {
2171
- const markerId = React83__default.useMemo(() => {
2566
+ const markerId = React85__default.useMemo(() => {
2172
2567
  flowIdCounter += 1;
2173
2568
  return `almadar-flow-arrow-${flowIdCounter}`;
2174
2569
  }, []);
@@ -2711,7 +3106,7 @@ var init_SvgRing = __esm({
2711
3106
  className,
2712
3107
  label
2713
3108
  }) => {
2714
- const gradientId = React83__default.useMemo(() => {
3109
+ const gradientId = React85__default.useMemo(() => {
2715
3110
  ringIdCounter += 1;
2716
3111
  return `almadar-ring-glow-${ringIdCounter}`;
2717
3112
  }, []);
@@ -2872,7 +3267,8 @@ var Input;
2872
3267
  var init_Input = __esm({
2873
3268
  "components/atoms/Input.tsx"() {
2874
3269
  init_cn();
2875
- Input = React83__default.forwardRef(
3270
+ init_Icon();
3271
+ Input = React85__default.forwardRef(
2876
3272
  ({
2877
3273
  className,
2878
3274
  inputType,
@@ -2890,7 +3286,7 @@ var init_Input = __esm({
2890
3286
  ...props
2891
3287
  }, ref) => {
2892
3288
  const type = inputType || htmlType || "text";
2893
- const resolvedLeftIcon = leftIcon || IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "h-4 w-4" });
3289
+ const resolvedLeftIcon = leftIcon || IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "h-icon-default w-icon-default" });
2894
3290
  const showClearButton = clearable && value && String(value).length > 0;
2895
3291
  const baseClassName = cn(
2896
3292
  "block w-full rounded-sm transition-all duration-[var(--transition-fast)]",
@@ -2922,7 +3318,7 @@ var init_Input = __esm({
2922
3318
  ]
2923
3319
  }
2924
3320
  ),
2925
- /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none text-muted-foreground", children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4" }) })
3321
+ /* @__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" }) })
2926
3322
  ] });
2927
3323
  }
2928
3324
  if (type === "textarea") {
@@ -2976,7 +3372,7 @@ var init_Input = __esm({
2976
3372
  type: "button",
2977
3373
  onClick: onClear,
2978
3374
  className: "absolute inset-y-0 right-0 pr-3 flex items-center text-muted-foreground hover:text-foreground",
2979
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
3375
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-icon-default w-icon-default" })
2980
3376
  }
2981
3377
  ),
2982
3378
  rightIcon && !showClearButton && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center text-muted-foreground", children: rightIcon })
@@ -2990,7 +3386,7 @@ var Label;
2990
3386
  var init_Label = __esm({
2991
3387
  "components/atoms/Label.tsx"() {
2992
3388
  init_cn();
2993
- Label = React83__default.forwardRef(
3389
+ Label = React85__default.forwardRef(
2994
3390
  ({ className, required, children, ...props }, ref) => {
2995
3391
  return /* @__PURE__ */ jsxs(
2996
3392
  "label",
@@ -3016,7 +3412,7 @@ var Textarea;
3016
3412
  var init_Textarea = __esm({
3017
3413
  "components/atoms/Textarea.tsx"() {
3018
3414
  init_cn();
3019
- Textarea = React83__default.forwardRef(
3415
+ Textarea = React85__default.forwardRef(
3020
3416
  ({ className, error, ...props }, ref) => {
3021
3417
  return /* @__PURE__ */ jsx(
3022
3418
  "textarea",
@@ -3045,7 +3441,8 @@ var Select;
3045
3441
  var init_Select = __esm({
3046
3442
  "components/atoms/Select.tsx"() {
3047
3443
  init_cn();
3048
- Select = React83__default.forwardRef(
3444
+ init_Icon();
3445
+ Select = React85__default.forwardRef(
3049
3446
  ({ className, options, placeholder, error, ...props }, ref) => {
3050
3447
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
3051
3448
  /* @__PURE__ */ jsxs(
@@ -3076,7 +3473,7 @@ var init_Select = __esm({
3076
3473
  ]
3077
3474
  }
3078
3475
  ),
3079
- /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none", children: /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 text-foreground" }) })
3476
+ /* @__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" }) })
3080
3477
  ] });
3081
3478
  }
3082
3479
  );
@@ -3087,7 +3484,7 @@ var Checkbox;
3087
3484
  var init_Checkbox = __esm({
3088
3485
  "components/atoms/Checkbox.tsx"() {
3089
3486
  init_cn();
3090
- Checkbox = React83__default.forwardRef(
3487
+ Checkbox = React85__default.forwardRef(
3091
3488
  ({ className, label, id, ...props }, ref) => {
3092
3489
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
3093
3490
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -3129,23 +3526,23 @@ var init_Card = __esm({
3129
3526
  default: [
3130
3527
  "bg-card",
3131
3528
  "border-[length:var(--border-width)] border-border",
3132
- "shadow-sm",
3529
+ "shadow-elevation-card",
3133
3530
  "transition-all duration-[var(--transition-normal)]",
3134
- "hover:shadow-lg hover:-translate-y-0.5"
3531
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
3135
3532
  ].join(" "),
3136
3533
  bordered: [
3137
3534
  "bg-card",
3138
3535
  "border-[length:var(--border-width)] border-border",
3139
- "shadow-sm",
3536
+ "shadow-elevation-card",
3140
3537
  "transition-all duration-[var(--transition-normal)]",
3141
- "hover:shadow-lg hover:-translate-y-0.5"
3538
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
3142
3539
  ].join(" "),
3143
3540
  elevated: [
3144
3541
  "bg-card",
3145
3542
  "border-[length:var(--border-width)] border-border",
3146
3543
  "shadow",
3147
3544
  "transition-all duration-[var(--transition-normal)]",
3148
- "hover:shadow-lg hover:-translate-y-0.5"
3545
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
3149
3546
  ].join(" "),
3150
3547
  // Interactive variant with theme-specific hover effects
3151
3548
  interactive: [
@@ -3154,22 +3551,22 @@ var init_Card = __esm({
3154
3551
  "shadow",
3155
3552
  "cursor-pointer",
3156
3553
  "transition-all duration-[var(--transition-normal)]",
3157
- "hover:shadow-lg"
3554
+ "hover:shadow-elevation-dialog"
3158
3555
  ].join(" ")
3159
3556
  };
3160
3557
  paddingStyles2 = {
3161
3558
  none: "",
3162
- sm: "p-3",
3163
- md: "p-4",
3164
- lg: "p-6"
3559
+ sm: "p-card-sm",
3560
+ md: "p-card-md",
3561
+ lg: "p-card-lg"
3165
3562
  };
3166
3563
  shadowStyles2 = {
3167
3564
  none: "shadow-none",
3168
- sm: "shadow-sm",
3565
+ sm: "shadow-elevation-card",
3169
3566
  md: "shadow",
3170
- lg: "shadow-lg"
3567
+ lg: "shadow-elevation-dialog"
3171
3568
  };
3172
- Card = React83__default.forwardRef(
3569
+ Card = React85__default.forwardRef(
3173
3570
  ({
3174
3571
  className,
3175
3572
  variant = "bordered",
@@ -3185,7 +3582,7 @@ var init_Card = __esm({
3185
3582
  {
3186
3583
  ref,
3187
3584
  className: cn(
3188
- "rounded-md",
3585
+ "rounded-container",
3189
3586
  "transition-all duration-[var(--transition-normal)]",
3190
3587
  variantStyles4[variant],
3191
3588
  paddingStyles2[padding],
@@ -3205,9 +3602,9 @@ var init_Card = __esm({
3205
3602
  }
3206
3603
  );
3207
3604
  Card.displayName = "Card";
3208
- CardHeader = React83__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
3605
+ CardHeader = React85__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
3209
3606
  CardHeader.displayName = "CardHeader";
3210
- CardTitle = React83__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3607
+ CardTitle = React85__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3211
3608
  "h3",
3212
3609
  {
3213
3610
  ref,
@@ -3220,11 +3617,11 @@ var init_Card = __esm({
3220
3617
  }
3221
3618
  ));
3222
3619
  CardTitle.displayName = "CardTitle";
3223
- CardContent = React83__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
3620
+ CardContent = React85__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
3224
3621
  CardContent.displayName = "CardContent";
3225
3622
  CardBody = CardContent;
3226
3623
  CardBody.displayName = "CardBody";
3227
- CardFooter = React83__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3624
+ CardFooter = React85__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
3228
3625
  "div",
3229
3626
  {
3230
3627
  ref,
@@ -3279,7 +3676,7 @@ var init_FilterPill = __esm({
3279
3676
  md: "w-3.5 h-3.5",
3280
3677
  lg: "w-4 h-4"
3281
3678
  };
3282
- FilterPill = React83__default.forwardRef(
3679
+ FilterPill = React85__default.forwardRef(
3283
3680
  ({
3284
3681
  className,
3285
3682
  variant = "default",
@@ -3304,17 +3701,13 @@ var init_FilterPill = __esm({
3304
3701
  onRemove?.();
3305
3702
  if (removeEvent) eventBus.emit(`UI:${removeEvent}`, { label: payloadLabel });
3306
3703
  }, [onRemove, removeEvent, eventBus, payloadLabel]);
3307
- const XIcon = resolveIcon("x");
3308
- const resolvedIcon = typeof icon === "string" ? (() => {
3309
- const I = resolveIcon(icon);
3310
- return I ? /* @__PURE__ */ jsx(I, { className: iconSizes[size] }) : null;
3311
- })() : icon;
3704
+ const resolvedIcon = typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: iconSizes[size] }) : icon;
3312
3705
  return /* @__PURE__ */ jsxs(
3313
3706
  "span",
3314
3707
  {
3315
3708
  ref,
3316
3709
  className: cn(
3317
- "inline-flex items-center gap-1 font-bold rounded-full",
3710
+ "inline-flex items-center gap-1 font-bold rounded-pill",
3318
3711
  variantStyles5[variant],
3319
3712
  sizeStyles4[size],
3320
3713
  (onClick || clickEvent) && "cursor-pointer",
@@ -3337,7 +3730,7 @@ var init_FilterPill = __esm({
3337
3730
  className: cn(
3338
3731
  "ml-0.5 rounded-full hover:bg-foreground/10 transition-colors flex items-center justify-center"
3339
3732
  ),
3340
- children: XIcon ? /* @__PURE__ */ jsx(XIcon, { className: iconSizes[size] }) : /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: "\xD7" })
3733
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: iconSizes[size] })
3341
3734
  }
3342
3735
  )
3343
3736
  ]
@@ -3352,13 +3745,14 @@ var sizeStyles5, Spinner;
3352
3745
  var init_Spinner = __esm({
3353
3746
  "components/atoms/Spinner.tsx"() {
3354
3747
  init_cn();
3748
+ init_Icon();
3355
3749
  sizeStyles5 = {
3356
3750
  xs: "h-3 w-3",
3357
3751
  sm: "h-4 w-4",
3358
3752
  md: "h-6 w-6",
3359
3753
  lg: "h-8 w-8"
3360
3754
  };
3361
- Spinner = React83__default.forwardRef(
3755
+ Spinner = React85__default.forwardRef(
3362
3756
  ({ className, size = "md", ...props }, ref) => {
3363
3757
  return /* @__PURE__ */ jsx(
3364
3758
  "div",
@@ -3366,7 +3760,7 @@ var init_Spinner = __esm({
3366
3760
  ref,
3367
3761
  className: cn("text-foreground", className),
3368
3762
  ...props,
3369
- children: /* @__PURE__ */ jsx(Loader2, { className: cn("animate-spin", sizeStyles5[size]) })
3763
+ children: /* @__PURE__ */ jsx(Icon, { name: "loader", className: cn("animate-spin", sizeStyles5[size]) })
3370
3764
  }
3371
3765
  );
3372
3766
  }
@@ -3385,6 +3779,7 @@ var sizeClasses3, iconSizeClasses, statusSizeClasses, statusClasses, badgeSizeCl
3385
3779
  var init_Avatar = __esm({
3386
3780
  "components/atoms/Avatar.tsx"() {
3387
3781
  "use client";
3782
+ init_Icon();
3388
3783
  init_cn();
3389
3784
  init_useEventBus();
3390
3785
  sizeClasses3 = {
@@ -3415,8 +3810,8 @@ var init_Avatar = __esm({
3415
3810
  busy: "bg-error"
3416
3811
  };
3417
3812
  badgeSizeClasses = {
3418
- xs: "w-3 h-3 text-[8px]",
3419
- sm: "w-4 h-4 text-[10px]",
3813
+ xs: "w-3 h-3 text-xs",
3814
+ sm: "w-4 h-4 text-xs",
3420
3815
  md: "w-5 h-5 text-xs",
3421
3816
  lg: "w-6 h-6 text-sm",
3422
3817
  xl: "w-7 h-7 text-base"
@@ -3426,7 +3821,7 @@ var init_Avatar = __esm({
3426
3821
  alt,
3427
3822
  name,
3428
3823
  initials: providedInitials,
3429
- icon: Icon3,
3824
+ icon: IconComponent,
3430
3825
  size = "md",
3431
3826
  status,
3432
3827
  badge,
@@ -3439,7 +3834,7 @@ var init_Avatar = __esm({
3439
3834
  const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
3440
3835
  const hasImage = !!src;
3441
3836
  const hasInitials = !!initials;
3442
- const hasIcon = !!Icon3;
3837
+ const hasIcon = !!IconComponent;
3443
3838
  const getInitialsBackground = () => "bg-primary text-primary-foreground";
3444
3839
  const isClickable = action || onClick;
3445
3840
  const handleClick = () => {
@@ -3483,8 +3878,8 @@ var init_Avatar = __esm({
3483
3878
  ),
3484
3879
  children: initials.substring(0, 2).toUpperCase()
3485
3880
  }
3486
- ) : hasIcon ? /* @__PURE__ */ jsx(
3487
- Icon3,
3881
+ ) : hasIcon && IconComponent ? /* @__PURE__ */ jsx(
3882
+ IconComponent,
3488
3883
  {
3489
3884
  className: cn(
3490
3885
  "text-foreground",
@@ -3492,8 +3887,9 @@ var init_Avatar = __esm({
3492
3887
  )
3493
3888
  }
3494
3889
  ) : /* @__PURE__ */ jsx(
3495
- User,
3890
+ Icon,
3496
3891
  {
3892
+ name: "user",
3497
3893
  className: cn(
3498
3894
  "text-foreground",
3499
3895
  iconSizeClasses[size]
@@ -3688,7 +4084,7 @@ var init_ProgressBar = __esm({
3688
4084
  "div",
3689
4085
  {
3690
4086
  className: cn(
3691
- "h-full transition-all duration-300 ease-out",
4087
+ "h-full transition-all duration-normal ease-emphasized",
3692
4088
  colorClasses[effectiveColor]
3693
4089
  ),
3694
4090
  style: { width: `${percentage}%` },
@@ -3744,7 +4140,7 @@ var init_ProgressBar = __esm({
3744
4140
  strokeDashoffset: offset,
3745
4141
  strokeLinecap: "round",
3746
4142
  className: cn(
3747
- "transition-all duration-300 ease-out",
4143
+ "transition-all duration-normal ease-emphasized",
3748
4144
  colorClasses[effectiveColor]
3749
4145
  )
3750
4146
  }
@@ -3783,7 +4179,7 @@ var init_ProgressBar = __esm({
3783
4179
  "div",
3784
4180
  {
3785
4181
  className: cn(
3786
- "h-full transition-all duration-300 ease-out",
4182
+ "h-full transition-all duration-normal ease-emphasized",
3787
4183
  (isActive || isPartial) && colorClasses[effectiveColor]
3788
4184
  ),
3789
4185
  style: {
@@ -3806,7 +4202,7 @@ var Radio;
3806
4202
  var init_Radio = __esm({
3807
4203
  "components/atoms/Radio.tsx"() {
3808
4204
  init_cn();
3809
- Radio = React83__default.forwardRef(
4205
+ Radio = React85__default.forwardRef(
3810
4206
  ({
3811
4207
  label,
3812
4208
  helperText,
@@ -3978,7 +4374,7 @@ var init_Switch = __esm({
3978
4374
  "components/atoms/Switch.tsx"() {
3979
4375
  "use client";
3980
4376
  init_cn();
3981
- Switch = React83.forwardRef(
4377
+ Switch = React85.forwardRef(
3982
4378
  ({
3983
4379
  checked,
3984
4380
  defaultChecked = false,
@@ -3989,10 +4385,10 @@ var init_Switch = __esm({
3989
4385
  name,
3990
4386
  className
3991
4387
  }, ref) => {
3992
- const [isChecked, setIsChecked] = React83.useState(
4388
+ const [isChecked, setIsChecked] = React85.useState(
3993
4389
  checked !== void 0 ? checked : defaultChecked
3994
4390
  );
3995
- React83.useEffect(() => {
4391
+ React85.useEffect(() => {
3996
4392
  if (checked !== void 0) {
3997
4393
  setIsChecked(checked);
3998
4394
  }
@@ -4368,6 +4764,37 @@ var init_ThemeContext = __esm({
4368
4764
  displayName: "Copper",
4369
4765
  hasLightMode: true,
4370
4766
  hasDarkMode: true
4767
+ },
4768
+ // Layer 1 skin axes — truly-unique themes (compact tech / editorial / brutalist dense / display-heavy / touch-first)
4769
+ {
4770
+ name: "prism",
4771
+ displayName: "Prism",
4772
+ hasLightMode: true,
4773
+ hasDarkMode: true
4774
+ },
4775
+ {
4776
+ name: "gazette",
4777
+ displayName: "Gazette",
4778
+ hasLightMode: true,
4779
+ hasDarkMode: true
4780
+ },
4781
+ {
4782
+ name: "terminal",
4783
+ displayName: "Terminal",
4784
+ hasLightMode: true,
4785
+ hasDarkMode: true
4786
+ },
4787
+ {
4788
+ name: "atelier",
4789
+ displayName: "Atelier",
4790
+ hasLightMode: true,
4791
+ hasDarkMode: true
4792
+ },
4793
+ {
4794
+ name: "kiosk",
4795
+ displayName: "Kiosk",
4796
+ hasLightMode: true,
4797
+ hasDarkMode: true
4371
4798
  }
4372
4799
  ];
4373
4800
  ThemeContext = createContext(void 0);
@@ -4377,6 +4804,7 @@ var sizeClasses4, iconSizes2, ThemeToggle;
4377
4804
  var init_ThemeToggle = __esm({
4378
4805
  "components/atoms/ThemeToggle.tsx"() {
4379
4806
  "use client";
4807
+ init_Icon();
4380
4808
  init_cn();
4381
4809
  init_ThemeContext();
4382
4810
  sizeClasses4 = {
@@ -4406,7 +4834,7 @@ var init_ThemeToggle = __esm({
4406
4834
  "text-foreground",
4407
4835
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
4408
4836
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
4409
- "transition-colors duration-200",
4837
+ "transition-colors duration-fast",
4410
4838
  sizeClasses4[size],
4411
4839
  className
4412
4840
  ),
@@ -4414,13 +4842,15 @@ var init_ThemeToggle = __esm({
4414
4842
  title: isDark ? "Switch to light mode" : "Switch to dark mode",
4415
4843
  children: [
4416
4844
  isDark ? /* @__PURE__ */ jsx(
4417
- Sun,
4845
+ Icon,
4418
4846
  {
4847
+ name: "sun",
4419
4848
  className: cn(iconSizes2[size], "text-foreground")
4420
4849
  }
4421
4850
  ) : /* @__PURE__ */ jsx(
4422
- Moon,
4851
+ Icon,
4423
4852
  {
4853
+ name: "moon",
4424
4854
  className: cn(iconSizes2[size], "text-foreground")
4425
4855
  }
4426
4856
  ),
@@ -4453,7 +4883,7 @@ var init_FlipContainer = __esm({
4453
4883
  children: /* @__PURE__ */ jsx(
4454
4884
  Box,
4455
4885
  {
4456
- className: "relative w-full h-full transition-transform duration-500",
4886
+ className: "relative w-full h-full transition-transform duration-slow",
4457
4887
  style: {
4458
4888
  transformStyle: "preserve-3d",
4459
4889
  transform: flipped ? "rotateY(180deg)" : "rotateY(0deg)"
@@ -4471,7 +4901,7 @@ var Aside;
4471
4901
  var init_Aside = __esm({
4472
4902
  "components/atoms/Aside.tsx"() {
4473
4903
  init_cn();
4474
- Aside = React83__default.forwardRef(
4904
+ Aside = React85__default.forwardRef(
4475
4905
  ({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
4476
4906
  );
4477
4907
  Aside.displayName = "Aside";
@@ -4511,7 +4941,7 @@ var init_ConditionalWrapper = __esm({
4511
4941
  Box,
4512
4942
  {
4513
4943
  overflow: "hidden",
4514
- className: `transition-all duration-200 ${isVisible ? "opacity-100 max-h-[1000px]" : "opacity-0 max-h-0"}`,
4944
+ className: `transition-all duration-fast ${isVisible ? "opacity-100 max-h-[1000px]" : "opacity-0 max-h-0"}`,
4515
4945
  children: isVisible ? children : fallback
4516
4946
  }
4517
4947
  );
@@ -4548,8 +4978,8 @@ var init_LawReferenceTooltip = __esm({
4548
4978
  position = "top",
4549
4979
  className
4550
4980
  }) => {
4551
- const [isVisible, setIsVisible] = React83__default.useState(false);
4552
- const timeoutRef = React83__default.useRef(null);
4981
+ const [isVisible, setIsVisible] = React85__default.useState(false);
4982
+ const timeoutRef = React85__default.useRef(null);
4553
4983
  const handleMouseEnter = () => {
4554
4984
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4555
4985
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -4558,7 +4988,7 @@ var init_LawReferenceTooltip = __esm({
4558
4988
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4559
4989
  setIsVisible(false);
4560
4990
  };
4561
- React83__default.useEffect(() => {
4991
+ React85__default.useEffect(() => {
4562
4992
  return () => {
4563
4993
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4564
4994
  };
@@ -4768,7 +5198,7 @@ var init_StatusDot = __esm({
4768
5198
  md: "w-2.5 h-2.5",
4769
5199
  lg: "w-3 h-3"
4770
5200
  };
4771
- StatusDot = React83__default.forwardRef(
5201
+ StatusDot = React85__default.forwardRef(
4772
5202
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
4773
5203
  return /* @__PURE__ */ jsx(
4774
5204
  "span",
@@ -4807,21 +5237,22 @@ function resolveColor(dir, invert) {
4807
5237
  const isGood = invert ? !isPositive : isPositive;
4808
5238
  return isGood ? "text-success" : "text-error";
4809
5239
  }
4810
- var sizeStyles7, iconMap2, TrendIndicator;
5240
+ var sizeStyles7, iconNameMap, TrendIndicator;
4811
5241
  var init_TrendIndicator = __esm({
4812
5242
  "components/atoms/TrendIndicator.tsx"() {
5243
+ init_Icon();
4813
5244
  init_cn();
4814
5245
  sizeStyles7 = {
4815
5246
  sm: { icon: "w-3 h-3", text: "text-xs" },
4816
5247
  md: { icon: "w-4 h-4", text: "text-sm" },
4817
5248
  lg: { icon: "w-5 h-5", text: "text-base" }
4818
5249
  };
4819
- iconMap2 = {
4820
- up: TrendingUp,
4821
- down: TrendingDown,
4822
- flat: ArrowRight
5250
+ iconNameMap = {
5251
+ up: "trending-up",
5252
+ down: "trending-down",
5253
+ flat: "arrow-right"
4823
5254
  };
4824
- TrendIndicator = React83__default.forwardRef(
5255
+ TrendIndicator = React85__default.forwardRef(
4825
5256
  ({
4826
5257
  className,
4827
5258
  value,
@@ -4834,7 +5265,7 @@ var init_TrendIndicator = __esm({
4834
5265
  }, ref) => {
4835
5266
  const dir = resolveDirection(value, direction);
4836
5267
  const colorClass = resolveColor(dir, invert);
4837
- const IconComponent = iconMap2[dir];
5268
+ const iconName = iconNameMap[dir];
4838
5269
  const styles = sizeStyles7[size];
4839
5270
  const formattedValue = value !== void 0 ? `${value > 0 ? "+" : ""}${value}%` : void 0;
4840
5271
  const ariaLabel = label ?? (formattedValue ? `${dir} ${formattedValue}` : dir);
@@ -4852,7 +5283,7 @@ var init_TrendIndicator = __esm({
4852
5283
  "aria-label": ariaLabel,
4853
5284
  ...props,
4854
5285
  children: [
4855
- /* @__PURE__ */ jsx(IconComponent, { className: styles.icon }),
5286
+ /* @__PURE__ */ jsx(Icon, { name: iconName, className: styles.icon }),
4856
5287
  showValue && formattedValue && /* @__PURE__ */ jsx("span", { children: formattedValue })
4857
5288
  ]
4858
5289
  }
@@ -4888,7 +5319,7 @@ var init_RangeSlider = __esm({
4888
5319
  md: "w-4 h-4",
4889
5320
  lg: "w-5 h-5"
4890
5321
  };
4891
- RangeSlider = React83__default.forwardRef(
5322
+ RangeSlider = React85__default.forwardRef(
4892
5323
  ({
4893
5324
  className,
4894
5325
  min = 0,
@@ -5421,7 +5852,7 @@ var init_ContentSection = __esm({
5421
5852
  md: "py-16",
5422
5853
  lg: "py-24"
5423
5854
  };
5424
- ContentSection = React83__default.forwardRef(
5855
+ ContentSection = React85__default.forwardRef(
5425
5856
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
5426
5857
  return /* @__PURE__ */ jsx(
5427
5858
  Box,
@@ -5955,7 +6386,7 @@ var init_AnimatedReveal = __esm({
5955
6386
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
5956
6387
  "none": {}
5957
6388
  };
5958
- AnimatedReveal = React83__default.forwardRef(
6389
+ AnimatedReveal = React85__default.forwardRef(
5959
6390
  ({
5960
6391
  trigger = "scroll",
5961
6392
  animation = "fade-up",
@@ -5985,7 +6416,7 @@ var init_AnimatedReveal = __esm({
5985
6416
  if (trigger !== "scroll") return;
5986
6417
  const el = internalRef.current;
5987
6418
  if (!el) return;
5988
- const observer = new IntersectionObserver(
6419
+ const observer2 = new IntersectionObserver(
5989
6420
  ([entry]) => {
5990
6421
  if (entry.isIntersecting) {
5991
6422
  if (once && hasAnimated.current) return;
@@ -5997,8 +6428,8 @@ var init_AnimatedReveal = __esm({
5997
6428
  },
5998
6429
  { threshold }
5999
6430
  );
6000
- observer.observe(el);
6001
- return () => observer.disconnect();
6431
+ observer2.observe(el);
6432
+ return () => observer2.disconnect();
6002
6433
  }, [trigger, threshold, once]);
6003
6434
  const handleMouseEnter = trigger === "hover" ? () => setIsAnimated(true) : void 0;
6004
6435
  const handleMouseLeave = trigger === "hover" ? () => {
@@ -6115,7 +6546,7 @@ var init_AnimatedGraphic = __esm({
6115
6546
  "components/atoms/AnimatedGraphic.tsx"() {
6116
6547
  "use client";
6117
6548
  init_cn();
6118
- AnimatedGraphic = React83__default.forwardRef(
6549
+ AnimatedGraphic = React85__default.forwardRef(
6119
6550
  ({
6120
6551
  src,
6121
6552
  svgContent,
@@ -6138,7 +6569,7 @@ var init_AnimatedGraphic = __esm({
6138
6569
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
6139
6570
  const resolvedSvg = svgContent ?? fetchedSvg;
6140
6571
  const prevAnimateRef = useRef(animate);
6141
- const setRef = React83__default.useCallback(
6572
+ const setRef = React85__default.useCallback(
6142
6573
  (node) => {
6143
6574
  containerRef.current = node;
6144
6575
  if (typeof ref === "function") ref(node);
@@ -6363,9 +6794,9 @@ function ScoreDisplay({
6363
6794
  ...rest
6364
6795
  }) {
6365
6796
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
6366
- const [displayValue, setDisplayValue] = React83.useState(resolvedValue);
6367
- const [isAnimating, setIsAnimating] = React83.useState(false);
6368
- React83.useEffect(() => {
6797
+ const [displayValue, setDisplayValue] = React85.useState(resolvedValue);
6798
+ const [isAnimating, setIsAnimating] = React85.useState(false);
6799
+ React85.useEffect(() => {
6369
6800
  if (!animated || displayValue === resolvedValue) {
6370
6801
  setDisplayValue(resolvedValue);
6371
6802
  return;
@@ -6435,9 +6866,9 @@ function ControlButton({
6435
6866
  className
6436
6867
  }) {
6437
6868
  const eventBus = useEventBus();
6438
- const [isPressed, setIsPressed] = React83.useState(false);
6869
+ const [isPressed, setIsPressed] = React85.useState(false);
6439
6870
  const actualPressed = pressed ?? isPressed;
6440
- const handlePointerDown = React83.useCallback(
6871
+ const handlePointerDown = React85.useCallback(
6441
6872
  (e) => {
6442
6873
  e.preventDefault();
6443
6874
  if (disabled) return;
@@ -6447,7 +6878,7 @@ function ControlButton({
6447
6878
  },
6448
6879
  [disabled, pressEvent, eventBus, onPress]
6449
6880
  );
6450
- const handlePointerUp = React83.useCallback(
6881
+ const handlePointerUp = React85.useCallback(
6451
6882
  (e) => {
6452
6883
  e.preventDefault();
6453
6884
  if (disabled) return;
@@ -6457,7 +6888,7 @@ function ControlButton({
6457
6888
  },
6458
6889
  [disabled, releaseEvent, eventBus, onRelease]
6459
6890
  );
6460
- const handlePointerLeave = React83.useCallback(
6891
+ const handlePointerLeave = React85.useCallback(
6461
6892
  (e) => {
6462
6893
  if (isPressed) {
6463
6894
  setIsPressed(false);
@@ -7363,9 +7794,9 @@ function MiniMap({
7363
7794
  viewportRect,
7364
7795
  className
7365
7796
  }) {
7366
- const canvasRef = React83.useRef(null);
7367
- const frameRef = React83.useRef(0);
7368
- React83.useEffect(() => {
7797
+ const canvasRef = React85.useRef(null);
7798
+ const frameRef = React85.useRef(0);
7799
+ React85.useEffect(() => {
7369
7800
  const canvas = canvasRef.current;
7370
7801
  if (!canvas) return;
7371
7802
  const ctx = canvas.getContext("2d");
@@ -7484,6 +7915,7 @@ var init_ErrorState = __esm({
7484
7915
  init_Box();
7485
7916
  init_Stack();
7486
7917
  init_Typography();
7918
+ init_Icon();
7487
7919
  init_useEventBus();
7488
7920
  init_useTranslate();
7489
7921
  ErrorState = ({
@@ -7511,7 +7943,7 @@ var init_ErrorState = __esm({
7511
7943
  className
7512
7944
  ),
7513
7945
  children: [
7514
- /* @__PURE__ */ jsx(Box, { className: "mb-4 rounded-full bg-error/10 p-3", children: /* @__PURE__ */ jsx(AlertCircle, { className: "h-8 w-8 text-error" }) }),
7946
+ /* @__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" }) }),
7515
7947
  /* @__PURE__ */ jsx(Typography, { variant: "h3", className: "text-lg font-medium text-foreground", children: resolvedTitle }),
7516
7948
  /* @__PURE__ */ jsx(Typography, { variant: "small", className: "mt-1 text-muted-foreground max-w-sm", children: resolvedMessage }),
7517
7949
  (onRetry || retryEvent) && /* @__PURE__ */ jsx(Button, { variant: "secondary", className: "mt-4", onClick: handleRetry, children: t("error.retry") })
@@ -7528,7 +7960,7 @@ var init_ErrorBoundary = __esm({
7528
7960
  "use client";
7529
7961
  init_cn();
7530
7962
  init_ErrorState();
7531
- ErrorBoundary = class extends React83__default.Component {
7963
+ ErrorBoundary = class extends React85__default.Component {
7532
7964
  constructor(props) {
7533
7965
  super(props);
7534
7966
  __publicField(this, "reset", () => {
@@ -7899,7 +8331,7 @@ var init_InstallBox = __esm({
7899
8331
  /* @__PURE__ */ jsx(
7900
8332
  Box,
7901
8333
  {
7902
- className: "bg-surface rounded-md border-[length:var(--border-width)] border-border",
8334
+ className: "bg-surface rounded-container border-[length:var(--border-width)] border-border",
7903
8335
  padding: "md",
7904
8336
  children: /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-3", children: [
7905
8337
  /* @__PURE__ */ jsx(
@@ -8453,7 +8885,7 @@ var init_AboutPageTemplate = __esm({
8453
8885
  AboutPageTemplate.displayName = "AboutPageTemplate";
8454
8886
  }
8455
8887
  });
8456
- var variantBorderClasses, variantIconColors, iconMap3, Alert;
8888
+ var variantBorderClasses, variantIconColors, iconMap2, Alert;
8457
8889
  var init_Alert = __esm({
8458
8890
  "components/molecules/Alert.tsx"() {
8459
8891
  "use client";
@@ -8474,11 +8906,11 @@ var init_Alert = __esm({
8474
8906
  warning: "text-warning",
8475
8907
  error: "text-error"
8476
8908
  };
8477
- iconMap3 = {
8478
- info: Info,
8479
- success: CheckCircle,
8480
- warning: AlertTriangle,
8481
- error: AlertCircle
8909
+ iconMap2 = {
8910
+ info: "info",
8911
+ success: "check-circle",
8912
+ warning: "alert-triangle",
8913
+ error: "alert-circle"
8482
8914
  };
8483
8915
  Alert = ({
8484
8916
  children,
@@ -8513,7 +8945,7 @@ var init_Alert = __esm({
8513
8945
  /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
8514
8946
  Icon,
8515
8947
  {
8516
- icon: iconMap3[variant],
8948
+ name: iconMap2[variant],
8517
8949
  size: "md",
8518
8950
  className: variantIconColors[variant]
8519
8951
  }
@@ -8533,7 +8965,7 @@ var init_Alert = __esm({
8533
8965
  "hover:bg-muted"
8534
8966
  ),
8535
8967
  "aria-label": "Dismiss alert",
8536
- children: /* @__PURE__ */ jsx(Icon, { icon: X, size: "sm" })
8968
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "sm" })
8537
8969
  }
8538
8970
  )
8539
8971
  ] })
@@ -8609,8 +9041,8 @@ var init_Tooltip = __esm({
8609
9041
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
8610
9042
  };
8611
9043
  }, []);
8612
- const triggerElement = React83__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
8613
- const trigger = React83__default.cloneElement(triggerElement, {
9044
+ const triggerElement = React85__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
9045
+ const trigger = React85__default.cloneElement(triggerElement, {
8614
9046
  ref: triggerRef,
8615
9047
  onMouseEnter: handleMouseEnter,
8616
9048
  onMouseLeave: handleMouseLeave,
@@ -8624,7 +9056,7 @@ var init_Tooltip = __esm({
8624
9056
  className: cn(
8625
9057
  "fixed z-50 px-3 py-2 max-w-xs",
8626
9058
  "bg-primary text-primary-foreground",
8627
- "shadow-sm rounded-sm",
9059
+ "shadow-elevation-popover rounded-sm",
8628
9060
  "text-sm pointer-events-none",
8629
9061
  "break-words whitespace-normal",
8630
9062
  "h-auto min-h-fit",
@@ -8765,8 +9197,8 @@ var init_Popover = __esm({
8765
9197
  onMouseEnter: handleOpen,
8766
9198
  onMouseLeave: handleClose
8767
9199
  };
8768
- const childElement = React83__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
8769
- const triggerElement = React83__default.cloneElement(
9200
+ const childElement = React85__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
9201
+ const triggerElement = React85__default.cloneElement(
8770
9202
  childElement,
8771
9203
  {
8772
9204
  ref: triggerRef,
@@ -8779,7 +9211,7 @@ var init_Popover = __esm({
8779
9211
  ref: popoverRef,
8780
9212
  className: cn(
8781
9213
  "fixed z-50 p-4",
8782
- "bg-card border-2 border-border shadow-lg",
9214
+ "bg-card border-2 border-border shadow-elevation-popover",
8783
9215
  positionClasses2[position],
8784
9216
  className
8785
9217
  ),
@@ -8882,8 +9314,8 @@ var init_Menu = __esm({
8882
9314
  "bottom-start": "top-full left-0 mt-2",
8883
9315
  "bottom-end": "top-full right-0 mt-2"
8884
9316
  };
8885
- const triggerChild = React83__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
8886
- const triggerElement = React83__default.cloneElement(
9317
+ const triggerChild = React85__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
9318
+ const triggerElement = React85__default.cloneElement(
8887
9319
  triggerChild,
8888
9320
  {
8889
9321
  ref: triggerRef,
@@ -8893,7 +9325,7 @@ var init_Menu = __esm({
8893
9325
  const menuContainerStyles = cn(
8894
9326
  "bg-card",
8895
9327
  "border-[length:var(--border-width)] border-border",
8896
- "shadow",
9328
+ "shadow-elevation-popover",
8897
9329
  "rounded-sm",
8898
9330
  "min-w-0 sm:min-w-[200px] max-w-[calc(100vw-1rem)] py-1"
8899
9331
  );
@@ -8928,7 +9360,7 @@ var init_Menu = __esm({
8928
9360
  }
8929
9361
  ),
8930
9362
  item.badge !== void 0 && /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", children: item.badge }),
8931
- hasSubMenu && /* @__PURE__ */ jsx(Icon, { icon: ChevronRight, size: "sm", className: "flex-shrink-0" })
9363
+ hasSubMenu && /* @__PURE__ */ jsx(Icon, { name: "chevron-right", size: "sm", className: "flex-shrink-0" })
8932
9364
  ] })
8933
9365
  },
8934
9366
  itemId
@@ -9061,7 +9493,7 @@ var init_Accordion = __esm({
9061
9493
  "w-full flex items-center justify-between px-4 py-3",
9062
9494
  "bg-card",
9063
9495
  "hover:bg-muted",
9064
- "transition-colors duration-200",
9496
+ "transition-colors duration-fast",
9065
9497
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
9066
9498
  "disabled:opacity-50 disabled:cursor-not-allowed",
9067
9499
  isOpen && "bg-muted font-bold"
@@ -9073,10 +9505,10 @@ var init_Accordion = __esm({
9073
9505
  /* @__PURE__ */ jsx(
9074
9506
  Icon,
9075
9507
  {
9076
- icon: ChevronDown,
9508
+ name: "chevron-down",
9077
9509
  size: "sm",
9078
9510
  className: cn(
9079
- "transition-transform duration-200",
9511
+ "transition-transform duration-fast",
9080
9512
  isOpen && "transform rotate-180"
9081
9513
  )
9082
9514
  }
@@ -9098,15 +9530,6 @@ var init_Accordion = __esm({
9098
9530
  Accordion.displayName = "Accordion";
9099
9531
  }
9100
9532
  });
9101
- function resolveIcon2(name) {
9102
- const pascalName = name.split(/[-_]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
9103
- const icons = LucideIcons;
9104
- const icon = icons[pascalName];
9105
- if (icon) {
9106
- return icon;
9107
- }
9108
- return Plus;
9109
- }
9110
9533
  var FloatingActionButton;
9111
9534
  var init_FloatingActionButton = __esm({
9112
9535
  "components/molecules/FloatingActionButton.tsx"() {
@@ -9132,7 +9555,7 @@ var init_FloatingActionButton = __esm({
9132
9555
  const eventBus = useEventBus();
9133
9556
  const { t } = useTranslate();
9134
9557
  const resolvedAction = icon ? {
9135
- icon: resolveIcon2(icon),
9558
+ icon,
9136
9559
  onClick: () => {
9137
9560
  if (action) eventBus.emit(`UI:${action}`, actionPayload ?? {});
9138
9561
  onClick?.();
@@ -9206,7 +9629,7 @@ var init_FloatingActionButton = __esm({
9206
9629
  {
9207
9630
  align: "center",
9208
9631
  gap: "sm",
9209
- className: "transition-all duration-200",
9632
+ className: "transition-all duration-fast",
9210
9633
  style: {
9211
9634
  opacity: isExpanded ? 1 : 0,
9212
9635
  transform: isExpanded ? "translateY(0)" : "translateY(10px)",
@@ -9242,9 +9665,9 @@ var init_FloatingActionButton = __esm({
9242
9665
  {
9243
9666
  variant: isExpanded ? "secondary" : "primary",
9244
9667
  size: "lg",
9245
- icon: isExpanded ? X : Plus,
9668
+ icon: isExpanded ? "x" : "plus",
9246
9669
  onClick: handleMainClick,
9247
- className: "rounded-full shadow-lg transition-all duration-300",
9670
+ className: "rounded-full shadow-lg transition-all duration-normal",
9248
9671
  "aria-label": isExpanded ? "Close actions" : "Open actions",
9249
9672
  "aria-expanded": isExpanded,
9250
9673
  children: /* @__PURE__ */ jsx(Typography, { as: "span", className: "sr-only", children: isExpanded ? t("common.close") : t("common.open") })
@@ -9299,13 +9722,13 @@ var init_MapView = __esm({
9299
9722
  shadowSize: [41, 41]
9300
9723
  });
9301
9724
  L.Marker.prototype.options.icon = defaultIcon;
9302
- const { useEffect: useEffect69, useRef: useRef65, useCallback: useCallback113, useState: useState101 } = React83__default;
9725
+ const { useEffect: useEffect70, useRef: useRef65, useCallback: useCallback113, useState: useState102 } = React85__default;
9303
9726
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
9304
9727
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
9305
9728
  function MapUpdater({ centerLat, centerLng, zoom }) {
9306
9729
  const map = useMap();
9307
9730
  const prevRef = useRef65({ centerLat, centerLng, zoom });
9308
- useEffect69(() => {
9731
+ useEffect70(() => {
9309
9732
  const prev = prevRef.current;
9310
9733
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
9311
9734
  map.setView([centerLat, centerLng], zoom);
@@ -9316,7 +9739,7 @@ var init_MapView = __esm({
9316
9739
  }
9317
9740
  function MapClickHandler({ onMapClick }) {
9318
9741
  const map = useMap();
9319
- useEffect69(() => {
9742
+ useEffect70(() => {
9320
9743
  if (!onMapClick) return;
9321
9744
  const handler = (e) => {
9322
9745
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -9344,7 +9767,7 @@ var init_MapView = __esm({
9344
9767
  showAttribution = true
9345
9768
  }) {
9346
9769
  const eventBus = useEventBus2();
9347
- const [clickedPosition, setClickedPosition] = useState101(null);
9770
+ const [clickedPosition, setClickedPosition] = useState102(null);
9348
9771
  const handleMapClick = useCallback113((lat, lng) => {
9349
9772
  if (showClickedPin) {
9350
9773
  setClickedPosition({ lat, lng });
@@ -9545,7 +9968,7 @@ function InputPattern({
9545
9968
  fieldName
9546
9969
  }) {
9547
9970
  const { emit } = useEventBus();
9548
- const [localValue, setLocalValue] = React83__default.useState(value);
9971
+ const [localValue, setLocalValue] = React85__default.useState(value);
9549
9972
  const handleChange = (e) => {
9550
9973
  setLocalValue(e.target.value);
9551
9974
  if (onChange) {
@@ -9583,7 +10006,7 @@ function TextareaPattern({
9583
10006
  fieldName
9584
10007
  }) {
9585
10008
  const { emit } = useEventBus();
9586
- const [localValue, setLocalValue] = React83__default.useState(value);
10009
+ const [localValue, setLocalValue] = React85__default.useState(value);
9587
10010
  const handleChange = (e) => {
9588
10011
  setLocalValue(e.target.value);
9589
10012
  if (onChange) {
@@ -9615,7 +10038,7 @@ function SelectPattern({
9615
10038
  fieldName
9616
10039
  }) {
9617
10040
  const { emit } = useEventBus();
9618
- const [localValue, setLocalValue] = React83__default.useState(value);
10041
+ const [localValue, setLocalValue] = React85__default.useState(value);
9619
10042
  const handleChange = (e) => {
9620
10043
  setLocalValue(e.target.value);
9621
10044
  if (onChange) {
@@ -9644,7 +10067,7 @@ function CheckboxPattern({
9644
10067
  className
9645
10068
  }) {
9646
10069
  const { emit } = useEventBus();
9647
- const [localChecked, setLocalChecked] = React83__default.useState(checked);
10070
+ const [localChecked, setLocalChecked] = React85__default.useState(checked);
9648
10071
  const handleChange = (e) => {
9649
10072
  setLocalChecked(e.target.checked);
9650
10073
  if (onChange) {
@@ -9875,8 +10298,8 @@ function ActionButtons({
9875
10298
  disabled
9876
10299
  }) {
9877
10300
  const eventBus = useEventBus();
9878
- const [activeButtons, setActiveButtons] = React83.useState(/* @__PURE__ */ new Set());
9879
- const handlePress = React83.useCallback(
10301
+ const [activeButtons, setActiveButtons] = React85.useState(/* @__PURE__ */ new Set());
10302
+ const handlePress = React85.useCallback(
9880
10303
  (id) => {
9881
10304
  setActiveButtons((prev) => new Set(prev).add(id));
9882
10305
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -9884,7 +10307,7 @@ function ActionButtons({
9884
10307
  },
9885
10308
  [actionEvent, eventBus, onAction]
9886
10309
  );
9887
- const handleRelease = React83.useCallback(
10310
+ const handleRelease = React85.useCallback(
9888
10311
  (id) => {
9889
10312
  setActiveButtons((prev) => {
9890
10313
  const next = new Set(prev);
@@ -10716,7 +11139,7 @@ function IsometricCanvas({
10716
11139
  const el = containerRef.current;
10717
11140
  if (!el) return;
10718
11141
  if (typeof ResizeObserver === "undefined") return;
10719
- const observer = new ResizeObserver((entries) => {
11142
+ const observer2 = new ResizeObserver((entries) => {
10720
11143
  const entry = entries[0];
10721
11144
  if (entry) {
10722
11145
  const w = Math.round(entry.contentRect.width) || 800;
@@ -10727,8 +11150,8 @@ function IsometricCanvas({
10727
11150
  });
10728
11151
  }
10729
11152
  });
10730
- observer.observe(el);
10731
- return () => observer.disconnect();
11153
+ observer2.observe(el);
11154
+ return () => observer2.disconnect();
10732
11155
  }, []);
10733
11156
  const units = useMemo(
10734
11157
  () => unitsProp.map((u) => u.position ? u : { ...u, position: { x: u.x ?? 0, y: u.y ?? 0 } }),
@@ -12747,7 +13170,7 @@ var init_MarkdownContent = __esm({
12747
13170
  init_Box();
12748
13171
  init_useTranslate();
12749
13172
  init_cn();
12750
- MarkdownContent = React83__default.memo(
13173
+ MarkdownContent = React85__default.memo(
12751
13174
  ({ content, direction, className }) => {
12752
13175
  const { t: _t } = useTranslate();
12753
13176
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -12893,6 +13316,7 @@ var init_CodeBlock = __esm({
12893
13316
  init_Badge();
12894
13317
  init_Stack();
12895
13318
  init_Textarea();
13319
+ init_Icon();
12896
13320
  init_useEventBus();
12897
13321
  init_useTranslate();
12898
13322
  SyntaxHighlighter.registerLanguage("json", langJson);
@@ -12965,7 +13389,7 @@ var init_CodeBlock = __esm({
12965
13389
  log7 = createLogger("almadar:ui:markdown-code");
12966
13390
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
12967
13391
  HIDDEN_LINE_NUMBERS = { display: "none" };
12968
- CodeBlock = React83__default.memo(
13392
+ CodeBlock = React85__default.memo(
12969
13393
  ({
12970
13394
  code: rawCode,
12971
13395
  language = "text",
@@ -13183,7 +13607,7 @@ var init_CodeBlock = __esm({
13183
13607
  onClick: handleCopy,
13184
13608
  className: "opacity-0 group-hover:opacity-100 focus:opacity-100 transition-opacity text-muted-foreground hover:text-white",
13185
13609
  "aria-label": "Copy code",
13186
- children: copied ? /* @__PURE__ */ jsx(Check, { size: 16, className: "text-green-400" }) : /* @__PURE__ */ jsx(Copy, { size: 16 })
13610
+ 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" })
13187
13611
  }
13188
13612
  )
13189
13613
  ]
@@ -13369,8 +13793,8 @@ function Card2({
13369
13793
  className: `
13370
13794
  bg-card
13371
13795
  border border-border
13372
- rounded-md shadow-sm
13373
- ${isClickable ? "cursor-pointer hover:shadow-lg transition-shadow" : ""}
13796
+ rounded-container shadow-elevation-card
13797
+ ${isClickable ? "cursor-pointer hover:shadow-elevation-dialog transition-shadow" : ""}
13374
13798
  ${className}
13375
13799
  `,
13376
13800
  onClick: isClickable ? handleClick : void 0,
@@ -13464,7 +13888,7 @@ var init_QuizBlock = __esm({
13464
13888
  className: "self-start ml-7",
13465
13889
  children: /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
13466
13890
  /* @__PURE__ */ jsx(Typography, { variant: "caption", children: revealed ? t("quiz.hideAnswer") : t("quiz.showAnswer") }),
13467
- revealed ? /* @__PURE__ */ jsx(ChevronUp, { size: 14 }) : /* @__PURE__ */ jsx(ChevronDown, { size: 14 })
13891
+ 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" })
13468
13892
  ] })
13469
13893
  }
13470
13894
  )
@@ -14224,7 +14648,7 @@ var init_StateMachineView = __esm({
14224
14648
  style: { top: title ? 30 : 0 },
14225
14649
  children: [
14226
14650
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
14227
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React83__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
14651
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React85__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
14228
14652
  StateNode,
14229
14653
  {
14230
14654
  state,
@@ -15372,28 +15796,22 @@ var init_BookTableOfContents = __esm({
15372
15796
  BookTableOfContents.displayName = "BookTableOfContents";
15373
15797
  }
15374
15798
  });
15375
- var ICON_MAP, EmptyState;
15799
+ var ICON_NAME_ALIASES, EmptyState;
15376
15800
  var init_EmptyState = __esm({
15377
15801
  "components/molecules/EmptyState.tsx"() {
15378
15802
  "use client";
15379
15803
  init_cn();
15380
15804
  init_atoms();
15381
15805
  init_Box();
15806
+ init_Icon();
15382
15807
  init_Stack();
15383
15808
  init_Typography();
15384
15809
  init_useEventBus();
15385
15810
  init_useTranslate();
15386
- ICON_MAP = {
15387
- "check-circle": CheckCircle,
15388
- check: CheckCircle,
15389
- "x-circle": XCircle,
15390
- error: XCircle,
15391
- "alert-circle": AlertCircle,
15392
- warning: AlertCircle,
15393
- info: Info,
15394
- search: Search,
15395
- inbox: Inbox,
15396
- "file-question": FileQuestion
15811
+ ICON_NAME_ALIASES = {
15812
+ check: "check-circle",
15813
+ error: "x-circle",
15814
+ warning: "alert-circle"
15397
15815
  };
15398
15816
  EmptyState = ({
15399
15817
  icon,
@@ -15413,7 +15831,9 @@ var init_EmptyState = __esm({
15413
15831
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, {});
15414
15832
  onAction?.();
15415
15833
  };
15416
- const Icon3 = typeof icon === "string" ? ICON_MAP[icon] : icon;
15834
+ const iconName = typeof icon === "string" ? ICON_NAME_ALIASES[icon] ?? icon : void 0;
15835
+ const iconComponent = typeof icon === "function" ? icon : void 0;
15836
+ const hasIcon = Boolean(iconName || iconComponent);
15417
15837
  const isDestructive = destructive || variant === "error";
15418
15838
  const isSuccess = variant === "success";
15419
15839
  const displayText = title || message || t("empty.noItems");
@@ -15426,7 +15846,7 @@ var init_EmptyState = __esm({
15426
15846
  className
15427
15847
  ),
15428
15848
  children: [
15429
- Icon3 && /* @__PURE__ */ jsx(
15849
+ hasIcon && /* @__PURE__ */ jsx(
15430
15850
  Box,
15431
15851
  {
15432
15852
  className: cn(
@@ -15434,8 +15854,9 @@ var init_EmptyState = __esm({
15434
15854
  isDestructive ? "bg-error/10" : isSuccess ? "bg-success/10" : "bg-muted"
15435
15855
  ),
15436
15856
  children: /* @__PURE__ */ jsx(
15437
- Icon3,
15857
+ Icon,
15438
15858
  {
15859
+ ...iconName ? { name: iconName } : { icon: iconComponent },
15439
15860
  className: cn(
15440
15861
  "h-8 w-8",
15441
15862
  isDestructive ? "text-error" : isSuccess ? "text-success" : "text-muted-foreground"
@@ -15805,7 +16226,7 @@ var init_Grid = __esm({
15805
16226
  as: Component = "div"
15806
16227
  }) => {
15807
16228
  const mergedStyle = rows ? { gridTemplateRows: `repeat(${rows}, minmax(0, 1fr))`, ...style } : style;
15808
- return React83__default.createElement(
16229
+ return React85__default.createElement(
15809
16230
  Component,
15810
16231
  {
15811
16232
  className: cn(
@@ -16175,7 +16596,7 @@ var init_BranchingLogicBuilder = __esm({
16175
16596
  const height = PADDING * 2 + items.length * (NODE_HEIGHT + NODE_GAP_Y);
16176
16597
  return { items, positions, width, height };
16177
16598
  }, [questions]);
16178
- return /* @__PURE__ */ jsx(Box, { className: "overflow-auto rounded-md border border-border bg-card p-2", children: /* @__PURE__ */ jsxs(
16599
+ return /* @__PURE__ */ jsx(Box, { className: "overflow-auto rounded-container border border-border bg-card p-2", children: /* @__PURE__ */ jsxs(
16179
16600
  "svg",
16180
16601
  {
16181
16602
  width: layout.width,
@@ -16418,7 +16839,7 @@ var init_Breadcrumb = __esm({
16418
16839
  init_useEventBus();
16419
16840
  Breadcrumb = ({
16420
16841
  items,
16421
- separator = ChevronRight,
16842
+ separator = "chevron-right",
16422
16843
  maxItems,
16423
16844
  className
16424
16845
  }) => {
@@ -16447,7 +16868,7 @@ var init_Breadcrumb = __esm({
16447
16868
  ),
16448
16869
  "aria-current": isLast ? "page" : void 0,
16449
16870
  children: [
16450
- item.icon && /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" }),
16871
+ item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" })),
16451
16872
  /* @__PURE__ */ jsx(
16452
16873
  Typography,
16453
16874
  {
@@ -16474,7 +16895,7 @@ var init_Breadcrumb = __esm({
16474
16895
  "aria-current": isLast ? "page" : void 0,
16475
16896
  disabled: isLast,
16476
16897
  children: [
16477
- item.icon && /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" }),
16898
+ item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" })),
16478
16899
  /* @__PURE__ */ jsx(
16479
16900
  Typography,
16480
16901
  {
@@ -16486,14 +16907,7 @@ var init_Breadcrumb = __esm({
16486
16907
  ]
16487
16908
  }
16488
16909
  ),
16489
- !isLast && /* @__PURE__ */ jsx(
16490
- Icon,
16491
- {
16492
- icon: separator,
16493
- size: "sm",
16494
- className: "text-muted-foreground"
16495
- }
16496
- )
16910
+ !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" }))
16497
16911
  ] }, index);
16498
16912
  }) })
16499
16913
  }
@@ -16947,7 +17361,7 @@ function CalendarGrid({
16947
17361
  {
16948
17362
  variant: "ghost",
16949
17363
  size: "sm",
16950
- icon: ChevronLeft,
17364
+ icon: "chevron-left",
16951
17365
  onClick: stepPrev,
16952
17366
  "aria-disabled": !canPrev || void 0,
16953
17367
  "aria-label": "Previous days",
@@ -16960,7 +17374,7 @@ function CalendarGrid({
16960
17374
  {
16961
17375
  variant: "ghost",
16962
17376
  size: "sm",
16963
- iconRight: ChevronRight,
17377
+ iconRight: "chevron-right",
16964
17378
  onClick: stepNext,
16965
17379
  "aria-disabled": !canNext || void 0,
16966
17380
  "aria-label": "Next days",
@@ -19006,7 +19420,7 @@ var init_Carousel = __esm({
19006
19420
  Box,
19007
19421
  {
19008
19422
  className: cn(
19009
- "rounded-full cursor-pointer transition-all duration-200"
19423
+ "rounded-full cursor-pointer transition-all duration-fast"
19010
19424
  ),
19011
19425
  style: {
19012
19426
  width: isActive ? 10 : 8,
@@ -20098,7 +20512,7 @@ var init_CodeExample = __esm({
20098
20512
  {
20099
20513
  className: cn(
20100
20514
  "bg-foreground",
20101
- "rounded-md",
20515
+ "rounded-container",
20102
20516
  "border-[length:var(--border-width)] border-border",
20103
20517
  "overflow-hidden",
20104
20518
  className
@@ -20874,7 +21288,7 @@ function CounterMinimal({
20874
21288
  size: sizeStyles9[size].button,
20875
21289
  onClick: onDecrement,
20876
21290
  disabled: resolved.decrementDisabled,
20877
- icon: Minus,
21291
+ icon: "minus",
20878
21292
  children: resolved.decrementLabel
20879
21293
  }
20880
21294
  ),
@@ -20896,7 +21310,7 @@ function CounterMinimal({
20896
21310
  size: sizeStyles9[size].button,
20897
21311
  onClick: onIncrement,
20898
21312
  disabled: resolved.incrementDisabled,
20899
- icon: Plus,
21313
+ icon: "plus",
20900
21314
  children: resolved.incrementLabel
20901
21315
  }
20902
21316
  )
@@ -20942,7 +21356,7 @@ function CounterStandard({
20942
21356
  size: sizeStyles9[size].button,
20943
21357
  onClick: onDecrement,
20944
21358
  disabled: resolved.decrementDisabled,
20945
- icon: Minus
21359
+ icon: "minus"
20946
21360
  }
20947
21361
  ),
20948
21362
  /* @__PURE__ */ jsx(
@@ -20952,7 +21366,7 @@ function CounterStandard({
20952
21366
  size: sizeStyles9[size].button,
20953
21367
  onClick: onIncrement,
20954
21368
  disabled: resolved.incrementDisabled,
20955
- icon: Plus
21369
+ icon: "plus"
20956
21370
  }
20957
21371
  )
20958
21372
  ] }),
@@ -20962,7 +21376,7 @@ function CounterStandard({
20962
21376
  variant: "ghost",
20963
21377
  size: "sm",
20964
21378
  onClick: onReset,
20965
- icon: RotateCcw,
21379
+ icon: "rotate-ccw",
20966
21380
  children: "Reset"
20967
21381
  }
20968
21382
  )
@@ -21011,7 +21425,7 @@ function CounterFull({
21011
21425
  size: sizeStyles9[size].button,
21012
21426
  onClick: onDecrement,
21013
21427
  disabled: resolved.decrementDisabled,
21014
- icon: Minus,
21428
+ icon: "minus",
21015
21429
  children: resolved.decrementLabel
21016
21430
  }
21017
21431
  ),
@@ -21022,7 +21436,7 @@ function CounterFull({
21022
21436
  size: sizeStyles9[size].button,
21023
21437
  onClick: onIncrement,
21024
21438
  disabled: resolved.incrementDisabled,
21025
- icon: Plus,
21439
+ icon: "plus",
21026
21440
  children: resolved.incrementLabel
21027
21441
  }
21028
21442
  )
@@ -21033,7 +21447,7 @@ function CounterFull({
21033
21447
  variant: "ghost",
21034
21448
  size: "sm",
21035
21449
  onClick: onReset,
21036
- icon: RotateCcw,
21450
+ icon: "rotate-ccw",
21037
21451
  children: "Reset to 0"
21038
21452
  }
21039
21453
  )
@@ -21081,7 +21495,7 @@ function CraftingRecipe({
21081
21495
  className
21082
21496
  }) {
21083
21497
  const eventBus = useEventBus();
21084
- const handleCraft = React83.useCallback(() => {
21498
+ const handleCraft = React85.useCallback(() => {
21085
21499
  onCraft?.();
21086
21500
  if (craftEvent) {
21087
21501
  eventBus.emit(craftEvent, { output: output.label });
@@ -21098,7 +21512,7 @@ function CraftingRecipe({
21098
21512
  children: [
21099
21513
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
21100
21514
  const hasSufficient = ingredient.available >= ingredient.required;
21101
- return /* @__PURE__ */ jsxs(React83.Fragment, { children: [
21515
+ return /* @__PURE__ */ jsxs(React85.Fragment, { children: [
21102
21516
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
21103
21517
  ItemSlot,
21104
21518
  {
@@ -21161,8 +21575,8 @@ function DPad({
21161
21575
  }) {
21162
21576
  const eventBus = useEventBus();
21163
21577
  const sizes = sizeMap15[size];
21164
- const [activeDirections, setActiveDirections] = React83.useState(/* @__PURE__ */ new Set());
21165
- const handlePress = React83.useCallback(
21578
+ const [activeDirections, setActiveDirections] = React85.useState(/* @__PURE__ */ new Set());
21579
+ const handlePress = React85.useCallback(
21166
21580
  (direction) => {
21167
21581
  setActiveDirections((prev) => new Set(prev).add(direction));
21168
21582
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -21170,7 +21584,7 @@ function DPad({
21170
21584
  },
21171
21585
  [directionEvent, eventBus, onDirection]
21172
21586
  );
21173
- const handleRelease = React83.useCallback(
21587
+ const handleRelease = React85.useCallback(
21174
21588
  (direction) => {
21175
21589
  setActiveDirections((prev) => {
21176
21590
  const next = new Set(prev);
@@ -21421,7 +21835,7 @@ var init_DashboardLayout = __esm({
21421
21835
  variant: "ghost",
21422
21836
  className: "@lg/dashboard:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground",
21423
21837
  onClick: () => setSidebarOpen(false),
21424
- children: /* @__PURE__ */ jsx(X, { className: "h-5 w-5" })
21838
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-5 w-5" })
21425
21839
  }
21426
21840
  )
21427
21841
  ]
@@ -21467,7 +21881,7 @@ var init_DashboardLayout = __esm({
21467
21881
  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",
21468
21882
  onClick: () => setSidebarOpen(true),
21469
21883
  "aria-label": "Open sidebar",
21470
- children: /* @__PURE__ */ jsx(Menu$1, { className: "h-5 w-5" })
21884
+ children: /* @__PURE__ */ jsx(Icon, { name: "menu", className: "h-5 w-5" })
21471
21885
  }
21472
21886
  ),
21473
21887
  isTopNav && /* @__PURE__ */ jsxs(
@@ -21510,7 +21924,7 @@ var init_DashboardLayout = __esm({
21510
21924
  }
21511
21925
  ),
21512
21926
  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: [
21513
- /* @__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" }),
21927
+ /* @__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" }),
21514
21928
  /* @__PURE__ */ jsx(
21515
21929
  Input,
21516
21930
  {
@@ -21561,7 +21975,7 @@ var init_DashboardLayout = __esm({
21561
21975
  onClick: handleNotificationClick,
21562
21976
  "aria-label": t("common.notifications"),
21563
21977
  children: [
21564
- /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
21978
+ /* @__PURE__ */ jsx(Icon, { name: "bell", className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
21565
21979
  unreadCount > 0 && /* @__PURE__ */ jsx(
21566
21980
  Box,
21567
21981
  {
@@ -21599,7 +22013,7 @@ var init_DashboardLayout = __esm({
21599
22013
  children: user.name
21600
22014
  }
21601
22015
  ),
21602
- /* @__PURE__ */ jsx(ChevronDown, { className: "hidden @sm/dashboard:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
22016
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: "hidden @sm/dashboard:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
21603
22017
  ]
21604
22018
  }
21605
22019
  ),
@@ -21642,7 +22056,7 @@ var init_DashboardLayout = __esm({
21642
22056
  },
21643
22057
  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",
21644
22058
  children: [
21645
- /* @__PURE__ */ jsx(LogOut, { className: "h-4 w-4" }),
22059
+ /* @__PURE__ */ jsx(Icon, { name: "log-out", className: "h-4 w-4" }),
21646
22060
  t("auth.signOut")
21647
22061
  ]
21648
22062
  }
@@ -21824,14 +22238,14 @@ function useDataDnd(args) {
21824
22238
  const isZone = Boolean(dragGroup || accepts || sortable);
21825
22239
  const enabled = isZone || Boolean(dndRoot);
21826
22240
  const eventBus = useEventBus();
21827
- const parentRoot = React83__default.useContext(RootCtx);
22241
+ const parentRoot = React85__default.useContext(RootCtx);
21828
22242
  const isRoot = enabled && parentRoot === null;
21829
- const zoneId = React83__default.useId();
22243
+ const zoneId = React85__default.useId();
21830
22244
  const ownGroup = dragGroup ?? accepts ?? zoneId;
21831
- const [optimisticOrders, setOptimisticOrders] = React83__default.useState(() => /* @__PURE__ */ new Map());
21832
- const optimisticOrdersRef = React83__default.useRef(optimisticOrders);
22245
+ const [optimisticOrders, setOptimisticOrders] = React85__default.useState(() => /* @__PURE__ */ new Map());
22246
+ const optimisticOrdersRef = React85__default.useRef(optimisticOrders);
21833
22247
  optimisticOrdersRef.current = optimisticOrders;
21834
- const clearOptimisticOrder = React83__default.useCallback((group) => {
22248
+ const clearOptimisticOrder = React85__default.useCallback((group) => {
21835
22249
  setOptimisticOrders((prev) => {
21836
22250
  if (!prev.has(group)) return prev;
21837
22251
  const next = new Map(prev);
@@ -21856,7 +22270,7 @@ function useDataDnd(args) {
21856
22270
  const raw = it[dndItemIdField];
21857
22271
  return String(raw ?? `__idx_${idx}`);
21858
22272
  }).join("|");
21859
- const itemIds = React83__default.useMemo(
22273
+ const itemIds = React85__default.useMemo(
21860
22274
  () => orderedItems.map((it, idx) => {
21861
22275
  const raw = it[dndItemIdField];
21862
22276
  return raw ?? `__idx_${idx}`;
@@ -21864,7 +22278,7 @@ function useDataDnd(args) {
21864
22278
  [itemIdsSignature]
21865
22279
  );
21866
22280
  const itemsContentSig = items.map((it, idx) => String(it[dndItemIdField] ?? `__${idx}`)).join("|");
21867
- React83__default.useEffect(() => {
22281
+ React85__default.useEffect(() => {
21868
22282
  const root = isRoot ? null : parentRoot;
21869
22283
  if (root) {
21870
22284
  root.clearOptimisticOrder(ownGroup);
@@ -21872,20 +22286,20 @@ function useDataDnd(args) {
21872
22286
  clearOptimisticOrder(ownGroup);
21873
22287
  }
21874
22288
  }, [itemsContentSig, ownGroup]);
21875
- const zonesRef = React83__default.useRef(/* @__PURE__ */ new Map());
21876
- const registerZone = React83__default.useCallback((zoneId2, meta2) => {
22289
+ const zonesRef = React85__default.useRef(/* @__PURE__ */ new Map());
22290
+ const registerZone = React85__default.useCallback((zoneId2, meta2) => {
21877
22291
  zonesRef.current.set(zoneId2, meta2);
21878
22292
  }, []);
21879
- const unregisterZone = React83__default.useCallback((zoneId2) => {
22293
+ const unregisterZone = React85__default.useCallback((zoneId2) => {
21880
22294
  zonesRef.current.delete(zoneId2);
21881
22295
  }, []);
21882
- const [activeDrag, setActiveDrag] = React83__default.useState(null);
21883
- const [overZoneGroup, setOverZoneGroup] = React83__default.useState(null);
21884
- const meta = React83__default.useMemo(
22296
+ const [activeDrag, setActiveDrag] = React85__default.useState(null);
22297
+ const [overZoneGroup, setOverZoneGroup] = React85__default.useState(null);
22298
+ const meta = React85__default.useMemo(
21885
22299
  () => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
21886
22300
  [ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
21887
22301
  );
21888
- React83__default.useEffect(() => {
22302
+ React85__default.useEffect(() => {
21889
22303
  const target = isRoot ? null : parentRoot;
21890
22304
  if (!target) {
21891
22305
  zonesRef.current.set(zoneId, meta);
@@ -21904,7 +22318,7 @@ function useDataDnd(args) {
21904
22318
  }, [parentRoot, isRoot, zoneId, meta]);
21905
22319
  const sensors = useAlmadarDndSensors(true);
21906
22320
  const collisionDetection = almadarDndCollisionDetection;
21907
- const findZoneByItem = React83__default.useCallback(
22321
+ const findZoneByItem = React85__default.useCallback(
21908
22322
  (id) => {
21909
22323
  for (const z of zonesRef.current.values()) {
21910
22324
  if (z.itemIds.includes(id)) return z;
@@ -21913,7 +22327,7 @@ function useDataDnd(args) {
21913
22327
  },
21914
22328
  []
21915
22329
  );
21916
- React83__default.useCallback(
22330
+ React85__default.useCallback(
21917
22331
  (group) => {
21918
22332
  for (const z of zonesRef.current.values()) {
21919
22333
  if (z.group === group) return z;
@@ -21922,7 +22336,7 @@ function useDataDnd(args) {
21922
22336
  },
21923
22337
  []
21924
22338
  );
21925
- const handleDragEnd = React83__default.useCallback(
22339
+ const handleDragEnd = React85__default.useCallback(
21926
22340
  (event) => {
21927
22341
  const { active, over } = event;
21928
22342
  const activeIdStr = String(active.id);
@@ -22013,12 +22427,12 @@ function useDataDnd(args) {
22013
22427
  },
22014
22428
  [eventBus]
22015
22429
  );
22016
- const sortableData = React83__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
22017
- const SortableItem = React83__default.useCallback(
22430
+ const sortableData = React85__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
22431
+ const SortableItem = React85__default.useCallback(
22018
22432
  ({ id, children }) => {
22019
22433
  const {
22020
22434
  attributes,
22021
- listeners: listeners6,
22435
+ listeners: listeners7,
22022
22436
  setNodeRef,
22023
22437
  transform,
22024
22438
  transition,
@@ -22041,7 +22455,7 @@ function useDataDnd(args) {
22041
22455
  ref: setNodeRef,
22042
22456
  style,
22043
22457
  ...attributes,
22044
- ...listeners6,
22458
+ ...listeners7,
22045
22459
  children
22046
22460
  }
22047
22461
  );
@@ -22054,7 +22468,7 @@ function useDataDnd(args) {
22054
22468
  id: droppableId,
22055
22469
  data: sortableData
22056
22470
  });
22057
- const ctx = React83__default.useContext(RootCtx);
22471
+ const ctx = React85__default.useContext(RootCtx);
22058
22472
  const activeDrag2 = ctx?.activeDrag ?? null;
22059
22473
  const overZoneGroup2 = ctx?.overZoneGroup ?? null;
22060
22474
  const isThisZoneOver = overZoneGroup2 === ownGroup;
@@ -22069,7 +22483,7 @@ function useDataDnd(args) {
22069
22483
  showForeignPlaceholder,
22070
22484
  ctxAvailable: ctx != null
22071
22485
  });
22072
- React83__default.useEffect(() => {
22486
+ React85__default.useEffect(() => {
22073
22487
  dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
22074
22488
  }, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
22075
22489
  return /* @__PURE__ */ jsx(
@@ -22083,11 +22497,11 @@ function useDataDnd(args) {
22083
22497
  }
22084
22498
  );
22085
22499
  };
22086
- const rootContextValue = React83__default.useMemo(
22500
+ const rootContextValue = React85__default.useMemo(
22087
22501
  () => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
22088
22502
  [registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
22089
22503
  );
22090
- const handleDragStart = React83__default.useCallback((event) => {
22504
+ const handleDragStart = React85__default.useCallback((event) => {
22091
22505
  const sourceZone = findZoneByItem(event.active.id);
22092
22506
  const rect = event.active.rect.current.initial;
22093
22507
  const height = rect?.height && rect.height > 0 ? rect.height : 64;
@@ -22106,7 +22520,7 @@ function useDataDnd(args) {
22106
22520
  isRoot
22107
22521
  });
22108
22522
  }, [findZoneByItem, isRoot, zoneId]);
22109
- const handleDragOver = React83__default.useCallback((event) => {
22523
+ const handleDragOver = React85__default.useCallback((event) => {
22110
22524
  const { active, over } = event;
22111
22525
  const overData = over?.data?.current;
22112
22526
  const overGroup = overData?.dndGroup ?? null;
@@ -22176,7 +22590,7 @@ function useDataDnd(args) {
22176
22590
  return next;
22177
22591
  });
22178
22592
  }, []);
22179
- const handleDragCancel = React83__default.useCallback((event) => {
22593
+ const handleDragCancel = React85__default.useCallback((event) => {
22180
22594
  setActiveDrag(null);
22181
22595
  setOverZoneGroup(null);
22182
22596
  dndLog.warn("dragCancel", {
@@ -22184,12 +22598,12 @@ function useDataDnd(args) {
22184
22598
  reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
22185
22599
  });
22186
22600
  }, []);
22187
- const handleDragEndWithCleanup = React83__default.useCallback((event) => {
22601
+ const handleDragEndWithCleanup = React85__default.useCallback((event) => {
22188
22602
  handleDragEnd(event);
22189
22603
  setActiveDrag(null);
22190
22604
  setOverZoneGroup(null);
22191
22605
  }, [handleDragEnd]);
22192
- const wrapContainer = React83__default.useCallback(
22606
+ const wrapContainer = React85__default.useCallback(
22193
22607
  (children) => {
22194
22608
  if (!enabled) return children;
22195
22609
  const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
@@ -22243,7 +22657,7 @@ var init_useDataDnd = __esm({
22243
22657
  init_useAlmadarDndCollision();
22244
22658
  init_Box();
22245
22659
  dndLog = createLogger("almadar:ui:dnd");
22246
- RootCtx = React83__default.createContext(null);
22660
+ RootCtx = React85__default.createContext(null);
22247
22661
  }
22248
22662
  });
22249
22663
  function fieldLabel2(key) {
@@ -22465,7 +22879,7 @@ function DataGrid({
22465
22879
  className: cn(
22466
22880
  "bg-card rounded-lg",
22467
22881
  "border border-border",
22468
- "shadow-sm hover:shadow-lg",
22882
+ "shadow-elevation-card hover:shadow-elevation-dialog",
22469
22883
  "hover:border-primary transition-all",
22470
22884
  "flex flex-col",
22471
22885
  isSelected && "ring-2 ring-primary border-primary"
@@ -22732,7 +23146,7 @@ function DataList({
22732
23146
  }) {
22733
23147
  const eventBus = useEventBus();
22734
23148
  const { t } = useTranslate();
22735
- const [visibleCount, setVisibleCount] = React83__default.useState(pageSize || Infinity);
23149
+ const [visibleCount, setVisibleCount] = React85__default.useState(pageSize || Infinity);
22736
23150
  const fieldDefs = fields ?? columns ?? [];
22737
23151
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
22738
23152
  const dnd = useDataDnd({
@@ -22751,7 +23165,7 @@ function DataList({
22751
23165
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
22752
23166
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
22753
23167
  const hasRenderProp = typeof children === "function";
22754
- React83__default.useEffect(() => {
23168
+ React85__default.useEffect(() => {
22755
23169
  const renderItemTypeOf = typeof schemaRenderItem;
22756
23170
  const childrenTypeOf = typeof children;
22757
23171
  if (data.length > 0 && !hasRenderProp) {
@@ -22808,7 +23222,7 @@ function DataList({
22808
23222
  const items2 = data.map((item) => item);
22809
23223
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
22810
23224
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
22811
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
23225
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React85__default.Fragment, { children: [
22812
23226
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
22813
23227
  group.items.map((itemData, index) => {
22814
23228
  const id = itemData.id || `${gi}-${index}`;
@@ -22839,7 +23253,7 @@ function DataList({
22839
23253
  {
22840
23254
  variant: "caption",
22841
23255
  className: cn(
22842
- "mt-1 text-[0.65rem]",
23256
+ "mt-1 text-xs",
22843
23257
  isSent ? "opacity-70" : "text-muted-foreground"
22844
23258
  ),
22845
23259
  children: formatDate3(timestamp)
@@ -22904,7 +23318,7 @@ function DataList({
22904
23318
  Box,
22905
23319
  {
22906
23320
  className: cn(
22907
- "group flex items-center gap-4 transition-all duration-200",
23321
+ "group flex items-center gap-4 transition-all duration-fast",
22908
23322
  isCompact ? "px-4 py-2" : "px-6 py-4",
22909
23323
  "hover:bg-muted/80",
22910
23324
  !isCard && !isCompact && "rounded-lg border border-transparent hover:border-border"
@@ -22991,12 +23405,12 @@ function DataList({
22991
23405
  Box,
22992
23406
  {
22993
23407
  className: cn(
22994
- isCard && "bg-card rounded-xl border border-border shadow-lg overflow-hidden",
23408
+ isCard && "bg-card rounded-xl border border-border shadow-elevation-dialog overflow-hidden",
22995
23409
  !isCard && gapClass,
22996
23410
  className
22997
23411
  ),
22998
23412
  children: [
22999
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
23413
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React85__default.Fragment, { children: [
23000
23414
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
23001
23415
  group.items.map(
23002
23416
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -23133,7 +23547,7 @@ var init_FileTree = __esm({
23133
23547
  Typography,
23134
23548
  {
23135
23549
  variant: "caption",
23136
- className: `truncate font-mono text-[11px] !text-inherit ${isSelected ? "font-semibold" : ""}`,
23550
+ className: `truncate font-mono text-xs !text-inherit ${isSelected ? "font-semibold" : ""}`,
23137
23551
  children: node.name
23138
23552
  }
23139
23553
  ),
@@ -23222,6 +23636,7 @@ var init_FilterGroup = __esm({
23222
23636
  init_Select();
23223
23637
  init_Badge();
23224
23638
  init_Stack();
23639
+ init_Icon();
23225
23640
  init_useEventBus();
23226
23641
  init_useQuerySingleton();
23227
23642
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
@@ -23290,7 +23705,7 @@ var init_FilterGroup = __esm({
23290
23705
  const activeFilterCount = Object.keys(selectedValues).length;
23291
23706
  if (variant === "pills") {
23292
23707
  return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
23293
- showIcon && /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4 text-muted-foreground" }),
23708
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
23294
23709
  filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
23295
23710
  /* @__PURE__ */ jsxs("span", { className: "text-sm font-[var(--font-weight-medium)] text-muted-foreground", children: [
23296
23711
  filter.label,
@@ -23338,7 +23753,7 @@ var init_FilterGroup = __esm({
23338
23753
  variant: "ghost",
23339
23754
  size: "sm",
23340
23755
  onClick: handleClearAll,
23341
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
23756
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
23342
23757
  children: "Clear"
23343
23758
  }
23344
23759
  )
@@ -23347,7 +23762,7 @@ var init_FilterGroup = __esm({
23347
23762
  if (variant === "vertical") {
23348
23763
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
23349
23764
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
23350
- /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4" }),
23765
+ /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
23351
23766
  /* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--font-weight-bold)] uppercase tracking-wide", children: "Filters" })
23352
23767
  ] }),
23353
23768
  filters.map((filter) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
@@ -23420,7 +23835,7 @@ var init_FilterGroup = __esm({
23420
23835
  variant: "ghost",
23421
23836
  size: "sm",
23422
23837
  onClick: handleClearAll,
23423
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
23838
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
23424
23839
  className: "self-start",
23425
23840
  children: "Clear all"
23426
23841
  }
@@ -23429,7 +23844,7 @@ var init_FilterGroup = __esm({
23429
23844
  }
23430
23845
  if (variant === "compact") {
23431
23846
  return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
23432
- showIcon && /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4 text-muted-foreground" }),
23847
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
23433
23848
  filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
23434
23849
  Input,
23435
23850
  {
@@ -23505,7 +23920,7 @@ var init_FilterGroup = __esm({
23505
23920
  filterDef?.label,
23506
23921
  ": ",
23507
23922
  value,
23508
- /* @__PURE__ */ jsx(X, { className: "ml-1 h-3 w-3" })
23923
+ /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
23509
23924
  ]
23510
23925
  },
23511
23926
  field
@@ -23519,7 +23934,7 @@ var init_FilterGroup = __esm({
23519
23934
  "div",
23520
23935
  {
23521
23936
  className: cn(
23522
- "p-4 rounded-md",
23937
+ "p-4 rounded-container",
23523
23938
  "bg-card",
23524
23939
  "border-[length:var(--border-width)] border-border",
23525
23940
  className
@@ -23532,7 +23947,7 @@ var init_FilterGroup = __esm({
23532
23947
  align: "center",
23533
23948
  className: "text-muted-foreground",
23534
23949
  children: [
23535
- /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4" }),
23950
+ /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
23536
23951
  /* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--font-weight-bold)] uppercase tracking-wide", children: "Filters" })
23537
23952
  ]
23538
23953
  }
@@ -23618,7 +24033,7 @@ var init_FilterGroup = __esm({
23618
24033
  variant: "ghost",
23619
24034
  size: "sm",
23620
24035
  onClick: handleClearAll,
23621
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
24036
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
23622
24037
  children: "Clear all"
23623
24038
  }
23624
24039
  )
@@ -23835,6 +24250,7 @@ var init_RelationSelect = __esm({
23835
24250
  "use client";
23836
24251
  init_cn();
23837
24252
  init_Box();
24253
+ init_Icon();
23838
24254
  init_Stack();
23839
24255
  init_Input();
23840
24256
  init_Button();
@@ -23978,12 +24394,13 @@ var init_RelationSelect = __esm({
23978
24394
  as: "button",
23979
24395
  className: "p-0.5 hover:bg-muted rounded cursor-pointer",
23980
24396
  onClick: handleClear,
23981
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4 text-muted-foreground" })
24397
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-4 w-4 text-muted-foreground" })
23982
24398
  }
23983
24399
  ),
23984
24400
  /* @__PURE__ */ jsx(
23985
- ChevronDown,
24401
+ Icon,
23986
24402
  {
24403
+ name: "chevron-down",
23987
24404
  className: cn(
23988
24405
  "h-4 w-4 text-muted-foreground transition-transform",
23989
24406
  isOpen && "transform rotate-180"
@@ -24201,7 +24618,7 @@ var init_SidePanel = __esm({
24201
24618
  "border-l-2 border-border",
24202
24619
  position === "left" && "border-l-0 border-r-2",
24203
24620
  "flex flex-col",
24204
- "transition-transform duration-300 ease-in-out",
24621
+ "transition-transform duration-normal ease-standard",
24205
24622
  width,
24206
24623
  position === "right" ? "right-0" : "left-0",
24207
24624
  className
@@ -24214,7 +24631,7 @@ var init_SidePanel = __esm({
24214
24631
  {
24215
24632
  variant: "ghost",
24216
24633
  size: "sm",
24217
- icon: X,
24634
+ icon: "x",
24218
24635
  onClick: handleClose,
24219
24636
  "aria-label": "Close panel",
24220
24637
  children: /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", className: "sr-only", children: "Close" })
@@ -24272,7 +24689,7 @@ var init_WizardProgress = __esm({
24272
24689
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
24273
24690
  const isActive = index === currentStep;
24274
24691
  const isCompleted = index < currentStep;
24275
- return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
24692
+ return /* @__PURE__ */ jsxs(React85__default.Fragment, { children: [
24276
24693
  /* @__PURE__ */ jsx(
24277
24694
  "button",
24278
24695
  {
@@ -24286,7 +24703,7 @@ var init_WizardProgress = __esm({
24286
24703
  isCompleted && "bg-foreground text-background cursor-pointer hover:bg-muted-foreground",
24287
24704
  !isActive && !isCompleted && "bg-card text-foreground"
24288
24705
  ),
24289
- children: isCompleted ? /* @__PURE__ */ jsx(Icon, { icon: Check, size: "sm" }) : index + 1
24706
+ children: isCompleted ? /* @__PURE__ */ jsx(Icon, { name: "check", size: "sm" }) : index + 1
24290
24707
  }
24291
24708
  ),
24292
24709
  !compact && /* @__PURE__ */ jsx(
@@ -24405,13 +24822,13 @@ var init_WizardNavigation = __esm({
24405
24822
  ),
24406
24823
  children: [
24407
24824
  showBack ? /* @__PURE__ */ jsxs(Button, { variant: "secondary", onClick: handleBack, disabled: isFirstStep, children: [
24408
- /* @__PURE__ */ jsx(Icon, { icon: ChevronLeft, size: "sm" }),
24825
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-left", size: "sm" }),
24409
24826
  resolvedBackLabel
24410
24827
  ] }) : /* @__PURE__ */ jsx(Box, {}),
24411
24828
  /* @__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) }) }) }),
24412
24829
  isLastStep && showComplete ? /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: handleComplete, disabled: !isValid, children: resolvedCompleteLabel }) : showNext ? /* @__PURE__ */ jsxs(Button, { variant: "primary", onClick: handleNext, disabled: !isValid, children: [
24413
24830
  resolvedNextLabel,
24414
- /* @__PURE__ */ jsx(Icon, { icon: ChevronRight, size: "sm" })
24831
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-right", size: "sm" })
24415
24832
  ] }) : /* @__PURE__ */ jsx(Box, {})
24416
24833
  ]
24417
24834
  }
@@ -24603,7 +25020,7 @@ var init_ViolationAlert = __esm({
24603
25020
  Box,
24604
25021
  {
24605
25022
  className: cn(
24606
- "px-3 py-2 rounded-md border",
25023
+ "px-3 py-2 rounded-container border",
24607
25024
  bgColor,
24608
25025
  className
24609
25026
  ),
@@ -24864,7 +25281,7 @@ var init_FlipCard = __esm({
24864
25281
  /* @__PURE__ */ jsx(
24865
25282
  Box,
24866
25283
  {
24867
- className: "absolute inset-0 w-full h-full rounded-lg shadow-lg flex items-center justify-center p-6",
25284
+ className: "absolute inset-0 w-full h-full rounded-lg shadow-elevation-dialog flex items-center justify-center p-6",
24868
25285
  style: { backfaceVisibility: "hidden", transform: "rotateY(0deg)" },
24869
25286
  children: front
24870
25287
  }
@@ -24872,7 +25289,7 @@ var init_FlipCard = __esm({
24872
25289
  /* @__PURE__ */ jsx(
24873
25290
  Box,
24874
25291
  {
24875
- className: "absolute inset-0 w-full h-full rounded-lg shadow-lg flex items-center justify-center p-6",
25292
+ className: "absolute inset-0 w-full h-full rounded-lg shadow-elevation-dialog flex items-center justify-center p-6",
24876
25293
  style: { backfaceVisibility: "hidden", transform: "rotateY(180deg)" },
24877
25294
  children: back
24878
25295
  }
@@ -25217,7 +25634,7 @@ var init_ProgressDots = __esm({
25217
25634
  Box,
25218
25635
  {
25219
25636
  className: cn(
25220
- "rounded-full transition-all duration-200",
25637
+ "rounded-full transition-all duration-fast",
25221
25638
  onDotClick && "cursor-pointer"
25222
25639
  ),
25223
25640
  style: {
@@ -25259,10 +25676,7 @@ function StatBadge({
25259
25676
  className
25260
25677
  ),
25261
25678
  children: [
25262
- icon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 text-lg", children: typeof icon === "string" ? (() => {
25263
- const I = resolveIcon(icon);
25264
- return I ? /* @__PURE__ */ jsx(I, { className: "w-4 h-4" }) : icon;
25265
- })() : icon }),
25679
+ 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 }),
25266
25680
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground font-medium", children: label }),
25267
25681
  format === "hearts" && max && /* @__PURE__ */ jsx(
25268
25682
  HealthBar,
@@ -25330,7 +25744,7 @@ function InventoryGrid({
25330
25744
  const eventBus = useEventBus();
25331
25745
  const slotCount = totalSlots ?? items.length;
25332
25746
  const emptySlotCount = Math.max(0, slotCount - items.length);
25333
- const handleSelect = React83.useCallback(
25747
+ const handleSelect = React85.useCallback(
25334
25748
  (id) => {
25335
25749
  onSelect?.(id);
25336
25750
  if (selectEvent) {
@@ -25543,15 +25957,15 @@ function GameCanvas2D({
25543
25957
  fps = 60,
25544
25958
  className
25545
25959
  }) {
25546
- const canvasRef = React83.useRef(null);
25547
- const rafRef = React83.useRef(0);
25548
- const frameRef = React83.useRef(0);
25549
- const lastTimeRef = React83.useRef(0);
25550
- const onDrawRef = React83.useRef(onDraw);
25960
+ const canvasRef = React85.useRef(null);
25961
+ const rafRef = React85.useRef(0);
25962
+ const frameRef = React85.useRef(0);
25963
+ const lastTimeRef = React85.useRef(0);
25964
+ const onDrawRef = React85.useRef(onDraw);
25551
25965
  onDrawRef.current = onDraw;
25552
- const onTickRef = React83.useRef(onTick);
25966
+ const onTickRef = React85.useRef(onTick);
25553
25967
  onTickRef.current = onTick;
25554
- React83.useEffect(() => {
25968
+ React85.useEffect(() => {
25555
25969
  const canvas = canvasRef.current;
25556
25970
  if (!canvas) return;
25557
25971
  const ctx = canvas.getContext("2d");
@@ -25840,7 +26254,7 @@ function TurnPanel({
25840
26254
  className
25841
26255
  }) {
25842
26256
  const eventBus = useEventBus();
25843
- const handleAction = React83.useCallback(
26257
+ const handleAction = React85.useCallback(
25844
26258
  (event) => {
25845
26259
  if (event) {
25846
26260
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -25986,7 +26400,7 @@ function UnitCommandBar({
25986
26400
  className
25987
26401
  }) {
25988
26402
  const eventBus = useEventBus();
25989
- const handleCommand = React83.useCallback(
26403
+ const handleCommand = React85.useCallback(
25990
26404
  (event) => {
25991
26405
  if (event) {
25992
26406
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -26471,7 +26885,7 @@ function GameMenu({
26471
26885
  } catch {
26472
26886
  }
26473
26887
  const eventBus = eventBusProp || eventBusFromHook;
26474
- const handleOptionClick = React83.useCallback(
26888
+ const handleOptionClick = React85.useCallback(
26475
26889
  (option) => {
26476
26890
  if (option.event && eventBus) {
26477
26891
  eventBus.emit(`UI:${option.event}`, { option });
@@ -26585,7 +26999,7 @@ function GameOverScreen({
26585
26999
  } catch {
26586
27000
  }
26587
27001
  const eventBus = eventBusProp || eventBusFromHook;
26588
- const handleActionClick = React83.useCallback(
27002
+ const handleActionClick = React85.useCallback(
26589
27003
  (action) => {
26590
27004
  if (action.event && eventBus) {
26591
27005
  eventBus.emit(`UI:${action.event}`, { action });
@@ -27293,6 +27707,7 @@ var init_NumberStepper = __esm({
27293
27707
  "components/molecules/NumberStepper.tsx"() {
27294
27708
  "use client";
27295
27709
  init_cn();
27710
+ init_Icon();
27296
27711
  init_useEventBus();
27297
27712
  sizeStyles10 = {
27298
27713
  sm: {
@@ -27411,7 +27826,7 @@ var init_NumberStepper = __esm({
27411
27826
  styles.button
27412
27827
  ),
27413
27828
  "aria-label": "Decrease",
27414
- children: /* @__PURE__ */ jsx(Minus, { className: styles.icon })
27829
+ children: /* @__PURE__ */ jsx(Icon, { name: "minus", className: styles.icon })
27415
27830
  }
27416
27831
  ),
27417
27832
  /* @__PURE__ */ jsx(
@@ -27452,7 +27867,7 @@ var init_NumberStepper = __esm({
27452
27867
  styles.button
27453
27868
  ),
27454
27869
  "aria-label": "Increase",
27455
- children: /* @__PURE__ */ jsx(Plus, { className: styles.icon })
27870
+ children: /* @__PURE__ */ jsx(Icon, { name: "plus", className: styles.icon })
27456
27871
  }
27457
27872
  )
27458
27873
  ]
@@ -27477,6 +27892,7 @@ var init_StarRating = __esm({
27477
27892
  "components/molecules/StarRating.tsx"() {
27478
27893
  "use client";
27479
27894
  init_cn();
27895
+ init_Icon();
27480
27896
  init_useEventBus();
27481
27897
  sizeStyles11 = {
27482
27898
  sm: { star: "w-4 h-4", gap: "gap-0.5" },
@@ -27563,8 +27979,9 @@ var init_StarRating = __esm({
27563
27979
  },
27564
27980
  children: [
27565
27981
  /* @__PURE__ */ jsx(
27566
- Star,
27982
+ Icon,
27567
27983
  {
27984
+ name: "star",
27568
27985
  className: cn(
27569
27986
  styles.star,
27570
27987
  "text-muted",
@@ -27574,8 +27991,9 @@ var init_StarRating = __esm({
27574
27991
  }
27575
27992
  ),
27576
27993
  (isFull || isHalf) && /* @__PURE__ */ jsx(
27577
- Star,
27994
+ Icon,
27578
27995
  {
27996
+ name: "star",
27579
27997
  className: cn(
27580
27998
  styles.star,
27581
27999
  "absolute inset-0",
@@ -27767,7 +28185,7 @@ var init_UploadDropZone = __esm({
27767
28185
  "aria-hidden": "true"
27768
28186
  }
27769
28187
  ),
27770
- 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" }),
28188
+ 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" }),
27771
28189
  /* @__PURE__ */ jsx(Typography, { variant: "body1", className: "text-center font-medium mb-1", children: isDragOver ? "Drop files here" : label }),
27772
28190
  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 })
27773
28191
  ]
@@ -27791,6 +28209,7 @@ var Lightbox;
27791
28209
  var init_Lightbox = __esm({
27792
28210
  "components/molecules/Lightbox.tsx"() {
27793
28211
  "use client";
28212
+ init_Icon();
27794
28213
  init_cn();
27795
28214
  init_useEventBus();
27796
28215
  Lightbox = ({
@@ -27898,7 +28317,7 @@ var init_Lightbox = __esm({
27898
28317
  "focus:outline-none focus:ring-2 focus:ring-white"
27899
28318
  ),
27900
28319
  "aria-label": "Close",
27901
- children: /* @__PURE__ */ jsx(X, { className: "w-6 h-6" })
28320
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "w-6 h-6" })
27902
28321
  }
27903
28322
  ),
27904
28323
  hasPrev && safeImages.length > 1 && /* @__PURE__ */ jsx(
@@ -27917,7 +28336,7 @@ var init_Lightbox = __esm({
27917
28336
  "focus:outline-none focus:ring-2 focus:ring-white"
27918
28337
  ),
27919
28338
  "aria-label": "Previous image",
27920
- children: /* @__PURE__ */ jsx(ChevronLeft, { className: "w-8 h-8" })
28339
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
27921
28340
  }
27922
28341
  ),
27923
28342
  /* @__PURE__ */ jsx(
@@ -27954,7 +28373,7 @@ var init_Lightbox = __esm({
27954
28373
  "focus:outline-none focus:ring-2 focus:ring-white"
27955
28374
  ),
27956
28375
  "aria-label": "Next image",
27957
- children: /* @__PURE__ */ jsx(ChevronRight, { className: "w-8 h-8" })
28376
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
27958
28377
  }
27959
28378
  ),
27960
28379
  /* @__PURE__ */ jsxs("div", { className: "absolute bottom-4 left-0 right-0 text-center", children: [
@@ -28238,7 +28657,7 @@ var init_Meter = __esm({
28238
28657
  strokeDasharray: circumference,
28239
28658
  strokeDashoffset: offset,
28240
28659
  strokeLinecap: "round",
28241
- className: "transition-all duration-500 ease-out"
28660
+ className: "transition-all duration-slow ease-emphasized"
28242
28661
  }
28243
28662
  )
28244
28663
  ]
@@ -28281,7 +28700,7 @@ var init_Meter = __esm({
28281
28700
  Box,
28282
28701
  {
28283
28702
  className: cn(
28284
- "h-2 flex-1 rounded-sm transition-all duration-300",
28703
+ "h-2 flex-1 rounded-sm transition-all duration-normal",
28285
28704
  !isActive && "bg-muted"
28286
28705
  ),
28287
28706
  style: isActive ? { backgroundColor: segColor } : void 0
@@ -28300,7 +28719,7 @@ var init_Meter = __esm({
28300
28719
  /* @__PURE__ */ jsx(Box, { className: "w-full h-3 bg-muted rounded-full overflow-hidden", children: /* @__PURE__ */ jsx(
28301
28720
  Box,
28302
28721
  {
28303
- className: "h-full rounded-full transition-all duration-500 ease-out",
28722
+ className: "h-full rounded-full transition-all duration-slow ease-emphasized",
28304
28723
  style: {
28305
28724
  width: `${percentage}%`,
28306
28725
  backgroundColor: activeColor
@@ -28688,7 +29107,7 @@ var init_PullToRefresh = __esm({
28688
29107
  className: cn(
28689
29108
  "top-0 left-0 right-0 z-10",
28690
29109
  "items-center justify-center",
28691
- "transition-opacity duration-200",
29110
+ "transition-opacity duration-fast",
28692
29111
  showIndicator ? "opacity-100" : "opacity-0"
28693
29112
  ),
28694
29113
  style: {
@@ -28874,7 +29293,7 @@ var init_PricingCard = __esm({
28874
29293
  "hover:-translate-y-1 transition-all",
28875
29294
  highlighted && [
28876
29295
  "border-[length:2px] border-primary",
28877
- "shadow-lg",
29296
+ "shadow-elevation-dialog",
28878
29297
  "scale-[1.05]",
28879
29298
  "ring-2 ring-primary"
28880
29299
  ],
@@ -28897,7 +29316,7 @@ var init_PricingCard = __esm({
28897
29316
  /* @__PURE__ */ jsx(
28898
29317
  Icon,
28899
29318
  {
28900
- icon: Check,
29319
+ name: "check",
28901
29320
  size: "sm",
28902
29321
  className: "flex-shrink-0 text-success"
28903
29322
  }
@@ -29115,7 +29534,7 @@ var init_StepFlow = __esm({
29115
29534
  className
29116
29535
  }) => {
29117
29536
  if (orientation === "vertical") {
29118
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React83__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
29537
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React85__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
29119
29538
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
29120
29539
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
29121
29540
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -29126,7 +29545,7 @@ var init_StepFlow = __esm({
29126
29545
  ] })
29127
29546
  ] }) }, index)) });
29128
29547
  }
29129
- 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(React83__default.Fragment, { children: [
29548
+ 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(React85__default.Fragment, { children: [
29130
29549
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
29131
29550
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
29132
29551
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -29940,6 +30359,7 @@ var init_VoteStack = __esm({
29940
30359
  "components/molecules/VoteStack.tsx"() {
29941
30360
  "use client";
29942
30361
  init_cn();
30362
+ init_Icon();
29943
30363
  init_useEventBus();
29944
30364
  sizeStyles12 = {
29945
30365
  sm: {
@@ -30021,7 +30441,7 @@ var init_VoteStack = __esm({
30021
30441
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
30022
30442
  styles.button
30023
30443
  ),
30024
- children: /* @__PURE__ */ jsx(ChevronUp, { className: styles.icon })
30444
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-up", className: styles.icon })
30025
30445
  }
30026
30446
  ),
30027
30447
  /* @__PURE__ */ jsx(
@@ -30058,7 +30478,7 @@ var init_VoteStack = __esm({
30058
30478
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
30059
30479
  styles.button
30060
30480
  ),
30061
- children: /* @__PURE__ */ jsx(ChevronDown, { className: styles.icon })
30481
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: styles.icon })
30062
30482
  }
30063
30483
  )
30064
30484
  ]
@@ -30100,7 +30520,7 @@ var init_LikertScale = __esm({
30100
30520
  md: "text-base",
30101
30521
  lg: "text-lg"
30102
30522
  };
30103
- LikertScale = React83__default.forwardRef(
30523
+ LikertScale = React85__default.forwardRef(
30104
30524
  ({
30105
30525
  question,
30106
30526
  options = DEFAULT_LIKERT_OPTIONS,
@@ -30112,7 +30532,7 @@ var init_LikertScale = __esm({
30112
30532
  variant = "radios",
30113
30533
  className
30114
30534
  }, ref) => {
30115
- const groupId = React83__default.useId();
30535
+ const groupId = React85__default.useId();
30116
30536
  const eventBus = useEventBus();
30117
30537
  const handleSelect = useCallback(
30118
30538
  (next) => {
@@ -30392,6 +30812,7 @@ var init_QrScanner = __esm({
30392
30812
  "use client";
30393
30813
  init_cn();
30394
30814
  init_atoms();
30815
+ init_Icon();
30395
30816
  init_useEventBus();
30396
30817
  QrScanner = ({
30397
30818
  onScan,
@@ -30542,7 +30963,7 @@ var init_QrScanner = __esm({
30542
30963
  padding: "lg",
30543
30964
  className: "inset-0 flex-col items-center justify-center gap-2 bg-black bg-opacity-80 text-center",
30544
30965
  children: [
30545
- /* @__PURE__ */ jsx(Camera, { className: "h-8 w-8 text-white", "aria-hidden": "true" }),
30966
+ /* @__PURE__ */ jsx(Icon, { name: "camera", className: "h-8 w-8 text-white", "aria-hidden": "true" }),
30546
30967
  /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-white", children: "Camera unavailable" }),
30547
30968
  /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-white opacity-70", children: cameraError.message })
30548
30969
  ]
@@ -30574,7 +30995,7 @@ var init_QrScanner = __esm({
30574
30995
  "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
30575
30996
  ),
30576
30997
  "aria-label": isPaused ? "Resume scanning" : "Pause scanning",
30577
- children: isPaused ? /* @__PURE__ */ jsx(Play, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Pause, { className: "h-4 w-4" })
30998
+ children: isPaused ? /* @__PURE__ */ jsx(Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Icon, { name: "pause", className: "h-4 w-4" })
30578
30999
  }
30579
31000
  ),
30580
31001
  /* @__PURE__ */ jsx(
@@ -30587,7 +31008,7 @@ var init_QrScanner = __esm({
30587
31008
  "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
30588
31009
  ),
30589
31010
  "aria-label": `Switch to ${currentFacing === "environment" ? "front" : "rear"} camera`,
30590
- children: /* @__PURE__ */ jsx(RefreshCw, { className: "h-4 w-4" })
31011
+ children: /* @__PURE__ */ jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
30591
31012
  }
30592
31013
  ),
30593
31014
  /* @__PURE__ */ jsx(
@@ -30803,11 +31224,11 @@ function getShapeClasses(shape) {
30803
31224
  function getStatusIcon(status) {
30804
31225
  switch (status) {
30805
31226
  case "seated":
30806
- return /* @__PURE__ */ jsx(Users, { className: "w-4 h-4" });
31227
+ return /* @__PURE__ */ jsx(Icon, { name: "users", className: "w-4 h-4" });
30807
31228
  case "ordered":
30808
- return /* @__PURE__ */ jsx(Coffee, { className: "w-4 h-4" });
31229
+ return /* @__PURE__ */ jsx(Icon, { name: "coffee", className: "w-4 h-4" });
30809
31230
  case "awaiting-bill":
30810
- return /* @__PURE__ */ jsx(AlertCircle, { className: "w-4 h-4" });
31231
+ return /* @__PURE__ */ jsx(Icon, { name: "alert-circle", className: "w-4 h-4" });
30811
31232
  default:
30812
31233
  return null;
30813
31234
  }
@@ -30819,6 +31240,7 @@ var init_PositionedCanvas = __esm({
30819
31240
  init_cn();
30820
31241
  init_useEventBus();
30821
31242
  init_atoms();
31243
+ init_Icon();
30822
31244
  STATUS_CLASSES = {
30823
31245
  empty: "bg-surface border-border text-foreground",
30824
31246
  seated: "bg-surface border-success text-success",
@@ -30931,7 +31353,7 @@ var init_PositionedCanvas = __esm({
30931
31353
  {
30932
31354
  ref: containerRef,
30933
31355
  "data-testid": "positioned-canvas",
30934
- className: "relative bg-background border border-border rounded-md overflow-hidden",
31356
+ className: "relative bg-background border border-border rounded-container overflow-hidden",
30935
31357
  style: { width, height },
30936
31358
  onClick: handleContainerClick,
30937
31359
  children: items.map((item) => {
@@ -31123,7 +31545,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
31123
31545
  "transition-opacity"
31124
31546
  ),
31125
31547
  onClick: () => setOpen((v) => !v),
31126
- children: /* @__PURE__ */ jsx(MoreHorizontal, { size: 14 })
31548
+ children: /* @__PURE__ */ jsx(Icon, { name: "more-horizontal", className: "w-3.5 h-3.5" })
31127
31549
  }
31128
31550
  ),
31129
31551
  open && /* @__PURE__ */ jsxs(
@@ -31132,7 +31554,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
31132
31554
  role: "menu",
31133
31555
  className: cn(
31134
31556
  "absolute right-0 z-10 mt-1 w-44",
31135
- "rounded-md border border-border bg-popover shadow-md",
31557
+ "rounded-container border border-border bg-popover shadow-elevation-popover",
31136
31558
  "py-1 text-sm"
31137
31559
  ),
31138
31560
  children: [
@@ -31149,7 +31571,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
31149
31571
  setOpen(false);
31150
31572
  },
31151
31573
  children: [
31152
- /* @__PURE__ */ jsx(Plus, { size: 14 }),
31574
+ /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3.5 h-3.5" }),
31153
31575
  " Duplicate"
31154
31576
  ]
31155
31577
  }
@@ -31166,7 +31588,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
31166
31588
  setOpen(false);
31167
31589
  },
31168
31590
  children: [
31169
- /* @__PURE__ */ jsx(Trash, { size: 14 }),
31591
+ /* @__PURE__ */ jsx(Icon, { name: "trash", className: "w-3.5 h-3.5" }),
31170
31592
  " Delete"
31171
31593
  ]
31172
31594
  }
@@ -31395,7 +31817,7 @@ function BlockRow({
31395
31817
  "text-sm text-muted-foreground"
31396
31818
  ),
31397
31819
  children: [
31398
- /* @__PURE__ */ jsx(Image$1, { className: "mr-2", size: 16 }),
31820
+ /* @__PURE__ */ jsx(Icon, { name: "image", className: "mr-2 w-4 h-4" }),
31399
31821
  " No image URL set"
31400
31822
  ]
31401
31823
  }
@@ -31469,7 +31891,7 @@ function BlockRow({
31469
31891
  "opacity-0 group-hover/item:opacity-100 hover:bg-muted hover:text-foreground"
31470
31892
  ),
31471
31893
  onClick: () => removeListItem(child.id),
31472
- children: /* @__PURE__ */ jsx(Trash, { size: 12 })
31894
+ children: /* @__PURE__ */ jsx(Icon, { name: "trash", className: "w-3 h-3" })
31473
31895
  }
31474
31896
  )
31475
31897
  ] }, child.id)),
@@ -31484,7 +31906,7 @@ function BlockRow({
31484
31906
  ),
31485
31907
  onClick: addListItem,
31486
31908
  children: [
31487
- /* @__PURE__ */ jsx(Plus, { size: 12 }),
31909
+ /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3 h-3" }),
31488
31910
  " Add item"
31489
31911
  ]
31490
31912
  }
@@ -31533,7 +31955,7 @@ function BlockRow({
31533
31955
  "transition-opacity"
31534
31956
  ),
31535
31957
  onClick: () => onInsertAfter("paragraph"),
31536
- children: /* @__PURE__ */ jsx(Plus, { size: 14 })
31958
+ children: /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3.5 h-3.5" })
31537
31959
  }
31538
31960
  ),
31539
31961
  /* @__PURE__ */ jsx(
@@ -31563,6 +31985,7 @@ var init_RichBlockEditor = __esm({
31563
31985
  init_Box();
31564
31986
  init_Divider();
31565
31987
  init_Input();
31988
+ init_Icon();
31566
31989
  init_useEventBus();
31567
31990
  TOOLBAR_ENTRIES = [
31568
31991
  { type: "paragraph", label: "Text", icon: Type },
@@ -31806,7 +32229,7 @@ var init_ReplyTree = __esm({
31806
32229
  onClick: handleToggle,
31807
32230
  "aria-label": isCollapsed ? "Expand replies" : "Collapse replies",
31808
32231
  "aria-expanded": !isCollapsed,
31809
- leftIcon: isCollapsed ? ChevronRight : ChevronDown,
32232
+ leftIcon: isCollapsed ? "chevron-right" : "chevron-down",
31810
32233
  className: cn(
31811
32234
  "w-6 h-6 p-0 min-w-0",
31812
32235
  "rounded-sm text-muted-foreground",
@@ -31853,7 +32276,7 @@ var init_ReplyTree = __esm({
31853
32276
  {
31854
32277
  variant: "ghost",
31855
32278
  size: "sm",
31856
- leftIcon: MessageSquare,
32279
+ leftIcon: "message-square",
31857
32280
  onClick: handleReply,
31858
32281
  "aria-label": `Reply to ${node.authorName}`,
31859
32282
  children: "Reply"
@@ -31864,7 +32287,7 @@ var init_ReplyTree = __esm({
31864
32287
  {
31865
32288
  variant: "ghost",
31866
32289
  size: "sm",
31867
- leftIcon: Flag,
32290
+ leftIcon: "flag",
31868
32291
  onClick: handleFlag,
31869
32292
  "aria-label": `Flag reply by ${node.authorName}`,
31870
32293
  children: "Flag"
@@ -31877,7 +32300,7 @@ var init_ReplyTree = __esm({
31877
32300
  variant: "ghost",
31878
32301
  size: "sm",
31879
32302
  onClick: handleContinue,
31880
- rightIcon: ChevronRight,
32303
+ rightIcon: "chevron-right",
31881
32304
  className: cn(
31882
32305
  "self-start gap-1 px-0 h-auto",
31883
32306
  "text-sm text-primary hover:underline hover:bg-transparent"
@@ -32118,7 +32541,7 @@ var init_VersionDiff = __esm({
32118
32541
  className: "px-4 py-2 border-b border-border bg-muted/30 flex-wrap",
32119
32542
  children: [
32120
32543
  /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "flex-wrap", children: [
32121
- /* @__PURE__ */ jsx(Icon, { icon: GitCommit, size: "sm", className: "text-muted-foreground" }),
32544
+ /* @__PURE__ */ jsx(Icon, { name: "git-commit", size: "sm", className: "text-muted-foreground" }),
32122
32545
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "whitespace-nowrap", children: "Compare" }),
32123
32546
  /* @__PURE__ */ jsx(Box, { className: "min-w-0 md:min-w-[160px]", children: /* @__PURE__ */ jsx(
32124
32547
  Select,
@@ -32155,7 +32578,7 @@ var init_VersionDiff = __esm({
32155
32578
  {
32156
32579
  variant: "ghost",
32157
32580
  size: "sm",
32158
- icon: activeView === "side-by-side" ? AlignLeft : Columns,
32581
+ icon: activeView === "side-by-side" ? "align-left" : "columns",
32159
32582
  onClick: handleViewToggle,
32160
32583
  "aria-label": activeView === "side-by-side" ? "Switch to inline view" : "Switch to side-by-side view"
32161
32584
  }
@@ -32165,7 +32588,7 @@ var init_VersionDiff = __esm({
32165
32588
  {
32166
32589
  variant: "ghost",
32167
32590
  size: "sm",
32168
- icon: RotateCcw,
32591
+ icon: "rotate-ccw",
32169
32592
  onClick: handleRevert,
32170
32593
  children: "Revert"
32171
32594
  }
@@ -32342,7 +32765,7 @@ var init_DocBreadcrumb = __esm({
32342
32765
  "aria-label": "Breadcrumb",
32343
32766
  children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
32344
32767
  const isLast = idx === items.length - 1;
32345
- return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
32768
+ return /* @__PURE__ */ jsxs(React85__default.Fragment, { children: [
32346
32769
  idx > 0 && /* @__PURE__ */ jsx(
32347
32770
  Icon,
32348
32771
  {
@@ -32408,7 +32831,7 @@ function DocCodeBlock({
32408
32831
  Box,
32409
32832
  {
32410
32833
  className: cn(
32411
- "rounded-md border border-border overflow-hidden",
32834
+ "rounded-container border border-border overflow-hidden",
32412
32835
  className
32413
32836
  ),
32414
32837
  position: "relative",
@@ -32567,11 +32990,11 @@ var init_DocPagination = __esm({
32567
32990
  init_Typography();
32568
32991
  linkCardStyles = [
32569
32992
  "border border-border",
32570
- "rounded-md",
32993
+ "rounded-container",
32571
32994
  "p-4",
32572
32995
  "transition-all",
32573
32996
  "hover:border-primary",
32574
- "hover:shadow-lg",
32997
+ "hover:shadow-elevation-dialog",
32575
32998
  "no-underline",
32576
32999
  "flex-1",
32577
33000
  "min-w-0",
@@ -32708,7 +33131,7 @@ function DocSearch({
32708
33131
  Box,
32709
33132
  {
32710
33133
  position: "absolute",
32711
- className: "top-full left-0 right-0 mt-1 z-50 bg-card border border-border rounded-md shadow-lg max-h-80 overflow-y-auto",
33134
+ className: "top-full left-0 right-0 mt-1 z-50 bg-card border border-border rounded-container shadow-elevation-popover max-h-80 overflow-y-auto",
32712
33135
  children: /* @__PURE__ */ jsx(VStack, { gap: "none", children: results.map((result, index) => /* @__PURE__ */ jsx(
32713
33136
  Box,
32714
33137
  {
@@ -33301,7 +33724,7 @@ var init_MiniStateMachine = __esm({
33301
33724
  const x = 2 + i * (NODE_W + GAP + ARROW_W + GAP);
33302
33725
  const tc = transitionCounts[s.name] ?? 0;
33303
33726
  const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
33304
- return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
33727
+ return /* @__PURE__ */ jsxs(React85__default.Fragment, { children: [
33305
33728
  /* @__PURE__ */ jsx(
33306
33729
  AvlState,
33307
33730
  {
@@ -34678,7 +35101,7 @@ var init_DocumentViewer = __esm({
34678
35101
  }
34679
35102
  });
34680
35103
  function extractTitle(children) {
34681
- if (!React83__default.isValidElement(children)) return void 0;
35104
+ if (!React85__default.isValidElement(children)) return void 0;
34682
35105
  const props = children.props;
34683
35106
  if (typeof props.title === "string") {
34684
35107
  return props.title;
@@ -34733,7 +35156,7 @@ function LinearView({
34733
35156
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
34734
35157
  const isDone = i < currentIdx;
34735
35158
  const isCurrent = i === currentIdx;
34736
- return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
35159
+ return /* @__PURE__ */ jsxs(React85__default.Fragment, { children: [
34737
35160
  i > 0 && /* @__PURE__ */ jsx(
34738
35161
  Typography,
34739
35162
  {
@@ -35634,12 +36057,12 @@ var init_Form = __esm({
35634
36057
  const isSchemaEntity = isOrbitalEntitySchema(entity);
35635
36058
  const resolvedEntity = isSchemaEntity ? entity : void 0;
35636
36059
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
35637
- const normalizedInitialData = React83__default.useMemo(() => {
36060
+ const normalizedInitialData = React85__default.useMemo(() => {
35638
36061
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
35639
36062
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
35640
36063
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
35641
36064
  }, [entity, initialData]);
35642
- const entityDerivedFields = React83__default.useMemo(() => {
36065
+ const entityDerivedFields = React85__default.useMemo(() => {
35643
36066
  if (fields && fields.length > 0) return void 0;
35644
36067
  if (!resolvedEntity) return void 0;
35645
36068
  return resolvedEntity.fields.map(
@@ -35648,26 +36071,27 @@ var init_Form = __esm({
35648
36071
  type: f3.type,
35649
36072
  required: f3.required,
35650
36073
  defaultValue: f3.default,
35651
- values: f3.values,
36074
+ // EntityField is a discriminated union — `values` lives on Scalar/Enum, `relation` lives on Relation.
36075
+ values: "values" in f3 ? f3.values : void 0,
35652
36076
  min: f3.min,
35653
36077
  max: f3.max,
35654
- relation: f3.relation ? { entity: f3.relation.entity } : void 0
36078
+ relation: "relation" in f3 ? { entity: f3.relation.entity } : void 0
35655
36079
  })
35656
36080
  );
35657
36081
  }, [entity, fields]);
35658
36082
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
35659
36083
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
35660
36084
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
35661
- const [formData, setFormData] = React83__default.useState(
36085
+ const [formData, setFormData] = React85__default.useState(
35662
36086
  normalizedInitialData
35663
36087
  );
35664
- const [collapsedSections, setCollapsedSections] = React83__default.useState(
36088
+ const [collapsedSections, setCollapsedSections] = React85__default.useState(
35665
36089
  /* @__PURE__ */ new Set()
35666
36090
  );
35667
- const [submitError, setSubmitError] = React83__default.useState(null);
35668
- const formRef = React83__default.useRef(null);
36091
+ const [submitError, setSubmitError] = React85__default.useState(null);
36092
+ const formRef = React85__default.useRef(null);
35669
36093
  const formMode = props.mode;
35670
- const mountedRef = React83__default.useRef(false);
36094
+ const mountedRef = React85__default.useRef(false);
35671
36095
  if (!mountedRef.current) {
35672
36096
  mountedRef.current = true;
35673
36097
  debug("forms", "mount", {
@@ -35680,7 +36104,7 @@ var init_Form = __esm({
35680
36104
  });
35681
36105
  }
35682
36106
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
35683
- const evalContext = React83__default.useMemo(
36107
+ const evalContext = React85__default.useMemo(
35684
36108
  () => ({
35685
36109
  formValues: formData,
35686
36110
  globalVariables: externalContext?.globalVariables ?? {},
@@ -35689,7 +36113,7 @@ var init_Form = __esm({
35689
36113
  }),
35690
36114
  [formData, externalContext]
35691
36115
  );
35692
- React83__default.useEffect(() => {
36116
+ React85__default.useEffect(() => {
35693
36117
  debug("forms", "initialData-sync", {
35694
36118
  mode: formMode,
35695
36119
  normalizedInitialData,
@@ -35700,7 +36124,7 @@ var init_Form = __esm({
35700
36124
  setFormData(normalizedInitialData);
35701
36125
  }
35702
36126
  }, [normalizedInitialData]);
35703
- const processCalculations = React83__default.useCallback(
36127
+ const processCalculations = React85__default.useCallback(
35704
36128
  (changedFieldId, newFormData) => {
35705
36129
  if (!hiddenCalculations.length) return;
35706
36130
  const context = {
@@ -35725,7 +36149,7 @@ var init_Form = __esm({
35725
36149
  },
35726
36150
  [hiddenCalculations, externalContext, eventBus]
35727
36151
  );
35728
- const checkViolations = React83__default.useCallback(
36152
+ const checkViolations = React85__default.useCallback(
35729
36153
  (changedFieldId, newFormData) => {
35730
36154
  if (!violationTriggers.length) return;
35731
36155
  const context = {
@@ -35763,7 +36187,7 @@ var init_Form = __esm({
35763
36187
  processCalculations(name, newFormData);
35764
36188
  checkViolations(name, newFormData);
35765
36189
  };
35766
- const isFieldVisible = React83__default.useCallback(
36190
+ const isFieldVisible = React85__default.useCallback(
35767
36191
  (fieldName) => {
35768
36192
  const condition = conditionalFields[fieldName];
35769
36193
  if (!condition) return true;
@@ -35771,7 +36195,7 @@ var init_Form = __esm({
35771
36195
  },
35772
36196
  [conditionalFields, evalContext]
35773
36197
  );
35774
- const isSectionVisible = React83__default.useCallback(
36198
+ const isSectionVisible = React85__default.useCallback(
35775
36199
  (section) => {
35776
36200
  if (!section.condition) return true;
35777
36201
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -35847,7 +36271,7 @@ var init_Form = __esm({
35847
36271
  eventBus.emit(`UI:${onCancel}`);
35848
36272
  }
35849
36273
  };
35850
- const renderField = React83__default.useCallback(
36274
+ const renderField = React85__default.useCallback(
35851
36275
  (field) => {
35852
36276
  const fieldName = field.name || field.field;
35853
36277
  if (!fieldName) return null;
@@ -35868,7 +36292,7 @@ var init_Form = __esm({
35868
36292
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
35869
36293
  );
35870
36294
  const effectiveFields = entityDerivedFields ?? fields;
35871
- const normalizedFields = React83__default.useMemo(() => {
36295
+ const normalizedFields = React85__default.useMemo(() => {
35872
36296
  if (!effectiveFields || effectiveFields.length === 0) return [];
35873
36297
  return effectiveFields.map((field) => {
35874
36298
  if (typeof field === "string") {
@@ -35879,10 +36303,11 @@ var init_Form = __esm({
35879
36303
  type: entityField.type,
35880
36304
  required: entityField.required,
35881
36305
  defaultValue: entityField.default,
35882
- values: entityField.values,
36306
+ // EntityField is a discriminated union — `values` lives on Scalar/Enum, `relation` lives on Relation.
36307
+ values: "values" in entityField ? entityField.values : void 0,
35883
36308
  min: entityField.min,
35884
36309
  max: entityField.max,
35885
- relation: entityField.relation ? { entity: entityField.relation.entity } : void 0
36310
+ relation: "relation" in entityField ? { entity: entityField.relation.entity } : void 0
35886
36311
  };
35887
36312
  }
35888
36313
  return { name: field, type: "string" };
@@ -35890,7 +36315,7 @@ var init_Form = __esm({
35890
36315
  return field;
35891
36316
  });
35892
36317
  }, [effectiveFields, resolvedEntity]);
35893
- const schemaFields = React83__default.useMemo(() => {
36318
+ const schemaFields = React85__default.useMemo(() => {
35894
36319
  if (normalizedFields.length === 0) return null;
35895
36320
  if (isDebugEnabled()) {
35896
36321
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -35900,7 +36325,7 @@ var init_Form = __esm({
35900
36325
  }
35901
36326
  return normalizedFields.map(renderField).filter(Boolean);
35902
36327
  }, [normalizedFields, renderField, entityName, conditionalFields]);
35903
- const sectionElements = React83__default.useMemo(() => {
36328
+ const sectionElements = React85__default.useMemo(() => {
35904
36329
  if (!sections || sections.length === 0) return null;
35905
36330
  return sections.map((section) => {
35906
36331
  if (!isSectionVisible(section)) {
@@ -36605,7 +37030,7 @@ var init_GameTemplate = __esm({
36605
37030
  {
36606
37031
  variant: "secondary",
36607
37032
  size: "sm",
36608
- icon: Pause,
37033
+ icon: "pause",
36609
37034
  onClick: controls.onPause,
36610
37035
  children: "Pause"
36611
37036
  }
@@ -36614,7 +37039,7 @@ var init_GameTemplate = __esm({
36614
37039
  {
36615
37040
  variant: "primary",
36616
37041
  size: "sm",
36617
- icon: Play,
37042
+ icon: "play",
36618
37043
  onClick: controls.onPlay,
36619
37044
  children: "Play"
36620
37045
  }
@@ -36624,7 +37049,7 @@ var init_GameTemplate = __esm({
36624
37049
  {
36625
37050
  variant: "ghost",
36626
37051
  size: "sm",
36627
- icon: RotateCcw,
37052
+ icon: "rotate-ccw",
36628
37053
  onClick: controls.onReset,
36629
37054
  children: "Reset"
36630
37055
  }
@@ -37626,7 +38051,7 @@ var init_List = __esm({
37626
38051
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
37627
38052
  return [];
37628
38053
  }, [entity]);
37629
- const getItemActions = React83__default.useCallback(
38054
+ const getItemActions = React85__default.useCallback(
37630
38055
  (item) => {
37631
38056
  if (!itemActions) return [];
37632
38057
  if (typeof itemActions === "function") {
@@ -38099,7 +38524,7 @@ var init_MediaGallery = __esm({
38099
38524
  [selectable, selectedItems, selectionEvent, eventBus]
38100
38525
  );
38101
38526
  const entityData = Array.isArray(entity) ? entity : [];
38102
- const items = React83__default.useMemo(() => {
38527
+ const items = React85__default.useMemo(() => {
38103
38528
  if (propItems) return propItems;
38104
38529
  if (entityData.length === 0) return [];
38105
38530
  return entityData.map((record, idx) => ({
@@ -38263,7 +38688,7 @@ var init_MediaGallery = __esm({
38263
38688
  }
38264
38689
  });
38265
38690
  function extractTitle2(children) {
38266
- if (!React83__default.isValidElement(children)) return void 0;
38691
+ if (!React85__default.isValidElement(children)) return void 0;
38267
38692
  const props = children.props;
38268
38693
  if (typeof props.title === "string") {
38269
38694
  return props.title;
@@ -38976,7 +39401,7 @@ var init_PageHeader = __esm({
38976
39401
  info: "bg-info/10 text-info"
38977
39402
  };
38978
39403
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
38979
- 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(React83__default.Fragment, { children: [
39404
+ 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(React85__default.Fragment, { children: [
38980
39405
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
38981
39406
  crumb.href ? /* @__PURE__ */ jsx(
38982
39407
  "a",
@@ -39188,7 +39613,7 @@ var init_PricingPageTemplate = __esm({
39188
39613
 
39189
39614
  // lib/traitRegistry.ts
39190
39615
  function notifyListeners2() {
39191
- listeners.forEach((listener) => listener());
39616
+ listeners2.forEach((listener) => listener());
39192
39617
  }
39193
39618
  function registerTrait(info) {
39194
39619
  traits.set(info.id, info);
@@ -39210,14 +39635,14 @@ function getAllTraits() {
39210
39635
  return Array.from(traits.values());
39211
39636
  }
39212
39637
  function subscribeToTraitChanges(listener) {
39213
- listeners.add(listener);
39214
- return () => listeners.delete(listener);
39638
+ listeners2.add(listener);
39639
+ return () => listeners2.delete(listener);
39215
39640
  }
39216
- var traits, listeners;
39641
+ var traits, listeners2;
39217
39642
  var init_traitRegistry = __esm({
39218
39643
  "lib/traitRegistry.ts"() {
39219
39644
  traits = /* @__PURE__ */ new Map();
39220
- listeners = /* @__PURE__ */ new Set();
39645
+ listeners2 = /* @__PURE__ */ new Set();
39221
39646
  }
39222
39647
  });
39223
39648
 
@@ -39226,14 +39651,14 @@ function getAllTicks() {
39226
39651
  return Array.from(ticks.values());
39227
39652
  }
39228
39653
  function subscribeToTickChanges(listener) {
39229
- listeners2.add(listener);
39230
- return () => listeners2.delete(listener);
39654
+ listeners3.add(listener);
39655
+ return () => listeners3.delete(listener);
39231
39656
  }
39232
- var ticks, listeners2;
39657
+ var ticks, listeners3;
39233
39658
  var init_tickRegistry = __esm({
39234
39659
  "lib/tickRegistry.ts"() {
39235
39660
  ticks = /* @__PURE__ */ new Map();
39236
- listeners2 = /* @__PURE__ */ new Set();
39661
+ listeners3 = /* @__PURE__ */ new Set();
39237
39662
  }
39238
39663
  });
39239
39664
 
@@ -39242,14 +39667,14 @@ function getGuardHistory() {
39242
39667
  return [...guardHistory];
39243
39668
  }
39244
39669
  function subscribeToGuardChanges(listener) {
39245
- listeners3.add(listener);
39246
- return () => listeners3.delete(listener);
39670
+ listeners4.add(listener);
39671
+ return () => listeners4.delete(listener);
39247
39672
  }
39248
- var guardHistory, listeners3;
39673
+ var guardHistory, listeners4;
39249
39674
  var init_guardRegistry = __esm({
39250
39675
  "lib/guardRegistry.ts"() {
39251
39676
  guardHistory = [];
39252
- listeners3 = /* @__PURE__ */ new Set();
39677
+ listeners4 = /* @__PURE__ */ new Set();
39253
39678
  }
39254
39679
  });
39255
39680
 
@@ -39280,18 +39705,18 @@ function getDebugEvents() {
39280
39705
  return [...events];
39281
39706
  }
39282
39707
  function subscribeToDebugEvents(listener) {
39283
- listeners4.add(listener);
39284
- return () => listeners4.delete(listener);
39708
+ listeners5.add(listener);
39709
+ return () => listeners5.delete(listener);
39285
39710
  }
39286
- var events, listeners4;
39711
+ var events, listeners5;
39287
39712
  var init_debugRegistry = __esm({
39288
39713
  "lib/debugRegistry.ts"() {
39289
39714
  events = [];
39290
- listeners4 = /* @__PURE__ */ new Set();
39715
+ listeners5 = /* @__PURE__ */ new Set();
39291
39716
  }
39292
39717
  });
39293
39718
  function useDebugData() {
39294
- const [data, setData] = React83.useState(() => ({
39719
+ const [data, setData] = React85.useState(() => ({
39295
39720
  traits: [],
39296
39721
  ticks: [],
39297
39722
  guards: [],
@@ -39305,7 +39730,7 @@ function useDebugData() {
39305
39730
  },
39306
39731
  lastUpdate: Date.now()
39307
39732
  }));
39308
- React83.useEffect(() => {
39733
+ React85.useEffect(() => {
39309
39734
  const updateData = () => {
39310
39735
  setData({
39311
39736
  traits: getAllTraits(),
@@ -39364,14 +39789,14 @@ function isDebugEnabled2() {
39364
39789
  return localStorage.getItem(DEBUG_STORAGE_KEY) === "true";
39365
39790
  }
39366
39791
  function onDebugToggle(listener) {
39367
- listeners5.add(listener);
39368
- return () => listeners5.delete(listener);
39792
+ listeners6.add(listener);
39793
+ return () => listeners6.delete(listener);
39369
39794
  }
39370
- var DEBUG_STORAGE_KEY, listeners5;
39795
+ var DEBUG_STORAGE_KEY, listeners6;
39371
39796
  var init_debugUtils = __esm({
39372
39797
  "lib/debugUtils.ts"() {
39373
39798
  DEBUG_STORAGE_KEY = "orbital-debug";
39374
- listeners5 = /* @__PURE__ */ new Set();
39799
+ listeners6 = /* @__PURE__ */ new Set();
39375
39800
  }
39376
39801
  });
39377
39802
  function layoutGraph(states, transitions, initialState, width, height) {
@@ -39414,12 +39839,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
39414
39839
  return positions;
39415
39840
  }
39416
39841
  function WalkMinimap() {
39417
- const [walkStep, setWalkStep] = React83.useState(null);
39418
- const [traits2, setTraits] = React83.useState([]);
39419
- const [coveredEdges, setCoveredEdges] = React83.useState([]);
39420
- const [completedTraits, setCompletedTraits] = React83.useState(/* @__PURE__ */ new Set());
39421
- const prevTraitRef = React83.useRef(null);
39422
- React83.useEffect(() => {
39842
+ const [walkStep, setWalkStep] = React85.useState(null);
39843
+ const [traits2, setTraits] = React85.useState([]);
39844
+ const [coveredEdges, setCoveredEdges] = React85.useState([]);
39845
+ const [completedTraits, setCompletedTraits] = React85.useState(/* @__PURE__ */ new Set());
39846
+ const prevTraitRef = React85.useRef(null);
39847
+ React85.useEffect(() => {
39423
39848
  const interval = setInterval(() => {
39424
39849
  const w = window;
39425
39850
  const step = w.__orbitalWalkStep;
@@ -39866,15 +40291,15 @@ var init_EntitiesTab = __esm({
39866
40291
  }
39867
40292
  });
39868
40293
  function EventFlowTab({ events: events2 }) {
39869
- const [filter, setFilter] = React83.useState("all");
39870
- const containerRef = React83.useRef(null);
39871
- const [autoScroll, setAutoScroll] = React83.useState(true);
39872
- React83.useEffect(() => {
40294
+ const [filter, setFilter] = React85.useState("all");
40295
+ const containerRef = React85.useRef(null);
40296
+ const [autoScroll, setAutoScroll] = React85.useState(true);
40297
+ React85.useEffect(() => {
39873
40298
  if (autoScroll && containerRef.current) {
39874
40299
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
39875
40300
  }
39876
40301
  }, [events2.length, autoScroll]);
39877
- const filteredEvents = React83.useMemo(() => {
40302
+ const filteredEvents = React85.useMemo(() => {
39878
40303
  if (filter === "all") return events2;
39879
40304
  return events2.filter((e) => e.type === filter);
39880
40305
  }, [events2, filter]);
@@ -39993,7 +40418,7 @@ var init_EventFlowTab = __esm({
39993
40418
  }
39994
40419
  });
39995
40420
  function GuardsPanel({ guards }) {
39996
- const [filter, setFilter] = React83.useState("all");
40421
+ const [filter, setFilter] = React85.useState("all");
39997
40422
  if (guards.length === 0) {
39998
40423
  return /* @__PURE__ */ jsx(
39999
40424
  EmptyState,
@@ -40006,7 +40431,7 @@ function GuardsPanel({ guards }) {
40006
40431
  }
40007
40432
  const passedCount = guards.filter((g) => g.result).length;
40008
40433
  const failedCount = guards.length - passedCount;
40009
- const filteredGuards = React83.useMemo(() => {
40434
+ const filteredGuards = React85.useMemo(() => {
40010
40435
  if (filter === "all") return guards;
40011
40436
  if (filter === "passed") return guards.filter((g) => g.result);
40012
40437
  return guards.filter((g) => !g.result);
@@ -40167,10 +40592,10 @@ function EffectBadge({ effect }) {
40167
40592
  ] });
40168
40593
  }
40169
40594
  function TransitionTimeline({ transitions }) {
40170
- const containerRef = React83.useRef(null);
40171
- const [autoScroll, setAutoScroll] = React83.useState(true);
40172
- const [expandedId, setExpandedId] = React83.useState(null);
40173
- React83.useEffect(() => {
40595
+ const containerRef = React85.useRef(null);
40596
+ const [autoScroll, setAutoScroll] = React85.useState(true);
40597
+ const [expandedId, setExpandedId] = React85.useState(null);
40598
+ React85.useEffect(() => {
40174
40599
  if (autoScroll && containerRef.current) {
40175
40600
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
40176
40601
  }
@@ -40456,9 +40881,9 @@ function getAllEvents(traits2) {
40456
40881
  }
40457
40882
  function EventDispatcherTab({ traits: traits2, schema }) {
40458
40883
  const eventBus = useEventBus();
40459
- const [log12, setLog] = React83.useState([]);
40460
- const prevStatesRef = React83.useRef(/* @__PURE__ */ new Map());
40461
- React83.useEffect(() => {
40884
+ const [log12, setLog] = React85.useState([]);
40885
+ const prevStatesRef = React85.useRef(/* @__PURE__ */ new Map());
40886
+ React85.useEffect(() => {
40462
40887
  for (const trait of traits2) {
40463
40888
  const prev = prevStatesRef.current.get(trait.id);
40464
40889
  if (prev && prev !== trait.currentState) {
@@ -40628,10 +41053,10 @@ function VerifyModePanel({
40628
41053
  serverCount,
40629
41054
  localCount
40630
41055
  }) {
40631
- const [expanded, setExpanded] = React83.useState(true);
40632
- const scrollRef = React83.useRef(null);
40633
- const prevCountRef = React83.useRef(0);
40634
- React83.useEffect(() => {
41056
+ const [expanded, setExpanded] = React85.useState(true);
41057
+ const scrollRef = React85.useRef(null);
41058
+ const prevCountRef = React85.useRef(0);
41059
+ React85.useEffect(() => {
40635
41060
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
40636
41061
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
40637
41062
  }
@@ -40697,10 +41122,10 @@ function RuntimeDebugger({
40697
41122
  defaultTab,
40698
41123
  schema
40699
41124
  }) {
40700
- const [isCollapsed, setIsCollapsed] = React83.useState(mode === "verify" ? true : defaultCollapsed);
40701
- const [isVisible, setIsVisible] = React83.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
41125
+ const [isCollapsed, setIsCollapsed] = React85.useState(mode === "verify" ? true : defaultCollapsed);
41126
+ const [isVisible, setIsVisible] = React85.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
40702
41127
  const debugData = useDebugData();
40703
- React83.useEffect(() => {
41128
+ React85.useEffect(() => {
40704
41129
  if (mode === "inline") return;
40705
41130
  return onDebugToggle((enabled) => {
40706
41131
  setIsVisible(enabled);
@@ -40709,7 +41134,7 @@ function RuntimeDebugger({
40709
41134
  }
40710
41135
  });
40711
41136
  }, [mode]);
40712
- React83.useEffect(() => {
41137
+ React85.useEffect(() => {
40713
41138
  if (mode === "inline") return;
40714
41139
  const handleKeyDown = (e) => {
40715
41140
  if (e.key === "`" && isVisible) {
@@ -41258,7 +41683,7 @@ function SequenceBar({
41258
41683
  onSlotRemove(index);
41259
41684
  }, [onSlotRemove, playing]);
41260
41685
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
41261
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
41686
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React85__default.Fragment, { children: [
41262
41687
  i > 0 && /* @__PURE__ */ jsx(
41263
41688
  Typography,
41264
41689
  {
@@ -42660,7 +43085,7 @@ var init_StatCard = __esm({
42660
43085
  const labelToUse = propLabel ?? propTitle;
42661
43086
  const eventBus = useEventBus();
42662
43087
  const { t } = useTranslate();
42663
- const handleActionClick = React83__default.useCallback(() => {
43088
+ const handleActionClick = React85__default.useCallback(() => {
42664
43089
  if (action?.event) {
42665
43090
  eventBus.emit(`UI:${action.event}`, {});
42666
43091
  }
@@ -42671,7 +43096,7 @@ var init_StatCard = __esm({
42671
43096
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
42672
43097
  const isLoading = externalLoading ?? false;
42673
43098
  const error = externalError;
42674
- const computeMetricValue = React83__default.useCallback(
43099
+ const computeMetricValue = React85__default.useCallback(
42675
43100
  (metric, items) => {
42676
43101
  if (metric.value !== void 0) {
42677
43102
  return metric.value;
@@ -42710,7 +43135,7 @@ var init_StatCard = __esm({
42710
43135
  },
42711
43136
  []
42712
43137
  );
42713
- const schemaStats = React83__default.useMemo(() => {
43138
+ const schemaStats = React85__default.useMemo(() => {
42714
43139
  if (!metrics || metrics.length === 0) return null;
42715
43140
  return metrics.map((metric) => ({
42716
43141
  label: metric.label,
@@ -42718,7 +43143,7 @@ var init_StatCard = __esm({
42718
43143
  format: metric.format
42719
43144
  }));
42720
43145
  }, [metrics, data, computeMetricValue]);
42721
- const calculatedTrend = React83__default.useMemo(() => {
43146
+ const calculatedTrend = React85__default.useMemo(() => {
42722
43147
  if (manualTrend !== void 0) return manualTrend;
42723
43148
  if (previousValue === void 0 || currentValue === void 0)
42724
43149
  return void 0;
@@ -43829,7 +44254,7 @@ var init_Timeline = __esm({
43829
44254
  }) => {
43830
44255
  const { t } = useTranslate();
43831
44256
  const entityData = Array.isArray(entity) ? entity : [];
43832
- const items = React83__default.useMemo(() => {
44257
+ const items = React85__default.useMemo(() => {
43833
44258
  if (propItems) return propItems;
43834
44259
  if (entityData.length === 0) return [];
43835
44260
  return entityData.map((record, idx) => {
@@ -43936,7 +44361,7 @@ var init_Timeline = __esm({
43936
44361
  }
43937
44362
  });
43938
44363
  function extractToastProps(children) {
43939
- if (!React83__default.isValidElement(children)) {
44364
+ if (!React85__default.isValidElement(children)) {
43940
44365
  if (typeof children === "string") {
43941
44366
  return { message: children };
43942
44367
  }
@@ -43974,7 +44399,7 @@ var init_ToastSlot = __esm({
43974
44399
  eventBus.emit("UI:CLOSE");
43975
44400
  };
43976
44401
  if (!isVisible) return null;
43977
- const isCustomContent = React83__default.isValidElement(children) && !message;
44402
+ const isCustomContent = React85__default.isValidElement(children) && !message;
43978
44403
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
43979
44404
  Toast,
43980
44405
  {
@@ -44243,7 +44668,7 @@ var init_WizardContainer = __esm({
44243
44668
  const isCompleted = index < currentStep;
44244
44669
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
44245
44670
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
44246
- return /* @__PURE__ */ jsxs(React83__default.Fragment, { children: [
44671
+ return /* @__PURE__ */ jsxs(React85__default.Fragment, { children: [
44247
44672
  /* @__PURE__ */ jsx(
44248
44673
  Button,
44249
44674
  {
@@ -44625,12 +45050,12 @@ var init_WorldMapTemplate = __esm({
44625
45050
  }
44626
45051
  });
44627
45052
  function lazyThree(name, loader) {
44628
- const Lazy = React83__default.lazy(() => loader().then((m) => ({ default: m[name] })));
45053
+ const Lazy = React85__default.lazy(() => loader().then((m) => ({ default: m[name] })));
44629
45054
  function ThreeWrapper(props) {
44630
- return React83__default.createElement(
44631
- React83__default.Suspense,
45055
+ return React85__default.createElement(
45056
+ React85__default.Suspense,
44632
45057
  { fallback: null },
44633
- React83__default.createElement(Lazy, props)
45058
+ React85__default.createElement(Lazy, props)
44634
45059
  );
44635
45060
  }
44636
45061
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -45246,7 +45671,7 @@ function SuspenseConfigProvider({
45246
45671
  config,
45247
45672
  children
45248
45673
  }) {
45249
- return React83__default.createElement(
45674
+ return React85__default.createElement(
45250
45675
  SuspenseConfigContext.Provider,
45251
45676
  { value: config },
45252
45677
  children
@@ -45729,7 +46154,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
45729
46154
  const key = `${parentId}-${index}-trait:${traitName}`;
45730
46155
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
45731
46156
  }
45732
- return /* @__PURE__ */ jsx(React83__default.Fragment, { children: child }, `${parentId}-${index}`);
46157
+ return /* @__PURE__ */ jsx(React85__default.Fragment, { children: child }, `${parentId}-${index}`);
45733
46158
  }
45734
46159
  if (!child || typeof child !== "object") return null;
45735
46160
  const childId = `${parentId}-${index}`;
@@ -45766,14 +46191,14 @@ function isPatternConfig(value) {
45766
46191
  if (value === null || value === void 0) return false;
45767
46192
  if (typeof value !== "object") return false;
45768
46193
  if (Array.isArray(value)) return false;
45769
- if (React83__default.isValidElement(value)) return false;
46194
+ if (React85__default.isValidElement(value)) return false;
45770
46195
  if (value instanceof Date) return false;
45771
46196
  if (typeof value === "function") return false;
45772
46197
  const record = value;
45773
46198
  return "type" in record && typeof record.type === "string";
45774
46199
  }
45775
46200
  function isPlainConfigObject(value) {
45776
- if (React83__default.isValidElement(value)) return false;
46201
+ if (React85__default.isValidElement(value)) return false;
45777
46202
  if (value instanceof Date) return false;
45778
46203
  const proto = Object.getPrototypeOf(value);
45779
46204
  return proto === Object.prototype || proto === null;
@@ -46135,7 +46560,7 @@ function resolveLambdaBindings(body, argName, arg) {
46135
46560
  if (Array.isArray(body)) {
46136
46561
  return body.map((b) => resolveLambdaBindings(b, argName, arg));
46137
46562
  }
46138
- if (body !== null && typeof body === "object" && !React83__default.isValidElement(body) && !(body instanceof Date) && typeof body !== "function") {
46563
+ if (body !== null && typeof body === "object" && !React85__default.isValidElement(body) && !(body instanceof Date) && typeof body !== "function") {
46139
46564
  const out = {};
46140
46565
  for (const [k, v] of Object.entries(body)) {
46141
46566
  out[k] = resolveLambdaBindings(v, argName, arg);
@@ -46154,7 +46579,7 @@ function getSlotContentRenderer2() {
46154
46579
  function makeLambdaFn(argName, lambdaBody, callerKey) {
46155
46580
  return (item, index) => {
46156
46581
  const resolvedBody = resolveLambdaBindings(lambdaBody, argName, item);
46157
- if (resolvedBody === null || typeof resolvedBody !== "object" || Array.isArray(resolvedBody) || typeof resolvedBody === "function" || React83__default.isValidElement(resolvedBody) || resolvedBody instanceof Date) {
46582
+ if (resolvedBody === null || typeof resolvedBody !== "object" || Array.isArray(resolvedBody) || typeof resolvedBody === "function" || React85__default.isValidElement(resolvedBody) || resolvedBody instanceof Date) {
46158
46583
  return null;
46159
46584
  }
46160
46585
  const record = resolvedBody;
@@ -46172,7 +46597,7 @@ function makeLambdaFn(argName, lambdaBody, callerKey) {
46172
46597
  props: childProps,
46173
46598
  priority: 0
46174
46599
  };
46175
- return React83__default.createElement(SlotContentRenderer2, { content: childContent });
46600
+ return React85__default.createElement(SlotContentRenderer2, { content: childContent });
46176
46601
  };
46177
46602
  }
46178
46603
  function convertNode(node, callerKey) {
@@ -46191,7 +46616,7 @@ function convertNode(node, callerKey) {
46191
46616
  });
46192
46617
  return anyChanged ? mapped : node;
46193
46618
  }
46194
- if (typeof node === "object" && !React83__default.isValidElement(node) && !(node instanceof Date)) {
46619
+ if (typeof node === "object" && !React85__default.isValidElement(node) && !(node instanceof Date)) {
46195
46620
  return convertObjectProps(node);
46196
46621
  }
46197
46622
  return node;
@@ -47348,8 +47773,176 @@ function themeTokensToCssVars(tokens, mode = "light", darkVariant) {
47348
47773
  vars[`--shadow-${key}`] = value;
47349
47774
  }
47350
47775
  }
47776
+ const pickDensity = isDark && darkVariant?.density ? darkVariant.density : tokens.density;
47777
+ emitDensity(pickDensity, vars);
47778
+ const pickTypeScale = isDark && darkVariant?.typeScale ? darkVariant.typeScale : tokens.typeScale;
47779
+ emitTypeScale(pickTypeScale, vars);
47780
+ const pickMotion = isDark && darkVariant?.motion ? darkVariant.motion : tokens.motion;
47781
+ emitMotion(pickMotion, vars);
47782
+ const pickIconography = isDark && darkVariant?.iconography ? darkVariant.iconography : tokens.iconography;
47783
+ emitIconography(pickIconography, vars);
47784
+ const pickElevation = isDark && darkVariant?.elevation ? darkVariant.elevation : tokens.elevation;
47785
+ emitElevation(pickElevation, vars);
47786
+ const pickGeometry = isDark && darkVariant?.geometry ? darkVariant.geometry : tokens.geometry;
47787
+ emitGeometry(pickGeometry, vars);
47351
47788
  return vars;
47352
47789
  }
47790
+ function emitDensity(density, vars) {
47791
+ if (!density) return;
47792
+ if (density.spacing) {
47793
+ const s = density.spacing;
47794
+ const pairs2 = [
47795
+ ["0", s.space0],
47796
+ ["1", s.space1],
47797
+ ["2", s.space2],
47798
+ ["3", s.space3],
47799
+ ["4", s.space4],
47800
+ ["5", s.space5],
47801
+ ["6", s.space6],
47802
+ ["7", s.space7],
47803
+ ["8", s.space8],
47804
+ ["9", s.space9],
47805
+ ["10", s.space10],
47806
+ ["11", s.space11],
47807
+ ["12", s.space12]
47808
+ ];
47809
+ for (const [k, v] of pairs2) {
47810
+ if (v !== void 0) vars[`--space-${k}`] = v;
47811
+ }
47812
+ }
47813
+ const pairs = [
47814
+ ["button-height-sm", density.buttonHeightSm],
47815
+ ["button-height-md", density.buttonHeightMd],
47816
+ ["button-height-lg", density.buttonHeightLg],
47817
+ ["input-height-sm", density.inputHeightSm],
47818
+ ["input-height-md", density.inputHeightMd],
47819
+ ["input-height-lg", density.inputHeightLg],
47820
+ ["row-height-compact", density.rowHeightCompact],
47821
+ ["row-height-normal", density.rowHeightNormal],
47822
+ ["row-height-spacious", density.rowHeightSpacious],
47823
+ ["card-padding-sm", density.cardPaddingSm],
47824
+ ["card-padding-md", density.cardPaddingMd],
47825
+ ["card-padding-lg", density.cardPaddingLg],
47826
+ ["dialog-padding", density.dialogPadding],
47827
+ ["section-gap", density.sectionGap]
47828
+ ];
47829
+ for (const [k, v] of pairs) {
47830
+ if (v !== void 0) vars[`--${k}`] = v;
47831
+ }
47832
+ }
47833
+ function typeSizeKeyStr(k) {
47834
+ return k;
47835
+ }
47836
+ function typeWeightStr(w) {
47837
+ return w;
47838
+ }
47839
+ function emitTypeIntent(name, intent, vars) {
47840
+ const sizeKey = typeSizeKeyStr(intent.size);
47841
+ const weight = typeWeightStr(intent.weight);
47842
+ vars[`--intent-${name}-size`] = `var(--text-${sizeKey})`;
47843
+ vars[`--intent-${name}-weight`] = `var(--font-weight-${weight})`;
47844
+ vars[`--intent-${name}-leading`] = `var(--leading-${sizeKey})`;
47845
+ }
47846
+ function emitTypeScale(ts, vars) {
47847
+ if (!ts) return;
47848
+ if (ts.displayFamily !== void 0) vars["--font-family-display"] = ts.displayFamily;
47849
+ if (ts.bodyFamily !== void 0) vars["--font-family-body"] = ts.bodyFamily;
47850
+ if (ts.monoFamily !== void 0) vars["--font-family-mono"] = ts.monoFamily;
47851
+ if (ts.scale) {
47852
+ const s = ts.scale;
47853
+ const pairs = [
47854
+ ["xs", s.xs],
47855
+ ["sm", s.sm],
47856
+ ["base", s.base],
47857
+ ["lg", s.lg],
47858
+ ["xl", s.xl],
47859
+ ["2xl", s["2xl"]],
47860
+ ["3xl", s["3xl"]],
47861
+ ["4xl", s["4xl"]],
47862
+ ["display-1", s["display-1"]],
47863
+ ["display-2", s["display-2"]]
47864
+ ];
47865
+ for (const [k, entry] of pairs) {
47866
+ if (entry !== void 0) {
47867
+ vars[`--text-${k}`] = entry.size;
47868
+ vars[`--leading-${k}`] = entry.lineHeight;
47869
+ }
47870
+ }
47871
+ }
47872
+ if (ts.intents) {
47873
+ const i = ts.intents;
47874
+ if (i.headingMajor) emitTypeIntent("heading-major", i.headingMajor, vars);
47875
+ if (i.headingMinor) emitTypeIntent("heading-minor", i.headingMinor, vars);
47876
+ if (i.bodyEmphasis) emitTypeIntent("body-emphasis", i.bodyEmphasis, vars);
47877
+ if (i.bodyDefault) emitTypeIntent("body-default", i.bodyDefault, vars);
47878
+ if (i.bodyQuiet) emitTypeIntent("body-quiet", i.bodyQuiet, vars);
47879
+ if (i.caption) emitTypeIntent("caption", i.caption, vars);
47880
+ if (i.numeric) emitTypeIntent("numeric", i.numeric, vars);
47881
+ }
47882
+ }
47883
+ function emitMotionIntent(name, intent, vars) {
47884
+ vars[`--intent-${name}-duration`] = `var(--duration-${intent.duration})`;
47885
+ vars[`--intent-${name}-easing`] = `var(--easing-${intent.easing})`;
47886
+ }
47887
+ function emitMotion(m, vars) {
47888
+ if (!m) return;
47889
+ if (m.durations) {
47890
+ const d = m.durations;
47891
+ const pairs = [
47892
+ ["instant", d.instant],
47893
+ ["fast", d.fast],
47894
+ ["normal", d.normal],
47895
+ ["slow", d.slow],
47896
+ ["dramatic", d.dramatic]
47897
+ ];
47898
+ for (const [k, v] of pairs) {
47899
+ if (v !== void 0) vars[`--duration-${k}`] = v;
47900
+ }
47901
+ }
47902
+ if (m.easings) {
47903
+ const e = m.easings;
47904
+ const pairs = [
47905
+ ["linear", e.linear],
47906
+ ["standard", e.standard],
47907
+ ["emphasized", e.emphasized],
47908
+ ["spring", e.spring]
47909
+ ];
47910
+ for (const [k, v] of pairs) {
47911
+ if (v !== void 0) vars[`--easing-${k}`] = v;
47912
+ }
47913
+ }
47914
+ if (m.intents) {
47915
+ const i = m.intents;
47916
+ if (i.enter) emitMotionIntent("enter", i.enter, vars);
47917
+ if (i.exit) emitMotionIntent("exit", i.exit, vars);
47918
+ if (i.hover) emitMotionIntent("hover", i.hover, vars);
47919
+ if (i.press) emitMotionIntent("press", i.press, vars);
47920
+ if (i.expand) emitMotionIntent("expand", i.expand, vars);
47921
+ if (i.transition) emitMotionIntent("transition", i.transition, vars);
47922
+ }
47923
+ }
47924
+ function emitIconography(i, vars) {
47925
+ if (!i) return;
47926
+ if (i.family !== void 0) vars["--icon-family"] = i.family;
47927
+ if (i.strokeWidth !== void 0) vars["--icon-stroke-width"] = i.strokeWidth;
47928
+ if (i.defaultSize !== void 0) vars["--icon-default-size"] = i.defaultSize;
47929
+ }
47930
+ function emitElevation(e, vars) {
47931
+ if (!e) return;
47932
+ if (e.cardElevation !== void 0) vars["--elevation-card"] = e.cardElevation;
47933
+ if (e.popoverElevation !== void 0) vars["--elevation-popover"] = e.popoverElevation;
47934
+ if (e.dialogElevation !== void 0) vars["--elevation-dialog"] = e.dialogElevation;
47935
+ if (e.toastElevation !== void 0) vars["--elevation-toast"] = e.toastElevation;
47936
+ }
47937
+ function emitGeometry(g, vars) {
47938
+ if (!g) return;
47939
+ if (g.radiusContainer !== void 0) vars["--radius-container"] = g.radiusContainer;
47940
+ if (g.radiusInteractive !== void 0) vars["--radius-interactive"] = g.radiusInteractive;
47941
+ if (g.radiusPill !== void 0) vars["--radius-pill"] = g.radiusPill;
47942
+ if (g.borderHairline !== void 0) vars["--border-hairline"] = g.borderHairline;
47943
+ if (g.borderStandard !== void 0) vars["--border-standard"] = g.borderStandard;
47944
+ if (g.borderHeavy !== void 0) vars["--border-heavy"] = g.borderHeavy;
47945
+ }
47353
47946
  function resolveThemeForRuntime(theme) {
47354
47947
  if (theme === void 0) return void 0;
47355
47948
  if (typeof theme === "string") return void 0;
@@ -47488,7 +48081,7 @@ function generateEntityRow(entity, idx) {
47488
48081
  return row;
47489
48082
  }
47490
48083
  function generateFieldValue(entityName, field, idx) {
47491
- if (field.values && field.values.length > 0) {
48084
+ if ("values" in field && field.values && field.values.length > 0) {
47492
48085
  return field.values[(idx - 1) % field.values.length];
47493
48086
  }
47494
48087
  const fieldName = field.name ?? "";