@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.
@@ -7089,8 +7089,8 @@ var init_TraitFrame = __esm({
7089
7089
  }
7090
7090
  });
7091
7091
  function HealthBar({
7092
- current,
7093
- max,
7092
+ current = 3,
7093
+ max = 5,
7094
7094
  format = "hearts",
7095
7095
  size = "md",
7096
7096
  className,
@@ -7339,11 +7339,11 @@ var init_ControlButton = __esm({
7339
7339
  });
7340
7340
  function Sprite({
7341
7341
  spritesheet = "https://almadar-kflow-assets.web.app/shared/isometric-blocks/Spritesheet/allTiles_sheet.png",
7342
- frameWidth,
7343
- frameHeight,
7344
- frame,
7345
- x,
7346
- y,
7342
+ frameWidth = 64,
7343
+ frameHeight = 64,
7344
+ frame = 0,
7345
+ x = 0,
7346
+ y = 0,
7347
7347
  scale = 1,
7348
7348
  flipX = false,
7349
7349
  flipY = false,
@@ -7413,7 +7413,7 @@ var init_Sprite = __esm({
7413
7413
  }
7414
7414
  });
7415
7415
  function StateIndicator({
7416
- state,
7416
+ state = "idle",
7417
7417
  label,
7418
7418
  size = "md",
7419
7419
  animated = true,
@@ -7484,8 +7484,8 @@ function formatTime(seconds, format) {
7484
7484
  return `${mins.toString().padStart(2, "0")}:${padded}`;
7485
7485
  }
7486
7486
  function TimerDisplay({
7487
- seconds,
7488
- running,
7487
+ seconds = 90,
7488
+ running = true,
7489
7489
  format = "mm:ss",
7490
7490
  size = "md",
7491
7491
  className,
@@ -7522,8 +7522,8 @@ var init_TimerDisplay = __esm({
7522
7522
  });
7523
7523
  function ResourceCounter({
7524
7524
  icon,
7525
- label,
7526
- value,
7525
+ label = "Gold",
7526
+ value = 250,
7527
7527
  max,
7528
7528
  color,
7529
7529
  size = "md",
@@ -7575,10 +7575,11 @@ var init_ResourceCounter = __esm({
7575
7575
  }
7576
7576
  });
7577
7577
  function ItemSlot({
7578
- icon,
7579
- label,
7578
+ assetUrl = DEFAULT_ASSET_URL,
7579
+ icon = "sword",
7580
+ label = "Iron Sword",
7580
7581
  quantity,
7581
- rarity = "common",
7582
+ rarity = "uncommon",
7582
7583
  empty,
7583
7584
  size = "md",
7584
7585
  selected,
@@ -7586,6 +7587,7 @@ function ItemSlot({
7586
7587
  className
7587
7588
  }) {
7588
7589
  const isClickable = onClick != null;
7590
+ const px = assetSizeMap[size];
7589
7591
  return /* @__PURE__ */ jsxRuntime.jsx(
7590
7592
  "button",
7591
7593
  {
@@ -7606,7 +7608,17 @@ function ItemSlot({
7606
7608
  className
7607
7609
  ),
7608
7610
  children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7609
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: typeof icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: icon }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon }) }),
7611
+ assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
7612
+ "img",
7613
+ {
7614
+ src: assetUrl,
7615
+ alt: label,
7616
+ width: px,
7617
+ height: px,
7618
+ style: { imageRendering: "pixelated", objectFit: "contain" },
7619
+ className: "flex-shrink-0"
7620
+ }
7621
+ ) : icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: typeof icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: icon }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon }) }) : null,
7610
7622
  quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
7611
7623
  "span",
7612
7624
  {
@@ -7622,7 +7634,7 @@ function ItemSlot({
7622
7634
  }
7623
7635
  );
7624
7636
  }
7625
- var sizeMap6, rarityBorderMap, rarityGlowMap;
7637
+ var sizeMap6, rarityBorderMap, rarityGlowMap, DEFAULT_ASSET_URL, assetSizeMap;
7626
7638
  var init_ItemSlot = __esm({
7627
7639
  "components/game/atoms/ItemSlot.tsx"() {
7628
7640
  "use client";
@@ -7647,11 +7659,17 @@ var init_ItemSlot = __esm({
7647
7659
  epic: "shadow-lg",
7648
7660
  legendary: "shadow-lg"
7649
7661
  };
7662
+ DEFAULT_ASSET_URL = "https://almadar-kflow-assets.web.app/shared/isometric-dungeon/Isometric/chestClosed_E.png";
7663
+ assetSizeMap = {
7664
+ sm: 28,
7665
+ md: 40,
7666
+ lg: 56
7667
+ };
7650
7668
  ItemSlot.displayName = "ItemSlot";
7651
7669
  }
7652
7670
  });
7653
7671
  function TurnIndicator({
7654
- currentTurn,
7672
+ currentTurn = 1,
7655
7673
  maxTurns,
7656
7674
  activeTeam,
7657
7675
  phase,
@@ -7714,7 +7732,7 @@ function getComboScale(combo) {
7714
7732
  return "";
7715
7733
  }
7716
7734
  function ComboCounter({
7717
- combo,
7735
+ combo = 5,
7718
7736
  multiplier,
7719
7737
  streak,
7720
7738
  size = "md",
@@ -7760,10 +7778,10 @@ var init_ComboCounter = __esm({
7760
7778
  }
7761
7779
  });
7762
7780
  function XPBar({
7763
- current,
7764
- max,
7765
- level,
7766
- showLabel = false,
7781
+ current = 350,
7782
+ max = 1e3,
7783
+ level = 5,
7784
+ showLabel = true,
7767
7785
  size = "md",
7768
7786
  animated = true,
7769
7787
  className
@@ -7846,7 +7864,7 @@ var init_XPBar = __esm({
7846
7864
  function WaypointMarker({
7847
7865
  label,
7848
7866
  icon,
7849
- active = false,
7867
+ active = true,
7850
7868
  completed = false,
7851
7869
  size = "md",
7852
7870
  className
@@ -7920,11 +7938,11 @@ function formatDuration(seconds) {
7920
7938
  return `${Math.round(seconds)}s`;
7921
7939
  }
7922
7940
  function StatusEffect({
7923
- icon,
7924
- label,
7925
- duration,
7941
+ icon = "shield",
7942
+ label = "Shield",
7943
+ duration = 30,
7926
7944
  stacks,
7927
- variant = "neutral",
7945
+ variant = "buff",
7928
7946
  size = "md",
7929
7947
  className
7930
7948
  }) {
@@ -7986,7 +8004,7 @@ var init_StatusEffect = __esm({
7986
8004
  }
7987
8005
  });
7988
8006
  function DamageNumber({
7989
- value,
8007
+ value = 42,
7990
8008
  type = "damage",
7991
8009
  size = "md",
7992
8010
  className
@@ -8035,8 +8053,8 @@ var init_DamageNumber = __esm({
8035
8053
  }
8036
8054
  });
8037
8055
  function DialogueBubble({
8038
- speaker,
8039
- text,
8056
+ speaker = "Hero",
8057
+ text = "The dungeon awaits. Choose your path wisely.",
8040
8058
  portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
8041
8059
  position = "bottom",
8042
8060
  className
@@ -8073,7 +8091,7 @@ var init_DialogueBubble = __esm({
8073
8091
  }
8074
8092
  });
8075
8093
  function ChoiceButton({
8076
- text,
8094
+ text = "Charge forward into the fray",
8077
8095
  index,
8078
8096
  disabled = false,
8079
8097
  selected = false,
@@ -8119,7 +8137,7 @@ var init_ChoiceButton = __esm({
8119
8137
  }
8120
8138
  });
8121
8139
  function ActionButton({
8122
- label,
8140
+ label = "Attack",
8123
8141
  icon,
8124
8142
  cooldown = 0,
8125
8143
  disabled = false,
@@ -8199,13 +8217,13 @@ var init_ActionButton = __esm({
8199
8217
  }
8200
8218
  });
8201
8219
  function MiniMap({
8202
- tiles = [],
8203
- units = [],
8220
+ tiles = DEFAULT_TILES,
8221
+ units = DEFAULT_UNITS,
8204
8222
  width = 150,
8205
8223
  height = 150,
8206
8224
  mapWidth = 100,
8207
8225
  mapHeight = 100,
8208
- viewportRect,
8226
+ viewportRect = DEFAULT_VIEWPORT,
8209
8227
  className
8210
8228
  }) {
8211
8229
  const canvasRef = React83__namespace.useRef(null);
@@ -8284,10 +8302,25 @@ function MiniMap({
8284
8302
  }
8285
8303
  );
8286
8304
  }
8305
+ var DEFAULT_TILES, DEFAULT_UNITS, DEFAULT_VIEWPORT;
8287
8306
  var init_MiniMap = __esm({
8288
8307
  "components/game/atoms/MiniMap.tsx"() {
8289
8308
  "use client";
8290
8309
  init_cn();
8310
+ DEFAULT_TILES = [
8311
+ { x: 10, y: 10, color: "#4ade80" },
8312
+ { x: 20, y: 15, color: "#4ade80" },
8313
+ { x: 30, y: 25, color: "#22c55e" },
8314
+ { x: 50, y: 40, color: "#4ade80" },
8315
+ { x: 60, y: 55, color: "#16a34a" },
8316
+ { x: 40, y: 60, color: "#4ade80" },
8317
+ { x: 70, y: 30, color: "#22c55e" },
8318
+ { x: 80, y: 70, color: "#4ade80" }
8319
+ ];
8320
+ DEFAULT_UNITS = [
8321
+ { x: 30, y: 30, color: "#60a5fa", isPlayer: true }
8322
+ ];
8323
+ DEFAULT_VIEWPORT = { x: 20, y: 20, w: 40, h: 40 };
8291
8324
  MiniMap.displayName = "MiniMap";
8292
8325
  }
8293
8326
  });
@@ -9766,7 +9799,7 @@ var init_Accordion = __esm({
9766
9799
  }
9767
9800
  });
9768
9801
  function ActionButtons({
9769
- buttons,
9802
+ buttons = DEFAULT_BUTTONS,
9770
9803
  onAction,
9771
9804
  actionEvent,
9772
9805
  layout = "horizontal",
@@ -9873,7 +9906,7 @@ function ActionButtons({
9873
9906
  button.id
9874
9907
  )) });
9875
9908
  }
9876
- var sizeMap14, layoutMap;
9909
+ var sizeMap14, layoutMap, DEFAULT_BUTTONS;
9877
9910
  var init_ActionButtons = __esm({
9878
9911
  "components/game/molecules/ActionButtons.tsx"() {
9879
9912
  "use client";
@@ -9890,6 +9923,11 @@ var init_ActionButtons = __esm({
9890
9923
  vertical: "flex flex-col gap-2",
9891
9924
  diamond: "grid grid-cols-3 gap-1"
9892
9925
  };
9926
+ DEFAULT_BUTTONS = [
9927
+ { id: "jump", label: "Jump", icon: "chevron-up", variant: "primary" },
9928
+ { id: "attack", label: "Attack", icon: "sword", variant: "secondary" },
9929
+ { id: "dodge", label: "Dodge", icon: "wind", variant: "ghost" }
9930
+ ];
9893
9931
  ActionButtons.displayName = "ActionButtons";
9894
9932
  }
9895
9933
  });
@@ -11070,7 +11108,7 @@ function IsometricCanvas({
11070
11108
  // Rendering options
11071
11109
  scale = 0.4,
11072
11110
  debug: debug2 = false,
11073
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
11111
+ backgroundImage = "",
11074
11112
  showMinimap = true,
11075
11113
  enableCamera = true,
11076
11114
  unitScale = 1,
@@ -12208,10 +12246,10 @@ function BattleTemplate({
12208
12246
  entity,
12209
12247
  scale = 0.45,
12210
12248
  unitScale = 1,
12211
- tiles,
12212
- units,
12213
- features,
12214
- assetManifest,
12249
+ tiles = DEFAULT_BATTLE_TILES,
12250
+ units = DEFAULT_BATTLE_UNITS,
12251
+ features = DEFAULT_BATTLE_FEATURES,
12252
+ assetManifest = DEFAULT_BATTLE_MANIFEST,
12215
12253
  className
12216
12254
  }) {
12217
12255
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -12237,9 +12275,62 @@ function BattleTemplate({
12237
12275
  }
12238
12276
  );
12239
12277
  }
12278
+ var CDN, DEFAULT_BATTLE_TILES, DEFAULT_BATTLE_UNITS, DEFAULT_BATTLE_FEATURES, DEFAULT_BATTLE_MANIFEST;
12240
12279
  var init_BattleTemplate = __esm({
12241
12280
  "components/game/templates/BattleTemplate.tsx"() {
12242
12281
  init_BattleBoard();
12282
+ CDN = "https://almadar-kflow-assets.web.app/shared";
12283
+ DEFAULT_BATTLE_TILES = [
12284
+ { x: 0, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12285
+ { x: 1, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12286
+ { x: 2, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12287
+ { x: 3, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12288
+ { x: 4, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12289
+ { x: 0, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12290
+ { x: 1, y: 1, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
12291
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12292
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12293
+ { x: 4, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12294
+ { x: 0, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12295
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12296
+ { x: 2, y: 2, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
12297
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12298
+ { x: 4, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12299
+ { x: 0, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12300
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12301
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12302
+ { x: 3, y: 3, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
12303
+ { x: 4, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12304
+ { x: 0, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12305
+ { x: 1, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12306
+ { x: 2, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12307
+ { x: 3, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12308
+ { x: 4, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` }
12309
+ ];
12310
+ DEFAULT_BATTLE_UNITS = [
12311
+ { 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` },
12312
+ { 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` }
12313
+ ];
12314
+ DEFAULT_BATTLE_FEATURES = [
12315
+ { id: "f1", x: 2, y: 2, type: "gold_mine", sprite: `${CDN}/world-map/gold_mine.png` },
12316
+ { id: "f2", x: 3, y: 1, type: "portal", sprite: `${CDN}/world-map/portal_open.png` }
12317
+ ];
12318
+ DEFAULT_BATTLE_MANIFEST = {
12319
+ baseUrl: CDN,
12320
+ terrains: {
12321
+ stone: "/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png",
12322
+ dirt: "/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png",
12323
+ grass: "/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png"
12324
+ },
12325
+ units: {
12326
+ worker: "/sprite-sheets/amir-sprite-sheet-se.png",
12327
+ guardian: "/sprite-sheets/destroyer-sprite-sheet-sw.png"
12328
+ },
12329
+ features: {
12330
+ gold_mine: "/world-map/gold_mine.png",
12331
+ portal: "/world-map/portal_open.png"
12332
+ }
12333
+ };
12243
12334
  BattleTemplate.displayName = "BattleTemplate";
12244
12335
  }
12245
12336
  });
@@ -20239,10 +20330,10 @@ var init_CastleBoard = __esm({
20239
20330
  function CastleTemplate({
20240
20331
  entity,
20241
20332
  scale = 0.45,
20242
- tiles,
20243
- units,
20244
- features,
20245
- assetManifest,
20333
+ tiles = DEFAULT_CASTLE_TILES,
20334
+ units = DEFAULT_CASTLE_UNITS,
20335
+ features = DEFAULT_CASTLE_FEATURES,
20336
+ assetManifest = DEFAULT_CASTLE_MANIFEST,
20246
20337
  className
20247
20338
  }) {
20248
20339
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -20263,9 +20354,61 @@ function CastleTemplate({
20263
20354
  }
20264
20355
  );
20265
20356
  }
20357
+ var CDN2, DEFAULT_CASTLE_TILES, DEFAULT_CASTLE_UNITS, DEFAULT_CASTLE_FEATURES, DEFAULT_CASTLE_MANIFEST;
20266
20358
  var init_CastleTemplate = __esm({
20267
20359
  "components/game/templates/CastleTemplate.tsx"() {
20268
20360
  init_CastleBoard();
20361
+ CDN2 = "https://almadar-kflow-assets.web.app/shared";
20362
+ DEFAULT_CASTLE_TILES = [
20363
+ { x: 0, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20364
+ { x: 1, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20365
+ { x: 2, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20366
+ { x: 3, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20367
+ { x: 4, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20368
+ { x: 0, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20369
+ { x: 1, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20370
+ { x: 2, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20371
+ { x: 3, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20372
+ { x: 4, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20373
+ { x: 0, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20374
+ { x: 1, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20375
+ { x: 2, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_09.png` },
20376
+ { x: 3, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20377
+ { x: 4, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20378
+ { x: 0, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20379
+ { x: 1, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20380
+ { x: 2, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20381
+ { x: 3, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20382
+ { x: 4, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20383
+ { x: 0, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20384
+ { x: 1, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20385
+ { x: 2, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20386
+ { x: 3, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20387
+ { x: 4, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` }
20388
+ ];
20389
+ DEFAULT_CASTLE_UNITS = [
20390
+ { 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` },
20391
+ { 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` }
20392
+ ];
20393
+ DEFAULT_CASTLE_FEATURES = [
20394
+ { id: "f1", x: 2, y: 2, type: "chest", sprite: `${CDN2}/world-map/treasure_chest_closed.png` },
20395
+ { id: "f2", x: 3, y: 1, type: "crystal", sprite: `${CDN2}/world-map/resonance_crystal.png` }
20396
+ ];
20397
+ DEFAULT_CASTLE_MANIFEST = {
20398
+ baseUrl: CDN2,
20399
+ terrains: {
20400
+ wall: "/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png",
20401
+ floor: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png"
20402
+ },
20403
+ units: {
20404
+ worker: "/sprite-sheets/coordinator-sprite-sheet-se.png",
20405
+ guardian: "/sprite-sheets/forger-sprite-sheet-se.png"
20406
+ },
20407
+ features: {
20408
+ chest: "/world-map/treasure_chest_closed.png",
20409
+ crystal: "/world-map/resonance_crystal.png"
20410
+ }
20411
+ };
20269
20412
  CastleTemplate.displayName = "CastleTemplate";
20270
20413
  }
20271
20414
  });
@@ -21387,7 +21530,7 @@ var init_CodeRunnerPanel = __esm({
21387
21530
  }
21388
21531
  });
21389
21532
  function CombatLog({
21390
- events: events2,
21533
+ events: events2 = DEFAULT_COMBAT_EVENTS,
21391
21534
  maxVisible = 50,
21392
21535
  autoScroll = true,
21393
21536
  showTimestamps = false,
@@ -21438,7 +21581,7 @@ function CombatLog({
21438
21581
  }) }) })
21439
21582
  ] });
21440
21583
  }
21441
- var eventIcons, eventColors, eventBadgeVariants;
21584
+ var eventIcons, eventColors, eventBadgeVariants, DEFAULT_COMBAT_EVENTS;
21442
21585
  var init_CombatLog = __esm({
21443
21586
  "components/game/molecules/CombatLog.tsx"() {
21444
21587
  init_atoms2();
@@ -21470,6 +21613,13 @@ var init_CombatLog = __esm({
21470
21613
  death: "secondary",
21471
21614
  spawn: "secondary"
21472
21615
  };
21616
+ DEFAULT_COMBAT_EVENTS = [
21617
+ { id: "e1", type: "spawn", message: "Shadow Guard entered the field.", timestamp: 0, turn: 1 },
21618
+ { id: "e2", type: "move", message: "Hero moved to (3, 4).", timestamp: 1, actorName: "Hero", turn: 1 },
21619
+ { id: "e3", type: "attack", message: "Hero attacked Shadow Guard.", timestamp: 2, actorName: "Hero", targetName: "Shadow Guard", value: 18, turn: 2 },
21620
+ { id: "e4", type: "defend", message: "Shadow Guard blocked 5 damage.", timestamp: 3, actorName: "Shadow Guard", value: 5, turn: 2 },
21621
+ { id: "e5", type: "heal", message: "Hero used Health Potion.", timestamp: 4, actorName: "Hero", value: 25, turn: 3 }
21622
+ ];
21473
21623
  CombatLog.displayName = "CombatLog";
21474
21624
  }
21475
21625
  });
@@ -21877,9 +22027,9 @@ function isValidRarity(value) {
21877
22027
  return rarityValues.includes(value);
21878
22028
  }
21879
22029
  function CraftingRecipe({
21880
- inputs,
21881
- output,
21882
- canCraft = false,
22030
+ inputs = DEFAULT_INPUTS,
22031
+ output = DEFAULT_OUTPUT,
22032
+ canCraft = true,
21883
22033
  onCraft,
21884
22034
  craftEvent,
21885
22035
  className
@@ -21940,7 +22090,7 @@ function CraftingRecipe({
21940
22090
  }
21941
22091
  );
21942
22092
  }
21943
- var rarityValues;
22093
+ var rarityValues, DEFAULT_INPUTS, DEFAULT_OUTPUT;
21944
22094
  var init_CraftingRecipe = __esm({
21945
22095
  "components/game/molecules/CraftingRecipe.tsx"() {
21946
22096
  "use client";
@@ -21952,6 +22102,15 @@ var init_CraftingRecipe = __esm({
21952
22102
  init_Stack();
21953
22103
  init_Icon();
21954
22104
  rarityValues = ["common", "uncommon", "rare", "epic", "legendary"];
22105
+ DEFAULT_INPUTS = [
22106
+ { icon: "gem", label: "Iron Ore", required: 2, available: 3 },
22107
+ { icon: "flame", label: "Coal", required: 1, available: 1 }
22108
+ ];
22109
+ DEFAULT_OUTPUT = {
22110
+ icon: "sword",
22111
+ label: "Iron Sword",
22112
+ rarity: "uncommon"
22113
+ };
21955
22114
  CraftingRecipe.displayName = "CraftingRecipe";
21956
22115
  }
21957
22116
  });
@@ -26948,10 +27107,10 @@ var init_StatBadge = __esm({
26948
27107
  }
26949
27108
  });
26950
27109
  function InventoryGrid({
26951
- items,
27110
+ items = DEFAULT_GRID_ITEMS,
26952
27111
  columns = 4,
26953
- totalSlots,
26954
- selectedId,
27112
+ totalSlots = 12,
27113
+ selectedId = "",
26955
27114
  onSelect,
26956
27115
  selectEvent,
26957
27116
  size = "md",
@@ -27000,7 +27159,7 @@ function InventoryGrid({
27000
27159
  }
27001
27160
  );
27002
27161
  }
27003
- var columnMap;
27162
+ var columnMap, DEFAULT_GRID_ITEMS;
27004
27163
  var init_InventoryGrid = __esm({
27005
27164
  "components/game/molecules/InventoryGrid.tsx"() {
27006
27165
  "use client";
@@ -27017,12 +27176,18 @@ var init_InventoryGrid = __esm({
27017
27176
  7: "grid-cols-7",
27018
27177
  8: "grid-cols-8"
27019
27178
  };
27179
+ DEFAULT_GRID_ITEMS = [
27180
+ { id: "grid-1", icon: "sword", label: "Iron Sword", quantity: 1, rarity: "common" },
27181
+ { id: "grid-2", icon: "flask-conical", label: "Health Potion", quantity: 3, rarity: "uncommon" },
27182
+ { id: "grid-3", icon: "shield", label: "Wooden Shield", quantity: 1, rarity: "common" },
27183
+ { id: "grid-4", icon: "gem", label: "Ruby Gem", quantity: 2, rarity: "rare" }
27184
+ ];
27020
27185
  InventoryGrid.displayName = "InventoryGrid";
27021
27186
  }
27022
27187
  });
27023
27188
  function QuestTracker({
27024
- quests,
27025
- activeQuestId,
27189
+ quests = DEFAULT_QUESTS,
27190
+ activeQuestId = "q2",
27026
27191
  className
27027
27192
  }) {
27028
27193
  return /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "sm", className, children: quests.map((quest) => {
@@ -27088,6 +27253,7 @@ function QuestTracker({
27088
27253
  );
27089
27254
  }) });
27090
27255
  }
27256
+ var DEFAULT_QUESTS;
27091
27257
  var init_QuestTracker = __esm({
27092
27258
  "components/game/molecules/QuestTracker.tsx"() {
27093
27259
  "use client";
@@ -27097,6 +27263,11 @@ var init_QuestTracker = __esm({
27097
27263
  init_Typography();
27098
27264
  init_Box();
27099
27265
  init_Stack();
27266
+ DEFAULT_QUESTS = [
27267
+ { id: "q1", title: "Reach the Ancient Ruins", progress: 1, maxProgress: 1, completed: true },
27268
+ { id: "q2", title: "Defeat the Shadow Guard", progress: 2, maxProgress: 5, active: true },
27269
+ { id: "q3", title: "Collect 3 Crystal Shards", progress: 0, maxProgress: 3, active: false }
27270
+ ];
27100
27271
  QuestTracker.displayName = "QuestTracker";
27101
27272
  }
27102
27273
  });
@@ -27109,7 +27280,7 @@ function formatTime2(seconds) {
27109
27280
  return `${seconds}s`;
27110
27281
  }
27111
27282
  function PowerupSlots({
27112
- active,
27283
+ active = DEFAULT_ACTIVE_POWERUPS,
27113
27284
  maxSlots = 4,
27114
27285
  className
27115
27286
  }) {
@@ -27154,6 +27325,7 @@ function PowerupSlots({
27154
27325
  ))
27155
27326
  ] });
27156
27327
  }
27328
+ var DEFAULT_ACTIVE_POWERUPS;
27157
27329
  var init_PowerupSlots = __esm({
27158
27330
  "components/game/molecules/PowerupSlots.tsx"() {
27159
27331
  "use client";
@@ -27162,6 +27334,10 @@ var init_PowerupSlots = __esm({
27162
27334
  init_Box();
27163
27335
  init_Stack();
27164
27336
  init_Typography();
27337
+ DEFAULT_ACTIVE_POWERUPS = [
27338
+ { id: "pw1", icon: "zap", label: "Speed Boost", remainingTime: 12 },
27339
+ { id: "pw2", icon: "shield", label: "Iron Shield", remainingTime: 30 }
27340
+ ];
27165
27341
  PowerupSlots.displayName = "PowerupSlots";
27166
27342
  }
27167
27343
  });
@@ -27173,7 +27349,7 @@ function GameCanvas2D({
27173
27349
  tickEvent,
27174
27350
  drawEvent,
27175
27351
  fps = 60,
27176
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
27352
+ backgroundImage = "",
27177
27353
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
27178
27354
  className
27179
27355
  }) {
@@ -27277,10 +27453,10 @@ var init_GameCanvas2D = __esm({
27277
27453
  }
27278
27454
  });
27279
27455
  function HealthPanel({
27280
- current,
27281
- max,
27282
- shield,
27283
- label,
27456
+ current = 75,
27457
+ max = 100,
27458
+ shield = 20,
27459
+ label = "Player HP",
27284
27460
  effects,
27285
27461
  showNumbers = true,
27286
27462
  size = "md",
@@ -27398,11 +27574,11 @@ var init_HealthPanel = __esm({
27398
27574
  }
27399
27575
  });
27400
27576
  function ScoreBoard({
27401
- score: rawScore,
27402
- highScore: rawHighScore,
27403
- combo: rawCombo,
27404
- multiplier: rawMultiplier,
27405
- level: rawLevel,
27577
+ score: rawScore = 4200,
27578
+ highScore: rawHighScore = 8750,
27579
+ combo: rawCombo = 3,
27580
+ multiplier: rawMultiplier = 2,
27581
+ level: rawLevel = 4,
27406
27582
  className
27407
27583
  }) {
27408
27584
  const score = rawScore ?? 0;
@@ -27475,7 +27651,7 @@ var init_ScoreBoard = __esm({
27475
27651
  }
27476
27652
  });
27477
27653
  function ResourceBar({
27478
- resources,
27654
+ resources = DEFAULT_RESOURCES,
27479
27655
  size = "md",
27480
27656
  className
27481
27657
  }) {
@@ -27501,21 +27677,27 @@ function ResourceBar({
27501
27677
  }
27502
27678
  );
27503
27679
  }
27680
+ var DEFAULT_RESOURCES;
27504
27681
  var init_ResourceBar = __esm({
27505
27682
  "components/game/molecules/ResourceBar.tsx"() {
27506
27683
  "use client";
27507
27684
  init_cn();
27508
27685
  init_StatBadge();
27509
27686
  init_Box();
27687
+ DEFAULT_RESOURCES = [
27688
+ { icon: "coins", label: "Gold", value: 320 },
27689
+ { icon: "zap", label: "Energy", value: 7, max: 10 },
27690
+ { icon: "gem", label: "Crystals", value: 15 }
27691
+ ];
27510
27692
  ResourceBar.displayName = "ResourceBar";
27511
27693
  }
27512
27694
  });
27513
27695
  function TurnPanel({
27514
- currentTurn,
27515
- maxTurns,
27516
- phase,
27517
- activeTeam,
27518
- actions,
27696
+ currentTurn = 3,
27697
+ maxTurns = 10,
27698
+ phase = "Attack",
27699
+ activeTeam = "Heroes",
27700
+ actions = DEFAULT_TURN_ACTIONS,
27519
27701
  className
27520
27702
  }) {
27521
27703
  const eventBus = useEventBus();
@@ -27560,6 +27742,7 @@ function TurnPanel({
27560
27742
  }
27561
27743
  );
27562
27744
  }
27745
+ var DEFAULT_TURN_ACTIONS;
27563
27746
  var init_TurnPanel = __esm({
27564
27747
  "components/game/molecules/TurnPanel.tsx"() {
27565
27748
  "use client";
@@ -27568,15 +27751,19 @@ var init_TurnPanel = __esm({
27568
27751
  init_Button();
27569
27752
  init_Box();
27570
27753
  init_useEventBus();
27754
+ DEFAULT_TURN_ACTIONS = [
27755
+ { label: "End Turn", icon: "skip-forward", event: "END_TURN" },
27756
+ { label: "Forfeit", icon: "flag", event: "FORFEIT", disabled: false }
27757
+ ];
27571
27758
  TurnPanel.displayName = "TurnPanel";
27572
27759
  }
27573
27760
  });
27574
27761
  function EnemyPlate({
27575
- name,
27576
- health,
27577
- maxHealth,
27578
- level,
27579
- effects,
27762
+ name = "Shadow Guard",
27763
+ health = 80,
27764
+ maxHealth = 100,
27765
+ level = 5,
27766
+ effects = DEFAULT_ENEMY_EFFECTS,
27580
27767
  className
27581
27768
  }) {
27582
27769
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -27642,7 +27829,7 @@ function EnemyPlate({
27642
27829
  }
27643
27830
  );
27644
27831
  }
27645
- var effectVariantMap2;
27832
+ var effectVariantMap2, DEFAULT_ENEMY_EFFECTS;
27646
27833
  var init_EnemyPlate = __esm({
27647
27834
  "components/game/molecules/EnemyPlate.tsx"() {
27648
27835
  "use client";
@@ -27656,12 +27843,15 @@ var init_EnemyPlate = __esm({
27656
27843
  debuff: "danger",
27657
27844
  neutral: "neutral"
27658
27845
  };
27846
+ DEFAULT_ENEMY_EFFECTS = [
27847
+ { icon: "flame", label: "Burn", variant: "debuff" }
27848
+ ];
27659
27849
  EnemyPlate.displayName = "EnemyPlate";
27660
27850
  }
27661
27851
  });
27662
27852
  function UnitCommandBar({
27663
- commands,
27664
- selectedUnitId,
27853
+ commands = DEFAULT_COMMANDS,
27854
+ selectedUnitId = "unit-1",
27665
27855
  className
27666
27856
  }) {
27667
27857
  const eventBus = useEventBus();
@@ -27704,6 +27894,7 @@ function UnitCommandBar({
27704
27894
  }
27705
27895
  );
27706
27896
  }
27897
+ var DEFAULT_COMMANDS;
27707
27898
  var init_UnitCommandBar = __esm({
27708
27899
  "components/game/molecules/UnitCommandBar.tsx"() {
27709
27900
  "use client";
@@ -27712,6 +27903,12 @@ var init_UnitCommandBar = __esm({
27712
27903
  init_Box();
27713
27904
  init_Typography();
27714
27905
  init_useEventBus();
27906
+ DEFAULT_COMMANDS = [
27907
+ { label: "Move", icon: "move", event: "MOVE", hotkey: "M" },
27908
+ { label: "Attack", icon: "sword", event: "ATTACK", hotkey: "A" },
27909
+ { label: "Defend", icon: "shield", event: "DEFEND", hotkey: "D" },
27910
+ { label: "Wait", icon: "clock", event: "WAIT", hotkey: "W" }
27911
+ ];
27715
27912
  UnitCommandBar.displayName = "UnitCommandBar";
27716
27913
  }
27717
27914
  });
@@ -27745,7 +27942,7 @@ function GameHud({
27745
27942
  className,
27746
27943
  transparent = true
27747
27944
  }) {
27748
- const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : []);
27945
+ const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : DEFAULT_HUD_STATS);
27749
27946
  const stats = Array.isArray(rawStats) ? rawStats : [];
27750
27947
  const position = propPosition ?? "corners";
27751
27948
  if (position === "corners") {
@@ -27770,7 +27967,7 @@ function GameHud({
27770
27967
  }
27771
27968
  );
27772
27969
  }
27773
- var positionMap;
27970
+ var positionMap, DEFAULT_HUD_STATS;
27774
27971
  var init_GameHud = __esm({
27775
27972
  "components/game/molecules/GameHud.tsx"() {
27776
27973
  init_cn();
@@ -27780,11 +27977,17 @@ var init_GameHud = __esm({
27780
27977
  bottom: "bottom-0 left-0 right-0 flex justify-between items-end p-4",
27781
27978
  corners: "inset-0 pointer-events-none"
27782
27979
  };
27980
+ DEFAULT_HUD_STATS = [
27981
+ { label: "HP", value: 75, max: 100, format: "bar", variant: "danger" },
27982
+ { label: "MP", value: 40, max: 60, format: "bar", variant: "primary" },
27983
+ { label: "Score", value: 4200, format: "number", variant: "warning" },
27984
+ { label: "Level", value: 4, format: "number", variant: "default" }
27985
+ ];
27783
27986
  GameHud.displayName = "GameHud";
27784
27987
  }
27785
27988
  });
27786
27989
  function DialogueBox({
27787
- dialogue,
27990
+ dialogue = DEFAULT_DIALOGUE,
27788
27991
  typewriterSpeed = 30,
27789
27992
  position = "bottom",
27790
27993
  onComplete,
@@ -27967,17 +28170,27 @@ function DialogueBox({
27967
28170
  }
27968
28171
  );
27969
28172
  }
28173
+ var DEFAULT_DIALOGUE;
27970
28174
  var init_DialogueBox = __esm({
27971
28175
  "components/game/molecules/DialogueBox.tsx"() {
27972
28176
  "use client";
27973
28177
  init_cn();
27974
28178
  init_useEventBus();
28179
+ DEFAULT_DIALOGUE = {
28180
+ speaker: "Village Elder",
28181
+ text: "The ancient ruins hold great power \u2014 and great danger. Choose your path wisely, traveler.",
28182
+ choices: [
28183
+ { text: "I am ready. Lead the way.", action: "ACCEPT_QUEST" },
28184
+ { text: "Tell me more about the ruins.", action: "ASK_LORE" },
28185
+ { text: "Perhaps another time.", action: "DECLINE" }
28186
+ ]
28187
+ };
27975
28188
  }
27976
28189
  });
27977
28190
  function InventoryPanel({
27978
- items,
27979
- slots,
27980
- columns,
28191
+ items = DEFAULT_INVENTORY_ITEMS,
28192
+ slots = 12,
28193
+ columns = 4,
27981
28194
  selectedSlot,
27982
28195
  onSelectSlot,
27983
28196
  onUseItem,
@@ -28125,25 +28338,31 @@ function InventoryPanel({
28125
28338
  )
28126
28339
  ] });
28127
28340
  }
28341
+ var DEFAULT_INVENTORY_ITEMS;
28128
28342
  var init_InventoryPanel = __esm({
28129
28343
  "components/game/molecules/InventoryPanel.tsx"() {
28130
28344
  "use client";
28131
28345
  init_cn();
28132
28346
  init_useEventBus();
28347
+ DEFAULT_INVENTORY_ITEMS = [
28348
+ { id: "item-1", type: "weapon", name: "Iron Sword", quantity: 1, description: "A sturdy iron blade." },
28349
+ { id: "item-2", type: "potion", name: "Health Potion", quantity: 3, description: "Restores 50 HP." },
28350
+ { id: "item-3", type: "armor", name: "Leather Helm", quantity: 1, description: "Light head protection." }
28351
+ ];
28133
28352
  }
28134
28353
  });
28135
28354
  function GameMenu({
28136
- title,
28355
+ title = "Epic Quest",
28137
28356
  subtitle,
28138
28357
  options,
28139
28358
  menuItems,
28140
28359
  onSelect,
28141
28360
  eventBus: eventBusProp,
28142
28361
  background,
28143
- logo,
28362
+ logo = "",
28144
28363
  className
28145
28364
  }) {
28146
- const resolvedOptions = options ?? menuItems ?? [];
28365
+ const resolvedOptions = options ?? menuItems ?? DEFAULT_MENU_OPTIONS;
28147
28366
  let eventBusFromHook = null;
28148
28367
  try {
28149
28368
  eventBusFromHook = useEventBus();
@@ -28224,7 +28443,7 @@ function GameMenu({
28224
28443
  }
28225
28444
  );
28226
28445
  }
28227
- var variantMap3;
28446
+ var variantMap3, DEFAULT_MENU_OPTIONS;
28228
28447
  var init_GameMenu = __esm({
28229
28448
  "components/game/molecules/GameMenu.tsx"() {
28230
28449
  "use client";
@@ -28235,6 +28454,11 @@ var init_GameMenu = __esm({
28235
28454
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
28236
28455
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
28237
28456
  };
28457
+ DEFAULT_MENU_OPTIONS = [
28458
+ { label: "New Game", event: "NEW_GAME", variant: "primary" },
28459
+ { label: "Continue", event: "CONTINUE", variant: "secondary" },
28460
+ { label: "Settings", event: "SETTINGS", variant: "ghost" }
28461
+ ];
28238
28462
  GameMenu.displayName = "GameMenu";
28239
28463
  }
28240
28464
  });
@@ -28245,19 +28469,19 @@ function formatTime3(ms) {
28245
28469
  return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
28246
28470
  }
28247
28471
  function GameOverScreen({
28248
- title,
28472
+ title = "Game Over",
28249
28473
  message,
28250
- stats = [],
28474
+ stats = DEFAULT_GAME_OVER_STATS,
28251
28475
  actions,
28252
28476
  menuItems,
28253
28477
  onAction,
28254
28478
  eventBus: eventBusProp,
28255
- variant = "neutral",
28256
- highScore,
28257
- currentScore,
28479
+ variant = "defeat",
28480
+ highScore = 2e3,
28481
+ currentScore = 1240,
28258
28482
  className
28259
28483
  }) {
28260
- const resolvedActions = actions ?? menuItems ?? [];
28484
+ const resolvedActions = actions ?? menuItems ?? DEFAULT_GAME_OVER_ACTIONS;
28261
28485
  let eventBusFromHook = null;
28262
28486
  try {
28263
28487
  eventBusFromHook = useEventBus();
@@ -28344,7 +28568,7 @@ function GameOverScreen({
28344
28568
  }
28345
28569
  );
28346
28570
  }
28347
- var variantColors, buttonVariants;
28571
+ var variantColors, buttonVariants, DEFAULT_GAME_OVER_ACTIONS, DEFAULT_GAME_OVER_STATS;
28348
28572
  var init_GameOverScreen = __esm({
28349
28573
  "components/game/molecules/GameOverScreen.tsx"() {
28350
28574
  "use client";
@@ -28373,21 +28597,35 @@ var init_GameOverScreen = __esm({
28373
28597
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
28374
28598
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
28375
28599
  };
28600
+ DEFAULT_GAME_OVER_ACTIONS = [
28601
+ { label: "Play Again", event: "RESTART", variant: "primary" },
28602
+ { label: "Main Menu", event: "MAIN_MENU", variant: "secondary" }
28603
+ ];
28604
+ DEFAULT_GAME_OVER_STATS = [
28605
+ { label: "Score", value: 1240 },
28606
+ { label: "Enemies Defeated", value: 8 },
28607
+ { label: "Time", value: 93e3, format: "time" }
28608
+ ];
28376
28609
  GameOverScreen.displayName = "GameOverScreen";
28377
28610
  }
28378
28611
  });
28379
28612
  function PlatformerCanvas({
28380
28613
  player,
28381
- platforms = [],
28614
+ platforms = [
28615
+ { x: 0, y: 368, width: 800, height: 32, type: "ground" },
28616
+ { x: 150, y: 280, width: 160, height: 16, type: "platform" },
28617
+ { x: 420, y: 220, width: 160, height: 16, type: "platform" },
28618
+ { x: 620, y: 300, width: 140, height: 16, type: "platform" }
28619
+ ],
28382
28620
  worldWidth = 800,
28383
28621
  worldHeight = 400,
28384
28622
  canvasWidth = 800,
28385
28623
  canvasHeight = 400,
28386
28624
  followCamera = true,
28387
- bgColor,
28625
+ bgColor = "#5c94fc",
28388
28626
  playerSprite = "https://almadar-kflow-assets.web.app/shared/platformer/characters/platformChar_idle.png",
28389
28627
  tileSprites,
28390
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
28628
+ backgroundImage = "",
28391
28629
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/platformer/",
28392
28630
  leftEvent = "MOVE_LEFT",
28393
28631
  rightEvent = "MOVE_RIGHT",
@@ -28435,10 +28673,10 @@ function PlatformerCanvas({
28435
28673
  };
28436
28674
  }, []);
28437
28675
  const resolvedPlayer = player ?? {
28438
- x: 50,
28439
- y: 300,
28440
- width: 24,
28441
- height: 32,
28676
+ x: 80,
28677
+ y: 336,
28678
+ width: 32,
28679
+ height: 48,
28442
28680
  facingRight: true
28443
28681
  };
28444
28682
  const handleKeyDown = React83.useCallback((e) => {
@@ -47117,12 +47355,12 @@ function WorldMapTemplate({
47117
47355
  entity,
47118
47356
  scale = 0.4,
47119
47357
  unitScale = 2.5,
47120
- diamondTopY,
47358
+ diamondTopY = 374,
47121
47359
  allowMoveAllHeroes = false,
47122
- tiles,
47123
- units,
47124
- features,
47125
- assetManifest,
47360
+ tiles = DEFAULT_WORLDMAP_TILES,
47361
+ units = DEFAULT_WORLDMAP_UNITS,
47362
+ features = DEFAULT_WORLDMAP_FEATURES,
47363
+ assetManifest = DEFAULT_WORLDMAP_MANIFEST,
47126
47364
  className
47127
47365
  }) {
47128
47366
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -47145,9 +47383,63 @@ function WorldMapTemplate({
47145
47383
  }
47146
47384
  );
47147
47385
  }
47386
+ var CDN3, DEFAULT_WORLDMAP_TILES, DEFAULT_WORLDMAP_UNITS, DEFAULT_WORLDMAP_FEATURES, DEFAULT_WORLDMAP_MANIFEST;
47148
47387
  var init_WorldMapTemplate = __esm({
47149
47388
  "components/game/templates/WorldMapTemplate.tsx"() {
47150
47389
  init_WorldMapBoard();
47390
+ CDN3 = "https://almadar-kflow-assets.web.app/shared";
47391
+ DEFAULT_WORLDMAP_TILES = [
47392
+ { x: 0, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47393
+ { x: 1, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47394
+ { x: 2, y: 0, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47395
+ { x: 3, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47396
+ { x: 4, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47397
+ { x: 0, y: 1, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47398
+ { x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47399
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47400
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47401
+ { x: 4, y: 1, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47402
+ { x: 0, y: 2, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47403
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47404
+ { x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
47405
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47406
+ { x: 4, y: 2, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47407
+ { x: 0, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47408
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47409
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47410
+ { x: 3, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
47411
+ { x: 4, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47412
+ { x: 0, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47413
+ { x: 1, y: 4, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47414
+ { x: 2, y: 4, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47415
+ { x: 3, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47416
+ { x: 4, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` }
47417
+ ];
47418
+ DEFAULT_WORLDMAP_UNITS = [
47419
+ { 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` },
47420
+ { 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` }
47421
+ ];
47422
+ DEFAULT_WORLDMAP_FEATURES = [
47423
+ { id: "f1", x: 2, y: 2, type: "capital", sprite: `${CDN3}/scenes/world/capital.png` },
47424
+ { id: "f2", x: 4, y: 2, type: "power_node", sprite: `${CDN3}/world-map/power_node.png` }
47425
+ ];
47426
+ DEFAULT_WORLDMAP_MANIFEST = {
47427
+ baseUrl: CDN3,
47428
+ terrains: {
47429
+ grass: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png",
47430
+ water: "/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png",
47431
+ mountain: "/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png",
47432
+ road: "/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png"
47433
+ },
47434
+ units: {
47435
+ hero: "/sprite-sheets/amir-sprite-sheet-se.png",
47436
+ scout: "/sprite-sheets/archivist-sprite-sheet-se.png"
47437
+ },
47438
+ features: {
47439
+ capital: "/scenes/world/capital.png",
47440
+ power_node: "/world-map/power_node.png"
47441
+ }
47442
+ };
47151
47443
  WorldMapTemplate.displayName = "WorldMapTemplate";
47152
47444
  }
47153
47445
  });