@almadar/ui 5.105.0 → 5.108.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 (146) hide show
  1. package/dist/avl/index.cjs +2127 -5818
  2. package/dist/avl/index.js +1234 -4925
  3. package/dist/components/{game/2d → core}/atoms/GameIcon.d.ts +1 -1
  4. package/dist/components/core/atoms/index.d.ts +2 -1
  5. package/dist/components/core/molecules/index.d.ts +1 -1
  6. package/dist/components/core/organisms/index.d.ts +1 -1
  7. package/dist/components/core/templates/index.d.ts +1 -2
  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}/MiniMap.d.ts +1 -1
  15. package/dist/components/game/{2d/atoms → atoms}/ScoreDisplay.d.ts +1 -1
  16. package/dist/components/game/{2d/atoms → atoms}/StateIndicator.d.ts +1 -1
  17. package/dist/components/game/{2d/molecules → molecules}/ActionTile.d.ts +1 -1
  18. package/dist/components/game/molecules/Canvas.d.ts +96 -0
  19. package/dist/components/game/molecules/Canvas2D.d.ts +120 -0
  20. package/dist/components/game/{2d/molecules → molecules}/ControlGrid.d.ts +1 -1
  21. package/dist/components/game/molecules/DrawShapeLayer.d.ts +19 -0
  22. package/dist/components/game/molecules/DrawSpriteLayer.d.ts +21 -0
  23. package/dist/components/game/molecules/DrawTextLayer.d.ts +22 -0
  24. package/dist/components/game/{2d/molecules → molecules}/GameHud.d.ts +1 -1
  25. package/dist/components/game/{2d/molecules → molecules}/StatBadge.d.ts +1 -1
  26. package/dist/components/game/{2d/molecules → molecules}/StateNode.d.ts +1 -1
  27. package/dist/components/game/{2d/molecules → molecules}/TraitSlot.d.ts +1 -1
  28. package/dist/components/game/{2d/molecules → molecules}/TraitStateViewer.d.ts +1 -1
  29. package/dist/components/game/{2d/molecules → molecules}/TransitionArrow.d.ts +1 -1
  30. package/dist/components/game/molecules/index.d.ts +39 -0
  31. package/dist/components/game/patterns.d.ts +20 -0
  32. package/dist/components/index.cjs +2417 -5988
  33. package/dist/components/index.js +1520 -5074
  34. package/dist/{components/game/shared/hooks → hooks}/useCamera.d.ts +1 -1
  35. package/dist/{components/game/shared/hooks → hooks}/useUnitSpriteAtlas.d.ts +2 -2
  36. package/dist/lib/drawable/contract.d.ts +68 -0
  37. package/dist/lib/drawable/hitTest.d.ts +23 -0
  38. package/dist/lib/drawable/paintDispatch.d.ts +22 -0
  39. package/dist/lib/drawable/projector.d.ts +14 -0
  40. package/dist/lib/drawable/projector3d.d.ts +20 -0
  41. package/dist/lib/drawable/three/Canvas3DHost.d.ts +178 -0
  42. package/dist/lib/drawable/three/Drawable3D.d.ts +20 -0
  43. package/dist/lib/drawable/three/GameCamera3D.d.ts +16 -0
  44. package/dist/lib/drawable/three/game3dTheme.d.ts +14 -0
  45. package/dist/{components/game/shared → lib/drawable/three}/hooks/useGameCanvas3DEvents.d.ts +4 -3
  46. package/dist/{components/game/3d → lib/drawable/three}/index.cjs +2223 -4466
  47. package/dist/{components/game/3d → lib/drawable/three}/index.css +3 -3
  48. package/dist/lib/drawable/three/index.d.ts +39 -0
  49. package/dist/{components/game/3d → lib/drawable/three}/index.js +2132 -4375
  50. package/dist/lib/drawable/three/mesh3d.d.ts +28 -0
  51. package/dist/{components/game/shared/index.d.ts → lib/gameShared.d.ts} +1 -2
  52. package/dist/lib/imageCache.d.ts +9 -0
  53. package/dist/lib/painter2d.d.ts +81 -0
  54. package/dist/{components/game/shared/lib → lib}/puzzleObject.d.ts +11 -2
  55. package/dist/lib/webPainter2d.d.ts +7 -0
  56. package/dist/marketing/index.cjs +10 -0
  57. package/dist/marketing/index.js +10 -0
  58. package/dist/{components/game/shared/providers → providers}/GameAudioProvider.d.ts +1 -1
  59. package/dist/providers/index.cjs +2524 -5889
  60. package/dist/providers/index.d.ts +2 -0
  61. package/dist/providers/index.js +1743 -5112
  62. package/dist/runtime/index.cjs +1982 -5673
  63. package/dist/runtime/index.js +1208 -4899
  64. package/package.json +13 -13
  65. package/dist/components/game/2d/atoms/ActionButton.d.ts +0 -31
  66. package/dist/components/game/2d/atoms/ComboCounter.d.ts +0 -20
  67. package/dist/components/game/2d/atoms/DamageNumber.d.ts +0 -18
  68. package/dist/components/game/2d/atoms/GameCard.d.ts +0 -34
  69. package/dist/components/game/2d/atoms/ItemSlot.d.ts +0 -31
  70. package/dist/components/game/2d/atoms/ResourceCounter.d.ts +0 -26
  71. package/dist/components/game/2d/atoms/Sprite.d.ts +0 -52
  72. package/dist/components/game/2d/atoms/StatusEffect.d.ts +0 -25
  73. package/dist/components/game/2d/atoms/TurnIndicator.d.ts +0 -22
  74. package/dist/components/game/2d/atoms/WaypointMarker.d.ts +0 -23
  75. package/dist/components/game/2d/molecules/Canvas2D.d.ts +0 -175
  76. package/dist/components/game/2d/molecules/EventLog.d.ts +0 -31
  77. package/dist/components/game/2d/molecules/InventoryGrid.d.ts +0 -35
  78. package/dist/components/game/2d/molecules/ObjectRulePanel.d.ts +0 -32
  79. package/dist/components/game/2d/molecules/ResourceBar.d.ts +0 -26
  80. package/dist/components/game/2d/molecules/RuleEditor.d.ts +0 -39
  81. package/dist/components/game/2d/molecules/SideCanvas2D.d.ts +0 -36
  82. package/dist/components/game/2d/molecules/VariablePanel.d.ts +0 -28
  83. package/dist/components/game/2d/molecules/index.d.ts +0 -66
  84. package/dist/components/game/2d/organisms/BuilderBoard.d.ts +0 -60
  85. package/dist/components/game/2d/organisms/ClassifierBoard.d.ts +0 -66
  86. package/dist/components/game/2d/organisms/DebuggerBoard.d.ts +0 -61
  87. package/dist/components/game/2d/organisms/EventHandlerBoard.d.ts +0 -42
  88. package/dist/components/game/2d/organisms/NegotiatorBoard.d.ts +0 -56
  89. package/dist/components/game/2d/organisms/SequencerBoard.d.ts +0 -69
  90. package/dist/components/game/2d/organisms/SimulatorBoard.d.ts +0 -58
  91. package/dist/components/game/2d/organisms/StateArchitectBoard.d.ts +0 -61
  92. package/dist/components/game/2d/templates/GameTemplate.d.ts +0 -35
  93. package/dist/components/game/3d/atoms/EventMarker3D.d.ts +0 -17
  94. package/dist/components/game/3d/atoms/SpriteBillboard3D.d.ts +0 -18
  95. package/dist/components/game/3d/index.d.ts +0 -13
  96. package/dist/components/game/3d/molecules/FeatureMesh3D.d.ts +0 -21
  97. package/dist/components/game/3d/molecules/GameCamera3D.d.ts +0 -35
  98. package/dist/components/game/3d/molecules/GameCanvas3D.d.ts +0 -259
  99. package/dist/components/game/3d/molecules/SideScene3D.d.ts +0 -31
  100. package/dist/components/game/3d/molecules/TileMesh3D.d.ts +0 -28
  101. package/dist/components/game/3d/molecules/UnitMesh3D.d.ts +0 -29
  102. package/dist/components/game/3d/molecules/index.d.ts +0 -35
  103. package/dist/components/game/3d/organisms/GameBoard3D.d.ts +0 -66
  104. package/dist/components/game/3d/patterns.d.ts +0 -20
  105. package/dist/components/game/3d/templates/GameCanvas3DBattleTemplate.d.ts +0 -82
  106. package/dist/components/game/3d/templates/GameCanvas3DCastleTemplate.d.ts +0 -87
  107. package/dist/components/game/3d/templates/GameCanvas3DWorldMapTemplate.d.ts +0 -95
  108. package/dist/components/game/shared/effects.d.ts +0 -253
  109. package/dist/components/game/shared/game3dTheme.d.ts +0 -55
  110. package/dist/components/game/shared/lib/game3dAssetManifest.d.ts +0 -48
  111. /package/dist/components/game/{2d/atoms → atoms}/DialogueBubble.d.ts +0 -0
  112. /package/dist/components/game/{2d/atoms → atoms}/HealthBar.d.ts +0 -0
  113. /package/dist/components/game/{2d/atoms → atoms}/TimerDisplay.d.ts +0 -0
  114. /package/dist/components/game/{2d/molecules → molecules}/ActionPalette.d.ts +0 -0
  115. /package/dist/components/game/{2d/molecules → molecules}/GameMenu.d.ts +0 -0
  116. /package/dist/components/game/{2d/molecules → molecules}/SequenceBar.d.ts +0 -0
  117. /package/dist/components/game/{2d/molecules → molecules}/StateGraph.d.ts +0 -0
  118. /package/dist/components/game/{2d/molecules → molecules}/StateJsonView.d.ts +0 -0
  119. /package/dist/components/game/{2d/templates → templates}/GameShell.d.ts +0 -0
  120. /package/dist/{components/game/shared/hooks → hooks}/useGameAudio.d.ts +0 -0
  121. /package/dist/{components/game/shared → hooks}/useImageCache.d.ts +0 -0
  122. /package/dist/{components/game/shared → lib}/boardEntity.d.ts +0 -0
  123. /package/dist/{components/game/3d/molecules → lib/drawable/three}/Camera3D.d.ts +0 -0
  124. /package/dist/{components/game/3d/molecules → lib/drawable/three}/Canvas3DErrorBoundary.d.ts +0 -0
  125. /package/dist/{components/game/3d/molecules → lib/drawable/three}/Canvas3DLoadingState.d.ts +0 -0
  126. /package/dist/{components/game/3d/molecules → lib/drawable/three}/Lighting3D.d.ts +0 -0
  127. /package/dist/{components/game/3d/molecules → lib/drawable/three}/ModelLoader.d.ts +0 -0
  128. /package/dist/{components/game/3d/molecules → lib/drawable/three}/Scene3D.d.ts +0 -0
  129. /package/dist/{components/game/shared → lib/drawable/three}/hooks/useAssetLoader.d.ts +0 -0
  130. /package/dist/{components/game/shared → lib/drawable/three}/hooks/useRaycaster.d.ts +0 -0
  131. /package/dist/{components/game/shared → lib/drawable/three}/hooks/useSceneGraph.d.ts +0 -0
  132. /package/dist/{components/game/shared → lib/drawable/three}/hooks/useThree.d.ts +0 -0
  133. /package/dist/{components/game/shared → lib/drawable/three}/lib/AssetLoader.d.ts +0 -0
  134. /package/dist/{components/game/shared → lib/drawable/three}/lib/culling.d.ts +0 -0
  135. /package/dist/{components/game/shared → lib/drawable/three}/lib/grid3D.d.ts +0 -0
  136. /package/dist/{components/game/shared/lib → lib}/editorUtils.d.ts +0 -0
  137. /package/dist/{components/game/shared → lib}/game.d.ts +0 -0
  138. /package/dist/{components/game/shared → lib}/isometric.d.ts +0 -0
  139. /package/dist/{components/game/shared → lib}/isometricTypes.d.ts +0 -0
  140. /package/dist/{components/game/shared → lib}/makeAsset.d.ts +0 -0
  141. /package/dist/{components/game/shared/lib → lib}/mechanics.d.ts +0 -0
  142. /package/dist/{components/game/shared/lib → lib}/physicsPresets.d.ts +0 -0
  143. /package/dist/{components/game/shared/lib → lib}/physicsTypes.d.ts +0 -0
  144. /package/dist/{components/game/shared → lib}/spriteAnimation.d.ts +0 -0
  145. /package/dist/{components/game/shared → lib}/spriteAnimationTypes.d.ts +0 -0
  146. /package/dist/{components/game/shared → lib}/spriteSheetConstants.d.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/ui",
3
- "version": "5.105.0",
3
+ "version": "5.108.0",
4
4
  "description": "React UI components, hooks, and providers for Almadar",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -52,22 +52,22 @@
52
52
  "require": "./dist/lib/index.cjs"
53
53
  },
54
54
  "./components/organisms/game/three": {
55
- "types": "./dist/components/game/3d/index.d.ts",
56
- "import": "./dist/components/game/3d/index.js",
57
- "require": "./dist/components/game/3d/index.cjs"
55
+ "types": "./dist/lib/drawable/three/index.d.ts",
56
+ "import": "./dist/lib/drawable/three/index.js",
57
+ "require": "./dist/lib/drawable/three/index.cjs"
58
58
  },
59
59
  "./components/molecules/game/three": {
60
- "types": "./dist/components/game/3d/index.d.ts",
61
- "import": "./dist/components/game/3d/index.js",
62
- "require": "./dist/components/game/3d/index.cjs"
60
+ "types": "./dist/lib/drawable/three/index.d.ts",
61
+ "import": "./dist/lib/drawable/three/index.js",
62
+ "require": "./dist/lib/drawable/three/index.cjs"
63
63
  },
64
64
  "./components/organisms/game/TraitStateViewer": {
65
- "import": "./components/game/2d/TraitStateViewer.tsx",
66
- "types": "./components/game/2d/TraitStateViewer.tsx"
65
+ "import": "./components/game/molecules/TraitStateViewer.tsx",
66
+ "types": "./components/game/molecules/TraitStateViewer.tsx"
67
67
  },
68
68
  "./components/organisms/game/TraitSlot": {
69
- "import": "./components/game/2d/TraitSlot.tsx",
70
- "types": "./components/game/2d/TraitSlot.tsx"
69
+ "import": "./components/game/molecules/TraitSlot.tsx",
70
+ "types": "./components/game/molecules/TraitSlot.tsx"
71
71
  },
72
72
  "./templates": {
73
73
  "import": "./templates/index.ts",
@@ -117,10 +117,10 @@
117
117
  "access": "public"
118
118
  },
119
119
  "dependencies": {
120
- "@almadar/core": "^10.16.0",
120
+ "@almadar/core": "^10.20.0",
121
121
  "@almadar/evaluator": ">=2.9.2",
122
122
  "@almadar/logger": "^1.3.0",
123
- "@almadar/patterns": ">=2.35.0",
123
+ "@almadar/patterns": ">=2.97.0",
124
124
  "@almadar/runtime": "^6.21.0",
125
125
  "@almadar/std": ">=6.4.1",
126
126
  "@almadar/syntax": ">=1.3.1",
@@ -1,31 +0,0 @@
1
- import * as React from 'react';
2
- import { type IconInput } from '../../../core/atoms/Icon';
3
- import type { Asset, EventKey } from '@almadar/core';
4
- export interface ActionButtonProps {
5
- /** Sprite asset — takes precedence over icon when provided */
6
- assetUrl?: Asset;
7
- /** Button label text */
8
- label: string;
9
- /** Icon displayed before the label */
10
- icon?: IconInput;
11
- /** Cooldown progress from 0 (ready) to 1 (full cooldown) */
12
- cooldown?: number;
13
- /** Whether the button is disabled */
14
- disabled?: boolean;
15
- /** Keyboard hotkey to display as a badge */
16
- hotkey?: string;
17
- /** Size variant */
18
- size?: 'sm' | 'md' | 'lg';
19
- /** Visual variant */
20
- variant?: 'primary' | 'secondary' | 'danger';
21
- /** Click handler */
22
- onClick?: () => void;
23
- /** Declarative event name — emits UI:{action} via eventBus on click */
24
- action?: EventKey;
25
- /** Additional CSS classes */
26
- className?: string;
27
- }
28
- export declare function ActionButton({ assetUrl, label, icon, cooldown, disabled, hotkey, size, variant, onClick, action, className, }: ActionButtonProps): React.JSX.Element;
29
- export declare namespace ActionButton {
30
- var displayName: string;
31
- }
@@ -1,20 +0,0 @@
1
- import * as React from 'react';
2
- import type { Asset } from '@almadar/core';
3
- export interface ComboCounterProps {
4
- /** Sprite asset displayed alongside the combo number */
5
- assetUrl?: Asset;
6
- /** Current combo count */
7
- combo: number;
8
- /** Score multiplier */
9
- multiplier?: number;
10
- /** Current streak */
11
- streak?: number;
12
- /** Size variant */
13
- size?: 'sm' | 'md' | 'lg';
14
- /** Additional CSS classes */
15
- className?: string;
16
- }
17
- export declare function ComboCounter({ assetUrl, combo, multiplier, streak, size, className, }: ComboCounterProps): React.JSX.Element | null;
18
- export declare namespace ComboCounter {
19
- var displayName: string;
20
- }
@@ -1,18 +0,0 @@
1
- import * as React from 'react';
2
- import type { Asset } from '@almadar/core';
3
- export interface DamageNumberProps {
4
- /** Sprite asset — displayed as a hit-effect icon alongside the number */
5
- assetUrl?: Asset;
6
- /** The damage/heal value to display */
7
- value: number;
8
- /** Type of number display */
9
- type?: 'damage' | 'heal' | 'crit' | 'miss';
10
- /** Size variant */
11
- size?: 'sm' | 'md' | 'lg';
12
- /** Additional CSS classes */
13
- className?: string;
14
- }
15
- export declare function DamageNumber({ assetUrl, value, type, size, className, }: DamageNumberProps): React.JSX.Element;
16
- export declare namespace DamageNumber {
17
- var displayName: string;
18
- }
@@ -1,34 +0,0 @@
1
- import * as React from 'react';
2
- import type { Asset, EventEmit } from '@almadar/core';
3
- export interface GameCardProps {
4
- id: string;
5
- cost?: number;
6
- /** Card art asset */
7
- art?: Asset;
8
- /** Asset rendered as the card border/frame via backgroundImage; falls back to CSS border styling when absent. */
9
- frameAsset?: Asset;
10
- attack?: number;
11
- defense?: number;
12
- name?: string;
13
- selected?: boolean;
14
- disabled?: boolean;
15
- /** Size variant — controls card dimensions and art pixel size */
16
- size?: 'sm' | 'md' | 'lg';
17
- /**
18
- * One-shot pose LOLO drives on a transition (`DRAW`/`PLAY`), auto-reverted
19
- * to `'idle'` by a short tick — same idiom as `HealthBar.animated`, plain
20
- * CSS transform driven off a prop, no internal timer here.
21
- */
22
- animState?: 'idle' | 'drawn' | 'played' | 'flipped';
23
- /** Direct click callback */
24
- onClick?: (id: string) => void;
25
- /** Event-bus event emitted with `{ cardId }` on click */
26
- clickEvent?: EventEmit<{
27
- cardId: string;
28
- }>;
29
- className?: string;
30
- }
31
- export declare function GameCard({ id, cost, art, frameAsset, attack, defense, name, selected, disabled, size, animState, onClick, clickEvent, className, }: GameCardProps): React.JSX.Element;
32
- export declare namespace GameCard {
33
- var displayName: string;
34
- }
@@ -1,31 +0,0 @@
1
- import * as React from 'react';
2
- import { type IconInput } from '../../../core/atoms/Icon';
3
- import type { Asset, EventKey } from '@almadar/core';
4
- export interface ItemSlotProps {
5
- /** Sprite asset — takes precedence over icon when provided */
6
- assetUrl?: Asset;
7
- /** Icon component or emoji — shown only when assetUrl is absent */
8
- icon?: IconInput;
9
- /** Item label */
10
- label?: string;
11
- /** Stack quantity */
12
- quantity?: number;
13
- /** Rarity tier affecting border color */
14
- rarity?: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary';
15
- /** Whether the slot is empty */
16
- empty?: boolean;
17
- /** Size variant */
18
- size?: 'sm' | 'md' | 'lg';
19
- /** Whether the slot is selected */
20
- selected?: boolean;
21
- /** Click handler */
22
- onClick?: () => void;
23
- /** Declarative event name — emits UI:{action} via eventBus on select */
24
- action?: EventKey;
25
- /** Additional CSS classes */
26
- className?: string;
27
- }
28
- export declare function ItemSlot({ assetUrl, icon, label, quantity, rarity, empty, size, selected, onClick, action, className, }: ItemSlotProps): React.JSX.Element;
29
- export declare namespace ItemSlot {
30
- var displayName: string;
31
- }
@@ -1,26 +0,0 @@
1
- import * as React from 'react';
2
- import type { ColorToken } from '../../../core/atoms/types';
3
- import { type IconInput } from '../../../core/atoms/Icon';
4
- import type { Asset } from '@almadar/core';
5
- export interface ResourceCounterProps {
6
- /** Sprite asset — takes precedence over icon when provided */
7
- assetUrl?: Asset;
8
- /** Icon component or emoji */
9
- icon?: IconInput;
10
- /** Resource label */
11
- label: string;
12
- /** Current value */
13
- value: number;
14
- /** Maximum value */
15
- max?: number;
16
- /** Semantic palette token or an arbitrary Tailwind color class. */
17
- color?: ColorToken | string;
18
- /** Size variant */
19
- size?: 'sm' | 'md' | 'lg';
20
- /** Additional CSS classes */
21
- className?: string;
22
- }
23
- export declare function ResourceCounter({ assetUrl, icon, label, value, max, color, size, className, }: ResourceCounterProps): React.JSX.Element;
24
- export declare namespace ResourceCounter {
25
- var displayName: string;
26
- }
@@ -1,52 +0,0 @@
1
- /**
2
- * Sprite Component
3
- *
4
- * Renders a single frame from a spritesheet with transform support.
5
- */
6
- import React from 'react';
7
- import type { EventKey, Asset } from "@almadar/core";
8
- import type { AnimationName } from '../../shared/spriteAnimationTypes';
9
- export interface SpriteProps {
10
- /** Spritesheet asset */
11
- spritesheet: Asset;
12
- /** Width of each frame in pixels */
13
- frameWidth: number;
14
- /** Height of each frame in pixels */
15
- frameHeight: number;
16
- /** Frame index to display (0-based, left-to-right, top-to-bottom) */
17
- frame: number;
18
- /** X position in pixels */
19
- x: number;
20
- /** Y position in pixels */
21
- y: number;
22
- /** Scale factor (default: 1) */
23
- scale?: number;
24
- /** Flip horizontally */
25
- flipX?: boolean;
26
- /** Flip vertically */
27
- flipY?: boolean;
28
- /** Rotation in degrees */
29
- rotation?: number;
30
- /** Opacity (0-1) */
31
- opacity?: number;
32
- /** Z-index for layering */
33
- zIndex?: number;
34
- /** Number of columns in spritesheet (for frame calculation) */
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;
40
- /** Optional className */
41
- className?: string;
42
- /** Optional onClick handler */
43
- onClick?: () => void;
44
- /** Declarative event name emitted on click via useEventBus */
45
- action?: EventKey;
46
- }
47
- 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;
48
- /**
49
- * Canvas-based sprite renderer for better performance in game loops
50
- */
51
- export declare function drawSprite(ctx: CanvasRenderingContext2D, image: HTMLImageElement, props: Omit<SpriteProps, 'spritesheet' | 'className' | 'onClick'>): void;
52
- export default Sprite;
@@ -1,25 +0,0 @@
1
- import * as React from 'react';
2
- import { type IconInput } from '../../../core/atoms/Icon';
3
- import type { Asset } from '@almadar/core';
4
- export interface StatusEffectProps {
5
- /** Sprite asset — takes precedence over icon when provided */
6
- assetUrl?: Asset;
7
- /** Lucide icon name or component */
8
- icon?: IconInput;
9
- /** Label describing the effect */
10
- label?: string;
11
- /** Remaining duration in seconds */
12
- duration?: number;
13
- /** Number of stacks */
14
- stacks?: number;
15
- /** Effect type */
16
- variant?: 'buff' | 'debuff' | 'neutral';
17
- /** Size variant */
18
- size?: 'sm' | 'md' | 'lg';
19
- /** Additional CSS classes */
20
- className?: string;
21
- }
22
- export declare function StatusEffect({ assetUrl, icon, label, duration, stacks, variant, size, className, }: StatusEffectProps): React.JSX.Element;
23
- export declare namespace StatusEffect {
24
- var displayName: string;
25
- }
@@ -1,22 +0,0 @@
1
- import * as React from 'react';
2
- import type { Asset } from '@almadar/core';
3
- export interface TurnIndicatorProps {
4
- /** Sprite asset — takes precedence over the dot indicator when provided */
5
- assetUrl?: Asset;
6
- /** Current turn number */
7
- currentTurn: number;
8
- /** Maximum number of turns */
9
- maxTurns?: number;
10
- /** Name of the active team */
11
- activeTeam?: string;
12
- /** Current phase label */
13
- phase?: string;
14
- /** Size variant */
15
- size?: 'sm' | 'md' | 'lg';
16
- /** Additional CSS classes */
17
- className?: string;
18
- }
19
- export declare function TurnIndicator({ assetUrl, currentTurn, maxTurns, activeTeam, phase, size, className, }: TurnIndicatorProps): React.JSX.Element;
20
- export declare namespace TurnIndicator {
21
- var displayName: string;
22
- }
@@ -1,23 +0,0 @@
1
- import * as React from 'react';
2
- import { type IconInput } from '../../../core/atoms/Icon';
3
- import type { Asset } from '@almadar/core';
4
- export interface WaypointMarkerProps {
5
- /** Sprite asset — takes precedence over icon when provided */
6
- assetUrl?: Asset;
7
- /** Label text below the marker */
8
- label?: string;
9
- /** Custom icon to render inside the marker */
10
- icon?: IconInput;
11
- /** Whether this waypoint is currently active */
12
- active?: boolean;
13
- /** Whether this waypoint has been completed */
14
- completed?: boolean;
15
- /** Size variant */
16
- size?: 'sm' | 'md' | 'lg';
17
- /** Additional CSS classes */
18
- className?: string;
19
- }
20
- export declare function WaypointMarker({ assetUrl, label, icon, active, completed, size, className, }: WaypointMarkerProps): React.JSX.Element;
21
- export declare namespace WaypointMarker {
22
- var displayName: string;
23
- }
@@ -1,175 +0,0 @@
1
- /**
2
- * Canvas2D
3
- *
4
- * The unified 2D game renderer (GR-6 consolidation). One canvas, a `projection`
5
- * axis, layered render passes, opt-in clock. Absorbs IsometricCanvas (iso/hex/flat),
6
- * GameCanvas2D (→ `projection:'free'`, pixel-direct draw) and PlatformerCanvas
7
- * (→ `projection:'side'` + `platforms[]`).
8
- *
9
- * Pure renderer: every game datum arrives via props; only view state (viewport,
10
- * camera, sprite cache) is local. The clock is LOLO-driven by default — `animate`
11
- * opts a board into an internal RAF, but the default is OFF.
12
- *
13
- * Projection modes:
14
- * - `isometric | hex | flat`: 2:1 diamond / pointy-top hex / orthographic square,
15
- * all via `isoToScreen` — identical to IsometricCanvas.
16
- * - `free`: tile/unit/feature x,y are SCREEN PIXELS drawn directly (no diamond),
17
- * reusing the same sprite-drawing passes.
18
- * - `side`: side-view pixel space with `platforms[]` (AABB) + follow-camera +
19
- * keyboard input — an isolated branch ported from PlatformerCanvas.
20
- *
21
- * @packageDocumentation
22
- */
23
- import * as React from 'react';
24
- import type { Asset, AssetUrl, EventEmit } from '@almadar/core';
25
- import type { IsometricTile, IsometricUnit, IsometricFeature, ActiveEffect } from '../../shared/isometricTypes';
26
- import type { ResolvedFrame } from '../../shared/spriteAnimationTypes';
27
- import type { UiError } from '../../../core/atoms/types';
28
- export interface TileCoord {
29
- x: number;
30
- y: number;
31
- }
32
- /** Projection axis. iso/hex/flat use `isoToScreen`; `free` is pixel-direct; `side`
33
- * is side-view pixel space with platforms (gravity lives in the LOLO model). */
34
- export type Projection = 'isometric' | 'hex' | 'flat' | 'free' | 'side';
35
- /** Camera behavior. `pan-zoom` = user drag+wheel; `follow` = track the player/
36
- * selected unit; `fixed` = no camera motion. */
37
- export type CameraMode = 'pan-zoom' | 'follow' | 'fixed';
38
- /** A side-view platform (AABB rect). `side` projection only. */
39
- export interface Platform {
40
- x: number;
41
- y: number;
42
- width: number;
43
- height: number;
44
- type?: 'ground' | 'platform' | 'hazard' | 'goal';
45
- }
46
- /** A side-view player. The model owns physics; Canvas2D only interpolates+draws. */
47
- export interface SidePlayer {
48
- x: number;
49
- y: number;
50
- width?: number;
51
- height?: number;
52
- vx?: number;
53
- vy?: number;
54
- grounded?: boolean;
55
- facingRight?: boolean;
56
- /** Animation state name — driven by the LOLO state machine (e.g. "idle", "walk", "jump"). */
57
- animation?: string;
58
- /** Frame index within the animation — driven by the LOLO state machine. */
59
- frame?: number;
60
- }
61
- export interface Canvas2DProps {
62
- /** Additional CSS classes */
63
- className?: string;
64
- /** Loading state indicator */
65
- isLoading?: boolean;
66
- /** Error state */
67
- error?: UiError | null;
68
- /** Projection axis (default 'isometric'). Replaces the old `tileLayout`. */
69
- projection?: Projection;
70
- /** Tiles to render */
71
- tiles?: IsometricTile[];
72
- /** Units on the board */
73
- units?: IsometricUnit[];
74
- /** Features (resources, portals, buildings, etc.) */
75
- features?: IsometricFeature[];
76
- /** Active visual effects, drawn after units */
77
- effects?: ActiveEffect[];
78
- /** Side-view platforms (AABB). `projection:'side'` only. */
79
- platforms?: Platform[];
80
- /** Side-view player. `projection:'side'` only. */
81
- player?: SidePlayer;
82
- /** Background image (tiled behind iso/hex/flat/free; stretched in side).
83
- * A bare URL string is accepted as shorthand for a standalone backdrop. */
84
- backgroundImage?: AssetUrl | Asset;
85
- /** Currently selected unit ID */
86
- selectedUnitId?: string | null;
87
- /** Valid move positions (pulsing green highlights) */
88
- validMoves?: TileCoord[];
89
- /** Attack target positions (pulsing red highlights) */
90
- attackTargets?: TileCoord[];
91
- /** Hovered tile position */
92
- hoveredTile?: TileCoord | null;
93
- /** Emits UI:{tileClickEvent} with { x, y } on tile click */
94
- tileClickEvent?: EventEmit<{
95
- x: number;
96
- y: number;
97
- }>;
98
- /** Emits UI:{unitClickEvent} with { unitId } on unit click */
99
- unitClickEvent?: EventEmit<{
100
- unitId: string;
101
- }>;
102
- /** Emits UI:{tileHoverEvent} with { x, y } on tile hover */
103
- tileHoverEvent?: EventEmit<{
104
- x: number;
105
- y: number;
106
- }>;
107
- /** Emits UI:{tileLeaveEvent} with {} on tile leave */
108
- tileLeaveEvent?: EventEmit<Record<string, never>>;
109
- /** Maps a keydown `e.code` → the board's SEMANTIC event, e.g. `{ ArrowLeft: "LEFT", KeyA: "LEFT", Space: "JUMP" }`.
110
- * The input layer emits `UI:<event>` so the FSM stays device-agnostic — keyboard and d-pad converge on the same events. */
111
- keyMap?: Record<string, string>;
112
- /** Maps a keyup `e.code` → the board's SEMANTIC event, e.g. `{ ArrowLeft: "STOP" }`. Omit a key to ignore its release (e.g. jump). */
113
- keyUpMap?: Record<string, string>;
114
- /** Camera behavior (default 'pan-zoom'). */
115
- camera?: CameraMode;
116
- /** Render scale (0.4 = 40% zoom). */
117
- scale?: number;
118
- /** Extra scale multiplier for unit draw size. 1 = default. */
119
- unitScale?: number;
120
- /** Toggle minimap overlay. */
121
- showMinimap?: boolean;
122
- /** Opt-in internal RAF clock. DEFAULT OFF — the LOLO state machine drives the clock. */
123
- animate?: {
124
- fps: number;
125
- };
126
- /**
127
- * Opt-in: smooth-interpolate unit positions between LOLO tick snapshots
128
- * via a `requestAnimationFrame` loop (same fixed-timestep technique
129
- * `SideCanvas2D` already uses for the player), instead of the default
130
- * tick-rate-cadence redraw. DEFAULT OFF — for continuous-movement boards
131
- * only; tile-snapped boards see no behavior change.
132
- */
133
- interpolateUnits?: boolean;
134
- /** Show debug grid lines and coordinates. */
135
- debug?: boolean;
136
- /** Ratio of unit draw height to scaledFloorHeight. Default 1.5. */
137
- spriteHeightRatio?: number;
138
- /** Max unit draw width as a ratio of scaledTileWidth. Default 0.6. */
139
- spriteMaxWidthRatio?: number;
140
- /** Override for the diamond-top Y offset within the tile sprite. */
141
- diamondTopY?: number;
142
- /** Resolve terrain sprite from terrain key — a bare URL or an Asset (atlas sub-texture ref). */
143
- getTerrainSprite?: (terrain: string) => string | Asset | undefined;
144
- /** Resolve feature sprite from feature type key — a bare URL or an Asset. */
145
- getFeatureSprite?: (featureType: string) => string | Asset | undefined;
146
- /** Resolve unit static sprite — a bare URL or an Asset. */
147
- getUnitSprite?: (unit: IsometricUnit) => string | Asset | undefined;
148
- /** Resolve animated sprite sheet frame for a unit */
149
- resolveUnitFrame?: (unitId: string) => ResolvedFrame | null;
150
- /** Additional sprite URLs to preload (e.g., effect sprites) */
151
- effectSpriteUrls?: string[];
152
- /** Draw canvas effects after units (canvas-specific: cannot be declarative) */
153
- onDrawEffects?: (ctx: CanvasRenderingContext2D, animTime: number, getImage: (url: string) => HTMLImageElement | undefined) => void;
154
- /** Player sprite URL for `side`. */
155
- playerSprite?: Asset;
156
- /** Platform-type → tile sprite URL map for `side`. */
157
- tileSprites?: Record<string, Asset>;
158
- /** Background color for `side` (when no backgroundImage). */
159
- bgColor?: string;
160
- /** World dimensions for `side` follow-camera clamp. */
161
- worldWidth?: number;
162
- worldHeight?: number;
163
- /** Manifest mapping entity keys to resolved Asset objects (fallback resolution). */
164
- assetManifest?: {
165
- terrains?: Record<string, Asset>;
166
- units?: Record<string, Asset>;
167
- features?: Record<string, Asset>;
168
- effects?: Record<string, Asset>;
169
- };
170
- }
171
- export declare function Canvas2D({ className, isLoading, error, projection, tiles: _tilesPropRaw, units: _unitsPropRaw, features: _featuresPropRaw, effects: _effectsPropRaw, platforms, player, backgroundImage: backgroundImageRaw, selectedUnitId, validMoves, attackTargets, hoveredTile, tileClickEvent, unitClickEvent, tileHoverEvent, tileLeaveEvent, keyMap, keyUpMap, camera, scale, unitScale, showMinimap, animate, interpolateUnits, debug, spriteHeightRatio, spriteMaxWidthRatio, diamondTopY: diamondTopYProp, getTerrainSprite, getFeatureSprite, getUnitSprite, resolveUnitFrame, effectSpriteUrls, onDrawEffects, playerSprite, tileSprites, bgColor, worldWidth, worldHeight, assetManifest, }: Canvas2DProps): React.JSX.Element;
172
- export declare namespace Canvas2D {
173
- var displayName: string;
174
- }
175
- export default Canvas2D;
@@ -1,31 +0,0 @@
1
- /**
2
- * EventLog Component
3
- *
4
- * Scrolling log of events during playback in the Event Handler tier.
5
- * Shows the chain reaction as events cascade through objects.
6
- *
7
- * @packageDocumentation
8
- */
9
- import React from 'react';
10
- export interface EventLogEntry {
11
- id: string;
12
- timestamp: number;
13
- icon: string;
14
- message: string;
15
- status: 'pending' | 'active' | 'done' | 'error';
16
- }
17
- export interface EventLogProps {
18
- /** Log entries */
19
- entries: EventLogEntry[];
20
- /** Max visible height before scroll */
21
- maxHeight?: number;
22
- /** Title label */
23
- label?: string;
24
- /** Additional CSS classes */
25
- className?: string;
26
- }
27
- export declare function EventLog({ entries, maxHeight, label, className, }: EventLogProps): React.JSX.Element;
28
- export declare namespace EventLog {
29
- var displayName: string;
30
- }
31
- export default EventLog;
@@ -1,35 +0,0 @@
1
- import * as React from 'react';
2
- import type { EventEmit, Asset } from '@almadar/core';
3
- import type { IconInput } from '../../../core/atoms/index';
4
- export interface InventoryGridItem {
5
- id: string;
6
- icon?: IconInput;
7
- assetUrl?: Asset;
8
- label?: string;
9
- quantity?: number;
10
- rarity?: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary';
11
- }
12
- export interface InventoryGridProps {
13
- /** Array of items to display in the grid */
14
- items: InventoryGridItem[];
15
- /** Number of columns in the grid */
16
- columns?: number;
17
- /** Total number of slots (empty slots fill remaining space) */
18
- totalSlots?: number;
19
- /** Currently selected item ID */
20
- selectedId?: string;
21
- /** Callback when an item is selected */
22
- onSelect?: (id: string) => void;
23
- /** Event bus event name for selection */
24
- selectEvent?: EventEmit<{
25
- id: string;
26
- }>;
27
- /** Size variant for all item slots */
28
- size?: 'sm' | 'md' | 'lg';
29
- /** Additional CSS classes */
30
- className?: string;
31
- }
32
- export declare function InventoryGrid({ items, columns, totalSlots, selectedId, onSelect, selectEvent, size, className, }: InventoryGridProps): React.JSX.Element;
33
- export declare namespace InventoryGrid {
34
- var displayName: string;
35
- }
@@ -1,32 +0,0 @@
1
- /**
2
- * ObjectRulePanel Component
3
- *
4
- * Shows the rules panel for a selected world object in the Event Handler tier.
5
- * Displays object info, its current state (via TraitStateViewer), and
6
- * a list of WHEN/THEN rules the kid has set.
7
- *
8
- * @packageDocumentation
9
- */
10
- import React from 'react';
11
- import type { EntityRow, EventEmit } from '@almadar/core';
12
- import { type RuleDefinition } from './RuleEditor';
13
- export interface ObjectRulePanelProps {
14
- /** The selected puzzle-object row (`EntityRow` carrying the editable object data) */
15
- object: EntityRow;
16
- /** Called when rules change (callback path) */
17
- onRulesChange?: (objectId: string, rules: RuleDefinition[]) => void;
18
- /** Emits UI:{rulesChangeEvent} with { objectId, rules } when rules change (declarative path) */
19
- rulesChangeEvent?: EventEmit<{
20
- objectId: string;
21
- rules: RuleDefinition[];
22
- }>;
23
- /** Whether editing is disabled */
24
- disabled?: boolean;
25
- /** Additional CSS classes */
26
- className?: string;
27
- }
28
- export declare function ObjectRulePanel({ object, onRulesChange, rulesChangeEvent, disabled, className, }: ObjectRulePanelProps): React.JSX.Element;
29
- export declare namespace ObjectRulePanel {
30
- var displayName: string;
31
- }
32
- export default ObjectRulePanel;
@@ -1,26 +0,0 @@
1
- import * as React from 'react';
2
- import type { Asset } from '@almadar/core';
3
- import type { IconInput } from '../../../core/atoms/index';
4
- export interface ResourceBarResource {
5
- /** Icon for the resource */
6
- icon?: IconInput;
7
- assetUrl?: Asset;
8
- /** Resource name */
9
- label: string;
10
- /** Current amount */
11
- value?: number;
12
- /** Maximum amount (displays as bar if provided) */
13
- max?: number;
14
- }
15
- export interface ResourceBarProps {
16
- /** Resources to display */
17
- resources: ResourceBarResource[];
18
- /** Size variant */
19
- size?: 'sm' | 'md' | 'lg';
20
- /** Additional CSS classes */
21
- className?: string;
22
- }
23
- export declare function ResourceBar({ resources, size, className, }: ResourceBarProps): React.JSX.Element;
24
- export declare namespace ResourceBar {
25
- var displayName: string;
26
- }