@almadar/ui 4.20.0 → 4.22.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.
- package/dist/avl/index.cjs +5 -1
- package/dist/avl/index.js +5 -1
- package/dist/components/index.cjs +5 -1
- package/dist/components/index.js +5 -1
- package/dist/components/molecules/Accordion.d.ts +5 -1
- package/dist/components/molecules/CalendarGrid.d.ts +8 -5
- package/dist/components/molecules/Card.d.ts +3 -3
- package/dist/components/molecules/Carousel.d.ts +4 -1
- package/dist/components/molecules/EmptyState.d.ts +2 -1
- package/dist/components/molecules/ErrorState.d.ts +2 -1
- package/dist/components/molecules/MapView.d.ts +7 -3
- package/dist/components/molecules/Modal.d.ts +2 -1
- package/dist/components/molecules/Pagination.d.ts +7 -2
- package/dist/components/molecules/SidePanel.d.ts +2 -1
- package/dist/components/molecules/Tabs.d.ts +7 -2
- package/dist/components/molecules/Toast.d.ts +3 -2
- package/dist/components/molecules/WizardProgress.d.ts +4 -1
- package/dist/components/molecules/game/ActionButtons.d.ts +5 -1
- package/dist/components/molecules/game/CraftingRecipe.d.ts +4 -1
- package/dist/components/molecules/game/DPad.d.ts +5 -1
- package/dist/components/molecules/game/DialogueBox.d.ts +7 -5
- package/dist/components/molecules/game/InventoryGrid.d.ts +4 -1
- package/dist/components/molecules/game/InventoryPanel.d.ts +12 -6
- package/dist/components/molecules/game/IsometricCanvas.d.ts +13 -4
- package/dist/components/molecules/game/PlatformerCanvas.d.ts +9 -4
- package/dist/components/organisms/GraphCanvas.d.ts +4 -2
- package/dist/components/organisms/MediaGallery.d.ts +4 -1
- package/dist/components/organisms/PageHeader.d.ts +2 -1
- package/dist/components/organisms/Sidebar.d.ts +6 -3
- package/dist/components/organisms/SignaturePad.d.ts +5 -2
- package/dist/components/organisms/game/BattleBoard.d.ts +20 -8
- package/dist/components/organisms/game/CanvasEffect.d.ts +2 -1
- package/dist/components/organisms/game/CastleBoard.d.ts +14 -3
- package/dist/components/organisms/game/GameCanvas3D.d.ts +52 -8
- package/dist/components/organisms/game/TraitSlot.d.ts +7 -2
- package/dist/components/organisms/game/WorldMapBoard.d.ts +22 -5
- package/dist/components/organisms/game/hooks/useBattleState.d.ts +19 -7
- package/dist/components/organisms/game/puzzles/builder/BuilderBoard.d.ts +5 -1
- package/dist/components/organisms/game/puzzles/classifier/ClassifierBoard.d.ts +5 -1
- package/dist/components/organisms/game/puzzles/debugger/DebuggerBoard.d.ts +5 -1
- package/dist/components/organisms/game/puzzles/event-handler/EventHandlerBoard.d.ts +5 -2
- package/dist/components/organisms/game/puzzles/negotiator/NegotiatorBoard.d.ts +5 -1
- package/dist/components/organisms/game/puzzles/sequencer/SequencerBoard.d.ts +8 -2
- package/dist/components/organisms/game/puzzles/simulator/SimulatorBoard.d.ts +5 -1
- package/dist/components/organisms/game/puzzles/state-architect/StateArchitectBoard.d.ts +6 -2
- package/dist/components/organisms/game/three/hooks/useGameCanvas3DEvents.d.ts +52 -8
- package/dist/providers/index.cjs +5 -1
- package/dist/providers/index.js +5 -1
- package/dist/runtime/index.cjs +5 -1
- package/dist/runtime/index.js +5 -1
- package/package.json +2 -2
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* - logoClickEvent — emitted when logo/brand area clicked
|
|
11
11
|
*/
|
|
12
12
|
import React from 'react';
|
|
13
|
+
import type { EventEmit } from '@almadar/core';
|
|
13
14
|
import type { LucideIcon } from 'lucide-react';
|
|
14
15
|
export interface SidebarItem {
|
|
15
16
|
/** Item ID */
|
|
@@ -55,14 +56,16 @@ export interface SidebarProps {
|
|
|
55
56
|
/** Default collapsed state */
|
|
56
57
|
defaultCollapsed?: boolean;
|
|
57
58
|
/** Event emitted when collapse state changes, payload: { collapsed: boolean } */
|
|
58
|
-
collapseChangeEvent?:
|
|
59
|
+
collapseChangeEvent?: EventEmit<{
|
|
60
|
+
collapsed: boolean;
|
|
61
|
+
}>;
|
|
59
62
|
/** Hide the collapse/expand button */
|
|
60
63
|
hideCollapseButton?: boolean;
|
|
61
64
|
/** Show a close button (for mobile) */
|
|
62
65
|
showCloseButton?: boolean;
|
|
63
66
|
/** Event emitted when close button is clicked */
|
|
64
|
-
closeEvent?: string
|
|
67
|
+
closeEvent?: EventEmit<Record<string, never>>;
|
|
65
68
|
/** Event emitted when logo/brand is clicked */
|
|
66
|
-
logoClickEvent?: string
|
|
69
|
+
logoClickEvent?: EventEmit<Record<string, never>>;
|
|
67
70
|
}
|
|
68
71
|
export declare const Sidebar: React.FC<SidebarProps>;
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - className for external styling
|
|
12
12
|
*/
|
|
13
13
|
import React from "react";
|
|
14
|
+
import type { EventEmit } from "@almadar/core";
|
|
14
15
|
export interface SignaturePadProps {
|
|
15
16
|
/** Label above the pad */
|
|
16
17
|
label?: string;
|
|
@@ -29,9 +30,11 @@ export interface SignaturePadProps {
|
|
|
29
30
|
/** Callback when signature changes */
|
|
30
31
|
onChange?: (dataUrl: string | null) => void;
|
|
31
32
|
/** Event to emit on sign */
|
|
32
|
-
signEvent?:
|
|
33
|
+
signEvent?: EventEmit<{
|
|
34
|
+
signature: string;
|
|
35
|
+
}>;
|
|
33
36
|
/** Event to emit on clear */
|
|
34
|
-
clearEvent?: string
|
|
37
|
+
clearEvent?: EventEmit<Record<string, never>>;
|
|
35
38
|
/** Entity name for schema-driven context */
|
|
36
39
|
entity?: string;
|
|
37
40
|
/** Loading state */
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* @packageDocumentation
|
|
19
19
|
*/
|
|
20
20
|
import React from 'react';
|
|
21
|
+
import type { EventEmit } from '@almadar/core';
|
|
21
22
|
import type { EntityDisplayProps } from '../types';
|
|
22
23
|
import type { IsometricTile, IsometricFeature } from './types/isometric';
|
|
23
24
|
import type { ResolvedFrame } from './types/spriteAnimation';
|
|
@@ -153,19 +154,30 @@ export interface BattleBoardProps extends Omit<EntityDisplayProps, 'entity'> {
|
|
|
153
154
|
effectSpriteUrls?: string[];
|
|
154
155
|
resolveUnitFrame?: (unitId: string) => ResolvedFrame | null;
|
|
155
156
|
/** Emits UI:{tileClickEvent} with { x, y } on tile click */
|
|
156
|
-
tileClickEvent?:
|
|
157
|
+
tileClickEvent?: EventEmit<{
|
|
158
|
+
x: number;
|
|
159
|
+
y: number;
|
|
160
|
+
}>;
|
|
157
161
|
/** Emits UI:{unitClickEvent} with { unitId } on unit click */
|
|
158
|
-
unitClickEvent?:
|
|
162
|
+
unitClickEvent?: EventEmit<{
|
|
163
|
+
unitId: string;
|
|
164
|
+
}>;
|
|
159
165
|
/** Emits UI:{endTurnEvent} with {} on end turn */
|
|
160
|
-
endTurnEvent?: string
|
|
166
|
+
endTurnEvent?: EventEmit<Record<string, never>>;
|
|
161
167
|
/** Emits UI:{cancelEvent} with {} on cancel */
|
|
162
|
-
cancelEvent?: string
|
|
163
|
-
/** Emits UI:{gameEndEvent} with { result } on game end */
|
|
164
|
-
gameEndEvent?:
|
|
168
|
+
cancelEvent?: EventEmit<Record<string, never>>;
|
|
169
|
+
/** Emits UI:{gameEndEvent} with { result: 'victory' | 'defeat' } on game end */
|
|
170
|
+
gameEndEvent?: EventEmit<{
|
|
171
|
+
result: 'victory' | 'defeat';
|
|
172
|
+
}>;
|
|
165
173
|
/** Emits UI:{playAgainEvent} with {} on play again / reset */
|
|
166
|
-
playAgainEvent?: string
|
|
174
|
+
playAgainEvent?: EventEmit<Record<string, never>>;
|
|
167
175
|
/** Emits UI:{attackEvent} with { attackerId, targetId, damage } on attack */
|
|
168
|
-
attackEvent?:
|
|
176
|
+
attackEvent?: EventEmit<{
|
|
177
|
+
attackerId: string;
|
|
178
|
+
targetId: string;
|
|
179
|
+
damage: number;
|
|
180
|
+
}>;
|
|
169
181
|
className?: string;
|
|
170
182
|
}
|
|
171
183
|
export declare function BattleBoard({ entity, scale, unitScale, header, sidebar, actions, overlay, gameOverOverlay, onAttack, onGameEnd, onUnitMove, calculateDamage, onDrawEffects, hasActiveEffects, effectSpriteUrls, resolveUnitFrame, tileClickEvent, unitClickEvent, endTurnEvent, cancelEvent, gameEndEvent, playAgainEvent, attackEvent, className, }: BattleBoardProps): React.JSX.Element;
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
* @packageDocumentation
|
|
25
25
|
*/
|
|
26
26
|
import * as React from 'react';
|
|
27
|
+
import type { EventEmit } from '@almadar/core';
|
|
27
28
|
import type { CombatActionType, EffectAssetManifest } from './types/effects';
|
|
28
29
|
export type { CombatActionType } from './types/effects';
|
|
29
30
|
export type { EffectAssetManifest } from './types/effects';
|
|
@@ -41,7 +42,7 @@ export interface CanvasEffectProps {
|
|
|
41
42
|
/** Callback when the effect animation completes */
|
|
42
43
|
onComplete?: () => void;
|
|
43
44
|
/** Declarative event: emits UI:{completeEvent} when the effect animation completes */
|
|
44
|
-
completeEvent?: string
|
|
45
|
+
completeEvent?: EventEmit<Record<string, never>>;
|
|
45
46
|
/** Additional CSS classes */
|
|
46
47
|
className?: string;
|
|
47
48
|
/** Loading state indicator */
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* @packageDocumentation
|
|
14
14
|
*/
|
|
15
15
|
import React from 'react';
|
|
16
|
+
import type { EventEmit } from '@almadar/core';
|
|
16
17
|
import type { IsometricTile, IsometricUnit, IsometricFeature } from './types/isometric';
|
|
17
18
|
/** Entity shape consumed by CastleBoard */
|
|
18
19
|
export interface CastleEntity {
|
|
@@ -71,11 +72,21 @@ export interface CastleBoardProps {
|
|
|
71
72
|
/** Called when any tile is clicked */
|
|
72
73
|
onTileClick?: (x: number, y: number) => void;
|
|
73
74
|
/** Event name to emit via event bus when a feature is clicked (emits UI:{featureClickEvent}) */
|
|
74
|
-
featureClickEvent?:
|
|
75
|
+
featureClickEvent?: EventEmit<{
|
|
76
|
+
featureId: string;
|
|
77
|
+
featureType: string;
|
|
78
|
+
x: number;
|
|
79
|
+
y: number;
|
|
80
|
+
}>;
|
|
75
81
|
/** Event name to emit via event bus when a unit is clicked (emits UI:{unitClickEvent}) */
|
|
76
|
-
unitClickEvent?:
|
|
82
|
+
unitClickEvent?: EventEmit<{
|
|
83
|
+
unitId: string;
|
|
84
|
+
}>;
|
|
77
85
|
/** Event name to emit via event bus when a tile is clicked (emits UI:{tileClickEvent}) */
|
|
78
|
-
tileClickEvent?:
|
|
86
|
+
tileClickEvent?: EventEmit<{
|
|
87
|
+
x: number;
|
|
88
|
+
y: number;
|
|
89
|
+
}>;
|
|
79
90
|
className?: string;
|
|
80
91
|
}
|
|
81
92
|
export declare function CastleBoard({ entity, scale, header, sidePanel, overlay, footer, onFeatureClick, onUnitClick, onTileClick, featureClickEvent, unitClickEvent, tileClickEvent, className, }: CastleBoardProps): React.JSX.Element;
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
* @packageDocumentation
|
|
15
15
|
*/
|
|
16
16
|
import React from 'react';
|
|
17
|
+
import type { EventEmit } from '@almadar/core';
|
|
17
18
|
import * as THREE from 'three';
|
|
18
19
|
import { AssetLoader } from './three/loaders/AssetLoader';
|
|
19
20
|
import type { IsometricTile, IsometricUnit, IsometricFeature } from './types/isometric';
|
|
@@ -106,21 +107,64 @@ export interface GameCanvas3DProps {
|
|
|
106
107
|
/** URLs to preload */
|
|
107
108
|
preloadAssets?: string[];
|
|
108
109
|
/** Declarative event: tile click */
|
|
109
|
-
tileClickEvent?:
|
|
110
|
+
tileClickEvent?: EventEmit<{
|
|
111
|
+
tileId: string;
|
|
112
|
+
x: number;
|
|
113
|
+
z: number;
|
|
114
|
+
type?: string;
|
|
115
|
+
terrain?: string;
|
|
116
|
+
elevation?: number;
|
|
117
|
+
}>;
|
|
110
118
|
/** Declarative event: unit click */
|
|
111
|
-
unitClickEvent?:
|
|
119
|
+
unitClickEvent?: EventEmit<{
|
|
120
|
+
unitId: string;
|
|
121
|
+
x: number;
|
|
122
|
+
z: number;
|
|
123
|
+
unitType?: string;
|
|
124
|
+
name?: string;
|
|
125
|
+
team?: string;
|
|
126
|
+
faction?: string;
|
|
127
|
+
health?: number;
|
|
128
|
+
maxHealth?: number;
|
|
129
|
+
}>;
|
|
112
130
|
/** Declarative event: feature click */
|
|
113
|
-
featureClickEvent?:
|
|
131
|
+
featureClickEvent?: EventEmit<{
|
|
132
|
+
featureId: string;
|
|
133
|
+
x: number;
|
|
134
|
+
z: number;
|
|
135
|
+
type?: string;
|
|
136
|
+
elevation?: number;
|
|
137
|
+
}>;
|
|
114
138
|
/** Declarative event: canvas click */
|
|
115
|
-
canvasClickEvent?:
|
|
139
|
+
canvasClickEvent?: EventEmit<{
|
|
140
|
+
clientX: number;
|
|
141
|
+
clientY: number;
|
|
142
|
+
button: number;
|
|
143
|
+
}>;
|
|
116
144
|
/** Declarative event: tile hover */
|
|
117
|
-
tileHoverEvent?:
|
|
145
|
+
tileHoverEvent?: EventEmit<{
|
|
146
|
+
tileId: string;
|
|
147
|
+
x: number;
|
|
148
|
+
z: number;
|
|
149
|
+
type?: string;
|
|
150
|
+
}>;
|
|
118
151
|
/** Declarative event: tile leave */
|
|
119
|
-
tileLeaveEvent?: string
|
|
152
|
+
tileLeaveEvent?: EventEmit<Record<string, never>>;
|
|
120
153
|
/** Declarative event: unit animation */
|
|
121
|
-
unitAnimationEvent?:
|
|
154
|
+
unitAnimationEvent?: EventEmit<{
|
|
155
|
+
unitId: string;
|
|
156
|
+
state: string;
|
|
157
|
+
timestamp: number;
|
|
158
|
+
}>;
|
|
122
159
|
/** Declarative event: camera change */
|
|
123
|
-
cameraChangeEvent?:
|
|
160
|
+
cameraChangeEvent?: EventEmit<{
|
|
161
|
+
position: {
|
|
162
|
+
x: number;
|
|
163
|
+
y: number;
|
|
164
|
+
z: number;
|
|
165
|
+
};
|
|
166
|
+
timestamp: number;
|
|
167
|
+
}>;
|
|
124
168
|
/** Loading message */
|
|
125
169
|
loadingMessage?: string;
|
|
126
170
|
/** Whether to use instancing for tiles */
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* @packageDocumentation
|
|
19
19
|
*/
|
|
20
20
|
import React from 'react';
|
|
21
|
+
import type { EventEmit } from '@almadar/core';
|
|
21
22
|
import { type TraitStateMachineDefinition } from './TraitStateViewer';
|
|
22
23
|
/** Data shape for a slot's equipped item */
|
|
23
24
|
export interface SlotItemData {
|
|
@@ -79,9 +80,13 @@ export interface TraitSlotProps {
|
|
|
79
80
|
/** Remove handler */
|
|
80
81
|
onRemove?: () => void;
|
|
81
82
|
/** Emits UI:{clickEvent} with { slotNumber } */
|
|
82
|
-
clickEvent?:
|
|
83
|
+
clickEvent?: EventEmit<{
|
|
84
|
+
slotNumber: number;
|
|
85
|
+
}>;
|
|
83
86
|
/** Emits UI:{removeEvent} with { slotNumber } */
|
|
84
|
-
removeEvent?:
|
|
87
|
+
removeEvent?: EventEmit<{
|
|
88
|
+
slotNumber: number;
|
|
89
|
+
}>;
|
|
85
90
|
}
|
|
86
91
|
export declare function TraitSlot({ slotNumber, equippedItem, locked, lockLabel, selected, size, showTooltip, categoryColors, tooltipFrameUrl, className, feedback, onItemDrop, draggable, onDragStart, onClick, onRemove, clickEvent, removeEvent, }: TraitSlotProps): React.JSX.Element;
|
|
87
92
|
export declare namespace TraitSlot {
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* @packageDocumentation
|
|
20
20
|
*/
|
|
21
21
|
import React from 'react';
|
|
22
|
+
import type { EventEmit } from '@almadar/core';
|
|
22
23
|
import type { IsometricFeature } from './types/isometric';
|
|
23
24
|
import type { ResolvedFrame } from './types/spriteAnimation';
|
|
24
25
|
/** A hero on the world map */
|
|
@@ -125,15 +126,31 @@ export interface WorldMapBoardProps {
|
|
|
125
126
|
y: number;
|
|
126
127
|
}, range: number) => boolean;
|
|
127
128
|
/** Emits UI:{heroSelectEvent} with { heroId } */
|
|
128
|
-
heroSelectEvent?:
|
|
129
|
+
heroSelectEvent?: EventEmit<{
|
|
130
|
+
heroId: string;
|
|
131
|
+
}>;
|
|
129
132
|
/** Emits UI:{heroMoveEvent} with { heroId, toX, toY } */
|
|
130
|
-
heroMoveEvent?:
|
|
133
|
+
heroMoveEvent?: EventEmit<{
|
|
134
|
+
heroId: string;
|
|
135
|
+
toX: number;
|
|
136
|
+
toY: number;
|
|
137
|
+
}>;
|
|
131
138
|
/** Emits UI:{battleEncounterEvent} with { attackerId, defenderId } */
|
|
132
|
-
battleEncounterEvent?:
|
|
139
|
+
battleEncounterEvent?: EventEmit<{
|
|
140
|
+
attackerId: string;
|
|
141
|
+
defenderId: string;
|
|
142
|
+
}>;
|
|
133
143
|
/** Emits UI:{featureEnterEvent} with { heroId, feature, hex } */
|
|
134
|
-
featureEnterEvent?:
|
|
144
|
+
featureEnterEvent?: EventEmit<{
|
|
145
|
+
heroId: string;
|
|
146
|
+
feature: string;
|
|
147
|
+
hex: MapHex;
|
|
148
|
+
}>;
|
|
135
149
|
/** Emits UI:{tileClickEvent} with { x, y } */
|
|
136
|
-
tileClickEvent?:
|
|
150
|
+
tileClickEvent?: EventEmit<{
|
|
151
|
+
x: number;
|
|
152
|
+
y: number;
|
|
153
|
+
}>;
|
|
137
154
|
/** Header / top bar */
|
|
138
155
|
header?: (ctx: WorldMapSlotContext) => React.ReactNode;
|
|
139
156
|
/** Side panel (hero detail, hero lists, etc.) */
|
|
@@ -1,12 +1,24 @@
|
|
|
1
|
+
import type { EventEmit } from '@almadar/core';
|
|
1
2
|
import type { BattleUnit, BattlePhase } from '../BattleBoard';
|
|
2
3
|
export interface BattleStateEventConfig {
|
|
3
|
-
tileClickEvent?:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
tileClickEvent?: EventEmit<{
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
}>;
|
|
8
|
+
unitClickEvent?: EventEmit<{
|
|
9
|
+
unitId: string;
|
|
10
|
+
}>;
|
|
11
|
+
endTurnEvent?: EventEmit<Record<string, never>>;
|
|
12
|
+
cancelEvent?: EventEmit<Record<string, never>>;
|
|
13
|
+
gameEndEvent?: EventEmit<{
|
|
14
|
+
result: 'victory' | 'defeat';
|
|
15
|
+
}>;
|
|
16
|
+
playAgainEvent?: EventEmit<Record<string, never>>;
|
|
17
|
+
attackEvent?: EventEmit<{
|
|
18
|
+
attackerId: string;
|
|
19
|
+
targetId: string;
|
|
20
|
+
damage: number;
|
|
21
|
+
}>;
|
|
10
22
|
}
|
|
11
23
|
export interface BattleStateCallbacks {
|
|
12
24
|
/** Called when a unit attacks another */
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).
|
|
10
10
|
*/
|
|
11
11
|
import React from 'react';
|
|
12
|
+
import type { EventEmit } from '@almadar/core';
|
|
12
13
|
import type { EntityDisplayProps } from '../../../types';
|
|
13
14
|
export interface BuilderComponent {
|
|
14
15
|
id: string;
|
|
@@ -44,7 +45,10 @@ export interface BuilderPuzzleEntity {
|
|
|
44
45
|
}
|
|
45
46
|
export interface BuilderBoardProps extends Omit<EntityDisplayProps, 'entity'> {
|
|
46
47
|
entity: BuilderPuzzleEntity;
|
|
47
|
-
completeEvent?:
|
|
48
|
+
completeEvent?: EventEmit<{
|
|
49
|
+
success: boolean;
|
|
50
|
+
attempts: number;
|
|
51
|
+
}>;
|
|
48
52
|
}
|
|
49
53
|
export declare function BuilderBoard({ entity, completeEvent, className, }: BuilderBoardProps): React.JSX.Element;
|
|
50
54
|
export declare namespace BuilderBoard {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).
|
|
11
11
|
*/
|
|
12
12
|
import React from 'react';
|
|
13
|
+
import type { EventEmit } from '@almadar/core';
|
|
13
14
|
import type { EntityDisplayProps } from '../../../types';
|
|
14
15
|
export interface ClassifierItem {
|
|
15
16
|
id: string;
|
|
@@ -45,7 +46,10 @@ export interface ClassifierPuzzleEntity {
|
|
|
45
46
|
}
|
|
46
47
|
export interface ClassifierBoardProps extends Omit<EntityDisplayProps, 'entity'> {
|
|
47
48
|
entity: ClassifierPuzzleEntity;
|
|
48
|
-
completeEvent?:
|
|
49
|
+
completeEvent?: EventEmit<{
|
|
50
|
+
success: boolean;
|
|
51
|
+
attempts: number;
|
|
52
|
+
}>;
|
|
49
53
|
}
|
|
50
54
|
export declare function ClassifierBoard({ entity, completeEvent, className, }: ClassifierBoardProps): React.JSX.Element;
|
|
51
55
|
export declare namespace ClassifierBoard {
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).
|
|
10
10
|
*/
|
|
11
11
|
import React from 'react';
|
|
12
|
+
import type { EventEmit } from '@almadar/core';
|
|
12
13
|
import type { EntityDisplayProps } from '../../../types';
|
|
13
14
|
export interface DebuggerLine {
|
|
14
15
|
id: string;
|
|
@@ -37,7 +38,10 @@ export interface DebuggerPuzzleEntity {
|
|
|
37
38
|
}
|
|
38
39
|
export interface DebuggerBoardProps extends Omit<EntityDisplayProps, 'entity'> {
|
|
39
40
|
entity: DebuggerPuzzleEntity;
|
|
40
|
-
completeEvent?:
|
|
41
|
+
completeEvent?: EventEmit<{
|
|
42
|
+
success: boolean;
|
|
43
|
+
attempts: number;
|
|
44
|
+
}>;
|
|
41
45
|
}
|
|
42
46
|
export declare function DebuggerBoard({ entity, completeEvent, className, }: DebuggerBoardProps): React.JSX.Element;
|
|
43
47
|
export declare namespace DebuggerBoard {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* @packageDocumentation
|
|
12
12
|
*/
|
|
13
13
|
import React from 'react';
|
|
14
|
+
import type { EventEmit } from '@almadar/core';
|
|
14
15
|
import type { EntityDisplayProps } from '../../../types';
|
|
15
16
|
import { type PuzzleObjectDef } from './ObjectRulePanel';
|
|
16
17
|
export interface EventHandlerPuzzleEntity {
|
|
@@ -44,9 +45,11 @@ export interface EventHandlerBoardProps extends Omit<EntityDisplayProps, 'entity
|
|
|
44
45
|
/** Playback speed in ms per event */
|
|
45
46
|
stepDurationMs?: number;
|
|
46
47
|
/** Emits UI:{playEvent} */
|
|
47
|
-
playEvent?: string
|
|
48
|
+
playEvent?: EventEmit<Record<string, never>>;
|
|
48
49
|
/** Emits UI:{completeEvent} with { success } */
|
|
49
|
-
completeEvent?:
|
|
50
|
+
completeEvent?: EventEmit<{
|
|
51
|
+
success: boolean;
|
|
52
|
+
}>;
|
|
50
53
|
}
|
|
51
54
|
export declare function EventHandlerBoard({ entity, stepDurationMs, playEvent, completeEvent, className, }: EventHandlerBoardProps): React.JSX.Element;
|
|
52
55
|
export declare namespace EventHandlerBoard {
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).
|
|
12
12
|
*/
|
|
13
13
|
import React from 'react';
|
|
14
|
+
import type { EventEmit } from '@almadar/core';
|
|
14
15
|
import type { EntityDisplayProps } from '../../../types';
|
|
15
16
|
export interface NegotiatorAction {
|
|
16
17
|
id: string;
|
|
@@ -46,7 +47,10 @@ export interface NegotiatorPuzzleEntity {
|
|
|
46
47
|
}
|
|
47
48
|
export interface NegotiatorBoardProps extends Omit<EntityDisplayProps, 'entity'> {
|
|
48
49
|
entity: NegotiatorPuzzleEntity;
|
|
49
|
-
completeEvent?:
|
|
50
|
+
completeEvent?: EventEmit<{
|
|
51
|
+
success: boolean;
|
|
52
|
+
score: number;
|
|
53
|
+
}>;
|
|
50
54
|
}
|
|
51
55
|
export declare function NegotiatorBoard({ entity, completeEvent, className, }: NegotiatorBoardProps): React.JSX.Element;
|
|
52
56
|
export declare namespace NegotiatorBoard {
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* @packageDocumentation
|
|
19
19
|
*/
|
|
20
20
|
import React from 'react';
|
|
21
|
+
import type { EventEmit } from '@almadar/core';
|
|
21
22
|
import type { SlotItemData } from '../../TraitSlot';
|
|
22
23
|
import type { EntityDisplayProps } from '../../../types';
|
|
23
24
|
export interface SequencerPuzzleEntity {
|
|
@@ -61,9 +62,14 @@ export interface SequencerBoardProps extends Omit<EntityDisplayProps, 'entity'>
|
|
|
61
62
|
/** Playback speed in ms per step */
|
|
62
63
|
stepDurationMs?: number;
|
|
63
64
|
/** Emits UI:{playEvent} with { sequence: string[] } */
|
|
64
|
-
playEvent?:
|
|
65
|
+
playEvent?: EventEmit<{
|
|
66
|
+
sequence: string[];
|
|
67
|
+
}>;
|
|
65
68
|
/** Emits UI:{completeEvent} with { success: boolean } */
|
|
66
|
-
completeEvent?:
|
|
69
|
+
completeEvent?: EventEmit<{
|
|
70
|
+
success: boolean;
|
|
71
|
+
sequence: string[];
|
|
72
|
+
}>;
|
|
67
73
|
}
|
|
68
74
|
export declare function SequencerBoard({ entity, categoryColors, stepDurationMs, playEvent, completeEvent, className, }: SequencerBoardProps): React.JSX.Element;
|
|
69
75
|
export declare namespace SequencerBoard {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* Events emitted via completeEvent (default UI:PUZZLE_COMPLETE).
|
|
11
11
|
*/
|
|
12
12
|
import React from 'react';
|
|
13
|
+
import type { EventEmit } from '@almadar/core';
|
|
13
14
|
import type { EntityDisplayProps } from '../../../types';
|
|
14
15
|
export interface SimulatorParameter {
|
|
15
16
|
id: string;
|
|
@@ -46,7 +47,10 @@ export interface SimulatorPuzzleEntity {
|
|
|
46
47
|
}
|
|
47
48
|
export interface SimulatorBoardProps extends Omit<EntityDisplayProps, 'entity'> {
|
|
48
49
|
entity: SimulatorPuzzleEntity;
|
|
49
|
-
completeEvent?:
|
|
50
|
+
completeEvent?: EventEmit<{
|
|
51
|
+
success: boolean;
|
|
52
|
+
attempts: number;
|
|
53
|
+
}>;
|
|
50
54
|
}
|
|
51
55
|
export declare function SimulatorBoard({ entity, completeEvent, className, }: SimulatorBoardProps): React.JSX.Element;
|
|
52
56
|
export declare namespace SimulatorBoard {
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* @packageDocumentation
|
|
9
9
|
*/
|
|
10
10
|
import React from 'react';
|
|
11
|
+
import type { EventEmit } from '@almadar/core';
|
|
11
12
|
import type { EntityDisplayProps } from '../../../types';
|
|
12
13
|
import { type VariableDef } from './VariablePanel';
|
|
13
14
|
export interface StateArchitectTransition {
|
|
@@ -65,9 +66,12 @@ export interface StateArchitectBoardProps extends Omit<EntityDisplayProps, 'enti
|
|
|
65
66
|
/** Playback speed */
|
|
66
67
|
stepDurationMs?: number;
|
|
67
68
|
/** Emits UI:{testEvent} */
|
|
68
|
-
testEvent?: string
|
|
69
|
+
testEvent?: EventEmit<Record<string, never>>;
|
|
69
70
|
/** Emits UI:{completeEvent} with { success, passedTests } */
|
|
70
|
-
completeEvent?:
|
|
71
|
+
completeEvent?: EventEmit<{
|
|
72
|
+
success: boolean;
|
|
73
|
+
passedTests: number;
|
|
74
|
+
}>;
|
|
71
75
|
}
|
|
72
76
|
export declare function StateArchitectBoard({ entity, stepDurationMs, testEvent, completeEvent, className, }: StateArchitectBoardProps): React.JSX.Element;
|
|
73
77
|
export declare namespace StateArchitectBoard {
|
|
@@ -1,21 +1,65 @@
|
|
|
1
|
+
import type { EventEmit } from '@almadar/core';
|
|
1
2
|
import type { IsometricTile, IsometricUnit, IsometricFeature } from '../../types/isometric';
|
|
2
3
|
export interface GameCanvas3DEventConfig {
|
|
3
4
|
/** Event name for tile clicks */
|
|
4
|
-
tileClickEvent?:
|
|
5
|
+
tileClickEvent?: EventEmit<{
|
|
6
|
+
tileId: string;
|
|
7
|
+
x: number;
|
|
8
|
+
z: number;
|
|
9
|
+
type?: string;
|
|
10
|
+
terrain?: string;
|
|
11
|
+
elevation?: number;
|
|
12
|
+
}>;
|
|
5
13
|
/** Event name for unit clicks */
|
|
6
|
-
unitClickEvent?:
|
|
14
|
+
unitClickEvent?: EventEmit<{
|
|
15
|
+
unitId: string;
|
|
16
|
+
x: number;
|
|
17
|
+
z: number;
|
|
18
|
+
unitType?: string;
|
|
19
|
+
name?: string;
|
|
20
|
+
team?: string;
|
|
21
|
+
faction?: string;
|
|
22
|
+
health?: number;
|
|
23
|
+
maxHealth?: number;
|
|
24
|
+
}>;
|
|
7
25
|
/** Event name for feature clicks */
|
|
8
|
-
featureClickEvent?:
|
|
26
|
+
featureClickEvent?: EventEmit<{
|
|
27
|
+
featureId: string;
|
|
28
|
+
x: number;
|
|
29
|
+
z: number;
|
|
30
|
+
type?: string;
|
|
31
|
+
elevation?: number;
|
|
32
|
+
}>;
|
|
9
33
|
/** Event name for canvas clicks */
|
|
10
|
-
canvasClickEvent?:
|
|
34
|
+
canvasClickEvent?: EventEmit<{
|
|
35
|
+
clientX: number;
|
|
36
|
+
clientY: number;
|
|
37
|
+
button: number;
|
|
38
|
+
}>;
|
|
11
39
|
/** Event name for tile hover */
|
|
12
|
-
tileHoverEvent?:
|
|
40
|
+
tileHoverEvent?: EventEmit<{
|
|
41
|
+
tileId: string;
|
|
42
|
+
x: number;
|
|
43
|
+
z: number;
|
|
44
|
+
type?: string;
|
|
45
|
+
}>;
|
|
13
46
|
/** Event name for tile leave */
|
|
14
|
-
tileLeaveEvent?: string
|
|
47
|
+
tileLeaveEvent?: EventEmit<Record<string, never>>;
|
|
15
48
|
/** Event name for unit animation changes */
|
|
16
|
-
unitAnimationEvent?:
|
|
49
|
+
unitAnimationEvent?: EventEmit<{
|
|
50
|
+
unitId: string;
|
|
51
|
+
state: string;
|
|
52
|
+
timestamp: number;
|
|
53
|
+
}>;
|
|
17
54
|
/** Event name for camera changes */
|
|
18
|
-
cameraChangeEvent?:
|
|
55
|
+
cameraChangeEvent?: EventEmit<{
|
|
56
|
+
position: {
|
|
57
|
+
x: number;
|
|
58
|
+
y: number;
|
|
59
|
+
z: number;
|
|
60
|
+
};
|
|
61
|
+
timestamp: number;
|
|
62
|
+
}>;
|
|
19
63
|
}
|
|
20
64
|
/** Minimal mouse event interface — satisfied by both React.MouseEvent and ThreeEvent<MouseEvent> */
|
|
21
65
|
export interface MinimalMouseEvent {
|
package/dist/providers/index.cjs
CHANGED
|
@@ -17069,6 +17069,7 @@ var init_Tabs = __esm({
|
|
|
17069
17069
|
defaultActiveTab,
|
|
17070
17070
|
activeTab: controlledActiveTab,
|
|
17071
17071
|
onTabChange,
|
|
17072
|
+
tabChangeEvent,
|
|
17072
17073
|
variant = "default",
|
|
17073
17074
|
orientation = "horizontal",
|
|
17074
17075
|
className
|
|
@@ -17091,6 +17092,9 @@ var init_Tabs = __esm({
|
|
|
17091
17092
|
setInternalActiveTab(tabId);
|
|
17092
17093
|
}
|
|
17093
17094
|
onTabChange?.(tabId);
|
|
17095
|
+
if (tabChangeEvent) {
|
|
17096
|
+
eventBus.emit(`UI:${tabChangeEvent}`, { tabId });
|
|
17097
|
+
}
|
|
17094
17098
|
if (tabEvent) {
|
|
17095
17099
|
eventBus.emit(`UI:${tabEvent}`, { tabId });
|
|
17096
17100
|
}
|
|
@@ -17171,7 +17175,7 @@ var init_Tabs = __esm({
|
|
|
17171
17175
|
isActive ? variant === "pills" ? "text-primary-foreground font-bold" : "text-foreground font-bold" : "text-muted-foreground hover:text-foreground"
|
|
17172
17176
|
),
|
|
17173
17177
|
children: [
|
|
17174
|
-
item.icon && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: item.icon, size: "sm" }),
|
|
17178
|
+
item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: item.icon, size: "sm" })),
|
|
17175
17179
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", weight: isActive ? "semibold" : "normal", className: "!text-inherit", children: item.label }),
|
|
17176
17180
|
item.badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "default", size: "sm", children: item.badge })
|
|
17177
17181
|
]
|
package/dist/providers/index.js
CHANGED
|
@@ -17024,6 +17024,7 @@ var init_Tabs = __esm({
|
|
|
17024
17024
|
defaultActiveTab,
|
|
17025
17025
|
activeTab: controlledActiveTab,
|
|
17026
17026
|
onTabChange,
|
|
17027
|
+
tabChangeEvent,
|
|
17027
17028
|
variant = "default",
|
|
17028
17029
|
orientation = "horizontal",
|
|
17029
17030
|
className
|
|
@@ -17046,6 +17047,9 @@ var init_Tabs = __esm({
|
|
|
17046
17047
|
setInternalActiveTab(tabId);
|
|
17047
17048
|
}
|
|
17048
17049
|
onTabChange?.(tabId);
|
|
17050
|
+
if (tabChangeEvent) {
|
|
17051
|
+
eventBus.emit(`UI:${tabChangeEvent}`, { tabId });
|
|
17052
|
+
}
|
|
17049
17053
|
if (tabEvent) {
|
|
17050
17054
|
eventBus.emit(`UI:${tabEvent}`, { tabId });
|
|
17051
17055
|
}
|
|
@@ -17126,7 +17130,7 @@ var init_Tabs = __esm({
|
|
|
17126
17130
|
isActive ? variant === "pills" ? "text-primary-foreground font-bold" : "text-foreground font-bold" : "text-muted-foreground hover:text-foreground"
|
|
17127
17131
|
),
|
|
17128
17132
|
children: [
|
|
17129
|
-
item.icon && /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" }),
|
|
17133
|
+
item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm" })),
|
|
17130
17134
|
/* @__PURE__ */ jsx(Typography, { variant: "small", weight: isActive ? "semibold" : "normal", className: "!text-inherit", children: item.label }),
|
|
17131
17135
|
item.badge !== void 0 && /* @__PURE__ */ jsx(Badge, { variant: "default", size: "sm", children: item.badge })
|
|
17132
17136
|
]
|
package/dist/runtime/index.cjs
CHANGED
|
@@ -16859,6 +16859,7 @@ var init_Tabs = __esm({
|
|
|
16859
16859
|
defaultActiveTab,
|
|
16860
16860
|
activeTab: controlledActiveTab,
|
|
16861
16861
|
onTabChange,
|
|
16862
|
+
tabChangeEvent,
|
|
16862
16863
|
variant = "default",
|
|
16863
16864
|
orientation = "horizontal",
|
|
16864
16865
|
className
|
|
@@ -16881,6 +16882,9 @@ var init_Tabs = __esm({
|
|
|
16881
16882
|
setInternalActiveTab(tabId);
|
|
16882
16883
|
}
|
|
16883
16884
|
onTabChange?.(tabId);
|
|
16885
|
+
if (tabChangeEvent) {
|
|
16886
|
+
eventBus.emit(`UI:${tabChangeEvent}`, { tabId });
|
|
16887
|
+
}
|
|
16884
16888
|
if (tabEvent) {
|
|
16885
16889
|
eventBus.emit(`UI:${tabEvent}`, { tabId });
|
|
16886
16890
|
}
|
|
@@ -16961,7 +16965,7 @@ var init_Tabs = __esm({
|
|
|
16961
16965
|
isActive ? variant === "pills" ? "text-primary-foreground font-bold" : "text-foreground font-bold" : "text-muted-foreground hover:text-foreground"
|
|
16962
16966
|
),
|
|
16963
16967
|
children: [
|
|
16964
|
-
item.icon && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: item.icon, size: "sm" }),
|
|
16968
|
+
item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: item.icon, size: "sm" }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: item.icon, size: "sm" })),
|
|
16965
16969
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "small", weight: isActive ? "semibold" : "normal", className: "!text-inherit", children: item.label }),
|
|
16966
16970
|
item.badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "default", size: "sm", children: item.badge })
|
|
16967
16971
|
]
|