@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.
@@ -7000,8 +7000,8 @@ var init_TraitFrame = __esm({
7000
7000
  }
7001
7001
  });
7002
7002
  function HealthBar({
7003
- current,
7004
- max,
7003
+ current = 3,
7004
+ max = 5,
7005
7005
  format = "hearts",
7006
7006
  size = "md",
7007
7007
  className,
@@ -7250,11 +7250,11 @@ var init_ControlButton = __esm({
7250
7250
  });
7251
7251
  function Sprite({
7252
7252
  spritesheet = "https://almadar-kflow-assets.web.app/shared/isometric-blocks/Spritesheet/allTiles_sheet.png",
7253
- frameWidth,
7254
- frameHeight,
7255
- frame,
7256
- x,
7257
- y,
7253
+ frameWidth = 64,
7254
+ frameHeight = 64,
7255
+ frame = 0,
7256
+ x = 0,
7257
+ y = 0,
7258
7258
  scale = 1,
7259
7259
  flipX = false,
7260
7260
  flipY = false,
@@ -7324,7 +7324,7 @@ var init_Sprite = __esm({
7324
7324
  }
7325
7325
  });
7326
7326
  function StateIndicator({
7327
- state,
7327
+ state = "idle",
7328
7328
  label,
7329
7329
  size = "md",
7330
7330
  animated = true,
@@ -7395,8 +7395,8 @@ function formatTime(seconds, format) {
7395
7395
  return `${mins.toString().padStart(2, "0")}:${padded}`;
7396
7396
  }
7397
7397
  function TimerDisplay({
7398
- seconds,
7399
- running,
7398
+ seconds = 90,
7399
+ running = true,
7400
7400
  format = "mm:ss",
7401
7401
  size = "md",
7402
7402
  className,
@@ -7433,8 +7433,8 @@ var init_TimerDisplay = __esm({
7433
7433
  });
7434
7434
  function ResourceCounter({
7435
7435
  icon,
7436
- label,
7437
- value,
7436
+ label = "Gold",
7437
+ value = 250,
7438
7438
  max,
7439
7439
  color,
7440
7440
  size = "md",
@@ -7486,10 +7486,11 @@ var init_ResourceCounter = __esm({
7486
7486
  }
7487
7487
  });
7488
7488
  function ItemSlot({
7489
- icon,
7490
- label,
7489
+ assetUrl = DEFAULT_ASSET_URL,
7490
+ icon = "sword",
7491
+ label = "Iron Sword",
7491
7492
  quantity,
7492
- rarity = "common",
7493
+ rarity = "uncommon",
7493
7494
  empty,
7494
7495
  size = "md",
7495
7496
  selected,
@@ -7497,6 +7498,7 @@ function ItemSlot({
7497
7498
  className
7498
7499
  }) {
7499
7500
  const isClickable = onClick != null;
7501
+ const px = assetSizeMap[size];
7500
7502
  return /* @__PURE__ */ jsxRuntime.jsx(
7501
7503
  "button",
7502
7504
  {
@@ -7517,7 +7519,17 @@ function ItemSlot({
7517
7519
  className
7518
7520
  ),
7519
7521
  children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
7520
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: typeof icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: icon }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon }) }),
7522
+ assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
7523
+ "img",
7524
+ {
7525
+ src: assetUrl,
7526
+ alt: label,
7527
+ width: px,
7528
+ height: px,
7529
+ style: { imageRendering: "pixelated", objectFit: "contain" },
7530
+ className: "flex-shrink-0"
7531
+ }
7532
+ ) : 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,
7521
7533
  quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
7522
7534
  "span",
7523
7535
  {
@@ -7533,7 +7545,7 @@ function ItemSlot({
7533
7545
  }
7534
7546
  );
7535
7547
  }
7536
- var sizeMap6, rarityBorderMap, rarityGlowMap;
7548
+ var sizeMap6, rarityBorderMap, rarityGlowMap, DEFAULT_ASSET_URL, assetSizeMap;
7537
7549
  var init_ItemSlot = __esm({
7538
7550
  "components/game/atoms/ItemSlot.tsx"() {
7539
7551
  "use client";
@@ -7558,11 +7570,17 @@ var init_ItemSlot = __esm({
7558
7570
  epic: "shadow-lg",
7559
7571
  legendary: "shadow-lg"
7560
7572
  };
7573
+ DEFAULT_ASSET_URL = "https://almadar-kflow-assets.web.app/shared/isometric-dungeon/Isometric/chestClosed_E.png";
7574
+ assetSizeMap = {
7575
+ sm: 28,
7576
+ md: 40,
7577
+ lg: 56
7578
+ };
7561
7579
  ItemSlot.displayName = "ItemSlot";
7562
7580
  }
7563
7581
  });
7564
7582
  function TurnIndicator({
7565
- currentTurn,
7583
+ currentTurn = 1,
7566
7584
  maxTurns,
7567
7585
  activeTeam,
7568
7586
  phase,
@@ -7625,7 +7643,7 @@ function getComboScale(combo) {
7625
7643
  return "";
7626
7644
  }
7627
7645
  function ComboCounter({
7628
- combo,
7646
+ combo = 5,
7629
7647
  multiplier,
7630
7648
  streak,
7631
7649
  size = "md",
@@ -7671,10 +7689,10 @@ var init_ComboCounter = __esm({
7671
7689
  }
7672
7690
  });
7673
7691
  function XPBar({
7674
- current,
7675
- max,
7676
- level,
7677
- showLabel = false,
7692
+ current = 350,
7693
+ max = 1e3,
7694
+ level = 5,
7695
+ showLabel = true,
7678
7696
  size = "md",
7679
7697
  animated = true,
7680
7698
  className
@@ -7757,7 +7775,7 @@ var init_XPBar = __esm({
7757
7775
  function WaypointMarker({
7758
7776
  label,
7759
7777
  icon,
7760
- active = false,
7778
+ active = true,
7761
7779
  completed = false,
7762
7780
  size = "md",
7763
7781
  className
@@ -7831,11 +7849,11 @@ function formatDuration(seconds) {
7831
7849
  return `${Math.round(seconds)}s`;
7832
7850
  }
7833
7851
  function StatusEffect({
7834
- icon,
7835
- label,
7836
- duration,
7852
+ icon = "shield",
7853
+ label = "Shield",
7854
+ duration = 30,
7837
7855
  stacks,
7838
- variant = "neutral",
7856
+ variant = "buff",
7839
7857
  size = "md",
7840
7858
  className
7841
7859
  }) {
@@ -7897,7 +7915,7 @@ var init_StatusEffect = __esm({
7897
7915
  }
7898
7916
  });
7899
7917
  function DamageNumber({
7900
- value,
7918
+ value = 42,
7901
7919
  type = "damage",
7902
7920
  size = "md",
7903
7921
  className
@@ -7946,8 +7964,8 @@ var init_DamageNumber = __esm({
7946
7964
  }
7947
7965
  });
7948
7966
  function DialogueBubble({
7949
- speaker,
7950
- text,
7967
+ speaker = "Hero",
7968
+ text = "The dungeon awaits. Choose your path wisely.",
7951
7969
  portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
7952
7970
  position = "bottom",
7953
7971
  className
@@ -7984,7 +8002,7 @@ var init_DialogueBubble = __esm({
7984
8002
  }
7985
8003
  });
7986
8004
  function ChoiceButton({
7987
- text,
8005
+ text = "Charge forward into the fray",
7988
8006
  index,
7989
8007
  disabled = false,
7990
8008
  selected = false,
@@ -8030,7 +8048,7 @@ var init_ChoiceButton = __esm({
8030
8048
  }
8031
8049
  });
8032
8050
  function ActionButton({
8033
- label,
8051
+ label = "Attack",
8034
8052
  icon,
8035
8053
  cooldown = 0,
8036
8054
  disabled = false,
@@ -8110,13 +8128,13 @@ var init_ActionButton = __esm({
8110
8128
  }
8111
8129
  });
8112
8130
  function MiniMap({
8113
- tiles = [],
8114
- units = [],
8131
+ tiles = DEFAULT_TILES,
8132
+ units = DEFAULT_UNITS,
8115
8133
  width = 150,
8116
8134
  height = 150,
8117
8135
  mapWidth = 100,
8118
8136
  mapHeight = 100,
8119
- viewportRect,
8137
+ viewportRect = DEFAULT_VIEWPORT,
8120
8138
  className
8121
8139
  }) {
8122
8140
  const canvasRef = React82__namespace.useRef(null);
@@ -8195,10 +8213,25 @@ function MiniMap({
8195
8213
  }
8196
8214
  );
8197
8215
  }
8216
+ var DEFAULT_TILES, DEFAULT_UNITS, DEFAULT_VIEWPORT;
8198
8217
  var init_MiniMap = __esm({
8199
8218
  "components/game/atoms/MiniMap.tsx"() {
8200
8219
  "use client";
8201
8220
  init_cn();
8221
+ DEFAULT_TILES = [
8222
+ { x: 10, y: 10, color: "#4ade80" },
8223
+ { x: 20, y: 15, color: "#4ade80" },
8224
+ { x: 30, y: 25, color: "#22c55e" },
8225
+ { x: 50, y: 40, color: "#4ade80" },
8226
+ { x: 60, y: 55, color: "#16a34a" },
8227
+ { x: 40, y: 60, color: "#4ade80" },
8228
+ { x: 70, y: 30, color: "#22c55e" },
8229
+ { x: 80, y: 70, color: "#4ade80" }
8230
+ ];
8231
+ DEFAULT_UNITS = [
8232
+ { x: 30, y: 30, color: "#60a5fa", isPlayer: true }
8233
+ ];
8234
+ DEFAULT_VIEWPORT = { x: 20, y: 20, w: 40, h: 40 };
8202
8235
  MiniMap.displayName = "MiniMap";
8203
8236
  }
8204
8237
  });
@@ -9321,7 +9354,7 @@ var init_Accordion = __esm({
9321
9354
  }
9322
9355
  });
9323
9356
  function ActionButtons({
9324
- buttons,
9357
+ buttons = DEFAULT_BUTTONS,
9325
9358
  onAction,
9326
9359
  actionEvent,
9327
9360
  layout = "horizontal",
@@ -9428,7 +9461,7 @@ function ActionButtons({
9428
9461
  button.id
9429
9462
  )) });
9430
9463
  }
9431
- var sizeMap14, layoutMap;
9464
+ var sizeMap14, layoutMap, DEFAULT_BUTTONS;
9432
9465
  var init_ActionButtons = __esm({
9433
9466
  "components/game/molecules/ActionButtons.tsx"() {
9434
9467
  "use client";
@@ -9445,6 +9478,11 @@ var init_ActionButtons = __esm({
9445
9478
  vertical: "flex flex-col gap-2",
9446
9479
  diamond: "grid grid-cols-3 gap-1"
9447
9480
  };
9481
+ DEFAULT_BUTTONS = [
9482
+ { id: "jump", label: "Jump", icon: "chevron-up", variant: "primary" },
9483
+ { id: "attack", label: "Attack", icon: "sword", variant: "secondary" },
9484
+ { id: "dodge", label: "Dodge", icon: "wind", variant: "ghost" }
9485
+ ];
9448
9486
  ActionButtons.displayName = "ActionButtons";
9449
9487
  }
9450
9488
  });
@@ -10637,7 +10675,7 @@ function IsometricCanvas({
10637
10675
  // Rendering options
10638
10676
  scale = 0.4,
10639
10677
  debug: debug2 = false,
10640
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
10678
+ backgroundImage = "",
10641
10679
  showMinimap = true,
10642
10680
  enableCamera = true,
10643
10681
  unitScale = 1,
@@ -11775,10 +11813,10 @@ function BattleTemplate({
11775
11813
  entity,
11776
11814
  scale = 0.45,
11777
11815
  unitScale = 1,
11778
- tiles,
11779
- units,
11780
- features,
11781
- assetManifest,
11816
+ tiles = DEFAULT_BATTLE_TILES,
11817
+ units = DEFAULT_BATTLE_UNITS,
11818
+ features = DEFAULT_BATTLE_FEATURES,
11819
+ assetManifest = DEFAULT_BATTLE_MANIFEST,
11782
11820
  className
11783
11821
  }) {
11784
11822
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -11804,9 +11842,62 @@ function BattleTemplate({
11804
11842
  }
11805
11843
  );
11806
11844
  }
11845
+ var CDN, DEFAULT_BATTLE_TILES, DEFAULT_BATTLE_UNITS, DEFAULT_BATTLE_FEATURES, DEFAULT_BATTLE_MANIFEST;
11807
11846
  var init_BattleTemplate = __esm({
11808
11847
  "components/game/templates/BattleTemplate.tsx"() {
11809
11848
  init_BattleBoard();
11849
+ CDN = "https://almadar-kflow-assets.web.app/shared";
11850
+ DEFAULT_BATTLE_TILES = [
11851
+ { x: 0, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11852
+ { x: 1, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11853
+ { x: 2, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11854
+ { x: 3, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11855
+ { x: 4, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11856
+ { x: 0, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11857
+ { x: 1, y: 1, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
11858
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
11859
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
11860
+ { x: 4, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11861
+ { x: 0, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11862
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
11863
+ { x: 2, y: 2, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
11864
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
11865
+ { x: 4, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11866
+ { x: 0, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11867
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
11868
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
11869
+ { x: 3, y: 3, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
11870
+ { x: 4, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11871
+ { x: 0, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11872
+ { x: 1, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11873
+ { x: 2, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11874
+ { x: 3, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
11875
+ { x: 4, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` }
11876
+ ];
11877
+ DEFAULT_BATTLE_UNITS = [
11878
+ { 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` },
11879
+ { 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` }
11880
+ ];
11881
+ DEFAULT_BATTLE_FEATURES = [
11882
+ { id: "f1", x: 2, y: 2, type: "gold_mine", sprite: `${CDN}/world-map/gold_mine.png` },
11883
+ { id: "f2", x: 3, y: 1, type: "portal", sprite: `${CDN}/world-map/portal_open.png` }
11884
+ ];
11885
+ DEFAULT_BATTLE_MANIFEST = {
11886
+ baseUrl: CDN,
11887
+ terrains: {
11888
+ stone: "/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png",
11889
+ dirt: "/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png",
11890
+ grass: "/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png"
11891
+ },
11892
+ units: {
11893
+ worker: "/sprite-sheets/amir-sprite-sheet-se.png",
11894
+ guardian: "/sprite-sheets/destroyer-sprite-sheet-sw.png"
11895
+ },
11896
+ features: {
11897
+ gold_mine: "/world-map/gold_mine.png",
11898
+ portal: "/world-map/portal_open.png"
11899
+ }
11900
+ };
11810
11901
  BattleTemplate.displayName = "BattleTemplate";
11811
11902
  }
11812
11903
  });
@@ -19806,10 +19897,10 @@ var init_CastleBoard = __esm({
19806
19897
  function CastleTemplate({
19807
19898
  entity,
19808
19899
  scale = 0.45,
19809
- tiles,
19810
- units,
19811
- features,
19812
- assetManifest,
19900
+ tiles = DEFAULT_CASTLE_TILES,
19901
+ units = DEFAULT_CASTLE_UNITS,
19902
+ features = DEFAULT_CASTLE_FEATURES,
19903
+ assetManifest = DEFAULT_CASTLE_MANIFEST,
19813
19904
  className
19814
19905
  }) {
19815
19906
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -19830,9 +19921,61 @@ function CastleTemplate({
19830
19921
  }
19831
19922
  );
19832
19923
  }
19924
+ var CDN2, DEFAULT_CASTLE_TILES, DEFAULT_CASTLE_UNITS, DEFAULT_CASTLE_FEATURES, DEFAULT_CASTLE_MANIFEST;
19833
19925
  var init_CastleTemplate = __esm({
19834
19926
  "components/game/templates/CastleTemplate.tsx"() {
19835
19927
  init_CastleBoard();
19928
+ CDN2 = "https://almadar-kflow-assets.web.app/shared";
19929
+ DEFAULT_CASTLE_TILES = [
19930
+ { x: 0, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19931
+ { x: 1, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19932
+ { x: 2, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19933
+ { x: 3, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19934
+ { x: 4, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19935
+ { x: 0, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19936
+ { x: 1, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
19937
+ { x: 2, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
19938
+ { x: 3, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
19939
+ { x: 4, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19940
+ { x: 0, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19941
+ { x: 1, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
19942
+ { x: 2, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_09.png` },
19943
+ { x: 3, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
19944
+ { x: 4, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19945
+ { x: 0, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19946
+ { x: 1, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
19947
+ { x: 2, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
19948
+ { x: 3, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
19949
+ { x: 4, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19950
+ { x: 0, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19951
+ { x: 1, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19952
+ { x: 2, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19953
+ { x: 3, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
19954
+ { x: 4, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` }
19955
+ ];
19956
+ DEFAULT_CASTLE_UNITS = [
19957
+ { 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` },
19958
+ { 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` }
19959
+ ];
19960
+ DEFAULT_CASTLE_FEATURES = [
19961
+ { id: "f1", x: 2, y: 2, type: "chest", sprite: `${CDN2}/world-map/treasure_chest_closed.png` },
19962
+ { id: "f2", x: 3, y: 1, type: "crystal", sprite: `${CDN2}/world-map/resonance_crystal.png` }
19963
+ ];
19964
+ DEFAULT_CASTLE_MANIFEST = {
19965
+ baseUrl: CDN2,
19966
+ terrains: {
19967
+ wall: "/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png",
19968
+ floor: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png"
19969
+ },
19970
+ units: {
19971
+ worker: "/sprite-sheets/coordinator-sprite-sheet-se.png",
19972
+ guardian: "/sprite-sheets/forger-sprite-sheet-se.png"
19973
+ },
19974
+ features: {
19975
+ chest: "/world-map/treasure_chest_closed.png",
19976
+ crystal: "/world-map/resonance_crystal.png"
19977
+ }
19978
+ };
19836
19979
  CastleTemplate.displayName = "CastleTemplate";
19837
19980
  }
19838
19981
  });
@@ -20954,7 +21097,7 @@ var init_CodeRunnerPanel = __esm({
20954
21097
  }
20955
21098
  });
20956
21099
  function CombatLog({
20957
- events: events2,
21100
+ events: events2 = DEFAULT_COMBAT_EVENTS,
20958
21101
  maxVisible = 50,
20959
21102
  autoScroll = true,
20960
21103
  showTimestamps = false,
@@ -21005,7 +21148,7 @@ function CombatLog({
21005
21148
  }) }) })
21006
21149
  ] });
21007
21150
  }
21008
- var eventIcons, eventColors, eventBadgeVariants;
21151
+ var eventIcons, eventColors, eventBadgeVariants, DEFAULT_COMBAT_EVENTS;
21009
21152
  var init_CombatLog = __esm({
21010
21153
  "components/game/molecules/CombatLog.tsx"() {
21011
21154
  init_atoms2();
@@ -21037,6 +21180,13 @@ var init_CombatLog = __esm({
21037
21180
  death: "secondary",
21038
21181
  spawn: "secondary"
21039
21182
  };
21183
+ DEFAULT_COMBAT_EVENTS = [
21184
+ { id: "e1", type: "spawn", message: "Shadow Guard entered the field.", timestamp: 0, turn: 1 },
21185
+ { id: "e2", type: "move", message: "Hero moved to (3, 4).", timestamp: 1, actorName: "Hero", turn: 1 },
21186
+ { id: "e3", type: "attack", message: "Hero attacked Shadow Guard.", timestamp: 2, actorName: "Hero", targetName: "Shadow Guard", value: 18, turn: 2 },
21187
+ { id: "e4", type: "defend", message: "Shadow Guard blocked 5 damage.", timestamp: 3, actorName: "Shadow Guard", value: 5, turn: 2 },
21188
+ { id: "e5", type: "heal", message: "Hero used Health Potion.", timestamp: 4, actorName: "Hero", value: 25, turn: 3 }
21189
+ ];
21040
21190
  CombatLog.displayName = "CombatLog";
21041
21191
  }
21042
21192
  });
@@ -21444,9 +21594,9 @@ function isValidRarity(value) {
21444
21594
  return rarityValues.includes(value);
21445
21595
  }
21446
21596
  function CraftingRecipe({
21447
- inputs,
21448
- output,
21449
- canCraft = false,
21597
+ inputs = DEFAULT_INPUTS,
21598
+ output = DEFAULT_OUTPUT,
21599
+ canCraft = true,
21450
21600
  onCraft,
21451
21601
  craftEvent,
21452
21602
  className
@@ -21507,7 +21657,7 @@ function CraftingRecipe({
21507
21657
  }
21508
21658
  );
21509
21659
  }
21510
- var rarityValues;
21660
+ var rarityValues, DEFAULT_INPUTS, DEFAULT_OUTPUT;
21511
21661
  var init_CraftingRecipe = __esm({
21512
21662
  "components/game/molecules/CraftingRecipe.tsx"() {
21513
21663
  "use client";
@@ -21519,6 +21669,15 @@ var init_CraftingRecipe = __esm({
21519
21669
  init_Stack();
21520
21670
  init_Icon();
21521
21671
  rarityValues = ["common", "uncommon", "rare", "epic", "legendary"];
21672
+ DEFAULT_INPUTS = [
21673
+ { icon: "gem", label: "Iron Ore", required: 2, available: 3 },
21674
+ { icon: "flame", label: "Coal", required: 1, available: 1 }
21675
+ ];
21676
+ DEFAULT_OUTPUT = {
21677
+ icon: "sword",
21678
+ label: "Iron Sword",
21679
+ rarity: "uncommon"
21680
+ };
21522
21681
  CraftingRecipe.displayName = "CraftingRecipe";
21523
21682
  }
21524
21683
  });
@@ -26515,10 +26674,10 @@ var init_StatBadge = __esm({
26515
26674
  }
26516
26675
  });
26517
26676
  function InventoryGrid({
26518
- items,
26677
+ items = DEFAULT_GRID_ITEMS,
26519
26678
  columns = 4,
26520
- totalSlots,
26521
- selectedId,
26679
+ totalSlots = 12,
26680
+ selectedId = "",
26522
26681
  onSelect,
26523
26682
  selectEvent,
26524
26683
  size = "md",
@@ -26567,7 +26726,7 @@ function InventoryGrid({
26567
26726
  }
26568
26727
  );
26569
26728
  }
26570
- var columnMap;
26729
+ var columnMap, DEFAULT_GRID_ITEMS;
26571
26730
  var init_InventoryGrid = __esm({
26572
26731
  "components/game/molecules/InventoryGrid.tsx"() {
26573
26732
  "use client";
@@ -26584,12 +26743,18 @@ var init_InventoryGrid = __esm({
26584
26743
  7: "grid-cols-7",
26585
26744
  8: "grid-cols-8"
26586
26745
  };
26746
+ DEFAULT_GRID_ITEMS = [
26747
+ { id: "grid-1", icon: "sword", label: "Iron Sword", quantity: 1, rarity: "common" },
26748
+ { id: "grid-2", icon: "flask-conical", label: "Health Potion", quantity: 3, rarity: "uncommon" },
26749
+ { id: "grid-3", icon: "shield", label: "Wooden Shield", quantity: 1, rarity: "common" },
26750
+ { id: "grid-4", icon: "gem", label: "Ruby Gem", quantity: 2, rarity: "rare" }
26751
+ ];
26587
26752
  InventoryGrid.displayName = "InventoryGrid";
26588
26753
  }
26589
26754
  });
26590
26755
  function QuestTracker({
26591
- quests,
26592
- activeQuestId,
26756
+ quests = DEFAULT_QUESTS,
26757
+ activeQuestId = "q2",
26593
26758
  className
26594
26759
  }) {
26595
26760
  return /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "sm", className, children: quests.map((quest) => {
@@ -26655,6 +26820,7 @@ function QuestTracker({
26655
26820
  );
26656
26821
  }) });
26657
26822
  }
26823
+ var DEFAULT_QUESTS;
26658
26824
  var init_QuestTracker = __esm({
26659
26825
  "components/game/molecules/QuestTracker.tsx"() {
26660
26826
  "use client";
@@ -26664,6 +26830,11 @@ var init_QuestTracker = __esm({
26664
26830
  init_Typography();
26665
26831
  init_Box();
26666
26832
  init_Stack();
26833
+ DEFAULT_QUESTS = [
26834
+ { id: "q1", title: "Reach the Ancient Ruins", progress: 1, maxProgress: 1, completed: true },
26835
+ { id: "q2", title: "Defeat the Shadow Guard", progress: 2, maxProgress: 5, active: true },
26836
+ { id: "q3", title: "Collect 3 Crystal Shards", progress: 0, maxProgress: 3, active: false }
26837
+ ];
26667
26838
  QuestTracker.displayName = "QuestTracker";
26668
26839
  }
26669
26840
  });
@@ -26676,7 +26847,7 @@ function formatTime2(seconds) {
26676
26847
  return `${seconds}s`;
26677
26848
  }
26678
26849
  function PowerupSlots({
26679
- active,
26850
+ active = DEFAULT_ACTIVE_POWERUPS,
26680
26851
  maxSlots = 4,
26681
26852
  className
26682
26853
  }) {
@@ -26721,6 +26892,7 @@ function PowerupSlots({
26721
26892
  ))
26722
26893
  ] });
26723
26894
  }
26895
+ var DEFAULT_ACTIVE_POWERUPS;
26724
26896
  var init_PowerupSlots = __esm({
26725
26897
  "components/game/molecules/PowerupSlots.tsx"() {
26726
26898
  "use client";
@@ -26729,6 +26901,10 @@ var init_PowerupSlots = __esm({
26729
26901
  init_Box();
26730
26902
  init_Stack();
26731
26903
  init_Typography();
26904
+ DEFAULT_ACTIVE_POWERUPS = [
26905
+ { id: "pw1", icon: "zap", label: "Speed Boost", remainingTime: 12 },
26906
+ { id: "pw2", icon: "shield", label: "Iron Shield", remainingTime: 30 }
26907
+ ];
26732
26908
  PowerupSlots.displayName = "PowerupSlots";
26733
26909
  }
26734
26910
  });
@@ -26740,7 +26916,7 @@ function GameCanvas2D({
26740
26916
  tickEvent,
26741
26917
  drawEvent,
26742
26918
  fps = 60,
26743
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
26919
+ backgroundImage = "",
26744
26920
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
26745
26921
  className
26746
26922
  }) {
@@ -26844,10 +27020,10 @@ var init_GameCanvas2D = __esm({
26844
27020
  }
26845
27021
  });
26846
27022
  function HealthPanel({
26847
- current,
26848
- max,
26849
- shield,
26850
- label,
27023
+ current = 75,
27024
+ max = 100,
27025
+ shield = 20,
27026
+ label = "Player HP",
26851
27027
  effects,
26852
27028
  showNumbers = true,
26853
27029
  size = "md",
@@ -26965,11 +27141,11 @@ var init_HealthPanel = __esm({
26965
27141
  }
26966
27142
  });
26967
27143
  function ScoreBoard({
26968
- score: rawScore,
26969
- highScore: rawHighScore,
26970
- combo: rawCombo,
26971
- multiplier: rawMultiplier,
26972
- level: rawLevel,
27144
+ score: rawScore = 4200,
27145
+ highScore: rawHighScore = 8750,
27146
+ combo: rawCombo = 3,
27147
+ multiplier: rawMultiplier = 2,
27148
+ level: rawLevel = 4,
26973
27149
  className
26974
27150
  }) {
26975
27151
  const score = rawScore ?? 0;
@@ -27042,7 +27218,7 @@ var init_ScoreBoard = __esm({
27042
27218
  }
27043
27219
  });
27044
27220
  function ResourceBar({
27045
- resources,
27221
+ resources = DEFAULT_RESOURCES,
27046
27222
  size = "md",
27047
27223
  className
27048
27224
  }) {
@@ -27068,21 +27244,27 @@ function ResourceBar({
27068
27244
  }
27069
27245
  );
27070
27246
  }
27247
+ var DEFAULT_RESOURCES;
27071
27248
  var init_ResourceBar = __esm({
27072
27249
  "components/game/molecules/ResourceBar.tsx"() {
27073
27250
  "use client";
27074
27251
  init_cn();
27075
27252
  init_StatBadge();
27076
27253
  init_Box();
27254
+ DEFAULT_RESOURCES = [
27255
+ { icon: "coins", label: "Gold", value: 320 },
27256
+ { icon: "zap", label: "Energy", value: 7, max: 10 },
27257
+ { icon: "gem", label: "Crystals", value: 15 }
27258
+ ];
27077
27259
  ResourceBar.displayName = "ResourceBar";
27078
27260
  }
27079
27261
  });
27080
27262
  function TurnPanel({
27081
- currentTurn,
27082
- maxTurns,
27083
- phase,
27084
- activeTeam,
27085
- actions,
27263
+ currentTurn = 3,
27264
+ maxTurns = 10,
27265
+ phase = "Attack",
27266
+ activeTeam = "Heroes",
27267
+ actions = DEFAULT_TURN_ACTIONS,
27086
27268
  className
27087
27269
  }) {
27088
27270
  const eventBus = useEventBus();
@@ -27127,6 +27309,7 @@ function TurnPanel({
27127
27309
  }
27128
27310
  );
27129
27311
  }
27312
+ var DEFAULT_TURN_ACTIONS;
27130
27313
  var init_TurnPanel = __esm({
27131
27314
  "components/game/molecules/TurnPanel.tsx"() {
27132
27315
  "use client";
@@ -27135,15 +27318,19 @@ var init_TurnPanel = __esm({
27135
27318
  init_Button();
27136
27319
  init_Box();
27137
27320
  init_useEventBus();
27321
+ DEFAULT_TURN_ACTIONS = [
27322
+ { label: "End Turn", icon: "skip-forward", event: "END_TURN" },
27323
+ { label: "Forfeit", icon: "flag", event: "FORFEIT", disabled: false }
27324
+ ];
27138
27325
  TurnPanel.displayName = "TurnPanel";
27139
27326
  }
27140
27327
  });
27141
27328
  function EnemyPlate({
27142
- name,
27143
- health,
27144
- maxHealth,
27145
- level,
27146
- effects,
27329
+ name = "Shadow Guard",
27330
+ health = 80,
27331
+ maxHealth = 100,
27332
+ level = 5,
27333
+ effects = DEFAULT_ENEMY_EFFECTS,
27147
27334
  className
27148
27335
  }) {
27149
27336
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -27209,7 +27396,7 @@ function EnemyPlate({
27209
27396
  }
27210
27397
  );
27211
27398
  }
27212
- var effectVariantMap2;
27399
+ var effectVariantMap2, DEFAULT_ENEMY_EFFECTS;
27213
27400
  var init_EnemyPlate = __esm({
27214
27401
  "components/game/molecules/EnemyPlate.tsx"() {
27215
27402
  "use client";
@@ -27223,12 +27410,15 @@ var init_EnemyPlate = __esm({
27223
27410
  debuff: "danger",
27224
27411
  neutral: "neutral"
27225
27412
  };
27413
+ DEFAULT_ENEMY_EFFECTS = [
27414
+ { icon: "flame", label: "Burn", variant: "debuff" }
27415
+ ];
27226
27416
  EnemyPlate.displayName = "EnemyPlate";
27227
27417
  }
27228
27418
  });
27229
27419
  function UnitCommandBar({
27230
- commands,
27231
- selectedUnitId,
27420
+ commands = DEFAULT_COMMANDS,
27421
+ selectedUnitId = "unit-1",
27232
27422
  className
27233
27423
  }) {
27234
27424
  const eventBus = useEventBus();
@@ -27271,6 +27461,7 @@ function UnitCommandBar({
27271
27461
  }
27272
27462
  );
27273
27463
  }
27464
+ var DEFAULT_COMMANDS;
27274
27465
  var init_UnitCommandBar = __esm({
27275
27466
  "components/game/molecules/UnitCommandBar.tsx"() {
27276
27467
  "use client";
@@ -27279,6 +27470,12 @@ var init_UnitCommandBar = __esm({
27279
27470
  init_Box();
27280
27471
  init_Typography();
27281
27472
  init_useEventBus();
27473
+ DEFAULT_COMMANDS = [
27474
+ { label: "Move", icon: "move", event: "MOVE", hotkey: "M" },
27475
+ { label: "Attack", icon: "sword", event: "ATTACK", hotkey: "A" },
27476
+ { label: "Defend", icon: "shield", event: "DEFEND", hotkey: "D" },
27477
+ { label: "Wait", icon: "clock", event: "WAIT", hotkey: "W" }
27478
+ ];
27282
27479
  UnitCommandBar.displayName = "UnitCommandBar";
27283
27480
  }
27284
27481
  });
@@ -27312,7 +27509,7 @@ function GameHud({
27312
27509
  className,
27313
27510
  transparent = true
27314
27511
  }) {
27315
- const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : []);
27512
+ const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : DEFAULT_HUD_STATS);
27316
27513
  const stats = Array.isArray(rawStats) ? rawStats : [];
27317
27514
  const position = propPosition ?? "corners";
27318
27515
  if (position === "corners") {
@@ -27337,7 +27534,7 @@ function GameHud({
27337
27534
  }
27338
27535
  );
27339
27536
  }
27340
- var positionMap;
27537
+ var positionMap, DEFAULT_HUD_STATS;
27341
27538
  var init_GameHud = __esm({
27342
27539
  "components/game/molecules/GameHud.tsx"() {
27343
27540
  init_cn();
@@ -27347,11 +27544,17 @@ var init_GameHud = __esm({
27347
27544
  bottom: "bottom-0 left-0 right-0 flex justify-between items-end p-4",
27348
27545
  corners: "inset-0 pointer-events-none"
27349
27546
  };
27547
+ DEFAULT_HUD_STATS = [
27548
+ { label: "HP", value: 75, max: 100, format: "bar", variant: "danger" },
27549
+ { label: "MP", value: 40, max: 60, format: "bar", variant: "primary" },
27550
+ { label: "Score", value: 4200, format: "number", variant: "warning" },
27551
+ { label: "Level", value: 4, format: "number", variant: "default" }
27552
+ ];
27350
27553
  GameHud.displayName = "GameHud";
27351
27554
  }
27352
27555
  });
27353
27556
  function DialogueBox({
27354
- dialogue,
27557
+ dialogue = DEFAULT_DIALOGUE,
27355
27558
  typewriterSpeed = 30,
27356
27559
  position = "bottom",
27357
27560
  onComplete,
@@ -27534,17 +27737,27 @@ function DialogueBox({
27534
27737
  }
27535
27738
  );
27536
27739
  }
27740
+ var DEFAULT_DIALOGUE;
27537
27741
  var init_DialogueBox = __esm({
27538
27742
  "components/game/molecules/DialogueBox.tsx"() {
27539
27743
  "use client";
27540
27744
  init_cn();
27541
27745
  init_useEventBus();
27746
+ DEFAULT_DIALOGUE = {
27747
+ speaker: "Village Elder",
27748
+ text: "The ancient ruins hold great power \u2014 and great danger. Choose your path wisely, traveler.",
27749
+ choices: [
27750
+ { text: "I am ready. Lead the way.", action: "ACCEPT_QUEST" },
27751
+ { text: "Tell me more about the ruins.", action: "ASK_LORE" },
27752
+ { text: "Perhaps another time.", action: "DECLINE" }
27753
+ ]
27754
+ };
27542
27755
  }
27543
27756
  });
27544
27757
  function InventoryPanel({
27545
- items,
27546
- slots,
27547
- columns,
27758
+ items = DEFAULT_INVENTORY_ITEMS,
27759
+ slots = 12,
27760
+ columns = 4,
27548
27761
  selectedSlot,
27549
27762
  onSelectSlot,
27550
27763
  onUseItem,
@@ -27692,25 +27905,31 @@ function InventoryPanel({
27692
27905
  )
27693
27906
  ] });
27694
27907
  }
27908
+ var DEFAULT_INVENTORY_ITEMS;
27695
27909
  var init_InventoryPanel = __esm({
27696
27910
  "components/game/molecules/InventoryPanel.tsx"() {
27697
27911
  "use client";
27698
27912
  init_cn();
27699
27913
  init_useEventBus();
27914
+ DEFAULT_INVENTORY_ITEMS = [
27915
+ { id: "item-1", type: "weapon", name: "Iron Sword", quantity: 1, description: "A sturdy iron blade." },
27916
+ { id: "item-2", type: "potion", name: "Health Potion", quantity: 3, description: "Restores 50 HP." },
27917
+ { id: "item-3", type: "armor", name: "Leather Helm", quantity: 1, description: "Light head protection." }
27918
+ ];
27700
27919
  }
27701
27920
  });
27702
27921
  function GameMenu({
27703
- title,
27922
+ title = "Epic Quest",
27704
27923
  subtitle,
27705
27924
  options,
27706
27925
  menuItems,
27707
27926
  onSelect,
27708
27927
  eventBus: eventBusProp,
27709
27928
  background,
27710
- logo,
27929
+ logo = "",
27711
27930
  className
27712
27931
  }) {
27713
- const resolvedOptions = options ?? menuItems ?? [];
27932
+ const resolvedOptions = options ?? menuItems ?? DEFAULT_MENU_OPTIONS;
27714
27933
  let eventBusFromHook = null;
27715
27934
  try {
27716
27935
  eventBusFromHook = useEventBus();
@@ -27791,7 +28010,7 @@ function GameMenu({
27791
28010
  }
27792
28011
  );
27793
28012
  }
27794
- var variantMap3;
28013
+ var variantMap3, DEFAULT_MENU_OPTIONS;
27795
28014
  var init_GameMenu = __esm({
27796
28015
  "components/game/molecules/GameMenu.tsx"() {
27797
28016
  "use client";
@@ -27802,6 +28021,11 @@ var init_GameMenu = __esm({
27802
28021
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
27803
28022
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
27804
28023
  };
28024
+ DEFAULT_MENU_OPTIONS = [
28025
+ { label: "New Game", event: "NEW_GAME", variant: "primary" },
28026
+ { label: "Continue", event: "CONTINUE", variant: "secondary" },
28027
+ { label: "Settings", event: "SETTINGS", variant: "ghost" }
28028
+ ];
27805
28029
  GameMenu.displayName = "GameMenu";
27806
28030
  }
27807
28031
  });
@@ -27812,19 +28036,19 @@ function formatTime3(ms) {
27812
28036
  return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
27813
28037
  }
27814
28038
  function GameOverScreen({
27815
- title,
28039
+ title = "Game Over",
27816
28040
  message,
27817
- stats = [],
28041
+ stats = DEFAULT_GAME_OVER_STATS,
27818
28042
  actions,
27819
28043
  menuItems,
27820
28044
  onAction,
27821
28045
  eventBus: eventBusProp,
27822
- variant = "neutral",
27823
- highScore,
27824
- currentScore,
28046
+ variant = "defeat",
28047
+ highScore = 2e3,
28048
+ currentScore = 1240,
27825
28049
  className
27826
28050
  }) {
27827
- const resolvedActions = actions ?? menuItems ?? [];
28051
+ const resolvedActions = actions ?? menuItems ?? DEFAULT_GAME_OVER_ACTIONS;
27828
28052
  let eventBusFromHook = null;
27829
28053
  try {
27830
28054
  eventBusFromHook = useEventBus();
@@ -27911,7 +28135,7 @@ function GameOverScreen({
27911
28135
  }
27912
28136
  );
27913
28137
  }
27914
- var variantColors, buttonVariants;
28138
+ var variantColors, buttonVariants, DEFAULT_GAME_OVER_ACTIONS, DEFAULT_GAME_OVER_STATS;
27915
28139
  var init_GameOverScreen = __esm({
27916
28140
  "components/game/molecules/GameOverScreen.tsx"() {
27917
28141
  "use client";
@@ -27940,21 +28164,35 @@ var init_GameOverScreen = __esm({
27940
28164
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
27941
28165
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
27942
28166
  };
28167
+ DEFAULT_GAME_OVER_ACTIONS = [
28168
+ { label: "Play Again", event: "RESTART", variant: "primary" },
28169
+ { label: "Main Menu", event: "MAIN_MENU", variant: "secondary" }
28170
+ ];
28171
+ DEFAULT_GAME_OVER_STATS = [
28172
+ { label: "Score", value: 1240 },
28173
+ { label: "Enemies Defeated", value: 8 },
28174
+ { label: "Time", value: 93e3, format: "time" }
28175
+ ];
27943
28176
  GameOverScreen.displayName = "GameOverScreen";
27944
28177
  }
27945
28178
  });
27946
28179
  function PlatformerCanvas({
27947
28180
  player,
27948
- platforms = [],
28181
+ platforms = [
28182
+ { x: 0, y: 368, width: 800, height: 32, type: "ground" },
28183
+ { x: 150, y: 280, width: 160, height: 16, type: "platform" },
28184
+ { x: 420, y: 220, width: 160, height: 16, type: "platform" },
28185
+ { x: 620, y: 300, width: 140, height: 16, type: "platform" }
28186
+ ],
27949
28187
  worldWidth = 800,
27950
28188
  worldHeight = 400,
27951
28189
  canvasWidth = 800,
27952
28190
  canvasHeight = 400,
27953
28191
  followCamera = true,
27954
- bgColor,
28192
+ bgColor = "#5c94fc",
27955
28193
  playerSprite = "https://almadar-kflow-assets.web.app/shared/platformer/characters/platformChar_idle.png",
27956
28194
  tileSprites,
27957
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
28195
+ backgroundImage = "",
27958
28196
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/platformer/",
27959
28197
  leftEvent = "MOVE_LEFT",
27960
28198
  rightEvent = "MOVE_RIGHT",
@@ -28002,10 +28240,10 @@ function PlatformerCanvas({
28002
28240
  };
28003
28241
  }, []);
28004
28242
  const resolvedPlayer = player ?? {
28005
- x: 50,
28006
- y: 300,
28007
- width: 24,
28008
- height: 32,
28243
+ x: 80,
28244
+ y: 336,
28245
+ width: 32,
28246
+ height: 48,
28009
28247
  facingRight: true
28010
28248
  };
28011
28249
  const handleKeyDown = React82.useCallback((e) => {
@@ -46703,12 +46941,12 @@ function WorldMapTemplate({
46703
46941
  entity,
46704
46942
  scale = 0.4,
46705
46943
  unitScale = 2.5,
46706
- diamondTopY,
46944
+ diamondTopY = 374,
46707
46945
  allowMoveAllHeroes = false,
46708
- tiles,
46709
- units,
46710
- features,
46711
- assetManifest,
46946
+ tiles = DEFAULT_WORLDMAP_TILES,
46947
+ units = DEFAULT_WORLDMAP_UNITS,
46948
+ features = DEFAULT_WORLDMAP_FEATURES,
46949
+ assetManifest = DEFAULT_WORLDMAP_MANIFEST,
46712
46950
  className
46713
46951
  }) {
46714
46952
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -46731,9 +46969,63 @@ function WorldMapTemplate({
46731
46969
  }
46732
46970
  );
46733
46971
  }
46972
+ var CDN3, DEFAULT_WORLDMAP_TILES, DEFAULT_WORLDMAP_UNITS, DEFAULT_WORLDMAP_FEATURES, DEFAULT_WORLDMAP_MANIFEST;
46734
46973
  var init_WorldMapTemplate = __esm({
46735
46974
  "components/game/templates/WorldMapTemplate.tsx"() {
46736
46975
  init_WorldMapBoard();
46976
+ CDN3 = "https://almadar-kflow-assets.web.app/shared";
46977
+ DEFAULT_WORLDMAP_TILES = [
46978
+ { x: 0, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46979
+ { x: 1, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46980
+ { x: 2, y: 0, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
46981
+ { x: 3, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46982
+ { x: 4, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46983
+ { x: 0, y: 1, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46984
+ { x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
46985
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
46986
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
46987
+ { x: 4, y: 1, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
46988
+ { x: 0, y: 2, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
46989
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
46990
+ { x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
46991
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
46992
+ { x: 4, y: 2, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46993
+ { x: 0, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46994
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
46995
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
46996
+ { x: 3, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
46997
+ { x: 4, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46998
+ { x: 0, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
46999
+ { x: 1, y: 4, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47000
+ { x: 2, y: 4, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47001
+ { x: 3, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47002
+ { x: 4, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` }
47003
+ ];
47004
+ DEFAULT_WORLDMAP_UNITS = [
47005
+ { 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` },
47006
+ { 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` }
47007
+ ];
47008
+ DEFAULT_WORLDMAP_FEATURES = [
47009
+ { id: "f1", x: 2, y: 2, type: "capital", sprite: `${CDN3}/scenes/world/capital.png` },
47010
+ { id: "f2", x: 4, y: 2, type: "power_node", sprite: `${CDN3}/world-map/power_node.png` }
47011
+ ];
47012
+ DEFAULT_WORLDMAP_MANIFEST = {
47013
+ baseUrl: CDN3,
47014
+ terrains: {
47015
+ grass: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png",
47016
+ water: "/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png",
47017
+ mountain: "/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png",
47018
+ road: "/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png"
47019
+ },
47020
+ units: {
47021
+ hero: "/sprite-sheets/amir-sprite-sheet-se.png",
47022
+ scout: "/sprite-sheets/archivist-sprite-sheet-se.png"
47023
+ },
47024
+ features: {
47025
+ capital: "/scenes/world/capital.png",
47026
+ power_node: "/world-map/power_node.png"
47027
+ }
47028
+ };
46737
47029
  WorldMapTemplate.displayName = "WorldMapTemplate";
46738
47030
  }
46739
47031
  });