@almadar/ui 5.65.0 → 5.68.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 (42) hide show
  1. package/dist/avl/index.cjs +3259 -1568
  2. package/dist/avl/index.d.cts +10 -2
  3. package/dist/avl/index.d.ts +1 -0
  4. package/dist/avl/index.js +1992 -302
  5. package/dist/components/avl/derive-edit-focus.d.ts +8 -0
  6. package/dist/components/core/organisms/ChatBar.d.ts +31 -0
  7. package/dist/components/core/organisms/SubagentTracePanel.d.ts +50 -0
  8. package/dist/components/core/organisms/index.d.ts +3 -0
  9. package/dist/components/core/organisms/trace-edit-focus.d.ts +14 -0
  10. package/dist/components/game/atoms/ChoiceButton.d.ts +7 -1
  11. package/dist/components/game/molecules/HealthPanel.d.ts +3 -0
  12. package/dist/components/game/molecules/IsometricCanvas.d.ts +1 -1
  13. package/dist/components/game/molecules/PowerupSlots.d.ts +3 -0
  14. package/dist/components/game/molecules/TurnPanel.d.ts +3 -0
  15. package/dist/components/game/molecules/three/index.cjs +6 -6
  16. package/dist/components/game/molecules/three/index.js +6 -6
  17. package/dist/components/game/organisms/BoardgameBoard.d.ts +37 -0
  18. package/dist/components/game/organisms/FishingBoard.d.ts +33 -0
  19. package/dist/components/game/organisms/HolidayRunnerBoard.d.ts +35 -0
  20. package/dist/components/game/organisms/MatchPuzzleBoard.d.ts +37 -0
  21. package/dist/components/game/organisms/MinigolfBoard.d.ts +37 -0
  22. package/dist/components/game/organisms/PinballBoard.d.ts +35 -0
  23. package/dist/components/game/organisms/PirateBoard.d.ts +37 -0
  24. package/dist/components/game/organisms/RacingBoard.d.ts +29 -0
  25. package/dist/components/game/organisms/SokobanBoard.d.ts +37 -0
  26. package/dist/components/game/organisms/SpaceShmupBoard.d.ts +20 -0
  27. package/dist/components/game/organisms/SpaceStationBoard.d.ts +37 -0
  28. package/dist/components/game/organisms/SportsBoard.d.ts +37 -0
  29. package/dist/components/game/organisms/TanksBoard.d.ts +37 -0
  30. package/dist/components/game/organisms/index.d.ts +13 -0
  31. package/dist/components/game/organisms/utils/isometric.d.ts +10 -1
  32. package/dist/components/index.cjs +3096 -1377
  33. package/dist/components/index.js +1970 -266
  34. package/dist/hooks/index.cjs +94 -0
  35. package/dist/hooks/index.d.ts +1 -0
  36. package/dist/hooks/index.js +95 -2
  37. package/dist/hooks/useAgentTrace.d.ts +85 -0
  38. package/dist/providers/index.cjs +3037 -1351
  39. package/dist/providers/index.js +1937 -251
  40. package/dist/runtime/index.cjs +3095 -1409
  41. package/dist/runtime/index.js +1943 -257
  42. package/package.json +2 -2
@@ -0,0 +1,8 @@
1
+ import type { EditFocus } from '@almadar/core';
2
+ /**
3
+ * Build an `EditFocus` from a clicked element's `data-orb-*` address (stamped by
4
+ * UISlotRenderer). The owning orbital is read from the DOM (`data-orb-orbital`,
5
+ * walking up via `closest` when the clicked node itself doesn't carry it); since
6
+ * `EditFocus.orbital` is required, returns `null` when it can't be resolved.
7
+ */
8
+ export declare function deriveEditFocusFromElement(el: HTMLElement): EditFocus | null;
@@ -0,0 +1,31 @@
1
+ /**
2
+ * ChatBar Organism
3
+ *
4
+ * The always-visible bottom chat bar. A single-row input surface for talking
5
+ * to the agent: status icon, optional context badge, text input, and a
6
+ * status-driven action button (Send / Pause+Stop / Resume / Retry).
7
+ *
8
+ * The agent's activity stream lives in the dedicated Trace tab (see
9
+ * SubagentTracePanel). ChatBar emits generic EventBus events
10
+ * (`UI:CHAT_SEND`, `UI:ELEMENT_SELECTED`, plus the declarative `UI:*` actions
11
+ * the Button atom raises) — it owns no app-specific state.
12
+ */
13
+ import React from 'react';
14
+ import type { DisplayStateProps } from './types';
15
+ export type ChatBarStatus = 'idle' | 'running' | 'paused' | 'complete' | 'error';
16
+ export interface ChatBarProps extends DisplayStateProps {
17
+ /** Pipeline status */
18
+ status?: ChatBarStatus;
19
+ /** Currently active gate label, e.g. "Gate 2: State machines" */
20
+ activeGate?: string;
21
+ /** JEPA validity probability 0-1 */
22
+ jepaValidity?: number;
23
+ /** Input placeholder text */
24
+ placeholder?: string;
25
+ /** Agent context description */
26
+ context?: string;
27
+ }
28
+ export declare function ChatBar({ status, activeGate, jepaValidity, placeholder, context, className, }: ChatBarProps): React.ReactElement;
29
+ export declare namespace ChatBar {
30
+ var displayName: string;
31
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * SubagentTracePanel — contextual side panel that surfaces subagent activity.
3
+ *
4
+ * Density adapts to disclosure level:
5
+ * - L1/L2 (builder/designer): compact mode — name + role badge + last message
6
+ * - L3/L4 (architect): full mode — rich per-subagent activity streams
7
+ *
8
+ * Atomic design: composes Box / VStack / HStack / Typography / Badge / Icon /
9
+ * Button / Modal / Accordion / CodeBlock / MarkdownContent from this package.
10
+ * It reads the agent-trace view-model from `@almadar/core` (Trace* types) and
11
+ * owns no transport — the consumer feeds it already-mapped view-model props.
12
+ */
13
+ import React from 'react';
14
+ import type { DisplayStateProps } from './types';
15
+ import type { TraceActivity, TraceSubagent, TraceChatMessage } from '@almadar/core';
16
+ /** Disclosure level driving panel density (builder=1 … architect=4). */
17
+ export type TraceDisclosureLevel = 1 | 2 | 3 | 4;
18
+ export interface SubagentTracePanelProps extends DisplayStateProps {
19
+ /** All known subagents from the runner. */
20
+ subagents: TraceSubagent[];
21
+ /** Current canvas focus orbital — only used by overlay mode. Tab mode ignores this. */
22
+ focusedOrbital?: string;
23
+ /** Drives density: 1-2 → compact, 3-4 → full activity embed (when mode='overlay'). */
24
+ disclosureLevel: TraceDisclosureLevel;
25
+ /** Whether the panel is visible. Typically auto-opens during generation in overlay mode. */
26
+ open: boolean;
27
+ /** Optional dismiss handler. */
28
+ onClose?: () => void;
29
+ /** Full coordinator activities (tool calls, results, messages, errors). */
30
+ coordinatorActivities?: TraceActivity[];
31
+ /**
32
+ * Canonical Coordinator conversation — same shape live and on reload. When
33
+ * present, takes precedence over `coordinatorActivities` for the Coordinator
34
+ * section.
35
+ */
36
+ coordinatorMessages?: readonly TraceChatMessage[];
37
+ /**
38
+ * Rendering mode.
39
+ * - `'overlay'` (default): floating side panel positioned absolutely over the
40
+ * canvas. Density follows `disclosureLevel` (compact L1/L2, rich L3+). The
41
+ * `open` flag actually hides the panel when false.
42
+ * - `'tab'`: full-width content for a dedicated 'trace' supplemental tab.
43
+ * Always renders rich (regardless of disclosure level), always visible (the
44
+ * `open` flag is ignored), and includes an empty state when no subagents
45
+ * are present so users see the surface even before generation starts.
46
+ */
47
+ mode?: 'overlay' | 'tab';
48
+ }
49
+ export declare const SubagentTracePanel: React.FC<SubagentTracePanelProps>;
50
+ export default SubagentTracePanel;
@@ -28,3 +28,6 @@ export { TeamOrganism, type TeamOrganismProps, } from "../../marketing/organisms
28
28
  export { CaseStudyOrganism, type CaseStudyOrganismProps, } from "../../marketing/organisms/CaseStudyOrganism";
29
29
  export { CodeRunnerPanel, type CodeRunnerPanelProps, type CodeSimulationOutput, } from './CodeRunnerPanel';
30
30
  export { SegmentRenderer, type SegmentRendererProps, } from './SegmentRenderer';
31
+ export { ChatBar, type ChatBarProps, type ChatBarStatus } from './ChatBar';
32
+ export { ELEMENT_SELECTED_EVENT, parseEditFocus, } from './trace-edit-focus';
33
+ export { SubagentTracePanel, type SubagentTracePanelProps, type TraceDisclosureLevel, } from './SubagentTracePanel';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Edit Focus — the contextual-edit selection contract for the trace chat bar.
3
+ *
4
+ * A canvas element-pick emits `UI:ELEMENT_SELECTED` on the EventBus carrying an
5
+ * `EditFocus`. This module names that event and narrows the bus payload back
6
+ * into a typed `EditFocus` for `ChatBar`'s focus chip. It depends only on
7
+ * `@almadar/core` types; the DOM→focus build lives at the emitting canvas
8
+ * (`avl/derive-edit-focus`), not here.
9
+ */
10
+ import type { EditFocus, EventPayloadValue } from '@almadar/core';
11
+ /** The dedicated bus event a canvas element-pick emits. */
12
+ export declare const ELEMENT_SELECTED_EVENT = "UI:ELEMENT_SELECTED";
13
+ /** Narrow a `UI:ELEMENT_SELECTED` payload value back into an `EditFocus`. */
14
+ export declare function parseEditFocus(value: EventPayloadValue | undefined): EditFocus | null;
@@ -1,8 +1,14 @@
1
+ import { type IconInput } from '../../core/atoms/Icon';
2
+ import type { AssetUrl } from '@almadar/core';
1
3
  export interface ChoiceButtonProps {
2
4
  /** Choice text content */
3
5
  text: string;
4
6
  /** Choice index number (displayed as prefix) */
5
7
  index?: number;
8
+ /** Sprite image URL — takes precedence over icon when provided */
9
+ assetUrl?: AssetUrl;
10
+ /** Icon displayed before the text */
11
+ icon?: IconInput;
6
12
  /** Whether the choice is disabled */
7
13
  disabled?: boolean;
8
14
  /** Whether the choice is currently selected */
@@ -12,7 +18,7 @@ export interface ChoiceButtonProps {
12
18
  /** Additional CSS classes */
13
19
  className?: string;
14
20
  }
15
- export declare function ChoiceButton({ text, index, disabled, selected, onClick, className, }: ChoiceButtonProps): import("react/jsx-runtime").JSX.Element;
21
+ export declare function ChoiceButton({ text, index, assetUrl, icon, disabled, selected, onClick, className, }: ChoiceButtonProps): import("react/jsx-runtime").JSX.Element;
16
22
  export declare namespace ChoiceButton {
17
23
  var displayName: string;
18
24
  }
@@ -1,6 +1,9 @@
1
1
  import type { IconInput } from '../../core/atoms';
2
+ import type { AssetUrl } from '@almadar/core';
2
3
  export interface HealthEffect {
3
4
  icon: IconInput;
5
+ /** Sprite image URL — takes precedence over icon when provided */
6
+ assetUrl?: AssetUrl;
4
7
  label?: string;
5
8
  variant?: 'buff' | 'debuff' | 'neutral';
6
9
  }
@@ -80,7 +80,7 @@ export interface IsometricCanvasProps {
80
80
  }>;
81
81
  /** Declarative event: emits UI:{tileLeaveEvent} with {} on tile leave */
82
82
  tileLeaveEvent?: EventEmit<Record<string, never>>;
83
- /** Tile layout projection: 'isometric' (default 2:1 diamond) or 'hex' (pointy-top offset rows) */
83
+ /** Tile layout projection: 'isometric' (default 2:1 diamond), 'hex' (pointy-top offset rows), or 'flat' (orthographic top-down square grid) */
84
84
  tileLayout?: TileLayout;
85
85
  /** Render scale (0.4 = 40% zoom) */
86
86
  scale?: number;
@@ -1,7 +1,10 @@
1
1
  import type { IconInput } from '../../core/atoms';
2
+ import type { AssetUrl } from '@almadar/core';
2
3
  export interface ActivePowerup {
3
4
  /** Unique powerup ID */
4
5
  id: string;
6
+ /** Sprite image URL — takes precedence over icon when provided */
7
+ assetUrl?: AssetUrl;
5
8
  /** Icon component or emoji */
6
9
  icon?: IconInput;
7
10
  /** Powerup label */
@@ -1,7 +1,10 @@
1
1
  import type { IconInput } from '../../core/atoms';
2
+ import type { AssetUrl } from '@almadar/core';
2
3
  export interface TurnPanelAction {
3
4
  /** Action button label */
4
5
  label: string;
6
+ /** Sprite image URL — takes precedence over icon when provided */
7
+ assetUrl?: AssetUrl;
5
8
  /** Icon for the button */
6
9
  icon?: IconInput;
7
10
  /** Event name to emit when clicked */
@@ -2845,9 +2845,9 @@ var GameCanvas3D = React11.forwardRef(
2845
2845
  const color = unit.faction === "player" ? 4491519 : unit.faction === "enemy" ? 16729156 : 16777028;
2846
2846
  const hasAtlas = unitAtlasUrl(unit) !== null;
2847
2847
  const initialFrame = hasAtlas ? resolveUnitFrame(unit.id) : null;
2848
- const modelScale = UNIT_BASE_MODEL_SCALE * unitScale;
2849
- const billboardHeight = UNIT_BASE_BILLBOARD_HEIGHT * unitScale;
2850
- const primitiveRadius = UNIT_BASE_PRIMITIVE_RADIUS * unitScale;
2848
+ const modelScale = UNIT_BASE_MODEL_SCALE * unitScale * gridConfig.cellSize;
2849
+ const billboardHeight = UNIT_BASE_BILLBOARD_HEIGHT * unitScale * gridConfig.cellSize;
2850
+ const primitiveRadius = UNIT_BASE_PRIMITIVE_RADIUS * unitScale * gridConfig.cellSize;
2851
2851
  return /* @__PURE__ */ jsxRuntime.jsxs(
2852
2852
  "group",
2853
2853
  {
@@ -2894,7 +2894,7 @@ var GameCanvas3D = React11.forwardRef(
2894
2894
  /* @__PURE__ */ jsxRuntime.jsx("meshStandardMaterial", { color })
2895
2895
  ] })
2896
2896
  ] }),
2897
- unit.health !== void 0 && unit.maxHealth !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("group", { position: [0, 1.2, 0], children: [
2897
+ unit.health !== void 0 && unit.maxHealth !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs("group", { position: [0, billboardHeight, 0], children: [
2898
2898
  /* @__PURE__ */ jsxRuntime.jsxs("mesh", { position: [-0.25, 0, 0], children: [
2899
2899
  /* @__PURE__ */ jsxRuntime.jsx("planeGeometry", { args: [0.5, 0.05] }),
2900
2900
  /* @__PURE__ */ jsxRuntime.jsx("meshBasicMaterial", { color: 3355443 })
@@ -2923,7 +2923,7 @@ var GameCanvas3D = React11.forwardRef(
2923
2923
  }
2924
2924
  );
2925
2925
  },
2926
- [selectedUnitId, handleUnitClick, resolveUnitFrame, unitScale]
2926
+ [selectedUnitId, handleUnitClick, resolveUnitFrame, unitScale, gridConfig]
2927
2927
  );
2928
2928
  const DefaultFeatureRenderer = React11.useCallback(
2929
2929
  ({
@@ -3011,7 +3011,7 @@ var GameCanvas3D = React11.forwardRef(
3011
3011
  {
3012
3012
  ref: containerRef,
3013
3013
  className: cn("game-canvas-3d relative w-full overflow-hidden", className),
3014
- style: { height: "85vh" },
3014
+ style: { flex: "1 1 0", minHeight: "400px" },
3015
3015
  "data-orientation": orientation,
3016
3016
  "data-camera-mode": cameraMode,
3017
3017
  "data-overlay": overlay,
@@ -2821,9 +2821,9 @@ var GameCanvas3D = forwardRef(
2821
2821
  const color = unit.faction === "player" ? 4491519 : unit.faction === "enemy" ? 16729156 : 16777028;
2822
2822
  const hasAtlas = unitAtlasUrl(unit) !== null;
2823
2823
  const initialFrame = hasAtlas ? resolveUnitFrame(unit.id) : null;
2824
- const modelScale = UNIT_BASE_MODEL_SCALE * unitScale;
2825
- const billboardHeight = UNIT_BASE_BILLBOARD_HEIGHT * unitScale;
2826
- const primitiveRadius = UNIT_BASE_PRIMITIVE_RADIUS * unitScale;
2824
+ const modelScale = UNIT_BASE_MODEL_SCALE * unitScale * gridConfig.cellSize;
2825
+ const billboardHeight = UNIT_BASE_BILLBOARD_HEIGHT * unitScale * gridConfig.cellSize;
2826
+ const primitiveRadius = UNIT_BASE_PRIMITIVE_RADIUS * unitScale * gridConfig.cellSize;
2827
2827
  return /* @__PURE__ */ jsxs(
2828
2828
  "group",
2829
2829
  {
@@ -2870,7 +2870,7 @@ var GameCanvas3D = forwardRef(
2870
2870
  /* @__PURE__ */ jsx("meshStandardMaterial", { color })
2871
2871
  ] })
2872
2872
  ] }),
2873
- unit.health !== void 0 && unit.maxHealth !== void 0 && /* @__PURE__ */ jsxs("group", { position: [0, 1.2, 0], children: [
2873
+ unit.health !== void 0 && unit.maxHealth !== void 0 && /* @__PURE__ */ jsxs("group", { position: [0, billboardHeight, 0], children: [
2874
2874
  /* @__PURE__ */ jsxs("mesh", { position: [-0.25, 0, 0], children: [
2875
2875
  /* @__PURE__ */ jsx("planeGeometry", { args: [0.5, 0.05] }),
2876
2876
  /* @__PURE__ */ jsx("meshBasicMaterial", { color: 3355443 })
@@ -2899,7 +2899,7 @@ var GameCanvas3D = forwardRef(
2899
2899
  }
2900
2900
  );
2901
2901
  },
2902
- [selectedUnitId, handleUnitClick, resolveUnitFrame, unitScale]
2902
+ [selectedUnitId, handleUnitClick, resolveUnitFrame, unitScale, gridConfig]
2903
2903
  );
2904
2904
  const DefaultFeatureRenderer = useCallback(
2905
2905
  ({
@@ -2987,7 +2987,7 @@ var GameCanvas3D = forwardRef(
2987
2987
  {
2988
2988
  ref: containerRef,
2989
2989
  className: cn("game-canvas-3d relative w-full overflow-hidden", className),
2990
- style: { height: "85vh" },
2990
+ style: { flex: "1 1 0", minHeight: "400px" },
2991
2991
  "data-orientation": orientation,
2992
2992
  "data-camera-mode": cameraMode,
2993
2993
  "data-overlay": overlay,
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { IsometricTile, IsometricUnit, IsometricFeature } from './types/isometric';
4
+ import type { DisplayStateProps } from '../../core/organisms/types';
5
+ import type { IsometricCanvasProps } from '../molecules/IsometricCanvas';
6
+ export interface BoardgameBoardProps extends DisplayStateProps {
7
+ /** Board squares (flat top-down grid tiles) */
8
+ tiles?: IsometricTile[];
9
+ /** Tokens/units on the board */
10
+ units?: IsometricUnit[];
11
+ /** Features (markers, structures, etc.) on the board */
12
+ features?: IsometricFeature[];
13
+ /** Asset sprite manifest (same shape as IsometricCanvas.assetManifest) */
14
+ assetManifest?: IsometricCanvasProps['assetManifest'];
15
+ /** Base URL prepended to asset paths */
16
+ assetBaseUrl?: AssetUrl;
17
+ /** Render scale */
18
+ scale?: number;
19
+ /** Show minimap overlay */
20
+ showMinimap?: boolean;
21
+ /** Enable camera pan/zoom controls */
22
+ enableCamera?: boolean;
23
+ /** Declarative event: emits UI:{tileClickEvent} with { x, y } on tile click */
24
+ tileClickEvent?: EventEmit<{
25
+ x: number;
26
+ y: number;
27
+ }>;
28
+ /** Declarative event: emits UI:{unitClickEvent} with { unitId } on unit click */
29
+ unitClickEvent?: EventEmit<{
30
+ unitId: string;
31
+ }>;
32
+ }
33
+ export declare function BoardgameBoard({ tiles, units, features, assetManifest, assetBaseUrl, scale, showMinimap, enableCamera, tileClickEvent, unitClickEvent, isLoading, error, className, }: BoardgameBoardProps): React.ReactElement;
34
+ export declare namespace BoardgameBoard {
35
+ var displayName: string;
36
+ }
37
+ export default BoardgameBoard;
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { DisplayStateProps } from '../../core/organisms/types';
4
+ export interface FishingBoardProps extends DisplayStateProps {
5
+ /** Background image URL for the fishing scene */
6
+ backgroundImage?: AssetUrl;
7
+ /** Base URL prepended to asset paths */
8
+ assetBaseUrl?: AssetUrl;
9
+ /** Render scale */
10
+ scale?: number;
11
+ /** Show minimap overlay */
12
+ showMinimap?: boolean;
13
+ /** Enable camera pan/zoom controls */
14
+ enableCamera?: boolean;
15
+ /** Canvas width in pixels */
16
+ width?: number;
17
+ /** Canvas height in pixels */
18
+ height?: number;
19
+ /** Declarative event: emits UI:{tileClickEvent} with { x, y } on tile click */
20
+ tileClickEvent?: EventEmit<{
21
+ x: number;
22
+ y: number;
23
+ }>;
24
+ /** Declarative event: emits UI:{unitClickEvent} with { unitId } on unit click */
25
+ unitClickEvent?: EventEmit<{
26
+ unitId: string;
27
+ }>;
28
+ }
29
+ export declare function FishingBoard({ backgroundImage, assetBaseUrl, scale, showMinimap, enableCamera, width, height, isLoading, error, className, }: FishingBoardProps): React.ReactElement;
30
+ export declare namespace FishingBoard {
31
+ var displayName: string;
32
+ }
33
+ export default FishingBoard;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { DisplayStateProps } from '../../core/organisms/types';
4
+ export interface HolidayRunnerBoardProps extends DisplayStateProps {
5
+ /** Background image URL for the runner level */
6
+ backgroundImage?: AssetUrl;
7
+ /** Base URL prefix for asset URLs */
8
+ assetBaseUrl?: AssetUrl;
9
+ /** Canvas width in pixels */
10
+ width?: number;
11
+ /** Canvas height in pixels */
12
+ height?: number;
13
+ /** Target frames per second */
14
+ fps?: number;
15
+ /** Render scale */
16
+ scale?: number;
17
+ /** Show minimap overlay */
18
+ showMinimap?: boolean;
19
+ /** Enable camera pan/zoom controls */
20
+ enableCamera?: boolean;
21
+ /** Declarative event: emits UI:{tickEvent} with { dt, frame } each tick */
22
+ tickEvent?: EventEmit<{
23
+ dt: number;
24
+ frame: number;
25
+ }>;
26
+ /** Declarative event: emits UI:{drawEvent} with { frame } each draw frame */
27
+ drawEvent?: EventEmit<{
28
+ frame: number;
29
+ }>;
30
+ }
31
+ export declare function HolidayRunnerBoard({ backgroundImage, assetBaseUrl, width, height, fps, isLoading, error, className, }: HolidayRunnerBoardProps): React.ReactElement;
32
+ export declare namespace HolidayRunnerBoard {
33
+ var displayName: string;
34
+ }
35
+ export default HolidayRunnerBoard;
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { IsometricTile, IsometricUnit, IsometricFeature } from './types/isometric';
4
+ import type { DisplayStateProps } from '../../core/organisms/types';
5
+ import type { IsometricCanvasProps } from '../molecules/IsometricCanvas';
6
+ export interface MatchPuzzleBoardProps extends DisplayStateProps {
7
+ /** Grid tiles for the match puzzle board */
8
+ tiles?: IsometricTile[];
9
+ /** Units on the board */
10
+ units?: IsometricUnit[];
11
+ /** Gem/feature items on the board */
12
+ features?: IsometricFeature[];
13
+ /** Asset sprite manifest (same shape as IsometricCanvas.assetManifest) */
14
+ assetManifest?: IsometricCanvasProps['assetManifest'];
15
+ /** Base URL prepended to manifest sprite paths */
16
+ assetBaseUrl?: AssetUrl;
17
+ /** Render scale */
18
+ scale?: number;
19
+ /** Show minimap overlay */
20
+ showMinimap?: boolean;
21
+ /** Enable camera pan/zoom controls */
22
+ enableCamera?: boolean;
23
+ /** Declarative event: emits UI:{tileClickEvent} with { x, y } on tile click */
24
+ tileClickEvent?: EventEmit<{
25
+ x: number;
26
+ y: number;
27
+ }>;
28
+ /** Declarative event: emits UI:{unitClickEvent} with { unitId } on unit click */
29
+ unitClickEvent?: EventEmit<{
30
+ unitId: string;
31
+ }>;
32
+ }
33
+ export declare function MatchPuzzleBoard({ tiles, units, features, assetManifest, assetBaseUrl, scale, showMinimap, enableCamera, tileClickEvent, unitClickEvent, isLoading, error, className, }: MatchPuzzleBoardProps): React.ReactElement;
34
+ export declare namespace MatchPuzzleBoard {
35
+ var displayName: string;
36
+ }
37
+ export default MatchPuzzleBoard;
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { IsometricTile, IsometricUnit, IsometricFeature } from './types/isometric';
4
+ import type { DisplayStateProps } from '../../core/organisms/types';
5
+ import type { IsometricCanvasProps } from '../molecules/IsometricCanvas';
6
+ export interface MinigolfBoardProps extends DisplayStateProps {
7
+ /** Isometric grid tiles */
8
+ tiles?: IsometricTile[];
9
+ /** Units on the board */
10
+ units?: IsometricUnit[];
11
+ /** Features (holes, obstacles, etc.) on the board */
12
+ features?: IsometricFeature[];
13
+ /** Asset sprite manifest (same shape as IsometricCanvas.assetManifest) */
14
+ assetManifest?: IsometricCanvasProps['assetManifest'];
15
+ /** Base URL prepended to manifest sprite paths */
16
+ assetBaseUrl?: AssetUrl;
17
+ /** Render scale */
18
+ scale?: number;
19
+ /** Show minimap overlay */
20
+ showMinimap?: boolean;
21
+ /** Enable camera pan/zoom controls */
22
+ enableCamera?: boolean;
23
+ /** Declarative event: emits UI:{tileClickEvent} with { x, y } on tile click */
24
+ tileClickEvent?: EventEmit<{
25
+ x: number;
26
+ y: number;
27
+ }>;
28
+ /** Declarative event: emits UI:{unitClickEvent} with { unitId } on unit click */
29
+ unitClickEvent?: EventEmit<{
30
+ unitId: string;
31
+ }>;
32
+ }
33
+ export declare function MinigolfBoard({ tiles, units, features, assetManifest, assetBaseUrl, scale, showMinimap, enableCamera, tileClickEvent, unitClickEvent, isLoading, error, className, }: MinigolfBoardProps): React.ReactElement;
34
+ export declare namespace MinigolfBoard {
35
+ var displayName: string;
36
+ }
37
+ export default MinigolfBoard;
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { DisplayStateProps } from '../../core/organisms/types';
4
+ export interface PinballBoardProps extends DisplayStateProps {
5
+ /** Playfield tiles */
6
+ tiles?: unknown[];
7
+ /** Ball units on the board */
8
+ units?: unknown[];
9
+ /** Features (bumpers, paddles, etc.) on the board */
10
+ features?: unknown[];
11
+ /** Asset sprite manifest */
12
+ assetManifest?: string;
13
+ /** Base URL prepended to manifest sprite paths */
14
+ assetBaseUrl?: AssetUrl;
15
+ /** Render scale */
16
+ scale?: number;
17
+ /** Show minimap overlay */
18
+ showMinimap?: boolean;
19
+ /** Enable camera pan/zoom controls */
20
+ enableCamera?: boolean;
21
+ /** Declarative event: emits UI:{tileClickEvent} with { x, y } on tile click */
22
+ tileClickEvent?: EventEmit<{
23
+ x: number;
24
+ y: number;
25
+ }>;
26
+ /** Declarative event: emits UI:{unitClickEvent} with { unitId } on unit click */
27
+ unitClickEvent?: EventEmit<{
28
+ unitId: string;
29
+ }>;
30
+ }
31
+ export declare function PinballBoard({ tiles: _tiles, units: _units, features: _features, assetManifest: _assetManifest, assetBaseUrl, scale, showMinimap: _showMinimap, enableCamera: _enableCamera, tileClickEvent: _tileClickEvent, unitClickEvent: _unitClickEvent, isLoading, error, className, }: PinballBoardProps): React.ReactElement;
32
+ export declare namespace PinballBoard {
33
+ var displayName: string;
34
+ }
35
+ export default PinballBoard;
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { IsometricTile, IsometricUnit, IsometricFeature } from './types/isometric';
4
+ import type { DisplayStateProps } from '../../core/organisms/types';
5
+ import type { IsometricCanvasProps } from '../molecules/IsometricCanvas';
6
+ export interface PirateBoardProps extends DisplayStateProps {
7
+ /** Sea/island grid tiles */
8
+ tiles?: IsometricTile[];
9
+ /** Ship and crew units on the board */
10
+ units?: IsometricUnit[];
11
+ /** Features (ports, treasures, etc.) on the board */
12
+ features?: IsometricFeature[];
13
+ /** Asset sprite manifest (same shape as IsometricCanvas.assetManifest) */
14
+ assetManifest?: IsometricCanvasProps['assetManifest'];
15
+ /** Base URL prepended to manifest sprite paths */
16
+ assetBaseUrl?: AssetUrl;
17
+ /** Render scale */
18
+ scale?: number;
19
+ /** Show minimap overlay */
20
+ showMinimap?: boolean;
21
+ /** Enable camera pan/zoom controls */
22
+ enableCamera?: boolean;
23
+ /** Declarative event: emits UI:{tileClickEvent} with { x, y } on tile click */
24
+ tileClickEvent?: EventEmit<{
25
+ x: number;
26
+ y: number;
27
+ }>;
28
+ /** Declarative event: emits UI:{unitClickEvent} with { unitId } on unit click */
29
+ unitClickEvent?: EventEmit<{
30
+ unitId: string;
31
+ }>;
32
+ }
33
+ export declare function PirateBoard({ tiles, units, features, assetManifest, assetBaseUrl, scale, showMinimap, enableCamera, tileClickEvent, unitClickEvent, isLoading, error, className, }: PirateBoardProps): React.ReactElement;
34
+ export declare namespace PirateBoard {
35
+ var displayName: string;
36
+ }
37
+ export default PirateBoard;
@@ -0,0 +1,29 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { DisplayStateProps } from '../../core/organisms/types';
4
+ export interface RacingBoardProps extends DisplayStateProps {
5
+ /** Race track background image URL */
6
+ backgroundImage?: AssetUrl;
7
+ /** Base URL prepended to asset paths */
8
+ assetBaseUrl?: AssetUrl;
9
+ /** Canvas width in pixels */
10
+ width?: number;
11
+ /** Canvas height in pixels */
12
+ height?: number;
13
+ /** Target frames per second */
14
+ fps?: number;
15
+ /** Declarative event: emits UI:{tickEvent} with { dt, frame } each tick */
16
+ tickEvent?: EventEmit<{
17
+ dt: number;
18
+ frame: number;
19
+ }>;
20
+ /** Declarative event: emits UI:{drawEvent} with { frame } each draw frame */
21
+ drawEvent?: EventEmit<{
22
+ frame: number;
23
+ }>;
24
+ }
25
+ export declare function RacingBoard({ backgroundImage, assetBaseUrl, width, height, fps, tickEvent, drawEvent, className, }: RacingBoardProps): React.ReactElement;
26
+ export declare namespace RacingBoard {
27
+ var displayName: string;
28
+ }
29
+ export default RacingBoard;
@@ -0,0 +1,37 @@
1
+ import React from 'react';
2
+ import type { AssetUrl, EventEmit } from '@almadar/core';
3
+ import type { IsometricTile, IsometricUnit, IsometricFeature } from './types/isometric';
4
+ import type { DisplayStateProps } from '../../core/organisms/types';
5
+ import type { IsometricCanvasProps } from '../molecules/IsometricCanvas';
6
+ export interface SokobanBoardProps extends DisplayStateProps {
7
+ /** Grid tiles (floor, wall, target) */
8
+ tiles?: IsometricTile[];
9
+ /** Units on the board (the pusher character) */
10
+ units?: IsometricUnit[];
11
+ /** Features (crates) on the board */
12
+ features?: IsometricFeature[];
13
+ /** Asset sprite manifest (same shape as IsometricCanvas.assetManifest) */
14
+ assetManifest?: IsometricCanvasProps['assetManifest'];
15
+ /** Base URL prepended to manifest sprite paths */
16
+ assetBaseUrl?: AssetUrl;
17
+ /** Render scale */
18
+ scale?: number;
19
+ /** Show minimap overlay */
20
+ showMinimap?: boolean;
21
+ /** Enable camera pan/zoom controls */
22
+ enableCamera?: boolean;
23
+ /** Declarative event: emits UI:{tileClickEvent} with { x, y } on tile click */
24
+ tileClickEvent?: EventEmit<{
25
+ x: number;
26
+ y: number;
27
+ }>;
28
+ /** Declarative event: emits UI:{unitClickEvent} with { unitId } on unit click */
29
+ unitClickEvent?: EventEmit<{
30
+ unitId: string;
31
+ }>;
32
+ }
33
+ export declare function SokobanBoard({ tiles, units, features, assetManifest, assetBaseUrl, scale, showMinimap, enableCamera, tileClickEvent, unitClickEvent, isLoading, error, className, }: SokobanBoardProps): React.ReactElement;
34
+ export declare namespace SokobanBoard {
35
+ var displayName: string;
36
+ }
37
+ export default SokobanBoard;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import type { AssetUrl } from '@almadar/core';
3
+ import type { DisplayStateProps } from '../../core/organisms/types';
4
+ export interface SpaceShmupBoardProps extends DisplayStateProps {
5
+ /** Background image URL (starfield / space scene) */
6
+ backgroundImage?: AssetUrl;
7
+ /** Base URL prefix for asset URLs */
8
+ assetBaseUrl?: AssetUrl;
9
+ /** Canvas width in pixels */
10
+ width?: number;
11
+ /** Canvas height in pixels */
12
+ height?: number;
13
+ /** Target frames per second */
14
+ fps?: number;
15
+ }
16
+ export declare function SpaceShmupBoard({ backgroundImage, assetBaseUrl, width, height, fps, isLoading, error, className, }: SpaceShmupBoardProps): React.ReactElement;
17
+ export declare namespace SpaceShmupBoard {
18
+ var displayName: string;
19
+ }
20
+ export default SpaceShmupBoard;