@almadar/ui 5.39.0 → 5.41.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.js CHANGED
@@ -10693,8 +10693,8 @@ var init_TraitFrame = __esm({
10693
10693
  }
10694
10694
  });
10695
10695
  function HealthBar({
10696
- current,
10697
- max,
10696
+ current = 3,
10697
+ max = 5,
10698
10698
  format = "hearts",
10699
10699
  size = "md",
10700
10700
  className,
@@ -10943,11 +10943,11 @@ var init_ControlButton = __esm({
10943
10943
  });
10944
10944
  function Sprite({
10945
10945
  spritesheet = "https://almadar-kflow-assets.web.app/shared/isometric-blocks/Spritesheet/allTiles_sheet.png",
10946
- frameWidth,
10947
- frameHeight,
10948
- frame,
10949
- x,
10950
- y,
10946
+ frameWidth = 64,
10947
+ frameHeight = 64,
10948
+ frame = 0,
10949
+ x = 0,
10950
+ y = 0,
10951
10951
  scale = 1,
10952
10952
  flipX = false,
10953
10953
  flipY = false,
@@ -11017,7 +11017,7 @@ var init_Sprite = __esm({
11017
11017
  }
11018
11018
  });
11019
11019
  function StateIndicator({
11020
- state,
11020
+ state = "idle",
11021
11021
  label,
11022
11022
  size = "md",
11023
11023
  animated = true,
@@ -11088,8 +11088,8 @@ function formatTime(seconds, format) {
11088
11088
  return `${mins.toString().padStart(2, "0")}:${padded}`;
11089
11089
  }
11090
11090
  function TimerDisplay({
11091
- seconds,
11092
- running,
11091
+ seconds = 90,
11092
+ running = true,
11093
11093
  format = "mm:ss",
11094
11094
  size = "md",
11095
11095
  className,
@@ -11126,8 +11126,8 @@ var init_TimerDisplay = __esm({
11126
11126
  });
11127
11127
  function ResourceCounter({
11128
11128
  icon,
11129
- label,
11130
- value,
11129
+ label = "Gold",
11130
+ value = 250,
11131
11131
  max,
11132
11132
  color,
11133
11133
  size = "md",
@@ -11179,10 +11179,11 @@ var init_ResourceCounter = __esm({
11179
11179
  }
11180
11180
  });
11181
11181
  function ItemSlot({
11182
- icon,
11183
- label,
11182
+ assetUrl = DEFAULT_ASSET_URL,
11183
+ icon = "sword",
11184
+ label = "Iron Sword",
11184
11185
  quantity,
11185
- rarity = "common",
11186
+ rarity = "uncommon",
11186
11187
  empty,
11187
11188
  size = "md",
11188
11189
  selected,
@@ -11190,6 +11191,7 @@ function ItemSlot({
11190
11191
  className
11191
11192
  }) {
11192
11193
  const isClickable = onClick != null;
11194
+ const px = assetSizeMap[size];
11193
11195
  return /* @__PURE__ */ jsx(
11194
11196
  "button",
11195
11197
  {
@@ -11210,7 +11212,17 @@ function ItemSlot({
11210
11212
  className
11211
11213
  ),
11212
11214
  children: empty ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
11213
- icon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon }) : /* @__PURE__ */ jsx(Icon, { icon }) }),
11215
+ assetUrl ? /* @__PURE__ */ jsx(
11216
+ "img",
11217
+ {
11218
+ src: assetUrl,
11219
+ alt: label,
11220
+ width: px,
11221
+ height: px,
11222
+ style: { imageRendering: "pixelated", objectFit: "contain" },
11223
+ className: "flex-shrink-0"
11224
+ }
11225
+ ) : icon ? /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon }) : /* @__PURE__ */ jsx(Icon, { icon }) }) : null,
11214
11226
  quantity != null && quantity > 1 && /* @__PURE__ */ jsx(
11215
11227
  "span",
11216
11228
  {
@@ -11226,7 +11238,7 @@ function ItemSlot({
11226
11238
  }
11227
11239
  );
11228
11240
  }
11229
- var sizeMap6, rarityBorderMap, rarityGlowMap;
11241
+ var sizeMap6, rarityBorderMap, rarityGlowMap, DEFAULT_ASSET_URL, assetSizeMap;
11230
11242
  var init_ItemSlot = __esm({
11231
11243
  "components/game/atoms/ItemSlot.tsx"() {
11232
11244
  "use client";
@@ -11251,11 +11263,17 @@ var init_ItemSlot = __esm({
11251
11263
  epic: "shadow-lg",
11252
11264
  legendary: "shadow-lg"
11253
11265
  };
11266
+ DEFAULT_ASSET_URL = "https://almadar-kflow-assets.web.app/shared/isometric-dungeon/Isometric/chestClosed_E.png";
11267
+ assetSizeMap = {
11268
+ sm: 28,
11269
+ md: 40,
11270
+ lg: 56
11271
+ };
11254
11272
  ItemSlot.displayName = "ItemSlot";
11255
11273
  }
11256
11274
  });
11257
11275
  function TurnIndicator({
11258
- currentTurn,
11276
+ currentTurn = 1,
11259
11277
  maxTurns,
11260
11278
  activeTeam,
11261
11279
  phase,
@@ -11318,7 +11336,7 @@ function getComboScale(combo) {
11318
11336
  return "";
11319
11337
  }
11320
11338
  function ComboCounter({
11321
- combo,
11339
+ combo = 5,
11322
11340
  multiplier,
11323
11341
  streak,
11324
11342
  size = "md",
@@ -11364,10 +11382,10 @@ var init_ComboCounter = __esm({
11364
11382
  }
11365
11383
  });
11366
11384
  function XPBar({
11367
- current,
11368
- max,
11369
- level,
11370
- showLabel = false,
11385
+ current = 350,
11386
+ max = 1e3,
11387
+ level = 5,
11388
+ showLabel = true,
11371
11389
  size = "md",
11372
11390
  animated = true,
11373
11391
  className
@@ -11450,7 +11468,7 @@ var init_XPBar = __esm({
11450
11468
  function WaypointMarker({
11451
11469
  label,
11452
11470
  icon,
11453
- active = false,
11471
+ active = true,
11454
11472
  completed = false,
11455
11473
  size = "md",
11456
11474
  className
@@ -11524,11 +11542,11 @@ function formatDuration(seconds) {
11524
11542
  return `${Math.round(seconds)}s`;
11525
11543
  }
11526
11544
  function StatusEffect({
11527
- icon,
11528
- label,
11529
- duration,
11545
+ icon = "shield",
11546
+ label = "Shield",
11547
+ duration = 30,
11530
11548
  stacks,
11531
- variant = "neutral",
11549
+ variant = "buff",
11532
11550
  size = "md",
11533
11551
  className
11534
11552
  }) {
@@ -11590,7 +11608,7 @@ var init_StatusEffect = __esm({
11590
11608
  }
11591
11609
  });
11592
11610
  function DamageNumber({
11593
- value,
11611
+ value = 42,
11594
11612
  type = "damage",
11595
11613
  size = "md",
11596
11614
  className
@@ -11639,8 +11657,8 @@ var init_DamageNumber = __esm({
11639
11657
  }
11640
11658
  });
11641
11659
  function DialogueBubble({
11642
- speaker,
11643
- text,
11660
+ speaker = "Hero",
11661
+ text = "The dungeon awaits. Choose your path wisely.",
11644
11662
  portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
11645
11663
  position = "bottom",
11646
11664
  className
@@ -11677,7 +11695,7 @@ var init_DialogueBubble = __esm({
11677
11695
  }
11678
11696
  });
11679
11697
  function ChoiceButton({
11680
- text,
11698
+ text = "Charge forward into the fray",
11681
11699
  index,
11682
11700
  disabled = false,
11683
11701
  selected = false,
@@ -11723,7 +11741,7 @@ var init_ChoiceButton = __esm({
11723
11741
  }
11724
11742
  });
11725
11743
  function ActionButton({
11726
- label,
11744
+ label = "Attack",
11727
11745
  icon,
11728
11746
  cooldown = 0,
11729
11747
  disabled = false,
@@ -11803,13 +11821,13 @@ var init_ActionButton = __esm({
11803
11821
  }
11804
11822
  });
11805
11823
  function MiniMap({
11806
- tiles = [],
11807
- units = [],
11824
+ tiles = DEFAULT_TILES,
11825
+ units = DEFAULT_UNITS,
11808
11826
  width = 150,
11809
11827
  height = 150,
11810
11828
  mapWidth = 100,
11811
11829
  mapHeight = 100,
11812
- viewportRect,
11830
+ viewportRect = DEFAULT_VIEWPORT,
11813
11831
  className
11814
11832
  }) {
11815
11833
  const canvasRef = React91.useRef(null);
@@ -11888,10 +11906,25 @@ function MiniMap({
11888
11906
  }
11889
11907
  );
11890
11908
  }
11909
+ var DEFAULT_TILES, DEFAULT_UNITS, DEFAULT_VIEWPORT;
11891
11910
  var init_MiniMap = __esm({
11892
11911
  "components/game/atoms/MiniMap.tsx"() {
11893
11912
  "use client";
11894
11913
  init_cn();
11914
+ DEFAULT_TILES = [
11915
+ { x: 10, y: 10, color: "#4ade80" },
11916
+ { x: 20, y: 15, color: "#4ade80" },
11917
+ { x: 30, y: 25, color: "#22c55e" },
11918
+ { x: 50, y: 40, color: "#4ade80" },
11919
+ { x: 60, y: 55, color: "#16a34a" },
11920
+ { x: 40, y: 60, color: "#4ade80" },
11921
+ { x: 70, y: 30, color: "#22c55e" },
11922
+ { x: 80, y: 70, color: "#4ade80" }
11923
+ ];
11924
+ DEFAULT_UNITS = [
11925
+ { x: 30, y: 30, color: "#60a5fa", isPlayer: true }
11926
+ ];
11927
+ DEFAULT_VIEWPORT = { x: 20, y: 20, w: 40, h: 40 };
11895
11928
  MiniMap.displayName = "MiniMap";
11896
11929
  }
11897
11930
  });
@@ -13014,7 +13047,7 @@ var init_Accordion = __esm({
13014
13047
  }
13015
13048
  });
13016
13049
  function ActionButtons({
13017
- buttons,
13050
+ buttons = DEFAULT_BUTTONS,
13018
13051
  onAction,
13019
13052
  actionEvent,
13020
13053
  layout = "horizontal",
@@ -13121,7 +13154,7 @@ function ActionButtons({
13121
13154
  button.id
13122
13155
  )) });
13123
13156
  }
13124
- var sizeMap14, layoutMap;
13157
+ var sizeMap14, layoutMap, DEFAULT_BUTTONS;
13125
13158
  var init_ActionButtons = __esm({
13126
13159
  "components/game/molecules/ActionButtons.tsx"() {
13127
13160
  "use client";
@@ -13138,6 +13171,11 @@ var init_ActionButtons = __esm({
13138
13171
  vertical: "flex flex-col gap-2",
13139
13172
  diamond: "grid grid-cols-3 gap-1"
13140
13173
  };
13174
+ DEFAULT_BUTTONS = [
13175
+ { id: "jump", label: "Jump", icon: "chevron-up", variant: "primary" },
13176
+ { id: "attack", label: "Attack", icon: "sword", variant: "secondary" },
13177
+ { id: "dodge", label: "Dodge", icon: "wind", variant: "ghost" }
13178
+ ];
13141
13179
  ActionButtons.displayName = "ActionButtons";
13142
13180
  }
13143
13181
  });
@@ -14330,7 +14368,7 @@ function IsometricCanvas({
14330
14368
  // Rendering options
14331
14369
  scale = 0.4,
14332
14370
  debug: debug2 = false,
14333
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
14371
+ backgroundImage = "",
14334
14372
  showMinimap = true,
14335
14373
  enableCamera = true,
14336
14374
  unitScale = 1,
@@ -15468,10 +15506,10 @@ function BattleTemplate({
15468
15506
  entity,
15469
15507
  scale = 0.45,
15470
15508
  unitScale = 1,
15471
- tiles,
15472
- units,
15473
- features,
15474
- assetManifest,
15509
+ tiles = DEFAULT_BATTLE_TILES,
15510
+ units = DEFAULT_BATTLE_UNITS,
15511
+ features = DEFAULT_BATTLE_FEATURES,
15512
+ assetManifest = DEFAULT_BATTLE_MANIFEST,
15475
15513
  className
15476
15514
  }) {
15477
15515
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -15497,9 +15535,62 @@ function BattleTemplate({
15497
15535
  }
15498
15536
  );
15499
15537
  }
15538
+ var CDN, DEFAULT_BATTLE_TILES, DEFAULT_BATTLE_UNITS, DEFAULT_BATTLE_FEATURES, DEFAULT_BATTLE_MANIFEST;
15500
15539
  var init_BattleTemplate = __esm({
15501
15540
  "components/game/templates/BattleTemplate.tsx"() {
15502
15541
  init_BattleBoard();
15542
+ CDN = "https://almadar-kflow-assets.web.app/shared";
15543
+ DEFAULT_BATTLE_TILES = [
15544
+ { x: 0, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15545
+ { x: 1, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15546
+ { x: 2, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15547
+ { x: 3, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15548
+ { x: 4, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15549
+ { x: 0, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15550
+ { x: 1, y: 1, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
15551
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15552
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15553
+ { x: 4, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15554
+ { x: 0, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15555
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15556
+ { x: 2, y: 2, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
15557
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15558
+ { x: 4, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15559
+ { x: 0, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15560
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15561
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15562
+ { x: 3, y: 3, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
15563
+ { x: 4, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15564
+ { x: 0, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15565
+ { x: 1, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15566
+ { x: 2, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15567
+ { x: 3, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15568
+ { x: 4, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` }
15569
+ ];
15570
+ DEFAULT_BATTLE_UNITS = [
15571
+ { id: "u1", position: { x: 1, y: 1 }, unitType: "worker", name: "Worker", team: "player", health: 10, maxHealth: 10, sprite: `${CDN}/sprite-sheets/amir-sprite-sheet-se.png` },
15572
+ { id: "u2", position: { x: 3, y: 3 }, unitType: "guardian", name: "Guardian", team: "enemy", health: 8, maxHealth: 10, sprite: `${CDN}/sprite-sheets/destroyer-sprite-sheet-sw.png` }
15573
+ ];
15574
+ DEFAULT_BATTLE_FEATURES = [
15575
+ { id: "f1", x: 2, y: 2, type: "gold_mine", sprite: `${CDN}/world-map/gold_mine.png` },
15576
+ { id: "f2", x: 3, y: 1, type: "portal", sprite: `${CDN}/world-map/portal_open.png` }
15577
+ ];
15578
+ DEFAULT_BATTLE_MANIFEST = {
15579
+ baseUrl: CDN,
15580
+ terrains: {
15581
+ stone: "/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png",
15582
+ dirt: "/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png",
15583
+ grass: "/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png"
15584
+ },
15585
+ units: {
15586
+ worker: "/sprite-sheets/amir-sprite-sheet-se.png",
15587
+ guardian: "/sprite-sheets/destroyer-sprite-sheet-sw.png"
15588
+ },
15589
+ features: {
15590
+ gold_mine: "/world-map/gold_mine.png",
15591
+ portal: "/world-map/portal_open.png"
15592
+ }
15593
+ };
15503
15594
  BattleTemplate.displayName = "BattleTemplate";
15504
15595
  }
15505
15596
  });
@@ -22670,10 +22761,10 @@ var init_CastleBoard = __esm({
22670
22761
  function CastleTemplate({
22671
22762
  entity,
22672
22763
  scale = 0.45,
22673
- tiles,
22674
- units,
22675
- features,
22676
- assetManifest,
22764
+ tiles = DEFAULT_CASTLE_TILES,
22765
+ units = DEFAULT_CASTLE_UNITS,
22766
+ features = DEFAULT_CASTLE_FEATURES,
22767
+ assetManifest = DEFAULT_CASTLE_MANIFEST,
22677
22768
  className
22678
22769
  }) {
22679
22770
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -22694,9 +22785,61 @@ function CastleTemplate({
22694
22785
  }
22695
22786
  );
22696
22787
  }
22788
+ var CDN2, DEFAULT_CASTLE_TILES, DEFAULT_CASTLE_UNITS, DEFAULT_CASTLE_FEATURES, DEFAULT_CASTLE_MANIFEST;
22697
22789
  var init_CastleTemplate = __esm({
22698
22790
  "components/game/templates/CastleTemplate.tsx"() {
22699
22791
  init_CastleBoard();
22792
+ CDN2 = "https://almadar-kflow-assets.web.app/shared";
22793
+ DEFAULT_CASTLE_TILES = [
22794
+ { x: 0, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22795
+ { x: 1, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22796
+ { x: 2, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22797
+ { x: 3, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22798
+ { x: 4, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22799
+ { x: 0, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22800
+ { x: 1, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22801
+ { x: 2, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22802
+ { x: 3, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22803
+ { x: 4, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22804
+ { x: 0, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22805
+ { x: 1, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22806
+ { x: 2, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_09.png` },
22807
+ { x: 3, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22808
+ { x: 4, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22809
+ { x: 0, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22810
+ { x: 1, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22811
+ { x: 2, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22812
+ { x: 3, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22813
+ { x: 4, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22814
+ { x: 0, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22815
+ { x: 1, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22816
+ { x: 2, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22817
+ { x: 3, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22818
+ { x: 4, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` }
22819
+ ];
22820
+ DEFAULT_CASTLE_UNITS = [
22821
+ { id: "u1", position: { x: 1, y: 1 }, unitType: "worker", name: "Worker", team: "player", health: 10, maxHealth: 10, sprite: `${CDN2}/sprite-sheets/coordinator-sprite-sheet-se.png` },
22822
+ { id: "u2", position: { x: 3, y: 3 }, unitType: "guardian", name: "Guardian", team: "player", health: 10, maxHealth: 10, sprite: `${CDN2}/sprite-sheets/forger-sprite-sheet-se.png` }
22823
+ ];
22824
+ DEFAULT_CASTLE_FEATURES = [
22825
+ { id: "f1", x: 2, y: 2, type: "chest", sprite: `${CDN2}/world-map/treasure_chest_closed.png` },
22826
+ { id: "f2", x: 3, y: 1, type: "crystal", sprite: `${CDN2}/world-map/resonance_crystal.png` }
22827
+ ];
22828
+ DEFAULT_CASTLE_MANIFEST = {
22829
+ baseUrl: CDN2,
22830
+ terrains: {
22831
+ wall: "/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png",
22832
+ floor: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png"
22833
+ },
22834
+ units: {
22835
+ worker: "/sprite-sheets/coordinator-sprite-sheet-se.png",
22836
+ guardian: "/sprite-sheets/forger-sprite-sheet-se.png"
22837
+ },
22838
+ features: {
22839
+ chest: "/world-map/treasure_chest_closed.png",
22840
+ crystal: "/world-map/resonance_crystal.png"
22841
+ }
22842
+ };
22700
22843
  CastleTemplate.displayName = "CastleTemplate";
22701
22844
  }
22702
22845
  });
@@ -23818,7 +23961,7 @@ var init_CodeRunnerPanel = __esm({
23818
23961
  }
23819
23962
  });
23820
23963
  function CombatLog({
23821
- events: events2,
23964
+ events: events2 = DEFAULT_COMBAT_EVENTS,
23822
23965
  maxVisible = 50,
23823
23966
  autoScroll = true,
23824
23967
  showTimestamps = false,
@@ -23869,7 +24012,7 @@ function CombatLog({
23869
24012
  }) }) })
23870
24013
  ] });
23871
24014
  }
23872
- var eventIcons, eventColors, eventBadgeVariants;
24015
+ var eventIcons, eventColors, eventBadgeVariants, DEFAULT_COMBAT_EVENTS;
23873
24016
  var init_CombatLog = __esm({
23874
24017
  "components/game/molecules/CombatLog.tsx"() {
23875
24018
  init_atoms2();
@@ -23901,6 +24044,13 @@ var init_CombatLog = __esm({
23901
24044
  death: "secondary",
23902
24045
  spawn: "secondary"
23903
24046
  };
24047
+ DEFAULT_COMBAT_EVENTS = [
24048
+ { id: "e1", type: "spawn", message: "Shadow Guard entered the field.", timestamp: 0, turn: 1 },
24049
+ { id: "e2", type: "move", message: "Hero moved to (3, 4).", timestamp: 1, actorName: "Hero", turn: 1 },
24050
+ { id: "e3", type: "attack", message: "Hero attacked Shadow Guard.", timestamp: 2, actorName: "Hero", targetName: "Shadow Guard", value: 18, turn: 2 },
24051
+ { id: "e4", type: "defend", message: "Shadow Guard blocked 5 damage.", timestamp: 3, actorName: "Shadow Guard", value: 5, turn: 2 },
24052
+ { id: "e5", type: "heal", message: "Hero used Health Potion.", timestamp: 4, actorName: "Hero", value: 25, turn: 3 }
24053
+ ];
23904
24054
  CombatLog.displayName = "CombatLog";
23905
24055
  }
23906
24056
  });
@@ -24308,9 +24458,9 @@ function isValidRarity(value) {
24308
24458
  return rarityValues.includes(value);
24309
24459
  }
24310
24460
  function CraftingRecipe({
24311
- inputs,
24312
- output,
24313
- canCraft = false,
24461
+ inputs = DEFAULT_INPUTS,
24462
+ output = DEFAULT_OUTPUT,
24463
+ canCraft = true,
24314
24464
  onCraft,
24315
24465
  craftEvent,
24316
24466
  className
@@ -24371,7 +24521,7 @@ function CraftingRecipe({
24371
24521
  }
24372
24522
  );
24373
24523
  }
24374
- var rarityValues;
24524
+ var rarityValues, DEFAULT_INPUTS, DEFAULT_OUTPUT;
24375
24525
  var init_CraftingRecipe = __esm({
24376
24526
  "components/game/molecules/CraftingRecipe.tsx"() {
24377
24527
  "use client";
@@ -24383,6 +24533,15 @@ var init_CraftingRecipe = __esm({
24383
24533
  init_Stack();
24384
24534
  init_Icon();
24385
24535
  rarityValues = ["common", "uncommon", "rare", "epic", "legendary"];
24536
+ DEFAULT_INPUTS = [
24537
+ { icon: "gem", label: "Iron Ore", required: 2, available: 3 },
24538
+ { icon: "flame", label: "Coal", required: 1, available: 1 }
24539
+ ];
24540
+ DEFAULT_OUTPUT = {
24541
+ icon: "sword",
24542
+ label: "Iron Sword",
24543
+ rarity: "uncommon"
24544
+ };
24386
24545
  CraftingRecipe.displayName = "CraftingRecipe";
24387
24546
  }
24388
24547
  });
@@ -29379,10 +29538,10 @@ var init_StatBadge = __esm({
29379
29538
  }
29380
29539
  });
29381
29540
  function InventoryGrid({
29382
- items,
29541
+ items = DEFAULT_GRID_ITEMS,
29383
29542
  columns = 4,
29384
- totalSlots,
29385
- selectedId,
29543
+ totalSlots = 12,
29544
+ selectedId = "",
29386
29545
  onSelect,
29387
29546
  selectEvent,
29388
29547
  size = "md",
@@ -29431,7 +29590,7 @@ function InventoryGrid({
29431
29590
  }
29432
29591
  );
29433
29592
  }
29434
- var columnMap;
29593
+ var columnMap, DEFAULT_GRID_ITEMS;
29435
29594
  var init_InventoryGrid = __esm({
29436
29595
  "components/game/molecules/InventoryGrid.tsx"() {
29437
29596
  "use client";
@@ -29448,12 +29607,18 @@ var init_InventoryGrid = __esm({
29448
29607
  7: "grid-cols-7",
29449
29608
  8: "grid-cols-8"
29450
29609
  };
29610
+ DEFAULT_GRID_ITEMS = [
29611
+ { id: "grid-1", icon: "sword", label: "Iron Sword", quantity: 1, rarity: "common" },
29612
+ { id: "grid-2", icon: "flask-conical", label: "Health Potion", quantity: 3, rarity: "uncommon" },
29613
+ { id: "grid-3", icon: "shield", label: "Wooden Shield", quantity: 1, rarity: "common" },
29614
+ { id: "grid-4", icon: "gem", label: "Ruby Gem", quantity: 2, rarity: "rare" }
29615
+ ];
29451
29616
  InventoryGrid.displayName = "InventoryGrid";
29452
29617
  }
29453
29618
  });
29454
29619
  function QuestTracker({
29455
- quests,
29456
- activeQuestId,
29620
+ quests = DEFAULT_QUESTS,
29621
+ activeQuestId = "q2",
29457
29622
  className
29458
29623
  }) {
29459
29624
  return /* @__PURE__ */ jsx(VStack, { gap: "sm", className, children: quests.map((quest) => {
@@ -29519,6 +29684,7 @@ function QuestTracker({
29519
29684
  );
29520
29685
  }) });
29521
29686
  }
29687
+ var DEFAULT_QUESTS;
29522
29688
  var init_QuestTracker = __esm({
29523
29689
  "components/game/molecules/QuestTracker.tsx"() {
29524
29690
  "use client";
@@ -29528,6 +29694,11 @@ var init_QuestTracker = __esm({
29528
29694
  init_Typography();
29529
29695
  init_Box();
29530
29696
  init_Stack();
29697
+ DEFAULT_QUESTS = [
29698
+ { id: "q1", title: "Reach the Ancient Ruins", progress: 1, maxProgress: 1, completed: true },
29699
+ { id: "q2", title: "Defeat the Shadow Guard", progress: 2, maxProgress: 5, active: true },
29700
+ { id: "q3", title: "Collect 3 Crystal Shards", progress: 0, maxProgress: 3, active: false }
29701
+ ];
29531
29702
  QuestTracker.displayName = "QuestTracker";
29532
29703
  }
29533
29704
  });
@@ -29540,7 +29711,7 @@ function formatTime2(seconds) {
29540
29711
  return `${seconds}s`;
29541
29712
  }
29542
29713
  function PowerupSlots({
29543
- active,
29714
+ active = DEFAULT_ACTIVE_POWERUPS,
29544
29715
  maxSlots = 4,
29545
29716
  className
29546
29717
  }) {
@@ -29585,6 +29756,7 @@ function PowerupSlots({
29585
29756
  ))
29586
29757
  ] });
29587
29758
  }
29759
+ var DEFAULT_ACTIVE_POWERUPS;
29588
29760
  var init_PowerupSlots = __esm({
29589
29761
  "components/game/molecules/PowerupSlots.tsx"() {
29590
29762
  "use client";
@@ -29593,6 +29765,10 @@ var init_PowerupSlots = __esm({
29593
29765
  init_Box();
29594
29766
  init_Stack();
29595
29767
  init_Typography();
29768
+ DEFAULT_ACTIVE_POWERUPS = [
29769
+ { id: "pw1", icon: "zap", label: "Speed Boost", remainingTime: 12 },
29770
+ { id: "pw2", icon: "shield", label: "Iron Shield", remainingTime: 30 }
29771
+ ];
29596
29772
  PowerupSlots.displayName = "PowerupSlots";
29597
29773
  }
29598
29774
  });
@@ -29604,7 +29780,7 @@ function GameCanvas2D({
29604
29780
  tickEvent,
29605
29781
  drawEvent,
29606
29782
  fps = 60,
29607
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
29783
+ backgroundImage = "",
29608
29784
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
29609
29785
  className
29610
29786
  }) {
@@ -29708,10 +29884,10 @@ var init_GameCanvas2D = __esm({
29708
29884
  }
29709
29885
  });
29710
29886
  function HealthPanel({
29711
- current,
29712
- max,
29713
- shield,
29714
- label,
29887
+ current = 75,
29888
+ max = 100,
29889
+ shield = 20,
29890
+ label = "Player HP",
29715
29891
  effects,
29716
29892
  showNumbers = true,
29717
29893
  size = "md",
@@ -29829,11 +30005,11 @@ var init_HealthPanel = __esm({
29829
30005
  }
29830
30006
  });
29831
30007
  function ScoreBoard({
29832
- score: rawScore,
29833
- highScore: rawHighScore,
29834
- combo: rawCombo,
29835
- multiplier: rawMultiplier,
29836
- level: rawLevel,
30008
+ score: rawScore = 4200,
30009
+ highScore: rawHighScore = 8750,
30010
+ combo: rawCombo = 3,
30011
+ multiplier: rawMultiplier = 2,
30012
+ level: rawLevel = 4,
29837
30013
  className
29838
30014
  }) {
29839
30015
  const score = rawScore ?? 0;
@@ -29906,7 +30082,7 @@ var init_ScoreBoard = __esm({
29906
30082
  }
29907
30083
  });
29908
30084
  function ResourceBar({
29909
- resources,
30085
+ resources = DEFAULT_RESOURCES,
29910
30086
  size = "md",
29911
30087
  className
29912
30088
  }) {
@@ -29932,21 +30108,27 @@ function ResourceBar({
29932
30108
  }
29933
30109
  );
29934
30110
  }
30111
+ var DEFAULT_RESOURCES;
29935
30112
  var init_ResourceBar = __esm({
29936
30113
  "components/game/molecules/ResourceBar.tsx"() {
29937
30114
  "use client";
29938
30115
  init_cn();
29939
30116
  init_StatBadge();
29940
30117
  init_Box();
30118
+ DEFAULT_RESOURCES = [
30119
+ { icon: "coins", label: "Gold", value: 320 },
30120
+ { icon: "zap", label: "Energy", value: 7, max: 10 },
30121
+ { icon: "gem", label: "Crystals", value: 15 }
30122
+ ];
29941
30123
  ResourceBar.displayName = "ResourceBar";
29942
30124
  }
29943
30125
  });
29944
30126
  function TurnPanel({
29945
- currentTurn,
29946
- maxTurns,
29947
- phase,
29948
- activeTeam,
29949
- actions,
30127
+ currentTurn = 3,
30128
+ maxTurns = 10,
30129
+ phase = "Attack",
30130
+ activeTeam = "Heroes",
30131
+ actions = DEFAULT_TURN_ACTIONS,
29950
30132
  className
29951
30133
  }) {
29952
30134
  const eventBus = useEventBus();
@@ -29991,6 +30173,7 @@ function TurnPanel({
29991
30173
  }
29992
30174
  );
29993
30175
  }
30176
+ var DEFAULT_TURN_ACTIONS;
29994
30177
  var init_TurnPanel = __esm({
29995
30178
  "components/game/molecules/TurnPanel.tsx"() {
29996
30179
  "use client";
@@ -29999,15 +30182,19 @@ var init_TurnPanel = __esm({
29999
30182
  init_Button();
30000
30183
  init_Box();
30001
30184
  init_useEventBus();
30185
+ DEFAULT_TURN_ACTIONS = [
30186
+ { label: "End Turn", icon: "skip-forward", event: "END_TURN" },
30187
+ { label: "Forfeit", icon: "flag", event: "FORFEIT", disabled: false }
30188
+ ];
30002
30189
  TurnPanel.displayName = "TurnPanel";
30003
30190
  }
30004
30191
  });
30005
30192
  function EnemyPlate({
30006
- name,
30007
- health,
30008
- maxHealth,
30009
- level,
30010
- effects,
30193
+ name = "Shadow Guard",
30194
+ health = 80,
30195
+ maxHealth = 100,
30196
+ level = 5,
30197
+ effects = DEFAULT_ENEMY_EFFECTS,
30011
30198
  className
30012
30199
  }) {
30013
30200
  return /* @__PURE__ */ jsxs(
@@ -30073,7 +30260,7 @@ function EnemyPlate({
30073
30260
  }
30074
30261
  );
30075
30262
  }
30076
- var effectVariantMap2;
30263
+ var effectVariantMap2, DEFAULT_ENEMY_EFFECTS;
30077
30264
  var init_EnemyPlate = __esm({
30078
30265
  "components/game/molecules/EnemyPlate.tsx"() {
30079
30266
  "use client";
@@ -30087,12 +30274,15 @@ var init_EnemyPlate = __esm({
30087
30274
  debuff: "danger",
30088
30275
  neutral: "neutral"
30089
30276
  };
30277
+ DEFAULT_ENEMY_EFFECTS = [
30278
+ { icon: "flame", label: "Burn", variant: "debuff" }
30279
+ ];
30090
30280
  EnemyPlate.displayName = "EnemyPlate";
30091
30281
  }
30092
30282
  });
30093
30283
  function UnitCommandBar({
30094
- commands,
30095
- selectedUnitId,
30284
+ commands = DEFAULT_COMMANDS,
30285
+ selectedUnitId = "unit-1",
30096
30286
  className
30097
30287
  }) {
30098
30288
  const eventBus = useEventBus();
@@ -30135,6 +30325,7 @@ function UnitCommandBar({
30135
30325
  }
30136
30326
  );
30137
30327
  }
30328
+ var DEFAULT_COMMANDS;
30138
30329
  var init_UnitCommandBar = __esm({
30139
30330
  "components/game/molecules/UnitCommandBar.tsx"() {
30140
30331
  "use client";
@@ -30143,6 +30334,12 @@ var init_UnitCommandBar = __esm({
30143
30334
  init_Box();
30144
30335
  init_Typography();
30145
30336
  init_useEventBus();
30337
+ DEFAULT_COMMANDS = [
30338
+ { label: "Move", icon: "move", event: "MOVE", hotkey: "M" },
30339
+ { label: "Attack", icon: "sword", event: "ATTACK", hotkey: "A" },
30340
+ { label: "Defend", icon: "shield", event: "DEFEND", hotkey: "D" },
30341
+ { label: "Wait", icon: "clock", event: "WAIT", hotkey: "W" }
30342
+ ];
30146
30343
  UnitCommandBar.displayName = "UnitCommandBar";
30147
30344
  }
30148
30345
  });
@@ -30176,7 +30373,7 @@ function GameHud({
30176
30373
  className,
30177
30374
  transparent = true
30178
30375
  }) {
30179
- const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : []);
30376
+ const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : DEFAULT_HUD_STATS);
30180
30377
  const stats = Array.isArray(rawStats) ? rawStats : [];
30181
30378
  const position = propPosition ?? "corners";
30182
30379
  if (position === "corners") {
@@ -30201,7 +30398,7 @@ function GameHud({
30201
30398
  }
30202
30399
  );
30203
30400
  }
30204
- var positionMap;
30401
+ var positionMap, DEFAULT_HUD_STATS;
30205
30402
  var init_GameHud = __esm({
30206
30403
  "components/game/molecules/GameHud.tsx"() {
30207
30404
  init_cn();
@@ -30211,11 +30408,17 @@ var init_GameHud = __esm({
30211
30408
  bottom: "bottom-0 left-0 right-0 flex justify-between items-end p-4",
30212
30409
  corners: "inset-0 pointer-events-none"
30213
30410
  };
30411
+ DEFAULT_HUD_STATS = [
30412
+ { label: "HP", value: 75, max: 100, format: "bar", variant: "danger" },
30413
+ { label: "MP", value: 40, max: 60, format: "bar", variant: "primary" },
30414
+ { label: "Score", value: 4200, format: "number", variant: "warning" },
30415
+ { label: "Level", value: 4, format: "number", variant: "default" }
30416
+ ];
30214
30417
  GameHud.displayName = "GameHud";
30215
30418
  }
30216
30419
  });
30217
30420
  function DialogueBox({
30218
- dialogue,
30421
+ dialogue = DEFAULT_DIALOGUE,
30219
30422
  typewriterSpeed = 30,
30220
30423
  position = "bottom",
30221
30424
  onComplete,
@@ -30398,17 +30601,27 @@ function DialogueBox({
30398
30601
  }
30399
30602
  );
30400
30603
  }
30604
+ var DEFAULT_DIALOGUE;
30401
30605
  var init_DialogueBox = __esm({
30402
30606
  "components/game/molecules/DialogueBox.tsx"() {
30403
30607
  "use client";
30404
30608
  init_cn();
30405
30609
  init_useEventBus();
30610
+ DEFAULT_DIALOGUE = {
30611
+ speaker: "Village Elder",
30612
+ text: "The ancient ruins hold great power \u2014 and great danger. Choose your path wisely, traveler.",
30613
+ choices: [
30614
+ { text: "I am ready. Lead the way.", action: "ACCEPT_QUEST" },
30615
+ { text: "Tell me more about the ruins.", action: "ASK_LORE" },
30616
+ { text: "Perhaps another time.", action: "DECLINE" }
30617
+ ]
30618
+ };
30406
30619
  }
30407
30620
  });
30408
30621
  function InventoryPanel({
30409
- items,
30410
- slots,
30411
- columns,
30622
+ items = DEFAULT_INVENTORY_ITEMS,
30623
+ slots = 12,
30624
+ columns = 4,
30412
30625
  selectedSlot,
30413
30626
  onSelectSlot,
30414
30627
  onUseItem,
@@ -30556,25 +30769,31 @@ function InventoryPanel({
30556
30769
  )
30557
30770
  ] });
30558
30771
  }
30772
+ var DEFAULT_INVENTORY_ITEMS;
30559
30773
  var init_InventoryPanel = __esm({
30560
30774
  "components/game/molecules/InventoryPanel.tsx"() {
30561
30775
  "use client";
30562
30776
  init_cn();
30563
30777
  init_useEventBus();
30778
+ DEFAULT_INVENTORY_ITEMS = [
30779
+ { id: "item-1", type: "weapon", name: "Iron Sword", quantity: 1, description: "A sturdy iron blade." },
30780
+ { id: "item-2", type: "potion", name: "Health Potion", quantity: 3, description: "Restores 50 HP." },
30781
+ { id: "item-3", type: "armor", name: "Leather Helm", quantity: 1, description: "Light head protection." }
30782
+ ];
30564
30783
  }
30565
30784
  });
30566
30785
  function GameMenu({
30567
- title,
30786
+ title = "Epic Quest",
30568
30787
  subtitle,
30569
30788
  options,
30570
30789
  menuItems,
30571
30790
  onSelect,
30572
30791
  eventBus: eventBusProp,
30573
30792
  background,
30574
- logo,
30793
+ logo = "",
30575
30794
  className
30576
30795
  }) {
30577
- const resolvedOptions = options ?? menuItems ?? [];
30796
+ const resolvedOptions = options ?? menuItems ?? DEFAULT_MENU_OPTIONS;
30578
30797
  let eventBusFromHook = null;
30579
30798
  try {
30580
30799
  eventBusFromHook = useEventBus();
@@ -30655,7 +30874,7 @@ function GameMenu({
30655
30874
  }
30656
30875
  );
30657
30876
  }
30658
- var variantMap3;
30877
+ var variantMap3, DEFAULT_MENU_OPTIONS;
30659
30878
  var init_GameMenu = __esm({
30660
30879
  "components/game/molecules/GameMenu.tsx"() {
30661
30880
  "use client";
@@ -30666,6 +30885,11 @@ var init_GameMenu = __esm({
30666
30885
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
30667
30886
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
30668
30887
  };
30888
+ DEFAULT_MENU_OPTIONS = [
30889
+ { label: "New Game", event: "NEW_GAME", variant: "primary" },
30890
+ { label: "Continue", event: "CONTINUE", variant: "secondary" },
30891
+ { label: "Settings", event: "SETTINGS", variant: "ghost" }
30892
+ ];
30669
30893
  GameMenu.displayName = "GameMenu";
30670
30894
  }
30671
30895
  });
@@ -30676,19 +30900,19 @@ function formatTime3(ms) {
30676
30900
  return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
30677
30901
  }
30678
30902
  function GameOverScreen({
30679
- title,
30903
+ title = "Game Over",
30680
30904
  message,
30681
- stats = [],
30905
+ stats = DEFAULT_GAME_OVER_STATS,
30682
30906
  actions,
30683
30907
  menuItems,
30684
30908
  onAction,
30685
30909
  eventBus: eventBusProp,
30686
- variant = "neutral",
30687
- highScore,
30688
- currentScore,
30910
+ variant = "defeat",
30911
+ highScore = 2e3,
30912
+ currentScore = 1240,
30689
30913
  className
30690
30914
  }) {
30691
- const resolvedActions = actions ?? menuItems ?? [];
30915
+ const resolvedActions = actions ?? menuItems ?? DEFAULT_GAME_OVER_ACTIONS;
30692
30916
  let eventBusFromHook = null;
30693
30917
  try {
30694
30918
  eventBusFromHook = useEventBus();
@@ -30775,7 +30999,7 @@ function GameOverScreen({
30775
30999
  }
30776
31000
  );
30777
31001
  }
30778
- var variantColors, buttonVariants;
31002
+ var variantColors, buttonVariants, DEFAULT_GAME_OVER_ACTIONS, DEFAULT_GAME_OVER_STATS;
30779
31003
  var init_GameOverScreen = __esm({
30780
31004
  "components/game/molecules/GameOverScreen.tsx"() {
30781
31005
  "use client";
@@ -30804,21 +31028,35 @@ var init_GameOverScreen = __esm({
30804
31028
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
30805
31029
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
30806
31030
  };
31031
+ DEFAULT_GAME_OVER_ACTIONS = [
31032
+ { label: "Play Again", event: "RESTART", variant: "primary" },
31033
+ { label: "Main Menu", event: "MAIN_MENU", variant: "secondary" }
31034
+ ];
31035
+ DEFAULT_GAME_OVER_STATS = [
31036
+ { label: "Score", value: 1240 },
31037
+ { label: "Enemies Defeated", value: 8 },
31038
+ { label: "Time", value: 93e3, format: "time" }
31039
+ ];
30807
31040
  GameOverScreen.displayName = "GameOverScreen";
30808
31041
  }
30809
31042
  });
30810
31043
  function PlatformerCanvas({
30811
31044
  player,
30812
- platforms = [],
31045
+ platforms = [
31046
+ { x: 0, y: 368, width: 800, height: 32, type: "ground" },
31047
+ { x: 150, y: 280, width: 160, height: 16, type: "platform" },
31048
+ { x: 420, y: 220, width: 160, height: 16, type: "platform" },
31049
+ { x: 620, y: 300, width: 140, height: 16, type: "platform" }
31050
+ ],
30813
31051
  worldWidth = 800,
30814
31052
  worldHeight = 400,
30815
31053
  canvasWidth = 800,
30816
31054
  canvasHeight = 400,
30817
31055
  followCamera = true,
30818
- bgColor,
31056
+ bgColor = "#5c94fc",
30819
31057
  playerSprite = "https://almadar-kflow-assets.web.app/shared/platformer/characters/platformChar_idle.png",
30820
31058
  tileSprites,
30821
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
31059
+ backgroundImage = "",
30822
31060
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/platformer/",
30823
31061
  leftEvent = "MOVE_LEFT",
30824
31062
  rightEvent = "MOVE_RIGHT",
@@ -30866,10 +31104,10 @@ function PlatformerCanvas({
30866
31104
  };
30867
31105
  }, []);
30868
31106
  const resolvedPlayer = player ?? {
30869
- x: 50,
30870
- y: 300,
30871
- width: 24,
30872
- height: 32,
31107
+ x: 80,
31108
+ y: 336,
31109
+ width: 32,
31110
+ height: 48,
30873
31111
  facingRight: true
30874
31112
  };
30875
31113
  const handleKeyDown = useCallback((e) => {
@@ -49158,12 +49396,12 @@ function WorldMapTemplate({
49158
49396
  entity,
49159
49397
  scale = 0.4,
49160
49398
  unitScale = 2.5,
49161
- diamondTopY,
49399
+ diamondTopY = 374,
49162
49400
  allowMoveAllHeroes = false,
49163
- tiles,
49164
- units,
49165
- features,
49166
- assetManifest,
49401
+ tiles = DEFAULT_WORLDMAP_TILES,
49402
+ units = DEFAULT_WORLDMAP_UNITS,
49403
+ features = DEFAULT_WORLDMAP_FEATURES,
49404
+ assetManifest = DEFAULT_WORLDMAP_MANIFEST,
49167
49405
  className
49168
49406
  }) {
49169
49407
  return /* @__PURE__ */ jsx(
@@ -49186,9 +49424,63 @@ function WorldMapTemplate({
49186
49424
  }
49187
49425
  );
49188
49426
  }
49427
+ var CDN3, DEFAULT_WORLDMAP_TILES, DEFAULT_WORLDMAP_UNITS, DEFAULT_WORLDMAP_FEATURES, DEFAULT_WORLDMAP_MANIFEST;
49189
49428
  var init_WorldMapTemplate = __esm({
49190
49429
  "components/game/templates/WorldMapTemplate.tsx"() {
49191
49430
  init_WorldMapBoard();
49431
+ CDN3 = "https://almadar-kflow-assets.web.app/shared";
49432
+ DEFAULT_WORLDMAP_TILES = [
49433
+ { x: 0, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49434
+ { x: 1, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49435
+ { x: 2, y: 0, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
49436
+ { x: 3, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49437
+ { x: 4, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49438
+ { x: 0, y: 1, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49439
+ { x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49440
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49441
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49442
+ { x: 4, y: 1, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
49443
+ { x: 0, y: 2, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
49444
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49445
+ { x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
49446
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49447
+ { x: 4, y: 2, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49448
+ { x: 0, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49449
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49450
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49451
+ { x: 3, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
49452
+ { x: 4, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49453
+ { x: 0, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49454
+ { x: 1, y: 4, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
49455
+ { x: 2, y: 4, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49456
+ { x: 3, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49457
+ { x: 4, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` }
49458
+ ];
49459
+ DEFAULT_WORLDMAP_UNITS = [
49460
+ { id: "h1", position: { x: 1, y: 1 }, unitType: "hero", name: "Amir", team: "player", health: 10, maxHealth: 10, sprite: `${CDN3}/sprite-sheets/amir-sprite-sheet-se.png` },
49461
+ { id: "h2", position: { x: 3, y: 3 }, unitType: "scout", name: "Archivist", team: "player", health: 10, maxHealth: 10, sprite: `${CDN3}/sprite-sheets/archivist-sprite-sheet-se.png` }
49462
+ ];
49463
+ DEFAULT_WORLDMAP_FEATURES = [
49464
+ { id: "f1", x: 2, y: 2, type: "capital", sprite: `${CDN3}/scenes/world/capital.png` },
49465
+ { id: "f2", x: 4, y: 2, type: "power_node", sprite: `${CDN3}/world-map/power_node.png` }
49466
+ ];
49467
+ DEFAULT_WORLDMAP_MANIFEST = {
49468
+ baseUrl: CDN3,
49469
+ terrains: {
49470
+ grass: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png",
49471
+ water: "/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png",
49472
+ mountain: "/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png",
49473
+ road: "/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png"
49474
+ },
49475
+ units: {
49476
+ hero: "/sprite-sheets/amir-sprite-sheet-se.png",
49477
+ scout: "/sprite-sheets/archivist-sprite-sheet-se.png"
49478
+ },
49479
+ features: {
49480
+ capital: "/scenes/world/capital.png",
49481
+ power_node: "/world-map/power_node.png"
49482
+ }
49483
+ };
49192
49484
  WorldMapTemplate.displayName = "WorldMapTemplate";
49193
49485
  }
49194
49486
  });