@almadar/ui 5.101.0 → 5.104.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 (71) hide show
  1. package/dist/avl/index.cjs +253 -49
  2. package/dist/avl/index.css +3 -3
  3. package/dist/avl/index.js +255 -51
  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 +5 -4
  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/StatBadge.d.ts +2 -1
  50. package/dist/components/game/shared/lib/editorUtils.d.ts +8 -8
  51. package/dist/components/index.cjs +100 -24
  52. package/dist/components/index.css +3 -3
  53. package/dist/components/index.js +85 -13
  54. package/dist/hooks/index.cjs +71 -0
  55. package/dist/hooks/index.d.ts +1 -0
  56. package/dist/hooks/index.js +69 -2
  57. package/dist/hooks/useGitHub.d.ts +7 -7
  58. package/dist/hooks/useSharedEntityStore.d.ts +53 -0
  59. package/dist/hooks/useTraitStateMachine.d.ts +32 -1
  60. package/dist/marketing/index.cjs +2 -2
  61. package/dist/marketing/index.js +2 -2
  62. package/dist/providers/EventBusProvider.d.ts +1 -1
  63. package/dist/providers/SelectionProvider.d.ts +1 -1
  64. package/dist/providers/ServerBridge.d.ts +1 -1
  65. package/dist/providers/index.cjs +11 -5
  66. package/dist/providers/index.css +3 -3
  67. package/dist/providers/index.js +11 -5
  68. package/dist/runtime/index.cjs +253 -49
  69. package/dist/runtime/index.css +3 -3
  70. package/dist/runtime/index.js +255 -51
  71. package/package.json +11 -16
@@ -1,3 +1,4 @@
1
+ import * as React from "react";
1
2
  import { type StatBadgeProps } from "./StatBadge";
2
3
  import type { Asset } from "@almadar/core";
3
4
  import type { IconInput } from "../../../core/atoms/index";
@@ -45,7 +46,7 @@ export interface GameHudProps {
45
46
  /** Whether to use a semi-transparent background */
46
47
  transparent?: boolean;
47
48
  }
48
- export declare function GameHud({ position: propPosition, stats: propStats, items, elements, size, className, transparent, }: GameHudProps): import("react/jsx-runtime").JSX.Element;
49
+ export declare function GameHud({ position: propPosition, stats: propStats, items, elements, size, className, transparent, }: GameHudProps): React.JSX.Element;
49
50
  export declare namespace GameHud {
50
51
  var displayName: string;
51
52
  }
@@ -1,3 +1,4 @@
1
+ import * as React from "react";
1
2
  import type { EventKey, EventPayload, Asset } from "@almadar/core";
2
3
  export type MenuOption = EventPayload & {
3
4
  /** Optional ID (generated from index if not provided) */
@@ -35,7 +36,7 @@ export interface GameMenuProps {
35
36
  /** Additional CSS classes */
36
37
  className?: string;
37
38
  }
38
- export declare function GameMenu({ title, subtitle, options, menuItems, onSelect, background, logo, className, }: GameMenuProps): import("react/jsx-runtime").JSX.Element;
39
+ export declare function GameMenu({ title, subtitle, options, menuItems, onSelect, background, logo, className, }: GameMenuProps): React.JSX.Element;
39
40
  export declare namespace GameMenu {
40
41
  var displayName: string;
41
42
  }
@@ -1,3 +1,4 @@
1
+ import * as React from 'react';
1
2
  import type { EventEmit, Asset } from '@almadar/core';
2
3
  import type { IconInput } from '../../../core/atoms/index';
3
4
  export interface InventoryGridItem {
@@ -28,7 +29,7 @@ export interface InventoryGridProps {
28
29
  /** Additional CSS classes */
29
30
  className?: string;
30
31
  }
31
- export declare function InventoryGrid({ items, columns, totalSlots, selectedId, onSelect, selectEvent, size, className, }: InventoryGridProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function InventoryGrid({ items, columns, totalSlots, selectedId, onSelect, selectEvent, size, className, }: InventoryGridProps): React.JSX.Element;
32
33
  export declare namespace InventoryGrid {
33
34
  var displayName: string;
34
35
  }
@@ -1,3 +1,4 @@
1
+ import * as React from 'react';
1
2
  import type { Asset } from '@almadar/core';
2
3
  import type { IconInput } from '../../../core/atoms/index';
3
4
  export interface ResourceBarResource {
@@ -19,7 +20,7 @@ export interface ResourceBarProps {
19
20
  /** Additional CSS classes */
20
21
  className?: string;
21
22
  }
22
- export declare function ResourceBar({ resources, size, className, }: ResourceBarProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function ResourceBar({ resources, size, className, }: ResourceBarProps): React.JSX.Element;
23
24
  export declare namespace ResourceBar {
24
25
  var displayName: string;
25
26
  }
@@ -1,3 +1,4 @@
1
+ import * as React from 'react';
1
2
  import { type IconInput } from '../../../core/atoms/Icon';
2
3
  import type { Asset } from '@almadar/core';
3
4
  /**
@@ -32,7 +33,7 @@ export interface StatBadgeProps {
32
33
  /** Additional CSS classes */
33
34
  className?: string;
34
35
  }
35
- export declare function StatBadge({ assetUrl, iconUrl, label, value, max, format, icon, size, variant, className, source: _source, field: _field, }: StatBadgeProps): import("react/jsx-runtime").JSX.Element;
36
+ export declare function StatBadge({ assetUrl, iconUrl, label, value, max, format, icon, size, variant, className, source: _source, field: _field, }: StatBadgeProps): React.JSX.Element;
36
37
  export declare namespace StatBadge {
37
38
  var displayName: string;
38
39
  }
@@ -23,7 +23,7 @@ export interface CollapsibleSectionProps {
23
23
  };
24
24
  className?: string;
25
25
  }
26
- export declare function CollapsibleSection({ title, expanded, onToggle, children, assetManifest, className }: CollapsibleSectionProps): import("react/jsx-runtime").JSX.Element;
26
+ export declare function CollapsibleSection({ title, expanded, onToggle, children, assetManifest, className }: CollapsibleSectionProps): React.JSX.Element;
27
27
  export declare namespace CollapsibleSection {
28
28
  var displayName: string;
29
29
  }
@@ -36,7 +36,7 @@ export interface EditorSliderProps {
36
36
  onChange: (value: number) => void;
37
37
  className?: string;
38
38
  }
39
- export declare function EditorSlider({ label, value, min, max, step, onChange, className }: EditorSliderProps): import("react/jsx-runtime").JSX.Element;
39
+ export declare function EditorSlider({ label, value, min, max, step, onChange, className }: EditorSliderProps): React.JSX.Element;
40
40
  export declare namespace EditorSlider {
41
41
  var displayName: string;
42
42
  }
@@ -50,7 +50,7 @@ export interface EditorSelectProps {
50
50
  onChange: (value: string) => void;
51
51
  className?: string;
52
52
  }
53
- export declare function EditorSelect({ label, value, options, onChange, className }: EditorSelectProps): import("react/jsx-runtime").JSX.Element;
53
+ export declare function EditorSelect({ label, value, options, onChange, className }: EditorSelectProps): React.JSX.Element;
54
54
  export declare namespace EditorSelect {
55
55
  var displayName: string;
56
56
  }
@@ -60,7 +60,7 @@ export interface EditorCheckboxProps {
60
60
  onChange: (checked: boolean) => void;
61
61
  className?: string;
62
62
  }
63
- export declare function EditorCheckbox({ label, checked, onChange, className }: EditorCheckboxProps): import("react/jsx-runtime").JSX.Element;
63
+ export declare function EditorCheckbox({ label, checked, onChange, className }: EditorCheckboxProps): React.JSX.Element;
64
64
  export declare namespace EditorCheckbox {
65
65
  var displayName: string;
66
66
  }
@@ -71,7 +71,7 @@ export interface EditorTextInputProps {
71
71
  placeholder?: string;
72
72
  className?: string;
73
73
  }
74
- export declare function EditorTextInput({ label, value, onChange, placeholder, className }: EditorTextInputProps): import("react/jsx-runtime").JSX.Element;
74
+ export declare function EditorTextInput({ label, value, onChange, placeholder, className }: EditorTextInputProps): React.JSX.Element;
75
75
  export declare namespace EditorTextInput {
76
76
  var displayName: string;
77
77
  }
@@ -89,7 +89,7 @@ export interface StatusBarProps {
89
89
  featureCount?: number;
90
90
  className?: string;
91
91
  }
92
- export declare function StatusBar({ hoveredTile, mode, gridSize, unitCount, featureCount, className }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
92
+ export declare function StatusBar({ hoveredTile, mode, gridSize, unitCount, featureCount, className }: StatusBarProps): React.JSX.Element;
93
93
  export declare namespace StatusBar {
94
94
  var displayName: string;
95
95
  }
@@ -99,7 +99,7 @@ export interface TerrainPaletteProps {
99
99
  onSelect: (terrain: string) => void;
100
100
  className?: string;
101
101
  }
102
- export declare function TerrainPalette({ terrains, selectedTerrain, onSelect, className }: TerrainPaletteProps): import("react/jsx-runtime").JSX.Element;
102
+ export declare function TerrainPalette({ terrains, selectedTerrain, onSelect, className }: TerrainPaletteProps): React.JSX.Element;
103
103
  export declare namespace TerrainPalette {
104
104
  var displayName: string;
105
105
  }
@@ -108,7 +108,7 @@ export interface EditorToolbarProps {
108
108
  onModeChange: (mode: EditorMode) => void;
109
109
  className?: string;
110
110
  }
111
- export declare function EditorToolbar({ mode, onModeChange, className }: EditorToolbarProps): import("react/jsx-runtime").JSX.Element;
111
+ export declare function EditorToolbar({ mode, onModeChange, className }: EditorToolbarProps): React.JSX.Element;
112
112
  export declare namespace EditorToolbar {
113
113
  var displayName: string;
114
114
  }
@@ -36,8 +36,8 @@ var ReactMarkdown = require('react-markdown');
36
36
  var remarkGfm = require('remark-gfm');
37
37
  var remarkMath = require('remark-math');
38
38
  var rehypeKatex = require('rehype-katex');
39
- var core$1 = require('@almadar/core');
40
- var core = require('@dnd-kit/core');
39
+ var core = require('@almadar/core');
40
+ var core$1 = require('@dnd-kit/core');
41
41
  var sortable = require('@dnd-kit/sortable');
42
42
  var utilities = require('@dnd-kit/utilities');
43
43
  var react = require('@xyflow/react');
@@ -10322,9 +10322,9 @@ var init_BiologyCanvas = __esm({
10322
10322
  }
10323
10323
  });
10324
10324
 
10325
- // node_modules/katex/dist/katex.min.css
10325
+ // node_modules/.pnpm/katex@0.16.47/node_modules/katex/dist/katex.min.css
10326
10326
  var init_katex_min = __esm({
10327
- "node_modules/katex/dist/katex.min.css"() {
10327
+ "node_modules/.pnpm/katex@0.16.47/node_modules/katex/dist/katex.min.css"() {
10328
10328
  }
10329
10329
  });
10330
10330
  exports.Tabs = void 0;
@@ -13236,7 +13236,7 @@ function extractTrait(schema, trait, traitIndex) {
13236
13236
  const traits2 = orbital.traits ?? [];
13237
13237
  if (traitIndex < traits2.length) {
13238
13238
  const traitRef = traits2[traitIndex];
13239
- if (core$1.isInlineTrait(traitRef)) return traitRef;
13239
+ if (core.isInlineTrait(traitRef)) return traitRef;
13240
13240
  return null;
13241
13241
  }
13242
13242
  }
@@ -16380,6 +16380,9 @@ var init_isometric = __esm({
16380
16380
  };
16381
16381
  }
16382
16382
  });
16383
+ function normalizeBackdrop(bg) {
16384
+ return typeof bg === "string" ? { url: bg, role: "decoration", category: "background" } : bg;
16385
+ }
16383
16386
  function SideView({
16384
16387
  player,
16385
16388
  platforms,
@@ -16389,7 +16392,7 @@ function SideView({
16389
16392
  canvasHeight,
16390
16393
  follow,
16391
16394
  bgColor,
16392
- backgroundImage,
16395
+ backgroundImage: backgroundImageRaw,
16393
16396
  playerSprite,
16394
16397
  tileSprites,
16395
16398
  effects,
@@ -16397,6 +16400,7 @@ function SideView({
16397
16400
  keyUpMap,
16398
16401
  className
16399
16402
  }) {
16403
+ const backgroundImage = normalizeBackdrop(backgroundImageRaw);
16400
16404
  const canvasRef = React75.useRef(null);
16401
16405
  const eventBus = useEventBus();
16402
16406
  const keysRef = React75.useRef(/* @__PURE__ */ new Set());
@@ -16688,7 +16692,7 @@ function Canvas2D({
16688
16692
  effects: _effectsPropRaw = [],
16689
16693
  platforms,
16690
16694
  player,
16691
- backgroundImage,
16695
+ backgroundImage: backgroundImageRaw,
16692
16696
  // Interaction state
16693
16697
  selectedUnitId = null,
16694
16698
  validMoves = [],
@@ -16729,6 +16733,7 @@ function Canvas2D({
16729
16733
  // Remote asset loading
16730
16734
  assetManifest
16731
16735
  }) {
16736
+ const backgroundImage = normalizeBackdrop(backgroundImageRaw);
16732
16737
  const isSide = projection === "side";
16733
16738
  const isFree = projection === "free";
16734
16739
  const flatLike = projection === "hex" || projection === "flat" || isFree;
@@ -21562,12 +21567,12 @@ var init_Menu = __esm({
21562
21567
  }
21563
21568
  });
21564
21569
  function useAlmadarDndSensors(withSortableKeyboard = true) {
21565
- return core.useSensors(
21566
- core.useSensor(core.PointerSensor, {
21570
+ return core$1.useSensors(
21571
+ core$1.useSensor(core$1.PointerSensor, {
21567
21572
  activationConstraint: { distance: ALMADAR_DND_ACTIVATION_DISTANCE }
21568
21573
  }),
21569
- core.useSensor(
21570
- core.KeyboardSensor,
21574
+ core$1.useSensor(
21575
+ core$1.KeyboardSensor,
21571
21576
  withSortableKeyboard ? { coordinateGetter: sortable.sortableKeyboardCoordinates } : void 0
21572
21577
  )
21573
21578
  );
@@ -21578,11 +21583,11 @@ var init_useAlmadarDndCollision = __esm({
21578
21583
  "use client";
21579
21584
  ALMADAR_DND_ACTIVATION_DISTANCE = 5;
21580
21585
  almadarDndCollisionDetection = (args) => {
21581
- const pw = core.pointerWithin(args);
21586
+ const pw = core$1.pointerWithin(args);
21582
21587
  if (pw.length > 0) return pw;
21583
- const ri = core.rectIntersection(args);
21588
+ const ri = core$1.rectIntersection(args);
21584
21589
  if (ri.length > 0) return ri;
21585
- return core.closestCorners(args);
21590
+ return core$1.closestCorners(args);
21586
21591
  };
21587
21592
  }
21588
21593
  });
@@ -21831,7 +21836,7 @@ function useDataDnd(args) {
21831
21836
  );
21832
21837
  const DropZoneShell = ({ children }) => {
21833
21838
  const droppableId = `dnd-zone-${zoneId}`;
21834
- const { setNodeRef, isOver } = core.useDroppable({
21839
+ const { setNodeRef, isOver } = core$1.useDroppable({
21835
21840
  id: droppableId,
21836
21841
  data: sortableData
21837
21842
  });
@@ -21977,7 +21982,7 @@ function useDataDnd(args) {
21977
21982
  if (!isZone) {
21978
21983
  if (!isRoot) return children;
21979
21984
  return /* @__PURE__ */ jsxRuntime.jsx(RootCtx.Provider, { value: rootContextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
21980
- core.DndContext,
21985
+ core$1.DndContext,
21981
21986
  {
21982
21987
  sensors,
21983
21988
  collisionDetection,
@@ -21992,7 +21997,7 @@ function useDataDnd(args) {
21992
21997
  const inner = /* @__PURE__ */ jsxRuntime.jsx(DropZoneShell, { children: /* @__PURE__ */ jsxRuntime.jsx(sortable.SortableContext, { items: itemIds, strategy, children }) });
21993
21998
  if (isRoot) {
21994
21999
  return /* @__PURE__ */ jsxRuntime.jsx(RootCtx.Provider, { value: rootContextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
21995
- core.DndContext,
22000
+ core$1.DndContext,
21996
22001
  {
21997
22002
  sensors,
21998
22003
  collisionDetection,
@@ -26768,8 +26773,9 @@ var init_LineChart = __esm({
26768
26773
  const safeData = data ?? [];
26769
26774
  const sortedData = React75.useMemo(() => {
26770
26775
  if (safeData.length === 0) return [];
26776
+ if (!safeData.some((d) => d.date != null)) return [...safeData];
26771
26777
  return [...safeData].sort(
26772
- (a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()
26778
+ (a, b) => new Date(a.date ?? 0).getTime() - new Date(b.date ?? 0).getTime()
26773
26779
  );
26774
26780
  }, [safeData]);
26775
26781
  const points = React75.useMemo(() => {
@@ -32208,12 +32214,12 @@ var init_MapView = __esm({
32208
32214
  shadowSize: [41, 41]
32209
32215
  });
32210
32216
  L.Marker.prototype.options.icon = defaultIcon;
32211
- const { useEffect: useEffect70, useRef: useRef65, useCallback: useCallback113, useState: useState108 } = React75__namespace.default;
32217
+ const { useEffect: useEffect70, useRef: useRef66, useCallback: useCallback113, useState: useState108 } = React75__namespace.default;
32212
32218
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
32213
32219
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
32214
32220
  function MapUpdater({ centerLat, centerLng, zoom }) {
32215
32221
  const map = useMap();
32216
- const prevRef = useRef65({ centerLat, centerLng, zoom });
32222
+ const prevRef = useRef66({ centerLat, centerLng, zoom });
32217
32223
  useEffect70(() => {
32218
32224
  const prev = prevRef.current;
32219
32225
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
@@ -45740,7 +45746,7 @@ function extractPayloadFields(schema, eventName) {
45740
45746
  for (const orbital of schema.orbitals) {
45741
45747
  const traitRefs = orbital.traits ?? [];
45742
45748
  for (const traitRef of traitRefs) {
45743
- if (!core$1.isInlineTrait(traitRef)) continue;
45749
+ if (!core.isInlineTrait(traitRef)) continue;
45744
45750
  const inlineTrait = traitRef;
45745
45751
  const sm = inlineTrait.stateMachine;
45746
45752
  if (!sm) continue;
@@ -45811,7 +45817,7 @@ function getAllEvents(traits2) {
45811
45817
  function EventDispatcherTab({ traits: traits2, schema }) {
45812
45818
  const eventBus = useEventBus();
45813
45819
  const { t } = hooks.useTranslate();
45814
- const [log18, setLog] = React75__namespace.useState([]);
45820
+ const [log19, setLog] = React75__namespace.useState([]);
45815
45821
  const prevStatesRef = React75__namespace.useRef(/* @__PURE__ */ new Map());
45816
45822
  React75__namespace.useEffect(() => {
45817
45823
  for (const trait of traits2) {
@@ -45875,9 +45881,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
45875
45881
  /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.otherEvents") }),
45876
45882
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap gap-1", children: unavailableEvents.map((event) => /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: "default", size: "sm", className: "opacity-50", children: event }, event)) })
45877
45883
  ] }),
45878
- log18.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
45884
+ log19.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
45879
45885
  /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.recentTransitions") }),
45880
- /* @__PURE__ */ jsxRuntime.jsx(exports.Stack, { gap: "xs", children: log18.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "small", className: "font-mono text-xs", children: [
45886
+ /* @__PURE__ */ jsxRuntime.jsx(exports.Stack, { gap: "xs", children: log19.map((entry, i) => /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "small", className: "font-mono text-xs", children: [
45881
45887
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-purple-400", children: entry.traitName }),
45882
45888
  " ",
45883
45889
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-gray-500", children: entry.from }),
@@ -51092,6 +51098,72 @@ function useTraitListens(dispatch, listens, eventBusInstance) {
51092
51098
  };
51093
51099
  }, [eventBus, dispatch, stableListens]);
51094
51100
  }
51101
+ var log18 = logger.createLogger("almadar:ui:shared-entity-store");
51102
+ var EMPTY_ENTITY_STATE = {};
51103
+ function createSharedEntityStore() {
51104
+ const states = /* @__PURE__ */ new Map();
51105
+ const subscribers = /* @__PURE__ */ new Map();
51106
+ const getSnapshot2 = (entityId) => states.get(entityId) ?? EMPTY_ENTITY_STATE;
51107
+ const subscribe = (entityId, callback) => {
51108
+ let set = subscribers.get(entityId);
51109
+ if (!set) {
51110
+ set = /* @__PURE__ */ new Set();
51111
+ subscribers.set(entityId, set);
51112
+ }
51113
+ set.add(callback);
51114
+ return () => {
51115
+ const current = subscribers.get(entityId);
51116
+ if (!current) return;
51117
+ current.delete(callback);
51118
+ if (current.size === 0) {
51119
+ subscribers.delete(entityId);
51120
+ }
51121
+ };
51122
+ };
51123
+ const commit = (entityId, nextState) => {
51124
+ states.set(entityId, nextState);
51125
+ const set = subscribers.get(entityId);
51126
+ if (!set) return;
51127
+ set.forEach((callback) => {
51128
+ try {
51129
+ callback();
51130
+ } catch (error) {
51131
+ log18.error("Shared entity subscriber error", {
51132
+ entityId,
51133
+ error: error instanceof Error ? error : String(error)
51134
+ });
51135
+ }
51136
+ });
51137
+ };
51138
+ const seed = (entityId, initialState) => {
51139
+ if (!states.has(entityId)) {
51140
+ states.set(entityId, initialState);
51141
+ }
51142
+ };
51143
+ return { getSnapshot: getSnapshot2, subscribe, commit, seed };
51144
+ }
51145
+ function useSharedEntityStore() {
51146
+ const storeRef = React75.useRef(null);
51147
+ if (storeRef.current === null) {
51148
+ storeRef.current = createSharedEntityStore();
51149
+ }
51150
+ return storeRef.current;
51151
+ }
51152
+ function useSharedEntitySnapshot(store, entityId) {
51153
+ return React75.useSyncExternalStore(
51154
+ (onStoreChange) => store.subscribe(entityId, onStoreChange),
51155
+ () => store.getSnapshot(entityId)
51156
+ );
51157
+ }
51158
+ function runTickFrame(entityId, orderedWriters, store) {
51159
+ let scratch = store.getSnapshot(entityId);
51160
+ for (const writer of orderedWriters) {
51161
+ const writes = writer(scratch);
51162
+ scratch = core.mergeEntityFrame(scratch, writes);
51163
+ }
51164
+ store.commit(entityId, scratch);
51165
+ return scratch;
51166
+ }
51095
51167
 
51096
51168
  // hooks/index.ts
51097
51169
  init_useQuerySingleton();
@@ -51982,6 +52054,7 @@ exports.calculateAttackTargets = calculateAttackTargets;
51982
52054
  exports.calculateValidMoves = calculateValidMoves;
51983
52055
  exports.cn = cn;
51984
52056
  exports.createInitialGameState = createInitialGameState;
52057
+ exports.createSharedEntityStore = createSharedEntityStore;
51985
52058
  exports.createTranslate = createTranslate;
51986
52059
  exports.createUnitAnimationState = createUnitAnimationState;
51987
52060
  exports.drawSprite = drawSprite;
@@ -52010,6 +52083,7 @@ exports.resolveFieldMap = resolveFieldMap;
52010
52083
  exports.resolveFrame = resolveFrame;
52011
52084
  exports.resolveSheetDirection = resolveSheetDirection;
52012
52085
  exports.rows = rows;
52086
+ exports.runTickFrame = runTickFrame;
52013
52087
  exports.screenToIso = screenToIso;
52014
52088
  exports.str = str;
52015
52089
  exports.tickAnimationState = tickAnimationState;
@@ -52051,6 +52125,8 @@ exports.usePreview = usePreview;
52051
52125
  exports.usePullToRefresh = usePullToRefresh;
52052
52126
  exports.useQuerySingleton = useQuerySingleton;
52053
52127
  exports.useRenderInterpolation = useRenderInterpolation;
52128
+ exports.useSharedEntitySnapshot = useSharedEntitySnapshot;
52129
+ exports.useSharedEntityStore = useSharedEntityStore;
52054
52130
  exports.useSwipeGesture = useSwipeGesture;
52055
52131
  exports.useTapReveal = useTapReveal;
52056
52132
  exports.useTraitListens = useTraitListens;
@@ -1,4 +1,4 @@
1
- /* node_modules/katex/dist/katex.min.css */
1
+ /* node_modules/.pnpm/katex@0.16.47/node_modules/katex/dist/katex.min.css */
2
2
  @font-face {
3
3
  font-display: block;
4
4
  font-family: KaTeX_AMS;
@@ -214,11 +214,11 @@
214
214
  border-color: currentColor;
215
215
  }
216
216
  .katex .katex-version:after {
217
- content: "0.16.45";
217
+ content: "0.16.47";
218
218
  }
219
219
  .katex .katex-mathml {
220
- clip: rect(1px, 1px, 1px, 1px);
221
220
  border: 0;
221
+ clip-path: inset(50%);
222
222
  height: 1px;
223
223
  overflow: hidden;
224
224
  padding: 0;
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React75 from 'react';
3
- import React75__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, useState, Suspense, lazy, useLayoutEffect, useId, useSyncExternalStore } from 'react';
3
+ import React75__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, useState, Suspense, lazy, useSyncExternalStore, useLayoutEffect, useId } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { EventBusContext, useTraitScope, useCurrentPagePath, useEntitySchemaOptional, TraitScopeProvider } from '@almadar/ui/providers';
@@ -36,7 +36,7 @@ import ReactMarkdown from 'react-markdown';
36
36
  import remarkGfm from 'remark-gfm';
37
37
  import remarkMath from 'remark-math';
38
38
  import rehypeKatex from 'rehype-katex';
39
- import { isInlineTrait } from '@almadar/core';
39
+ import { mergeEntityFrame, isInlineTrait } from '@almadar/core';
40
40
  import { DndContext, useSensors, useSensor, PointerSensor, KeyboardSensor, useDroppable, pointerWithin, rectIntersection, closestCorners } from '@dnd-kit/core';
41
41
  import { useSortable, arrayMove, sortableKeyboardCoordinates, SortableContext, rectSortingStrategy, verticalListSortingStrategy } from '@dnd-kit/sortable';
42
42
  import { CSS } from '@dnd-kit/utilities';
@@ -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;
@@ -16334,6 +16334,9 @@ var init_isometric = __esm({
16334
16334
  };
16335
16335
  }
16336
16336
  });
16337
+ function normalizeBackdrop(bg) {
16338
+ return typeof bg === "string" ? { url: bg, role: "decoration", category: "background" } : bg;
16339
+ }
16337
16340
  function SideView({
16338
16341
  player,
16339
16342
  platforms,
@@ -16343,7 +16346,7 @@ function SideView({
16343
16346
  canvasHeight,
16344
16347
  follow,
16345
16348
  bgColor,
16346
- backgroundImage,
16349
+ backgroundImage: backgroundImageRaw,
16347
16350
  playerSprite,
16348
16351
  tileSprites,
16349
16352
  effects,
@@ -16351,6 +16354,7 @@ function SideView({
16351
16354
  keyUpMap,
16352
16355
  className
16353
16356
  }) {
16357
+ const backgroundImage = normalizeBackdrop(backgroundImageRaw);
16354
16358
  const canvasRef = useRef(null);
16355
16359
  const eventBus = useEventBus();
16356
16360
  const keysRef = useRef(/* @__PURE__ */ new Set());
@@ -16642,7 +16646,7 @@ function Canvas2D({
16642
16646
  effects: _effectsPropRaw = [],
16643
16647
  platforms,
16644
16648
  player,
16645
- backgroundImage,
16649
+ backgroundImage: backgroundImageRaw,
16646
16650
  // Interaction state
16647
16651
  selectedUnitId = null,
16648
16652
  validMoves = [],
@@ -16683,6 +16687,7 @@ function Canvas2D({
16683
16687
  // Remote asset loading
16684
16688
  assetManifest
16685
16689
  }) {
16690
+ const backgroundImage = normalizeBackdrop(backgroundImageRaw);
16686
16691
  const isSide = projection === "side";
16687
16692
  const isFree = projection === "free";
16688
16693
  const flatLike = projection === "hex" || projection === "flat" || isFree;
@@ -26722,8 +26727,9 @@ var init_LineChart = __esm({
26722
26727
  const safeData = data ?? [];
26723
26728
  const sortedData = useMemo(() => {
26724
26729
  if (safeData.length === 0) return [];
26730
+ if (!safeData.some((d) => d.date != null)) return [...safeData];
26725
26731
  return [...safeData].sort(
26726
- (a, b) => new Date(a.date).getTime() - new Date(b.date).getTime()
26732
+ (a, b) => new Date(a.date ?? 0).getTime() - new Date(b.date ?? 0).getTime()
26727
26733
  );
26728
26734
  }, [safeData]);
26729
26735
  const points = useMemo(() => {
@@ -32162,12 +32168,12 @@ var init_MapView = __esm({
32162
32168
  shadowSize: [41, 41]
32163
32169
  });
32164
32170
  L.Marker.prototype.options.icon = defaultIcon;
32165
- const { useEffect: useEffect70, useRef: useRef65, useCallback: useCallback113, useState: useState108 } = React75__default;
32171
+ const { useEffect: useEffect70, useRef: useRef66, useCallback: useCallback113, useState: useState108 } = React75__default;
32166
32172
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
32167
32173
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
32168
32174
  function MapUpdater({ centerLat, centerLng, zoom }) {
32169
32175
  const map = useMap();
32170
- const prevRef = useRef65({ centerLat, centerLng, zoom });
32176
+ const prevRef = useRef66({ centerLat, centerLng, zoom });
32171
32177
  useEffect70(() => {
32172
32178
  const prev = prevRef.current;
32173
32179
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
@@ -45765,7 +45771,7 @@ function getAllEvents(traits2) {
45765
45771
  function EventDispatcherTab({ traits: traits2, schema }) {
45766
45772
  const eventBus = useEventBus();
45767
45773
  const { t } = useTranslate();
45768
- const [log18, setLog] = React75.useState([]);
45774
+ const [log19, setLog] = React75.useState([]);
45769
45775
  const prevStatesRef = React75.useRef(/* @__PURE__ */ new Map());
45770
45776
  React75.useEffect(() => {
45771
45777
  for (const trait of traits2) {
@@ -45829,9 +45835,9 @@ function EventDispatcherTab({ traits: traits2, schema }) {
45829
45835
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.otherEvents") }),
45830
45836
  /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: unavailableEvents.map((event) => /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", className: "opacity-50", children: event }, event)) })
45831
45837
  ] }),
45832
- log18.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
45838
+ log19.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
45833
45839
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: t("debug.recentTransitions") }),
45834
- /* @__PURE__ */ jsx(Stack, { gap: "xs", children: log18.map((entry, i) => /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
45840
+ /* @__PURE__ */ jsx(Stack, { gap: "xs", children: log19.map((entry, i) => /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "font-mono text-xs", children: [
45835
45841
  /* @__PURE__ */ jsx("span", { className: "text-purple-400", children: entry.traitName }),
45836
45842
  " ",
45837
45843
  /* @__PURE__ */ jsx("span", { className: "text-gray-500", children: entry.from }),
@@ -51046,6 +51052,72 @@ function useTraitListens(dispatch, listens, eventBusInstance) {
51046
51052
  };
51047
51053
  }, [eventBus, dispatch, stableListens]);
51048
51054
  }
51055
+ var log18 = createLogger("almadar:ui:shared-entity-store");
51056
+ var EMPTY_ENTITY_STATE = {};
51057
+ function createSharedEntityStore() {
51058
+ const states = /* @__PURE__ */ new Map();
51059
+ const subscribers = /* @__PURE__ */ new Map();
51060
+ const getSnapshot2 = (entityId) => states.get(entityId) ?? EMPTY_ENTITY_STATE;
51061
+ const subscribe = (entityId, callback) => {
51062
+ let set = subscribers.get(entityId);
51063
+ if (!set) {
51064
+ set = /* @__PURE__ */ new Set();
51065
+ subscribers.set(entityId, set);
51066
+ }
51067
+ set.add(callback);
51068
+ return () => {
51069
+ const current = subscribers.get(entityId);
51070
+ if (!current) return;
51071
+ current.delete(callback);
51072
+ if (current.size === 0) {
51073
+ subscribers.delete(entityId);
51074
+ }
51075
+ };
51076
+ };
51077
+ const commit = (entityId, nextState) => {
51078
+ states.set(entityId, nextState);
51079
+ const set = subscribers.get(entityId);
51080
+ if (!set) return;
51081
+ set.forEach((callback) => {
51082
+ try {
51083
+ callback();
51084
+ } catch (error) {
51085
+ log18.error("Shared entity subscriber error", {
51086
+ entityId,
51087
+ error: error instanceof Error ? error : String(error)
51088
+ });
51089
+ }
51090
+ });
51091
+ };
51092
+ const seed = (entityId, initialState) => {
51093
+ if (!states.has(entityId)) {
51094
+ states.set(entityId, initialState);
51095
+ }
51096
+ };
51097
+ return { getSnapshot: getSnapshot2, subscribe, commit, seed };
51098
+ }
51099
+ function useSharedEntityStore() {
51100
+ const storeRef = useRef(null);
51101
+ if (storeRef.current === null) {
51102
+ storeRef.current = createSharedEntityStore();
51103
+ }
51104
+ return storeRef.current;
51105
+ }
51106
+ function useSharedEntitySnapshot(store, entityId) {
51107
+ return useSyncExternalStore(
51108
+ (onStoreChange) => store.subscribe(entityId, onStoreChange),
51109
+ () => store.getSnapshot(entityId)
51110
+ );
51111
+ }
51112
+ function runTickFrame(entityId, orderedWriters, store) {
51113
+ let scratch = store.getSnapshot(entityId);
51114
+ for (const writer of orderedWriters) {
51115
+ const writes = writer(scratch);
51116
+ scratch = mergeEntityFrame(scratch, writes);
51117
+ }
51118
+ store.commit(entityId, scratch);
51119
+ return scratch;
51120
+ }
51049
51121
 
51050
51122
  // hooks/index.ts
51051
51123
  init_useQuerySingleton();
@@ -51846,4 +51918,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
51846
51918
  });
51847
51919
  }
51848
51920
 
51849
- 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, 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, 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, useSwipeGesture, useTapReveal, useTraitListens, useTranslate127 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
51921
+ 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 };