@almadar/ui 5.105.0 → 5.107.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 (141) hide show
  1. package/dist/avl/index.cjs +1903 -4193
  2. package/dist/avl/index.js +998 -3288
  3. package/dist/components/core/atoms/index.d.ts +1 -1
  4. package/dist/components/core/molecules/index.d.ts +1 -1
  5. package/dist/components/core/organisms/index.d.ts +1 -1
  6. package/dist/components/core/templates/index.d.ts +2 -2
  7. package/dist/components/game/{2d/atoms → atoms}/ActionButton.d.ts +1 -1
  8. package/dist/components/game/{2d/atoms → atoms}/ChoiceButton.d.ts +1 -1
  9. package/dist/components/game/{2d/atoms → atoms}/ControlButton.d.ts +1 -1
  10. package/dist/components/game/atoms/DrawShape.d.ts +50 -0
  11. package/dist/components/game/atoms/DrawSprite.d.ts +47 -0
  12. package/dist/components/game/atoms/DrawText.d.ts +31 -0
  13. package/dist/components/game/{2d/atoms → atoms}/GameAudioToggle.d.ts +1 -1
  14. package/dist/components/game/{2d/atoms → atoms}/GameIcon.d.ts +1 -1
  15. package/dist/components/game/{2d/atoms → atoms}/ItemSlot.d.ts +1 -1
  16. package/dist/components/game/{2d/atoms → atoms}/MiniMap.d.ts +1 -1
  17. package/dist/components/game/{2d/atoms → atoms}/ResourceCounter.d.ts +2 -2
  18. package/dist/components/game/{2d/atoms → atoms}/ScoreDisplay.d.ts +1 -1
  19. package/dist/components/game/{2d/atoms → atoms}/Sprite.d.ts +1 -1
  20. package/dist/components/game/{2d/atoms → atoms}/StateIndicator.d.ts +1 -1
  21. package/dist/components/game/{2d/atoms → atoms}/StatusEffect.d.ts +1 -1
  22. package/dist/components/game/{2d/atoms → atoms}/WaypointMarker.d.ts +1 -1
  23. package/dist/components/game/{shared/hooks → hooks}/useCamera.d.ts +1 -1
  24. package/dist/components/game/{shared/hooks → hooks}/useUnitSpriteAtlas.d.ts +2 -2
  25. package/dist/components/game/{shared → lib}/index.d.ts +1 -2
  26. package/dist/components/game/{shared/lib → lib}/puzzleObject.d.ts +1 -1
  27. package/dist/components/game/{2d/molecules → molecules}/ActionTile.d.ts +1 -1
  28. package/dist/components/game/molecules/Canvas.d.ts +96 -0
  29. package/dist/components/game/molecules/Canvas2D.d.ts +120 -0
  30. package/dist/components/game/{2d/molecules → molecules}/ControlGrid.d.ts +1 -1
  31. package/dist/components/game/molecules/DrawShapeLayer.d.ts +19 -0
  32. package/dist/components/game/molecules/DrawSpriteLayer.d.ts +21 -0
  33. package/dist/components/game/molecules/DrawTextLayer.d.ts +22 -0
  34. package/dist/components/game/{2d/molecules → molecules}/GameHud.d.ts +1 -1
  35. package/dist/components/game/{2d/molecules → molecules}/InventoryGrid.d.ts +1 -1
  36. package/dist/components/game/{2d/molecules → molecules}/ResourceBar.d.ts +1 -1
  37. package/dist/components/game/{2d/molecules → molecules}/StatBadge.d.ts +1 -1
  38. package/dist/components/game/{2d/molecules → molecules}/StateNode.d.ts +1 -1
  39. package/dist/components/game/{2d/molecules → molecules}/TraitSlot.d.ts +1 -1
  40. package/dist/components/game/{2d/molecules → molecules}/TraitStateViewer.d.ts +1 -1
  41. package/dist/components/game/{2d/molecules → molecules}/TransitionArrow.d.ts +1 -1
  42. package/dist/components/game/{2d/molecules → molecules}/index.d.ts +9 -16
  43. package/dist/components/game/patterns.d.ts +20 -0
  44. package/dist/components/game/{shared/providers → providers}/GameAudioProvider.d.ts +1 -1
  45. package/dist/components/game/{2d/templates → templates}/GameTemplate.d.ts +1 -1
  46. package/dist/components/game/{3d → three}/atoms/SpriteBillboard3D.d.ts +1 -1
  47. package/dist/components/game/{shared → three}/hooks/useGameCanvas3DEvents.d.ts +4 -3
  48. package/dist/components/game/{3d → three}/index.cjs +766 -3008
  49. package/dist/components/game/{3d → three}/index.css +3 -3
  50. package/dist/components/game/{3d → three}/index.d.ts +0 -1
  51. package/dist/components/game/{3d → three}/index.js +622 -2863
  52. package/dist/components/game/{shared → three}/lib/game3dAssetManifest.d.ts +1 -1
  53. package/dist/components/game/three/molecules/GameCanvas3D.d.ts +175 -0
  54. package/dist/components/game/{3d → three}/molecules/index.d.ts +9 -12
  55. package/dist/components/game/{3d → three}/patterns.d.ts +0 -4
  56. package/dist/components/index.cjs +2315 -4418
  57. package/dist/components/index.js +1412 -3508
  58. package/dist/lib/drawable/Drawable3D.d.ts +20 -0
  59. package/dist/lib/drawable/contract.d.ts +68 -0
  60. package/dist/lib/drawable/hitTest.d.ts +23 -0
  61. package/dist/lib/drawable/mesh3d.d.ts +28 -0
  62. package/dist/lib/drawable/paintDispatch.d.ts +22 -0
  63. package/dist/lib/drawable/projector.d.ts +14 -0
  64. package/dist/lib/drawable/projector3d.d.ts +20 -0
  65. package/dist/lib/imageCache.d.ts +9 -0
  66. package/dist/lib/painter2d.d.ts +81 -0
  67. package/dist/lib/webPainter2d.d.ts +7 -0
  68. package/dist/marketing/index.cjs +10 -0
  69. package/dist/marketing/index.js +10 -0
  70. package/dist/providers/index.cjs +1748 -4042
  71. package/dist/providers/index.js +956 -3250
  72. package/dist/runtime/index.cjs +1758 -4048
  73. package/dist/runtime/index.js +972 -3262
  74. package/package.json +13 -13
  75. package/dist/components/game/2d/molecules/Canvas2D.d.ts +0 -175
  76. package/dist/components/game/2d/molecules/SideCanvas2D.d.ts +0 -36
  77. package/dist/components/game/2d/organisms/BuilderBoard.d.ts +0 -60
  78. package/dist/components/game/2d/organisms/ClassifierBoard.d.ts +0 -66
  79. package/dist/components/game/2d/organisms/DebuggerBoard.d.ts +0 -61
  80. package/dist/components/game/2d/organisms/EventHandlerBoard.d.ts +0 -42
  81. package/dist/components/game/2d/organisms/NegotiatorBoard.d.ts +0 -56
  82. package/dist/components/game/2d/organisms/SequencerBoard.d.ts +0 -69
  83. package/dist/components/game/2d/organisms/SimulatorBoard.d.ts +0 -58
  84. package/dist/components/game/2d/organisms/StateArchitectBoard.d.ts +0 -61
  85. package/dist/components/game/3d/atoms/EventMarker3D.d.ts +0 -17
  86. package/dist/components/game/3d/molecules/FeatureMesh3D.d.ts +0 -21
  87. package/dist/components/game/3d/molecules/GameCanvas3D.d.ts +0 -259
  88. package/dist/components/game/3d/molecules/SideScene3D.d.ts +0 -31
  89. package/dist/components/game/3d/molecules/TileMesh3D.d.ts +0 -28
  90. package/dist/components/game/3d/molecules/UnitMesh3D.d.ts +0 -29
  91. package/dist/components/game/3d/organisms/GameBoard3D.d.ts +0 -66
  92. package/dist/components/game/3d/templates/GameCanvas3DBattleTemplate.d.ts +0 -82
  93. package/dist/components/game/3d/templates/GameCanvas3DCastleTemplate.d.ts +0 -87
  94. package/dist/components/game/3d/templates/GameCanvas3DWorldMapTemplate.d.ts +0 -95
  95. package/dist/components/game/shared/effects.d.ts +0 -253
  96. /package/dist/components/game/{2d/atoms → atoms}/ComboCounter.d.ts +0 -0
  97. /package/dist/components/game/{2d/atoms → atoms}/DamageNumber.d.ts +0 -0
  98. /package/dist/components/game/{2d/atoms → atoms}/DialogueBubble.d.ts +0 -0
  99. /package/dist/components/game/{2d/atoms → atoms}/GameCard.d.ts +0 -0
  100. /package/dist/components/game/{2d/atoms → atoms}/HealthBar.d.ts +0 -0
  101. /package/dist/components/game/{2d/atoms → atoms}/TimerDisplay.d.ts +0 -0
  102. /package/dist/components/game/{2d/atoms → atoms}/TurnIndicator.d.ts +0 -0
  103. /package/dist/components/game/{shared/hooks → hooks}/useGameAudio.d.ts +0 -0
  104. /package/dist/components/game/{shared → hooks}/useImageCache.d.ts +0 -0
  105. /package/dist/components/game/{shared → lib}/boardEntity.d.ts +0 -0
  106. /package/dist/components/game/{shared/lib → lib}/editorUtils.d.ts +0 -0
  107. /package/dist/components/game/{shared → lib}/game.d.ts +0 -0
  108. /package/dist/components/game/{shared → lib}/isometric.d.ts +0 -0
  109. /package/dist/components/game/{shared → lib}/isometricTypes.d.ts +0 -0
  110. /package/dist/components/game/{shared → lib}/makeAsset.d.ts +0 -0
  111. /package/dist/components/game/{shared/lib → lib}/mechanics.d.ts +0 -0
  112. /package/dist/components/game/{shared/lib → lib}/physicsPresets.d.ts +0 -0
  113. /package/dist/components/game/{shared/lib → lib}/physicsTypes.d.ts +0 -0
  114. /package/dist/components/game/{shared → lib}/spriteAnimation.d.ts +0 -0
  115. /package/dist/components/game/{shared → lib}/spriteAnimationTypes.d.ts +0 -0
  116. /package/dist/components/game/{shared → lib}/spriteSheetConstants.d.ts +0 -0
  117. /package/dist/components/game/{2d/molecules → molecules}/ActionPalette.d.ts +0 -0
  118. /package/dist/components/game/{2d/molecules → molecules}/EventLog.d.ts +0 -0
  119. /package/dist/components/game/{2d/molecules → molecules}/GameMenu.d.ts +0 -0
  120. /package/dist/components/game/{2d/molecules → molecules}/ObjectRulePanel.d.ts +0 -0
  121. /package/dist/components/game/{2d/molecules → molecules}/RuleEditor.d.ts +0 -0
  122. /package/dist/components/game/{2d/molecules → molecules}/SequenceBar.d.ts +0 -0
  123. /package/dist/components/game/{2d/molecules → molecules}/StateGraph.d.ts +0 -0
  124. /package/dist/components/game/{2d/molecules → molecules}/StateJsonView.d.ts +0 -0
  125. /package/dist/components/game/{2d/molecules → molecules}/VariablePanel.d.ts +0 -0
  126. /package/dist/components/game/{2d/templates → templates}/GameShell.d.ts +0 -0
  127. /package/dist/components/game/{shared → three}/game3dTheme.d.ts +0 -0
  128. /package/dist/components/game/{shared → three}/hooks/useAssetLoader.d.ts +0 -0
  129. /package/dist/components/game/{shared → three}/hooks/useRaycaster.d.ts +0 -0
  130. /package/dist/components/game/{shared → three}/hooks/useSceneGraph.d.ts +0 -0
  131. /package/dist/components/game/{shared → three}/hooks/useThree.d.ts +0 -0
  132. /package/dist/components/game/{shared → three}/lib/AssetLoader.d.ts +0 -0
  133. /package/dist/components/game/{shared → three}/lib/culling.d.ts +0 -0
  134. /package/dist/components/game/{shared → three}/lib/grid3D.d.ts +0 -0
  135. /package/dist/components/game/{3d → three}/molecules/Camera3D.d.ts +0 -0
  136. /package/dist/components/game/{3d → three}/molecules/Canvas3DErrorBoundary.d.ts +0 -0
  137. /package/dist/components/game/{3d → three}/molecules/Canvas3DLoadingState.d.ts +0 -0
  138. /package/dist/components/game/{3d → three}/molecules/GameCamera3D.d.ts +0 -0
  139. /package/dist/components/game/{3d → three}/molecules/Lighting3D.d.ts +0 -0
  140. /package/dist/components/game/{3d → three}/molecules/ModelLoader.d.ts +0 -0
  141. /package/dist/components/game/{3d → three}/molecules/Scene3D.d.ts +0 -0
@@ -1,58 +0,0 @@
1
- /**
2
- * SimulatorBoard
3
- *
4
- * Parameter-slider game board. The player adjusts two parameters (A and B)
5
- * and observes the machine-derived output. Correct parameter values must
6
- * bring the output within tolerance of the target to win.
7
- *
8
- * Good for: physics, economics, system design stories.
9
- *
10
- * Controlled-only: params, output, attempts, and result are owned by the
11
- * gameplay machine and read off the bound entity. Slider/check/play-again
12
- * interactions are emitted as events; the machine recomputes and re-renders.
13
- */
14
- import React from 'react';
15
- import type { EventEmit, EntityRow, Asset } from '@almadar/core';
16
- import type { DisplayStateProps } from '../../../core/organisms/types';
17
- /** A tunable simulation parameter slider descriptor (UI value DTO read off the entity). */
18
- export interface SimulatorParameter {
19
- id: string;
20
- label: string;
21
- unit: string;
22
- min: number;
23
- max: number;
24
- step: number;
25
- initial: number;
26
- correct: number;
27
- tolerance: number;
28
- }
29
- export interface SimulatorBoardProps extends DisplayStateProps {
30
- /** Puzzle board-state entity (single row or array). The board reads the
31
- * `parameters` slider descriptors plus the machine-owned `paramA`/`paramB`/
32
- * `output`/`target`/`tolerance`/`attempts`/`result` fields off the row. */
33
- entity?: EntityRow | readonly EntityRow[];
34
- completeEvent?: EventEmit<{
35
- success: boolean;
36
- attempts: number;
37
- }>;
38
- /** Emits UI:{setAEvent} with { value } when parameter A's slider changes. */
39
- setAEvent?: EventEmit<{
40
- value: number;
41
- }>;
42
- /** Emits UI:{setBEvent} with { value } when parameter B's slider changes. */
43
- setBEvent?: EventEmit<{
44
- value: number;
45
- }>;
46
- /** Emits UI:{checkEvent} with {} on simulate / check. */
47
- checkEvent?: EventEmit<Record<string, never>>;
48
- /** Emits UI:{playAgainEvent} with {} on reset / play again. */
49
- playAgainEvent?: EventEmit<Record<string, never>>;
50
- /** Optional per-semantic-key asset overrides for icons (correct/incorrect/play/reset). */
51
- assetManifest?: {
52
- ui?: Record<string, Asset>;
53
- };
54
- }
55
- export declare function SimulatorBoard({ entity, completeEvent, setAEvent, setBEvent, checkEvent, playAgainEvent, assetManifest, className, }: SimulatorBoardProps): React.JSX.Element | null;
56
- export declare namespace SimulatorBoard {
57
- var displayName: string;
58
- }
@@ -1,61 +0,0 @@
1
- /**
2
- * StateArchitectBoard Organism
3
- *
4
- * Contains ALL game logic for the State Architect tier (ages 13+).
5
- * Kids design state machines via a visual graph editor, then run
6
- * them to see if the behavior matches the puzzle goal.
7
- *
8
- * @packageDocumentation
9
- */
10
- import React from 'react';
11
- import type { EventEmit, EntityRow } from '@almadar/core';
12
- import type { DisplayStateProps } from '../../../core/organisms/types';
13
- /** A kid-built transition in the visual graph editor (UI value DTO). */
14
- export interface StateArchitectTransition {
15
- id: string;
16
- from: string;
17
- to: string;
18
- event: string;
19
- guardHint?: string;
20
- }
21
- /** A puzzle test case (UI value DTO). */
22
- export interface TestCase {
23
- /** Sequence of events to fire */
24
- events: string[];
25
- /** Expected final state */
26
- expectedState: string;
27
- /** Description */
28
- label: string;
29
- }
30
- export interface StateArchitectBoardProps extends DisplayStateProps {
31
- /** Puzzle board-state entity (single row or array). The board reads
32
- * `variables` / `states` / `transitions` / `testCases` etc. off the row. */
33
- entity?: EntityRow | readonly EntityRow[];
34
- /** Playback speed */
35
- stepDurationMs?: number;
36
- /** Emits UI:{testEvent} */
37
- testEvent?: EventEmit<Record<string, never>>;
38
- /** Emits UI:{completeEvent} with { success, passedTests } */
39
- completeEvent?: EventEmit<{
40
- success: boolean;
41
- passedTests: number;
42
- }>;
43
- /** Emits UI:{addTransitionEvent} — lolo handles ADD_TRANSITION */
44
- addTransitionEvent?: EventEmit<{
45
- id: string;
46
- from: string;
47
- to: string;
48
- event: string;
49
- }>;
50
- /** Emits UI:{removeTransitionEvent} — lolo handles REMOVE_TRANSITION */
51
- removeTransitionEvent?: EventEmit<{
52
- id: string;
53
- }>;
54
- /** Emits UI:{playAgainEvent} — lolo handles PLAY_AGAIN */
55
- playAgainEvent?: EventEmit<Record<string, never>>;
56
- }
57
- export declare function StateArchitectBoard({ entity, stepDurationMs, testEvent, completeEvent, addTransitionEvent, removeTransitionEvent, playAgainEvent, className, }: StateArchitectBoardProps): React.JSX.Element | null;
58
- export declare namespace StateArchitectBoard {
59
- var displayName: string;
60
- }
61
- export default StateArchitectBoard;
@@ -1,17 +0,0 @@
1
- /**
2
- * EventMarker3D
3
- *
4
- * Floating combat/feedback marker for one `GameEvent` — billboarded text above
5
- * the cell. Lifetime is LOLO-owned: boards append events on actions and expire
6
- * them in their tick (same contract as the 2D effects array).
7
- *
8
- * @packageDocumentation
9
- */
10
- import React from 'react';
11
- import type { GameEvent } from '../molecules/GameCanvas3D';
12
- export interface EventMarker3DProps {
13
- event: GameEvent;
14
- position: [number, number, number];
15
- }
16
- export declare function EventMarker3D({ event, position }: EventMarker3DProps): React.JSX.Element;
17
- export default EventMarker3D;
@@ -1,21 +0,0 @@
1
- /**
2
- * FeatureMesh3D
3
- *
4
- * Default feature renderer for GameCanvas3D. GLB model when resolved (tinted
5
- * via `feature.color`); otherwise a procedural tree or rock primitive using
6
- * the `game3dTheme` default palette.
7
- *
8
- * @packageDocumentation
9
- */
10
- import React from 'react';
11
- import type { Asset } from '@almadar/core';
12
- import type { IsometricFeature } from '../../shared/isometricTypes';
13
- import type { MinimalMouseEvent } from '../../shared/hooks/useGameCanvas3DEvents';
14
- export interface FeatureMesh3DProps {
15
- feature: IsometricFeature;
16
- position: [number, number, number];
17
- model?: Asset;
18
- onFeatureClick: (feature: IsometricFeature, event: MinimalMouseEvent | null) => void;
19
- }
20
- export declare function FeatureMesh3D({ feature, position, model, onFeatureClick, }: FeatureMesh3DProps): React.JSX.Element | null;
21
- export default FeatureMesh3D;
@@ -1,259 +0,0 @@
1
- /**
2
- * GameCanvas3D
3
- *
4
- * 3D game canvas component using Three.js.
5
- * Mirrors the IsometricCanvas API for easy migration.
6
- *
7
- * **State categories (closed-circuit compliant):**
8
- * - All game data (tiles, units, features, selection, validMoves) → received via props
9
- * - Rendering state (hoveredTile, internalError, asset loading, camera) → local only
10
- * - Events → emitted via `useGameCanvas3DEvents()` hook for trait integration
11
- *
12
- * This component is a **pure 3D renderer** — it holds no game logic state.
13
- *
14
- * @packageDocumentation
15
- */
16
- import React from 'react';
17
- import type { EventEmit, Asset } from '@almadar/core';
18
- import type { Platform, SidePlayer } from '../../2d/molecules/Canvas2D';
19
- import * as THREE from 'three';
20
- import { AssetLoader } from '../../shared/lib/AssetLoader';
21
- import { type MinimalMouseEvent } from '../../shared/hooks/useGameCanvas3DEvents';
22
- import type { IsometricTile, IsometricUnit, IsometricFeature } from '../../shared/isometricTypes';
23
- import './GameCanvas3D.css';
24
- export type { IsometricTile, IsometricUnit, IsometricFeature };
25
- /** Game event for canvas display */
26
- export interface GameEvent {
27
- id: string;
28
- type: string;
29
- x: number;
30
- z?: number;
31
- y?: number;
32
- message?: string;
33
- }
34
- /** Camera mode for 3D view.
35
- * - `follow` tracks the side-view player (or the selected unit) from a fixed offset.
36
- * - `chase` sits behind + above the followed unit relative to its `heading` (driving). */
37
- export type CameraMode = 'isometric' | 'perspective' | 'top-down' | 'follow' | 'chase';
38
- /** Per-role model manifest — the 3D analogue of Canvas2D's assetManifest (values are GLB Assets). */
39
- export interface GameCanvas3DAssetManifest {
40
- terrains?: Record<string, Asset>;
41
- units?: Record<string, Asset>;
42
- features?: Record<string, Asset>;
43
- effects?: Record<string, Asset>;
44
- }
45
- /** Map orientation */
46
- export type MapOrientation = 'standard' | 'rotated';
47
- /** Overlay control */
48
- export type OverlayControl = 'default' | 'hidden' | 'minimap';
49
- /** Props for GameCanvas3D component */
50
- export interface GameCanvas3DProps {
51
- /** Additional CSS classes */
52
- className?: string;
53
- /** Children to render inside the 3D canvas (e.g., physics objects, custom meshes) */
54
- children?: React.ReactNode;
55
- /** Loading state indicator */
56
- isLoading?: boolean;
57
- /** Error state */
58
- error?: string | null;
59
- /** Array of tiles to render */
60
- tiles?: IsometricTile[];
61
- /** Array of units to render */
62
- units?: IsometricUnit[];
63
- /** Array of features to render */
64
- features?: IsometricFeature[];
65
- /** Array of events to display */
66
- events?: Array<GameEvent>;
67
- /** Fog of war data */
68
- fogOfWar?: boolean[][];
69
- /** Map orientation */
70
- orientation?: MapOrientation;
71
- /** Camera mode */
72
- cameraMode?: CameraMode;
73
- /** Show grid */
74
- showGrid?: boolean;
75
- /** Show coordinates overlay */
76
- showCoordinates?: boolean;
77
- /** Show tile information */
78
- showTileInfo?: boolean;
79
- /** Overlay control mode */
80
- overlay?: OverlayControl;
81
- /** Enable shadows */
82
- shadows?: boolean;
83
- /** Background color */
84
- backgroundColor?: string;
85
- /** Callback when a tile is clicked */
86
- onTileClick?: (tile: IsometricTile, event: MinimalMouseEvent) => void;
87
- /** Callback when a unit is clicked */
88
- onUnitClick?: (unit: IsometricUnit, event: MinimalMouseEvent) => void;
89
- /** Callback when a feature is clicked */
90
- onFeatureClick?: (feature: IsometricFeature, event: MinimalMouseEvent) => void;
91
- /** Callback when canvas is clicked (background) */
92
- onCanvasClick?: (event: MinimalMouseEvent) => void;
93
- /** Callback when mouse moves over a tile */
94
- onTileHover?: (tile: IsometricTile | null, event: MinimalMouseEvent) => void;
95
- /** Callback for unit animation state change */
96
- onUnitAnimation?: (unitId: string, state: string) => void;
97
- /** Asset loader instance (uses global singleton if not provided) */
98
- assetLoader?: AssetLoader;
99
- /** Custom tile renderer component */
100
- tileRenderer?: React.FC<{
101
- tile: IsometricTile;
102
- position: [number, number, number];
103
- }>;
104
- /** Custom unit renderer component */
105
- unitRenderer?: React.FC<{
106
- unit: IsometricUnit;
107
- position: [number, number, number];
108
- }>;
109
- /** Custom feature renderer component */
110
- featureRenderer?: React.FC<{
111
- feature: IsometricFeature;
112
- position: [number, number, number];
113
- }>;
114
- /** URLs to preload */
115
- preloadAssets?: string[];
116
- /** Declarative event: tile click */
117
- tileClickEvent?: EventEmit<{
118
- tileId: string;
119
- x: number;
120
- z: number;
121
- type?: string;
122
- terrain?: string;
123
- elevation?: number;
124
- }>;
125
- /** Declarative event: unit click */
126
- unitClickEvent?: EventEmit<{
127
- unitId: string;
128
- x: number;
129
- z: number;
130
- unitType?: string;
131
- name?: string;
132
- team?: string;
133
- faction?: string;
134
- health?: number;
135
- maxHealth?: number;
136
- }>;
137
- /** Declarative event: feature click */
138
- featureClickEvent?: EventEmit<{
139
- featureId: string;
140
- x: number;
141
- z: number;
142
- type?: string;
143
- elevation?: number;
144
- }>;
145
- /** Declarative event: canvas click */
146
- canvasClickEvent?: EventEmit<{
147
- clientX: number;
148
- clientY: number;
149
- button: number;
150
- }>;
151
- /** Declarative event: tile hover */
152
- tileHoverEvent?: EventEmit<{
153
- tileId: string;
154
- x: number;
155
- z: number;
156
- type?: string;
157
- }>;
158
- /** Declarative event: tile leave */
159
- tileLeaveEvent?: EventEmit<Record<string, never>>;
160
- /** Declarative event: unit animation */
161
- unitAnimationEvent?: EventEmit<{
162
- unitId: string;
163
- state: string;
164
- timestamp: number;
165
- }>;
166
- /** Declarative event: camera change */
167
- cameraChangeEvent?: EventEmit<{
168
- position: {
169
- x: number;
170
- y: number;
171
- z: number;
172
- };
173
- timestamp: number;
174
- }>;
175
- /** Loading message */
176
- loadingMessage?: string;
177
- /** Whether to use instancing for tiles */
178
- useInstancing?: boolean;
179
- /** Valid move positions */
180
- validMoves?: Array<{
181
- x: number;
182
- z: number;
183
- }>;
184
- /** Attack target positions */
185
- attackTargets?: Array<{
186
- x: number;
187
- z: number;
188
- }>;
189
- /** Selected tile IDs */
190
- selectedTileIds?: string[];
191
- /** Selected unit ID */
192
- selectedUnitId?: string | null;
193
- /** Unit draw-size multiplier. 1 = default tile-proportional size. */
194
- unitScale?: number;
195
- /** Board zoom/group scale. Applied to the scene group. Default 0.45. */
196
- scale?: number;
197
- /** Maps a keydown `e.code` → the board's SEMANTIC event, e.g. `{ ArrowLeft: "LEFT", Space: "JUMP" }`.
198
- * The input layer emits `UI:<event>` so the FSM stays device-agnostic — keyboard and d-pad converge. */
199
- keyMap?: Record<string, string>;
200
- /** Maps a keyup `e.code` → the board's SEMANTIC event, e.g. `{ ArrowLeft: "STOP" }`. */
201
- keyUpMap?: Record<string, string>;
202
- /** Side-view player (pixel coords, LOLO-owned physics) — presence switches to side-scroller rendering. */
203
- player?: SidePlayer;
204
- /** Side-view level geometry (pixel AABBs, same contract as Canvas2D). */
205
- platforms?: Platform[];
206
- /** Side-view world size in pixels. */
207
- worldWidth?: number;
208
- /** Side-view world size in pixels. */
209
- worldHeight?: number;
210
- /** Pixel→world-unit divisor for side view (default 32 = one 2D tile per 3D cell). */
211
- pixelsPerUnit?: number;
212
- /** Player model — named for 2D parity; in 3D the Asset's url is a GLB. */
213
- playerSprite?: Asset;
214
- /** Platform-type → model map — named for 2D parity; values are GLB Assets. */
215
- tileSprites?: Record<string, Asset>;
216
- /** Per-role model manifest; resolves tiles/units/features without explicit modelUrl/assetUrl. */
217
- assetManifest?: GameCanvas3DAssetManifest;
218
- /** Opt-in: smooth-lerp unit positions between LOLO tick snapshots. DEFAULT OFF. */
219
- interpolateUnits?: boolean;
220
- }
221
- /** Imperative handle for GameCanvas3D */
222
- export interface GameCanvas3DHandle {
223
- /** Get current camera position */
224
- getCameraPosition: () => THREE.Vector3 | null;
225
- /** Set camera position */
226
- setCameraPosition: (x: number, y: number, z: number) => void;
227
- /** Look at a specific point */
228
- lookAt: (x: number, y: number, z: number) => void;
229
- /** Reset camera to default position */
230
- resetCamera: () => void;
231
- /** Take a screenshot */
232
- screenshot: () => string | null;
233
- /** Export current view as data */
234
- export: () => {
235
- tiles: IsometricTile[];
236
- units: IsometricUnit[];
237
- features: IsometricFeature[];
238
- };
239
- }
240
- /**
241
- * GameCanvas3D Component
242
- *
243
- * 3D game canvas that mirrors the IsometricCanvas API.
244
- * Uses Three.js and React Three Fiber for rendering.
245
- *
246
- * @example
247
- * ```tsx
248
- * <GameCanvas3D
249
- * tiles={tiles}
250
- * units={units}
251
- * features={features}
252
- * cameraMode="isometric"
253
- * tileClickEvent="TILE_SELECTED"
254
- * onTileClick={(tile) => console.log('Clicked:', tile)}
255
- * />
256
- * ```
257
- */
258
- export declare const GameCanvas3D: React.ForwardRefExoticComponent<GameCanvas3DProps & React.RefAttributes<GameCanvas3DHandle>>;
259
- export default GameCanvas3D;
@@ -1,31 +0,0 @@
1
- /**
2
- * SideScene3D
3
- *
4
- * Side-scroller scene: renders the LOLO-owned pixel-space `player`/`platforms`
5
- * as 3D geometry. Physics stays in the board's tick (same contract as Canvas2D's
6
- * SideView) — this only maps px → world units and draws. Platform and player
7
- * fallback colors come from `game3dTheme` defaults.
8
- *
9
- * @packageDocumentation
10
- */
11
- import React from 'react';
12
- import type { Asset } from '@almadar/core';
13
- import type { Platform, SidePlayer } from '../../2d/molecules/Canvas2D';
14
- import type { IsometricFeature } from '../../shared/isometricTypes';
15
- import type { GameEvent, GameCanvas3DAssetManifest } from './GameCanvas3D';
16
- export interface SideScene3DProps {
17
- player: SidePlayer;
18
- platforms: Platform[];
19
- worldHeight: number;
20
- ppu: number;
21
- playerSprite?: Asset;
22
- tileSprites?: Record<string, Asset>;
23
- interpolate: boolean;
24
- /** Side-view features (collectibles/props) — x/y are PIXELS like platforms. */
25
- features?: IsometricFeature[];
26
- /** Feedback markers — x/y are PIXELS in side view. */
27
- events?: GameEvent[];
28
- assetManifest?: GameCanvas3DAssetManifest;
29
- }
30
- export declare function SideScene3D({ player, platforms, worldHeight, ppu, playerSprite, tileSprites, interpolate, features, events, assetManifest, }: SideScene3DProps): React.JSX.Element;
31
- export default SideScene3D;
@@ -1,28 +0,0 @@
1
- /**
2
- * TileMesh3D
3
- *
4
- * Default tile renderer for GameCanvas3D. GLB tile when a model is resolved
5
- * (with a box fallback while loading/on error); otherwise a colored plate
6
- * whose terrain color and highlight emissive come from `game3dTheme` defaults,
7
- * overridable per-tile via `tile.color`.
8
- *
9
- * @packageDocumentation
10
- */
11
- import React from 'react';
12
- import type { Asset } from '@almadar/core';
13
- import type { IsometricTile } from '../../shared/isometricTypes';
14
- import type { MinimalMouseEvent } from '../../shared/hooks/useGameCanvas3DEvents';
15
- export interface TileMesh3DProps {
16
- /** `color` is an optional per-tile override of the terrain default. */
17
- tile: IsometricTile;
18
- position: [number, number, number];
19
- model?: Asset;
20
- isSelected: boolean;
21
- isHovered: boolean;
22
- isValidMove: boolean;
23
- isAttackTarget: boolean;
24
- onTileClick: (tile: IsometricTile, event: MinimalMouseEvent) => void;
25
- onTileHover: (tile: IsometricTile | null, event: MinimalMouseEvent) => void;
26
- }
27
- export declare function TileMesh3D({ tile, position, model, isSelected, isHovered, isValidMove, isAttackTarget, onTileClick, onTileHover, }: TileMesh3DProps): React.JSX.Element;
28
- export default TileMesh3D;
@@ -1,29 +0,0 @@
1
- /**
2
- * UnitMesh3D
3
- *
4
- * Default unit renderer for GameCanvas3D. Renders (in priority order) an
5
- * animated sprite-sheet billboard, a GLB model, or a procedural
6
- * base/body/head primitive stack — plus a selection ring and health bar.
7
- * Faction color, selection ring, and health-bar palette come from
8
- * `game3dTheme` defaults, overridable per-unit via `unit.tint`.
9
- *
10
- * @packageDocumentation
11
- */
12
- import React from 'react';
13
- import type { Asset } from '@almadar/core';
14
- import type { IsometricUnit } from '../../shared/isometricTypes';
15
- import type { ResolvedFrame } from '../../shared/spriteAnimationTypes';
16
- import type { MinimalMouseEvent } from '../../shared/hooks/useGameCanvas3DEvents';
17
- export interface UnitMesh3DProps {
18
- /** `tint` is an optional per-unit override of the faction default. */
19
- unit: IsometricUnit;
20
- position: [number, number, number];
21
- model?: Asset;
22
- isSelected: boolean;
23
- unitScale: number;
24
- cellSize: number;
25
- resolveUnitFrame: (unitId: string) => ResolvedFrame | null;
26
- onUnitClick: (unit: IsometricUnit, event: MinimalMouseEvent) => void;
27
- }
28
- export declare function UnitMesh3D({ unit, position, model, isSelected, unitScale, cellSize, resolveUnitFrame, onUnitClick, }: UnitMesh3DProps): React.JSX.Element;
29
- export default UnitMesh3D;
@@ -1,66 +0,0 @@
1
- /**
2
- * GameBoard3D
3
- *
4
- * Controlled 3D tactics board organism. Reads all gameplay state
5
- * (selectedUnitId, validMoves, attackTargets, phase, result) from the entity
6
- * prop and renders <GameCanvas3D> with those controlled values.
7
- * Emits user interactions via event bus so the parent Orbital trait drives
8
- * all state transitions.
9
- *
10
- * @packageDocumentation
11
- */
12
- import React from 'react';
13
- import type { EventEmit, EntityRow } from '@almadar/core';
14
- import type { CameraMode } from '../molecules/GameCanvas3D';
15
- import type { IsometricTile, IsometricFeature } from '../../shared/isometricTypes';
16
- export interface GameBoard3DProps {
17
- /** Entity row carrying all gameplay state (controlled). */
18
- entity?: EntityRow | readonly EntityRow[];
19
- /** Static tile data (config default). */
20
- tiles?: IsometricTile[];
21
- /** Static feature data (config default). */
22
- features?: IsometricFeature[];
23
- /** Camera mode forwarded to GameCanvas3D. */
24
- cameraMode?: CameraMode;
25
- /** Background color forwarded to GameCanvas3D. */
26
- backgroundColor?: string;
27
- /** Unit draw-size multiplier forwarded to GameCanvas3D. Default 1. */
28
- unitScale?: number;
29
- /** Board zoom/group scale forwarded to GameCanvas3D. Default 0.45. */
30
- scale?: number;
31
- /** Declarative tile click event emitted to the model. */
32
- tileClickEvent?: EventEmit<{
33
- tileId: string;
34
- x: number;
35
- z: number;
36
- }>;
37
- /** Declarative unit click event emitted to the model. */
38
- unitClickEvent?: EventEmit<{
39
- unitId: string;
40
- x: number;
41
- z: number;
42
- }>;
43
- /** Emits UI:{attackEvent} with { attackerId, targetId, damage } on attack. */
44
- attackEvent?: EventEmit<{
45
- attackerId: string;
46
- targetId: string;
47
- damage: number;
48
- }>;
49
- /** Emits UI:{endTurnEvent} with {} on end turn. */
50
- endTurnEvent?: EventEmit<Record<string, never>>;
51
- /** Emits UI:{cancelEvent} with {} on cancel. */
52
- cancelEvent?: EventEmit<Record<string, never>>;
53
- /** Emits UI:{playAgainEvent} with {} on play again / reset. */
54
- playAgainEvent?: EventEmit<Record<string, never>>;
55
- /** Emits UI:{gameEndEvent} with { result } when win/loss is detected. */
56
- gameEndEvent?: EventEmit<{
57
- result: 'victory' | 'defeat';
58
- }>;
59
- /** Additional CSS class. */
60
- className?: string;
61
- }
62
- export declare function GameBoard3D({ entity, tiles, features, cameraMode, backgroundColor, unitScale, scale, tileClickEvent, unitClickEvent, attackEvent, endTurnEvent, cancelEvent, playAgainEvent, gameEndEvent, className, }: GameBoard3DProps): React.JSX.Element | null;
63
- export declare namespace GameBoard3D {
64
- var displayName: string;
65
- }
66
- export default GameBoard3D;
@@ -1,82 +0,0 @@
1
- /**
2
- * GameCanvas3DBattleTemplate
3
- *
4
- * Declarative template for 3D battle/tactical combat.
5
- * Delegates all interaction state (selectedUnitId, validMoves, attackTargets)
6
- * to <GameBoard3D> so the model (not this template) owns gameplay state.
7
- *
8
- * Page: Battle3DPage
9
- * Entity: Battle3D / GameBoard3DItem
10
- * ViewType: detail
11
- *
12
- * Events Emitted:
13
- * - TILE_CLICK - When a tile is clicked
14
- * - UNIT_CLICK - When a unit is clicked
15
- * - END_TURN - When ending turn
16
- * - EXIT_BATTLE - When exiting battle
17
- *
18
- * @packageDocumentation
19
- */
20
- import React from 'react';
21
- import type { IsometricTile, IsometricFeature } from '../../shared/isometricTypes';
22
- import type { TemplateProps } from '../../../core/templates/types';
23
- import { type Game3DAssetManifest } from '../../shared/lib/game3dAssetManifest';
24
- export interface GameCanvas3DBattleTemplateProps extends TemplateProps {
25
- /** Fallback tile data when no entity is present (layout only — model URLs resolve from assetManifest) */
26
- tiles?: IsometricTile[];
27
- /** Fallback feature data when no entity is present */
28
- features?: IsometricFeature[];
29
- /** GLB model URLs keyed by terrain — owns all asset choice (no hardcoded URLs in this template). */
30
- assetManifest?: Game3DAssetManifest;
31
- /** 3D camera mode - defaults to perspective for dramatic effect */
32
- cameraMode?: 'isometric' | 'perspective' | 'top-down';
33
- /** Show grid helper */
34
- showGrid?: boolean;
35
- /** Enable shadows */
36
- shadows?: boolean;
37
- /** Background color - darker for battle atmosphere */
38
- backgroundColor?: string;
39
- /** Event name for tile clicks — forwarded to the model */
40
- tileClickEvent?: string;
41
- /** Event name for unit clicks — forwarded to the model */
42
- unitClickEvent?: string;
43
- /** Event name for ending turn */
44
- endTurnEvent?: string;
45
- /** Event name for cancel/deselect */
46
- cancelEvent?: string;
47
- /** Event name for attack emission */
48
- attackEvent?: string;
49
- /** Event name for play again / reset */
50
- playAgainEvent?: string;
51
- /** Event name for game end detection */
52
- gameEndEvent?: string;
53
- /** Event name for exiting battle */
54
- exitEvent?: string;
55
- /** Show turn indicator overlay */
56
- showTurnIndicator?: boolean;
57
- /** Unit draw-size multiplier forwarded to GameBoard3D. Default 1. */
58
- unitScale?: number;
59
- /** Board zoom/group scale forwarded to GameBoard3D. Default 0.45. */
60
- scale?: number;
61
- }
62
- /**
63
- * GameCanvas3DBattleTemplate Component
64
- *
65
- * Template for 3D battle/tactical combat view.
66
- * Interaction state lives in the entity (model), not in this component.
67
- *
68
- * @example
69
- * ```tsx
70
- * <GameCanvas3DBattleTemplate
71
- * entity={battleEntity}
72
- * cameraMode="perspective"
73
- * tileClickEvent="TILE_CLICK"
74
- * unitClickEvent="UNIT_CLICK"
75
- * />
76
- * ```
77
- */
78
- export declare function GameCanvas3DBattleTemplate({ entity, tiles: propTiles, features: propFeatures, assetManifest, cameraMode, backgroundColor, tileClickEvent, unitClickEvent, endTurnEvent, cancelEvent, attackEvent, playAgainEvent, gameEndEvent, unitScale, scale, className, }: GameCanvas3DBattleTemplateProps): React.JSX.Element | null;
79
- export declare namespace GameCanvas3DBattleTemplate {
80
- var displayName: string;
81
- }
82
- export default GameCanvas3DBattleTemplate;