@almadar/ui 5.103.0 → 5.105.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 (80) hide show
  1. package/dist/avl/index.cjs +168 -88
  2. package/dist/avl/index.css +3 -3
  3. package/dist/avl/index.js +168 -88
  4. package/dist/components/core/atoms/AtlasImage.d.ts +2 -2
  5. package/dist/components/core/atoms/FlipContainer.d.ts +1 -1
  6. package/dist/components/core/molecules/Card.d.ts +1 -1
  7. package/dist/components/core/molecules/Chart.d.ts +3 -3
  8. package/dist/components/core/molecules/DataGrid.d.ts +1 -1
  9. package/dist/components/core/molecules/DataList.d.ts +1 -1
  10. package/dist/components/core/molecules/DocPagination.d.ts +8 -1
  11. package/dist/components/core/molecules/DocSearch.d.ts +8 -1
  12. package/dist/components/core/molecules/FlipCard.d.ts +1 -1
  13. package/dist/components/core/molecules/LineChart.d.ts +3 -1
  14. package/dist/components/core/molecules/MapView.d.ts +18 -1
  15. package/dist/components/core/molecules/SortableList.d.ts +1 -1
  16. package/dist/components/core/molecules/TableView.d.ts +1 -1
  17. package/dist/components/core/organisms/DataTable.d.ts +7 -3
  18. package/dist/components/core/organisms/debug/RuntimeDebugger.d.ts +10 -1
  19. package/dist/components/core/organisms/debug/tabs/EntitiesTab.d.ts +2 -1
  20. package/dist/components/core/organisms/debug/tabs/EventDispatcherTab.d.ts +2 -1
  21. package/dist/components/core/organisms/debug/tabs/EventFlowTab.d.ts +6 -1
  22. package/dist/components/core/organisms/debug/tabs/GuardsPanel.d.ts +6 -1
  23. package/dist/components/core/organisms/debug/tabs/ServerBridgeTab.d.ts +12 -1
  24. package/dist/components/core/organisms/debug/tabs/TicksTab.d.ts +2 -1
  25. package/dist/components/core/organisms/debug/tabs/TraitsTab.d.ts +2 -1
  26. package/dist/components/core/organisms/debug/tabs/TransitionTimeline.d.ts +11 -1
  27. package/dist/components/core/organisms/debug/tabs/VerificationTab.d.ts +8 -1
  28. package/dist/components/game/2d/atoms/ActionButton.d.ts +2 -1
  29. package/dist/components/game/2d/atoms/ChoiceButton.d.ts +2 -1
  30. package/dist/components/game/2d/atoms/ComboCounter.d.ts +2 -1
  31. package/dist/components/game/2d/atoms/ControlButton.d.ts +2 -1
  32. package/dist/components/game/2d/atoms/DamageNumber.d.ts +2 -1
  33. package/dist/components/game/2d/atoms/DialogueBubble.d.ts +2 -1
  34. package/dist/components/game/2d/atoms/GameIcon.d.ts +2 -1
  35. package/dist/components/game/2d/atoms/HealthBar.d.ts +2 -1
  36. package/dist/components/game/2d/atoms/ItemSlot.d.ts +2 -1
  37. package/dist/components/game/2d/atoms/MiniMap.d.ts +2 -1
  38. package/dist/components/game/2d/atoms/ResourceCounter.d.ts +2 -1
  39. package/dist/components/game/2d/atoms/ScoreDisplay.d.ts +2 -1
  40. package/dist/components/game/2d/atoms/StatusEffect.d.ts +2 -1
  41. package/dist/components/game/2d/atoms/TimerDisplay.d.ts +2 -1
  42. package/dist/components/game/2d/atoms/TurnIndicator.d.ts +2 -1
  43. package/dist/components/game/2d/atoms/WaypointMarker.d.ts +2 -1
  44. package/dist/components/game/2d/molecules/Canvas2D.d.ts +6 -5
  45. package/dist/components/game/2d/molecules/GameHud.d.ts +2 -1
  46. package/dist/components/game/2d/molecules/GameMenu.d.ts +2 -1
  47. package/dist/components/game/2d/molecules/InventoryGrid.d.ts +2 -1
  48. package/dist/components/game/2d/molecules/ResourceBar.d.ts +2 -1
  49. package/dist/components/game/2d/molecules/SideCanvas2D.d.ts +36 -0
  50. package/dist/components/game/2d/molecules/StatBadge.d.ts +2 -1
  51. package/dist/components/game/3d/atoms/EventMarker3D.d.ts +17 -0
  52. package/dist/components/game/3d/atoms/SpriteBillboard3D.d.ts +18 -0
  53. package/dist/components/game/3d/index.cjs +539 -496
  54. package/dist/components/game/3d/index.js +367 -324
  55. package/dist/components/game/3d/molecules/FeatureMesh3D.d.ts +21 -0
  56. package/dist/components/game/3d/molecules/GameCamera3D.d.ts +35 -0
  57. package/dist/components/game/3d/molecules/Lighting3D.d.ts +10 -2
  58. package/dist/components/game/3d/molecules/SideScene3D.d.ts +31 -0
  59. package/dist/components/game/3d/molecules/TileMesh3D.d.ts +28 -0
  60. package/dist/components/game/3d/molecules/UnitMesh3D.d.ts +29 -0
  61. package/dist/components/game/shared/game3dTheme.d.ts +55 -0
  62. package/dist/components/game/shared/isometric.d.ts +38 -0
  63. package/dist/components/game/shared/isometricTypes.d.ts +4 -0
  64. package/dist/components/game/shared/lib/editorUtils.d.ts +8 -8
  65. package/dist/components/index.cjs +156 -83
  66. package/dist/components/index.css +3 -3
  67. package/dist/components/index.js +160 -87
  68. package/dist/hooks/useGitHub.d.ts +7 -7
  69. package/dist/marketing/index.cjs +2 -2
  70. package/dist/marketing/index.js +2 -2
  71. package/dist/providers/EventBusProvider.d.ts +1 -1
  72. package/dist/providers/SelectionProvider.d.ts +1 -1
  73. package/dist/providers/ServerBridge.d.ts +1 -1
  74. package/dist/providers/index.cjs +164 -84
  75. package/dist/providers/index.css +3 -3
  76. package/dist/providers/index.js +164 -84
  77. package/dist/runtime/index.cjs +164 -84
  78. package/dist/runtime/index.css +3 -3
  79. package/dist/runtime/index.js +164 -84
  80. package/package.json +10 -15
@@ -10276,9 +10276,9 @@ var init_BiologyCanvas = __esm({
10276
10276
  }
10277
10277
  });
10278
10278
 
10279
- // node_modules/katex/dist/katex.min.css
10279
+ // node_modules/.pnpm/katex@0.16.47/node_modules/katex/dist/katex.min.css
10280
10280
  var init_katex_min = __esm({
10281
- "node_modules/katex/dist/katex.min.css"() {
10281
+ "node_modules/.pnpm/katex@0.16.47/node_modules/katex/dist/katex.min.css"() {
10282
10282
  }
10283
10283
  });
10284
10284
  var Tabs;
@@ -16315,7 +16315,7 @@ function screenToIso(screenX, screenY, scale, baseOffsetX, layout = "isometric")
16315
16315
  const tileY = (screenY / (scaledFloorHeight / 2) - adjustedX / (scaledTileWidth / 2)) / 2;
16316
16316
  return { x: Math.round(tileX), y: Math.round(tileY) };
16317
16317
  }
16318
- var TILE_WIDTH, TILE_HEIGHT, FLOOR_HEIGHT, DIAMOND_TOP_Y, FEATURE_COLORS;
16318
+ var TILE_WIDTH, TILE_HEIGHT, FLOOR_HEIGHT, DIAMOND_TOP_Y, FEATURE_COLORS, TERRAIN_COLORS, TEAM_COLORS, TEAM_SHADOW_COLORS, HIGHLIGHT_COLORS, SELECTION_RING_COLOR, GRID_STROKE_COLOR, BACKGROUND_FALLBACK_COLOR, MINIMAP_TERRAIN_COLORS, MINIMAP_UNIT_COLORS, UNIT_LABEL_BG_COLORS, SIDE_PLATFORM_COLORS, SIDE_PLAYER_COLOR, SIDE_PLAYER_EYE_COLOR, SIDE_SKY_GRADIENT_TOP, SIDE_SKY_GRADIENT_BOTTOM, SIDE_GRID_COLOR, SIDE_FX_COLOR, SIDE_PLATFORM_BEVEL_COLOR, SIDE_PLATFORM_SHADOW_COLOR, SIDE_HAZARD_STRIPE_COLOR, SIDE_GOAL_GLOW_COLOR, DEFAULT_BG_COLOR;
16319
16319
  var init_isometric = __esm({
16320
16320
  "components/game/shared/isometric.ts"() {
16321
16321
  TILE_WIDTH = 256;
@@ -16332,9 +16332,70 @@ var init_isometric = __esm({
16332
16332
  mountain: "#78716c",
16333
16333
  default: "#9ca3af"
16334
16334
  };
16335
+ TERRAIN_COLORS = {
16336
+ water: "#3b82f6",
16337
+ mountain: "#78716c",
16338
+ stone: "#9ca3af",
16339
+ default: "#4ade80"
16340
+ };
16341
+ TEAM_COLORS = {
16342
+ player: "#3b82f6",
16343
+ enemy: "#ef4444",
16344
+ neutral: "#6b7280",
16345
+ default: "#6b7280"
16346
+ };
16347
+ TEAM_SHADOW_COLORS = {
16348
+ player: "rgba(0,150,255,0.6)",
16349
+ default: "rgba(255,50,50,0.6)"
16350
+ };
16351
+ HIGHLIGHT_COLORS = {
16352
+ hover: "rgba(255,255,255,0.15)",
16353
+ validMove: "rgba(74,222,128,0.25)",
16354
+ attack: "rgba(239,68,68,0.35)"
16355
+ };
16356
+ SELECTION_RING_COLOR = "rgba(0,200,255,0.8)";
16357
+ GRID_STROKE_COLOR = "rgba(0,0,0,0.2)";
16358
+ BACKGROUND_FALLBACK_COLOR = "#1a1a2e";
16359
+ MINIMAP_TERRAIN_COLORS = {
16360
+ water: "#3b82f6",
16361
+ mountain: "#78716c",
16362
+ default: "#4ade80"
16363
+ };
16364
+ MINIMAP_UNIT_COLORS = {
16365
+ player: "#60a5fa",
16366
+ enemy: "#f87171",
16367
+ neutral: "#9ca3af",
16368
+ default: "#9ca3af"
16369
+ };
16370
+ UNIT_LABEL_BG_COLORS = {
16371
+ player: "rgba(59,130,246,0.9)",
16372
+ enemy: "rgba(239,68,68,0.9)",
16373
+ neutral: "rgba(107,114,128,0.9)",
16374
+ default: "rgba(107,114,128,0.9)"
16375
+ };
16376
+ SIDE_PLATFORM_COLORS = {
16377
+ ground: "#4a7c59",
16378
+ platform: "#7c6b4a",
16379
+ hazard: "#c0392b",
16380
+ goal: "#f1c40f"
16381
+ };
16382
+ SIDE_PLAYER_COLOR = "#3498db";
16383
+ SIDE_PLAYER_EYE_COLOR = "#ffffff";
16384
+ SIDE_SKY_GRADIENT_TOP = "#1a1a2e";
16385
+ SIDE_SKY_GRADIENT_BOTTOM = "#16213e";
16386
+ SIDE_GRID_COLOR = "rgba(255, 255, 255, 0.03)";
16387
+ SIDE_FX_COLOR = "#ffe066";
16388
+ SIDE_PLATFORM_BEVEL_COLOR = "rgba(255,255,255,0.15)";
16389
+ SIDE_PLATFORM_SHADOW_COLOR = "rgba(0,0,0,0.3)";
16390
+ SIDE_HAZARD_STRIPE_COLOR = "#e74c3c";
16391
+ SIDE_GOAL_GLOW_COLOR = "rgba(241, 196, 15, 0.5)";
16392
+ DEFAULT_BG_COLOR = "#5c94fc";
16335
16393
  }
16336
16394
  });
16337
- function SideView({
16395
+ function normalizeBackdrop(bg) {
16396
+ return typeof bg === "string" ? { url: bg, role: "decoration", category: "background" } : bg;
16397
+ }
16398
+ function SideCanvas2D({
16338
16399
  player,
16339
16400
  platforms,
16340
16401
  worldWidth,
@@ -16343,7 +16404,7 @@ function SideView({
16343
16404
  canvasHeight,
16344
16405
  follow,
16345
16406
  bgColor,
16346
- backgroundImage,
16407
+ backgroundImage: backgroundImageRaw,
16347
16408
  playerSprite,
16348
16409
  tileSprites,
16349
16410
  effects,
@@ -16351,27 +16412,22 @@ function SideView({
16351
16412
  keyUpMap,
16352
16413
  className
16353
16414
  }) {
16415
+ const backgroundImage = normalizeBackdrop(backgroundImageRaw);
16354
16416
  const canvasRef = useRef(null);
16355
16417
  const eventBus = useEventBus();
16356
16418
  const keysRef = useRef(/* @__PURE__ */ new Set());
16357
- const imageCache2 = useRef(/* @__PURE__ */ new Map());
16358
- const [loadedImages, setLoadedImages] = useState(/* @__PURE__ */ new Set());
16359
- const loadImage = useCallback((url) => {
16360
- if (!url) return null;
16361
- const cached = imageCache2.current.get(url);
16362
- if (cached?.complete && cached.naturalWidth > 0) {
16363
- if (!loadedImages.has(url)) setLoadedImages((prev) => new Set(prev).add(url));
16364
- return cached;
16365
- }
16366
- if (!cached) {
16367
- const img = new Image();
16368
- img.crossOrigin = "anonymous";
16369
- img.src = url;
16370
- img.onload = () => setLoadedImages((prev) => new Set(prev).add(url));
16371
- imageCache2.current.set(url, img);
16419
+ const spriteUrls = useMemo(() => {
16420
+ const urls = [];
16421
+ if (backgroundImage?.url) urls.push(backgroundImage.url);
16422
+ if (playerSprite?.url) urls.push(playerSprite.url);
16423
+ if (tileSprites) {
16424
+ for (const asset of Object.values(tileSprites)) {
16425
+ if (asset?.url) urls.push(asset.url);
16426
+ }
16372
16427
  }
16373
- return null;
16374
- }, [loadedImages]);
16428
+ return urls;
16429
+ }, [backgroundImage, playerSprite, tileSprites]);
16430
+ const { getImage } = useImageCache(spriteUrls);
16375
16431
  useEffect(() => {
16376
16432
  if (typeof window === "undefined") return;
16377
16433
  const canvas = canvasRef.current;
@@ -16484,7 +16540,7 @@ function SideView({
16484
16540
  camX = Math.max(0, Math.min(px - cw / 2, ww - cw));
16485
16541
  camY = Math.max(0, Math.min(py - ch / 2 - 50, wh - ch));
16486
16542
  }
16487
- const bgImage = bgImg ? loadImage(bgImg.url) : null;
16543
+ const bgImage = bgImg ? getImage(bgImg.url) : void 0;
16488
16544
  const bgSrc = bgImage ? resolveAssetSource(bgImage, bgImg, NOOP) : null;
16489
16545
  if (bgSrc) {
16490
16546
  blit(ctx, bgSrc, 0, 0, cw, ch);
@@ -16495,12 +16551,12 @@ function SideView({
16495
16551
  ctx.fillRect(0, 0, cw, ch);
16496
16552
  } else {
16497
16553
  const grad = ctx.createLinearGradient(0, 0, 0, ch);
16498
- grad.addColorStop(0, SKY_GRADIENT_TOP);
16499
- grad.addColorStop(1, SKY_GRADIENT_BOTTOM);
16554
+ grad.addColorStop(0, SIDE_SKY_GRADIENT_TOP);
16555
+ grad.addColorStop(1, SIDE_SKY_GRADIENT_BOTTOM);
16500
16556
  ctx.fillStyle = grad;
16501
16557
  ctx.fillRect(0, 0, cw, ch);
16502
16558
  }
16503
- ctx.strokeStyle = GRID_COLOR;
16559
+ ctx.strokeStyle = SIDE_GRID_COLOR;
16504
16560
  ctx.lineWidth = 1;
16505
16561
  const gridSize = 32;
16506
16562
  for (let gx = -camX % gridSize; gx < cw; gx += gridSize) {
@@ -16520,7 +16576,7 @@ function SideView({
16520
16576
  const platY = plat.y - camY;
16521
16577
  const platType = plat.type ?? "ground";
16522
16578
  const spriteAsset = tSprites?.[platType];
16523
- const tileImg = spriteAsset ? loadImage(spriteAsset.url) : null;
16579
+ const tileImg = spriteAsset ? getImage(spriteAsset.url) : void 0;
16524
16580
  const tileSrc = tileImg ? resolveAssetSource(tileImg, spriteAsset, NOOP) : null;
16525
16581
  if (tileSrc) {
16526
16582
  const originX = tileSrc.rect ? tileSrc.rect.sx : 0;
@@ -16535,15 +16591,15 @@ function SideView({
16535
16591
  ctx.drawImage(tileImg, originX, originY, srcW, tileH, platX + tx, platY, drawW, plat.height);
16536
16592
  }
16537
16593
  } else {
16538
- const color = PLATFORM_COLORS[platType] ?? PLATFORM_COLORS.ground;
16594
+ const color = SIDE_PLATFORM_COLORS[platType] ?? SIDE_PLATFORM_COLORS.ground;
16539
16595
  ctx.fillStyle = color;
16540
16596
  ctx.fillRect(platX, platY, plat.width, plat.height);
16541
- ctx.fillStyle = "rgba(255, 255, 255, 0.15)";
16597
+ ctx.fillStyle = SIDE_PLATFORM_BEVEL_COLOR;
16542
16598
  ctx.fillRect(platX, platY, plat.width, 3);
16543
- ctx.fillStyle = "rgba(0, 0, 0, 0.3)";
16599
+ ctx.fillStyle = SIDE_PLATFORM_SHADOW_COLOR;
16544
16600
  ctx.fillRect(platX, platY + plat.height - 2, plat.width, 2);
16545
16601
  if (platType === "hazard") {
16546
- ctx.strokeStyle = "#e74c3c";
16602
+ ctx.strokeStyle = SIDE_HAZARD_STRIPE_COLOR;
16547
16603
  ctx.lineWidth = 2;
16548
16604
  for (let sx = platX; sx < platX + plat.width; sx += 12) {
16549
16605
  ctx.beginPath();
@@ -16553,7 +16609,7 @@ function SideView({
16553
16609
  }
16554
16610
  }
16555
16611
  if (platType === "goal") {
16556
- ctx.fillStyle = "rgba(241, 196, 15, 0.5)";
16612
+ ctx.fillStyle = SIDE_GOAL_GLOW_COLOR;
16557
16613
  ctx.beginPath();
16558
16614
  ctx.arc(platX + plat.width / 2, platY - 10, 8, 0, Math.PI * 2);
16559
16615
  ctx.fill();
@@ -16565,7 +16621,7 @@ function SideView({
16565
16621
  const ppx = px - camX;
16566
16622
  const ppy = py - camY;
16567
16623
  const facingRight = auth.facingRight ?? true;
16568
- const playerImg = pSprite ? loadImage(pSprite.url) : null;
16624
+ const playerImg = pSprite ? getImage(pSprite.url) : void 0;
16569
16625
  const playerSrc = playerImg ? resolveAssetSource(playerImg, pSprite, NOOP) : null;
16570
16626
  if (playerSrc) {
16571
16627
  ctx.save();
@@ -16578,7 +16634,7 @@ function SideView({
16578
16634
  }
16579
16635
  ctx.restore();
16580
16636
  } else {
16581
- ctx.fillStyle = PLAYER_COLOR;
16637
+ ctx.fillStyle = SIDE_PLAYER_COLOR;
16582
16638
  const radius = Math.min(pw, ph) * 0.25;
16583
16639
  ctx.beginPath();
16584
16640
  ctx.moveTo(ppx + radius, ppy);
@@ -16594,7 +16650,7 @@ function SideView({
16594
16650
  const eyeY = ppy + ph * 0.3;
16595
16651
  const eyeSize = 3;
16596
16652
  const eyeOffsetX = facingRight ? pw * 0.55 : pw * 0.2;
16597
- ctx.fillStyle = PLAYER_EYE_COLOR;
16653
+ ctx.fillStyle = SIDE_PLAYER_EYE_COLOR;
16598
16654
  ctx.beginPath();
16599
16655
  ctx.arc(ppx + eyeOffsetX, eyeY, eyeSize, 0, Math.PI * 2);
16600
16656
  ctx.fill();
@@ -16608,7 +16664,7 @@ function SideView({
16608
16664
  const alpha = Math.min(1, fx.ttl / 4);
16609
16665
  const prev = ctx.globalAlpha;
16610
16666
  ctx.globalAlpha = alpha;
16611
- ctx.fillStyle = "#ffe066";
16667
+ ctx.fillStyle = SIDE_FX_COLOR;
16612
16668
  ctx.beginPath();
16613
16669
  ctx.arc(fxScreenX, fxScreenY, 12, 0, Math.PI * 2);
16614
16670
  ctx.fill();
@@ -16616,7 +16672,7 @@ function SideView({
16616
16672
  }
16617
16673
  };
16618
16674
  return interp.startLoop(drawFrame);
16619
- }, [interp.startLoop, loadImage]);
16675
+ }, [interp.startLoop, getImage]);
16620
16676
  return /* @__PURE__ */ jsx(
16621
16677
  "canvas",
16622
16678
  {
@@ -16628,6 +16684,33 @@ function SideView({
16628
16684
  }
16629
16685
  );
16630
16686
  }
16687
+ var NOOP;
16688
+ var init_SideCanvas2D = __esm({
16689
+ "components/game/2d/molecules/SideCanvas2D.tsx"() {
16690
+ "use client";
16691
+ init_cn();
16692
+ init_useEventBus();
16693
+ init_useImageCache();
16694
+ init_atlasSlice();
16695
+ init_useRenderInterpolation();
16696
+ init_verificationRegistry();
16697
+ init_isometric();
16698
+ NOOP = () => {
16699
+ };
16700
+ SideCanvas2D.displayName = "SideCanvas2D";
16701
+ }
16702
+ });
16703
+ function normalizeBackdrop2(bg) {
16704
+ return typeof bg === "string" ? { url: bg, role: "decoration", category: "background" } : bg;
16705
+ }
16706
+ function resolveTileFallbackColor(tile) {
16707
+ const override = tile.color;
16708
+ return override ?? TERRAIN_COLORS[tile.terrain ?? ""] ?? TERRAIN_COLORS.default;
16709
+ }
16710
+ function resolveUnitTeamColor(unit) {
16711
+ const override = unit.tint;
16712
+ return override ?? TEAM_COLORS[unit.team ?? ""] ?? TEAM_COLORS.default;
16713
+ }
16631
16714
  function Canvas2D({
16632
16715
  // Closed-circuit
16633
16716
  className,
@@ -16642,7 +16725,7 @@ function Canvas2D({
16642
16725
  effects: _effectsPropRaw = [],
16643
16726
  platforms,
16644
16727
  player,
16645
- backgroundImage,
16728
+ backgroundImage: backgroundImageRaw,
16646
16729
  // Interaction state
16647
16730
  selectedUnitId = null,
16648
16731
  validMoves = [],
@@ -16677,12 +16760,13 @@ function Canvas2D({
16677
16760
  // Side-view asset resolution
16678
16761
  playerSprite,
16679
16762
  tileSprites,
16680
- bgColor = "#5c94fc",
16763
+ bgColor = DEFAULT_BG_COLOR,
16681
16764
  worldWidth = 800,
16682
16765
  worldHeight = 400,
16683
16766
  // Remote asset loading
16684
16767
  assetManifest
16685
16768
  }) {
16769
+ const backgroundImage = normalizeBackdrop2(backgroundImageRaw);
16686
16770
  const isSide = projection === "side";
16687
16771
  const isFree = projection === "free";
16688
16772
  const flatLike = projection === "hex" || projection === "flat" || isFree;
@@ -16866,7 +16950,7 @@ function Canvas2D({
16866
16950
  return sortedTiles.map((t2) => ({
16867
16951
  x: t2.x,
16868
16952
  y: t2.y,
16869
- color: t2.terrain === "water" ? "#3b82f6" : t2.terrain === "mountain" ? "#78716c" : "#4ade80"
16953
+ color: MINIMAP_TERRAIN_COLORS[t2.terrain ?? ""] ?? MINIMAP_TERRAIN_COLORS.default
16870
16954
  }));
16871
16955
  }, [showMinimap, sortedTiles]);
16872
16956
  const miniMapUnits = useMemo(() => {
@@ -16874,7 +16958,7 @@ function Canvas2D({
16874
16958
  return units.filter((u) => u.position).map((u) => ({
16875
16959
  x: u.position.x,
16876
16960
  y: u.position.y,
16877
- color: u.team === "player" ? "#60a5fa" : u.team === "enemy" ? "#f87171" : "#9ca3af",
16961
+ color: MINIMAP_UNIT_COLORS[u.team ?? ""] ?? MINIMAP_UNIT_COLORS.default,
16878
16962
  isPlayer: u.team === "player"
16879
16963
  }));
16880
16964
  }, [showMinimap, units]);
@@ -16911,7 +16995,7 @@ function Canvas2D({
16911
16995
  }
16912
16996
  }
16913
16997
  } else {
16914
- ctx.fillStyle = "#1a1a2e";
16998
+ ctx.fillStyle = BACKGROUND_FALLBACK_COLOR;
16915
16999
  ctx.fillRect(0, 0, viewportSize.width, viewportSize.height);
16916
17000
  }
16917
17001
  if (sortedTiles.length === 0 && units.length === 0 && features.length === 0) return;
@@ -16941,15 +17025,15 @@ function Canvas2D({
16941
17025
  } else if (img && img.naturalWidth === 0) {
16942
17026
  ctx.drawImage(img, pos.x, pos.y, scaledTileWidth, scaledTileHeight);
16943
17027
  } else if (squareGrid) {
16944
- ctx.fillStyle = tile.terrain === "water" ? "#3b82f6" : tile.terrain === "mountain" ? "#78716c" : tile.terrain === "stone" ? "#9ca3af" : "#4ade80";
17028
+ ctx.fillStyle = resolveTileFallbackColor(tile);
16945
17029
  ctx.fillRect(pos.x, pos.y, scaledTileWidth, scaledTileWidth);
16946
- ctx.strokeStyle = "rgba(0,0,0,0.2)";
17030
+ ctx.strokeStyle = GRID_STROKE_COLOR;
16947
17031
  ctx.lineWidth = 1;
16948
17032
  ctx.strokeRect(pos.x, pos.y, scaledTileWidth, scaledTileWidth);
16949
17033
  } else {
16950
17034
  const centerX = pos.x + scaledTileWidth / 2;
16951
17035
  const topY = pos.y + scaledDiamondTopY;
16952
- ctx.fillStyle = tile.terrain === "water" ? "#3b82f6" : tile.terrain === "mountain" ? "#78716c" : tile.terrain === "stone" ? "#9ca3af" : "#4ade80";
17036
+ ctx.fillStyle = resolveTileFallbackColor(tile);
16953
17037
  ctx.beginPath();
16954
17038
  ctx.moveTo(centerX, topY);
16955
17039
  ctx.lineTo(pos.x + scaledTileWidth, topY + scaledFloorHeight / 2);
@@ -16957,7 +17041,7 @@ function Canvas2D({
16957
17041
  ctx.lineTo(pos.x, topY + scaledFloorHeight / 2);
16958
17042
  ctx.closePath();
16959
17043
  ctx.fill();
16960
- ctx.strokeStyle = "rgba(0,0,0,0.2)";
17044
+ ctx.strokeStyle = GRID_STROKE_COLOR;
16961
17045
  ctx.lineWidth = 1;
16962
17046
  ctx.stroke();
16963
17047
  }
@@ -16978,11 +17062,11 @@ function Canvas2D({
16978
17062
  ctx.fill();
16979
17063
  };
16980
17064
  if (hoveredTile && hoveredTile.x === tile.x && hoveredTile.y === tile.y) {
16981
- drawHighlight("rgba(255, 255, 255, 0.15)");
17065
+ drawHighlight(HIGHLIGHT_COLORS.hover);
16982
17066
  }
16983
17067
  const tileKey = `${tile.x},${tile.y}`;
16984
- if (validMoveSet.has(tileKey)) drawHighlight("rgba(74, 222, 128, 0.25)");
16985
- if (attackTargetSet.has(tileKey)) drawHighlight("rgba(239, 68, 68, 0.35)");
17068
+ if (validMoveSet.has(tileKey)) drawHighlight(HIGHLIGHT_COLORS.validMove);
17069
+ if (attackTargetSet.has(tileKey)) drawHighlight(HIGHLIGHT_COLORS.attack);
16986
17070
  if (debug2) {
16987
17071
  const centerX = pos.x + scaledTileWidth / 2;
16988
17072
  const centerY = squareGrid ? pos.y + scaledTileWidth / 2 : pos.y + scaledFloorHeight / 2 + scaledDiamondTopY;
@@ -17056,9 +17140,9 @@ function Canvas2D({
17056
17140
  const maxUnitW = scaledTileWidth * spriteMaxWidthRatio * unitScale;
17057
17141
  const unitIsSheet = unit.spriteSheet?.url !== void 0;
17058
17142
  const unitSrc = img && !unitIsSheet ? resolveAssetSource(img, unitAsset, bumpAtlas) : null;
17059
- const SHEET_ROWS = 5;
17060
17143
  const sheetFrameW = img ? img.naturalWidth / SHEET_COLUMNS : 0;
17061
- const sheetFrameH = img ? img.naturalHeight / SHEET_ROWS : 0;
17144
+ const sheetFrameH = img ? img.naturalHeight / LEGACY_SHEET_ROWS : 0;
17145
+ const legacyFrame = frameRect(0, 0, SHEET_COLUMNS, sheetFrameW, sheetFrameH);
17062
17146
  const frameW = unitIsSheet ? sheetFrameW : img?.naturalWidth ?? 1;
17063
17147
  const frameH = unitIsSheet ? sheetFrameH : img?.naturalHeight ?? 1;
17064
17148
  const ar = unitIsSheet ? sheetFrameW / (sheetFrameH || 1) : unitSrc ? unitSrc.aspect : frameW / (frameH || 1);
@@ -17076,17 +17160,16 @@ function Canvas2D({
17076
17160
  ctx.globalAlpha = 0.25;
17077
17161
  if (img) {
17078
17162
  if (unitIsSheet) {
17079
- ctx.drawImage(img, 0, 0, sheetFrameW, sheetFrameH, ghostCenterX - drawW / 2, ghostGroundY - drawH, drawW, drawH);
17163
+ ctx.drawImage(img, legacyFrame.sx, legacyFrame.sy, legacyFrame.sw, legacyFrame.sh, ghostCenterX - drawW / 2, ghostGroundY - drawH, drawW, drawH);
17080
17164
  } else if (unitSrc) {
17081
17165
  blit(ctx, unitSrc, ghostCenterX - drawW / 2, ghostGroundY - drawH, drawW, drawH);
17082
17166
  } else {
17083
17167
  ctx.drawImage(img, ghostCenterX - drawW / 2, ghostGroundY - drawH, drawW, drawH);
17084
17168
  }
17085
17169
  } else {
17086
- const color = unit.team === "player" ? "#3b82f6" : unit.team === "enemy" ? "#ef4444" : "#6b7280";
17087
17170
  ctx.beginPath();
17088
17171
  ctx.arc(ghostCenterX, ghostGroundY - 16 * scale, 20 * scale, 0, Math.PI * 2);
17089
- ctx.fillStyle = color;
17172
+ ctx.fillStyle = resolveUnitTeamColor(unit);
17090
17173
  ctx.fill();
17091
17174
  }
17092
17175
  ctx.restore();
@@ -17094,7 +17177,7 @@ function Canvas2D({
17094
17177
  if (isSelected) {
17095
17178
  ctx.beginPath();
17096
17179
  ctx.ellipse(centerX, groundY, drawW / 2 + 4 * scale, 12 * scale, 0, 0, Math.PI * 2);
17097
- ctx.strokeStyle = "rgba(0, 200, 255, 0.8)";
17180
+ ctx.strokeStyle = SELECTION_RING_COLOR;
17098
17181
  ctx.lineWidth = 3;
17099
17182
  ctx.stroke();
17100
17183
  }
@@ -17111,7 +17194,7 @@ function Canvas2D({
17111
17194
  const spriteY = groundY - fDrawH - (frame.applyBreathing ? breatheOffset : 0);
17112
17195
  ctx.save();
17113
17196
  if (unit.team) {
17114
- ctx.shadowColor = unit.team === "player" ? "rgba(0, 150, 255, 0.6)" : "rgba(255, 50, 50, 0.6)";
17197
+ ctx.shadowColor = TEAM_SHADOW_COLORS[unit.team] ?? TEAM_SHADOW_COLORS.default;
17115
17198
  ctx.shadowBlur = 12 * scale;
17116
17199
  }
17117
17200
  if (frame.flipX) {
@@ -17126,7 +17209,7 @@ function Canvas2D({
17126
17209
  const spriteY = groundY - drawH - breatheOffset;
17127
17210
  const drawUnit = (x) => {
17128
17211
  if (unitIsSheet) {
17129
- ctx.drawImage(img, 0, 0, sheetFrameW, sheetFrameH, x, spriteY, drawW, drawH);
17212
+ ctx.drawImage(img, legacyFrame.sx, legacyFrame.sy, legacyFrame.sw, legacyFrame.sh, x, spriteY, drawW, drawH);
17130
17213
  } else if (unitSrc) {
17131
17214
  blit(ctx, unitSrc, x, spriteY, drawW, drawH);
17132
17215
  } else {
@@ -17135,7 +17218,7 @@ function Canvas2D({
17135
17218
  };
17136
17219
  if (unit.team) {
17137
17220
  ctx.save();
17138
- ctx.shadowColor = unit.team === "player" ? "rgba(0, 150, 255, 0.6)" : "rgba(255, 50, 50, 0.6)";
17221
+ ctx.shadowColor = TEAM_SHADOW_COLORS[unit.team] ?? TEAM_SHADOW_COLORS.default;
17139
17222
  ctx.shadowBlur = 12 * scale;
17140
17223
  drawUnit(centerX - drawW / 2);
17141
17224
  ctx.restore();
@@ -17143,10 +17226,9 @@ function Canvas2D({
17143
17226
  drawUnit(centerX - drawW / 2);
17144
17227
  }
17145
17228
  } else {
17146
- const color = unit.team === "player" ? "#3b82f6" : unit.team === "enemy" ? "#ef4444" : "#6b7280";
17147
17229
  ctx.beginPath();
17148
17230
  ctx.arc(centerX, groundY - 20 * scale - breatheOffset, 20 * scale, 0, Math.PI * 2);
17149
- ctx.fillStyle = color;
17231
+ ctx.fillStyle = resolveUnitTeamColor(unit);
17150
17232
  ctx.fill();
17151
17233
  ctx.strokeStyle = "rgba(255,255,255,0.8)";
17152
17234
  ctx.lineWidth = 2;
@@ -17385,7 +17467,7 @@ function Canvas2D({
17385
17467
  }
17386
17468
  if (isSide) {
17387
17469
  return /* @__PURE__ */ jsx(Box, { ref: containerRef, className: cn("relative overflow-hidden w-full h-full", className), children: /* @__PURE__ */ jsx(
17388
- SideView,
17470
+ SideCanvas2D,
17389
17471
  {
17390
17472
  player,
17391
17473
  platforms: platforms && platforms.length ? platforms : DEFAULT_PLATFORMS,
@@ -17483,7 +17565,7 @@ function Canvas2D({
17483
17565
  {
17484
17566
  as: "span",
17485
17567
  className: "text-white text-xs font-bold px-1.5 py-0.5 rounded mb-0.5 whitespace-nowrap block",
17486
- style: { background: unit.team === "player" ? "rgba(59,130,246,0.9)" : unit.team === "enemy" ? "rgba(239,68,68,0.9)" : "rgba(107,114,128,0.9)" },
17568
+ style: { background: UNIT_LABEL_BG_COLORS[unit.team ?? ""] ?? UNIT_LABEL_BG_COLORS.default },
17487
17569
  children: unit.name
17488
17570
  }
17489
17571
  ),
@@ -17507,7 +17589,7 @@ function Canvas2D({
17507
17589
  }
17508
17590
  );
17509
17591
  }
17510
- var PLATFORM_COLORS, NOOP, PLAYER_COLOR, PLAYER_EYE_COLOR, SKY_GRADIENT_TOP, SKY_GRADIENT_BOTTOM, GRID_COLOR, DEFAULT_PLATFORMS;
17592
+ var LEGACY_SHEET_ROWS, DEFAULT_PLATFORMS;
17511
17593
  var init_Canvas2D = __esm({
17512
17594
  "components/game/2d/molecules/Canvas2D.tsx"() {
17513
17595
  "use client";
@@ -17529,19 +17611,9 @@ var init_Canvas2D = __esm({
17529
17611
  init_verificationRegistry();
17530
17612
  init_isometric();
17531
17613
  init_spriteSheetConstants();
17532
- PLATFORM_COLORS = {
17533
- ground: "#4a7c59",
17534
- platform: "#7c6b4a",
17535
- hazard: "#c0392b",
17536
- goal: "#f1c40f"
17537
- };
17538
- NOOP = () => {
17539
- };
17540
- PLAYER_COLOR = "#3498db";
17541
- PLAYER_EYE_COLOR = "#ffffff";
17542
- SKY_GRADIENT_TOP = "#1a1a2e";
17543
- SKY_GRADIENT_BOTTOM = "#16213e";
17544
- GRID_COLOR = "rgba(255, 255, 255, 0.03)";
17614
+ init_spriteAnimation();
17615
+ init_SideCanvas2D();
17616
+ LEGACY_SHEET_ROWS = Object.keys(SPRITE_SHEET_LAYOUT).length;
17545
17617
  DEFAULT_PLATFORMS = [
17546
17618
  { x: 0, y: 368, width: 800, height: 32, type: "ground" },
17547
17619
  { x: 150, y: 280, width: 160, height: 16, type: "platform" },
@@ -26722,8 +26794,9 @@ var init_LineChart = __esm({
26722
26794
  const safeData = data ?? [];
26723
26795
  const sortedData = useMemo(() => {
26724
26796
  if (safeData.length === 0) return [];
26797
+ if (!safeData.some((d) => d.date != null)) return [...safeData];
26725
26798
  return [...safeData].sort(
26726
- (a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()
26799
+ (a, b) => new Date(a.date ?? 0).getTime() - new Date(b.date ?? 0).getTime()
26727
26800
  );
26728
26801
  }, [safeData]);
26729
26802
  const points = useMemo(() => {
@@ -29348,7 +29421,7 @@ function TerrainPalette({ terrains, selectedTerrain, onSelect, className }) {
29348
29421
  {
29349
29422
  onClick: () => onSelect(terrain),
29350
29423
  className: `w-8 h-8 rounded cursor-pointer border-2 transition-all ${selectedTerrain === terrain ? "border-foreground scale-110 shadow-lg" : "border-muted hover:border-muted-foreground"}`,
29351
- style: { backgroundColor: TERRAIN_COLORS[terrain] || "var(--color-muted)" },
29424
+ style: { backgroundColor: TERRAIN_COLORS2[terrain] || "var(--color-muted)" },
29352
29425
  title: terrain
29353
29426
  },
29354
29427
  terrain
@@ -29367,7 +29440,7 @@ function EditorToolbar({ mode, onModeChange, className }) {
29367
29440
  m
29368
29441
  )) });
29369
29442
  }
29370
- var TERRAIN_COLORS, FEATURE_TYPES, MODE_LABELS;
29443
+ var TERRAIN_COLORS2, FEATURE_TYPES, MODE_LABELS;
29371
29444
  var init_editorUtils = __esm({
29372
29445
  "components/game/shared/lib/editorUtils.tsx"() {
29373
29446
  init_Box();
@@ -29376,7 +29449,7 @@ var init_editorUtils = __esm({
29376
29449
  init_Button();
29377
29450
  init_Badge();
29378
29451
  init_GameIcon();
29379
- TERRAIN_COLORS = {
29452
+ TERRAIN_COLORS2 = {
29380
29453
  grass: "#4a7c3f",
29381
29454
  dirt: "#8b6c42",
29382
29455
  stone: "#7a7a7a",
@@ -32162,13 +32235,13 @@ var init_MapView = __esm({
32162
32235
  shadowSize: [41, 41]
32163
32236
  });
32164
32237
  L.Marker.prototype.options.icon = defaultIcon;
32165
- const { useEffect: useEffect70, useRef: useRef66, useCallback: useCallback113, useState: useState108 } = React75__default;
32238
+ const { useEffect: useEffect71, useRef: useRef67, useCallback: useCallback114, useState: useState108 } = React75__default;
32166
32239
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
32167
32240
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
32168
32241
  function MapUpdater({ centerLat, centerLng, zoom }) {
32169
32242
  const map = useMap();
32170
- const prevRef = useRef66({ centerLat, centerLng, zoom });
32171
- useEffect70(() => {
32243
+ const prevRef = useRef67({ centerLat, centerLng, zoom });
32244
+ useEffect71(() => {
32172
32245
  const prev = prevRef.current;
32173
32246
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
32174
32247
  map.setView([centerLat, centerLng], zoom);
@@ -32179,7 +32252,7 @@ var init_MapView = __esm({
32179
32252
  }
32180
32253
  function MapClickHandler({ onMapClick }) {
32181
32254
  const map = useMap();
32182
- useEffect70(() => {
32255
+ useEffect71(() => {
32183
32256
  if (!onMapClick) return;
32184
32257
  const handler = (e) => {
32185
32258
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -32208,7 +32281,7 @@ var init_MapView = __esm({
32208
32281
  }) {
32209
32282
  const eventBus = useEventBus2();
32210
32283
  const [clickedPosition, setClickedPosition] = useState108(null);
32211
- const handleMapClick = useCallback113((lat, lng) => {
32284
+ const handleMapClick = useCallback114((lat, lng) => {
32212
32285
  if (showClickedPin) {
32213
32286
  setClickedPosition({ lat, lng });
32214
32287
  }
@@ -32217,7 +32290,7 @@ var init_MapView = __esm({
32217
32290
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
32218
32291
  }
32219
32292
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
32220
- const handleMarkerClick = useCallback113((marker) => {
32293
+ const handleMarkerClick = useCallback114((marker) => {
32221
32294
  onMarkerClick?.(marker);
32222
32295
  if (markerClickEvent) {
32223
32296
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -51912,4 +51985,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
51912
51985
  });
51913
51986
  }
51914
51987
 
51915
- export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, ClassifierBoard, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EMPTY_EFFECT_STATE, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCard, GameHud, GameIcon, GameMenu, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, ItemSlot, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NodeSlotEditor, NotifyListener, NumberStepper, ObjectRulePanel, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateGraph, StateIndicator, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, drawSprite, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSwipeGesture, useTapReveal, useTraitListens, useTranslate127 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
51988
+ export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, ClassifierBoard, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EMPTY_EFFECT_STATE, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCard, GameHud, GameIcon, GameMenu, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, ItemSlot, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NodeSlotEditor, NotifyListener, NumberStepper, ObjectRulePanel, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateGraph, StateIndicator, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS2 as TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, drawSprite, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSwipeGesture, useTapReveal, useTraitListens, useTranslate127 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
@@ -25,7 +25,7 @@ export interface GitHubRepo {
25
25
  /**
26
26
  * Hook to get GitHub connection status
27
27
  */
28
- export declare function useGitHubStatus(): import("@tanstack/react-query").UseQueryResult<GitHubStatus, Error>;
28
+ export declare function useGitHubStatus(): import("@tanstack/react-query").UseQueryResult<NoInfer<GitHubStatus>, Error>;
29
29
  /**
30
30
  * Hook to connect GitHub (initiate OAuth flow)
31
31
  */
@@ -39,20 +39,20 @@ export declare function useDisconnectGitHub(): import("@tanstack/react-query").U
39
39
  /**
40
40
  * Hook to list GitHub repositories
41
41
  */
42
- export declare function useGitHubRepos(page?: number, perPage?: number): import("@tanstack/react-query").UseQueryResult<{
42
+ export declare function useGitHubRepos(page?: number, perPage?: number): import("@tanstack/react-query").UseQueryResult<NoInfer<{
43
43
  repos: GitHubRepo[];
44
44
  page: number;
45
45
  perPage: number;
46
- }, Error>;
46
+ }>, Error>;
47
47
  /**
48
48
  * Hook to get repository details
49
49
  */
50
- export declare function useGitHubRepo(owner: string, repo: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<{
50
+ export declare function useGitHubRepo(owner: string, repo: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<{
51
51
  repo: GitHubRepo;
52
- }, Error>;
52
+ }>, Error>;
53
53
  /**
54
54
  * Hook to list repository branches
55
55
  */
56
- export declare function useGitHubBranches(owner: string, repo: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<{
56
+ export declare function useGitHubBranches(owner: string, repo: string, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<NoInfer<{
57
57
  branches: string[];
58
- }, Error>;
58
+ }>, Error>;
@@ -26,7 +26,7 @@ function _interopNamespace(e) {
26
26
  var React12__namespace = /*#__PURE__*/_interopNamespace(React12);
27
27
  var LucideIcons2__namespace = /*#__PURE__*/_interopNamespace(LucideIcons2);
28
28
 
29
- // node_modules/clsx/dist/clsx.mjs
29
+ // node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
30
30
  function r(e) {
31
31
  var t, f3, n = "";
32
32
  if ("string" == typeof e || "number" == typeof e) n += e;
@@ -41,7 +41,7 @@ function clsx() {
41
41
  return n;
42
42
  }
43
43
 
44
- // node_modules/tailwind-merge/dist/bundle-mjs.mjs
44
+ // node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs
45
45
  var CLASS_PART_SEPARATOR = "-";
46
46
  var createClassGroupUtils = (config) => {
47
47
  const classMap = createClassMap(config);