@almadar/ui 5.28.2 → 5.28.4
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 +106 -31
- package/dist/avl/index.js +106 -31
- package/dist/components/game/organisms/BattleBoard.d.ts +18 -1
- package/dist/components/game/organisms/CanvasEffect.d.ts +1 -1
- package/dist/components/game/organisms/CastleBoard.d.ts +18 -3
- package/dist/components/game/organisms/UncontrolledBattleBoard.d.ts +10 -1
- package/dist/components/game/organisms/WorldMapBoard.d.ts +17 -1
- package/dist/components/game/templates/BattleTemplate.d.ts +11 -1
- package/dist/components/game/templates/CastleTemplate.d.ts +11 -1
- package/dist/components/game/templates/WorldMapTemplate.d.ts +11 -1
- package/dist/components/index.cjs +106 -31
- package/dist/components/index.js +106 -31
- package/dist/providers/index.cjs +106 -31
- package/dist/providers/index.js +106 -31
- package/dist/runtime/index.cjs +106 -31
- package/dist/runtime/index.js +106 -31
- package/package.json +1 -1
package/dist/runtime/index.js
CHANGED
|
@@ -7668,7 +7668,7 @@ var init_DamageNumber = __esm({
|
|
|
7668
7668
|
function DialogueBubble({
|
|
7669
7669
|
speaker,
|
|
7670
7670
|
text,
|
|
7671
|
-
portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/
|
|
7671
|
+
portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
|
|
7672
7672
|
position = "bottom",
|
|
7673
7673
|
className
|
|
7674
7674
|
}) {
|
|
@@ -10278,7 +10278,7 @@ function IsometricCanvas({
|
|
|
10278
10278
|
// Rendering options
|
|
10279
10279
|
scale = 0.4,
|
|
10280
10280
|
debug: debug2 = false,
|
|
10281
|
-
backgroundImage,
|
|
10281
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/court.png",
|
|
10282
10282
|
showMinimap = true,
|
|
10283
10283
|
enableCamera = true,
|
|
10284
10284
|
unitScale = 1,
|
|
@@ -10293,7 +10293,7 @@ function IsometricCanvas({
|
|
|
10293
10293
|
// Tuning
|
|
10294
10294
|
diamondTopY: diamondTopYProp,
|
|
10295
10295
|
// Remote asset loading
|
|
10296
|
-
assetBaseUrl,
|
|
10296
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
|
|
10297
10297
|
assetManifest
|
|
10298
10298
|
}) {
|
|
10299
10299
|
const tilesProp = Array.isArray(_tilesPropRaw) ? _tilesPropRaw : [];
|
|
@@ -11052,6 +11052,10 @@ var init_boardEntity = __esm({
|
|
|
11052
11052
|
});
|
|
11053
11053
|
function BattleBoard({
|
|
11054
11054
|
entity,
|
|
11055
|
+
tiles: propTiles,
|
|
11056
|
+
units: propUnits,
|
|
11057
|
+
features: propFeatures,
|
|
11058
|
+
assetManifest: propAssetManifest,
|
|
11055
11059
|
scale = 0.45,
|
|
11056
11060
|
unitScale = 1,
|
|
11057
11061
|
header,
|
|
@@ -11077,11 +11081,11 @@ function BattleBoard({
|
|
|
11077
11081
|
className
|
|
11078
11082
|
}) {
|
|
11079
11083
|
const board = boardEntity(entity) ?? {};
|
|
11080
|
-
const tiles = Array.isArray(board.tiles) ? board.tiles : [];
|
|
11081
|
-
const features = Array.isArray(board.features) ? board.features : [];
|
|
11084
|
+
const tiles = propTiles ?? (Array.isArray(board.tiles) ? board.tiles : []);
|
|
11085
|
+
const features = propFeatures ?? (Array.isArray(board.features) ? board.features : []);
|
|
11082
11086
|
const boardWidth = num(board.boardWidth, 8);
|
|
11083
11087
|
const boardHeight = num(board.boardHeight, 6);
|
|
11084
|
-
const assetManifest = board.assetManifest;
|
|
11088
|
+
const assetManifest = propAssetManifest ?? board.assetManifest;
|
|
11085
11089
|
const backgroundImage = board.backgroundImage;
|
|
11086
11090
|
const units = rows(board.units);
|
|
11087
11091
|
const selectedUnitId = board.selectedUnitId ?? null;
|
|
@@ -11173,7 +11177,7 @@ function BattleBoard({
|
|
|
11173
11177
|
}, 16);
|
|
11174
11178
|
return () => clearInterval(interval);
|
|
11175
11179
|
}, []);
|
|
11176
|
-
const
|
|
11180
|
+
const derivedIsoUnits = useMemo(() => {
|
|
11177
11181
|
return units.filter((u) => unitHealth(u) > 0).map((unit) => {
|
|
11178
11182
|
const id = str(unit.id);
|
|
11179
11183
|
const pos = movingPositions.get(id) ?? unitPosition(unit);
|
|
@@ -11197,6 +11201,7 @@ function BattleBoard({
|
|
|
11197
11201
|
};
|
|
11198
11202
|
});
|
|
11199
11203
|
}, [units, movingPositions]);
|
|
11204
|
+
const isoUnits = propUnits ?? derivedIsoUnits;
|
|
11200
11205
|
const maxY = Math.max(...tiles.map((t2) => t2.y), 0);
|
|
11201
11206
|
const baseOffsetX = (maxY + 1) * (TILE_WIDTH * scale / 2);
|
|
11202
11207
|
const tileToScreen = useCallback(
|
|
@@ -11418,14 +11423,22 @@ function BattleTemplate({
|
|
|
11418
11423
|
entity,
|
|
11419
11424
|
scale = 0.45,
|
|
11420
11425
|
unitScale = 1,
|
|
11426
|
+
tiles,
|
|
11427
|
+
units,
|
|
11428
|
+
features,
|
|
11429
|
+
assetManifest,
|
|
11421
11430
|
className
|
|
11422
11431
|
}) {
|
|
11423
11432
|
const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
|
|
11424
|
-
if (!resolved) return null;
|
|
11433
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
11425
11434
|
return /* @__PURE__ */ jsx(
|
|
11426
11435
|
BattleBoard,
|
|
11427
11436
|
{
|
|
11428
11437
|
entity: resolved,
|
|
11438
|
+
tiles,
|
|
11439
|
+
units,
|
|
11440
|
+
features,
|
|
11441
|
+
assetManifest,
|
|
11429
11442
|
scale,
|
|
11430
11443
|
unitScale,
|
|
11431
11444
|
tileClickEvent: "TILE_CLICK",
|
|
@@ -18400,16 +18413,21 @@ function EmojiEffect({
|
|
|
18400
18413
|
}
|
|
18401
18414
|
);
|
|
18402
18415
|
}
|
|
18403
|
-
function CanvasEffect(
|
|
18416
|
+
function CanvasEffect({
|
|
18417
|
+
effectSpriteUrl = "https://almadar-kflow-assets.web.app/shared/effects/gas/gas00.png",
|
|
18418
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/effects/",
|
|
18419
|
+
...props
|
|
18420
|
+
}) {
|
|
18404
18421
|
const eventBus = useEventBus();
|
|
18405
|
-
const {
|
|
18422
|
+
const mergedProps = { effectSpriteUrl, assetBaseUrl, ...props };
|
|
18423
|
+
const { completeEvent, onComplete, ...rest } = mergedProps;
|
|
18406
18424
|
const handleComplete = useCallback(() => {
|
|
18407
18425
|
if (completeEvent) eventBus.emit(`UI:${completeEvent}`, {});
|
|
18408
18426
|
onComplete?.();
|
|
18409
18427
|
}, [completeEvent, eventBus, onComplete]);
|
|
18410
18428
|
const enhancedProps = { ...rest, onComplete: handleComplete };
|
|
18411
|
-
if (
|
|
18412
|
-
return /* @__PURE__ */ jsx(CanvasEffectEngine, { ...enhancedProps, assetManifest:
|
|
18429
|
+
if (rest.assetManifest) {
|
|
18430
|
+
return /* @__PURE__ */ jsx(CanvasEffectEngine, { ...enhancedProps, assetManifest: rest.assetManifest });
|
|
18413
18431
|
}
|
|
18414
18432
|
return /* @__PURE__ */ jsx(EmojiEffect, { ...enhancedProps });
|
|
18415
18433
|
}
|
|
@@ -19194,6 +19212,10 @@ var init_CaseStudyOrganism = __esm({
|
|
|
19194
19212
|
});
|
|
19195
19213
|
function CastleBoard({
|
|
19196
19214
|
entity,
|
|
19215
|
+
tiles: propTiles,
|
|
19216
|
+
units: propUnits,
|
|
19217
|
+
features: propFeatures,
|
|
19218
|
+
assetManifest: propAssetManifest,
|
|
19197
19219
|
scale = 0.45,
|
|
19198
19220
|
header,
|
|
19199
19221
|
sidePanel,
|
|
@@ -19209,10 +19231,10 @@ function CastleBoard({
|
|
|
19209
19231
|
}) {
|
|
19210
19232
|
const eventBus = useEventBus();
|
|
19211
19233
|
const resolved = boardEntity(entity);
|
|
19212
|
-
const tiles = Array.isArray(resolved?.tiles) ? resolved.tiles : [];
|
|
19213
|
-
const features = Array.isArray(resolved?.features) ? resolved.features : [];
|
|
19214
|
-
const units = Array.isArray(resolved?.units) ? resolved.units : [];
|
|
19215
|
-
const assetManifest = resolved?.assetManifest;
|
|
19234
|
+
const tiles = propTiles ?? (Array.isArray(resolved?.tiles) ? resolved.tiles : []);
|
|
19235
|
+
const features = propFeatures ?? (Array.isArray(resolved?.features) ? resolved.features : []);
|
|
19236
|
+
const units = propUnits ?? (Array.isArray(resolved?.units) ? resolved.units : []);
|
|
19237
|
+
const assetManifest = propAssetManifest ?? resolved?.assetManifest;
|
|
19216
19238
|
const backgroundImage = resolved?.backgroundImage;
|
|
19217
19239
|
const [hoveredTile, setHoveredTile] = useState(null);
|
|
19218
19240
|
const [selectedFeature, setSelectedFeature] = useState(null);
|
|
@@ -19315,14 +19337,22 @@ var init_CastleBoard = __esm({
|
|
|
19315
19337
|
function CastleTemplate({
|
|
19316
19338
|
entity,
|
|
19317
19339
|
scale = 0.45,
|
|
19340
|
+
tiles,
|
|
19341
|
+
units,
|
|
19342
|
+
features,
|
|
19343
|
+
assetManifest,
|
|
19318
19344
|
className
|
|
19319
19345
|
}) {
|
|
19320
19346
|
const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
|
|
19321
|
-
if (!resolved) return null;
|
|
19347
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
19322
19348
|
return /* @__PURE__ */ jsx(
|
|
19323
19349
|
CastleBoard,
|
|
19324
19350
|
{
|
|
19325
19351
|
entity: resolved,
|
|
19352
|
+
tiles,
|
|
19353
|
+
units,
|
|
19354
|
+
features,
|
|
19355
|
+
assetManifest,
|
|
19326
19356
|
scale,
|
|
19327
19357
|
featureClickEvent: "FEATURE_CLICK",
|
|
19328
19358
|
unitClickEvent: "UNIT_CLICK",
|
|
@@ -25955,8 +25985,8 @@ function GameCanvas2D({
|
|
|
25955
25985
|
tickEvent,
|
|
25956
25986
|
drawEvent,
|
|
25957
25987
|
fps = 60,
|
|
25958
|
-
backgroundImage,
|
|
25959
|
-
assetBaseUrl = "",
|
|
25988
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/resonators.jpeg",
|
|
25989
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
|
|
25960
25990
|
className
|
|
25961
25991
|
}) {
|
|
25962
25992
|
const canvasRef = React79.useRef(null);
|
|
@@ -26020,6 +26050,9 @@ function GameCanvas2D({
|
|
|
26020
26050
|
const bgImg = loadImage(backgroundImageRef.current);
|
|
26021
26051
|
if (bgImg) {
|
|
26022
26052
|
ctx.drawImage(bgImg, 0, 0, widthRef.current, heightRef.current);
|
|
26053
|
+
} else {
|
|
26054
|
+
ctx.fillStyle = "#0f1420";
|
|
26055
|
+
ctx.fillRect(0, 0, widthRef.current, heightRef.current);
|
|
26023
26056
|
}
|
|
26024
26057
|
}
|
|
26025
26058
|
onDrawRef.current?.(ctx, frame);
|
|
@@ -27164,10 +27197,10 @@ function PlatformerCanvas({
|
|
|
27164
27197
|
canvasHeight = 400,
|
|
27165
27198
|
followCamera = true,
|
|
27166
27199
|
bgColor,
|
|
27167
|
-
playerSprite,
|
|
27200
|
+
playerSprite = "https://almadar-kflow-assets.web.app/shared/platformer/characters/platformChar_idle.png",
|
|
27168
27201
|
tileSprites,
|
|
27169
|
-
backgroundImage,
|
|
27170
|
-
assetBaseUrl = "",
|
|
27202
|
+
backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/court.png",
|
|
27203
|
+
assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/platformer/",
|
|
27171
27204
|
leftEvent = "MOVE_LEFT",
|
|
27172
27205
|
rightEvent = "MOVE_RIGHT",
|
|
27173
27206
|
jumpEvent = "JUMP",
|
|
@@ -45394,7 +45427,14 @@ var init_useBattleState = __esm({
|
|
|
45394
45427
|
init_boardEntity();
|
|
45395
45428
|
}
|
|
45396
45429
|
});
|
|
45397
|
-
function UncontrolledBattleBoard({
|
|
45430
|
+
function UncontrolledBattleBoard({
|
|
45431
|
+
entity,
|
|
45432
|
+
tiles,
|
|
45433
|
+
units,
|
|
45434
|
+
features,
|
|
45435
|
+
assetManifest,
|
|
45436
|
+
...rest
|
|
45437
|
+
}) {
|
|
45398
45438
|
const resolved = boardEntity(entity);
|
|
45399
45439
|
const battleState = useBattleState(
|
|
45400
45440
|
rows(resolved?.initialUnits),
|
|
@@ -45414,19 +45454,23 @@ function UncontrolledBattleBoard({ entity, ...rest }) {
|
|
|
45414
45454
|
calculateDamage: rest.calculateDamage
|
|
45415
45455
|
}
|
|
45416
45456
|
);
|
|
45417
|
-
if (!resolved) return null;
|
|
45457
|
+
if (!resolved && !tiles && !units && !features && !assetManifest) return null;
|
|
45418
45458
|
return /* @__PURE__ */ jsx(
|
|
45419
45459
|
BattleBoard,
|
|
45420
45460
|
{
|
|
45421
45461
|
...rest,
|
|
45422
|
-
|
|
45462
|
+
tiles,
|
|
45463
|
+
units,
|
|
45464
|
+
features,
|
|
45465
|
+
assetManifest,
|
|
45466
|
+
entity: resolved ? {
|
|
45423
45467
|
...resolved,
|
|
45424
45468
|
units: battleState.units,
|
|
45425
45469
|
phase: battleState.phase,
|
|
45426
45470
|
turn: battleState.turn,
|
|
45427
45471
|
gameResult: battleState.gameResult,
|
|
45428
45472
|
selectedUnitId: battleState.selectedUnitId
|
|
45429
|
-
}
|
|
45473
|
+
} : void 0
|
|
45430
45474
|
}
|
|
45431
45475
|
);
|
|
45432
45476
|
}
|
|
@@ -45455,6 +45499,10 @@ function defaultIsInRange(from, to, range) {
|
|
|
45455
45499
|
}
|
|
45456
45500
|
function WorldMapBoard({
|
|
45457
45501
|
entity,
|
|
45502
|
+
tiles: propTiles,
|
|
45503
|
+
units: propUnits,
|
|
45504
|
+
features: propFeatures,
|
|
45505
|
+
assetManifest: propAssetManifest,
|
|
45458
45506
|
isLoading,
|
|
45459
45507
|
scale = 0.4,
|
|
45460
45508
|
unitScale = 2.5,
|
|
@@ -45483,16 +45531,16 @@ function WorldMapBoard({
|
|
|
45483
45531
|
const resolved = boardEntity(entity);
|
|
45484
45532
|
const hexes = rows(resolved?.hexes);
|
|
45485
45533
|
const heroes = rows(resolved?.heroes);
|
|
45486
|
-
const features = Array.isArray(resolved?.features) ? resolved.features : [];
|
|
45534
|
+
const features = propFeatures ?? (Array.isArray(resolved?.features) ? resolved.features : []);
|
|
45487
45535
|
const selectedHeroId = resolved?.selectedHeroId ?? null;
|
|
45488
|
-
const assetManifest = resolved?.assetManifest;
|
|
45536
|
+
const assetManifest = propAssetManifest ?? resolved?.assetManifest;
|
|
45489
45537
|
const backgroundImage = resolved?.backgroundImage;
|
|
45490
45538
|
const [hoveredTile, setHoveredTile] = useState(null);
|
|
45491
45539
|
const selectedHero = useMemo(
|
|
45492
45540
|
() => heroes.find((h) => str(h.id) === selectedHeroId) ?? null,
|
|
45493
45541
|
[heroes, selectedHeroId]
|
|
45494
45542
|
);
|
|
45495
|
-
const
|
|
45543
|
+
const derivedTiles = useMemo(
|
|
45496
45544
|
() => hexes.map((hex) => ({
|
|
45497
45545
|
x: num(hex.x),
|
|
45498
45546
|
y: num(hex.y),
|
|
@@ -45501,8 +45549,9 @@ function WorldMapBoard({
|
|
|
45501
45549
|
})),
|
|
45502
45550
|
[hexes]
|
|
45503
45551
|
);
|
|
45552
|
+
const tiles = propTiles ?? derivedTiles;
|
|
45504
45553
|
const baseUnits = useMemo(
|
|
45505
|
-
() => heroes.map((hero) => ({
|
|
45554
|
+
() => propUnits ?? heroes.map((hero) => ({
|
|
45506
45555
|
id: str(hero.id),
|
|
45507
45556
|
position: heroPosition(hero),
|
|
45508
45557
|
name: str(hero.name),
|
|
@@ -45511,7 +45560,7 @@ function WorldMapBoard({
|
|
|
45511
45560
|
maxHealth: 100,
|
|
45512
45561
|
sprite: hero.sprite == null ? void 0 : str(hero.sprite)
|
|
45513
45562
|
})),
|
|
45514
|
-
[heroes]
|
|
45563
|
+
[heroes, propUnits]
|
|
45515
45564
|
);
|
|
45516
45565
|
const MOVE_SPEED_MS_PER_TILE = 300;
|
|
45517
45566
|
const movementAnimRef = useRef(null);
|
|
@@ -45721,12 +45770,20 @@ function WorldMapTemplate({
|
|
|
45721
45770
|
unitScale = 2.5,
|
|
45722
45771
|
diamondTopY,
|
|
45723
45772
|
allowMoveAllHeroes = false,
|
|
45773
|
+
tiles,
|
|
45774
|
+
units,
|
|
45775
|
+
features,
|
|
45776
|
+
assetManifest,
|
|
45724
45777
|
className
|
|
45725
45778
|
}) {
|
|
45726
45779
|
return /* @__PURE__ */ jsx(
|
|
45727
45780
|
WorldMapBoard,
|
|
45728
45781
|
{
|
|
45729
45782
|
entity,
|
|
45783
|
+
tiles,
|
|
45784
|
+
units,
|
|
45785
|
+
features,
|
|
45786
|
+
assetManifest,
|
|
45730
45787
|
scale,
|
|
45731
45788
|
unitScale,
|
|
45732
45789
|
diamondTopY,
|
|
@@ -46944,6 +47001,24 @@ function renderPatternProps(props, onDismiss) {
|
|
|
46944
47001
|
priority: 0
|
|
46945
47002
|
};
|
|
46946
47003
|
rendered[key] = /* @__PURE__ */ jsx(SlotContentRenderer, { content: childContent, onDismiss });
|
|
47004
|
+
} else if (Array.isArray(value)) {
|
|
47005
|
+
rendered[key] = value.map((item, i) => {
|
|
47006
|
+
const el = item;
|
|
47007
|
+
if (isPatternConfig(el)) {
|
|
47008
|
+
const nestedProps = {};
|
|
47009
|
+
for (const [k, v] of Object.entries(el)) {
|
|
47010
|
+
if (k !== "type") nestedProps[k] = v;
|
|
47011
|
+
}
|
|
47012
|
+
const childContent = {
|
|
47013
|
+
id: `prop-${key}-${i}`,
|
|
47014
|
+
pattern: el.type,
|
|
47015
|
+
props: nestedProps,
|
|
47016
|
+
priority: 0
|
|
47017
|
+
};
|
|
47018
|
+
return /* @__PURE__ */ jsx(SlotContentRenderer, { content: childContent, onDismiss }, i);
|
|
47019
|
+
}
|
|
47020
|
+
return substituteTraitRefsDeep(el, `prop:${key}[${i}]`);
|
|
47021
|
+
});
|
|
46947
47022
|
} else {
|
|
46948
47023
|
rendered[key] = substituteTraitRefsDeep(value, `prop:${key}`);
|
|
46949
47024
|
}
|