@almadar/ui 5.79.2 → 5.80.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 (80) hide show
  1. package/dist/avl/index.cjs +1673 -1590
  2. package/dist/avl/index.css +3 -3
  3. package/dist/avl/index.js +464 -381
  4. package/dist/components/core/atoms/FlipContainer.d.ts +1 -1
  5. package/dist/components/core/molecules/Card.d.ts +1 -1
  6. package/dist/components/core/molecules/DataGrid.d.ts +1 -1
  7. package/dist/components/core/molecules/DataList.d.ts +1 -1
  8. package/dist/components/core/molecules/DocPagination.d.ts +1 -8
  9. package/dist/components/core/molecules/DocSearch.d.ts +1 -8
  10. package/dist/components/core/molecules/FlipCard.d.ts +1 -1
  11. package/dist/components/core/molecules/MapView.d.ts +1 -18
  12. package/dist/components/core/molecules/SortableList.d.ts +1 -1
  13. package/dist/components/core/molecules/TableView.d.ts +1 -1
  14. package/dist/components/core/molecules/WizardContainer.d.ts +7 -1
  15. package/dist/components/core/organisms/DataTable.d.ts +1 -1
  16. package/dist/components/core/organisms/DrawerSlot.d.ts +2 -0
  17. package/dist/components/core/organisms/ModalSlot.d.ts +2 -0
  18. package/dist/components/core/organisms/ToastSlot.d.ts +2 -0
  19. package/dist/components/core/organisms/debug/RuntimeDebugger.d.ts +1 -10
  20. package/dist/components/core/organisms/debug/tabs/EntitiesTab.d.ts +1 -2
  21. package/dist/components/core/organisms/debug/tabs/EventDispatcherTab.d.ts +1 -2
  22. package/dist/components/core/organisms/debug/tabs/EventFlowTab.d.ts +1 -6
  23. package/dist/components/core/organisms/debug/tabs/GuardsPanel.d.ts +1 -6
  24. package/dist/components/core/organisms/debug/tabs/ServerBridgeTab.d.ts +1 -12
  25. package/dist/components/core/organisms/debug/tabs/TicksTab.d.ts +1 -2
  26. package/dist/components/core/organisms/debug/tabs/TraitsTab.d.ts +1 -2
  27. package/dist/components/core/organisms/debug/tabs/TransitionTimeline.d.ts +1 -11
  28. package/dist/components/core/organisms/debug/tabs/VerificationTab.d.ts +1 -8
  29. package/dist/components/core/templates/CounterTemplate.d.ts +7 -0
  30. package/dist/components/game/2d/atoms/ActionButton.d.ts +4 -3
  31. package/dist/components/game/2d/atoms/ChoiceButton.d.ts +4 -3
  32. package/dist/components/game/2d/atoms/ComboCounter.d.ts +1 -2
  33. package/dist/components/game/2d/atoms/ControlButton.d.ts +1 -2
  34. package/dist/components/game/2d/atoms/DamageNumber.d.ts +1 -2
  35. package/dist/components/game/2d/atoms/DialogueBubble.d.ts +1 -2
  36. package/dist/components/game/2d/atoms/GameAudioToggle.d.ts +6 -1
  37. package/dist/components/game/2d/atoms/GameIcon.d.ts +1 -2
  38. package/dist/components/game/2d/atoms/HealthBar.d.ts +6 -2
  39. package/dist/components/game/2d/atoms/ItemSlot.d.ts +4 -3
  40. package/dist/components/game/2d/atoms/MiniMap.d.ts +6 -2
  41. package/dist/components/game/2d/atoms/ResourceCounter.d.ts +1 -2
  42. package/dist/components/game/2d/atoms/ScoreDisplay.d.ts +1 -2
  43. package/dist/components/game/2d/atoms/StatusEffect.d.ts +1 -2
  44. package/dist/components/game/2d/atoms/TimerDisplay.d.ts +4 -2
  45. package/dist/components/game/2d/atoms/TurnIndicator.d.ts +1 -2
  46. package/dist/components/game/2d/atoms/WaypointMarker.d.ts +1 -2
  47. package/dist/components/game/2d/molecules/ControlGrid.d.ts +3 -1
  48. package/dist/components/game/2d/molecules/GameHud.d.ts +1 -2
  49. package/dist/components/game/2d/molecules/GameMenu.d.ts +4 -8
  50. package/dist/components/game/2d/molecules/InventoryGrid.d.ts +1 -2
  51. package/dist/components/game/2d/molecules/ResourceBar.d.ts +1 -2
  52. package/dist/components/game/2d/molecules/StatBadge.d.ts +1 -2
  53. package/dist/components/game/2d/organisms/CityBuilderBoard.d.ts +2 -0
  54. package/dist/components/game/2d/organisms/PlatformerBoard.d.ts +3 -1
  55. package/dist/components/game/2d/organisms/RoguelikeBoard.d.ts +2 -0
  56. package/dist/components/game/2d/organisms/SequencerBoard.d.ts +5 -1
  57. package/dist/components/game/2d/organisms/SimulationControls.d.ts +25 -8
  58. package/dist/components/game/2d/organisms/TanksBoard.d.ts +4 -2
  59. package/dist/components/game/2d/organisms/TopDownShooterBoard.d.ts +2 -0
  60. package/dist/components/game/2d/organisms/TowerDefenseBoard.d.ts +2 -0
  61. package/dist/components/game/2d/organisms/TraitSlot.d.ts +5 -5
  62. package/dist/components/game/2d/templates/GameShell.d.ts +5 -0
  63. package/dist/components/game/2d/templates/GameTemplate.d.ts +3 -0
  64. package/dist/components/game/shared/lib/editorUtils.d.ts +8 -8
  65. package/dist/components/index.cjs +270 -155
  66. package/dist/components/index.css +3 -3
  67. package/dist/components/index.js +272 -157
  68. package/dist/hooks/useGitHub.d.ts +7 -7
  69. package/dist/marketing/index.cjs +2 -2
  70. package/dist/marketing/index.js +2 -2
  71. package/dist/providers/EventBusProvider.d.ts +1 -1
  72. package/dist/providers/SelectionProvider.d.ts +1 -1
  73. package/dist/providers/ServerBridge.d.ts +1 -1
  74. package/dist/providers/index.cjs +1536 -1453
  75. package/dist/providers/index.css +3 -3
  76. package/dist/providers/index.js +436 -353
  77. package/dist/runtime/index.cjs +1530 -1447
  78. package/dist/runtime/index.css +3 -3
  79. package/dist/runtime/index.js +440 -357
  80. package/package.json +1 -1
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import { type IconInput } from '../../../core/atoms/Icon';
3
2
  import type { Asset } from '@almadar/core';
4
3
  export interface ScoreDisplayProps {
@@ -19,7 +18,7 @@ export interface ScoreDisplayProps {
19
18
  /** Number formatting locale */
20
19
  locale?: string;
21
20
  }
22
- export declare function ScoreDisplay({ assetUrl, value, score, label, icon, size, className, locale, }: ScoreDisplayProps): React.JSX.Element;
21
+ export declare function ScoreDisplay({ assetUrl, value, score, label, icon, size, className, locale, }: ScoreDisplayProps): import("react/jsx-runtime").JSX.Element;
23
22
  export declare namespace ScoreDisplay {
24
23
  var displayName: string;
25
24
  }
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import { type IconInput } from '../../../core/atoms/Icon';
3
2
  import type { Asset } from '@almadar/core';
4
3
  export interface StatusEffectProps {
@@ -19,7 +18,7 @@ export interface StatusEffectProps {
19
18
  /** Additional CSS classes */
20
19
  className?: string;
21
20
  }
22
- export declare function StatusEffect({ assetUrl, icon, label, duration, stacks, variant, size, className, }: StatusEffectProps): React.JSX.Element;
21
+ export declare function StatusEffect({ assetUrl, icon, label, duration, stacks, variant, size, className, }: StatusEffectProps): import("react/jsx-runtime").JSX.Element;
23
22
  export declare namespace StatusEffect {
24
23
  var displayName: string;
25
24
  }
@@ -1,4 +1,4 @@
1
- import * as React from 'react';
1
+ import type { Asset } from '@almadar/core';
2
2
  export interface TimerDisplayProps {
3
3
  /** Time in seconds */
4
4
  seconds: number;
@@ -12,8 +12,10 @@ export interface TimerDisplayProps {
12
12
  className?: string;
13
13
  /** Seconds below which to pulse red */
14
14
  lowThreshold?: number;
15
+ /** Icon asset rendered to the left of the time value. Falls back to no icon. */
16
+ iconAsset?: Asset;
15
17
  }
16
- export declare function TimerDisplay({ seconds, running, format, size, className, lowThreshold, }: TimerDisplayProps): React.JSX.Element;
18
+ export declare function TimerDisplay({ seconds, running, format, size, className, lowThreshold, iconAsset, }: TimerDisplayProps): import("react/jsx-runtime").JSX.Element;
17
19
  export declare namespace TimerDisplay {
18
20
  var displayName: string;
19
21
  }
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import type { Asset } from '@almadar/core';
3
2
  export interface TurnIndicatorProps {
4
3
  /** Sprite asset — takes precedence over the dot indicator when provided */
@@ -16,7 +15,7 @@ export interface TurnIndicatorProps {
16
15
  /** Additional CSS classes */
17
16
  className?: string;
18
17
  }
19
- export declare function TurnIndicator({ assetUrl, currentTurn, maxTurns, activeTeam, phase, size, className, }: TurnIndicatorProps): React.JSX.Element;
18
+ export declare function TurnIndicator({ assetUrl, currentTurn, maxTurns, activeTeam, phase, size, className, }: TurnIndicatorProps): import("react/jsx-runtime").JSX.Element;
20
19
  export declare namespace TurnIndicator {
21
20
  var displayName: string;
22
21
  }
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import { type IconInput } from '../../../core/atoms/Icon';
3
2
  import type { Asset } from '@almadar/core';
4
3
  export interface WaypointMarkerProps {
@@ -17,7 +16,7 @@ export interface WaypointMarkerProps {
17
16
  /** Additional CSS classes */
18
17
  className?: string;
19
18
  }
20
- export declare function WaypointMarker({ assetUrl, label, icon, active, completed, size, className, }: WaypointMarkerProps): React.JSX.Element;
19
+ export declare function WaypointMarker({ assetUrl, label, icon, active, completed, size, className, }: WaypointMarkerProps): import("react/jsx-runtime").JSX.Element;
21
20
  export declare namespace WaypointMarker {
22
21
  var displayName: string;
23
22
  }
@@ -32,11 +32,13 @@ export interface ControlGridProps {
32
32
  direction: DPadDirection;
33
33
  pressed: boolean;
34
34
  }>;
35
+ /** Per-direction sprite assets for kind="dpad" buttons (e.g. Kenny arrow PNGs). Falls back to arrow emoji. */
36
+ directionAssets?: Partial<Record<DPadDirection, Asset>>;
35
37
  size?: 'sm' | 'md' | 'lg';
36
38
  disabled?: boolean;
37
39
  className?: string;
38
40
  }
39
- export declare function ControlGrid({ kind, buttons, layout, includeDiagonals, onAction, actionEvent, onDirection, directionEvent, size, disabled, className, }: ControlGridProps): React.JSX.Element;
41
+ export declare function ControlGrid({ kind, buttons, layout, includeDiagonals, onAction, actionEvent, onDirection, directionEvent, directionAssets, size, disabled, className, }: ControlGridProps): React.JSX.Element;
40
42
  export declare namespace ControlGrid {
41
43
  var displayName: string;
42
44
  }
@@ -1,4 +1,3 @@
1
- import * as React from "react";
2
1
  import { type StatBadgeProps } from "./StatBadge";
3
2
  import type { Asset } from "@almadar/core";
4
3
  import type { IconInput } from "../../../core/atoms/index";
@@ -46,7 +45,7 @@ export interface GameHudProps {
46
45
  /** Whether to use a semi-transparent background */
47
46
  transparent?: boolean;
48
47
  }
49
- export declare function GameHud({ position: propPosition, stats: propStats, items, elements, size, className, transparent, }: GameHudProps): React.JSX.Element;
48
+ export declare function GameHud({ position: propPosition, stats: propStats, items, elements, size, className, transparent, }: GameHudProps): import("react/jsx-runtime").JSX.Element;
50
49
  export declare namespace GameHud {
51
50
  var displayName: string;
52
51
  }
@@ -1,6 +1,4 @@
1
- import * as React from "react";
2
- import type { EventKey, EventPayload } from "@almadar/core";
3
- import { type EventBusContextType } from "../../../../hooks/useEventBus";
1
+ import type { EventKey, EventPayload, Asset } from "@almadar/core";
4
2
  export type MenuOption = EventPayload & {
5
3
  /** Optional ID (generated from index if not provided) */
6
4
  id?: string;
@@ -30,16 +28,14 @@ export interface GameMenuProps {
30
28
  menuItems?: readonly MenuOption[];
31
29
  /** Called when an option is selected (legacy callback, prefer event bus) */
32
30
  onSelect?: (option: MenuOption) => void;
33
- /** Event bus for emitting UI events (optional, uses hook if not provided) */
34
- eventBus?: EventBusContextType;
35
31
  /** Background image or gradient */
36
32
  background?: string;
37
- /** Logo image URL */
38
- logo?: string;
33
+ /** Logo asset */
34
+ logo?: Asset;
39
35
  /** Additional CSS classes */
40
36
  className?: string;
41
37
  }
42
- export declare function GameMenu({ title, subtitle, options, menuItems, onSelect, eventBus: eventBusProp, background, logo, className, }: GameMenuProps): React.JSX.Element;
38
+ export declare function GameMenu({ title, subtitle, options, menuItems, onSelect, background, logo, className, }: GameMenuProps): import("react/jsx-runtime").JSX.Element;
43
39
  export declare namespace GameMenu {
44
40
  var displayName: string;
45
41
  }
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import type { EventEmit, Asset } from '@almadar/core';
3
2
  import type { IconInput } from '../../../core/atoms/index';
4
3
  export interface InventoryGridItem {
@@ -29,7 +28,7 @@ export interface InventoryGridProps {
29
28
  /** Additional CSS classes */
30
29
  className?: string;
31
30
  }
32
- export declare function InventoryGrid({ items, columns, totalSlots, selectedId, onSelect, selectEvent, size, className, }: InventoryGridProps): React.JSX.Element;
31
+ export declare function InventoryGrid({ items, columns, totalSlots, selectedId, onSelect, selectEvent, size, className, }: InventoryGridProps): import("react/jsx-runtime").JSX.Element;
33
32
  export declare namespace InventoryGrid {
34
33
  var displayName: string;
35
34
  }
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import type { Asset } from '@almadar/core';
3
2
  import type { IconInput } from '../../../core/atoms/index';
4
3
  export interface ResourceBarResource {
@@ -20,7 +19,7 @@ export interface ResourceBarProps {
20
19
  /** Additional CSS classes */
21
20
  className?: string;
22
21
  }
23
- export declare function ResourceBar({ resources, size, className, }: ResourceBarProps): React.JSX.Element;
22
+ export declare function ResourceBar({ resources, size, className, }: ResourceBarProps): import("react/jsx-runtime").JSX.Element;
24
23
  export declare namespace ResourceBar {
25
24
  var displayName: string;
26
25
  }
@@ -1,4 +1,3 @@
1
- import * as React from 'react';
2
1
  import { type IconInput } from '../../../core/atoms/Icon';
3
2
  import type { Asset } from '@almadar/core';
4
3
  /**
@@ -33,7 +32,7 @@ export interface StatBadgeProps {
33
32
  /** Additional CSS classes */
34
33
  className?: string;
35
34
  }
36
- export declare function StatBadge({ assetUrl, iconUrl, label, value, max, format, icon, size, variant, className, source: _source, field: _field, }: StatBadgeProps): React.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;
37
36
  export declare namespace StatBadge {
38
37
  var displayName: string;
39
38
  }
@@ -6,6 +6,8 @@ type CityBuilderAssetManifest = {
6
6
  terrains?: Record<string, Asset>;
7
7
  units?: Record<string, Asset>;
8
8
  features?: Record<string, Asset>;
9
+ /** HUD chrome assets (panel backgrounds, stat icons, etc.) keyed by role. */
10
+ ui?: Record<string, Asset>;
9
11
  };
10
12
  export interface CityBuilderTile {
11
13
  x: number;
@@ -25,6 +25,8 @@ export interface PlatformerBoardProps {
25
25
  playerSprite?: Asset;
26
26
  /** Map of platform type to tile sprite */
27
27
  tileSprites?: Record<string, Asset>;
28
+ /** HUD chrome assets (panel backgrounds, stat icons, etc.) keyed by role. */
29
+ ui?: Record<string, Asset>;
28
30
  /** Canvas background color (not supported by Canvas2D; kept for API compat) */
29
31
  bgColor?: string;
30
32
  /** Emits UI:{keyEvent} with { key } on keydown (replaces per-direction events) */
@@ -39,7 +41,7 @@ export interface PlatformerBoardProps {
39
41
  }>;
40
42
  className?: string;
41
43
  }
42
- export declare function PlatformerBoard({ entity, player: propPlayer, platforms: propPlatforms, result: propResult, lives: propLives, score: propScore, level: propLevel, worldWidth, worldHeight, canvasWidth: _canvasWidth, canvasHeight: _canvasHeight, playerSprite, tileSprites, bgColor: _bgColor, keyEvent, playAgainEvent, gameEndEvent, className, }: PlatformerBoardProps): React.JSX.Element;
44
+ export declare function PlatformerBoard({ entity, player: propPlayer, platforms: propPlatforms, result: propResult, lives: propLives, score: propScore, level: propLevel, worldWidth, worldHeight, canvasWidth: _canvasWidth, canvasHeight: _canvasHeight, playerSprite, tileSprites, ui: _ui, bgColor: _bgColor, keyEvent, playAgainEvent, gameEndEvent, className, }: PlatformerBoardProps): React.JSX.Element;
43
45
  export declare namespace PlatformerBoard {
44
46
  var displayName: string;
45
47
  }
@@ -23,6 +23,8 @@ type RoguelikeAssetManifest = {
23
23
  terrains?: Record<string, Asset>;
24
24
  units?: Record<string, Asset>;
25
25
  features?: Record<string, Asset>;
26
+ /** HUD chrome assets (panel backgrounds, stat icons, etc.) keyed by role. */
27
+ ui?: Record<string, Asset>;
26
28
  };
27
29
  export interface RoguelikeBoardProps extends DisplayStateProps {
28
30
  entity?: EntityRow | readonly EntityRow[];
@@ -57,8 +57,12 @@ export interface SequencerBoardProps extends DisplayStateProps {
57
57
  }>;
58
58
  /** Emits UI:{playAgainEvent} with {} on reset */
59
59
  playAgainEvent?: EventEmit<Record<string, never>>;
60
+ /** Emits UI:{stepEvent} with { step } during playback animation advancement */
61
+ stepEvent?: EventEmit<{
62
+ step: number;
63
+ }>;
60
64
  }
61
- export declare function SequencerBoard({ entity, categoryColors, stepDurationMs, playEvent, completeEvent, placeEvent, removeEvent, checkEvent, playAgainEvent, className, }: SequencerBoardProps): React.JSX.Element | null;
65
+ export declare function SequencerBoard({ entity, categoryColors, stepDurationMs, playEvent, completeEvent, placeEvent, removeEvent, checkEvent, playAgainEvent, stepEvent, className, }: SequencerBoardProps): React.JSX.Element | null;
62
66
  export declare namespace SequencerBoard {
63
67
  var displayName: string;
64
68
  }
@@ -4,7 +4,7 @@
4
4
  * Play/pause/step/reset controls with speed and parameter sliders.
5
5
  */
6
6
  import React from 'react';
7
- import type { Asset } from '@almadar/core';
7
+ import type { Asset, EventEmit } from '@almadar/core';
8
8
  export interface SimulationParameter {
9
9
  value: number;
10
10
  min: number;
@@ -16,19 +16,36 @@ export interface SimulationControlsProps {
16
16
  running: boolean;
17
17
  speed: number;
18
18
  parameters: Record<string, SimulationParameter>;
19
- onPlay: () => void;
20
- onPause: () => void;
21
- onStep: () => void;
22
- onReset: () => void;
23
- onSpeedChange: (speed: number) => void;
24
- onParameterChange: (name: string, value: number) => void;
19
+ onPlay?: () => void;
20
+ onPause?: () => void;
21
+ onStep?: () => void;
22
+ onReset?: () => void;
23
+ onSpeedChange?: (speed: number) => void;
24
+ onParameterChange?: (name: string, value: number) => void;
25
+ /** Emits UI:{playEvent} on play */
26
+ playEvent?: EventEmit<Record<string, never>>;
27
+ /** Emits UI:{pauseEvent} on pause */
28
+ pauseEvent?: EventEmit<Record<string, never>>;
29
+ /** Emits UI:{stepEvent} on step */
30
+ stepEvent?: EventEmit<Record<string, never>>;
31
+ /** Emits UI:{resetEvent} on reset */
32
+ resetEvent?: EventEmit<Record<string, never>>;
33
+ /** Emits UI:{speedChangeEvent} with { speed } on speed change */
34
+ speedChangeEvent?: EventEmit<{
35
+ speed: number;
36
+ }>;
37
+ /** Emits UI:{parameterChangeEvent} with { name, value } on parameter change */
38
+ parameterChangeEvent?: EventEmit<{
39
+ name: string;
40
+ value: number;
41
+ }>;
25
42
  /** Optional per-semantic-key asset overrides for icons (play/pause/step/reset). */
26
43
  assetManifest?: {
27
44
  ui?: Record<string, Asset>;
28
45
  };
29
46
  className?: string;
30
47
  }
31
- export declare function SimulationControls({ running, speed, parameters, onPlay, onPause, onStep, onReset, onSpeedChange, onParameterChange, assetManifest, className, }: SimulationControlsProps): React.JSX.Element;
48
+ export declare function SimulationControls({ running, speed, parameters, onPlay, onPause, onStep, onReset, onSpeedChange, onParameterChange, playEvent, pauseEvent, stepEvent, resetEvent, speedChangeEvent, parameterChangeEvent, assetManifest, className, }: SimulationControlsProps): React.JSX.Element;
32
49
  export declare namespace SimulationControls {
33
50
  var displayName: string;
34
51
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { AssetUrl, EventEmit } from '@almadar/core';
2
+ import type { Asset, AssetUrl, EventEmit } from '@almadar/core';
3
3
  import type { IsometricTile, IsometricUnit, IsometricFeature } from '../../shared/isometricTypes';
4
4
  import type { DisplayStateProps } from '../../../core/organisms/types';
5
5
  import type { Canvas2DProps } from '../molecules/Canvas2D';
@@ -14,6 +14,8 @@ export interface TanksBoardProps extends DisplayStateProps {
14
14
  assetManifest?: Canvas2DProps['assetManifest'];
15
15
  /** Base URL prepended to manifest sprite paths */
16
16
  assetBaseUrl?: AssetUrl;
17
+ /** HUD chrome assets (panel backgrounds, stat icons, etc.) keyed by role. */
18
+ ui?: Record<string, Asset>;
17
19
  /** Render scale */
18
20
  scale?: number;
19
21
  /** Show minimap overlay */
@@ -30,7 +32,7 @@ export interface TanksBoardProps extends DisplayStateProps {
30
32
  unitId: string;
31
33
  }>;
32
34
  }
33
- export declare function TanksBoard({ tiles, units, features, assetManifest, assetBaseUrl, scale, showMinimap, enableCamera, tileClickEvent, unitClickEvent, isLoading, error, className, }: TanksBoardProps): React.ReactElement;
35
+ export declare function TanksBoard({ tiles, units, features, assetManifest, assetBaseUrl, ui: _ui, scale, showMinimap, enableCamera, tileClickEvent, unitClickEvent, isLoading, error, className, }: TanksBoardProps): React.ReactElement;
34
36
  export declare namespace TanksBoard {
35
37
  var displayName: string;
36
38
  }
@@ -5,6 +5,8 @@ type ShooterAssetManifest = {
5
5
  units?: Record<string, Asset>;
6
6
  features?: Record<string, Asset>;
7
7
  background?: Asset;
8
+ /** HUD chrome assets (panel backgrounds, stat icons, etc.) keyed by role. */
9
+ ui?: Record<string, Asset>;
8
10
  };
9
11
  export interface ShooterPlayer {
10
12
  x: number;
@@ -6,6 +6,8 @@ type TowerDefenseAssetManifest = {
6
6
  terrains?: Record<string, Asset>;
7
7
  units?: Record<string, Asset>;
8
8
  features?: Record<string, Asset>;
9
+ /** HUD chrome assets (panel backgrounds, stat icons, etc.) keyed by role. */
10
+ ui?: Record<string, Asset>;
9
11
  };
10
12
  export interface TowerDefenseTile {
11
13
  x: number;
@@ -18,7 +18,7 @@
18
18
  * @packageDocumentation
19
19
  */
20
20
  import React from 'react';
21
- import type { AssetUrl, EventEmit } from '@almadar/core';
21
+ import type { Asset, EventEmit } from '@almadar/core';
22
22
  import { type TraitStateMachineDefinition } from './TraitStateViewer';
23
23
  import type { UiError } from '../../../core/atoms/types';
24
24
  /** Data shape for a slot's equipped item */
@@ -29,8 +29,8 @@ export type SlotItemData = {
29
29
  description?: string;
30
30
  /** Emoji or text icon */
31
31
  iconEmoji?: string;
32
- /** Image URL icon (takes precedence over iconEmoji); falls back to iconEmoji when absent. */
33
- iconUrl?: AssetUrl;
32
+ /** Asset icon (takes precedence over iconEmoji); falls back to iconEmoji when absent. */
33
+ iconUrl?: Asset;
34
34
  /** Optional state machine for tooltip display */
35
35
  stateMachine?: TraitStateMachineDefinition;
36
36
  };
@@ -58,8 +58,8 @@ export interface TraitSlotProps {
58
58
  bg: string;
59
59
  border: string;
60
60
  }>;
61
- /** Optional tooltip frame image URL */
62
- tooltipFrameUrl?: AssetUrl;
61
+ /** Optional tooltip frame image asset */
62
+ tooltipFrameUrl?: Asset;
63
63
  /** Additional CSS classes */
64
64
  className?: string;
65
65
  /** Loading state */
@@ -13,6 +13,7 @@
13
13
  * @generated pattern — can be customised per-game via props
14
14
  */
15
15
  import React from "react";
16
+ import type { Asset } from "@almadar/core";
16
17
  export interface GameShellProps {
17
18
  /** Application / game title shown in the HUD bar */
18
19
  appName?: string;
@@ -24,6 +25,10 @@ export interface GameShellProps {
24
25
  showTopBar?: boolean;
25
26
  /** Game content rendered inside the full-screen area */
26
27
  children?: React.ReactNode;
28
+ /** Background image for the shell/main area (e.g. Kenny panel frame). Falls back to CSS #0a0a0f. */
29
+ backgroundAsset?: Asset;
30
+ /** Background image for the HUD bar. Falls back to CSS #12121f surface color. */
31
+ hudBackgroundAsset?: Asset;
27
32
  }
28
33
  /**
29
34
  * Full-viewport game shell layout.
@@ -6,6 +6,7 @@
6
6
  * **Atomic Design**: Composed using Box, Typography, and Layout molecules/atoms.
7
7
  */
8
8
  import React from "react";
9
+ import type { Asset } from "@almadar/core";
9
10
  import type { TemplateProps } from "../../../core/templates/types";
10
11
  export interface GameControls {
11
12
  onPlay?: () => void;
@@ -28,5 +29,7 @@ export interface GameTemplateProps extends TemplateProps {
28
29
  controls?: GameControls;
29
30
  /** Additional class name */
30
31
  className?: string;
32
+ /** Background image for the canvas area. Falls back to bg-muted flat color. */
33
+ backgroundAsset?: Asset;
31
34
  }
32
35
  export declare const GameTemplate: React.FC<GameTemplateProps>;
@@ -23,7 +23,7 @@ export interface CollapsibleSectionProps {
23
23
  };
24
24
  className?: string;
25
25
  }
26
- export declare function CollapsibleSection({ title, expanded, onToggle, children, assetManifest, className }: CollapsibleSectionProps): React.JSX.Element;
26
+ export declare function CollapsibleSection({ title, expanded, onToggle, children, assetManifest, className }: CollapsibleSectionProps): import("react/jsx-runtime").JSX.Element;
27
27
  export declare namespace CollapsibleSection {
28
28
  var displayName: string;
29
29
  }
@@ -36,7 +36,7 @@ export interface EditorSliderProps {
36
36
  onChange: (value: number) => void;
37
37
  className?: string;
38
38
  }
39
- export declare function EditorSlider({ label, value, min, max, step, onChange, className }: EditorSliderProps): React.JSX.Element;
39
+ export declare function EditorSlider({ label, value, min, max, step, onChange, className }: EditorSliderProps): import("react/jsx-runtime").JSX.Element;
40
40
  export declare namespace EditorSlider {
41
41
  var displayName: string;
42
42
  }
@@ -50,7 +50,7 @@ export interface EditorSelectProps {
50
50
  onChange: (value: string) => void;
51
51
  className?: string;
52
52
  }
53
- export declare function EditorSelect({ label, value, options, onChange, className }: EditorSelectProps): React.JSX.Element;
53
+ export declare function EditorSelect({ label, value, options, onChange, className }: EditorSelectProps): import("react/jsx-runtime").JSX.Element;
54
54
  export declare namespace EditorSelect {
55
55
  var displayName: string;
56
56
  }
@@ -60,7 +60,7 @@ export interface EditorCheckboxProps {
60
60
  onChange: (checked: boolean) => void;
61
61
  className?: string;
62
62
  }
63
- export declare function EditorCheckbox({ label, checked, onChange, className }: EditorCheckboxProps): React.JSX.Element;
63
+ export declare function EditorCheckbox({ label, checked, onChange, className }: EditorCheckboxProps): import("react/jsx-runtime").JSX.Element;
64
64
  export declare namespace EditorCheckbox {
65
65
  var displayName: string;
66
66
  }
@@ -71,7 +71,7 @@ export interface EditorTextInputProps {
71
71
  placeholder?: string;
72
72
  className?: string;
73
73
  }
74
- export declare function EditorTextInput({ label, value, onChange, placeholder, className }: EditorTextInputProps): React.JSX.Element;
74
+ export declare function EditorTextInput({ label, value, onChange, placeholder, className }: EditorTextInputProps): import("react/jsx-runtime").JSX.Element;
75
75
  export declare namespace EditorTextInput {
76
76
  var displayName: string;
77
77
  }
@@ -89,7 +89,7 @@ export interface StatusBarProps {
89
89
  featureCount?: number;
90
90
  className?: string;
91
91
  }
92
- export declare function StatusBar({ hoveredTile, mode, gridSize, unitCount, featureCount, className }: StatusBarProps): React.JSX.Element;
92
+ export declare function StatusBar({ hoveredTile, mode, gridSize, unitCount, featureCount, className }: StatusBarProps): import("react/jsx-runtime").JSX.Element;
93
93
  export declare namespace StatusBar {
94
94
  var displayName: string;
95
95
  }
@@ -99,7 +99,7 @@ export interface TerrainPaletteProps {
99
99
  onSelect: (terrain: string) => void;
100
100
  className?: string;
101
101
  }
102
- export declare function TerrainPalette({ terrains, selectedTerrain, onSelect, className }: TerrainPaletteProps): React.JSX.Element;
102
+ export declare function TerrainPalette({ terrains, selectedTerrain, onSelect, className }: TerrainPaletteProps): import("react/jsx-runtime").JSX.Element;
103
103
  export declare namespace TerrainPalette {
104
104
  var displayName: string;
105
105
  }
@@ -108,7 +108,7 @@ export interface EditorToolbarProps {
108
108
  onModeChange: (mode: EditorMode) => void;
109
109
  className?: string;
110
110
  }
111
- export declare function EditorToolbar({ mode, onModeChange, className }: EditorToolbarProps): React.JSX.Element;
111
+ export declare function EditorToolbar({ mode, onModeChange, className }: EditorToolbarProps): import("react/jsx-runtime").JSX.Element;
112
112
  export declare namespace EditorToolbar {
113
113
  var displayName: string;
114
114
  }