@almadar/ui 5.70.0 → 5.72.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 (63) hide show
  1. package/dist/avl/index.cjs +2198 -2218
  2. package/dist/avl/index.d.cts +93 -56
  3. package/dist/avl/index.js +931 -951
  4. package/dist/components/avl/molecules/AvlEventWireEdge.d.ts +2 -1
  5. package/dist/components/avl/molecules/AvlTransitionEdge.d.ts +2 -1
  6. package/dist/components/avl/molecules/avl-behavior-compose-converter.d.ts +7 -5
  7. package/dist/components/avl/molecules/avl-behavior-compose-types.d.ts +41 -21
  8. package/dist/components/avl/molecules/avl-canvas-types.d.ts +10 -7
  9. package/dist/components/avl/molecules/avl-preview-converter.d.ts +5 -5
  10. package/dist/components/avl/molecules/avl-preview-types.d.ts +15 -4
  11. package/dist/components/avl/organisms/FlowCanvas.d.ts +2 -2
  12. package/dist/components/avl/organisms/avl-schema-parser.d.ts +18 -16
  13. package/dist/components/core/atoms/Button.d.ts +2 -0
  14. package/dist/components/core/atoms/ConditionalWrapper.d.ts +5 -4
  15. package/dist/components/core/molecules/Carousel.d.ts +2 -2
  16. package/dist/components/core/molecules/OrbitalVisualization.d.ts +4 -3
  17. package/dist/components/core/molecules/PageHeader.d.ts +3 -3
  18. package/dist/components/core/molecules/RepeatableFormSection.d.ts +4 -3
  19. package/dist/components/core/molecules/ViolationAlert.d.ts +2 -0
  20. package/dist/components/core/molecules/WizardContainer.d.ts +23 -22
  21. package/dist/components/core/organisms/CardGrid.d.ts +2 -2
  22. package/dist/components/core/organisms/CustomPattern.d.ts +3 -4
  23. package/dist/components/core/organisms/DataTable.d.ts +2 -2
  24. package/dist/components/core/organisms/DetailPanel.d.ts +1 -1
  25. package/dist/components/core/organisms/Form.d.ts +11 -11
  26. package/dist/components/core/organisms/List.d.ts +3 -5
  27. package/dist/components/core/organisms/StatCard.d.ts +2 -2
  28. package/dist/components/core/organisms/book/types.d.ts +1 -1
  29. package/dist/components/core/organisms/debug/RuntimeDebugger.d.ts +2 -1
  30. package/dist/components/core/organisms/debug/tabs/EventDispatcherTab.d.ts +2 -1
  31. package/dist/components/core/organisms/layout/DashboardGrid.d.ts +0 -2
  32. package/dist/components/core/organisms/types.d.ts +3 -2
  33. package/dist/components/game/atoms/ScoreDisplay.d.ts +3 -3
  34. package/dist/components/game/atoms/Sprite.d.ts +6 -1
  35. package/dist/components/game/atoms/XPBar.d.ts +1 -1
  36. package/dist/components/game/molecules/GameCanvas3D.d.ts +0 -2
  37. package/dist/components/game/molecules/IsometricCanvas.d.ts +4 -2
  38. package/dist/components/game/molecules/PlatformerCanvas.d.ts +4 -1
  39. package/dist/components/game/molecules/StatBadge.d.ts +3 -1
  40. package/dist/components/game/molecules/three/hooks/useSceneGraph.d.ts +2 -1
  41. package/dist/components/game/molecules/three/index.cjs +41 -105
  42. package/dist/components/game/molecules/three/index.js +41 -105
  43. package/dist/components/game/molecules/useUnitSpriteAtlas.d.ts +3 -2
  44. package/dist/components/game/organisms/PinballBoard.d.ts +4 -4
  45. package/dist/components/game/organisms/boardEntity.d.ts +6 -6
  46. package/dist/components/game/organisms/puzzles/debugger/DebuggerBoard.d.ts +16 -2
  47. package/dist/components/game/organisms/puzzles/event-handler/puzzleObject.d.ts +21 -10
  48. package/dist/components/game/organisms/puzzles/state-architect/StateJsonView.d.ts +2 -1
  49. package/dist/components/game/organisms/types/isometric.d.ts +16 -0
  50. package/dist/components/index.cjs +2228 -2251
  51. package/dist/components/index.js +1116 -1139
  52. package/dist/docs/index.cjs +107 -104
  53. package/dist/docs/index.d.cts +2 -0
  54. package/dist/docs/index.js +38 -35
  55. package/dist/lib/getNestedValue.d.ts +2 -13
  56. package/dist/marketing/index.cjs +97 -98
  57. package/dist/marketing/index.d.cts +2 -0
  58. package/dist/marketing/index.js +54 -55
  59. package/dist/providers/index.cjs +1908 -1951
  60. package/dist/providers/index.js +808 -851
  61. package/dist/runtime/index.cjs +1966 -2009
  62. package/dist/runtime/index.js +814 -857
  63. package/package.json +1 -1
@@ -8,7 +8,7 @@
8
8
  * @packageDocumentation
9
9
  */
10
10
  import React from "react";
11
- import type { AssetUrl, EventKey, EventPayload } from "@almadar/core";
11
+ import type { AssetUrl, EventKey, EventPayload, JsonValue } from "@almadar/core";
12
12
  import type { UiError } from "../atoms/types";
13
13
  /**
14
14
  * Allowed element types for custom patterns.
@@ -49,7 +49,7 @@ export interface CustomPatternProps {
49
49
  /** Disabled state */
50
50
  disabled?: boolean;
51
51
  /** Additional HTML attributes */
52
- htmlProps?: Record<string, unknown>;
52
+ htmlProps?: React.HTMLAttributes<HTMLElement>;
53
53
  /** Loading state */
54
54
  isLoading?: boolean;
55
55
  /** Error state */
@@ -91,12 +91,11 @@ export interface CustomPatternConfig {
91
91
  href?: string;
92
92
  external?: boolean;
93
93
  disabled?: boolean;
94
- [key: string]: unknown;
95
94
  }
96
95
  /**
97
96
  * Check if a pattern config is a custom pattern.
98
97
  */
99
- export declare function isCustomPatternConfig(config: unknown): config is CustomPatternConfig;
98
+ export declare function isCustomPatternConfig(config: JsonValue | CustomPatternConfig): config is CustomPatternConfig;
100
99
  /**
101
100
  * Recursively render custom pattern configurations.
102
101
  *
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import type { EventKey } from "@almadar/core";
3
3
  import type { IconInput } from "../atoms/Icon";
4
4
  import { DisplayStateProps } from "./types";
5
- import type { EntityRow } from "@almadar/core";
5
+ import type { EntityRow, FieldValue } from "@almadar/core";
6
6
  export type EntityTableLook = "dense" | "spacious" | "striped" | "borderless" | "card-rows";
7
7
  export interface Column<T> {
8
8
  key: keyof T | string;
@@ -13,7 +13,7 @@ export interface Column<T> {
13
13
  label?: string;
14
14
  width?: string;
15
15
  sortable?: boolean;
16
- render?: (value: unknown, row: T, index: number) => React.ReactNode;
16
+ render?: (value: FieldValue | undefined, row: T, index: number) => React.ReactNode;
17
17
  }
18
18
  export interface RowAction<T> {
19
19
  label: string;
@@ -65,7 +65,7 @@ export interface DetailPanelProps extends DisplayStateProps {
65
65
  /** Alias for fields - backwards compatibility */
66
66
  fieldNames?: readonly string[];
67
67
  /** Initial data for edit mode (passed by compiler) */
68
- initialData?: Record<string, unknown> | unknown;
68
+ initialData?: EntityRow;
69
69
  /** Display mode (passed by compiler) */
70
70
  mode?: string;
71
71
  /** Panel position (for drawer/sidebar placement) */
@@ -12,7 +12,7 @@
12
12
  * - Nested sections with collapsible support
13
13
  */
14
14
  import React from "react";
15
- import type { EventKey, FieldValue } from "@almadar/core";
15
+ import type { EntityRow, EventKey, FieldValue, JsonObject } from "@almadar/core";
16
16
  import { type SelectOption } from "../atoms/Select";
17
17
  import { type RelationOption } from "../molecules/RelationSelect";
18
18
  import type { OrbitalEntity } from "@almadar/core";
@@ -27,10 +27,10 @@ export type SExpression = SExpr;
27
27
  * Form-specific evaluation context
28
28
  */
29
29
  export interface FormEvaluationContext {
30
- formValues: Record<string, unknown>;
31
- globalVariables: Record<string, unknown>;
32
- localVariables?: Record<string, unknown>;
33
- entity?: Record<string, unknown>;
30
+ formValues: EntityRow;
31
+ globalVariables: Record<string, FieldValue>;
32
+ localVariables?: Record<string, FieldValue>;
33
+ entity?: EntityRow;
34
34
  }
35
35
  /**
36
36
  * Hidden calculation definition
@@ -117,7 +117,7 @@ export interface SchemaField {
117
117
  /** Whether field is required */
118
118
  required?: boolean;
119
119
  /** Default value */
120
- defaultValue?: unknown;
120
+ defaultValue?: FieldValue;
121
121
  /** Options for select/enum fields - accepts readonly for generated const arrays */
122
122
  options?: readonly SelectOption[];
123
123
  /** Enum values (alternative to options, just strings) - accepts readonly for generated const arrays */
@@ -131,7 +131,7 @@ export interface SchemaField {
131
131
  /** Pattern for validation */
132
132
  pattern?: string;
133
133
  /** Validation rules */
134
- validation?: Record<string, unknown>;
134
+ validation?: JsonObject;
135
135
  /** Whether field is readonly (displays value but cannot edit) */
136
136
  readonly?: boolean;
137
137
  /** Whether field is disabled (alternative to readonly for compatibility) */
@@ -156,7 +156,7 @@ export interface FormProps extends Omit<React.FormHTMLAttributes<HTMLFormElement
156
156
  /** Additional CSS classes */
157
157
  className?: string;
158
158
  /** Entity type name or schema object. When OrbitalEntity, fields are auto-derived if not provided. */
159
- entity?: string | OrbitalEntity | readonly Record<string, unknown>[];
159
+ entity?: string | OrbitalEntity | EntityRow | readonly EntityRow[];
160
160
  /**
161
161
  * Form mode — 'create' for new records, 'edit' for updating existing.
162
162
  * Accepts `string` so schema-driven callers (whose `config.mode` is typed
@@ -167,7 +167,7 @@ export interface FormProps extends Omit<React.FormHTMLAttributes<HTMLFormElement
167
167
  /** Fields definition (schema format) - accepts readonly for generated const arrays */
168
168
  fields: readonly Readonly<SchemaField>[];
169
169
  /** Initial form data */
170
- initialData?: Record<string, unknown> | unknown;
170
+ initialData?: EntityRow;
171
171
  /** Loading state */
172
172
  isLoading?: boolean;
173
173
  /** Error state */
@@ -196,8 +196,8 @@ export interface FormProps extends Omit<React.FormHTMLAttributes<HTMLFormElement
196
196
  hiddenCalculations?: HiddenCalculation[] | boolean;
197
197
  /** Violation conditions that emit VIOLATION_DETECTED when met (boolean true means enabled but config loaded separately) */
198
198
  violationTriggers?: ViolationTrigger[] | boolean;
199
- /** Context for S-expression evaluation - accepts flexible types from generated code */
200
- evaluationContext?: FormEvaluationContext | Record<string, unknown>;
199
+ /** Context for S-expression evaluation */
200
+ evaluationContext?: FormEvaluationContext;
201
201
  /** Nested form sections with optional conditions */
202
202
  sections?: FormSection[];
203
203
  /** Callback when any field value changes */
@@ -17,11 +17,10 @@
17
17
  * - No internal search/filter state — trait provides filtered data
18
18
  */
19
19
  import React from "react";
20
- import type { AssetUrl, EventKey } from "@almadar/core";
20
+ import type { AssetUrl, EventKey, FieldValue, EntityRow } from "@almadar/core";
21
21
  import type { IconInput } from "../atoms/Icon";
22
22
  import { type MenuItem } from "../molecules/Menu";
23
23
  import type { DisplayStateProps } from "./types";
24
- import type { EntityRow } from "@almadar/core";
25
24
  export type ListItem = {
26
25
  id: string;
27
26
  title?: string;
@@ -37,8 +36,7 @@ export type ListItem = {
37
36
  onClick?: () => void;
38
37
  disabled?: boolean;
39
38
  completed?: boolean;
40
- [key: string]: unknown;
41
- _fields?: Record<string, unknown>;
39
+ _fields?: Record<string, FieldValue | undefined>;
42
40
  };
43
41
  export interface SchemaItemAction {
44
42
  label: string;
@@ -51,7 +49,7 @@ export interface SchemaItemAction {
51
49
  action?: EventKey;
52
50
  variant?: "primary" | "secondary" | "ghost" | "danger" | "default";
53
51
  /** Click handler from generated code */
54
- onClick?: (row: unknown) => void;
52
+ onClick?: (row: EntityRow) => void;
55
53
  }
56
54
  /**
57
55
  * Field definition - can be a simple string or object with key/header or name/label
@@ -25,8 +25,8 @@ export interface StatCardProps extends DisplayStateProps {
25
25
  label?: string;
26
26
  /** Title (alias for label) */
27
27
  title?: string;
28
- /** Primary value - accepts array/unknown from generated code (will use first element or length) */
29
- value?: string | number | (string | number | undefined)[] | unknown;
28
+ /** Primary value - accepts array from generated code (will use first element or length) */
29
+ value?: string | number | (string | number | undefined)[];
30
30
  /** Previous value for comparison */
31
31
  previousValue?: number;
32
32
  /** Current value as number for trend calculation */
@@ -59,4 +59,4 @@ export declare function resolveFieldMap(fieldMap: BookFieldMap | string | undefi
59
59
  * chapter data come back as `EntityRow`s; the per-chapter `OrbitalSchema` is
60
60
  * lifted off into `schemaByChapterId`.
61
61
  */
62
- export declare function mapBookData(raw: Record<string, unknown>, fields?: BookFieldMap): NormalizedBook;
62
+ export declare function mapBookData(raw: EntityRow, fields?: BookFieldMap): NormalizedBook;
@@ -1,3 +1,4 @@
1
+ import type { OrbitalSchema } from '@almadar/core';
1
2
  import './RuntimeDebugger.css';
2
3
  export interface RuntimeDebuggerProps {
3
4
  /** Initial position */
@@ -11,7 +12,7 @@ export interface RuntimeDebuggerProps {
11
12
  /** Default active tab id */
12
13
  defaultTab?: string;
13
14
  /** Raw schema for EventDispatcherTab payload extraction */
14
- schema?: Record<string, unknown>;
15
+ schema?: OrbitalSchema;
15
16
  }
16
17
  export declare function RuntimeDebugger({ position, defaultCollapsed, className, mode, defaultTab, schema, }: RuntimeDebuggerProps): import("react/jsx-runtime").JSX.Element | null;
17
18
  export declare namespace RuntimeDebugger {
@@ -4,10 +4,11 @@
4
4
  * Shows available transitions per trait based on current state,
5
5
  * lets users click to fire events, and displays a compact transition log.
6
6
  */
7
+ import type { OrbitalSchema } from '@almadar/core';
7
8
  import type { TraitDebugInfo } from '../../../../../lib/traitRegistry';
8
9
  interface EventDispatcherTabProps {
9
10
  traits: TraitDebugInfo[];
10
- schema?: Record<string, unknown>;
11
+ schema?: OrbitalSchema;
11
12
  }
12
13
  export declare function EventDispatcherTab({ traits, schema }: EventDispatcherTabProps): import("react/jsx-runtime").JSX.Element;
13
14
  export declare namespace EventDispatcherTab {
@@ -17,8 +17,6 @@ export interface DashboardGridCell {
17
17
  colSpan?: 1 | 2 | 3 | 4;
18
18
  /** Number of rows this cell spans (1-2) */
19
19
  rowSpan?: 1 | 2;
20
- /** Allow additional schema-driven properties */
21
- [key: string]: unknown;
22
20
  }
23
21
  export interface DashboardGridProps extends DisplayStateProps {
24
22
  /** Number of columns */
@@ -7,6 +7,7 @@
7
7
  * Exception: Form manages local `formData` state for field input tracking.
8
8
  * This is the ONE allowed exception — documented here.
9
9
  */
10
+ import type { FieldValue } from '@almadar/core';
10
11
  import type { UiError } from '../atoms/types';
11
12
  export type { UiError };
12
13
  export declare const EntityDisplayEvents: {
@@ -32,7 +33,7 @@ export interface SearchPayload {
32
33
  export interface FilterPayload {
33
34
  field: string;
34
35
  operator: string;
35
- value: unknown;
36
+ value: FieldValue;
36
37
  }
37
38
  export interface SelectPayload {
38
39
  ids: (string | number)[];
@@ -65,7 +66,7 @@ export interface DisplayStateProps {
65
66
  /** Total number of items (for pagination display) */
66
67
  totalCount?: number;
67
68
  /** Active filters */
68
- activeFilters?: Record<string, unknown>;
69
+ activeFilters?: Record<string, FieldValue>;
69
70
  /** Currently selected item IDs */
70
71
  selectedIds?: readonly (string | number)[];
71
72
  }
@@ -5,6 +5,8 @@ export interface ScoreDisplayProps {
5
5
  assetUrl?: AssetUrl;
6
6
  /** Current score value */
7
7
  value: number;
8
+ /** Alias for value — common schema binding name */
9
+ score?: number;
8
10
  /** Label to display before score */
9
11
  label?: string;
10
12
  /** Icon component or emoji */
@@ -13,12 +15,10 @@ export interface ScoreDisplayProps {
13
15
  size?: 'sm' | 'md' | 'lg' | 'xl';
14
16
  /** Additional CSS classes */
15
17
  className?: string;
16
- /** Animation on value change */
17
- animated?: boolean;
18
18
  /** Number formatting locale */
19
19
  locale?: string;
20
20
  }
21
- export declare function ScoreDisplay({ assetUrl, value, label, icon, size, className, animated, locale, ...rest }: ScoreDisplayProps & Record<string, unknown>): import("react/jsx-runtime").JSX.Element;
21
+ export declare function ScoreDisplay({ assetUrl, value, score, label, icon, size, className, locale, }: ScoreDisplayProps): import("react/jsx-runtime").JSX.Element;
22
22
  export declare namespace ScoreDisplay {
23
23
  var displayName: string;
24
24
  }
@@ -5,6 +5,7 @@
5
5
  */
6
6
  import React from 'react';
7
7
  import type { EventKey, AssetUrl } from "@almadar/core";
8
+ import type { AnimationName } from '../organisms/types/spriteAnimation';
8
9
  export interface SpriteProps {
9
10
  /** Spritesheet image URL */
10
11
  spritesheet: AssetUrl;
@@ -32,6 +33,10 @@ export interface SpriteProps {
32
33
  zIndex?: number;
33
34
  /** Number of columns in spritesheet (for frame calculation) */
34
35
  columns?: number;
36
+ /** Animation state name — drives lolo-ui config knob for animation selection */
37
+ animState?: AnimationName;
38
+ /** Frames per second — drives lolo-ui config knob for animation speed */
39
+ frameRate?: number;
35
40
  /** Optional className */
36
41
  className?: string;
37
42
  /** Optional onClick handler */
@@ -56,7 +61,7 @@ export interface SpriteProps {
56
61
  * />
57
62
  * ```
58
63
  */
59
- export declare function Sprite({ spritesheet, frameWidth, frameHeight, frame, x, y, scale, flipX, flipY, rotation, opacity, zIndex, columns, className, onClick, action, }: SpriteProps): React.JSX.Element;
64
+ export declare function Sprite({ spritesheet, frameWidth, frameHeight, frame, x, y, scale, flipX, flipY, rotation, opacity, zIndex, columns, animState: _animState, frameRate: _frameRate, className, onClick, action, }: SpriteProps): React.JSX.Element;
60
65
  /**
61
66
  * Canvas-based sprite renderer for better performance in game loops
62
67
  */
@@ -9,7 +9,7 @@ export interface XPBarProps {
9
9
  showLabel?: boolean;
10
10
  /** Size variant */
11
11
  size?: 'sm' | 'md' | 'lg';
12
- /** Animate the fill bar */
12
+ /** Animate the fill bar with a CSS transition */
13
13
  animated?: boolean;
14
14
  /** Additional CSS classes */
15
15
  className?: string;
@@ -46,8 +46,6 @@ export interface GameCanvas3DProps {
46
46
  isLoading?: boolean;
47
47
  /** Error state */
48
48
  error?: string | null;
49
- /** Entity name for schema-driven auto-fetch */
50
- entity?: string;
51
49
  /** Array of tiles to render */
52
50
  tiles?: IsometricTile[];
53
51
  /** Array of units to render */
@@ -25,7 +25,7 @@
25
25
  */
26
26
  import * as React from 'react';
27
27
  import type { AssetUrl, EventEmit } from '@almadar/core';
28
- import type { IsometricTile, IsometricUnit, IsometricFeature } from '../organisms/types/isometric';
28
+ import type { IsometricTile, IsometricUnit, IsometricFeature, ActiveEffect } from '../organisms/types/isometric';
29
29
  import type { ResolvedFrame } from '../organisms/types/spriteAnimation';
30
30
  import type { TileLayout } from '../organisms/utils/isometric';
31
31
  import type { UiError } from '../../core/atoms/types';
@@ -52,6 +52,8 @@ export interface IsometricCanvasProps {
52
52
  units?: IsometricUnit[];
53
53
  /** Array of features (resources, portals, buildings, etc.) */
54
54
  features?: IsometricFeature[];
55
+ /** Active visual effects to draw after units. Sprite URLs resolved via assetManifest.effects[fx.key]. */
56
+ effects?: ActiveEffect[];
55
57
  /** Currently selected unit ID */
56
58
  selectedUnitId?: string | null;
57
59
  /** Valid move positions (shown as pulsing green highlights) */
@@ -132,7 +134,7 @@ export interface IsometricCanvasProps {
132
134
  effects?: Record<string, string>;
133
135
  };
134
136
  }
135
- export declare function IsometricCanvas({ className, isLoading, error, tiles: _tilesPropRaw, units: _unitsPropRaw, features: _featuresPropRaw, selectedUnitId, validMoves, attackTargets, hoveredTile, onTileClick, onUnitClick, onTileHover, onTileLeave, tileClickEvent, unitClickEvent, tileHoverEvent, tileLeaveEvent, tileLayout, scale, debug, backgroundImage, showMinimap, enableCamera, unitScale, spriteHeightRatio, spriteMaxWidthRatio, getTerrainSprite, getFeatureSprite, getUnitSprite, resolveUnitFrame, effectSpriteUrls, onDrawEffects, hasActiveEffects, diamondTopY: diamondTopYProp, assetBaseUrl, assetManifest, }: IsometricCanvasProps): React.JSX.Element;
137
+ export declare function IsometricCanvas({ className, isLoading, error, tiles: _tilesPropRaw, units: _unitsPropRaw, features: _featuresPropRaw, effects: _effectsPropRaw, selectedUnitId, validMoves, attackTargets, hoveredTile, onTileClick, onUnitClick, onTileHover, onTileLeave, tileClickEvent, unitClickEvent, tileHoverEvent, tileLeaveEvent, tileLayout, scale, debug, backgroundImage, showMinimap, enableCamera, unitScale, spriteHeightRatio, spriteMaxWidthRatio, getTerrainSprite, getFeatureSprite, getUnitSprite, resolveUnitFrame, effectSpriteUrls, onDrawEffects, hasActiveEffects: _hasActiveEffects, diamondTopY: diamondTopYProp, assetBaseUrl, assetManifest, }: IsometricCanvasProps): React.JSX.Element;
136
138
  export declare namespace IsometricCanvas {
137
139
  var displayName: string;
138
140
  }
@@ -1,4 +1,5 @@
1
1
  import type { AssetUrl, EventEmit } from '@almadar/core';
2
+ import type { ActiveEffect } from '../organisms/types/isometric';
2
3
  export interface PlatformerPlatform {
3
4
  x: number;
4
5
  y: number;
@@ -48,10 +49,12 @@ export interface PlatformerCanvasProps {
48
49
  }>;
49
50
  jumpEvent?: EventEmit<Record<string, never>>;
50
51
  stopEvent?: EventEmit<Record<string, never>>;
52
+ /** Active visual effects (key, world x/y, ttl) — drawn after the player */
53
+ effects?: ActiveEffect[];
51
54
  /** Additional CSS classes */
52
55
  className?: string;
53
56
  }
54
- export declare function PlatformerCanvas({ player, platforms, worldWidth, worldHeight, canvasWidth, canvasHeight, followCamera, bgColor, playerSprite, tileSprites, backgroundImage, assetBaseUrl, leftEvent, rightEvent, jumpEvent, stopEvent, className, }: PlatformerCanvasProps): import("react/jsx-runtime").JSX.Element;
57
+ export declare function PlatformerCanvas({ player, platforms, worldWidth, worldHeight, canvasWidth, canvasHeight, followCamera, bgColor, playerSprite, tileSprites, backgroundImage, assetBaseUrl, leftEvent, rightEvent, jumpEvent, stopEvent, effects, className, }: PlatformerCanvasProps): import("react/jsx-runtime").JSX.Element;
55
58
  export declare namespace PlatformerCanvas {
56
59
  var displayName: string;
57
60
  }
@@ -9,6 +9,8 @@ import type { AssetUrl } from '@almadar/core';
9
9
  export interface StatBadgeProps {
10
10
  /** Sprite image URL — takes precedence over icon when provided */
11
11
  assetUrl?: AssetUrl;
12
+ /** Asset-image icon URL (board ui/ PNG); takes precedence over the Lucide icon. */
13
+ iconUrl?: AssetUrl;
12
14
  /** Stat label */
13
15
  label: string;
14
16
  /** Current value (defaults to 0 if not provided) */
@@ -30,7 +32,7 @@ export interface StatBadgeProps {
30
32
  /** Additional CSS classes */
31
33
  className?: string;
32
34
  }
33
- export declare function StatBadge({ assetUrl, label, value, max, format, icon, size, variant, className, source: _source, field: _field, }: StatBadgeProps): import("react/jsx-runtime").JSX.Element;
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;
34
36
  export declare namespace StatBadge {
35
37
  var displayName: string;
36
38
  }
@@ -1,4 +1,5 @@
1
1
  import * as THREE from 'three';
2
+ import type { JsonObject } from '@almadar/core';
2
3
  export type NodeType = 'tile' | 'unit' | 'feature' | 'highlight' | 'effect';
3
4
  export interface SceneGraphNode {
4
5
  /** Unique node identifier */
@@ -19,7 +20,7 @@ export interface SceneGraphNode {
19
20
  z: number;
20
21
  };
21
22
  /** Optional metadata */
22
- metadata?: Record<string, unknown>;
23
+ metadata?: JsonObject;
23
24
  }
24
25
  export interface UseSceneGraphReturn {
25
26
  /** Reference to the nodes map */