@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.
@@ -7043,8 +7043,8 @@ var init_TraitFrame = __esm({
7043
7043
  }
7044
7044
  });
7045
7045
  function HealthBar({
7046
- current,
7047
- max,
7046
+ current = 3,
7047
+ max = 5,
7048
7048
  format = "hearts",
7049
7049
  size = "md",
7050
7050
  className,
@@ -7293,11 +7293,11 @@ var init_ControlButton = __esm({
7293
7293
  });
7294
7294
  function Sprite({
7295
7295
  spritesheet = "https://almadar-kflow-assets.web.app/shared/isometric-blocks/Spritesheet/allTiles_sheet.png",
7296
- frameWidth,
7297
- frameHeight,
7298
- frame,
7299
- x,
7300
- y,
7296
+ frameWidth = 64,
7297
+ frameHeight = 64,
7298
+ frame = 0,
7299
+ x = 0,
7300
+ y = 0,
7301
7301
  scale = 1,
7302
7302
  flipX = false,
7303
7303
  flipY = false,
@@ -7367,7 +7367,7 @@ var init_Sprite = __esm({
7367
7367
  }
7368
7368
  });
7369
7369
  function StateIndicator({
7370
- state,
7370
+ state = "idle",
7371
7371
  label,
7372
7372
  size = "md",
7373
7373
  animated = true,
@@ -7438,8 +7438,8 @@ function formatTime(seconds, format) {
7438
7438
  return `${mins.toString().padStart(2, "0")}:${padded}`;
7439
7439
  }
7440
7440
  function TimerDisplay({
7441
- seconds,
7442
- running,
7441
+ seconds = 90,
7442
+ running = true,
7443
7443
  format = "mm:ss",
7444
7444
  size = "md",
7445
7445
  className,
@@ -7476,8 +7476,8 @@ var init_TimerDisplay = __esm({
7476
7476
  });
7477
7477
  function ResourceCounter({
7478
7478
  icon,
7479
- label,
7480
- value,
7479
+ label = "Gold",
7480
+ value = 250,
7481
7481
  max,
7482
7482
  color,
7483
7483
  size = "md",
@@ -7529,10 +7529,11 @@ var init_ResourceCounter = __esm({
7529
7529
  }
7530
7530
  });
7531
7531
  function ItemSlot({
7532
- icon,
7533
- label,
7532
+ assetUrl = DEFAULT_ASSET_URL,
7533
+ icon = "sword",
7534
+ label = "Iron Sword",
7534
7535
  quantity,
7535
- rarity = "common",
7536
+ rarity = "uncommon",
7536
7537
  empty,
7537
7538
  size = "md",
7538
7539
  selected,
@@ -7540,6 +7541,7 @@ function ItemSlot({
7540
7541
  className
7541
7542
  }) {
7542
7543
  const isClickable = onClick != null;
7544
+ const px = assetSizeMap[size];
7543
7545
  return /* @__PURE__ */ jsx(
7544
7546
  "button",
7545
7547
  {
@@ -7560,7 +7562,17 @@ function ItemSlot({
7560
7562
  className
7561
7563
  ),
7562
7564
  children: empty ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
7563
- icon && /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon }) : /* @__PURE__ */ jsx(Icon, { icon }) }),
7565
+ assetUrl ? /* @__PURE__ */ jsx(
7566
+ "img",
7567
+ {
7568
+ src: assetUrl,
7569
+ alt: label,
7570
+ width: px,
7571
+ height: px,
7572
+ style: { imageRendering: "pixelated", objectFit: "contain" },
7573
+ className: "flex-shrink-0"
7574
+ }
7575
+ ) : icon ? /* @__PURE__ */ jsx("span", { className: "flex-shrink-0", children: typeof icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: icon }) : /* @__PURE__ */ jsx(Icon, { icon }) }) : null,
7564
7576
  quantity != null && quantity > 1 && /* @__PURE__ */ jsx(
7565
7577
  "span",
7566
7578
  {
@@ -7576,7 +7588,7 @@ function ItemSlot({
7576
7588
  }
7577
7589
  );
7578
7590
  }
7579
- var sizeMap6, rarityBorderMap, rarityGlowMap;
7591
+ var sizeMap6, rarityBorderMap, rarityGlowMap, DEFAULT_ASSET_URL, assetSizeMap;
7580
7592
  var init_ItemSlot = __esm({
7581
7593
  "components/game/atoms/ItemSlot.tsx"() {
7582
7594
  "use client";
@@ -7601,11 +7613,17 @@ var init_ItemSlot = __esm({
7601
7613
  epic: "shadow-lg",
7602
7614
  legendary: "shadow-lg"
7603
7615
  };
7616
+ DEFAULT_ASSET_URL = "https://almadar-kflow-assets.web.app/shared/isometric-dungeon/Isometric/chestClosed_E.png";
7617
+ assetSizeMap = {
7618
+ sm: 28,
7619
+ md: 40,
7620
+ lg: 56
7621
+ };
7604
7622
  ItemSlot.displayName = "ItemSlot";
7605
7623
  }
7606
7624
  });
7607
7625
  function TurnIndicator({
7608
- currentTurn,
7626
+ currentTurn = 1,
7609
7627
  maxTurns,
7610
7628
  activeTeam,
7611
7629
  phase,
@@ -7668,7 +7686,7 @@ function getComboScale(combo) {
7668
7686
  return "";
7669
7687
  }
7670
7688
  function ComboCounter({
7671
- combo,
7689
+ combo = 5,
7672
7690
  multiplier,
7673
7691
  streak,
7674
7692
  size = "md",
@@ -7714,10 +7732,10 @@ var init_ComboCounter = __esm({
7714
7732
  }
7715
7733
  });
7716
7734
  function XPBar({
7717
- current,
7718
- max,
7719
- level,
7720
- showLabel = false,
7735
+ current = 350,
7736
+ max = 1e3,
7737
+ level = 5,
7738
+ showLabel = true,
7721
7739
  size = "md",
7722
7740
  animated = true,
7723
7741
  className
@@ -7800,7 +7818,7 @@ var init_XPBar = __esm({
7800
7818
  function WaypointMarker({
7801
7819
  label,
7802
7820
  icon,
7803
- active = false,
7821
+ active = true,
7804
7822
  completed = false,
7805
7823
  size = "md",
7806
7824
  className
@@ -7874,11 +7892,11 @@ function formatDuration(seconds) {
7874
7892
  return `${Math.round(seconds)}s`;
7875
7893
  }
7876
7894
  function StatusEffect({
7877
- icon,
7878
- label,
7879
- duration,
7895
+ icon = "shield",
7896
+ label = "Shield",
7897
+ duration = 30,
7880
7898
  stacks,
7881
- variant = "neutral",
7899
+ variant = "buff",
7882
7900
  size = "md",
7883
7901
  className
7884
7902
  }) {
@@ -7940,7 +7958,7 @@ var init_StatusEffect = __esm({
7940
7958
  }
7941
7959
  });
7942
7960
  function DamageNumber({
7943
- value,
7961
+ value = 42,
7944
7962
  type = "damage",
7945
7963
  size = "md",
7946
7964
  className
@@ -7989,8 +8007,8 @@ var init_DamageNumber = __esm({
7989
8007
  }
7990
8008
  });
7991
8009
  function DialogueBubble({
7992
- speaker,
7993
- text,
8010
+ speaker = "Hero",
8011
+ text = "The dungeon awaits. Choose your path wisely.",
7994
8012
  portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
7995
8013
  position = "bottom",
7996
8014
  className
@@ -8027,7 +8045,7 @@ var init_DialogueBubble = __esm({
8027
8045
  }
8028
8046
  });
8029
8047
  function ChoiceButton({
8030
- text,
8048
+ text = "Charge forward into the fray",
8031
8049
  index,
8032
8050
  disabled = false,
8033
8051
  selected = false,
@@ -8073,7 +8091,7 @@ var init_ChoiceButton = __esm({
8073
8091
  }
8074
8092
  });
8075
8093
  function ActionButton({
8076
- label,
8094
+ label = "Attack",
8077
8095
  icon,
8078
8096
  cooldown = 0,
8079
8097
  disabled = false,
@@ -8153,13 +8171,13 @@ var init_ActionButton = __esm({
8153
8171
  }
8154
8172
  });
8155
8173
  function MiniMap({
8156
- tiles = [],
8157
- units = [],
8174
+ tiles = DEFAULT_TILES,
8175
+ units = DEFAULT_UNITS,
8158
8176
  width = 150,
8159
8177
  height = 150,
8160
8178
  mapWidth = 100,
8161
8179
  mapHeight = 100,
8162
- viewportRect,
8180
+ viewportRect = DEFAULT_VIEWPORT,
8163
8181
  className
8164
8182
  }) {
8165
8183
  const canvasRef = React83.useRef(null);
@@ -8238,10 +8256,25 @@ function MiniMap({
8238
8256
  }
8239
8257
  );
8240
8258
  }
8259
+ var DEFAULT_TILES, DEFAULT_UNITS, DEFAULT_VIEWPORT;
8241
8260
  var init_MiniMap = __esm({
8242
8261
  "components/game/atoms/MiniMap.tsx"() {
8243
8262
  "use client";
8244
8263
  init_cn();
8264
+ DEFAULT_TILES = [
8265
+ { x: 10, y: 10, color: "#4ade80" },
8266
+ { x: 20, y: 15, color: "#4ade80" },
8267
+ { x: 30, y: 25, color: "#22c55e" },
8268
+ { x: 50, y: 40, color: "#4ade80" },
8269
+ { x: 60, y: 55, color: "#16a34a" },
8270
+ { x: 40, y: 60, color: "#4ade80" },
8271
+ { x: 70, y: 30, color: "#22c55e" },
8272
+ { x: 80, y: 70, color: "#4ade80" }
8273
+ ];
8274
+ DEFAULT_UNITS = [
8275
+ { x: 30, y: 30, color: "#60a5fa", isPlayer: true }
8276
+ ];
8277
+ DEFAULT_VIEWPORT = { x: 20, y: 20, w: 40, h: 40 };
8245
8278
  MiniMap.displayName = "MiniMap";
8246
8279
  }
8247
8280
  });
@@ -9720,7 +9753,7 @@ var init_Accordion = __esm({
9720
9753
  }
9721
9754
  });
9722
9755
  function ActionButtons({
9723
- buttons,
9756
+ buttons = DEFAULT_BUTTONS,
9724
9757
  onAction,
9725
9758
  actionEvent,
9726
9759
  layout = "horizontal",
@@ -9827,7 +9860,7 @@ function ActionButtons({
9827
9860
  button.id
9828
9861
  )) });
9829
9862
  }
9830
- var sizeMap14, layoutMap;
9863
+ var sizeMap14, layoutMap, DEFAULT_BUTTONS;
9831
9864
  var init_ActionButtons = __esm({
9832
9865
  "components/game/molecules/ActionButtons.tsx"() {
9833
9866
  "use client";
@@ -9844,6 +9877,11 @@ var init_ActionButtons = __esm({
9844
9877
  vertical: "flex flex-col gap-2",
9845
9878
  diamond: "grid grid-cols-3 gap-1"
9846
9879
  };
9880
+ DEFAULT_BUTTONS = [
9881
+ { id: "jump", label: "Jump", icon: "chevron-up", variant: "primary" },
9882
+ { id: "attack", label: "Attack", icon: "sword", variant: "secondary" },
9883
+ { id: "dodge", label: "Dodge", icon: "wind", variant: "ghost" }
9884
+ ];
9847
9885
  ActionButtons.displayName = "ActionButtons";
9848
9886
  }
9849
9887
  });
@@ -11024,7 +11062,7 @@ function IsometricCanvas({
11024
11062
  // Rendering options
11025
11063
  scale = 0.4,
11026
11064
  debug: debug2 = false,
11027
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
11065
+ backgroundImage = "",
11028
11066
  showMinimap = true,
11029
11067
  enableCamera = true,
11030
11068
  unitScale = 1,
@@ -12162,10 +12200,10 @@ function BattleTemplate({
12162
12200
  entity,
12163
12201
  scale = 0.45,
12164
12202
  unitScale = 1,
12165
- tiles,
12166
- units,
12167
- features,
12168
- assetManifest,
12203
+ tiles = DEFAULT_BATTLE_TILES,
12204
+ units = DEFAULT_BATTLE_UNITS,
12205
+ features = DEFAULT_BATTLE_FEATURES,
12206
+ assetManifest = DEFAULT_BATTLE_MANIFEST,
12169
12207
  className
12170
12208
  }) {
12171
12209
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -12191,9 +12229,62 @@ function BattleTemplate({
12191
12229
  }
12192
12230
  );
12193
12231
  }
12232
+ var CDN, DEFAULT_BATTLE_TILES, DEFAULT_BATTLE_UNITS, DEFAULT_BATTLE_FEATURES, DEFAULT_BATTLE_MANIFEST;
12194
12233
  var init_BattleTemplate = __esm({
12195
12234
  "components/game/templates/BattleTemplate.tsx"() {
12196
12235
  init_BattleBoard();
12236
+ CDN = "https://almadar-kflow-assets.web.app/shared";
12237
+ DEFAULT_BATTLE_TILES = [
12238
+ { x: 0, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12239
+ { x: 1, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12240
+ { x: 2, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12241
+ { x: 3, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12242
+ { x: 4, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12243
+ { x: 0, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12244
+ { x: 1, y: 1, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
12245
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12246
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12247
+ { x: 4, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12248
+ { x: 0, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12249
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12250
+ { x: 2, y: 2, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
12251
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12252
+ { x: 4, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12253
+ { x: 0, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12254
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12255
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
12256
+ { x: 3, y: 3, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
12257
+ { x: 4, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12258
+ { x: 0, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12259
+ { x: 1, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12260
+ { x: 2, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12261
+ { x: 3, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
12262
+ { x: 4, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` }
12263
+ ];
12264
+ DEFAULT_BATTLE_UNITS = [
12265
+ { 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` },
12266
+ { 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` }
12267
+ ];
12268
+ DEFAULT_BATTLE_FEATURES = [
12269
+ { id: "f1", x: 2, y: 2, type: "gold_mine", sprite: `${CDN}/world-map/gold_mine.png` },
12270
+ { id: "f2", x: 3, y: 1, type: "portal", sprite: `${CDN}/world-map/portal_open.png` }
12271
+ ];
12272
+ DEFAULT_BATTLE_MANIFEST = {
12273
+ baseUrl: CDN,
12274
+ terrains: {
12275
+ stone: "/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png",
12276
+ dirt: "/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png",
12277
+ grass: "/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png"
12278
+ },
12279
+ units: {
12280
+ worker: "/sprite-sheets/amir-sprite-sheet-se.png",
12281
+ guardian: "/sprite-sheets/destroyer-sprite-sheet-sw.png"
12282
+ },
12283
+ features: {
12284
+ gold_mine: "/world-map/gold_mine.png",
12285
+ portal: "/world-map/portal_open.png"
12286
+ }
12287
+ };
12197
12288
  BattleTemplate.displayName = "BattleTemplate";
12198
12289
  }
12199
12290
  });
@@ -20193,10 +20284,10 @@ var init_CastleBoard = __esm({
20193
20284
  function CastleTemplate({
20194
20285
  entity,
20195
20286
  scale = 0.45,
20196
- tiles,
20197
- units,
20198
- features,
20199
- assetManifest,
20287
+ tiles = DEFAULT_CASTLE_TILES,
20288
+ units = DEFAULT_CASTLE_UNITS,
20289
+ features = DEFAULT_CASTLE_FEATURES,
20290
+ assetManifest = DEFAULT_CASTLE_MANIFEST,
20200
20291
  className
20201
20292
  }) {
20202
20293
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -20217,9 +20308,61 @@ function CastleTemplate({
20217
20308
  }
20218
20309
  );
20219
20310
  }
20311
+ var CDN2, DEFAULT_CASTLE_TILES, DEFAULT_CASTLE_UNITS, DEFAULT_CASTLE_FEATURES, DEFAULT_CASTLE_MANIFEST;
20220
20312
  var init_CastleTemplate = __esm({
20221
20313
  "components/game/templates/CastleTemplate.tsx"() {
20222
20314
  init_CastleBoard();
20315
+ CDN2 = "https://almadar-kflow-assets.web.app/shared";
20316
+ DEFAULT_CASTLE_TILES = [
20317
+ { x: 0, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20318
+ { x: 1, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20319
+ { x: 2, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20320
+ { x: 3, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20321
+ { x: 4, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20322
+ { x: 0, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20323
+ { x: 1, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20324
+ { x: 2, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20325
+ { x: 3, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20326
+ { x: 4, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20327
+ { x: 0, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20328
+ { x: 1, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20329
+ { x: 2, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_09.png` },
20330
+ { x: 3, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20331
+ { x: 4, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20332
+ { x: 0, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20333
+ { x: 1, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20334
+ { x: 2, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20335
+ { x: 3, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
20336
+ { x: 4, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20337
+ { x: 0, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20338
+ { x: 1, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20339
+ { x: 2, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20340
+ { x: 3, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
20341
+ { x: 4, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` }
20342
+ ];
20343
+ DEFAULT_CASTLE_UNITS = [
20344
+ { 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` },
20345
+ { 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` }
20346
+ ];
20347
+ DEFAULT_CASTLE_FEATURES = [
20348
+ { id: "f1", x: 2, y: 2, type: "chest", sprite: `${CDN2}/world-map/treasure_chest_closed.png` },
20349
+ { id: "f2", x: 3, y: 1, type: "crystal", sprite: `${CDN2}/world-map/resonance_crystal.png` }
20350
+ ];
20351
+ DEFAULT_CASTLE_MANIFEST = {
20352
+ baseUrl: CDN2,
20353
+ terrains: {
20354
+ wall: "/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png",
20355
+ floor: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png"
20356
+ },
20357
+ units: {
20358
+ worker: "/sprite-sheets/coordinator-sprite-sheet-se.png",
20359
+ guardian: "/sprite-sheets/forger-sprite-sheet-se.png"
20360
+ },
20361
+ features: {
20362
+ chest: "/world-map/treasure_chest_closed.png",
20363
+ crystal: "/world-map/resonance_crystal.png"
20364
+ }
20365
+ };
20223
20366
  CastleTemplate.displayName = "CastleTemplate";
20224
20367
  }
20225
20368
  });
@@ -21341,7 +21484,7 @@ var init_CodeRunnerPanel = __esm({
21341
21484
  }
21342
21485
  });
21343
21486
  function CombatLog({
21344
- events: events2,
21487
+ events: events2 = DEFAULT_COMBAT_EVENTS,
21345
21488
  maxVisible = 50,
21346
21489
  autoScroll = true,
21347
21490
  showTimestamps = false,
@@ -21392,7 +21535,7 @@ function CombatLog({
21392
21535
  }) }) })
21393
21536
  ] });
21394
21537
  }
21395
- var eventIcons, eventColors, eventBadgeVariants;
21538
+ var eventIcons, eventColors, eventBadgeVariants, DEFAULT_COMBAT_EVENTS;
21396
21539
  var init_CombatLog = __esm({
21397
21540
  "components/game/molecules/CombatLog.tsx"() {
21398
21541
  init_atoms2();
@@ -21424,6 +21567,13 @@ var init_CombatLog = __esm({
21424
21567
  death: "secondary",
21425
21568
  spawn: "secondary"
21426
21569
  };
21570
+ DEFAULT_COMBAT_EVENTS = [
21571
+ { id: "e1", type: "spawn", message: "Shadow Guard entered the field.", timestamp: 0, turn: 1 },
21572
+ { id: "e2", type: "move", message: "Hero moved to (3, 4).", timestamp: 1, actorName: "Hero", turn: 1 },
21573
+ { id: "e3", type: "attack", message: "Hero attacked Shadow Guard.", timestamp: 2, actorName: "Hero", targetName: "Shadow Guard", value: 18, turn: 2 },
21574
+ { id: "e4", type: "defend", message: "Shadow Guard blocked 5 damage.", timestamp: 3, actorName: "Shadow Guard", value: 5, turn: 2 },
21575
+ { id: "e5", type: "heal", message: "Hero used Health Potion.", timestamp: 4, actorName: "Hero", value: 25, turn: 3 }
21576
+ ];
21427
21577
  CombatLog.displayName = "CombatLog";
21428
21578
  }
21429
21579
  });
@@ -21831,9 +21981,9 @@ function isValidRarity(value) {
21831
21981
  return rarityValues.includes(value);
21832
21982
  }
21833
21983
  function CraftingRecipe({
21834
- inputs,
21835
- output,
21836
- canCraft = false,
21984
+ inputs = DEFAULT_INPUTS,
21985
+ output = DEFAULT_OUTPUT,
21986
+ canCraft = true,
21837
21987
  onCraft,
21838
21988
  craftEvent,
21839
21989
  className
@@ -21894,7 +22044,7 @@ function CraftingRecipe({
21894
22044
  }
21895
22045
  );
21896
22046
  }
21897
- var rarityValues;
22047
+ var rarityValues, DEFAULT_INPUTS, DEFAULT_OUTPUT;
21898
22048
  var init_CraftingRecipe = __esm({
21899
22049
  "components/game/molecules/CraftingRecipe.tsx"() {
21900
22050
  "use client";
@@ -21906,6 +22056,15 @@ var init_CraftingRecipe = __esm({
21906
22056
  init_Stack();
21907
22057
  init_Icon();
21908
22058
  rarityValues = ["common", "uncommon", "rare", "epic", "legendary"];
22059
+ DEFAULT_INPUTS = [
22060
+ { icon: "gem", label: "Iron Ore", required: 2, available: 3 },
22061
+ { icon: "flame", label: "Coal", required: 1, available: 1 }
22062
+ ];
22063
+ DEFAULT_OUTPUT = {
22064
+ icon: "sword",
22065
+ label: "Iron Sword",
22066
+ rarity: "uncommon"
22067
+ };
21909
22068
  CraftingRecipe.displayName = "CraftingRecipe";
21910
22069
  }
21911
22070
  });
@@ -26902,10 +27061,10 @@ var init_StatBadge = __esm({
26902
27061
  }
26903
27062
  });
26904
27063
  function InventoryGrid({
26905
- items,
27064
+ items = DEFAULT_GRID_ITEMS,
26906
27065
  columns = 4,
26907
- totalSlots,
26908
- selectedId,
27066
+ totalSlots = 12,
27067
+ selectedId = "",
26909
27068
  onSelect,
26910
27069
  selectEvent,
26911
27070
  size = "md",
@@ -26954,7 +27113,7 @@ function InventoryGrid({
26954
27113
  }
26955
27114
  );
26956
27115
  }
26957
- var columnMap;
27116
+ var columnMap, DEFAULT_GRID_ITEMS;
26958
27117
  var init_InventoryGrid = __esm({
26959
27118
  "components/game/molecules/InventoryGrid.tsx"() {
26960
27119
  "use client";
@@ -26971,12 +27130,18 @@ var init_InventoryGrid = __esm({
26971
27130
  7: "grid-cols-7",
26972
27131
  8: "grid-cols-8"
26973
27132
  };
27133
+ DEFAULT_GRID_ITEMS = [
27134
+ { id: "grid-1", icon: "sword", label: "Iron Sword", quantity: 1, rarity: "common" },
27135
+ { id: "grid-2", icon: "flask-conical", label: "Health Potion", quantity: 3, rarity: "uncommon" },
27136
+ { id: "grid-3", icon: "shield", label: "Wooden Shield", quantity: 1, rarity: "common" },
27137
+ { id: "grid-4", icon: "gem", label: "Ruby Gem", quantity: 2, rarity: "rare" }
27138
+ ];
26974
27139
  InventoryGrid.displayName = "InventoryGrid";
26975
27140
  }
26976
27141
  });
26977
27142
  function QuestTracker({
26978
- quests,
26979
- activeQuestId,
27143
+ quests = DEFAULT_QUESTS,
27144
+ activeQuestId = "q2",
26980
27145
  className
26981
27146
  }) {
26982
27147
  return /* @__PURE__ */ jsx(VStack, { gap: "sm", className, children: quests.map((quest) => {
@@ -27042,6 +27207,7 @@ function QuestTracker({
27042
27207
  );
27043
27208
  }) });
27044
27209
  }
27210
+ var DEFAULT_QUESTS;
27045
27211
  var init_QuestTracker = __esm({
27046
27212
  "components/game/molecules/QuestTracker.tsx"() {
27047
27213
  "use client";
@@ -27051,6 +27217,11 @@ var init_QuestTracker = __esm({
27051
27217
  init_Typography();
27052
27218
  init_Box();
27053
27219
  init_Stack();
27220
+ DEFAULT_QUESTS = [
27221
+ { id: "q1", title: "Reach the Ancient Ruins", progress: 1, maxProgress: 1, completed: true },
27222
+ { id: "q2", title: "Defeat the Shadow Guard", progress: 2, maxProgress: 5, active: true },
27223
+ { id: "q3", title: "Collect 3 Crystal Shards", progress: 0, maxProgress: 3, active: false }
27224
+ ];
27054
27225
  QuestTracker.displayName = "QuestTracker";
27055
27226
  }
27056
27227
  });
@@ -27063,7 +27234,7 @@ function formatTime2(seconds) {
27063
27234
  return `${seconds}s`;
27064
27235
  }
27065
27236
  function PowerupSlots({
27066
- active,
27237
+ active = DEFAULT_ACTIVE_POWERUPS,
27067
27238
  maxSlots = 4,
27068
27239
  className
27069
27240
  }) {
@@ -27108,6 +27279,7 @@ function PowerupSlots({
27108
27279
  ))
27109
27280
  ] });
27110
27281
  }
27282
+ var DEFAULT_ACTIVE_POWERUPS;
27111
27283
  var init_PowerupSlots = __esm({
27112
27284
  "components/game/molecules/PowerupSlots.tsx"() {
27113
27285
  "use client";
@@ -27116,6 +27288,10 @@ var init_PowerupSlots = __esm({
27116
27288
  init_Box();
27117
27289
  init_Stack();
27118
27290
  init_Typography();
27291
+ DEFAULT_ACTIVE_POWERUPS = [
27292
+ { id: "pw1", icon: "zap", label: "Speed Boost", remainingTime: 12 },
27293
+ { id: "pw2", icon: "shield", label: "Iron Shield", remainingTime: 30 }
27294
+ ];
27119
27295
  PowerupSlots.displayName = "PowerupSlots";
27120
27296
  }
27121
27297
  });
@@ -27127,7 +27303,7 @@ function GameCanvas2D({
27127
27303
  tickEvent,
27128
27304
  drawEvent,
27129
27305
  fps = 60,
27130
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
27306
+ backgroundImage = "",
27131
27307
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
27132
27308
  className
27133
27309
  }) {
@@ -27231,10 +27407,10 @@ var init_GameCanvas2D = __esm({
27231
27407
  }
27232
27408
  });
27233
27409
  function HealthPanel({
27234
- current,
27235
- max,
27236
- shield,
27237
- label,
27410
+ current = 75,
27411
+ max = 100,
27412
+ shield = 20,
27413
+ label = "Player HP",
27238
27414
  effects,
27239
27415
  showNumbers = true,
27240
27416
  size = "md",
@@ -27352,11 +27528,11 @@ var init_HealthPanel = __esm({
27352
27528
  }
27353
27529
  });
27354
27530
  function ScoreBoard({
27355
- score: rawScore,
27356
- highScore: rawHighScore,
27357
- combo: rawCombo,
27358
- multiplier: rawMultiplier,
27359
- level: rawLevel,
27531
+ score: rawScore = 4200,
27532
+ highScore: rawHighScore = 8750,
27533
+ combo: rawCombo = 3,
27534
+ multiplier: rawMultiplier = 2,
27535
+ level: rawLevel = 4,
27360
27536
  className
27361
27537
  }) {
27362
27538
  const score = rawScore ?? 0;
@@ -27429,7 +27605,7 @@ var init_ScoreBoard = __esm({
27429
27605
  }
27430
27606
  });
27431
27607
  function ResourceBar({
27432
- resources,
27608
+ resources = DEFAULT_RESOURCES,
27433
27609
  size = "md",
27434
27610
  className
27435
27611
  }) {
@@ -27455,21 +27631,27 @@ function ResourceBar({
27455
27631
  }
27456
27632
  );
27457
27633
  }
27634
+ var DEFAULT_RESOURCES;
27458
27635
  var init_ResourceBar = __esm({
27459
27636
  "components/game/molecules/ResourceBar.tsx"() {
27460
27637
  "use client";
27461
27638
  init_cn();
27462
27639
  init_StatBadge();
27463
27640
  init_Box();
27641
+ DEFAULT_RESOURCES = [
27642
+ { icon: "coins", label: "Gold", value: 320 },
27643
+ { icon: "zap", label: "Energy", value: 7, max: 10 },
27644
+ { icon: "gem", label: "Crystals", value: 15 }
27645
+ ];
27464
27646
  ResourceBar.displayName = "ResourceBar";
27465
27647
  }
27466
27648
  });
27467
27649
  function TurnPanel({
27468
- currentTurn,
27469
- maxTurns,
27470
- phase,
27471
- activeTeam,
27472
- actions,
27650
+ currentTurn = 3,
27651
+ maxTurns = 10,
27652
+ phase = "Attack",
27653
+ activeTeam = "Heroes",
27654
+ actions = DEFAULT_TURN_ACTIONS,
27473
27655
  className
27474
27656
  }) {
27475
27657
  const eventBus = useEventBus();
@@ -27514,6 +27696,7 @@ function TurnPanel({
27514
27696
  }
27515
27697
  );
27516
27698
  }
27699
+ var DEFAULT_TURN_ACTIONS;
27517
27700
  var init_TurnPanel = __esm({
27518
27701
  "components/game/molecules/TurnPanel.tsx"() {
27519
27702
  "use client";
@@ -27522,15 +27705,19 @@ var init_TurnPanel = __esm({
27522
27705
  init_Button();
27523
27706
  init_Box();
27524
27707
  init_useEventBus();
27708
+ DEFAULT_TURN_ACTIONS = [
27709
+ { label: "End Turn", icon: "skip-forward", event: "END_TURN" },
27710
+ { label: "Forfeit", icon: "flag", event: "FORFEIT", disabled: false }
27711
+ ];
27525
27712
  TurnPanel.displayName = "TurnPanel";
27526
27713
  }
27527
27714
  });
27528
27715
  function EnemyPlate({
27529
- name,
27530
- health,
27531
- maxHealth,
27532
- level,
27533
- effects,
27716
+ name = "Shadow Guard",
27717
+ health = 80,
27718
+ maxHealth = 100,
27719
+ level = 5,
27720
+ effects = DEFAULT_ENEMY_EFFECTS,
27534
27721
  className
27535
27722
  }) {
27536
27723
  return /* @__PURE__ */ jsxs(
@@ -27596,7 +27783,7 @@ function EnemyPlate({
27596
27783
  }
27597
27784
  );
27598
27785
  }
27599
- var effectVariantMap2;
27786
+ var effectVariantMap2, DEFAULT_ENEMY_EFFECTS;
27600
27787
  var init_EnemyPlate = __esm({
27601
27788
  "components/game/molecules/EnemyPlate.tsx"() {
27602
27789
  "use client";
@@ -27610,12 +27797,15 @@ var init_EnemyPlate = __esm({
27610
27797
  debuff: "danger",
27611
27798
  neutral: "neutral"
27612
27799
  };
27800
+ DEFAULT_ENEMY_EFFECTS = [
27801
+ { icon: "flame", label: "Burn", variant: "debuff" }
27802
+ ];
27613
27803
  EnemyPlate.displayName = "EnemyPlate";
27614
27804
  }
27615
27805
  });
27616
27806
  function UnitCommandBar({
27617
- commands,
27618
- selectedUnitId,
27807
+ commands = DEFAULT_COMMANDS,
27808
+ selectedUnitId = "unit-1",
27619
27809
  className
27620
27810
  }) {
27621
27811
  const eventBus = useEventBus();
@@ -27658,6 +27848,7 @@ function UnitCommandBar({
27658
27848
  }
27659
27849
  );
27660
27850
  }
27851
+ var DEFAULT_COMMANDS;
27661
27852
  var init_UnitCommandBar = __esm({
27662
27853
  "components/game/molecules/UnitCommandBar.tsx"() {
27663
27854
  "use client";
@@ -27666,6 +27857,12 @@ var init_UnitCommandBar = __esm({
27666
27857
  init_Box();
27667
27858
  init_Typography();
27668
27859
  init_useEventBus();
27860
+ DEFAULT_COMMANDS = [
27861
+ { label: "Move", icon: "move", event: "MOVE", hotkey: "M" },
27862
+ { label: "Attack", icon: "sword", event: "ATTACK", hotkey: "A" },
27863
+ { label: "Defend", icon: "shield", event: "DEFEND", hotkey: "D" },
27864
+ { label: "Wait", icon: "clock", event: "WAIT", hotkey: "W" }
27865
+ ];
27669
27866
  UnitCommandBar.displayName = "UnitCommandBar";
27670
27867
  }
27671
27868
  });
@@ -27699,7 +27896,7 @@ function GameHud({
27699
27896
  className,
27700
27897
  transparent = true
27701
27898
  }) {
27702
- const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : []);
27899
+ const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : DEFAULT_HUD_STATS);
27703
27900
  const stats = Array.isArray(rawStats) ? rawStats : [];
27704
27901
  const position = propPosition ?? "corners";
27705
27902
  if (position === "corners") {
@@ -27724,7 +27921,7 @@ function GameHud({
27724
27921
  }
27725
27922
  );
27726
27923
  }
27727
- var positionMap;
27924
+ var positionMap, DEFAULT_HUD_STATS;
27728
27925
  var init_GameHud = __esm({
27729
27926
  "components/game/molecules/GameHud.tsx"() {
27730
27927
  init_cn();
@@ -27734,11 +27931,17 @@ var init_GameHud = __esm({
27734
27931
  bottom: "bottom-0 left-0 right-0 flex justify-between items-end p-4",
27735
27932
  corners: "inset-0 pointer-events-none"
27736
27933
  };
27934
+ DEFAULT_HUD_STATS = [
27935
+ { label: "HP", value: 75, max: 100, format: "bar", variant: "danger" },
27936
+ { label: "MP", value: 40, max: 60, format: "bar", variant: "primary" },
27937
+ { label: "Score", value: 4200, format: "number", variant: "warning" },
27938
+ { label: "Level", value: 4, format: "number", variant: "default" }
27939
+ ];
27737
27940
  GameHud.displayName = "GameHud";
27738
27941
  }
27739
27942
  });
27740
27943
  function DialogueBox({
27741
- dialogue,
27944
+ dialogue = DEFAULT_DIALOGUE,
27742
27945
  typewriterSpeed = 30,
27743
27946
  position = "bottom",
27744
27947
  onComplete,
@@ -27921,17 +28124,27 @@ function DialogueBox({
27921
28124
  }
27922
28125
  );
27923
28126
  }
28127
+ var DEFAULT_DIALOGUE;
27924
28128
  var init_DialogueBox = __esm({
27925
28129
  "components/game/molecules/DialogueBox.tsx"() {
27926
28130
  "use client";
27927
28131
  init_cn();
27928
28132
  init_useEventBus();
28133
+ DEFAULT_DIALOGUE = {
28134
+ speaker: "Village Elder",
28135
+ text: "The ancient ruins hold great power \u2014 and great danger. Choose your path wisely, traveler.",
28136
+ choices: [
28137
+ { text: "I am ready. Lead the way.", action: "ACCEPT_QUEST" },
28138
+ { text: "Tell me more about the ruins.", action: "ASK_LORE" },
28139
+ { text: "Perhaps another time.", action: "DECLINE" }
28140
+ ]
28141
+ };
27929
28142
  }
27930
28143
  });
27931
28144
  function InventoryPanel({
27932
- items,
27933
- slots,
27934
- columns,
28145
+ items = DEFAULT_INVENTORY_ITEMS,
28146
+ slots = 12,
28147
+ columns = 4,
27935
28148
  selectedSlot,
27936
28149
  onSelectSlot,
27937
28150
  onUseItem,
@@ -28079,25 +28292,31 @@ function InventoryPanel({
28079
28292
  )
28080
28293
  ] });
28081
28294
  }
28295
+ var DEFAULT_INVENTORY_ITEMS;
28082
28296
  var init_InventoryPanel = __esm({
28083
28297
  "components/game/molecules/InventoryPanel.tsx"() {
28084
28298
  "use client";
28085
28299
  init_cn();
28086
28300
  init_useEventBus();
28301
+ DEFAULT_INVENTORY_ITEMS = [
28302
+ { id: "item-1", type: "weapon", name: "Iron Sword", quantity: 1, description: "A sturdy iron blade." },
28303
+ { id: "item-2", type: "potion", name: "Health Potion", quantity: 3, description: "Restores 50 HP." },
28304
+ { id: "item-3", type: "armor", name: "Leather Helm", quantity: 1, description: "Light head protection." }
28305
+ ];
28087
28306
  }
28088
28307
  });
28089
28308
  function GameMenu({
28090
- title,
28309
+ title = "Epic Quest",
28091
28310
  subtitle,
28092
28311
  options,
28093
28312
  menuItems,
28094
28313
  onSelect,
28095
28314
  eventBus: eventBusProp,
28096
28315
  background,
28097
- logo,
28316
+ logo = "",
28098
28317
  className
28099
28318
  }) {
28100
- const resolvedOptions = options ?? menuItems ?? [];
28319
+ const resolvedOptions = options ?? menuItems ?? DEFAULT_MENU_OPTIONS;
28101
28320
  let eventBusFromHook = null;
28102
28321
  try {
28103
28322
  eventBusFromHook = useEventBus();
@@ -28178,7 +28397,7 @@ function GameMenu({
28178
28397
  }
28179
28398
  );
28180
28399
  }
28181
- var variantMap3;
28400
+ var variantMap3, DEFAULT_MENU_OPTIONS;
28182
28401
  var init_GameMenu = __esm({
28183
28402
  "components/game/molecules/GameMenu.tsx"() {
28184
28403
  "use client";
@@ -28189,6 +28408,11 @@ var init_GameMenu = __esm({
28189
28408
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
28190
28409
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
28191
28410
  };
28411
+ DEFAULT_MENU_OPTIONS = [
28412
+ { label: "New Game", event: "NEW_GAME", variant: "primary" },
28413
+ { label: "Continue", event: "CONTINUE", variant: "secondary" },
28414
+ { label: "Settings", event: "SETTINGS", variant: "ghost" }
28415
+ ];
28192
28416
  GameMenu.displayName = "GameMenu";
28193
28417
  }
28194
28418
  });
@@ -28199,19 +28423,19 @@ function formatTime3(ms) {
28199
28423
  return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
28200
28424
  }
28201
28425
  function GameOverScreen({
28202
- title,
28426
+ title = "Game Over",
28203
28427
  message,
28204
- stats = [],
28428
+ stats = DEFAULT_GAME_OVER_STATS,
28205
28429
  actions,
28206
28430
  menuItems,
28207
28431
  onAction,
28208
28432
  eventBus: eventBusProp,
28209
- variant = "neutral",
28210
- highScore,
28211
- currentScore,
28433
+ variant = "defeat",
28434
+ highScore = 2e3,
28435
+ currentScore = 1240,
28212
28436
  className
28213
28437
  }) {
28214
- const resolvedActions = actions ?? menuItems ?? [];
28438
+ const resolvedActions = actions ?? menuItems ?? DEFAULT_GAME_OVER_ACTIONS;
28215
28439
  let eventBusFromHook = null;
28216
28440
  try {
28217
28441
  eventBusFromHook = useEventBus();
@@ -28298,7 +28522,7 @@ function GameOverScreen({
28298
28522
  }
28299
28523
  );
28300
28524
  }
28301
- var variantColors, buttonVariants;
28525
+ var variantColors, buttonVariants, DEFAULT_GAME_OVER_ACTIONS, DEFAULT_GAME_OVER_STATS;
28302
28526
  var init_GameOverScreen = __esm({
28303
28527
  "components/game/molecules/GameOverScreen.tsx"() {
28304
28528
  "use client";
@@ -28327,21 +28551,35 @@ var init_GameOverScreen = __esm({
28327
28551
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
28328
28552
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
28329
28553
  };
28554
+ DEFAULT_GAME_OVER_ACTIONS = [
28555
+ { label: "Play Again", event: "RESTART", variant: "primary" },
28556
+ { label: "Main Menu", event: "MAIN_MENU", variant: "secondary" }
28557
+ ];
28558
+ DEFAULT_GAME_OVER_STATS = [
28559
+ { label: "Score", value: 1240 },
28560
+ { label: "Enemies Defeated", value: 8 },
28561
+ { label: "Time", value: 93e3, format: "time" }
28562
+ ];
28330
28563
  GameOverScreen.displayName = "GameOverScreen";
28331
28564
  }
28332
28565
  });
28333
28566
  function PlatformerCanvas({
28334
28567
  player,
28335
- platforms = [],
28568
+ platforms = [
28569
+ { x: 0, y: 368, width: 800, height: 32, type: "ground" },
28570
+ { x: 150, y: 280, width: 160, height: 16, type: "platform" },
28571
+ { x: 420, y: 220, width: 160, height: 16, type: "platform" },
28572
+ { x: 620, y: 300, width: 140, height: 16, type: "platform" }
28573
+ ],
28336
28574
  worldWidth = 800,
28337
28575
  worldHeight = 400,
28338
28576
  canvasWidth = 800,
28339
28577
  canvasHeight = 400,
28340
28578
  followCamera = true,
28341
- bgColor,
28579
+ bgColor = "#5c94fc",
28342
28580
  playerSprite = "https://almadar-kflow-assets.web.app/shared/platformer/characters/platformChar_idle.png",
28343
28581
  tileSprites,
28344
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
28582
+ backgroundImage = "",
28345
28583
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/platformer/",
28346
28584
  leftEvent = "MOVE_LEFT",
28347
28585
  rightEvent = "MOVE_RIGHT",
@@ -28389,10 +28627,10 @@ function PlatformerCanvas({
28389
28627
  };
28390
28628
  }, []);
28391
28629
  const resolvedPlayer = player ?? {
28392
- x: 50,
28393
- y: 300,
28394
- width: 24,
28395
- height: 32,
28630
+ x: 80,
28631
+ y: 336,
28632
+ width: 32,
28633
+ height: 48,
28396
28634
  facingRight: true
28397
28635
  };
28398
28636
  const handleKeyDown = useCallback((e) => {
@@ -47071,12 +47309,12 @@ function WorldMapTemplate({
47071
47309
  entity,
47072
47310
  scale = 0.4,
47073
47311
  unitScale = 2.5,
47074
- diamondTopY,
47312
+ diamondTopY = 374,
47075
47313
  allowMoveAllHeroes = false,
47076
- tiles,
47077
- units,
47078
- features,
47079
- assetManifest,
47314
+ tiles = DEFAULT_WORLDMAP_TILES,
47315
+ units = DEFAULT_WORLDMAP_UNITS,
47316
+ features = DEFAULT_WORLDMAP_FEATURES,
47317
+ assetManifest = DEFAULT_WORLDMAP_MANIFEST,
47080
47318
  className
47081
47319
  }) {
47082
47320
  return /* @__PURE__ */ jsx(
@@ -47099,9 +47337,63 @@ function WorldMapTemplate({
47099
47337
  }
47100
47338
  );
47101
47339
  }
47340
+ var CDN3, DEFAULT_WORLDMAP_TILES, DEFAULT_WORLDMAP_UNITS, DEFAULT_WORLDMAP_FEATURES, DEFAULT_WORLDMAP_MANIFEST;
47102
47341
  var init_WorldMapTemplate = __esm({
47103
47342
  "components/game/templates/WorldMapTemplate.tsx"() {
47104
47343
  init_WorldMapBoard();
47344
+ CDN3 = "https://almadar-kflow-assets.web.app/shared";
47345
+ DEFAULT_WORLDMAP_TILES = [
47346
+ { x: 0, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47347
+ { x: 1, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47348
+ { x: 2, y: 0, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47349
+ { x: 3, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47350
+ { x: 4, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47351
+ { x: 0, y: 1, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47352
+ { x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47353
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47354
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47355
+ { x: 4, y: 1, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47356
+ { x: 0, y: 2, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47357
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47358
+ { x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
47359
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47360
+ { x: 4, y: 2, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47361
+ { x: 0, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47362
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47363
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47364
+ { x: 3, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
47365
+ { x: 4, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47366
+ { x: 0, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47367
+ { x: 1, y: 4, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
47368
+ { x: 2, y: 4, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
47369
+ { x: 3, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
47370
+ { x: 4, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` }
47371
+ ];
47372
+ DEFAULT_WORLDMAP_UNITS = [
47373
+ { 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` },
47374
+ { 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` }
47375
+ ];
47376
+ DEFAULT_WORLDMAP_FEATURES = [
47377
+ { id: "f1", x: 2, y: 2, type: "capital", sprite: `${CDN3}/scenes/world/capital.png` },
47378
+ { id: "f2", x: 4, y: 2, type: "power_node", sprite: `${CDN3}/world-map/power_node.png` }
47379
+ ];
47380
+ DEFAULT_WORLDMAP_MANIFEST = {
47381
+ baseUrl: CDN3,
47382
+ terrains: {
47383
+ grass: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png",
47384
+ water: "/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png",
47385
+ mountain: "/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png",
47386
+ road: "/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png"
47387
+ },
47388
+ units: {
47389
+ hero: "/sprite-sheets/amir-sprite-sheet-se.png",
47390
+ scout: "/sprite-sheets/archivist-sprite-sheet-se.png"
47391
+ },
47392
+ features: {
47393
+ capital: "/scenes/world/capital.png",
47394
+ power_node: "/world-map/power_node.png"
47395
+ }
47396
+ };
47105
47397
  WorldMapTemplate.displayName = "WorldMapTemplate";
47106
47398
  }
47107
47399
  });