@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
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import * as React78 from 'react';
3
- import React78__default, { useContext, useMemo, useRef, useEffect, useCallback, createContext, Suspense, useState, lazy, useSyncExternalStore, useLayoutEffect, useId } from 'react';
2
+ import * as React80 from 'react';
3
+ import React80__default, { useContext, useMemo, useRef, useEffect, useCallback, createContext, Suspense, useState, lazy, useSyncExternalStore, useLayoutEffect, useId } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { EventBusContext, useTraitScope, TraitScopeProvider } from '@almadar/ui/providers';
7
7
  import { createLogger, isLogLevelEnabled } from '@almadar/logger';
8
- import * as LucideIcons from 'lucide-react';
9
- import { Loader2, X, AlertTriangle, Info, AlertCircle, CheckCircle, List, Printer, ChevronRight, ChevronLeft, XCircle, Wrench, RotateCcw, Send, Code, FileText, WrapText, Check, Copy, Trash2, Menu as Menu$1, Search, Bell, ChevronDown, LogOut, ChevronUp, MoreHorizontal, Bug, ZoomOut, ZoomIn, Download, Pause, Play, Package, Calendar, Pencil, Eye, Image as Image$1, Upload, ArrowRight, ArrowLeft, Eraser, SkipForward, TrendingUp, TrendingDown, Minus, ArrowUp, ArrowDown, MoreVertical, Circle, Clock, CheckCircle2, HelpCircle, FileQuestion, Inbox, Plus, Filter, Star, FileWarning, Camera, RefreshCw, Type, Heading1, Heading2, Heading3, ListOrdered, Quote, MessageSquare, Flag, GitBranch, Trash, GitCommit, AlignLeft, Columns, Tag, User, DollarSign, Sun, Moon, Zap, Sword, Move, Heart, Shield, Coffee, Users } from 'lucide-react';
8
+ import * as LucideIcons2 from 'lucide-react';
9
+ import { Loader2, X, List, Printer, ChevronRight, ChevronLeft, CheckCircle, XCircle, Wrench, RotateCcw, Send, Code, FileText, WrapText, Check, Copy, AlertTriangle, Trash2, Search, ChevronUp, ChevronDown, MoreHorizontal, Bug, ZoomOut, ZoomIn, Download, Menu as Menu$1, Package, Calendar, Pencil, Eye, Image as Image$1, Upload, ArrowRight, ArrowLeft, Eraser, Pause, Play, SkipForward, TrendingUp, TrendingDown, Minus, ArrowUp, ArrowDown, MoreVertical, AlertCircle, Circle, Clock, CheckCircle2, HelpCircle, Type, Heading1, Heading2, Heading3, ListOrdered, Quote, GitBranch, Plus, Trash, Tag, User, DollarSign, Zap, Sword, Move, Heart, Shield } from 'lucide-react';
10
+ import * as PhosphorIcons from '@phosphor-icons/react';
11
+ import * as TablerIcons from '@tabler/icons-react';
12
+ import * as FaIcons from 'react-icons/fa';
10
13
  import { evaluate, createMinimalContext } from '@almadar/evaluator';
11
14
  import { createPortal } from 'react-dom';
12
15
  import { Link, Outlet, useLocation } from 'react-router-dom';
@@ -206,7 +209,7 @@ var init_SvgFlow = __esm({
206
209
  opacity = 1,
207
210
  className
208
211
  }) => {
209
- const markerId = React78__default.useMemo(() => {
212
+ const markerId = React80__default.useMemo(() => {
210
213
  flowIdCounter += 1;
211
214
  return `almadar-flow-arrow-${flowIdCounter}`;
212
215
  }, []);
@@ -749,7 +752,7 @@ var init_SvgRing = __esm({
749
752
  className,
750
753
  label
751
754
  }) => {
752
- const gradientId = React78__default.useMemo(() => {
755
+ const gradientId = React80__default.useMemo(() => {
753
756
  ringIdCounter += 1;
754
757
  return `almadar-ring-glow-${ringIdCounter}`;
755
758
  }, []);
@@ -1084,12 +1087,378 @@ var init_useEventBus = __esm({
1084
1087
  useEventBus_default = useEventBus;
1085
1088
  }
1086
1089
  });
1090
+ function getCurrentIconFamily() {
1091
+ if (typeof window === "undefined" || typeof document === "undefined") {
1092
+ return DEFAULT_FAMILY;
1093
+ }
1094
+ const raw = getComputedStyle(document.documentElement).getPropertyValue("--icon-family").trim().replace(/^["']|["']$/g, "");
1095
+ return VALID_FAMILIES.includes(raw) ? raw : DEFAULT_FAMILY;
1096
+ }
1097
+ function ensureObserver() {
1098
+ if (typeof window === "undefined" || observer) return;
1099
+ observer = new MutationObserver(() => {
1100
+ const next = getCurrentIconFamily();
1101
+ if (next !== cachedFamily) {
1102
+ cachedFamily = next;
1103
+ listeners.forEach((fn) => fn());
1104
+ }
1105
+ });
1106
+ observer.observe(document.documentElement, {
1107
+ attributes: true,
1108
+ attributeFilter: ["data-theme", "style"]
1109
+ });
1110
+ cachedFamily = getCurrentIconFamily();
1111
+ }
1112
+ function subscribeIconFamily(notify2) {
1113
+ ensureObserver();
1114
+ listeners.add(notify2);
1115
+ return () => {
1116
+ listeners.delete(notify2);
1117
+ };
1118
+ }
1119
+ function getIconFamilySnapshot() {
1120
+ if (cachedFamily !== null) return cachedFamily;
1121
+ cachedFamily = getCurrentIconFamily();
1122
+ return cachedFamily;
1123
+ }
1124
+ function getIconFamilyServerSnapshot() {
1125
+ return DEFAULT_FAMILY;
1126
+ }
1127
+ function useIconFamily() {
1128
+ return useSyncExternalStore(
1129
+ subscribeIconFamily,
1130
+ getIconFamilySnapshot,
1131
+ getIconFamilyServerSnapshot
1132
+ );
1133
+ }
1087
1134
  function kebabToPascal(name) {
1088
1135
  return name.split("-").map((part) => {
1089
1136
  if (/^\d+$/.test(part)) return part;
1090
1137
  return part.charAt(0).toUpperCase() + part.slice(1);
1091
1138
  }).join("");
1092
1139
  }
1140
+ function resolveLucide(name) {
1141
+ if (lucideAliases[name]) return lucideAliases[name];
1142
+ const pascal = kebabToPascal(name);
1143
+ const lucideMap = LucideIcons2;
1144
+ const direct = lucideMap[pascal];
1145
+ if (direct && typeof direct === "object") return direct;
1146
+ const asIs = lucideMap[name];
1147
+ if (asIs && typeof asIs === "object") return asIs;
1148
+ return LucideIcons2.HelpCircle;
1149
+ }
1150
+ function resolvePhosphor(name, weight) {
1151
+ const target = phosphorAliases[name] ?? kebabToPascal(name);
1152
+ const map = PhosphorIcons;
1153
+ const PhosphorComp = map[target];
1154
+ if (!PhosphorComp || typeof PhosphorComp !== "object") return null;
1155
+ const Component = PhosphorComp;
1156
+ const Adapter = (props) => /* @__PURE__ */ jsx(
1157
+ Component,
1158
+ {
1159
+ weight,
1160
+ className: props.className,
1161
+ style: props.style,
1162
+ size: props.size ?? "1em"
1163
+ }
1164
+ );
1165
+ Adapter.displayName = `Phosphor.${target}.${weight}`;
1166
+ return Adapter;
1167
+ }
1168
+ function resolveTabler(name) {
1169
+ const suffix = tablerAliases[name] ?? kebabToPascal(name);
1170
+ const target = `Icon${suffix}`;
1171
+ const map = TablerIcons;
1172
+ const TablerComp = map[target];
1173
+ if (!TablerComp || typeof TablerComp !== "object") return null;
1174
+ const Component = TablerComp;
1175
+ const Adapter = (props) => /* @__PURE__ */ jsx(
1176
+ Component,
1177
+ {
1178
+ stroke: props.strokeWidth ?? 1.5,
1179
+ className: props.className,
1180
+ style: props.style,
1181
+ size: props.size ?? 24
1182
+ }
1183
+ );
1184
+ Adapter.displayName = `Tabler.${target}`;
1185
+ return Adapter;
1186
+ }
1187
+ function resolveFa(name) {
1188
+ const suffix = faAliases[name] ?? kebabToPascal(name);
1189
+ const target = `Fa${suffix}`;
1190
+ const map = FaIcons;
1191
+ const FaComp = map[target];
1192
+ if (!FaComp || typeof FaComp !== "function") return null;
1193
+ const Component = FaComp;
1194
+ const Adapter = (props) => /* @__PURE__ */ jsx(
1195
+ Component,
1196
+ {
1197
+ className: props.className,
1198
+ style: props.style,
1199
+ size: props.size ?? "1em"
1200
+ }
1201
+ );
1202
+ Adapter.displayName = `Fa.${target}`;
1203
+ return Adapter;
1204
+ }
1205
+ function warnFallback(name, family) {
1206
+ const key = `${family}::${name}`;
1207
+ if (warned.has(key)) return;
1208
+ warned.add(key);
1209
+ if (typeof console !== "undefined") {
1210
+ console.warn(
1211
+ `[iconFamily] No '${name}' mapping in family '${family}'; falling back to lucide. Add an alias in lib/iconFamily.ts.`
1212
+ );
1213
+ }
1214
+ }
1215
+ function makeLucideAdapter(name) {
1216
+ const LucideComp = resolveLucide(name);
1217
+ const Adapter = (props) => /* @__PURE__ */ jsx(
1218
+ LucideComp,
1219
+ {
1220
+ className: props.className,
1221
+ strokeWidth: props.strokeWidth,
1222
+ style: props.style,
1223
+ size: props.size
1224
+ }
1225
+ );
1226
+ Adapter.displayName = `Lucide.${name}`;
1227
+ return Adapter;
1228
+ }
1229
+ function resolveIconForFamily(name, family) {
1230
+ switch (family) {
1231
+ case "lucide":
1232
+ return makeLucideAdapter(name);
1233
+ case "phosphor-outline": {
1234
+ const p2 = resolvePhosphor(name, "regular");
1235
+ if (p2) return p2;
1236
+ warnFallback(name, family);
1237
+ return makeLucideAdapter(name);
1238
+ }
1239
+ case "phosphor-fill": {
1240
+ const p2 = resolvePhosphor(name, "fill");
1241
+ if (p2) return p2;
1242
+ warnFallback(name, family);
1243
+ return makeLucideAdapter(name);
1244
+ }
1245
+ case "phosphor-duotone": {
1246
+ const p2 = resolvePhosphor(name, "duotone");
1247
+ if (p2) return p2;
1248
+ warnFallback(name, family);
1249
+ return makeLucideAdapter(name);
1250
+ }
1251
+ case "tabler": {
1252
+ const t = resolveTabler(name);
1253
+ if (t) return t;
1254
+ warnFallback(name, family);
1255
+ return makeLucideAdapter(name);
1256
+ }
1257
+ case "fa-solid": {
1258
+ const f3 = resolveFa(name);
1259
+ if (f3) return f3;
1260
+ warnFallback(name, family);
1261
+ return makeLucideAdapter(name);
1262
+ }
1263
+ }
1264
+ }
1265
+ var DEFAULT_FAMILY, VALID_FAMILIES, cachedFamily, listeners, observer, lucideAliases, phosphorAliases, tablerAliases, faAliases, warned;
1266
+ var init_iconFamily = __esm({
1267
+ "lib/iconFamily.tsx"() {
1268
+ "use client";
1269
+ DEFAULT_FAMILY = "lucide";
1270
+ VALID_FAMILIES = [
1271
+ "lucide",
1272
+ "phosphor-outline",
1273
+ "phosphor-fill",
1274
+ "phosphor-duotone",
1275
+ "tabler",
1276
+ "fa-solid"
1277
+ ];
1278
+ cachedFamily = null;
1279
+ listeners = /* @__PURE__ */ new Set();
1280
+ observer = null;
1281
+ lucideAliases = {
1282
+ close: LucideIcons2.X,
1283
+ trash: LucideIcons2.Trash2,
1284
+ loader: LucideIcons2.Loader2,
1285
+ stop: LucideIcons2.Square,
1286
+ volume: LucideIcons2.Volume2,
1287
+ "volume-off": LucideIcons2.VolumeX,
1288
+ refresh: LucideIcons2.RefreshCw,
1289
+ share: LucideIcons2.Share2,
1290
+ "sort-asc": LucideIcons2.ArrowUpNarrowWide,
1291
+ "sort-desc": LucideIcons2.ArrowDownNarrowWide
1292
+ };
1293
+ phosphorAliases = {
1294
+ // lucide name → phosphor PascalCase name
1295
+ search: "MagnifyingGlass",
1296
+ close: "X",
1297
+ loader: "CircleNotch",
1298
+ refresh: "ArrowsClockwise",
1299
+ "sort-asc": "SortAscending",
1300
+ "sort-desc": "SortDescending",
1301
+ "chevron-down": "CaretDown",
1302
+ "chevron-up": "CaretUp",
1303
+ "chevron-left": "CaretLeft",
1304
+ "chevron-right": "CaretRight",
1305
+ "help-circle": "Question",
1306
+ "alert-triangle": "Warning",
1307
+ "alert-circle": "WarningCircle",
1308
+ "check-circle": "CheckCircle",
1309
+ "x-circle": "XCircle",
1310
+ edit: "PencilSimple",
1311
+ pencil: "PencilSimple",
1312
+ trash: "Trash",
1313
+ send: "PaperPlaneRight",
1314
+ external: "ArrowSquareOut",
1315
+ "external-link": "ArrowSquareOut",
1316
+ plus: "Plus",
1317
+ minus: "Minus",
1318
+ x: "X",
1319
+ check: "Check",
1320
+ star: "Star",
1321
+ heart: "Heart",
1322
+ home: "House",
1323
+ user: "User",
1324
+ users: "Users",
1325
+ settings: "Gear",
1326
+ menu: "List",
1327
+ "arrow-up": "ArrowUp",
1328
+ "arrow-down": "ArrowDown",
1329
+ "arrow-left": "ArrowLeft",
1330
+ "arrow-right": "ArrowRight",
1331
+ copy: "Copy",
1332
+ download: "DownloadSimple",
1333
+ upload: "UploadSimple",
1334
+ filter: "Funnel",
1335
+ calendar: "Calendar",
1336
+ clock: "Clock",
1337
+ bell: "Bell",
1338
+ mail: "Envelope",
1339
+ envelope: "Envelope",
1340
+ lock: "Lock",
1341
+ unlock: "LockOpen",
1342
+ eye: "Eye",
1343
+ "eye-off": "EyeSlash",
1344
+ more: "DotsThree",
1345
+ "more-vertical": "DotsThreeVertical",
1346
+ info: "Info",
1347
+ warning: "Warning",
1348
+ error: "WarningCircle"
1349
+ };
1350
+ tablerAliases = {
1351
+ // lucide name → tabler suffix (after the `Icon` prefix)
1352
+ search: "Search",
1353
+ close: "X",
1354
+ loader: "Loader2",
1355
+ refresh: "Refresh",
1356
+ "sort-asc": "SortAscending",
1357
+ "sort-desc": "SortDescending",
1358
+ "chevron-down": "ChevronDown",
1359
+ "chevron-up": "ChevronUp",
1360
+ "chevron-left": "ChevronLeft",
1361
+ "chevron-right": "ChevronRight",
1362
+ "help-circle": "HelpCircle",
1363
+ "alert-triangle": "AlertTriangle",
1364
+ "alert-circle": "AlertCircle",
1365
+ "check-circle": "CircleCheck",
1366
+ "x-circle": "CircleX",
1367
+ edit: "Pencil",
1368
+ trash: "Trash",
1369
+ send: "Send",
1370
+ external: "ExternalLink",
1371
+ plus: "Plus",
1372
+ x: "X",
1373
+ check: "Check",
1374
+ star: "Star",
1375
+ heart: "Heart",
1376
+ home: "Home",
1377
+ user: "User",
1378
+ users: "Users",
1379
+ settings: "Settings",
1380
+ menu: "Menu2",
1381
+ copy: "Copy",
1382
+ download: "Download",
1383
+ upload: "Upload",
1384
+ filter: "Filter",
1385
+ calendar: "Calendar",
1386
+ clock: "Clock",
1387
+ bell: "Bell",
1388
+ mail: "Mail",
1389
+ envelope: "Mail",
1390
+ lock: "Lock",
1391
+ unlock: "LockOpen",
1392
+ eye: "Eye",
1393
+ "eye-off": "EyeOff",
1394
+ more: "Dots",
1395
+ "more-vertical": "DotsVertical",
1396
+ info: "InfoCircle"
1397
+ };
1398
+ faAliases = {
1399
+ // lucide name → fa-solid suffix (after the `Fa` prefix)
1400
+ search: "Search",
1401
+ close: "Times",
1402
+ x: "Times",
1403
+ loader: "Spinner",
1404
+ refresh: "Sync",
1405
+ "sort-asc": "SortAmountUp",
1406
+ "sort-desc": "SortAmountDown",
1407
+ "chevron-down": "ChevronDown",
1408
+ "chevron-up": "ChevronUp",
1409
+ "chevron-left": "ChevronLeft",
1410
+ "chevron-right": "ChevronRight",
1411
+ "help-circle": "QuestionCircle",
1412
+ "alert-triangle": "ExclamationTriangle",
1413
+ "alert-circle": "ExclamationCircle",
1414
+ "check-circle": "CheckCircle",
1415
+ "x-circle": "TimesCircle",
1416
+ edit: "Edit",
1417
+ pencil: "Pencil",
1418
+ trash: "Trash",
1419
+ send: "PaperPlane",
1420
+ external: "ExternalLinkAlt",
1421
+ plus: "Plus",
1422
+ minus: "Minus",
1423
+ check: "Check",
1424
+ star: "Star",
1425
+ heart: "Heart",
1426
+ home: "Home",
1427
+ user: "User",
1428
+ users: "Users",
1429
+ settings: "Cog",
1430
+ menu: "Bars",
1431
+ "arrow-up": "ArrowUp",
1432
+ "arrow-down": "ArrowDown",
1433
+ "arrow-left": "ArrowLeft",
1434
+ "arrow-right": "ArrowRight",
1435
+ copy: "Copy",
1436
+ download: "Download",
1437
+ upload: "Upload",
1438
+ filter: "Filter",
1439
+ calendar: "Calendar",
1440
+ clock: "Clock",
1441
+ bell: "Bell",
1442
+ mail: "Envelope",
1443
+ envelope: "Envelope",
1444
+ lock: "Lock",
1445
+ unlock: "LockOpen",
1446
+ eye: "Eye",
1447
+ "eye-off": "EyeSlash",
1448
+ more: "EllipsisH",
1449
+ "more-vertical": "EllipsisV",
1450
+ info: "InfoCircle",
1451
+ warning: "ExclamationTriangle"
1452
+ };
1453
+ warned = /* @__PURE__ */ new Set();
1454
+ }
1455
+ });
1456
+ function kebabToPascal2(name) {
1457
+ return name.split("-").map((part) => {
1458
+ if (/^\d+$/.test(part)) return part;
1459
+ return part.charAt(0).toUpperCase() + part.slice(1);
1460
+ }).join("");
1461
+ }
1093
1462
  function resolveIcon(name) {
1094
1463
  const cached = resolvedCache.get(name);
1095
1464
  if (cached) return cached;
@@ -1099,28 +1468,30 @@ function resolveIcon(name) {
1099
1468
  }
1100
1469
  function doResolve(name) {
1101
1470
  if (iconAliases[name]) return iconAliases[name];
1102
- const pascalName = kebabToPascal(name);
1103
- const directLookup = LucideIcons[pascalName];
1471
+ const pascalName = kebabToPascal2(name);
1472
+ const directLookup = LucideIcons2[pascalName];
1104
1473
  if (directLookup && typeof directLookup === "object") return directLookup;
1105
- const asIs = LucideIcons[name];
1474
+ const asIs = LucideIcons2[name];
1106
1475
  if (asIs && typeof asIs === "object") return asIs;
1107
- return LucideIcons.HelpCircle;
1476
+ return LucideIcons2.HelpCircle;
1108
1477
  }
1109
1478
  var iconAliases, resolvedCache, sizeClasses, animationClasses, Icon;
1110
1479
  var init_Icon = __esm({
1111
1480
  "components/atoms/Icon.tsx"() {
1481
+ "use client";
1112
1482
  init_cn();
1483
+ init_iconFamily();
1113
1484
  iconAliases = {
1114
- "close": LucideIcons.X,
1115
- "trash": LucideIcons.Trash2,
1116
- "loader": LucideIcons.Loader2,
1117
- "stop": LucideIcons.Square,
1118
- "volume": LucideIcons.Volume2,
1119
- "volume-off": LucideIcons.VolumeX,
1120
- "refresh": LucideIcons.RefreshCw,
1121
- "share": LucideIcons.Share2,
1122
- "sort-asc": LucideIcons.ArrowUpNarrowWide,
1123
- "sort-desc": LucideIcons.ArrowDownNarrowWide
1485
+ "close": LucideIcons2.X,
1486
+ "trash": LucideIcons2.Trash2,
1487
+ "loader": LucideIcons2.Loader2,
1488
+ "stop": LucideIcons2.Square,
1489
+ "volume": LucideIcons2.Volume2,
1490
+ "volume-off": LucideIcons2.VolumeX,
1491
+ "refresh": LucideIcons2.RefreshCw,
1492
+ "share": LucideIcons2.Share2,
1493
+ "sort-asc": LucideIcons2.ArrowUpNarrowWide,
1494
+ "sort-desc": LucideIcons2.ArrowDownNarrowWide
1124
1495
  };
1125
1496
  resolvedCache = /* @__PURE__ */ new Map();
1126
1497
  sizeClasses = {
@@ -1145,22 +1516,50 @@ var init_Icon = __esm({
1145
1516
  strokeWidth,
1146
1517
  style
1147
1518
  }) => {
1148
- const IconComponent = icon ?? (name ? resolveIcon(name) : LucideIcons.HelpCircle);
1519
+ const family = useIconFamily();
1520
+ const RenderedComponent = React80__default.useMemo(() => {
1521
+ if (icon) return null;
1522
+ return name ? resolveIconForFamily(name, family) : null;
1523
+ }, [icon, name, family]);
1149
1524
  const effectiveStrokeWidth = strokeWidth ?? void 0;
1525
+ const inlineStyle = {
1526
+ ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
1527
+ ...style
1528
+ };
1529
+ const composedClassName = cn(
1530
+ sizeClasses[size],
1531
+ animationClasses[animation],
1532
+ color ? color : "text-current",
1533
+ className
1534
+ );
1535
+ if (icon) {
1536
+ const Direct = icon;
1537
+ return /* @__PURE__ */ jsx(
1538
+ Direct,
1539
+ {
1540
+ className: composedClassName,
1541
+ strokeWidth: effectiveStrokeWidth,
1542
+ style: inlineStyle
1543
+ }
1544
+ );
1545
+ }
1546
+ if (RenderedComponent) {
1547
+ return /* @__PURE__ */ jsx(
1548
+ RenderedComponent,
1549
+ {
1550
+ className: composedClassName,
1551
+ strokeWidth: effectiveStrokeWidth,
1552
+ style: inlineStyle
1553
+ }
1554
+ );
1555
+ }
1556
+ const Fallback = LucideIcons2.HelpCircle;
1150
1557
  return /* @__PURE__ */ jsx(
1151
- IconComponent,
1558
+ Fallback,
1152
1559
  {
1153
- className: cn(
1154
- sizeClasses[size],
1155
- animationClasses[animation],
1156
- color ? color : "text-current",
1157
- className
1158
- ),
1560
+ className: composedClassName,
1159
1561
  strokeWidth: effectiveStrokeWidth,
1160
- style: {
1161
- ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
1162
- ...style
1163
- }
1562
+ style: inlineStyle
1164
1563
  }
1165
1564
  );
1166
1565
  };
@@ -1170,14 +1569,13 @@ var init_Icon = __esm({
1170
1569
  function resolveIconProp(value, sizeClass) {
1171
1570
  if (!value) return null;
1172
1571
  if (typeof value === "string") {
1173
- const Resolved = resolveIcon(value);
1174
- return Resolved ? /* @__PURE__ */ jsx(Resolved, { className: sizeClass }) : null;
1572
+ return /* @__PURE__ */ jsx(Icon, { name: value, className: sizeClass });
1175
1573
  }
1176
1574
  if (typeof value === "function") {
1177
1575
  const IconComp = value;
1178
1576
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
1179
1577
  }
1180
- if (React78__default.isValidElement(value)) {
1578
+ if (React80__default.isValidElement(value)) {
1181
1579
  return value;
1182
1580
  }
1183
1581
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -1250,10 +1648,10 @@ var init_Button = __esm({
1250
1648
  };
1251
1649
  iconSizeStyles = {
1252
1650
  sm: "h-3.5 w-3.5",
1253
- md: "h-4 w-4",
1651
+ md: "h-icon-default w-icon-default",
1254
1652
  lg: "h-5 w-5"
1255
1653
  };
1256
- Button = React78__default.forwardRef(
1654
+ Button = React80__default.forwardRef(
1257
1655
  ({
1258
1656
  className,
1259
1657
  variant = "primary",
@@ -1303,7 +1701,7 @@ var init_Button = __esm({
1303
1701
  ...props,
1304
1702
  "data-testid": props["data-testid"] ?? (action ? `action-${action}` : void 0),
1305
1703
  children: [
1306
- isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "h-4 w-4 animate-spin" }) : resolvedLeftIcon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedLeftIcon }),
1704
+ isLoading ? /* @__PURE__ */ jsx(Loader2, { className: "h-icon-default w-icon-default animate-spin" }) : resolvedLeftIcon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedLeftIcon }),
1307
1705
  children || label,
1308
1706
  resolvedRightIcon && !isLoading && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: resolvedRightIcon })
1309
1707
  ]
@@ -1318,7 +1716,8 @@ var Input;
1318
1716
  var init_Input = __esm({
1319
1717
  "components/atoms/Input.tsx"() {
1320
1718
  init_cn();
1321
- Input = React78__default.forwardRef(
1719
+ init_Icon();
1720
+ Input = React80__default.forwardRef(
1322
1721
  ({
1323
1722
  className,
1324
1723
  inputType,
@@ -1336,7 +1735,7 @@ var init_Input = __esm({
1336
1735
  ...props
1337
1736
  }, ref) => {
1338
1737
  const type = inputType || htmlType || "text";
1339
- const resolvedLeftIcon = leftIcon || IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "h-4 w-4" });
1738
+ const resolvedLeftIcon = leftIcon || IconComponent && /* @__PURE__ */ jsx(IconComponent, { className: "h-icon-default w-icon-default" });
1340
1739
  const showClearButton = clearable && value && String(value).length > 0;
1341
1740
  const baseClassName = cn(
1342
1741
  "block w-full rounded-sm transition-all duration-[var(--transition-fast)]",
@@ -1368,7 +1767,7 @@ var init_Input = __esm({
1368
1767
  ]
1369
1768
  }
1370
1769
  ),
1371
- /* @__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" }) })
1770
+ /* @__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" }) })
1372
1771
  ] });
1373
1772
  }
1374
1773
  if (type === "textarea") {
@@ -1422,7 +1821,7 @@ var init_Input = __esm({
1422
1821
  type: "button",
1423
1822
  onClick: onClear,
1424
1823
  className: "absolute inset-y-0 right-0 pr-3 flex items-center text-muted-foreground hover:text-foreground",
1425
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
1824
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-icon-default w-icon-default" })
1426
1825
  }
1427
1826
  ),
1428
1827
  rightIcon && !showClearButton && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center text-muted-foreground", children: rightIcon })
@@ -1436,7 +1835,7 @@ var Label;
1436
1835
  var init_Label = __esm({
1437
1836
  "components/atoms/Label.tsx"() {
1438
1837
  init_cn();
1439
- Label = React78__default.forwardRef(
1838
+ Label = React80__default.forwardRef(
1440
1839
  ({ className, required, children, ...props }, ref) => {
1441
1840
  return /* @__PURE__ */ jsxs(
1442
1841
  "label",
@@ -1462,7 +1861,7 @@ var Textarea;
1462
1861
  var init_Textarea = __esm({
1463
1862
  "components/atoms/Textarea.tsx"() {
1464
1863
  init_cn();
1465
- Textarea = React78__default.forwardRef(
1864
+ Textarea = React80__default.forwardRef(
1466
1865
  ({ className, error, ...props }, ref) => {
1467
1866
  return /* @__PURE__ */ jsx(
1468
1867
  "textarea",
@@ -1491,7 +1890,8 @@ var Select;
1491
1890
  var init_Select = __esm({
1492
1891
  "components/atoms/Select.tsx"() {
1493
1892
  init_cn();
1494
- Select = React78__default.forwardRef(
1893
+ init_Icon();
1894
+ Select = React80__default.forwardRef(
1495
1895
  ({ className, options, placeholder, error, ...props }, ref) => {
1496
1896
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1497
1897
  /* @__PURE__ */ jsxs(
@@ -1522,7 +1922,7 @@ var init_Select = __esm({
1522
1922
  ]
1523
1923
  }
1524
1924
  ),
1525
- /* @__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" }) })
1925
+ /* @__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" }) })
1526
1926
  ] });
1527
1927
  }
1528
1928
  );
@@ -1533,7 +1933,7 @@ var Checkbox;
1533
1933
  var init_Checkbox = __esm({
1534
1934
  "components/atoms/Checkbox.tsx"() {
1535
1935
  init_cn();
1536
- Checkbox = React78__default.forwardRef(
1936
+ Checkbox = React80__default.forwardRef(
1537
1937
  ({ className, label, id, ...props }, ref) => {
1538
1938
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
1539
1939
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -1575,23 +1975,23 @@ var init_Card = __esm({
1575
1975
  default: [
1576
1976
  "bg-card",
1577
1977
  "border-[length:var(--border-width)] border-border",
1578
- "shadow-sm",
1978
+ "shadow-elevation-card",
1579
1979
  "transition-all duration-[var(--transition-normal)]",
1580
- "hover:shadow-lg hover:-translate-y-0.5"
1980
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
1581
1981
  ].join(" "),
1582
1982
  bordered: [
1583
1983
  "bg-card",
1584
1984
  "border-[length:var(--border-width)] border-border",
1585
- "shadow-sm",
1985
+ "shadow-elevation-card",
1586
1986
  "transition-all duration-[var(--transition-normal)]",
1587
- "hover:shadow-lg hover:-translate-y-0.5"
1987
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
1588
1988
  ].join(" "),
1589
1989
  elevated: [
1590
1990
  "bg-card",
1591
1991
  "border-[length:var(--border-width)] border-border",
1592
1992
  "shadow",
1593
1993
  "transition-all duration-[var(--transition-normal)]",
1594
- "hover:shadow-lg hover:-translate-y-0.5"
1994
+ "hover:shadow-elevation-dialog hover:-translate-y-0.5"
1595
1995
  ].join(" "),
1596
1996
  // Interactive variant with theme-specific hover effects
1597
1997
  interactive: [
@@ -1600,22 +2000,22 @@ var init_Card = __esm({
1600
2000
  "shadow",
1601
2001
  "cursor-pointer",
1602
2002
  "transition-all duration-[var(--transition-normal)]",
1603
- "hover:shadow-lg"
2003
+ "hover:shadow-elevation-dialog"
1604
2004
  ].join(" ")
1605
2005
  };
1606
2006
  paddingStyles = {
1607
2007
  none: "",
1608
- sm: "p-3",
1609
- md: "p-4",
1610
- lg: "p-6"
2008
+ sm: "p-card-sm",
2009
+ md: "p-card-md",
2010
+ lg: "p-card-lg"
1611
2011
  };
1612
2012
  shadowStyles = {
1613
2013
  none: "shadow-none",
1614
- sm: "shadow-sm",
2014
+ sm: "shadow-elevation-card",
1615
2015
  md: "shadow",
1616
- lg: "shadow-lg"
2016
+ lg: "shadow-elevation-dialog"
1617
2017
  };
1618
- Card = React78__default.forwardRef(
2018
+ Card = React80__default.forwardRef(
1619
2019
  ({
1620
2020
  className,
1621
2021
  variant = "bordered",
@@ -1631,7 +2031,7 @@ var init_Card = __esm({
1631
2031
  {
1632
2032
  ref,
1633
2033
  className: cn(
1634
- "rounded-md",
2034
+ "rounded-container",
1635
2035
  "transition-all duration-[var(--transition-normal)]",
1636
2036
  variantStyles2[variant],
1637
2037
  paddingStyles[padding],
@@ -1651,9 +2051,9 @@ var init_Card = __esm({
1651
2051
  }
1652
2052
  );
1653
2053
  Card.displayName = "Card";
1654
- CardHeader = React78__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
2054
+ CardHeader = React80__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
1655
2055
  CardHeader.displayName = "CardHeader";
1656
- CardTitle = React78__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2056
+ CardTitle = React80__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1657
2057
  "h3",
1658
2058
  {
1659
2059
  ref,
@@ -1666,11 +2066,11 @@ var init_Card = __esm({
1666
2066
  }
1667
2067
  ));
1668
2068
  CardTitle.displayName = "CardTitle";
1669
- CardContent = React78__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
2069
+ CardContent = React80__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
1670
2070
  CardContent.displayName = "CardContent";
1671
2071
  CardBody = CardContent;
1672
2072
  CardBody.displayName = "CardBody";
1673
- CardFooter = React78__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2073
+ CardFooter = React80__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1674
2074
  "div",
1675
2075
  {
1676
2076
  ref,
@@ -1723,13 +2123,10 @@ var init_Badge = __esm({
1723
2123
  md: "px-2.5 py-1 text-sm",
1724
2124
  lg: "px-3 py-1.5 text-base"
1725
2125
  };
1726
- Badge = React78__default.forwardRef(
2126
+ Badge = React80__default.forwardRef(
1727
2127
  ({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
1728
2128
  const iconSizes3 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
1729
- const resolvedIcon = typeof icon === "string" ? (() => {
1730
- const I = resolveIcon(icon);
1731
- return I ? /* @__PURE__ */ jsx(I, { className: iconSizes3[size] }) : null;
1732
- })() : icon;
2129
+ const resolvedIcon = typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: iconSizes3[size] }) : icon;
1733
2130
  return /* @__PURE__ */ jsxs(
1734
2131
  "span",
1735
2132
  {
@@ -1815,7 +2212,7 @@ var init_FilterPill = __esm({
1815
2212
  md: "w-3.5 h-3.5",
1816
2213
  lg: "w-4 h-4"
1817
2214
  };
1818
- FilterPill = React78__default.forwardRef(
2215
+ FilterPill = React80__default.forwardRef(
1819
2216
  ({
1820
2217
  className,
1821
2218
  variant = "default",
@@ -1840,17 +2237,13 @@ var init_FilterPill = __esm({
1840
2237
  onRemove?.();
1841
2238
  if (removeEvent) eventBus.emit(`UI:${removeEvent}`, { label: payloadLabel });
1842
2239
  }, [onRemove, removeEvent, eventBus, payloadLabel]);
1843
- const XIcon = resolveIcon("x");
1844
- const resolvedIcon = typeof icon === "string" ? (() => {
1845
- const I = resolveIcon(icon);
1846
- return I ? /* @__PURE__ */ jsx(I, { className: iconSizes[size] }) : null;
1847
- })() : icon;
2240
+ const resolvedIcon = typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon, className: iconSizes[size] }) : icon;
1848
2241
  return /* @__PURE__ */ jsxs(
1849
2242
  "span",
1850
2243
  {
1851
2244
  ref,
1852
2245
  className: cn(
1853
- "inline-flex items-center gap-1 font-bold rounded-full",
2246
+ "inline-flex items-center gap-1 font-bold rounded-pill",
1854
2247
  variantStyles4[variant],
1855
2248
  sizeStyles3[size],
1856
2249
  (onClick || clickEvent) && "cursor-pointer",
@@ -1873,7 +2266,7 @@ var init_FilterPill = __esm({
1873
2266
  className: cn(
1874
2267
  "ml-0.5 rounded-full hover:bg-foreground/10 transition-colors flex items-center justify-center"
1875
2268
  ),
1876
- children: XIcon ? /* @__PURE__ */ jsx(XIcon, { className: iconSizes[size] }) : /* @__PURE__ */ jsx("span", { "aria-hidden": true, children: "\xD7" })
2269
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: iconSizes[size] })
1877
2270
  }
1878
2271
  )
1879
2272
  ]
@@ -1888,13 +2281,14 @@ var sizeStyles4, Spinner;
1888
2281
  var init_Spinner = __esm({
1889
2282
  "components/atoms/Spinner.tsx"() {
1890
2283
  init_cn();
2284
+ init_Icon();
1891
2285
  sizeStyles4 = {
1892
2286
  xs: "h-3 w-3",
1893
2287
  sm: "h-4 w-4",
1894
2288
  md: "h-6 w-6",
1895
2289
  lg: "h-8 w-8"
1896
2290
  };
1897
- Spinner = React78__default.forwardRef(
2291
+ Spinner = React80__default.forwardRef(
1898
2292
  ({ className, size = "md", ...props }, ref) => {
1899
2293
  return /* @__PURE__ */ jsx(
1900
2294
  "div",
@@ -1902,7 +2296,7 @@ var init_Spinner = __esm({
1902
2296
  ref,
1903
2297
  className: cn("text-foreground", className),
1904
2298
  ...props,
1905
- children: /* @__PURE__ */ jsx(Loader2, { className: cn("animate-spin", sizeStyles4[size]) })
2299
+ children: /* @__PURE__ */ jsx(Icon, { name: "loader", className: cn("animate-spin", sizeStyles4[size]) })
1906
2300
  }
1907
2301
  );
1908
2302
  }
@@ -1921,6 +2315,7 @@ var sizeClasses2, iconSizeClasses, statusSizeClasses, statusClasses, badgeSizeCl
1921
2315
  var init_Avatar = __esm({
1922
2316
  "components/atoms/Avatar.tsx"() {
1923
2317
  "use client";
2318
+ init_Icon();
1924
2319
  init_cn();
1925
2320
  init_useEventBus();
1926
2321
  sizeClasses2 = {
@@ -1951,8 +2346,8 @@ var init_Avatar = __esm({
1951
2346
  busy: "bg-error"
1952
2347
  };
1953
2348
  badgeSizeClasses = {
1954
- xs: "w-3 h-3 text-[8px]",
1955
- sm: "w-4 h-4 text-[10px]",
2349
+ xs: "w-3 h-3 text-xs",
2350
+ sm: "w-4 h-4 text-xs",
1956
2351
  md: "w-5 h-5 text-xs",
1957
2352
  lg: "w-6 h-6 text-sm",
1958
2353
  xl: "w-7 h-7 text-base"
@@ -1962,7 +2357,7 @@ var init_Avatar = __esm({
1962
2357
  alt,
1963
2358
  name,
1964
2359
  initials: providedInitials,
1965
- icon: Icon3,
2360
+ icon: IconComponent,
1966
2361
  size = "md",
1967
2362
  status,
1968
2363
  badge,
@@ -1975,7 +2370,7 @@ var init_Avatar = __esm({
1975
2370
  const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
1976
2371
  const hasImage = !!src;
1977
2372
  const hasInitials = !!initials;
1978
- const hasIcon = !!Icon3;
2373
+ const hasIcon = !!IconComponent;
1979
2374
  const getInitialsBackground = () => "bg-primary text-primary-foreground";
1980
2375
  const isClickable = action || onClick;
1981
2376
  const handleClick = () => {
@@ -2019,8 +2414,8 @@ var init_Avatar = __esm({
2019
2414
  ),
2020
2415
  children: initials.substring(0, 2).toUpperCase()
2021
2416
  }
2022
- ) : hasIcon ? /* @__PURE__ */ jsx(
2023
- Icon3,
2417
+ ) : hasIcon && IconComponent ? /* @__PURE__ */ jsx(
2418
+ IconComponent,
2024
2419
  {
2025
2420
  className: cn(
2026
2421
  "text-foreground",
@@ -2028,8 +2423,9 @@ var init_Avatar = __esm({
2028
2423
  )
2029
2424
  }
2030
2425
  ) : /* @__PURE__ */ jsx(
2031
- User,
2426
+ Icon,
2032
2427
  {
2428
+ name: "user",
2033
2429
  className: cn(
2034
2430
  "text-foreground",
2035
2431
  iconSizeClasses[size]
@@ -2175,7 +2571,7 @@ var init_Box = __esm({
2175
2571
  fixed: "fixed",
2176
2572
  sticky: "sticky"
2177
2573
  };
2178
- Box = React78__default.forwardRef(
2574
+ Box = React80__default.forwardRef(
2179
2575
  ({
2180
2576
  padding,
2181
2577
  paddingX,
@@ -2225,7 +2621,7 @@ var init_Box = __esm({
2225
2621
  onMouseLeave?.(e);
2226
2622
  }, [hoverEvent, eventBus, onMouseLeave]);
2227
2623
  const isClickable = action || onClick;
2228
- return React78__default.createElement(
2624
+ return React80__default.createElement(
2229
2625
  Component,
2230
2626
  {
2231
2627
  ref,
@@ -2418,7 +2814,7 @@ var init_ProgressBar = __esm({
2418
2814
  "div",
2419
2815
  {
2420
2816
  className: cn(
2421
- "h-full transition-all duration-300 ease-out",
2817
+ "h-full transition-all duration-normal ease-emphasized",
2422
2818
  colorClasses[effectiveColor]
2423
2819
  ),
2424
2820
  style: { width: `${percentage}%` },
@@ -2474,7 +2870,7 @@ var init_ProgressBar = __esm({
2474
2870
  strokeDashoffset: offset,
2475
2871
  strokeLinecap: "round",
2476
2872
  className: cn(
2477
- "transition-all duration-300 ease-out",
2873
+ "transition-all duration-normal ease-emphasized",
2478
2874
  colorClasses[effectiveColor]
2479
2875
  )
2480
2876
  }
@@ -2513,7 +2909,7 @@ var init_ProgressBar = __esm({
2513
2909
  "div",
2514
2910
  {
2515
2911
  className: cn(
2516
- "h-full transition-all duration-300 ease-out",
2912
+ "h-full transition-all duration-normal ease-emphasized",
2517
2913
  (isActive || isPartial) && colorClasses[effectiveColor]
2518
2914
  ),
2519
2915
  style: {
@@ -2536,7 +2932,7 @@ var Radio;
2536
2932
  var init_Radio = __esm({
2537
2933
  "components/atoms/Radio.tsx"() {
2538
2934
  init_cn();
2539
- Radio = React78__default.forwardRef(
2935
+ Radio = React80__default.forwardRef(
2540
2936
  ({
2541
2937
  label,
2542
2938
  helperText,
@@ -2708,7 +3104,7 @@ var init_Switch = __esm({
2708
3104
  "components/atoms/Switch.tsx"() {
2709
3105
  "use client";
2710
3106
  init_cn();
2711
- Switch = React78.forwardRef(
3107
+ Switch = React80.forwardRef(
2712
3108
  ({
2713
3109
  checked,
2714
3110
  defaultChecked = false,
@@ -2719,10 +3115,10 @@ var init_Switch = __esm({
2719
3115
  name,
2720
3116
  className
2721
3117
  }, ref) => {
2722
- const [isChecked, setIsChecked] = React78.useState(
3118
+ const [isChecked, setIsChecked] = React80.useState(
2723
3119
  checked !== void 0 ? checked : defaultChecked
2724
3120
  );
2725
- React78.useEffect(() => {
3121
+ React80.useEffect(() => {
2726
3122
  if (checked !== void 0) {
2727
3123
  setIsChecked(checked);
2728
3124
  }
@@ -3259,6 +3655,37 @@ var init_ThemeContext = __esm({
3259
3655
  displayName: "Copper",
3260
3656
  hasLightMode: true,
3261
3657
  hasDarkMode: true
3658
+ },
3659
+ // Layer 1 skin axes — truly-unique themes (compact tech / editorial / brutalist dense / display-heavy / touch-first)
3660
+ {
3661
+ name: "prism",
3662
+ displayName: "Prism",
3663
+ hasLightMode: true,
3664
+ hasDarkMode: true
3665
+ },
3666
+ {
3667
+ name: "gazette",
3668
+ displayName: "Gazette",
3669
+ hasLightMode: true,
3670
+ hasDarkMode: true
3671
+ },
3672
+ {
3673
+ name: "terminal",
3674
+ displayName: "Terminal",
3675
+ hasLightMode: true,
3676
+ hasDarkMode: true
3677
+ },
3678
+ {
3679
+ name: "atelier",
3680
+ displayName: "Atelier",
3681
+ hasLightMode: true,
3682
+ hasDarkMode: true
3683
+ },
3684
+ {
3685
+ name: "kiosk",
3686
+ displayName: "Kiosk",
3687
+ hasLightMode: true,
3688
+ hasDarkMode: true
3262
3689
  }
3263
3690
  ];
3264
3691
  ThemeContext = createContext(void 0);
@@ -3268,6 +3695,7 @@ var sizeClasses3, iconSizes2, ThemeToggle;
3268
3695
  var init_ThemeToggle = __esm({
3269
3696
  "components/atoms/ThemeToggle.tsx"() {
3270
3697
  "use client";
3698
+ init_Icon();
3271
3699
  init_cn();
3272
3700
  init_ThemeContext();
3273
3701
  sizeClasses3 = {
@@ -3297,7 +3725,7 @@ var init_ThemeToggle = __esm({
3297
3725
  "text-foreground",
3298
3726
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
3299
3727
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
3300
- "transition-colors duration-200",
3728
+ "transition-colors duration-fast",
3301
3729
  sizeClasses3[size],
3302
3730
  className
3303
3731
  ),
@@ -3305,13 +3733,15 @@ var init_ThemeToggle = __esm({
3305
3733
  title: isDark ? "Switch to light mode" : "Switch to dark mode",
3306
3734
  children: [
3307
3735
  isDark ? /* @__PURE__ */ jsx(
3308
- Sun,
3736
+ Icon,
3309
3737
  {
3738
+ name: "sun",
3310
3739
  className: cn(iconSizes2[size], "text-foreground")
3311
3740
  }
3312
3741
  ) : /* @__PURE__ */ jsx(
3313
- Moon,
3742
+ Icon,
3314
3743
  {
3744
+ name: "moon",
3315
3745
  className: cn(iconSizes2[size], "text-foreground")
3316
3746
  }
3317
3747
  ),
@@ -3523,7 +3953,7 @@ var init_FlipContainer = __esm({
3523
3953
  children: /* @__PURE__ */ jsx(
3524
3954
  Box,
3525
3955
  {
3526
- className: "relative w-full h-full transition-transform duration-500",
3956
+ className: "relative w-full h-full transition-transform duration-slow",
3527
3957
  style: {
3528
3958
  transformStyle: "preserve-3d",
3529
3959
  transform: flipped ? "rotateY(180deg)" : "rotateY(0deg)"
@@ -3541,7 +3971,7 @@ var Dialog;
3541
3971
  var init_Dialog = __esm({
3542
3972
  "components/atoms/Dialog.tsx"() {
3543
3973
  init_cn();
3544
- Dialog = React78__default.forwardRef(
3974
+ Dialog = React80__default.forwardRef(
3545
3975
  ({
3546
3976
  role = "dialog",
3547
3977
  "aria-modal": ariaModal = true,
@@ -3567,7 +3997,7 @@ var Aside;
3567
3997
  var init_Aside = __esm({
3568
3998
  "components/atoms/Aside.tsx"() {
3569
3999
  init_cn();
3570
- Aside = React78__default.forwardRef(
4000
+ Aside = React80__default.forwardRef(
3571
4001
  ({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
3572
4002
  );
3573
4003
  Aside.displayName = "Aside";
@@ -3607,7 +4037,7 @@ var init_ConditionalWrapper = __esm({
3607
4037
  Box,
3608
4038
  {
3609
4039
  overflow: "hidden",
3610
- className: `transition-all duration-200 ${isVisible ? "opacity-100 max-h-[1000px]" : "opacity-0 max-h-0"}`,
4040
+ className: `transition-all duration-fast ${isVisible ? "opacity-100 max-h-[1000px]" : "opacity-0 max-h-0"}`,
3611
4041
  children: isVisible ? children : fallback
3612
4042
  }
3613
4043
  );
@@ -3644,8 +4074,8 @@ var init_LawReferenceTooltip = __esm({
3644
4074
  position = "top",
3645
4075
  className
3646
4076
  }) => {
3647
- const [isVisible, setIsVisible] = React78__default.useState(false);
3648
- const timeoutRef = React78__default.useRef(null);
4077
+ const [isVisible, setIsVisible] = React80__default.useState(false);
4078
+ const timeoutRef = React80__default.useRef(null);
3649
4079
  const handleMouseEnter = () => {
3650
4080
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3651
4081
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -3654,7 +4084,7 @@ var init_LawReferenceTooltip = __esm({
3654
4084
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3655
4085
  setIsVisible(false);
3656
4086
  };
3657
- React78__default.useEffect(() => {
4087
+ React80__default.useEffect(() => {
3658
4088
  return () => {
3659
4089
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3660
4090
  };
@@ -3864,7 +4294,7 @@ var init_StatusDot = __esm({
3864
4294
  md: "w-2.5 h-2.5",
3865
4295
  lg: "w-3 h-3"
3866
4296
  };
3867
- StatusDot = React78__default.forwardRef(
4297
+ StatusDot = React80__default.forwardRef(
3868
4298
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
3869
4299
  return /* @__PURE__ */ jsx(
3870
4300
  "span",
@@ -3903,21 +4333,22 @@ function resolveColor(dir, invert) {
3903
4333
  const isGood = invert ? !isPositive : isPositive;
3904
4334
  return isGood ? "text-success" : "text-error";
3905
4335
  }
3906
- var sizeStyles7, iconMap, TrendIndicator;
4336
+ var sizeStyles7, iconNameMap, TrendIndicator;
3907
4337
  var init_TrendIndicator = __esm({
3908
4338
  "components/atoms/TrendIndicator.tsx"() {
4339
+ init_Icon();
3909
4340
  init_cn();
3910
4341
  sizeStyles7 = {
3911
4342
  sm: { icon: "w-3 h-3", text: "text-xs" },
3912
4343
  md: { icon: "w-4 h-4", text: "text-sm" },
3913
4344
  lg: { icon: "w-5 h-5", text: "text-base" }
3914
4345
  };
3915
- iconMap = {
3916
- up: TrendingUp,
3917
- down: TrendingDown,
3918
- flat: ArrowRight
4346
+ iconNameMap = {
4347
+ up: "trending-up",
4348
+ down: "trending-down",
4349
+ flat: "arrow-right"
3919
4350
  };
3920
- TrendIndicator = React78__default.forwardRef(
4351
+ TrendIndicator = React80__default.forwardRef(
3921
4352
  ({
3922
4353
  className,
3923
4354
  value,
@@ -3930,7 +4361,7 @@ var init_TrendIndicator = __esm({
3930
4361
  }, ref) => {
3931
4362
  const dir = resolveDirection(value, direction);
3932
4363
  const colorClass = resolveColor(dir, invert);
3933
- const IconComponent = iconMap[dir];
4364
+ const iconName = iconNameMap[dir];
3934
4365
  const styles = sizeStyles7[size];
3935
4366
  const formattedValue = value !== void 0 ? `${value > 0 ? "+" : ""}${value}%` : void 0;
3936
4367
  const ariaLabel = label ?? (formattedValue ? `${dir} ${formattedValue}` : dir);
@@ -3948,7 +4379,7 @@ var init_TrendIndicator = __esm({
3948
4379
  "aria-label": ariaLabel,
3949
4380
  ...props,
3950
4381
  children: [
3951
- /* @__PURE__ */ jsx(IconComponent, { className: styles.icon }),
4382
+ /* @__PURE__ */ jsx(Icon, { name: iconName, className: styles.icon }),
3952
4383
  showValue && formattedValue && /* @__PURE__ */ jsx("span", { children: formattedValue })
3953
4384
  ]
3954
4385
  }
@@ -3984,7 +4415,7 @@ var init_RangeSlider = __esm({
3984
4415
  md: "w-4 h-4",
3985
4416
  lg: "w-5 h-5"
3986
4417
  };
3987
- RangeSlider = React78__default.forwardRef(
4418
+ RangeSlider = React80__default.forwardRef(
3988
4419
  ({
3989
4420
  className,
3990
4421
  min = 0,
@@ -4580,7 +5011,7 @@ var init_ContentSection = __esm({
4580
5011
  md: "py-16",
4581
5012
  lg: "py-24"
4582
5013
  };
4583
- ContentSection = React78__default.forwardRef(
5014
+ ContentSection = React80__default.forwardRef(
4584
5015
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
4585
5016
  return /* @__PURE__ */ jsx(
4586
5017
  Box,
@@ -5114,7 +5545,7 @@ var init_AnimatedReveal = __esm({
5114
5545
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
5115
5546
  "none": {}
5116
5547
  };
5117
- AnimatedReveal = React78__default.forwardRef(
5548
+ AnimatedReveal = React80__default.forwardRef(
5118
5549
  ({
5119
5550
  trigger = "scroll",
5120
5551
  animation = "fade-up",
@@ -5144,7 +5575,7 @@ var init_AnimatedReveal = __esm({
5144
5575
  if (trigger !== "scroll") return;
5145
5576
  const el = internalRef.current;
5146
5577
  if (!el) return;
5147
- const observer = new IntersectionObserver(
5578
+ const observer2 = new IntersectionObserver(
5148
5579
  ([entry]) => {
5149
5580
  if (entry.isIntersecting) {
5150
5581
  if (once && hasAnimated.current) return;
@@ -5156,8 +5587,8 @@ var init_AnimatedReveal = __esm({
5156
5587
  },
5157
5588
  { threshold }
5158
5589
  );
5159
- observer.observe(el);
5160
- return () => observer.disconnect();
5590
+ observer2.observe(el);
5591
+ return () => observer2.disconnect();
5161
5592
  }, [trigger, threshold, once]);
5162
5593
  const handleMouseEnter = trigger === "hover" ? () => setIsAnimated(true) : void 0;
5163
5594
  const handleMouseLeave = trigger === "hover" ? () => {
@@ -5274,7 +5705,7 @@ var init_AnimatedGraphic = __esm({
5274
5705
  "components/atoms/AnimatedGraphic.tsx"() {
5275
5706
  "use client";
5276
5707
  init_cn();
5277
- AnimatedGraphic = React78__default.forwardRef(
5708
+ AnimatedGraphic = React80__default.forwardRef(
5278
5709
  ({
5279
5710
  src,
5280
5711
  svgContent,
@@ -5297,7 +5728,7 @@ var init_AnimatedGraphic = __esm({
5297
5728
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
5298
5729
  const resolvedSvg = svgContent ?? fetchedSvg;
5299
5730
  const prevAnimateRef = useRef(animate);
5300
- const setRef = React78__default.useCallback(
5731
+ const setRef = React80__default.useCallback(
5301
5732
  (node) => {
5302
5733
  containerRef.current = node;
5303
5734
  if (typeof ref === "function") ref(node);
@@ -5510,7 +5941,7 @@ var init_Modal = __esm({
5510
5941
  // Reset browser-default dialog chrome — we own styling.
5511
5942
  "m-0 p-0 border-0 bg-transparent",
5512
5943
  // Pre-existing dialog frame
5513
- "pointer-events-auto w-full flex flex-col bg-surface border shadow-lg rounded-md",
5944
+ "pointer-events-auto w-full flex flex-col bg-surface border shadow-elevation-dialog rounded-container",
5514
5945
  // Desktop sizing + viewport-aware floor.
5515
5946
  sizeClasses5[size],
5516
5947
  minWidthClasses[size],
@@ -5570,7 +6001,7 @@ var init_Modal = __esm({
5570
6001
  {
5571
6002
  variant: "ghost",
5572
6003
  size: "sm",
5573
- icon: X,
6004
+ icon: "x",
5574
6005
  onClick: handleClose,
5575
6006
  "data-event": "CLOSE",
5576
6007
  "aria-label": "Close modal"
@@ -5727,7 +6158,7 @@ var init_Drawer = __esm({
5727
6158
  {
5728
6159
  variant: "ghost",
5729
6160
  size: "sm",
5730
- icon: X,
6161
+ icon: "x",
5731
6162
  onClick: handleClose,
5732
6163
  "aria-label": "Close drawer",
5733
6164
  className: cn(!title && "ml-auto")
@@ -5779,7 +6210,7 @@ var init_Drawer = __esm({
5779
6210
  Drawer.displayName = "Drawer";
5780
6211
  }
5781
6212
  });
5782
- var variantClasses, iconMap2, iconColors, Toast;
6213
+ var variantClasses, iconMap, iconColors, Toast;
5783
6214
  var init_Toast = __esm({
5784
6215
  "components/molecules/Toast.tsx"() {
5785
6216
  "use client";
@@ -5796,11 +6227,11 @@ var init_Toast = __esm({
5796
6227
  info: "bg-card border-[length:var(--border-width)] border-info",
5797
6228
  warning: "bg-card border-[length:var(--border-width)] border-warning"
5798
6229
  };
5799
- iconMap2 = {
5800
- success: CheckCircle,
5801
- error: AlertCircle,
5802
- info: Info,
5803
- warning: AlertTriangle
6230
+ iconMap = {
6231
+ success: "check-circle",
6232
+ error: "alert-circle",
6233
+ info: "info",
6234
+ warning: "alert-triangle"
5804
6235
  };
5805
6236
  iconColors = {
5806
6237
  success: "text-success",
@@ -5847,7 +6278,7 @@ var init_Toast = __esm({
5847
6278
  // `min-w-[300px]` only kicks in at `sm:` and above so a phone
5848
6279
  // viewport doesn't get a toast wider than the screen near the
5849
6280
  // edge. `max-w-[calc(100vw-2rem)]` clamps to viewport too.
5850
- "border-l-4 p-4 shadow min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
6281
+ "border-l-4 p-4 shadow-elevation-toast min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
5851
6282
  "rounded-sm",
5852
6283
  variantClasses[variant],
5853
6284
  className
@@ -5857,7 +6288,7 @@ var init_Toast = __esm({
5857
6288
  /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
5858
6289
  Icon,
5859
6290
  {
5860
- icon: iconMap2[variant],
6291
+ name: iconMap[variant],
5861
6292
  size: "md",
5862
6293
  className: iconColors[variant]
5863
6294
  }
@@ -5874,7 +6305,7 @@ var init_Toast = __esm({
5874
6305
  {
5875
6306
  variant: "ghost",
5876
6307
  size: "sm",
5877
- icon: X,
6308
+ icon: "x",
5878
6309
  onClick: handleDismiss,
5879
6310
  "aria-label": "Dismiss toast",
5880
6311
  className: "flex-shrink-0"
@@ -6055,6 +6486,7 @@ var init_ErrorState = __esm({
6055
6486
  init_Box();
6056
6487
  init_Stack();
6057
6488
  init_Typography();
6489
+ init_Icon();
6058
6490
  init_useEventBus();
6059
6491
  init_useTranslate();
6060
6492
  ErrorState = ({
@@ -6082,7 +6514,7 @@ var init_ErrorState = __esm({
6082
6514
  className
6083
6515
  ),
6084
6516
  children: [
6085
- /* @__PURE__ */ jsx(Box, { className: "mb-4 rounded-full bg-error/10 p-3", children: /* @__PURE__ */ jsx(AlertCircle, { className: "h-8 w-8 text-error" }) }),
6517
+ /* @__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" }) }),
6086
6518
  /* @__PURE__ */ jsx(Typography, { variant: "h3", className: "text-lg font-medium text-foreground", children: resolvedTitle }),
6087
6519
  /* @__PURE__ */ jsx(Typography, { variant: "small", className: "mt-1 text-muted-foreground max-w-sm", children: resolvedMessage }),
6088
6520
  (onRetry || retryEvent) && /* @__PURE__ */ jsx(Button, { variant: "secondary", className: "mt-4", onClick: handleRetry, children: t("error.retry") })
@@ -6099,7 +6531,7 @@ var init_ErrorBoundary = __esm({
6099
6531
  "use client";
6100
6532
  init_cn();
6101
6533
  init_ErrorState();
6102
- ErrorBoundary = class extends React78__default.Component {
6534
+ ErrorBoundary = class extends React80__default.Component {
6103
6535
  constructor(props) {
6104
6536
  super(props);
6105
6537
  __publicField(this, "reset", () => {
@@ -6443,7 +6875,7 @@ var init_InstallBox = __esm({
6443
6875
  /* @__PURE__ */ jsx(
6444
6876
  Box,
6445
6877
  {
6446
- className: "bg-surface rounded-md border-[length:var(--border-width)] border-border",
6878
+ className: "bg-surface rounded-container border-[length:var(--border-width)] border-border",
6447
6879
  padding: "md",
6448
6880
  children: /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-3", children: [
6449
6881
  /* @__PURE__ */ jsx(
@@ -6997,7 +7429,7 @@ var init_AboutPageTemplate = __esm({
6997
7429
  AboutPageTemplate.displayName = "AboutPageTemplate";
6998
7430
  }
6999
7431
  });
7000
- var variantBorderClasses, variantIconColors, iconMap3, Alert;
7432
+ var variantBorderClasses, variantIconColors, iconMap2, Alert;
7001
7433
  var init_Alert = __esm({
7002
7434
  "components/molecules/Alert.tsx"() {
7003
7435
  "use client";
@@ -7018,11 +7450,11 @@ var init_Alert = __esm({
7018
7450
  warning: "text-warning",
7019
7451
  error: "text-error"
7020
7452
  };
7021
- iconMap3 = {
7022
- info: Info,
7023
- success: CheckCircle,
7024
- warning: AlertTriangle,
7025
- error: AlertCircle
7453
+ iconMap2 = {
7454
+ info: "info",
7455
+ success: "check-circle",
7456
+ warning: "alert-triangle",
7457
+ error: "alert-circle"
7026
7458
  };
7027
7459
  Alert = ({
7028
7460
  children,
@@ -7057,7 +7489,7 @@ var init_Alert = __esm({
7057
7489
  /* @__PURE__ */ jsx("div", { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
7058
7490
  Icon,
7059
7491
  {
7060
- icon: iconMap3[variant],
7492
+ name: iconMap2[variant],
7061
7493
  size: "md",
7062
7494
  className: variantIconColors[variant]
7063
7495
  }
@@ -7077,7 +7509,7 @@ var init_Alert = __esm({
7077
7509
  "hover:bg-muted"
7078
7510
  ),
7079
7511
  "aria-label": "Dismiss alert",
7080
- children: /* @__PURE__ */ jsx(Icon, { icon: X, size: "sm" })
7512
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "sm" })
7081
7513
  }
7082
7514
  )
7083
7515
  ] })
@@ -7153,8 +7585,8 @@ var init_Tooltip = __esm({
7153
7585
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
7154
7586
  };
7155
7587
  }, []);
7156
- const triggerElement = React78__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7157
- const trigger = React78__default.cloneElement(triggerElement, {
7588
+ const triggerElement = React80__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7589
+ const trigger = React80__default.cloneElement(triggerElement, {
7158
7590
  ref: triggerRef,
7159
7591
  onMouseEnter: handleMouseEnter,
7160
7592
  onMouseLeave: handleMouseLeave,
@@ -7168,7 +7600,7 @@ var init_Tooltip = __esm({
7168
7600
  className: cn(
7169
7601
  "fixed z-50 px-3 py-2 max-w-xs",
7170
7602
  "bg-primary text-primary-foreground",
7171
- "shadow-sm rounded-sm",
7603
+ "shadow-elevation-popover rounded-sm",
7172
7604
  "text-sm pointer-events-none",
7173
7605
  "break-words whitespace-normal",
7174
7606
  "h-auto min-h-fit",
@@ -7309,8 +7741,8 @@ var init_Popover = __esm({
7309
7741
  onMouseEnter: handleOpen,
7310
7742
  onMouseLeave: handleClose
7311
7743
  };
7312
- const childElement = React78__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7313
- const triggerElement = React78__default.cloneElement(
7744
+ const childElement = React80__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7745
+ const triggerElement = React80__default.cloneElement(
7314
7746
  childElement,
7315
7747
  {
7316
7748
  ref: triggerRef,
@@ -7323,7 +7755,7 @@ var init_Popover = __esm({
7323
7755
  ref: popoverRef,
7324
7756
  className: cn(
7325
7757
  "fixed z-50 p-4",
7326
- "bg-card border-2 border-border shadow-lg",
7758
+ "bg-card border-2 border-border shadow-elevation-popover",
7327
7759
  positionClasses2[position],
7328
7760
  className
7329
7761
  ),
@@ -7426,8 +7858,8 @@ var init_Menu = __esm({
7426
7858
  "bottom-start": "top-full left-0 mt-2",
7427
7859
  "bottom-end": "top-full right-0 mt-2"
7428
7860
  };
7429
- const triggerChild = React78__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
7430
- const triggerElement = React78__default.cloneElement(
7861
+ const triggerChild = React80__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
7862
+ const triggerElement = React80__default.cloneElement(
7431
7863
  triggerChild,
7432
7864
  {
7433
7865
  ref: triggerRef,
@@ -7437,7 +7869,7 @@ var init_Menu = __esm({
7437
7869
  const menuContainerStyles = cn(
7438
7870
  "bg-card",
7439
7871
  "border-[length:var(--border-width)] border-border",
7440
- "shadow",
7872
+ "shadow-elevation-popover",
7441
7873
  "rounded-sm",
7442
7874
  "min-w-0 sm:min-w-[200px] max-w-[calc(100vw-1rem)] py-1"
7443
7875
  );
@@ -7472,7 +7904,7 @@ var init_Menu = __esm({
7472
7904
  }
7473
7905
  ),
7474
7906
  item.badge !== void 0 && /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", children: item.badge }),
7475
- hasSubMenu && /* @__PURE__ */ jsx(Icon, { icon: ChevronRight, size: "sm", className: "flex-shrink-0" })
7907
+ hasSubMenu && /* @__PURE__ */ jsx(Icon, { name: "chevron-right", size: "sm", className: "flex-shrink-0" })
7476
7908
  ] })
7477
7909
  },
7478
7910
  itemId
@@ -7605,7 +8037,7 @@ var init_Accordion = __esm({
7605
8037
  "w-full flex items-center justify-between px-4 py-3",
7606
8038
  "bg-card",
7607
8039
  "hover:bg-muted",
7608
- "transition-colors duration-200",
8040
+ "transition-colors duration-fast",
7609
8041
  "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
7610
8042
  "disabled:opacity-50 disabled:cursor-not-allowed",
7611
8043
  isOpen && "bg-muted font-bold"
@@ -7617,10 +8049,10 @@ var init_Accordion = __esm({
7617
8049
  /* @__PURE__ */ jsx(
7618
8050
  Icon,
7619
8051
  {
7620
- icon: ChevronDown,
8052
+ name: "chevron-down",
7621
8053
  size: "sm",
7622
8054
  className: cn(
7623
- "transition-transform duration-200",
8055
+ "transition-transform duration-fast",
7624
8056
  isOpen && "transform rotate-180"
7625
8057
  )
7626
8058
  }
@@ -7642,15 +8074,6 @@ var init_Accordion = __esm({
7642
8074
  Accordion.displayName = "Accordion";
7643
8075
  }
7644
8076
  });
7645
- function resolveIcon2(name) {
7646
- const pascalName = name.split(/[-_]/).map((part) => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()).join("");
7647
- const icons = LucideIcons;
7648
- const icon = icons[pascalName];
7649
- if (icon) {
7650
- return icon;
7651
- }
7652
- return Plus;
7653
- }
7654
8077
  var FloatingActionButton;
7655
8078
  var init_FloatingActionButton = __esm({
7656
8079
  "components/molecules/FloatingActionButton.tsx"() {
@@ -7676,7 +8099,7 @@ var init_FloatingActionButton = __esm({
7676
8099
  const eventBus = useEventBus();
7677
8100
  const { t } = useTranslate();
7678
8101
  const resolvedAction = icon ? {
7679
- icon: resolveIcon2(icon),
8102
+ icon,
7680
8103
  onClick: () => {
7681
8104
  if (action) eventBus.emit(`UI:${action}`, actionPayload ?? {});
7682
8105
  onClick?.();
@@ -7750,7 +8173,7 @@ var init_FloatingActionButton = __esm({
7750
8173
  {
7751
8174
  align: "center",
7752
8175
  gap: "sm",
7753
- className: "transition-all duration-200",
8176
+ className: "transition-all duration-fast",
7754
8177
  style: {
7755
8178
  opacity: isExpanded ? 1 : 0,
7756
8179
  transform: isExpanded ? "translateY(0)" : "translateY(10px)",
@@ -7786,9 +8209,9 @@ var init_FloatingActionButton = __esm({
7786
8209
  {
7787
8210
  variant: isExpanded ? "secondary" : "primary",
7788
8211
  size: "lg",
7789
- icon: isExpanded ? X : Plus,
8212
+ icon: isExpanded ? "x" : "plus",
7790
8213
  onClick: handleMainClick,
7791
- className: "rounded-full shadow-lg transition-all duration-300",
8214
+ className: "rounded-full shadow-lg transition-all duration-normal",
7792
8215
  "aria-label": isExpanded ? "Close actions" : "Open actions",
7793
8216
  "aria-expanded": isExpanded,
7794
8217
  children: /* @__PURE__ */ jsx(Typography, { as: "span", className: "sr-only", children: isExpanded ? t("common.close") : t("common.open") })
@@ -7843,13 +8266,13 @@ var init_MapView = __esm({
7843
8266
  shadowSize: [41, 41]
7844
8267
  });
7845
8268
  L.Marker.prototype.options.icon = defaultIcon;
7846
- const { useEffect: useEffect71, useRef: useRef66, useCallback: useCallback127, useState: useState109 } = React78__default;
8269
+ const { useEffect: useEffect72, useRef: useRef66, useCallback: useCallback127, useState: useState110 } = React80__default;
7847
8270
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
7848
8271
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
7849
8272
  function MapUpdater({ centerLat, centerLng, zoom }) {
7850
8273
  const map = useMap();
7851
8274
  const prevRef = useRef66({ centerLat, centerLng, zoom });
7852
- useEffect71(() => {
8275
+ useEffect72(() => {
7853
8276
  const prev = prevRef.current;
7854
8277
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
7855
8278
  map.setView([centerLat, centerLng], zoom);
@@ -7860,7 +8283,7 @@ var init_MapView = __esm({
7860
8283
  }
7861
8284
  function MapClickHandler({ onMapClick }) {
7862
8285
  const map = useMap();
7863
- useEffect71(() => {
8286
+ useEffect72(() => {
7864
8287
  if (!onMapClick) return;
7865
8288
  const handler = (e) => {
7866
8289
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -7888,7 +8311,7 @@ var init_MapView = __esm({
7888
8311
  showAttribution = true
7889
8312
  }) {
7890
8313
  const eventBus = useEventBus2();
7891
- const [clickedPosition, setClickedPosition] = useState109(null);
8314
+ const [clickedPosition, setClickedPosition] = useState110(null);
7892
8315
  const handleMapClick = useCallback127((lat, lng) => {
7893
8316
  if (showClickedPin) {
7894
8317
  setClickedPosition({ lat, lng });
@@ -8089,7 +8512,7 @@ function InputPattern({
8089
8512
  fieldName
8090
8513
  }) {
8091
8514
  const { emit } = useEventBus();
8092
- const [localValue, setLocalValue] = React78__default.useState(value);
8515
+ const [localValue, setLocalValue] = React80__default.useState(value);
8093
8516
  const handleChange = (e) => {
8094
8517
  setLocalValue(e.target.value);
8095
8518
  if (onChange) {
@@ -8127,7 +8550,7 @@ function TextareaPattern({
8127
8550
  fieldName
8128
8551
  }) {
8129
8552
  const { emit } = useEventBus();
8130
- const [localValue, setLocalValue] = React78__default.useState(value);
8553
+ const [localValue, setLocalValue] = React80__default.useState(value);
8131
8554
  const handleChange = (e) => {
8132
8555
  setLocalValue(e.target.value);
8133
8556
  if (onChange) {
@@ -8159,7 +8582,7 @@ function SelectPattern({
8159
8582
  fieldName
8160
8583
  }) {
8161
8584
  const { emit } = useEventBus();
8162
- const [localValue, setLocalValue] = React78__default.useState(value);
8585
+ const [localValue, setLocalValue] = React80__default.useState(value);
8163
8586
  const handleChange = (e) => {
8164
8587
  setLocalValue(e.target.value);
8165
8588
  if (onChange) {
@@ -8188,7 +8611,7 @@ function CheckboxPattern({
8188
8611
  className
8189
8612
  }) {
8190
8613
  const { emit } = useEventBus();
8191
- const [localChecked, setLocalChecked] = React78__default.useState(checked);
8614
+ const [localChecked, setLocalChecked] = React80__default.useState(checked);
8192
8615
  const handleChange = (e) => {
8193
8616
  setLocalChecked(e.target.checked);
8194
8617
  if (onChange) {
@@ -8501,9 +8924,9 @@ function ControlButton({
8501
8924
  className
8502
8925
  }) {
8503
8926
  const eventBus = useEventBus();
8504
- const [isPressed, setIsPressed] = React78.useState(false);
8927
+ const [isPressed, setIsPressed] = React80.useState(false);
8505
8928
  const actualPressed = pressed ?? isPressed;
8506
- const handlePointerDown = React78.useCallback(
8929
+ const handlePointerDown = React80.useCallback(
8507
8930
  (e) => {
8508
8931
  e.preventDefault();
8509
8932
  if (disabled) return;
@@ -8513,7 +8936,7 @@ function ControlButton({
8513
8936
  },
8514
8937
  [disabled, pressEvent, eventBus, onPress]
8515
8938
  );
8516
- const handlePointerUp = React78.useCallback(
8939
+ const handlePointerUp = React80.useCallback(
8517
8940
  (e) => {
8518
8941
  e.preventDefault();
8519
8942
  if (disabled) return;
@@ -8523,7 +8946,7 @@ function ControlButton({
8523
8946
  },
8524
8947
  [disabled, releaseEvent, eventBus, onRelease]
8525
8948
  );
8526
- const handlePointerLeave = React78.useCallback(
8949
+ const handlePointerLeave = React80.useCallback(
8527
8950
  (e) => {
8528
8951
  if (isPressed) {
8529
8952
  setIsPressed(false);
@@ -8600,8 +9023,8 @@ function ActionButtons({
8600
9023
  disabled
8601
9024
  }) {
8602
9025
  const eventBus = useEventBus();
8603
- const [activeButtons, setActiveButtons] = React78.useState(/* @__PURE__ */ new Set());
8604
- const handlePress = React78.useCallback(
9026
+ const [activeButtons, setActiveButtons] = React80.useState(/* @__PURE__ */ new Set());
9027
+ const handlePress = React80.useCallback(
8605
9028
  (id) => {
8606
9029
  setActiveButtons((prev) => new Set(prev).add(id));
8607
9030
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -8609,7 +9032,7 @@ function ActionButtons({
8609
9032
  },
8610
9033
  [actionEvent, eventBus, onAction]
8611
9034
  );
8612
- const handleRelease = React78.useCallback(
9035
+ const handleRelease = React80.useCallback(
8613
9036
  (id) => {
8614
9037
  setActiveButtons((prev) => {
8615
9038
  const next = new Set(prev);
@@ -9339,7 +9762,7 @@ function IsometricCanvas({
9339
9762
  const el = containerRef.current;
9340
9763
  if (!el) return;
9341
9764
  if (typeof ResizeObserver === "undefined") return;
9342
- const observer = new ResizeObserver((entries) => {
9765
+ const observer2 = new ResizeObserver((entries) => {
9343
9766
  const entry = entries[0];
9344
9767
  if (entry) {
9345
9768
  const w = Math.round(entry.contentRect.width) || 800;
@@ -9350,8 +9773,8 @@ function IsometricCanvas({
9350
9773
  });
9351
9774
  }
9352
9775
  });
9353
- observer.observe(el);
9354
- return () => observer.disconnect();
9776
+ observer2.observe(el);
9777
+ return () => observer2.disconnect();
9355
9778
  }, []);
9356
9779
  const units = useMemo(
9357
9780
  () => unitsProp.map((u) => u.position ? u : { ...u, position: { x: u.x ?? 0, y: u.y ?? 0 } }),
@@ -11371,7 +11794,7 @@ var init_MarkdownContent = __esm({
11371
11794
  init_Box();
11372
11795
  init_useTranslate();
11373
11796
  init_cn();
11374
- MarkdownContent = React78__default.memo(
11797
+ MarkdownContent = React80__default.memo(
11375
11798
  ({ content, direction, className }) => {
11376
11799
  const { t: _t } = useTranslate();
11377
11800
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -11517,6 +11940,7 @@ var init_CodeBlock = __esm({
11517
11940
  init_Badge();
11518
11941
  init_Stack();
11519
11942
  init_Textarea();
11943
+ init_Icon();
11520
11944
  init_useEventBus();
11521
11945
  init_useTranslate();
11522
11946
  SyntaxHighlighter.registerLanguage("json", langJson);
@@ -11589,7 +12013,7 @@ var init_CodeBlock = __esm({
11589
12013
  log5 = createLogger("almadar:ui:markdown-code");
11590
12014
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
11591
12015
  HIDDEN_LINE_NUMBERS = { display: "none" };
11592
- CodeBlock = React78__default.memo(
12016
+ CodeBlock = React80__default.memo(
11593
12017
  ({
11594
12018
  code: rawCode,
11595
12019
  language = "text",
@@ -11807,7 +12231,7 @@ var init_CodeBlock = __esm({
11807
12231
  onClick: handleCopy,
11808
12232
  className: "opacity-0 group-hover:opacity-100 focus:opacity-100 transition-opacity text-muted-foreground hover:text-white",
11809
12233
  "aria-label": "Copy code",
11810
- children: copied ? /* @__PURE__ */ jsx(Check, { size: 16, className: "text-green-400" }) : /* @__PURE__ */ jsx(Copy, { size: 16 })
12234
+ 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" })
11811
12235
  }
11812
12236
  )
11813
12237
  ]
@@ -12043,8 +12467,8 @@ function Card2({
12043
12467
  className: `
12044
12468
  bg-card
12045
12469
  border border-border
12046
- rounded-md shadow-sm
12047
- ${isClickable ? "cursor-pointer hover:shadow-lg transition-shadow" : ""}
12470
+ rounded-container shadow-elevation-card
12471
+ ${isClickable ? "cursor-pointer hover:shadow-elevation-dialog transition-shadow" : ""}
12048
12472
  ${className}
12049
12473
  `,
12050
12474
  onClick: isClickable ? handleClick : void 0,
@@ -12138,7 +12562,7 @@ var init_QuizBlock = __esm({
12138
12562
  className: "self-start ml-7",
12139
12563
  children: /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
12140
12564
  /* @__PURE__ */ jsx(Typography, { variant: "caption", children: revealed ? t("quiz.hideAnswer") : t("quiz.showAnswer") }),
12141
- revealed ? /* @__PURE__ */ jsx(ChevronUp, { size: 14 }) : /* @__PURE__ */ jsx(ChevronDown, { size: 14 })
12565
+ 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" })
12142
12566
  ] })
12143
12567
  }
12144
12568
  )
@@ -12898,7 +13322,7 @@ var init_StateMachineView = __esm({
12898
13322
  style: { top: title ? 30 : 0 },
12899
13323
  children: [
12900
13324
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
12901
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React78__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
13325
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React80__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
12902
13326
  StateNode,
12903
13327
  {
12904
13328
  state,
@@ -14046,28 +14470,22 @@ var init_BookTableOfContents = __esm({
14046
14470
  BookTableOfContents.displayName = "BookTableOfContents";
14047
14471
  }
14048
14472
  });
14049
- var ICON_MAP, EmptyState;
14473
+ var ICON_NAME_ALIASES, EmptyState;
14050
14474
  var init_EmptyState = __esm({
14051
14475
  "components/molecules/EmptyState.tsx"() {
14052
14476
  "use client";
14053
14477
  init_cn();
14054
14478
  init_atoms();
14055
14479
  init_Box();
14480
+ init_Icon();
14056
14481
  init_Stack();
14057
14482
  init_Typography();
14058
14483
  init_useEventBus();
14059
14484
  init_useTranslate();
14060
- ICON_MAP = {
14061
- "check-circle": CheckCircle,
14062
- check: CheckCircle,
14063
- "x-circle": XCircle,
14064
- error: XCircle,
14065
- "alert-circle": AlertCircle,
14066
- warning: AlertCircle,
14067
- info: Info,
14068
- search: Search,
14069
- inbox: Inbox,
14070
- "file-question": FileQuestion
14485
+ ICON_NAME_ALIASES = {
14486
+ check: "check-circle",
14487
+ error: "x-circle",
14488
+ warning: "alert-circle"
14071
14489
  };
14072
14490
  EmptyState = ({
14073
14491
  icon,
@@ -14087,7 +14505,9 @@ var init_EmptyState = __esm({
14087
14505
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, {});
14088
14506
  onAction?.();
14089
14507
  };
14090
- const Icon3 = typeof icon === "string" ? ICON_MAP[icon] : icon;
14508
+ const iconName = typeof icon === "string" ? ICON_NAME_ALIASES[icon] ?? icon : void 0;
14509
+ const iconComponent = typeof icon === "function" ? icon : void 0;
14510
+ const hasIcon = Boolean(iconName || iconComponent);
14091
14511
  const isDestructive = destructive || variant === "error";
14092
14512
  const isSuccess = variant === "success";
14093
14513
  const displayText = title || message || t("empty.noItems");
@@ -14100,7 +14520,7 @@ var init_EmptyState = __esm({
14100
14520
  className
14101
14521
  ),
14102
14522
  children: [
14103
- Icon3 && /* @__PURE__ */ jsx(
14523
+ hasIcon && /* @__PURE__ */ jsx(
14104
14524
  Box,
14105
14525
  {
14106
14526
  className: cn(
@@ -14108,8 +14528,9 @@ var init_EmptyState = __esm({
14108
14528
  isDestructive ? "bg-error/10" : isSuccess ? "bg-success/10" : "bg-muted"
14109
14529
  ),
14110
14530
  children: /* @__PURE__ */ jsx(
14111
- Icon3,
14531
+ Icon,
14112
14532
  {
14533
+ ...iconName ? { name: iconName } : { icon: iconComponent },
14113
14534
  className: cn(
14114
14535
  "h-8 w-8",
14115
14536
  isDestructive ? "text-error" : isSuccess ? "text-success" : "text-muted-foreground"
@@ -14479,7 +14900,7 @@ var init_Grid = __esm({
14479
14900
  as: Component = "div"
14480
14901
  }) => {
14481
14902
  const mergedStyle = rows ? { gridTemplateRows: `repeat(${rows}, minmax(0, 1fr))`, ...style } : style;
14482
- return React78__default.createElement(
14903
+ return React80__default.createElement(
14483
14904
  Component,
14484
14905
  {
14485
14906
  className: cn(
@@ -14849,7 +15270,7 @@ var init_BranchingLogicBuilder = __esm({
14849
15270
  const height = PADDING * 2 + items.length * (NODE_HEIGHT + NODE_GAP_Y);
14850
15271
  return { items, positions, width, height };
14851
15272
  }, [questions]);
14852
- return /* @__PURE__ */ jsx(Box, { className: "overflow-auto rounded-md border border-border bg-card p-2", children: /* @__PURE__ */ jsxs(
15273
+ return /* @__PURE__ */ jsx(Box, { className: "overflow-auto rounded-container border border-border bg-card p-2", children: /* @__PURE__ */ jsxs(
14853
15274
  "svg",
14854
15275
  {
14855
15276
  width: layout.width,
@@ -15092,7 +15513,7 @@ var init_Breadcrumb = __esm({
15092
15513
  init_useEventBus();
15093
15514
  Breadcrumb = ({
15094
15515
  items,
15095
- separator = ChevronRight,
15516
+ separator = "chevron-right",
15096
15517
  maxItems,
15097
15518
  className
15098
15519
  }) => {
@@ -15121,7 +15542,7 @@ var init_Breadcrumb = __esm({
15121
15542
  ),
15122
15543
  "aria-current": isLast ? "page" : void 0,
15123
15544
  children: [
15124
- item.icon && /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" }),
15545
+ item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" })),
15125
15546
  /* @__PURE__ */ jsx(
15126
15547
  Typography,
15127
15548
  {
@@ -15148,7 +15569,7 @@ var init_Breadcrumb = __esm({
15148
15569
  "aria-current": isLast ? "page" : void 0,
15149
15570
  disabled: isLast,
15150
15571
  children: [
15151
- item.icon && /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" }),
15572
+ item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" })),
15152
15573
  /* @__PURE__ */ jsx(
15153
15574
  Typography,
15154
15575
  {
@@ -15160,14 +15581,7 @@ var init_Breadcrumb = __esm({
15160
15581
  ]
15161
15582
  }
15162
15583
  ),
15163
- !isLast && /* @__PURE__ */ jsx(
15164
- Icon,
15165
- {
15166
- icon: separator,
15167
- size: "sm",
15168
- className: "text-muted-foreground"
15169
- }
15170
- )
15584
+ !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" }))
15171
15585
  ] }, index);
15172
15586
  }) })
15173
15587
  }
@@ -15688,7 +16102,7 @@ function CalendarGrid({
15688
16102
  {
15689
16103
  variant: "ghost",
15690
16104
  size: "sm",
15691
- icon: ChevronLeft,
16105
+ icon: "chevron-left",
15692
16106
  onClick: stepPrev,
15693
16107
  "aria-disabled": !canPrev || void 0,
15694
16108
  "aria-label": "Previous days",
@@ -15701,7 +16115,7 @@ function CalendarGrid({
15701
16115
  {
15702
16116
  variant: "ghost",
15703
16117
  size: "sm",
15704
- iconRight: ChevronRight,
16118
+ iconRight: "chevron-right",
15705
16119
  onClick: stepNext,
15706
16120
  "aria-disabled": !canNext || void 0,
15707
16121
  "aria-label": "Next days",
@@ -17747,7 +18161,7 @@ var init_Carousel = __esm({
17747
18161
  Box,
17748
18162
  {
17749
18163
  className: cn(
17750
- "rounded-full cursor-pointer transition-all duration-200"
18164
+ "rounded-full cursor-pointer transition-all duration-fast"
17751
18165
  ),
17752
18166
  style: {
17753
18167
  width: isActive ? 10 : 8,
@@ -18885,7 +19299,7 @@ var init_CodeExample = __esm({
18885
19299
  {
18886
19300
  className: cn(
18887
19301
  "bg-foreground",
18888
- "rounded-md",
19302
+ "rounded-container",
18889
19303
  "border-[length:var(--border-width)] border-border",
18890
19304
  "overflow-hidden",
18891
19305
  className
@@ -19718,7 +20132,7 @@ function CounterMinimal({
19718
20132
  size: sizeStyles9[size].button,
19719
20133
  onClick: onDecrement,
19720
20134
  disabled: resolved.decrementDisabled,
19721
- icon: Minus,
20135
+ icon: "minus",
19722
20136
  children: resolved.decrementLabel
19723
20137
  }
19724
20138
  ),
@@ -19740,7 +20154,7 @@ function CounterMinimal({
19740
20154
  size: sizeStyles9[size].button,
19741
20155
  onClick: onIncrement,
19742
20156
  disabled: resolved.incrementDisabled,
19743
- icon: Plus,
20157
+ icon: "plus",
19744
20158
  children: resolved.incrementLabel
19745
20159
  }
19746
20160
  )
@@ -19786,7 +20200,7 @@ function CounterStandard({
19786
20200
  size: sizeStyles9[size].button,
19787
20201
  onClick: onDecrement,
19788
20202
  disabled: resolved.decrementDisabled,
19789
- icon: Minus
20203
+ icon: "minus"
19790
20204
  }
19791
20205
  ),
19792
20206
  /* @__PURE__ */ jsx(
@@ -19796,7 +20210,7 @@ function CounterStandard({
19796
20210
  size: sizeStyles9[size].button,
19797
20211
  onClick: onIncrement,
19798
20212
  disabled: resolved.incrementDisabled,
19799
- icon: Plus
20213
+ icon: "plus"
19800
20214
  }
19801
20215
  )
19802
20216
  ] }),
@@ -19806,7 +20220,7 @@ function CounterStandard({
19806
20220
  variant: "ghost",
19807
20221
  size: "sm",
19808
20222
  onClick: onReset,
19809
- icon: RotateCcw,
20223
+ icon: "rotate-ccw",
19810
20224
  children: "Reset"
19811
20225
  }
19812
20226
  )
@@ -19855,7 +20269,7 @@ function CounterFull({
19855
20269
  size: sizeStyles9[size].button,
19856
20270
  onClick: onDecrement,
19857
20271
  disabled: resolved.decrementDisabled,
19858
- icon: Minus,
20272
+ icon: "minus",
19859
20273
  children: resolved.decrementLabel
19860
20274
  }
19861
20275
  ),
@@ -19866,7 +20280,7 @@ function CounterFull({
19866
20280
  size: sizeStyles9[size].button,
19867
20281
  onClick: onIncrement,
19868
20282
  disabled: resolved.incrementDisabled,
19869
- icon: Plus,
20283
+ icon: "plus",
19870
20284
  children: resolved.incrementLabel
19871
20285
  }
19872
20286
  )
@@ -19877,7 +20291,7 @@ function CounterFull({
19877
20291
  variant: "ghost",
19878
20292
  size: "sm",
19879
20293
  onClick: onReset,
19880
- icon: RotateCcw,
20294
+ icon: "rotate-ccw",
19881
20295
  children: "Reset to 0"
19882
20296
  }
19883
20297
  )
@@ -20000,7 +20414,7 @@ function CraftingRecipe({
20000
20414
  className
20001
20415
  }) {
20002
20416
  const eventBus = useEventBus();
20003
- const handleCraft = React78.useCallback(() => {
20417
+ const handleCraft = React80.useCallback(() => {
20004
20418
  onCraft?.();
20005
20419
  if (craftEvent) {
20006
20420
  eventBus.emit(craftEvent, { output: output.label });
@@ -20017,7 +20431,7 @@ function CraftingRecipe({
20017
20431
  children: [
20018
20432
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
20019
20433
  const hasSufficient = ingredient.available >= ingredient.required;
20020
- return /* @__PURE__ */ jsxs(React78.Fragment, { children: [
20434
+ return /* @__PURE__ */ jsxs(React80.Fragment, { children: [
20021
20435
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
20022
20436
  ItemSlot,
20023
20437
  {
@@ -20080,8 +20494,8 @@ function DPad({
20080
20494
  }) {
20081
20495
  const eventBus = useEventBus();
20082
20496
  const sizes = sizeMap6[size];
20083
- const [activeDirections, setActiveDirections] = React78.useState(/* @__PURE__ */ new Set());
20084
- const handlePress = React78.useCallback(
20497
+ const [activeDirections, setActiveDirections] = React80.useState(/* @__PURE__ */ new Set());
20498
+ const handlePress = React80.useCallback(
20085
20499
  (direction) => {
20086
20500
  setActiveDirections((prev) => new Set(prev).add(direction));
20087
20501
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -20089,7 +20503,7 @@ function DPad({
20089
20503
  },
20090
20504
  [directionEvent, eventBus, onDirection]
20091
20505
  );
20092
- const handleRelease = React78.useCallback(
20506
+ const handleRelease = React80.useCallback(
20093
20507
  (direction) => {
20094
20508
  setActiveDirections((prev) => {
20095
20509
  const next = new Set(prev);
@@ -20407,7 +20821,7 @@ var init_DashboardLayout = __esm({
20407
20821
  variant: "ghost",
20408
20822
  className: "@lg/dashboard:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground",
20409
20823
  onClick: () => setSidebarOpen(false),
20410
- children: /* @__PURE__ */ jsx(X, { className: "h-5 w-5" })
20824
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-5 w-5" })
20411
20825
  }
20412
20826
  )
20413
20827
  ]
@@ -20453,7 +20867,7 @@ var init_DashboardLayout = __esm({
20453
20867
  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",
20454
20868
  onClick: () => setSidebarOpen(true),
20455
20869
  "aria-label": "Open sidebar",
20456
- children: /* @__PURE__ */ jsx(Menu$1, { className: "h-5 w-5" })
20870
+ children: /* @__PURE__ */ jsx(Icon, { name: "menu", className: "h-5 w-5" })
20457
20871
  }
20458
20872
  ),
20459
20873
  isTopNav && /* @__PURE__ */ jsxs(
@@ -20496,7 +20910,7 @@ var init_DashboardLayout = __esm({
20496
20910
  }
20497
20911
  ),
20498
20912
  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: [
20499
- /* @__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" }),
20913
+ /* @__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" }),
20500
20914
  /* @__PURE__ */ jsx(
20501
20915
  Input,
20502
20916
  {
@@ -20547,7 +20961,7 @@ var init_DashboardLayout = __esm({
20547
20961
  onClick: handleNotificationClick,
20548
20962
  "aria-label": t("common.notifications"),
20549
20963
  children: [
20550
- /* @__PURE__ */ jsx(Bell, { className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
20964
+ /* @__PURE__ */ jsx(Icon, { name: "bell", className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
20551
20965
  unreadCount > 0 && /* @__PURE__ */ jsx(
20552
20966
  Box,
20553
20967
  {
@@ -20585,7 +20999,7 @@ var init_DashboardLayout = __esm({
20585
20999
  children: user.name
20586
21000
  }
20587
21001
  ),
20588
- /* @__PURE__ */ jsx(ChevronDown, { className: "hidden @sm/dashboard:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
21002
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: "hidden @sm/dashboard:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
20589
21003
  ]
20590
21004
  }
20591
21005
  ),
@@ -20628,7 +21042,7 @@ var init_DashboardLayout = __esm({
20628
21042
  },
20629
21043
  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",
20630
21044
  children: [
20631
- /* @__PURE__ */ jsx(LogOut, { className: "h-4 w-4" }),
21045
+ /* @__PURE__ */ jsx(Icon, { name: "log-out", className: "h-4 w-4" }),
20632
21046
  t("auth.signOut")
20633
21047
  ]
20634
21048
  }
@@ -20810,14 +21224,14 @@ function useDataDnd(args) {
20810
21224
  const isZone = Boolean(dragGroup || accepts || sortable);
20811
21225
  const enabled = isZone || Boolean(dndRoot);
20812
21226
  const eventBus = useEventBus();
20813
- const parentRoot = React78__default.useContext(RootCtx);
21227
+ const parentRoot = React80__default.useContext(RootCtx);
20814
21228
  const isRoot = enabled && parentRoot === null;
20815
- const zoneId = React78__default.useId();
21229
+ const zoneId = React80__default.useId();
20816
21230
  const ownGroup = dragGroup ?? accepts ?? zoneId;
20817
- const [optimisticOrders, setOptimisticOrders] = React78__default.useState(() => /* @__PURE__ */ new Map());
20818
- const optimisticOrdersRef = React78__default.useRef(optimisticOrders);
21231
+ const [optimisticOrders, setOptimisticOrders] = React80__default.useState(() => /* @__PURE__ */ new Map());
21232
+ const optimisticOrdersRef = React80__default.useRef(optimisticOrders);
20819
21233
  optimisticOrdersRef.current = optimisticOrders;
20820
- const clearOptimisticOrder = React78__default.useCallback((group) => {
21234
+ const clearOptimisticOrder = React80__default.useCallback((group) => {
20821
21235
  setOptimisticOrders((prev) => {
20822
21236
  if (!prev.has(group)) return prev;
20823
21237
  const next = new Map(prev);
@@ -20842,7 +21256,7 @@ function useDataDnd(args) {
20842
21256
  const raw = it[dndItemIdField];
20843
21257
  return String(raw ?? `__idx_${idx}`);
20844
21258
  }).join("|");
20845
- const itemIds = React78__default.useMemo(
21259
+ const itemIds = React80__default.useMemo(
20846
21260
  () => orderedItems.map((it, idx) => {
20847
21261
  const raw = it[dndItemIdField];
20848
21262
  return raw ?? `__idx_${idx}`;
@@ -20850,7 +21264,7 @@ function useDataDnd(args) {
20850
21264
  [itemIdsSignature]
20851
21265
  );
20852
21266
  const itemsContentSig = items.map((it, idx) => String(it[dndItemIdField] ?? `__${idx}`)).join("|");
20853
- React78__default.useEffect(() => {
21267
+ React80__default.useEffect(() => {
20854
21268
  const root = isRoot ? null : parentRoot;
20855
21269
  if (root) {
20856
21270
  root.clearOptimisticOrder(ownGroup);
@@ -20858,20 +21272,20 @@ function useDataDnd(args) {
20858
21272
  clearOptimisticOrder(ownGroup);
20859
21273
  }
20860
21274
  }, [itemsContentSig, ownGroup]);
20861
- const zonesRef = React78__default.useRef(/* @__PURE__ */ new Map());
20862
- const registerZone = React78__default.useCallback((zoneId2, meta2) => {
21275
+ const zonesRef = React80__default.useRef(/* @__PURE__ */ new Map());
21276
+ const registerZone = React80__default.useCallback((zoneId2, meta2) => {
20863
21277
  zonesRef.current.set(zoneId2, meta2);
20864
21278
  }, []);
20865
- const unregisterZone = React78__default.useCallback((zoneId2) => {
21279
+ const unregisterZone = React80__default.useCallback((zoneId2) => {
20866
21280
  zonesRef.current.delete(zoneId2);
20867
21281
  }, []);
20868
- const [activeDrag, setActiveDrag] = React78__default.useState(null);
20869
- const [overZoneGroup, setOverZoneGroup] = React78__default.useState(null);
20870
- const meta = React78__default.useMemo(
21282
+ const [activeDrag, setActiveDrag] = React80__default.useState(null);
21283
+ const [overZoneGroup, setOverZoneGroup] = React80__default.useState(null);
21284
+ const meta = React80__default.useMemo(
20871
21285
  () => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
20872
21286
  [ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
20873
21287
  );
20874
- React78__default.useEffect(() => {
21288
+ React80__default.useEffect(() => {
20875
21289
  const target = isRoot ? null : parentRoot;
20876
21290
  if (!target) {
20877
21291
  zonesRef.current.set(zoneId, meta);
@@ -20890,7 +21304,7 @@ function useDataDnd(args) {
20890
21304
  }, [parentRoot, isRoot, zoneId, meta]);
20891
21305
  const sensors = useAlmadarDndSensors(true);
20892
21306
  const collisionDetection = almadarDndCollisionDetection;
20893
- const findZoneByItem = React78__default.useCallback(
21307
+ const findZoneByItem = React80__default.useCallback(
20894
21308
  (id) => {
20895
21309
  for (const z of zonesRef.current.values()) {
20896
21310
  if (z.itemIds.includes(id)) return z;
@@ -20899,7 +21313,7 @@ function useDataDnd(args) {
20899
21313
  },
20900
21314
  []
20901
21315
  );
20902
- React78__default.useCallback(
21316
+ React80__default.useCallback(
20903
21317
  (group) => {
20904
21318
  for (const z of zonesRef.current.values()) {
20905
21319
  if (z.group === group) return z;
@@ -20908,7 +21322,7 @@ function useDataDnd(args) {
20908
21322
  },
20909
21323
  []
20910
21324
  );
20911
- const handleDragEnd = React78__default.useCallback(
21325
+ const handleDragEnd = React80__default.useCallback(
20912
21326
  (event) => {
20913
21327
  const { active, over } = event;
20914
21328
  const activeIdStr = String(active.id);
@@ -20999,12 +21413,12 @@ function useDataDnd(args) {
20999
21413
  },
21000
21414
  [eventBus]
21001
21415
  );
21002
- const sortableData = React78__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
21003
- const SortableItem = React78__default.useCallback(
21416
+ const sortableData = React80__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
21417
+ const SortableItem = React80__default.useCallback(
21004
21418
  ({ id, children }) => {
21005
21419
  const {
21006
21420
  attributes,
21007
- listeners: listeners7,
21421
+ listeners: listeners8,
21008
21422
  setNodeRef,
21009
21423
  transform,
21010
21424
  transition,
@@ -21027,7 +21441,7 @@ function useDataDnd(args) {
21027
21441
  ref: setNodeRef,
21028
21442
  style,
21029
21443
  ...attributes,
21030
- ...listeners7,
21444
+ ...listeners8,
21031
21445
  children
21032
21446
  }
21033
21447
  );
@@ -21040,7 +21454,7 @@ function useDataDnd(args) {
21040
21454
  id: droppableId,
21041
21455
  data: sortableData
21042
21456
  });
21043
- const ctx = React78__default.useContext(RootCtx);
21457
+ const ctx = React80__default.useContext(RootCtx);
21044
21458
  const activeDrag2 = ctx?.activeDrag ?? null;
21045
21459
  const overZoneGroup2 = ctx?.overZoneGroup ?? null;
21046
21460
  const isThisZoneOver = overZoneGroup2 === ownGroup;
@@ -21055,7 +21469,7 @@ function useDataDnd(args) {
21055
21469
  showForeignPlaceholder,
21056
21470
  ctxAvailable: ctx != null
21057
21471
  });
21058
- React78__default.useEffect(() => {
21472
+ React80__default.useEffect(() => {
21059
21473
  dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
21060
21474
  }, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
21061
21475
  return /* @__PURE__ */ jsx(
@@ -21069,11 +21483,11 @@ function useDataDnd(args) {
21069
21483
  }
21070
21484
  );
21071
21485
  };
21072
- const rootContextValue = React78__default.useMemo(
21486
+ const rootContextValue = React80__default.useMemo(
21073
21487
  () => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
21074
21488
  [registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
21075
21489
  );
21076
- const handleDragStart = React78__default.useCallback((event) => {
21490
+ const handleDragStart = React80__default.useCallback((event) => {
21077
21491
  const sourceZone = findZoneByItem(event.active.id);
21078
21492
  const rect = event.active.rect.current.initial;
21079
21493
  const height = rect?.height && rect.height > 0 ? rect.height : 64;
@@ -21092,7 +21506,7 @@ function useDataDnd(args) {
21092
21506
  isRoot
21093
21507
  });
21094
21508
  }, [findZoneByItem, isRoot, zoneId]);
21095
- const handleDragOver = React78__default.useCallback((event) => {
21509
+ const handleDragOver = React80__default.useCallback((event) => {
21096
21510
  const { active, over } = event;
21097
21511
  const overData = over?.data?.current;
21098
21512
  const overGroup = overData?.dndGroup ?? null;
@@ -21162,7 +21576,7 @@ function useDataDnd(args) {
21162
21576
  return next;
21163
21577
  });
21164
21578
  }, []);
21165
- const handleDragCancel = React78__default.useCallback((event) => {
21579
+ const handleDragCancel = React80__default.useCallback((event) => {
21166
21580
  setActiveDrag(null);
21167
21581
  setOverZoneGroup(null);
21168
21582
  dndLog.warn("dragCancel", {
@@ -21170,12 +21584,12 @@ function useDataDnd(args) {
21170
21584
  reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
21171
21585
  });
21172
21586
  }, []);
21173
- const handleDragEndWithCleanup = React78__default.useCallback((event) => {
21587
+ const handleDragEndWithCleanup = React80__default.useCallback((event) => {
21174
21588
  handleDragEnd(event);
21175
21589
  setActiveDrag(null);
21176
21590
  setOverZoneGroup(null);
21177
21591
  }, [handleDragEnd]);
21178
- const wrapContainer = React78__default.useCallback(
21592
+ const wrapContainer = React80__default.useCallback(
21179
21593
  (children) => {
21180
21594
  if (!enabled) return children;
21181
21595
  const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
@@ -21229,7 +21643,7 @@ var init_useDataDnd = __esm({
21229
21643
  init_useAlmadarDndCollision();
21230
21644
  init_Box();
21231
21645
  dndLog = createLogger("almadar:ui:dnd");
21232
- RootCtx = React78__default.createContext(null);
21646
+ RootCtx = React80__default.createContext(null);
21233
21647
  }
21234
21648
  });
21235
21649
  function fieldLabel2(key) {
@@ -21451,7 +21865,7 @@ function DataGrid({
21451
21865
  className: cn(
21452
21866
  "bg-card rounded-lg",
21453
21867
  "border border-border",
21454
- "shadow-sm hover:shadow-lg",
21868
+ "shadow-elevation-card hover:shadow-elevation-dialog",
21455
21869
  "hover:border-primary transition-all",
21456
21870
  "flex flex-col",
21457
21871
  isSelected && "ring-2 ring-primary border-primary"
@@ -21718,7 +22132,7 @@ function DataList({
21718
22132
  }) {
21719
22133
  const eventBus = useEventBus();
21720
22134
  const { t } = useTranslate();
21721
- const [visibleCount, setVisibleCount] = React78__default.useState(pageSize || Infinity);
22135
+ const [visibleCount, setVisibleCount] = React80__default.useState(pageSize || Infinity);
21722
22136
  const fieldDefs = fields ?? columns ?? [];
21723
22137
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
21724
22138
  const dnd = useDataDnd({
@@ -21737,7 +22151,7 @@ function DataList({
21737
22151
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
21738
22152
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
21739
22153
  const hasRenderProp = typeof children === "function";
21740
- React78__default.useEffect(() => {
22154
+ React80__default.useEffect(() => {
21741
22155
  const renderItemTypeOf = typeof schemaRenderItem;
21742
22156
  const childrenTypeOf = typeof children;
21743
22157
  if (data.length > 0 && !hasRenderProp) {
@@ -21794,7 +22208,7 @@ function DataList({
21794
22208
  const items2 = data.map((item) => item);
21795
22209
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
21796
22210
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
21797
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
22211
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
21798
22212
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
21799
22213
  group.items.map((itemData, index) => {
21800
22214
  const id = itemData.id || `${gi}-${index}`;
@@ -21825,7 +22239,7 @@ function DataList({
21825
22239
  {
21826
22240
  variant: "caption",
21827
22241
  className: cn(
21828
- "mt-1 text-[0.65rem]",
22242
+ "mt-1 text-xs",
21829
22243
  isSent ? "opacity-70" : "text-muted-foreground"
21830
22244
  ),
21831
22245
  children: formatDate3(timestamp)
@@ -21890,7 +22304,7 @@ function DataList({
21890
22304
  Box,
21891
22305
  {
21892
22306
  className: cn(
21893
- "group flex items-center gap-4 transition-all duration-200",
22307
+ "group flex items-center gap-4 transition-all duration-fast",
21894
22308
  isCompact ? "px-4 py-2" : "px-6 py-4",
21895
22309
  "hover:bg-muted/80",
21896
22310
  !isCard && !isCompact && "rounded-lg border border-transparent hover:border-border"
@@ -21977,12 +22391,12 @@ function DataList({
21977
22391
  Box,
21978
22392
  {
21979
22393
  className: cn(
21980
- isCard && "bg-card rounded-xl border border-border shadow-lg overflow-hidden",
22394
+ isCard && "bg-card rounded-xl border border-border shadow-elevation-dialog overflow-hidden",
21981
22395
  !isCard && gapClass,
21982
22396
  className
21983
22397
  ),
21984
22398
  children: [
21985
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
22399
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
21986
22400
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
21987
22401
  group.items.map(
21988
22402
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -22119,7 +22533,7 @@ var init_FileTree = __esm({
22119
22533
  Typography,
22120
22534
  {
22121
22535
  variant: "caption",
22122
- className: `truncate font-mono text-[11px] !text-inherit ${isSelected ? "font-semibold" : ""}`,
22536
+ className: `truncate font-mono text-xs !text-inherit ${isSelected ? "font-semibold" : ""}`,
22123
22537
  children: node.name
22124
22538
  }
22125
22539
  ),
@@ -22280,6 +22694,7 @@ var init_FilterGroup = __esm({
22280
22694
  init_Select();
22281
22695
  init_Badge();
22282
22696
  init_Stack();
22697
+ init_Icon();
22283
22698
  init_useEventBus();
22284
22699
  init_useQuerySingleton();
22285
22700
  resolveFilterType = (filter) => filter.filterType ?? filter.type;
@@ -22348,7 +22763,7 @@ var init_FilterGroup = __esm({
22348
22763
  const activeFilterCount = Object.keys(selectedValues).length;
22349
22764
  if (variant === "pills") {
22350
22765
  return /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", className: cn("flex-wrap", className), children: [
22351
- showIcon && /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4 text-muted-foreground" }),
22766
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
22352
22767
  filters.map((filter) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
22353
22768
  /* @__PURE__ */ jsxs("span", { className: "text-sm font-[var(--font-weight-medium)] text-muted-foreground", children: [
22354
22769
  filter.label,
@@ -22396,7 +22811,7 @@ var init_FilterGroup = __esm({
22396
22811
  variant: "ghost",
22397
22812
  size: "sm",
22398
22813
  onClick: handleClearAll,
22399
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
22814
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
22400
22815
  children: "Clear"
22401
22816
  }
22402
22817
  )
@@ -22405,7 +22820,7 @@ var init_FilterGroup = __esm({
22405
22820
  if (variant === "vertical") {
22406
22821
  return /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col gap-4", className), children: [
22407
22822
  showIcon && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 text-muted-foreground", children: [
22408
- /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4" }),
22823
+ /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
22409
22824
  /* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--font-weight-bold)] uppercase tracking-wide", children: "Filters" })
22410
22825
  ] }),
22411
22826
  filters.map((filter) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
@@ -22478,7 +22893,7 @@ var init_FilterGroup = __esm({
22478
22893
  variant: "ghost",
22479
22894
  size: "sm",
22480
22895
  onClick: handleClearAll,
22481
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
22896
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
22482
22897
  className: "self-start",
22483
22898
  children: "Clear all"
22484
22899
  }
@@ -22487,7 +22902,7 @@ var init_FilterGroup = __esm({
22487
22902
  }
22488
22903
  if (variant === "compact") {
22489
22904
  return /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: cn("flex-wrap", className), children: [
22490
- showIcon && /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4 text-muted-foreground" }),
22905
+ showIcon && /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4 text-muted-foreground" }),
22491
22906
  filters.map((filter) => /* @__PURE__ */ jsx("div", { className: "min-w-[120px]", children: resolveFilterType(filter) === "date" ? /* @__PURE__ */ jsx(
22492
22907
  Input,
22493
22908
  {
@@ -22563,7 +22978,7 @@ var init_FilterGroup = __esm({
22563
22978
  filterDef?.label,
22564
22979
  ": ",
22565
22980
  value,
22566
- /* @__PURE__ */ jsx(X, { className: "ml-1 h-3 w-3" })
22981
+ /* @__PURE__ */ jsx(Icon, { name: "x", className: "ml-1 h-3 w-3" })
22567
22982
  ]
22568
22983
  },
22569
22984
  field
@@ -22577,7 +22992,7 @@ var init_FilterGroup = __esm({
22577
22992
  "div",
22578
22993
  {
22579
22994
  className: cn(
22580
- "p-4 rounded-md",
22995
+ "p-4 rounded-container",
22581
22996
  "bg-card",
22582
22997
  "border-[length:var(--border-width)] border-border",
22583
22998
  className
@@ -22590,7 +23005,7 @@ var init_FilterGroup = __esm({
22590
23005
  align: "center",
22591
23006
  className: "text-muted-foreground",
22592
23007
  children: [
22593
- /* @__PURE__ */ jsx(Filter, { className: "h-4 w-4" }),
23008
+ /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
22594
23009
  /* @__PURE__ */ jsx("span", { className: "text-sm font-[var(--font-weight-bold)] uppercase tracking-wide", children: "Filters" })
22595
23010
  ]
22596
23011
  }
@@ -22676,7 +23091,7 @@ var init_FilterGroup = __esm({
22676
23091
  variant: "ghost",
22677
23092
  size: "sm",
22678
23093
  onClick: handleClearAll,
22679
- leftIcon: /* @__PURE__ */ jsx(X, { className: "h-3.5 w-3.5" }),
23094
+ leftIcon: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-3.5 w-3.5" }),
22680
23095
  children: "Clear all"
22681
23096
  }
22682
23097
  )
@@ -22893,6 +23308,7 @@ var init_RelationSelect = __esm({
22893
23308
  "use client";
22894
23309
  init_cn();
22895
23310
  init_Box();
23311
+ init_Icon();
22896
23312
  init_Stack();
22897
23313
  init_Input();
22898
23314
  init_Button();
@@ -23036,12 +23452,13 @@ var init_RelationSelect = __esm({
23036
23452
  as: "button",
23037
23453
  className: "p-0.5 hover:bg-muted rounded cursor-pointer",
23038
23454
  onClick: handleClear,
23039
- children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4 text-muted-foreground" })
23455
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "h-4 w-4 text-muted-foreground" })
23040
23456
  }
23041
23457
  ),
23042
23458
  /* @__PURE__ */ jsx(
23043
- ChevronDown,
23459
+ Icon,
23044
23460
  {
23461
+ name: "chevron-down",
23045
23462
  className: cn(
23046
23463
  "h-4 w-4 text-muted-foreground transition-transform",
23047
23464
  isOpen && "transform rotate-180"
@@ -23259,7 +23676,7 @@ var init_SidePanel = __esm({
23259
23676
  "border-l-2 border-border",
23260
23677
  position === "left" && "border-l-0 border-r-2",
23261
23678
  "flex flex-col",
23262
- "transition-transform duration-300 ease-in-out",
23679
+ "transition-transform duration-normal ease-standard",
23263
23680
  width,
23264
23681
  position === "right" ? "right-0" : "left-0",
23265
23682
  className
@@ -23272,7 +23689,7 @@ var init_SidePanel = __esm({
23272
23689
  {
23273
23690
  variant: "ghost",
23274
23691
  size: "sm",
23275
- icon: X,
23692
+ icon: "x",
23276
23693
  onClick: handleClose,
23277
23694
  "aria-label": "Close panel",
23278
23695
  children: /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", className: "sr-only", children: "Close" })
@@ -23330,7 +23747,7 @@ var init_WizardProgress = __esm({
23330
23747
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
23331
23748
  const isActive = index === currentStep;
23332
23749
  const isCompleted = index < currentStep;
23333
- return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
23750
+ return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
23334
23751
  /* @__PURE__ */ jsx(
23335
23752
  "button",
23336
23753
  {
@@ -23344,7 +23761,7 @@ var init_WizardProgress = __esm({
23344
23761
  isCompleted && "bg-foreground text-background cursor-pointer hover:bg-muted-foreground",
23345
23762
  !isActive && !isCompleted && "bg-card text-foreground"
23346
23763
  ),
23347
- children: isCompleted ? /* @__PURE__ */ jsx(Icon, { icon: Check, size: "sm" }) : index + 1
23764
+ children: isCompleted ? /* @__PURE__ */ jsx(Icon, { name: "check", size: "sm" }) : index + 1
23348
23765
  }
23349
23766
  ),
23350
23767
  !compact && /* @__PURE__ */ jsx(
@@ -23463,13 +23880,13 @@ var init_WizardNavigation = __esm({
23463
23880
  ),
23464
23881
  children: [
23465
23882
  showBack ? /* @__PURE__ */ jsxs(Button, { variant: "secondary", onClick: handleBack, disabled: isFirstStep, children: [
23466
- /* @__PURE__ */ jsx(Icon, { icon: ChevronLeft, size: "sm" }),
23883
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-left", size: "sm" }),
23467
23884
  resolvedBackLabel
23468
23885
  ] }) : /* @__PURE__ */ jsx(Box, {}),
23469
23886
  /* @__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) }) }) }),
23470
23887
  isLastStep && showComplete ? /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: handleComplete, disabled: !isValid, children: resolvedCompleteLabel }) : showNext ? /* @__PURE__ */ jsxs(Button, { variant: "primary", onClick: handleNext, disabled: !isValid, children: [
23471
23888
  resolvedNextLabel,
23472
- /* @__PURE__ */ jsx(Icon, { icon: ChevronRight, size: "sm" })
23889
+ /* @__PURE__ */ jsx(Icon, { name: "chevron-right", size: "sm" })
23473
23890
  ] }) : /* @__PURE__ */ jsx(Box, {})
23474
23891
  ]
23475
23892
  }
@@ -23661,7 +24078,7 @@ var init_ViolationAlert = __esm({
23661
24078
  Box,
23662
24079
  {
23663
24080
  className: cn(
23664
- "px-3 py-2 rounded-md border",
24081
+ "px-3 py-2 rounded-container border",
23665
24082
  bgColor,
23666
24083
  className
23667
24084
  ),
@@ -23922,7 +24339,7 @@ var init_FlipCard = __esm({
23922
24339
  /* @__PURE__ */ jsx(
23923
24340
  Box,
23924
24341
  {
23925
- className: "absolute inset-0 w-full h-full rounded-lg shadow-lg flex items-center justify-center p-6",
24342
+ className: "absolute inset-0 w-full h-full rounded-lg shadow-elevation-dialog flex items-center justify-center p-6",
23926
24343
  style: { backfaceVisibility: "hidden", transform: "rotateY(0deg)" },
23927
24344
  children: front
23928
24345
  }
@@ -23930,7 +24347,7 @@ var init_FlipCard = __esm({
23930
24347
  /* @__PURE__ */ jsx(
23931
24348
  Box,
23932
24349
  {
23933
- className: "absolute inset-0 w-full h-full rounded-lg shadow-lg flex items-center justify-center p-6",
24350
+ className: "absolute inset-0 w-full h-full rounded-lg shadow-elevation-dialog flex items-center justify-center p-6",
23934
24351
  style: { backfaceVisibility: "hidden", transform: "rotateY(180deg)" },
23935
24352
  children: back
23936
24353
  }
@@ -24275,7 +24692,7 @@ var init_ProgressDots = __esm({
24275
24692
  Box,
24276
24693
  {
24277
24694
  className: cn(
24278
- "rounded-full transition-all duration-200",
24695
+ "rounded-full transition-all duration-fast",
24279
24696
  onDotClick && "cursor-pointer"
24280
24697
  ),
24281
24698
  style: {
@@ -24377,9 +24794,9 @@ function ScoreDisplay({
24377
24794
  ...rest
24378
24795
  }) {
24379
24796
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
24380
- const [displayValue, setDisplayValue] = React78.useState(resolvedValue);
24381
- const [isAnimating, setIsAnimating] = React78.useState(false);
24382
- React78.useEffect(() => {
24797
+ const [displayValue, setDisplayValue] = React80.useState(resolvedValue);
24798
+ const [isAnimating, setIsAnimating] = React80.useState(false);
24799
+ React80.useEffect(() => {
24383
24800
  if (!animated || displayValue === resolvedValue) {
24384
24801
  setDisplayValue(resolvedValue);
24385
24802
  return;
@@ -24458,10 +24875,7 @@ function StatBadge({
24458
24875
  className
24459
24876
  ),
24460
24877
  children: [
24461
- icon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 text-lg", children: typeof icon === "string" ? (() => {
24462
- const I = resolveIcon(icon);
24463
- return I ? /* @__PURE__ */ jsx(I, { className: "w-4 h-4" }) : icon;
24464
- })() : icon }),
24878
+ 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 }),
24465
24879
  /* @__PURE__ */ jsx("span", { className: "text-muted-foreground font-medium", children: label }),
24466
24880
  format === "hearts" && max && /* @__PURE__ */ jsx(
24467
24881
  HealthBar,
@@ -24529,7 +24943,7 @@ function InventoryGrid({
24529
24943
  const eventBus = useEventBus();
24530
24944
  const slotCount = totalSlots ?? items.length;
24531
24945
  const emptySlotCount = Math.max(0, slotCount - items.length);
24532
- const handleSelect = React78.useCallback(
24946
+ const handleSelect = React80.useCallback(
24533
24947
  (id) => {
24534
24948
  onSelect?.(id);
24535
24949
  if (selectEvent) {
@@ -24811,15 +25225,15 @@ function GameCanvas2D({
24811
25225
  fps = 60,
24812
25226
  className
24813
25227
  }) {
24814
- const canvasRef = React78.useRef(null);
24815
- const rafRef = React78.useRef(0);
24816
- const frameRef = React78.useRef(0);
24817
- const lastTimeRef = React78.useRef(0);
24818
- const onDrawRef = React78.useRef(onDraw);
25228
+ const canvasRef = React80.useRef(null);
25229
+ const rafRef = React80.useRef(0);
25230
+ const frameRef = React80.useRef(0);
25231
+ const lastTimeRef = React80.useRef(0);
25232
+ const onDrawRef = React80.useRef(onDraw);
24819
25233
  onDrawRef.current = onDraw;
24820
- const onTickRef = React78.useRef(onTick);
25234
+ const onTickRef = React80.useRef(onTick);
24821
25235
  onTickRef.current = onTick;
24822
- React78.useEffect(() => {
25236
+ React80.useEffect(() => {
24823
25237
  const canvas = canvasRef.current;
24824
25238
  if (!canvas) return;
24825
25239
  const ctx = canvas.getContext("2d");
@@ -25160,7 +25574,7 @@ function TurnPanel({
25160
25574
  className
25161
25575
  }) {
25162
25576
  const eventBus = useEventBus();
25163
- const handleAction = React78.useCallback(
25577
+ const handleAction = React80.useCallback(
25164
25578
  (event) => {
25165
25579
  if (event) {
25166
25580
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -25306,7 +25720,7 @@ function UnitCommandBar({
25306
25720
  className
25307
25721
  }) {
25308
25722
  const eventBus = useEventBus();
25309
- const handleCommand = React78.useCallback(
25723
+ const handleCommand = React80.useCallback(
25310
25724
  (event) => {
25311
25725
  if (event) {
25312
25726
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -25791,7 +26205,7 @@ function GameMenu({
25791
26205
  } catch {
25792
26206
  }
25793
26207
  const eventBus = eventBusProp || eventBusFromHook;
25794
- const handleOptionClick = React78.useCallback(
26208
+ const handleOptionClick = React80.useCallback(
25795
26209
  (option) => {
25796
26210
  if (option.event && eventBus) {
25797
26211
  eventBus.emit(`UI:${option.event}`, { option });
@@ -25905,7 +26319,7 @@ function GameOverScreen({
25905
26319
  } catch {
25906
26320
  }
25907
26321
  const eventBus = eventBusProp || eventBusFromHook;
25908
- const handleActionClick = React78.useCallback(
26322
+ const handleActionClick = React80.useCallback(
25909
26323
  (action) => {
25910
26324
  if (action.event && eventBus) {
25911
26325
  eventBus.emit(`UI:${action.event}`, { action });
@@ -26635,6 +27049,7 @@ var init_NumberStepper = __esm({
26635
27049
  "components/molecules/NumberStepper.tsx"() {
26636
27050
  "use client";
26637
27051
  init_cn();
27052
+ init_Icon();
26638
27053
  init_useEventBus();
26639
27054
  sizeStyles10 = {
26640
27055
  sm: {
@@ -26753,7 +27168,7 @@ var init_NumberStepper = __esm({
26753
27168
  styles.button
26754
27169
  ),
26755
27170
  "aria-label": "Decrease",
26756
- children: /* @__PURE__ */ jsx(Minus, { className: styles.icon })
27171
+ children: /* @__PURE__ */ jsx(Icon, { name: "minus", className: styles.icon })
26757
27172
  }
26758
27173
  ),
26759
27174
  /* @__PURE__ */ jsx(
@@ -26794,7 +27209,7 @@ var init_NumberStepper = __esm({
26794
27209
  styles.button
26795
27210
  ),
26796
27211
  "aria-label": "Increase",
26797
- children: /* @__PURE__ */ jsx(Plus, { className: styles.icon })
27212
+ children: /* @__PURE__ */ jsx(Icon, { name: "plus", className: styles.icon })
26798
27213
  }
26799
27214
  )
26800
27215
  ]
@@ -26819,6 +27234,7 @@ var init_StarRating = __esm({
26819
27234
  "components/molecules/StarRating.tsx"() {
26820
27235
  "use client";
26821
27236
  init_cn();
27237
+ init_Icon();
26822
27238
  init_useEventBus();
26823
27239
  sizeStyles11 = {
26824
27240
  sm: { star: "w-4 h-4", gap: "gap-0.5" },
@@ -26905,8 +27321,9 @@ var init_StarRating = __esm({
26905
27321
  },
26906
27322
  children: [
26907
27323
  /* @__PURE__ */ jsx(
26908
- Star,
27324
+ Icon,
26909
27325
  {
27326
+ name: "star",
26910
27327
  className: cn(
26911
27328
  styles.star,
26912
27329
  "text-muted",
@@ -26916,8 +27333,9 @@ var init_StarRating = __esm({
26916
27333
  }
26917
27334
  ),
26918
27335
  (isFull || isHalf) && /* @__PURE__ */ jsx(
26919
- Star,
27336
+ Icon,
26920
27337
  {
27338
+ name: "star",
26921
27339
  className: cn(
26922
27340
  styles.star,
26923
27341
  "absolute inset-0",
@@ -27109,7 +27527,7 @@ var init_UploadDropZone = __esm({
27109
27527
  "aria-hidden": "true"
27110
27528
  }
27111
27529
  ),
27112
- 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" }),
27530
+ 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" }),
27113
27531
  /* @__PURE__ */ jsx(Typography, { variant: "body1", className: "text-center font-medium mb-1", children: isDragOver ? "Drop files here" : label }),
27114
27532
  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 })
27115
27533
  ]
@@ -27133,6 +27551,7 @@ var Lightbox;
27133
27551
  var init_Lightbox = __esm({
27134
27552
  "components/molecules/Lightbox.tsx"() {
27135
27553
  "use client";
27554
+ init_Icon();
27136
27555
  init_cn();
27137
27556
  init_useEventBus();
27138
27557
  Lightbox = ({
@@ -27240,7 +27659,7 @@ var init_Lightbox = __esm({
27240
27659
  "focus:outline-none focus:ring-2 focus:ring-white"
27241
27660
  ),
27242
27661
  "aria-label": "Close",
27243
- children: /* @__PURE__ */ jsx(X, { className: "w-6 h-6" })
27662
+ children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "w-6 h-6" })
27244
27663
  }
27245
27664
  ),
27246
27665
  hasPrev && safeImages.length > 1 && /* @__PURE__ */ jsx(
@@ -27259,7 +27678,7 @@ var init_Lightbox = __esm({
27259
27678
  "focus:outline-none focus:ring-2 focus:ring-white"
27260
27679
  ),
27261
27680
  "aria-label": "Previous image",
27262
- children: /* @__PURE__ */ jsx(ChevronLeft, { className: "w-8 h-8" })
27681
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
27263
27682
  }
27264
27683
  ),
27265
27684
  /* @__PURE__ */ jsx(
@@ -27296,7 +27715,7 @@ var init_Lightbox = __esm({
27296
27715
  "focus:outline-none focus:ring-2 focus:ring-white"
27297
27716
  ),
27298
27717
  "aria-label": "Next image",
27299
- children: /* @__PURE__ */ jsx(ChevronRight, { className: "w-8 h-8" })
27718
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
27300
27719
  }
27301
27720
  ),
27302
27721
  /* @__PURE__ */ jsxs("div", { className: "absolute bottom-4 left-0 right-0 text-center", children: [
@@ -27580,7 +27999,7 @@ var init_Meter = __esm({
27580
27999
  strokeDasharray: circumference,
27581
28000
  strokeDashoffset: offset,
27582
28001
  strokeLinecap: "round",
27583
- className: "transition-all duration-500 ease-out"
28002
+ className: "transition-all duration-slow ease-emphasized"
27584
28003
  }
27585
28004
  )
27586
28005
  ]
@@ -27623,7 +28042,7 @@ var init_Meter = __esm({
27623
28042
  Box,
27624
28043
  {
27625
28044
  className: cn(
27626
- "h-2 flex-1 rounded-sm transition-all duration-300",
28045
+ "h-2 flex-1 rounded-sm transition-all duration-normal",
27627
28046
  !isActive && "bg-muted"
27628
28047
  ),
27629
28048
  style: isActive ? { backgroundColor: segColor } : void 0
@@ -27642,7 +28061,7 @@ var init_Meter = __esm({
27642
28061
  /* @__PURE__ */ jsx(Box, { className: "w-full h-3 bg-muted rounded-full overflow-hidden", children: /* @__PURE__ */ jsx(
27643
28062
  Box,
27644
28063
  {
27645
- className: "h-full rounded-full transition-all duration-500 ease-out",
28064
+ className: "h-full rounded-full transition-all duration-slow ease-emphasized",
27646
28065
  style: {
27647
28066
  width: `${percentage}%`,
27648
28067
  backgroundColor: activeColor
@@ -28168,7 +28587,7 @@ var init_PullToRefresh = __esm({
28168
28587
  className: cn(
28169
28588
  "top-0 left-0 right-0 z-10",
28170
28589
  "items-center justify-center",
28171
- "transition-opacity duration-200",
28590
+ "transition-opacity duration-fast",
28172
28591
  showIndicator ? "opacity-100" : "opacity-0"
28173
28592
  ),
28174
28593
  style: {
@@ -28354,7 +28773,7 @@ var init_PricingCard = __esm({
28354
28773
  "hover:-translate-y-1 transition-all",
28355
28774
  highlighted && [
28356
28775
  "border-[length:2px] border-primary",
28357
- "shadow-lg",
28776
+ "shadow-elevation-dialog",
28358
28777
  "scale-[1.05]",
28359
28778
  "ring-2 ring-primary"
28360
28779
  ],
@@ -28377,7 +28796,7 @@ var init_PricingCard = __esm({
28377
28796
  /* @__PURE__ */ jsx(
28378
28797
  Icon,
28379
28798
  {
28380
- icon: Check,
28799
+ name: "check",
28381
28800
  size: "sm",
28382
28801
  className: "flex-shrink-0 text-success"
28383
28802
  }
@@ -28595,7 +29014,7 @@ var init_StepFlow = __esm({
28595
29014
  className
28596
29015
  }) => {
28597
29016
  if (orientation === "vertical") {
28598
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React78__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
29017
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React80__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
28599
29018
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
28600
29019
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
28601
29020
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -28606,7 +29025,7 @@ var init_StepFlow = __esm({
28606
29025
  ] })
28607
29026
  ] }) }, index)) });
28608
29027
  }
28609
- 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(React78__default.Fragment, { children: [
29028
+ 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(React80__default.Fragment, { children: [
28610
29029
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
28611
29030
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
28612
29031
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -29420,6 +29839,7 @@ var init_VoteStack = __esm({
29420
29839
  "components/molecules/VoteStack.tsx"() {
29421
29840
  "use client";
29422
29841
  init_cn();
29842
+ init_Icon();
29423
29843
  init_useEventBus();
29424
29844
  sizeStyles12 = {
29425
29845
  sm: {
@@ -29501,7 +29921,7 @@ var init_VoteStack = __esm({
29501
29921
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
29502
29922
  styles.button
29503
29923
  ),
29504
- children: /* @__PURE__ */ jsx(ChevronUp, { className: styles.icon })
29924
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-up", className: styles.icon })
29505
29925
  }
29506
29926
  ),
29507
29927
  /* @__PURE__ */ jsx(
@@ -29538,7 +29958,7 @@ var init_VoteStack = __esm({
29538
29958
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
29539
29959
  styles.button
29540
29960
  ),
29541
- children: /* @__PURE__ */ jsx(ChevronDown, { className: styles.icon })
29961
+ children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: styles.icon })
29542
29962
  }
29543
29963
  )
29544
29964
  ]
@@ -29580,7 +30000,7 @@ var init_LikertScale = __esm({
29580
30000
  md: "text-base",
29581
30001
  lg: "text-lg"
29582
30002
  };
29583
- LikertScale = React78__default.forwardRef(
30003
+ LikertScale = React80__default.forwardRef(
29584
30004
  ({
29585
30005
  question,
29586
30006
  options = DEFAULT_LIKERT_OPTIONS,
@@ -29592,7 +30012,7 @@ var init_LikertScale = __esm({
29592
30012
  variant = "radios",
29593
30013
  className
29594
30014
  }, ref) => {
29595
- const groupId = React78__default.useId();
30015
+ const groupId = React80__default.useId();
29596
30016
  const eventBus = useEventBus();
29597
30017
  const handleSelect = useCallback(
29598
30018
  (next) => {
@@ -29872,6 +30292,7 @@ var init_QrScanner = __esm({
29872
30292
  "use client";
29873
30293
  init_cn();
29874
30294
  init_atoms();
30295
+ init_Icon();
29875
30296
  init_useEventBus();
29876
30297
  QrScanner = ({
29877
30298
  onScan,
@@ -30022,7 +30443,7 @@ var init_QrScanner = __esm({
30022
30443
  padding: "lg",
30023
30444
  className: "inset-0 flex-col items-center justify-center gap-2 bg-black bg-opacity-80 text-center",
30024
30445
  children: [
30025
- /* @__PURE__ */ jsx(Camera, { className: "h-8 w-8 text-white", "aria-hidden": "true" }),
30446
+ /* @__PURE__ */ jsx(Icon, { name: "camera", className: "h-8 w-8 text-white", "aria-hidden": "true" }),
30026
30447
  /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-white", children: "Camera unavailable" }),
30027
30448
  /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-white opacity-70", children: cameraError.message })
30028
30449
  ]
@@ -30054,7 +30475,7 @@ var init_QrScanner = __esm({
30054
30475
  "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
30055
30476
  ),
30056
30477
  "aria-label": isPaused ? "Resume scanning" : "Pause scanning",
30057
- children: isPaused ? /* @__PURE__ */ jsx(Play, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Pause, { className: "h-4 w-4" })
30478
+ children: isPaused ? /* @__PURE__ */ jsx(Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Icon, { name: "pause", className: "h-4 w-4" })
30058
30479
  }
30059
30480
  ),
30060
30481
  /* @__PURE__ */ jsx(
@@ -30067,7 +30488,7 @@ var init_QrScanner = __esm({
30067
30488
  "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
30068
30489
  ),
30069
30490
  "aria-label": `Switch to ${currentFacing === "environment" ? "front" : "rear"} camera`,
30070
- children: /* @__PURE__ */ jsx(RefreshCw, { className: "h-4 w-4" })
30491
+ children: /* @__PURE__ */ jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
30071
30492
  }
30072
30493
  ),
30073
30494
  /* @__PURE__ */ jsx(
@@ -30283,11 +30704,11 @@ function getShapeClasses(shape) {
30283
30704
  function getStatusIcon(status) {
30284
30705
  switch (status) {
30285
30706
  case "seated":
30286
- return /* @__PURE__ */ jsx(Users, { className: "w-4 h-4" });
30707
+ return /* @__PURE__ */ jsx(Icon, { name: "users", className: "w-4 h-4" });
30287
30708
  case "ordered":
30288
- return /* @__PURE__ */ jsx(Coffee, { className: "w-4 h-4" });
30709
+ return /* @__PURE__ */ jsx(Icon, { name: "coffee", className: "w-4 h-4" });
30289
30710
  case "awaiting-bill":
30290
- return /* @__PURE__ */ jsx(AlertCircle, { className: "w-4 h-4" });
30711
+ return /* @__PURE__ */ jsx(Icon, { name: "alert-circle", className: "w-4 h-4" });
30291
30712
  default:
30292
30713
  return null;
30293
30714
  }
@@ -30299,6 +30720,7 @@ var init_PositionedCanvas = __esm({
30299
30720
  init_cn();
30300
30721
  init_useEventBus();
30301
30722
  init_atoms();
30723
+ init_Icon();
30302
30724
  STATUS_CLASSES = {
30303
30725
  empty: "bg-surface border-border text-foreground",
30304
30726
  seated: "bg-surface border-success text-success",
@@ -30411,7 +30833,7 @@ var init_PositionedCanvas = __esm({
30411
30833
  {
30412
30834
  ref: containerRef,
30413
30835
  "data-testid": "positioned-canvas",
30414
- className: "relative bg-background border border-border rounded-md overflow-hidden",
30836
+ className: "relative bg-background border border-border rounded-container overflow-hidden",
30415
30837
  style: { width, height },
30416
30838
  onClick: handleContainerClick,
30417
30839
  children: items.map((item) => {
@@ -30603,7 +31025,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
30603
31025
  "transition-opacity"
30604
31026
  ),
30605
31027
  onClick: () => setOpen((v) => !v),
30606
- children: /* @__PURE__ */ jsx(MoreHorizontal, { size: 14 })
31028
+ children: /* @__PURE__ */ jsx(Icon, { name: "more-horizontal", className: "w-3.5 h-3.5" })
30607
31029
  }
30608
31030
  ),
30609
31031
  open && /* @__PURE__ */ jsxs(
@@ -30612,7 +31034,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
30612
31034
  role: "menu",
30613
31035
  className: cn(
30614
31036
  "absolute right-0 z-10 mt-1 w-44",
30615
- "rounded-md border border-border bg-popover shadow-md",
31037
+ "rounded-container border border-border bg-popover shadow-elevation-popover",
30616
31038
  "py-1 text-sm"
30617
31039
  ),
30618
31040
  children: [
@@ -30629,7 +31051,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
30629
31051
  setOpen(false);
30630
31052
  },
30631
31053
  children: [
30632
- /* @__PURE__ */ jsx(Plus, { size: 14 }),
31054
+ /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3.5 h-3.5" }),
30633
31055
  " Duplicate"
30634
31056
  ]
30635
31057
  }
@@ -30646,7 +31068,7 @@ function BlockMenu({ block, readOnly, onDelete, onDuplicate, onChangeType }) {
30646
31068
  setOpen(false);
30647
31069
  },
30648
31070
  children: [
30649
- /* @__PURE__ */ jsx(Trash, { size: 14 }),
31071
+ /* @__PURE__ */ jsx(Icon, { name: "trash", className: "w-3.5 h-3.5" }),
30650
31072
  " Delete"
30651
31073
  ]
30652
31074
  }
@@ -30875,7 +31297,7 @@ function BlockRow({
30875
31297
  "text-sm text-muted-foreground"
30876
31298
  ),
30877
31299
  children: [
30878
- /* @__PURE__ */ jsx(Image$1, { className: "mr-2", size: 16 }),
31300
+ /* @__PURE__ */ jsx(Icon, { name: "image", className: "mr-2 w-4 h-4" }),
30879
31301
  " No image URL set"
30880
31302
  ]
30881
31303
  }
@@ -30949,7 +31371,7 @@ function BlockRow({
30949
31371
  "opacity-0 group-hover/item:opacity-100 hover:bg-muted hover:text-foreground"
30950
31372
  ),
30951
31373
  onClick: () => removeListItem(child.id),
30952
- children: /* @__PURE__ */ jsx(Trash, { size: 12 })
31374
+ children: /* @__PURE__ */ jsx(Icon, { name: "trash", className: "w-3 h-3" })
30953
31375
  }
30954
31376
  )
30955
31377
  ] }, child.id)),
@@ -30964,7 +31386,7 @@ function BlockRow({
30964
31386
  ),
30965
31387
  onClick: addListItem,
30966
31388
  children: [
30967
- /* @__PURE__ */ jsx(Plus, { size: 12 }),
31389
+ /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3 h-3" }),
30968
31390
  " Add item"
30969
31391
  ]
30970
31392
  }
@@ -31013,7 +31435,7 @@ function BlockRow({
31013
31435
  "transition-opacity"
31014
31436
  ),
31015
31437
  onClick: () => onInsertAfter("paragraph"),
31016
- children: /* @__PURE__ */ jsx(Plus, { size: 14 })
31438
+ children: /* @__PURE__ */ jsx(Icon, { name: "plus", className: "w-3.5 h-3.5" })
31017
31439
  }
31018
31440
  ),
31019
31441
  /* @__PURE__ */ jsx(
@@ -31043,6 +31465,7 @@ var init_RichBlockEditor = __esm({
31043
31465
  init_Box();
31044
31466
  init_Divider();
31045
31467
  init_Input();
31468
+ init_Icon();
31046
31469
  init_useEventBus();
31047
31470
  TOOLBAR_ENTRIES = [
31048
31471
  { type: "paragraph", label: "Text", icon: Type },
@@ -31286,7 +31709,7 @@ var init_ReplyTree = __esm({
31286
31709
  onClick: handleToggle,
31287
31710
  "aria-label": isCollapsed ? "Expand replies" : "Collapse replies",
31288
31711
  "aria-expanded": !isCollapsed,
31289
- leftIcon: isCollapsed ? ChevronRight : ChevronDown,
31712
+ leftIcon: isCollapsed ? "chevron-right" : "chevron-down",
31290
31713
  className: cn(
31291
31714
  "w-6 h-6 p-0 min-w-0",
31292
31715
  "rounded-sm text-muted-foreground",
@@ -31333,7 +31756,7 @@ var init_ReplyTree = __esm({
31333
31756
  {
31334
31757
  variant: "ghost",
31335
31758
  size: "sm",
31336
- leftIcon: MessageSquare,
31759
+ leftIcon: "message-square",
31337
31760
  onClick: handleReply,
31338
31761
  "aria-label": `Reply to ${node.authorName}`,
31339
31762
  children: "Reply"
@@ -31344,7 +31767,7 @@ var init_ReplyTree = __esm({
31344
31767
  {
31345
31768
  variant: "ghost",
31346
31769
  size: "sm",
31347
- leftIcon: Flag,
31770
+ leftIcon: "flag",
31348
31771
  onClick: handleFlag,
31349
31772
  "aria-label": `Flag reply by ${node.authorName}`,
31350
31773
  children: "Flag"
@@ -31357,7 +31780,7 @@ var init_ReplyTree = __esm({
31357
31780
  variant: "ghost",
31358
31781
  size: "sm",
31359
31782
  onClick: handleContinue,
31360
- rightIcon: ChevronRight,
31783
+ rightIcon: "chevron-right",
31361
31784
  className: cn(
31362
31785
  "self-start gap-1 px-0 h-auto",
31363
31786
  "text-sm text-primary hover:underline hover:bg-transparent"
@@ -31598,7 +32021,7 @@ var init_VersionDiff = __esm({
31598
32021
  className: "px-4 py-2 border-b border-border bg-muted/30 flex-wrap",
31599
32022
  children: [
31600
32023
  /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", className: "flex-wrap", children: [
31601
- /* @__PURE__ */ jsx(Icon, { icon: GitCommit, size: "sm", className: "text-muted-foreground" }),
32024
+ /* @__PURE__ */ jsx(Icon, { name: "git-commit", size: "sm", className: "text-muted-foreground" }),
31602
32025
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "whitespace-nowrap", children: "Compare" }),
31603
32026
  /* @__PURE__ */ jsx(Box, { className: "min-w-0 md:min-w-[160px]", children: /* @__PURE__ */ jsx(
31604
32027
  Select,
@@ -31635,7 +32058,7 @@ var init_VersionDiff = __esm({
31635
32058
  {
31636
32059
  variant: "ghost",
31637
32060
  size: "sm",
31638
- icon: activeView === "side-by-side" ? AlignLeft : Columns,
32061
+ icon: activeView === "side-by-side" ? "align-left" : "columns",
31639
32062
  onClick: handleViewToggle,
31640
32063
  "aria-label": activeView === "side-by-side" ? "Switch to inline view" : "Switch to side-by-side view"
31641
32064
  }
@@ -31645,7 +32068,7 @@ var init_VersionDiff = __esm({
31645
32068
  {
31646
32069
  variant: "ghost",
31647
32070
  size: "sm",
31648
- icon: RotateCcw,
32071
+ icon: "rotate-ccw",
31649
32072
  onClick: handleRevert,
31650
32073
  children: "Revert"
31651
32074
  }
@@ -31822,7 +32245,7 @@ var init_DocBreadcrumb = __esm({
31822
32245
  "aria-label": "Breadcrumb",
31823
32246
  children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
31824
32247
  const isLast = idx === items.length - 1;
31825
- return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
32248
+ return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
31826
32249
  idx > 0 && /* @__PURE__ */ jsx(
31827
32250
  Icon,
31828
32251
  {
@@ -31888,7 +32311,7 @@ function DocCodeBlock({
31888
32311
  Box,
31889
32312
  {
31890
32313
  className: cn(
31891
- "rounded-md border border-border overflow-hidden",
32314
+ "rounded-container border border-border overflow-hidden",
31892
32315
  className
31893
32316
  ),
31894
32317
  position: "relative",
@@ -32047,11 +32470,11 @@ var init_DocPagination = __esm({
32047
32470
  init_Typography();
32048
32471
  linkCardStyles = [
32049
32472
  "border border-border",
32050
- "rounded-md",
32473
+ "rounded-container",
32051
32474
  "p-4",
32052
32475
  "transition-all",
32053
32476
  "hover:border-primary",
32054
- "hover:shadow-lg",
32477
+ "hover:shadow-elevation-dialog",
32055
32478
  "no-underline",
32056
32479
  "flex-1",
32057
32480
  "min-w-0",
@@ -32188,7 +32611,7 @@ function DocSearch({
32188
32611
  Box,
32189
32612
  {
32190
32613
  position: "absolute",
32191
- 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",
32614
+ 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",
32192
32615
  children: /* @__PURE__ */ jsx(VStack, { gap: "none", children: results.map((result, index) => /* @__PURE__ */ jsx(
32193
32616
  Box,
32194
32617
  {
@@ -32781,7 +33204,7 @@ var init_MiniStateMachine = __esm({
32781
33204
  const x = 2 + i * (NODE_W + GAP + ARROW_W + GAP);
32782
33205
  const tc = transitionCounts[s.name] ?? 0;
32783
33206
  const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
32784
- return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
33207
+ return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
32785
33208
  /* @__PURE__ */ jsx(
32786
33209
  AvlState,
32787
33210
  {
@@ -34297,7 +34720,7 @@ var init_DocumentViewer = __esm({
34297
34720
  }
34298
34721
  });
34299
34722
  function extractTitle(children) {
34300
- if (!React78__default.isValidElement(children)) return void 0;
34723
+ if (!React80__default.isValidElement(children)) return void 0;
34301
34724
  const props = children.props;
34302
34725
  if (typeof props.title === "string") {
34303
34726
  return props.title;
@@ -34409,7 +34832,7 @@ function LinearView({
34409
34832
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
34410
34833
  const isDone = i < currentIdx;
34411
34834
  const isCurrent = i === currentIdx;
34412
- return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
34835
+ return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
34413
34836
  i > 0 && /* @__PURE__ */ jsx(
34414
34837
  Typography,
34415
34838
  {
@@ -35310,12 +35733,12 @@ var init_Form = __esm({
35310
35733
  const isSchemaEntity = isOrbitalEntitySchema(entity);
35311
35734
  const resolvedEntity = isSchemaEntity ? entity : void 0;
35312
35735
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
35313
- const normalizedInitialData = React78__default.useMemo(() => {
35736
+ const normalizedInitialData = React80__default.useMemo(() => {
35314
35737
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
35315
35738
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
35316
35739
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
35317
35740
  }, [entity, initialData]);
35318
- const entityDerivedFields = React78__default.useMemo(() => {
35741
+ const entityDerivedFields = React80__default.useMemo(() => {
35319
35742
  if (fields && fields.length > 0) return void 0;
35320
35743
  if (!resolvedEntity) return void 0;
35321
35744
  return resolvedEntity.fields.map(
@@ -35324,26 +35747,27 @@ var init_Form = __esm({
35324
35747
  type: f3.type,
35325
35748
  required: f3.required,
35326
35749
  defaultValue: f3.default,
35327
- values: f3.values,
35750
+ // EntityField is a discriminated union — `values` lives on Scalar/Enum, `relation` lives on Relation.
35751
+ values: "values" in f3 ? f3.values : void 0,
35328
35752
  min: f3.min,
35329
35753
  max: f3.max,
35330
- relation: f3.relation ? { entity: f3.relation.entity } : void 0
35754
+ relation: "relation" in f3 ? { entity: f3.relation.entity } : void 0
35331
35755
  })
35332
35756
  );
35333
35757
  }, [entity, fields]);
35334
35758
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
35335
35759
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
35336
35760
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
35337
- const [formData, setFormData] = React78__default.useState(
35761
+ const [formData, setFormData] = React80__default.useState(
35338
35762
  normalizedInitialData
35339
35763
  );
35340
- const [collapsedSections, setCollapsedSections] = React78__default.useState(
35764
+ const [collapsedSections, setCollapsedSections] = React80__default.useState(
35341
35765
  /* @__PURE__ */ new Set()
35342
35766
  );
35343
- const [submitError, setSubmitError] = React78__default.useState(null);
35344
- const formRef = React78__default.useRef(null);
35767
+ const [submitError, setSubmitError] = React80__default.useState(null);
35768
+ const formRef = React80__default.useRef(null);
35345
35769
  const formMode = props.mode;
35346
- const mountedRef = React78__default.useRef(false);
35770
+ const mountedRef = React80__default.useRef(false);
35347
35771
  if (!mountedRef.current) {
35348
35772
  mountedRef.current = true;
35349
35773
  debug("forms", "mount", {
@@ -35356,7 +35780,7 @@ var init_Form = __esm({
35356
35780
  });
35357
35781
  }
35358
35782
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
35359
- const evalContext = React78__default.useMemo(
35783
+ const evalContext = React80__default.useMemo(
35360
35784
  () => ({
35361
35785
  formValues: formData,
35362
35786
  globalVariables: externalContext?.globalVariables ?? {},
@@ -35365,7 +35789,7 @@ var init_Form = __esm({
35365
35789
  }),
35366
35790
  [formData, externalContext]
35367
35791
  );
35368
- React78__default.useEffect(() => {
35792
+ React80__default.useEffect(() => {
35369
35793
  debug("forms", "initialData-sync", {
35370
35794
  mode: formMode,
35371
35795
  normalizedInitialData,
@@ -35376,7 +35800,7 @@ var init_Form = __esm({
35376
35800
  setFormData(normalizedInitialData);
35377
35801
  }
35378
35802
  }, [normalizedInitialData]);
35379
- const processCalculations = React78__default.useCallback(
35803
+ const processCalculations = React80__default.useCallback(
35380
35804
  (changedFieldId, newFormData) => {
35381
35805
  if (!hiddenCalculations.length) return;
35382
35806
  const context = {
@@ -35401,7 +35825,7 @@ var init_Form = __esm({
35401
35825
  },
35402
35826
  [hiddenCalculations, externalContext, eventBus]
35403
35827
  );
35404
- const checkViolations = React78__default.useCallback(
35828
+ const checkViolations = React80__default.useCallback(
35405
35829
  (changedFieldId, newFormData) => {
35406
35830
  if (!violationTriggers.length) return;
35407
35831
  const context = {
@@ -35439,7 +35863,7 @@ var init_Form = __esm({
35439
35863
  processCalculations(name, newFormData);
35440
35864
  checkViolations(name, newFormData);
35441
35865
  };
35442
- const isFieldVisible = React78__default.useCallback(
35866
+ const isFieldVisible = React80__default.useCallback(
35443
35867
  (fieldName) => {
35444
35868
  const condition = conditionalFields[fieldName];
35445
35869
  if (!condition) return true;
@@ -35447,7 +35871,7 @@ var init_Form = __esm({
35447
35871
  },
35448
35872
  [conditionalFields, evalContext]
35449
35873
  );
35450
- const isSectionVisible = React78__default.useCallback(
35874
+ const isSectionVisible = React80__default.useCallback(
35451
35875
  (section) => {
35452
35876
  if (!section.condition) return true;
35453
35877
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -35523,7 +35947,7 @@ var init_Form = __esm({
35523
35947
  eventBus.emit(`UI:${onCancel}`);
35524
35948
  }
35525
35949
  };
35526
- const renderField = React78__default.useCallback(
35950
+ const renderField = React80__default.useCallback(
35527
35951
  (field) => {
35528
35952
  const fieldName = field.name || field.field;
35529
35953
  if (!fieldName) return null;
@@ -35544,7 +35968,7 @@ var init_Form = __esm({
35544
35968
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
35545
35969
  );
35546
35970
  const effectiveFields = entityDerivedFields ?? fields;
35547
- const normalizedFields = React78__default.useMemo(() => {
35971
+ const normalizedFields = React80__default.useMemo(() => {
35548
35972
  if (!effectiveFields || effectiveFields.length === 0) return [];
35549
35973
  return effectiveFields.map((field) => {
35550
35974
  if (typeof field === "string") {
@@ -35555,10 +35979,11 @@ var init_Form = __esm({
35555
35979
  type: entityField.type,
35556
35980
  required: entityField.required,
35557
35981
  defaultValue: entityField.default,
35558
- values: entityField.values,
35982
+ // EntityField is a discriminated union — `values` lives on Scalar/Enum, `relation` lives on Relation.
35983
+ values: "values" in entityField ? entityField.values : void 0,
35559
35984
  min: entityField.min,
35560
35985
  max: entityField.max,
35561
- relation: entityField.relation ? { entity: entityField.relation.entity } : void 0
35986
+ relation: "relation" in entityField ? { entity: entityField.relation.entity } : void 0
35562
35987
  };
35563
35988
  }
35564
35989
  return { name: field, type: "string" };
@@ -35566,7 +35991,7 @@ var init_Form = __esm({
35566
35991
  return field;
35567
35992
  });
35568
35993
  }, [effectiveFields, resolvedEntity]);
35569
- const schemaFields = React78__default.useMemo(() => {
35994
+ const schemaFields = React80__default.useMemo(() => {
35570
35995
  if (normalizedFields.length === 0) return null;
35571
35996
  if (isDebugEnabled()) {
35572
35997
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -35576,7 +36001,7 @@ var init_Form = __esm({
35576
36001
  }
35577
36002
  return normalizedFields.map(renderField).filter(Boolean);
35578
36003
  }, [normalizedFields, renderField, entityName, conditionalFields]);
35579
- const sectionElements = React78__default.useMemo(() => {
36004
+ const sectionElements = React80__default.useMemo(() => {
35580
36005
  if (!sections || sections.length === 0) return null;
35581
36006
  return sections.map((section) => {
35582
36007
  if (!isSectionVisible(section)) {
@@ -36281,7 +36706,7 @@ var init_GameTemplate = __esm({
36281
36706
  {
36282
36707
  variant: "secondary",
36283
36708
  size: "sm",
36284
- icon: Pause,
36709
+ icon: "pause",
36285
36710
  onClick: controls.onPause,
36286
36711
  children: "Pause"
36287
36712
  }
@@ -36290,7 +36715,7 @@ var init_GameTemplate = __esm({
36290
36715
  {
36291
36716
  variant: "primary",
36292
36717
  size: "sm",
36293
- icon: Play,
36718
+ icon: "play",
36294
36719
  onClick: controls.onPlay,
36295
36720
  children: "Play"
36296
36721
  }
@@ -36300,7 +36725,7 @@ var init_GameTemplate = __esm({
36300
36725
  {
36301
36726
  variant: "ghost",
36302
36727
  size: "sm",
36303
- icon: RotateCcw,
36728
+ icon: "rotate-ccw",
36304
36729
  onClick: controls.onReset,
36305
36730
  children: "Reset"
36306
36731
  }
@@ -37302,7 +37727,7 @@ var init_List = __esm({
37302
37727
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
37303
37728
  return [];
37304
37729
  }, [entity]);
37305
- const getItemActions = React78__default.useCallback(
37730
+ const getItemActions = React80__default.useCallback(
37306
37731
  (item) => {
37307
37732
  if (!itemActions) return [];
37308
37733
  if (typeof itemActions === "function") {
@@ -37775,7 +38200,7 @@ var init_MediaGallery = __esm({
37775
38200
  [selectable, selectedItems, selectionEvent, eventBus]
37776
38201
  );
37777
38202
  const entityData = Array.isArray(entity) ? entity : [];
37778
- const items = React78__default.useMemo(() => {
38203
+ const items = React80__default.useMemo(() => {
37779
38204
  if (propItems) return propItems;
37780
38205
  if (entityData.length === 0) return [];
37781
38206
  return entityData.map((record, idx) => ({
@@ -37948,9 +38373,9 @@ function MiniMap({
37948
38373
  viewportRect,
37949
38374
  className
37950
38375
  }) {
37951
- const canvasRef = React78.useRef(null);
37952
- const frameRef = React78.useRef(0);
37953
- React78.useEffect(() => {
38376
+ const canvasRef = React80.useRef(null);
38377
+ const frameRef = React80.useRef(0);
38378
+ React80.useEffect(() => {
37954
38379
  const canvas = canvasRef.current;
37955
38380
  if (!canvas) return;
37956
38381
  const ctx = canvas.getContext("2d");
@@ -38032,7 +38457,7 @@ var init_MiniMap = __esm({
38032
38457
  }
38033
38458
  });
38034
38459
  function extractTitle2(children) {
38035
- if (!React78__default.isValidElement(children)) return void 0;
38460
+ if (!React80__default.isValidElement(children)) return void 0;
38036
38461
  const props = children.props;
38037
38462
  if (typeof props.title === "string") {
38038
38463
  return props.title;
@@ -38745,7 +39170,7 @@ var init_PageHeader = __esm({
38745
39170
  info: "bg-info/10 text-info"
38746
39171
  };
38747
39172
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
38748
- 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(React78__default.Fragment, { children: [
39173
+ 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(React80__default.Fragment, { children: [
38749
39174
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
38750
39175
  crumb.href ? /* @__PURE__ */ jsx(
38751
39176
  "a",
@@ -39005,14 +39430,14 @@ function getAllTraits() {
39005
39430
  return Array.from(traits.values());
39006
39431
  }
39007
39432
  function subscribeToTraitChanges(listener) {
39008
- listeners.add(listener);
39009
- return () => listeners.delete(listener);
39433
+ listeners2.add(listener);
39434
+ return () => listeners2.delete(listener);
39010
39435
  }
39011
- var traits, listeners;
39436
+ var traits, listeners2;
39012
39437
  var init_traitRegistry = __esm({
39013
39438
  "lib/traitRegistry.ts"() {
39014
39439
  traits = /* @__PURE__ */ new Map();
39015
- listeners = /* @__PURE__ */ new Set();
39440
+ listeners2 = /* @__PURE__ */ new Set();
39016
39441
  }
39017
39442
  });
39018
39443
 
@@ -39021,14 +39446,14 @@ function getAllTicks() {
39021
39446
  return Array.from(ticks.values());
39022
39447
  }
39023
39448
  function subscribeToTickChanges(listener) {
39024
- listeners2.add(listener);
39025
- return () => listeners2.delete(listener);
39449
+ listeners3.add(listener);
39450
+ return () => listeners3.delete(listener);
39026
39451
  }
39027
- var ticks, listeners2;
39452
+ var ticks, listeners3;
39028
39453
  var init_tickRegistry = __esm({
39029
39454
  "lib/tickRegistry.ts"() {
39030
39455
  ticks = /* @__PURE__ */ new Map();
39031
- listeners2 = /* @__PURE__ */ new Set();
39456
+ listeners3 = /* @__PURE__ */ new Set();
39032
39457
  }
39033
39458
  });
39034
39459
 
@@ -39037,14 +39462,14 @@ function getGuardHistory() {
39037
39462
  return [...guardHistory];
39038
39463
  }
39039
39464
  function subscribeToGuardChanges(listener) {
39040
- listeners3.add(listener);
39041
- return () => listeners3.delete(listener);
39465
+ listeners4.add(listener);
39466
+ return () => listeners4.delete(listener);
39042
39467
  }
39043
- var guardHistory, listeners3;
39468
+ var guardHistory, listeners4;
39044
39469
  var init_guardRegistry = __esm({
39045
39470
  "lib/guardRegistry.ts"() {
39046
39471
  guardHistory = [];
39047
- listeners3 = /* @__PURE__ */ new Set();
39472
+ listeners4 = /* @__PURE__ */ new Set();
39048
39473
  }
39049
39474
  });
39050
39475
 
@@ -39075,18 +39500,18 @@ function getDebugEvents() {
39075
39500
  return [...events];
39076
39501
  }
39077
39502
  function subscribeToDebugEvents(listener) {
39078
- listeners4.add(listener);
39079
- return () => listeners4.delete(listener);
39503
+ listeners5.add(listener);
39504
+ return () => listeners5.delete(listener);
39080
39505
  }
39081
- var events, listeners4;
39506
+ var events, listeners5;
39082
39507
  var init_debugRegistry = __esm({
39083
39508
  "lib/debugRegistry.ts"() {
39084
39509
  events = [];
39085
- listeners4 = /* @__PURE__ */ new Set();
39510
+ listeners5 = /* @__PURE__ */ new Set();
39086
39511
  }
39087
39512
  });
39088
39513
  function useDebugData() {
39089
- const [data, setData] = React78.useState(() => ({
39514
+ const [data, setData] = React80.useState(() => ({
39090
39515
  traits: [],
39091
39516
  ticks: [],
39092
39517
  guards: [],
@@ -39100,7 +39525,7 @@ function useDebugData() {
39100
39525
  },
39101
39526
  lastUpdate: Date.now()
39102
39527
  }));
39103
- React78.useEffect(() => {
39528
+ React80.useEffect(() => {
39104
39529
  const updateData = () => {
39105
39530
  setData({
39106
39531
  traits: getAllTraits(),
@@ -39159,14 +39584,14 @@ function isDebugEnabled2() {
39159
39584
  return localStorage.getItem(DEBUG_STORAGE_KEY) === "true";
39160
39585
  }
39161
39586
  function onDebugToggle(listener) {
39162
- listeners5.add(listener);
39163
- return () => listeners5.delete(listener);
39587
+ listeners6.add(listener);
39588
+ return () => listeners6.delete(listener);
39164
39589
  }
39165
- var DEBUG_STORAGE_KEY, listeners5;
39590
+ var DEBUG_STORAGE_KEY, listeners6;
39166
39591
  var init_debugUtils = __esm({
39167
39592
  "lib/debugUtils.ts"() {
39168
39593
  DEBUG_STORAGE_KEY = "orbital-debug";
39169
- listeners5 = /* @__PURE__ */ new Set();
39594
+ listeners6 = /* @__PURE__ */ new Set();
39170
39595
  }
39171
39596
  });
39172
39597
  function layoutGraph(states, transitions, initialState, width, height) {
@@ -39209,12 +39634,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
39209
39634
  return positions;
39210
39635
  }
39211
39636
  function WalkMinimap() {
39212
- const [walkStep, setWalkStep] = React78.useState(null);
39213
- const [traits2, setTraits] = React78.useState([]);
39214
- const [coveredEdges, setCoveredEdges] = React78.useState([]);
39215
- const [completedTraits, setCompletedTraits] = React78.useState(/* @__PURE__ */ new Set());
39216
- const prevTraitRef = React78.useRef(null);
39217
- React78.useEffect(() => {
39637
+ const [walkStep, setWalkStep] = React80.useState(null);
39638
+ const [traits2, setTraits] = React80.useState([]);
39639
+ const [coveredEdges, setCoveredEdges] = React80.useState([]);
39640
+ const [completedTraits, setCompletedTraits] = React80.useState(/* @__PURE__ */ new Set());
39641
+ const prevTraitRef = React80.useRef(null);
39642
+ React80.useEffect(() => {
39218
39643
  const interval = setInterval(() => {
39219
39644
  const w = window;
39220
39645
  const step = w.__orbitalWalkStep;
@@ -39661,15 +40086,15 @@ var init_EntitiesTab = __esm({
39661
40086
  }
39662
40087
  });
39663
40088
  function EventFlowTab({ events: events2 }) {
39664
- const [filter, setFilter] = React78.useState("all");
39665
- const containerRef = React78.useRef(null);
39666
- const [autoScroll, setAutoScroll] = React78.useState(true);
39667
- React78.useEffect(() => {
40089
+ const [filter, setFilter] = React80.useState("all");
40090
+ const containerRef = React80.useRef(null);
40091
+ const [autoScroll, setAutoScroll] = React80.useState(true);
40092
+ React80.useEffect(() => {
39668
40093
  if (autoScroll && containerRef.current) {
39669
40094
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
39670
40095
  }
39671
40096
  }, [events2.length, autoScroll]);
39672
- const filteredEvents = React78.useMemo(() => {
40097
+ const filteredEvents = React80.useMemo(() => {
39673
40098
  if (filter === "all") return events2;
39674
40099
  return events2.filter((e) => e.type === filter);
39675
40100
  }, [events2, filter]);
@@ -39788,7 +40213,7 @@ var init_EventFlowTab = __esm({
39788
40213
  }
39789
40214
  });
39790
40215
  function GuardsPanel({ guards }) {
39791
- const [filter, setFilter] = React78.useState("all");
40216
+ const [filter, setFilter] = React80.useState("all");
39792
40217
  if (guards.length === 0) {
39793
40218
  return /* @__PURE__ */ jsx(
39794
40219
  EmptyState,
@@ -39801,7 +40226,7 @@ function GuardsPanel({ guards }) {
39801
40226
  }
39802
40227
  const passedCount = guards.filter((g) => g.result).length;
39803
40228
  const failedCount = guards.length - passedCount;
39804
- const filteredGuards = React78.useMemo(() => {
40229
+ const filteredGuards = React80.useMemo(() => {
39805
40230
  if (filter === "all") return guards;
39806
40231
  if (filter === "passed") return guards.filter((g) => g.result);
39807
40232
  return guards.filter((g) => !g.result);
@@ -39962,10 +40387,10 @@ function EffectBadge({ effect }) {
39962
40387
  ] });
39963
40388
  }
39964
40389
  function TransitionTimeline({ transitions }) {
39965
- const containerRef = React78.useRef(null);
39966
- const [autoScroll, setAutoScroll] = React78.useState(true);
39967
- const [expandedId, setExpandedId] = React78.useState(null);
39968
- React78.useEffect(() => {
40390
+ const containerRef = React80.useRef(null);
40391
+ const [autoScroll, setAutoScroll] = React80.useState(true);
40392
+ const [expandedId, setExpandedId] = React80.useState(null);
40393
+ React80.useEffect(() => {
39969
40394
  if (autoScroll && containerRef.current) {
39970
40395
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
39971
40396
  }
@@ -40251,9 +40676,9 @@ function getAllEvents(traits2) {
40251
40676
  }
40252
40677
  function EventDispatcherTab({ traits: traits2, schema }) {
40253
40678
  const eventBus = useEventBus();
40254
- const [log18, setLog] = React78.useState([]);
40255
- const prevStatesRef = React78.useRef(/* @__PURE__ */ new Map());
40256
- React78.useEffect(() => {
40679
+ const [log18, setLog] = React80.useState([]);
40680
+ const prevStatesRef = React80.useRef(/* @__PURE__ */ new Map());
40681
+ React80.useEffect(() => {
40257
40682
  for (const trait of traits2) {
40258
40683
  const prev = prevStatesRef.current.get(trait.id);
40259
40684
  if (prev && prev !== trait.currentState) {
@@ -40423,10 +40848,10 @@ function VerifyModePanel({
40423
40848
  serverCount,
40424
40849
  localCount
40425
40850
  }) {
40426
- const [expanded, setExpanded] = React78.useState(true);
40427
- const scrollRef = React78.useRef(null);
40428
- const prevCountRef = React78.useRef(0);
40429
- React78.useEffect(() => {
40851
+ const [expanded, setExpanded] = React80.useState(true);
40852
+ const scrollRef = React80.useRef(null);
40853
+ const prevCountRef = React80.useRef(0);
40854
+ React80.useEffect(() => {
40430
40855
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
40431
40856
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
40432
40857
  }
@@ -40492,10 +40917,10 @@ function RuntimeDebugger({
40492
40917
  defaultTab,
40493
40918
  schema
40494
40919
  }) {
40495
- const [isCollapsed, setIsCollapsed] = React78.useState(mode === "verify" ? true : defaultCollapsed);
40496
- const [isVisible, setIsVisible] = React78.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
40920
+ const [isCollapsed, setIsCollapsed] = React80.useState(mode === "verify" ? true : defaultCollapsed);
40921
+ const [isVisible, setIsVisible] = React80.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
40497
40922
  const debugData = useDebugData();
40498
- React78.useEffect(() => {
40923
+ React80.useEffect(() => {
40499
40924
  if (mode === "inline") return;
40500
40925
  return onDebugToggle((enabled) => {
40501
40926
  setIsVisible(enabled);
@@ -40504,7 +40929,7 @@ function RuntimeDebugger({
40504
40929
  }
40505
40930
  });
40506
40931
  }, [mode]);
40507
- React78.useEffect(() => {
40932
+ React80.useEffect(() => {
40508
40933
  if (mode === "inline") return;
40509
40934
  const handleKeyDown = (e) => {
40510
40935
  if (e.key === "`" && isVisible) {
@@ -41053,7 +41478,7 @@ function SequenceBar({
41053
41478
  onSlotRemove(index);
41054
41479
  }, [onSlotRemove, playing]);
41055
41480
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
41056
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
41481
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
41057
41482
  i > 0 && /* @__PURE__ */ jsx(
41058
41483
  Typography,
41059
41484
  {
@@ -42566,7 +42991,7 @@ var init_StatCard = __esm({
42566
42991
  const labelToUse = propLabel ?? propTitle;
42567
42992
  const eventBus = useEventBus();
42568
42993
  const { t } = useTranslate();
42569
- const handleActionClick = React78__default.useCallback(() => {
42994
+ const handleActionClick = React80__default.useCallback(() => {
42570
42995
  if (action?.event) {
42571
42996
  eventBus.emit(`UI:${action.event}`, {});
42572
42997
  }
@@ -42577,7 +43002,7 @@ var init_StatCard = __esm({
42577
43002
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
42578
43003
  const isLoading = externalLoading ?? false;
42579
43004
  const error = externalError;
42580
- const computeMetricValue = React78__default.useCallback(
43005
+ const computeMetricValue = React80__default.useCallback(
42581
43006
  (metric, items) => {
42582
43007
  if (metric.value !== void 0) {
42583
43008
  return metric.value;
@@ -42616,7 +43041,7 @@ var init_StatCard = __esm({
42616
43041
  },
42617
43042
  []
42618
43043
  );
42619
- const schemaStats = React78__default.useMemo(() => {
43044
+ const schemaStats = React80__default.useMemo(() => {
42620
43045
  if (!metrics || metrics.length === 0) return null;
42621
43046
  return metrics.map((metric) => ({
42622
43047
  label: metric.label,
@@ -42624,7 +43049,7 @@ var init_StatCard = __esm({
42624
43049
  format: metric.format
42625
43050
  }));
42626
43051
  }, [metrics, data, computeMetricValue]);
42627
- const calculatedTrend = React78__default.useMemo(() => {
43052
+ const calculatedTrend = React80__default.useMemo(() => {
42628
43053
  if (manualTrend !== void 0) return manualTrend;
42629
43054
  if (previousValue === void 0 || currentValue === void 0)
42630
43055
  return void 0;
@@ -43806,7 +44231,7 @@ var init_Timeline = __esm({
43806
44231
  }) => {
43807
44232
  const { t } = useTranslate();
43808
44233
  const entityData = Array.isArray(entity) ? entity : [];
43809
- const items = React78__default.useMemo(() => {
44234
+ const items = React80__default.useMemo(() => {
43810
44235
  if (propItems) return propItems;
43811
44236
  if (entityData.length === 0) return [];
43812
44237
  return entityData.map((record, idx) => {
@@ -43963,7 +44388,7 @@ var init_TimerDisplay = __esm({
43963
44388
  }
43964
44389
  });
43965
44390
  function extractToastProps(children) {
43966
- if (!React78__default.isValidElement(children)) {
44391
+ if (!React80__default.isValidElement(children)) {
43967
44392
  if (typeof children === "string") {
43968
44393
  return { message: children };
43969
44394
  }
@@ -44001,7 +44426,7 @@ var init_ToastSlot = __esm({
44001
44426
  eventBus.emit("UI:CLOSE");
44002
44427
  };
44003
44428
  if (!isVisible) return null;
44004
- const isCustomContent = React78__default.isValidElement(children) && !message;
44429
+ const isCustomContent = React80__default.isValidElement(children) && !message;
44005
44430
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
44006
44431
  Toast,
44007
44432
  {
@@ -44270,7 +44695,7 @@ var init_WizardContainer = __esm({
44270
44695
  const isCompleted = index < currentStep;
44271
44696
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
44272
44697
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
44273
- return /* @__PURE__ */ jsxs(React78__default.Fragment, { children: [
44698
+ return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
44274
44699
  /* @__PURE__ */ jsx(
44275
44700
  Button,
44276
44701
  {
@@ -44720,12 +45145,12 @@ var init_XPBar = __esm({
44720
45145
  }
44721
45146
  });
44722
45147
  function lazyThree(name, loader) {
44723
- const Lazy = React78__default.lazy(() => loader().then((m) => ({ default: m[name] })));
45148
+ const Lazy = React80__default.lazy(() => loader().then((m) => ({ default: m[name] })));
44724
45149
  function ThreeWrapper(props) {
44725
- return React78__default.createElement(
44726
- React78__default.Suspense,
45150
+ return React80__default.createElement(
45151
+ React80__default.Suspense,
44727
45152
  { fallback: null },
44728
- React78__default.createElement(Lazy, props)
45153
+ React80__default.createElement(Lazy, props)
44729
45154
  );
44730
45155
  }
44731
45156
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -45341,7 +45766,7 @@ function SuspenseConfigProvider({
45341
45766
  config,
45342
45767
  children
45343
45768
  }) {
45344
- return React78__default.createElement(
45769
+ return React80__default.createElement(
45345
45770
  SuspenseConfigContext.Provider,
45346
45771
  { value: config },
45347
45772
  children
@@ -45824,7 +46249,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
45824
46249
  const key = `${parentId}-${index}-trait:${traitName}`;
45825
46250
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
45826
46251
  }
45827
- return /* @__PURE__ */ jsx(React78__default.Fragment, { children: child }, `${parentId}-${index}`);
46252
+ return /* @__PURE__ */ jsx(React80__default.Fragment, { children: child }, `${parentId}-${index}`);
45828
46253
  }
45829
46254
  if (!child || typeof child !== "object") return null;
45830
46255
  const childId = `${parentId}-${index}`;
@@ -45861,14 +46286,14 @@ function isPatternConfig(value) {
45861
46286
  if (value === null || value === void 0) return false;
45862
46287
  if (typeof value !== "object") return false;
45863
46288
  if (Array.isArray(value)) return false;
45864
- if (React78__default.isValidElement(value)) return false;
46289
+ if (React80__default.isValidElement(value)) return false;
45865
46290
  if (value instanceof Date) return false;
45866
46291
  if (typeof value === "function") return false;
45867
46292
  const record = value;
45868
46293
  return "type" in record && typeof record.type === "string";
45869
46294
  }
45870
46295
  function isPlainConfigObject(value) {
45871
- if (React78__default.isValidElement(value)) return false;
46296
+ if (React80__default.isValidElement(value)) return false;
45872
46297
  if (value instanceof Date) return false;
45873
46298
  const proto = Object.getPrototypeOf(value);
45874
46299
  return proto === Object.prototype || proto === null;
@@ -46316,7 +46741,7 @@ var FormSection = ({
46316
46741
  columns = 1,
46317
46742
  className
46318
46743
  }) => {
46319
- const [collapsed, setCollapsed] = React78__default.useState(defaultCollapsed);
46744
+ const [collapsed, setCollapsed] = React80__default.useState(defaultCollapsed);
46320
46745
  const { t } = useTranslate();
46321
46746
  const eventBus = useEventBus();
46322
46747
  const gridClass = {
@@ -46324,7 +46749,7 @@ var FormSection = ({
46324
46749
  2: "grid-cols-1 md:grid-cols-2",
46325
46750
  3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
46326
46751
  }[columns];
46327
- React78__default.useCallback(() => {
46752
+ React80__default.useCallback(() => {
46328
46753
  if (collapsible) {
46329
46754
  setCollapsed((prev) => !prev);
46330
46755
  eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
@@ -48858,14 +49283,14 @@ init_useQuerySingleton();
48858
49283
 
48859
49284
  // stores/entityStore.ts
48860
49285
  var entities = /* @__PURE__ */ new Map();
48861
- var listeners6 = /* @__PURE__ */ new Set();
49286
+ var listeners7 = /* @__PURE__ */ new Set();
48862
49287
  var idCounter2 = 0;
48863
49288
  function subscribe(listener) {
48864
- listeners6.add(listener);
48865
- return () => listeners6.delete(listener);
49289
+ listeners7.add(listener);
49290
+ return () => listeners7.delete(listener);
48866
49291
  }
48867
49292
  function notify() {
48868
- listeners6.forEach((listener) => listener());
49293
+ listeners7.forEach((listener) => listener());
48869
49294
  }
48870
49295
  function getEntity(id) {
48871
49296
  return entities.get(id);