@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.
@@ -10739,8 +10739,8 @@ var init_TraitFrame = __esm({
10739
10739
  }
10740
10740
  });
10741
10741
  function HealthBar({
10742
- current,
10743
- max,
10742
+ current = 3,
10743
+ max = 5,
10744
10744
  format = "hearts",
10745
10745
  size = "md",
10746
10746
  className,
@@ -10989,11 +10989,11 @@ var init_ControlButton = __esm({
10989
10989
  });
10990
10990
  function Sprite({
10991
10991
  spritesheet = "https://almadar-kflow-assets.web.app/shared/isometric-blocks/Spritesheet/allTiles_sheet.png",
10992
- frameWidth,
10993
- frameHeight,
10994
- frame,
10995
- x,
10996
- y,
10992
+ frameWidth = 64,
10993
+ frameHeight = 64,
10994
+ frame = 0,
10995
+ x = 0,
10996
+ y = 0,
10997
10997
  scale = 1,
10998
10998
  flipX = false,
10999
10999
  flipY = false,
@@ -11063,7 +11063,7 @@ var init_Sprite = __esm({
11063
11063
  }
11064
11064
  });
11065
11065
  function StateIndicator({
11066
- state,
11066
+ state = "idle",
11067
11067
  label,
11068
11068
  size = "md",
11069
11069
  animated = true,
@@ -11134,8 +11134,8 @@ function formatTime(seconds, format) {
11134
11134
  return `${mins.toString().padStart(2, "0")}:${padded}`;
11135
11135
  }
11136
11136
  function TimerDisplay({
11137
- seconds,
11138
- running,
11137
+ seconds = 90,
11138
+ running = true,
11139
11139
  format = "mm:ss",
11140
11140
  size = "md",
11141
11141
  className,
@@ -11172,8 +11172,8 @@ var init_TimerDisplay = __esm({
11172
11172
  });
11173
11173
  function ResourceCounter({
11174
11174
  icon,
11175
- label,
11176
- value,
11175
+ label = "Gold",
11176
+ value = 250,
11177
11177
  max,
11178
11178
  color,
11179
11179
  size = "md",
@@ -11225,10 +11225,11 @@ var init_ResourceCounter = __esm({
11225
11225
  }
11226
11226
  });
11227
11227
  function ItemSlot({
11228
- icon,
11229
- label,
11228
+ assetUrl = DEFAULT_ASSET_URL,
11229
+ icon = "sword",
11230
+ label = "Iron Sword",
11230
11231
  quantity,
11231
- rarity = "common",
11232
+ rarity = "uncommon",
11232
11233
  empty,
11233
11234
  size = "md",
11234
11235
  selected,
@@ -11236,6 +11237,7 @@ function ItemSlot({
11236
11237
  className
11237
11238
  }) {
11238
11239
  const isClickable = onClick != null;
11240
+ const px = assetSizeMap[size];
11239
11241
  return /* @__PURE__ */ jsxRuntime.jsx(
11240
11242
  "button",
11241
11243
  {
@@ -11256,7 +11258,17 @@ function ItemSlot({
11256
11258
  className
11257
11259
  ),
11258
11260
  children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
11259
- icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: typeof icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: icon }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon }) }),
11261
+ assetUrl ? /* @__PURE__ */ jsxRuntime.jsx(
11262
+ "img",
11263
+ {
11264
+ src: assetUrl,
11265
+ alt: label,
11266
+ width: px,
11267
+ height: px,
11268
+ style: { imageRendering: "pixelated", objectFit: "contain" },
11269
+ className: "flex-shrink-0"
11270
+ }
11271
+ ) : 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,
11260
11272
  quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
11261
11273
  "span",
11262
11274
  {
@@ -11272,7 +11284,7 @@ function ItemSlot({
11272
11284
  }
11273
11285
  );
11274
11286
  }
11275
- var sizeMap6, rarityBorderMap, rarityGlowMap;
11287
+ var sizeMap6, rarityBorderMap, rarityGlowMap, DEFAULT_ASSET_URL, assetSizeMap;
11276
11288
  var init_ItemSlot = __esm({
11277
11289
  "components/game/atoms/ItemSlot.tsx"() {
11278
11290
  "use client";
@@ -11297,11 +11309,17 @@ var init_ItemSlot = __esm({
11297
11309
  epic: "shadow-lg",
11298
11310
  legendary: "shadow-lg"
11299
11311
  };
11312
+ DEFAULT_ASSET_URL = "https://almadar-kflow-assets.web.app/shared/isometric-dungeon/Isometric/chestClosed_E.png";
11313
+ assetSizeMap = {
11314
+ sm: 28,
11315
+ md: 40,
11316
+ lg: 56
11317
+ };
11300
11318
  ItemSlot.displayName = "ItemSlot";
11301
11319
  }
11302
11320
  });
11303
11321
  function TurnIndicator({
11304
- currentTurn,
11322
+ currentTurn = 1,
11305
11323
  maxTurns,
11306
11324
  activeTeam,
11307
11325
  phase,
@@ -11364,7 +11382,7 @@ function getComboScale(combo) {
11364
11382
  return "";
11365
11383
  }
11366
11384
  function ComboCounter({
11367
- combo,
11385
+ combo = 5,
11368
11386
  multiplier,
11369
11387
  streak,
11370
11388
  size = "md",
@@ -11410,10 +11428,10 @@ var init_ComboCounter = __esm({
11410
11428
  }
11411
11429
  });
11412
11430
  function XPBar({
11413
- current,
11414
- max,
11415
- level,
11416
- showLabel = false,
11431
+ current = 350,
11432
+ max = 1e3,
11433
+ level = 5,
11434
+ showLabel = true,
11417
11435
  size = "md",
11418
11436
  animated = true,
11419
11437
  className
@@ -11496,7 +11514,7 @@ var init_XPBar = __esm({
11496
11514
  function WaypointMarker({
11497
11515
  label,
11498
11516
  icon,
11499
- active = false,
11517
+ active = true,
11500
11518
  completed = false,
11501
11519
  size = "md",
11502
11520
  className
@@ -11570,11 +11588,11 @@ function formatDuration(seconds) {
11570
11588
  return `${Math.round(seconds)}s`;
11571
11589
  }
11572
11590
  function StatusEffect({
11573
- icon,
11574
- label,
11575
- duration,
11591
+ icon = "shield",
11592
+ label = "Shield",
11593
+ duration = 30,
11576
11594
  stacks,
11577
- variant = "neutral",
11595
+ variant = "buff",
11578
11596
  size = "md",
11579
11597
  className
11580
11598
  }) {
@@ -11636,7 +11654,7 @@ var init_StatusEffect = __esm({
11636
11654
  }
11637
11655
  });
11638
11656
  function DamageNumber({
11639
- value,
11657
+ value = 42,
11640
11658
  type = "damage",
11641
11659
  size = "md",
11642
11660
  className
@@ -11685,8 +11703,8 @@ var init_DamageNumber = __esm({
11685
11703
  }
11686
11704
  });
11687
11705
  function DialogueBubble({
11688
- speaker,
11689
- text,
11706
+ speaker = "Hero",
11707
+ text = "The dungeon awaits. Choose your path wisely.",
11690
11708
  portrait = "https://almadar-kflow-assets.web.app/shared/characters/archetypes/04_hero.png",
11691
11709
  position = "bottom",
11692
11710
  className
@@ -11723,7 +11741,7 @@ var init_DialogueBubble = __esm({
11723
11741
  }
11724
11742
  });
11725
11743
  function ChoiceButton({
11726
- text,
11744
+ text = "Charge forward into the fray",
11727
11745
  index,
11728
11746
  disabled = false,
11729
11747
  selected = false,
@@ -11769,7 +11787,7 @@ var init_ChoiceButton = __esm({
11769
11787
  }
11770
11788
  });
11771
11789
  function ActionButton({
11772
- label,
11790
+ label = "Attack",
11773
11791
  icon,
11774
11792
  cooldown = 0,
11775
11793
  disabled = false,
@@ -11849,13 +11867,13 @@ var init_ActionButton = __esm({
11849
11867
  }
11850
11868
  });
11851
11869
  function MiniMap({
11852
- tiles = [],
11853
- units = [],
11870
+ tiles = DEFAULT_TILES,
11871
+ units = DEFAULT_UNITS,
11854
11872
  width = 150,
11855
11873
  height = 150,
11856
11874
  mapWidth = 100,
11857
11875
  mapHeight = 100,
11858
- viewportRect,
11876
+ viewportRect = DEFAULT_VIEWPORT,
11859
11877
  className
11860
11878
  }) {
11861
11879
  const canvasRef = React91__namespace.useRef(null);
@@ -11934,10 +11952,25 @@ function MiniMap({
11934
11952
  }
11935
11953
  );
11936
11954
  }
11955
+ var DEFAULT_TILES, DEFAULT_UNITS, DEFAULT_VIEWPORT;
11937
11956
  var init_MiniMap = __esm({
11938
11957
  "components/game/atoms/MiniMap.tsx"() {
11939
11958
  "use client";
11940
11959
  init_cn();
11960
+ DEFAULT_TILES = [
11961
+ { x: 10, y: 10, color: "#4ade80" },
11962
+ { x: 20, y: 15, color: "#4ade80" },
11963
+ { x: 30, y: 25, color: "#22c55e" },
11964
+ { x: 50, y: 40, color: "#4ade80" },
11965
+ { x: 60, y: 55, color: "#16a34a" },
11966
+ { x: 40, y: 60, color: "#4ade80" },
11967
+ { x: 70, y: 30, color: "#22c55e" },
11968
+ { x: 80, y: 70, color: "#4ade80" }
11969
+ ];
11970
+ DEFAULT_UNITS = [
11971
+ { x: 30, y: 30, color: "#60a5fa", isPlayer: true }
11972
+ ];
11973
+ DEFAULT_VIEWPORT = { x: 20, y: 20, w: 40, h: 40 };
11941
11974
  MiniMap.displayName = "MiniMap";
11942
11975
  }
11943
11976
  });
@@ -13060,7 +13093,7 @@ var init_Accordion = __esm({
13060
13093
  }
13061
13094
  });
13062
13095
  function ActionButtons({
13063
- buttons,
13096
+ buttons = DEFAULT_BUTTONS,
13064
13097
  onAction,
13065
13098
  actionEvent,
13066
13099
  layout = "horizontal",
@@ -13167,7 +13200,7 @@ function ActionButtons({
13167
13200
  button.id
13168
13201
  )) });
13169
13202
  }
13170
- var sizeMap14, layoutMap;
13203
+ var sizeMap14, layoutMap, DEFAULT_BUTTONS;
13171
13204
  var init_ActionButtons = __esm({
13172
13205
  "components/game/molecules/ActionButtons.tsx"() {
13173
13206
  "use client";
@@ -13184,6 +13217,11 @@ var init_ActionButtons = __esm({
13184
13217
  vertical: "flex flex-col gap-2",
13185
13218
  diamond: "grid grid-cols-3 gap-1"
13186
13219
  };
13220
+ DEFAULT_BUTTONS = [
13221
+ { id: "jump", label: "Jump", icon: "chevron-up", variant: "primary" },
13222
+ { id: "attack", label: "Attack", icon: "sword", variant: "secondary" },
13223
+ { id: "dodge", label: "Dodge", icon: "wind", variant: "ghost" }
13224
+ ];
13187
13225
  ActionButtons.displayName = "ActionButtons";
13188
13226
  }
13189
13227
  });
@@ -14376,7 +14414,7 @@ function IsometricCanvas({
14376
14414
  // Rendering options
14377
14415
  scale = 0.4,
14378
14416
  debug: debug2 = false,
14379
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
14417
+ backgroundImage = "",
14380
14418
  showMinimap = true,
14381
14419
  enableCamera = true,
14382
14420
  unitScale = 1,
@@ -15514,10 +15552,10 @@ function BattleTemplate({
15514
15552
  entity,
15515
15553
  scale = 0.45,
15516
15554
  unitScale = 1,
15517
- tiles,
15518
- units,
15519
- features,
15520
- assetManifest,
15555
+ tiles = DEFAULT_BATTLE_TILES,
15556
+ units = DEFAULT_BATTLE_UNITS,
15557
+ features = DEFAULT_BATTLE_FEATURES,
15558
+ assetManifest = DEFAULT_BATTLE_MANIFEST,
15521
15559
  className
15522
15560
  }) {
15523
15561
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -15543,9 +15581,62 @@ function BattleTemplate({
15543
15581
  }
15544
15582
  );
15545
15583
  }
15584
+ var CDN, DEFAULT_BATTLE_TILES, DEFAULT_BATTLE_UNITS, DEFAULT_BATTLE_FEATURES, DEFAULT_BATTLE_MANIFEST;
15546
15585
  var init_BattleTemplate = __esm({
15547
15586
  "components/game/templates/BattleTemplate.tsx"() {
15548
15587
  init_BattleBoard();
15588
+ CDN = "https://almadar-kflow-assets.web.app/shared";
15589
+ DEFAULT_BATTLE_TILES = [
15590
+ { x: 0, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15591
+ { x: 1, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15592
+ { x: 2, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15593
+ { x: 3, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15594
+ { x: 4, y: 0, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15595
+ { x: 0, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15596
+ { x: 1, y: 1, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
15597
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15598
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15599
+ { x: 4, y: 1, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15600
+ { x: 0, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15601
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15602
+ { x: 2, y: 2, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
15603
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15604
+ { x: 4, y: 2, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15605
+ { x: 0, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15606
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15607
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png` },
15608
+ { x: 3, y: 3, terrain: "dirt", passable: true, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png` },
15609
+ { x: 4, y: 3, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15610
+ { x: 0, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15611
+ { x: 1, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15612
+ { x: 2, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15613
+ { x: 3, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` },
15614
+ { x: 4, y: 4, terrain: "stone", passable: false, terrainSprite: `${CDN}/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png` }
15615
+ ];
15616
+ DEFAULT_BATTLE_UNITS = [
15617
+ { 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` },
15618
+ { 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` }
15619
+ ];
15620
+ DEFAULT_BATTLE_FEATURES = [
15621
+ { id: "f1", x: 2, y: 2, type: "gold_mine", sprite: `${CDN}/world-map/gold_mine.png` },
15622
+ { id: "f2", x: 3, y: 1, type: "portal", sprite: `${CDN}/world-map/portal_open.png` }
15623
+ ];
15624
+ DEFAULT_BATTLE_MANIFEST = {
15625
+ baseUrl: CDN,
15626
+ terrains: {
15627
+ stone: "/isometric-blocks/PNG/Abstract tiles/abstractTile_07.png",
15628
+ dirt: "/isometric-blocks/PNG/Abstract tiles/abstractTile_01.png",
15629
+ grass: "/isometric-blocks/PNG/Abstract tiles/abstractTile_13.png"
15630
+ },
15631
+ units: {
15632
+ worker: "/sprite-sheets/amir-sprite-sheet-se.png",
15633
+ guardian: "/sprite-sheets/destroyer-sprite-sheet-sw.png"
15634
+ },
15635
+ features: {
15636
+ gold_mine: "/world-map/gold_mine.png",
15637
+ portal: "/world-map/portal_open.png"
15638
+ }
15639
+ };
15549
15640
  BattleTemplate.displayName = "BattleTemplate";
15550
15641
  }
15551
15642
  });
@@ -22716,10 +22807,10 @@ var init_CastleBoard = __esm({
22716
22807
  function CastleTemplate({
22717
22808
  entity,
22718
22809
  scale = 0.45,
22719
- tiles,
22720
- units,
22721
- features,
22722
- assetManifest,
22810
+ tiles = DEFAULT_CASTLE_TILES,
22811
+ units = DEFAULT_CASTLE_UNITS,
22812
+ features = DEFAULT_CASTLE_FEATURES,
22813
+ assetManifest = DEFAULT_CASTLE_MANIFEST,
22723
22814
  className
22724
22815
  }) {
22725
22816
  const resolved = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
@@ -22740,9 +22831,61 @@ function CastleTemplate({
22740
22831
  }
22741
22832
  );
22742
22833
  }
22834
+ var CDN2, DEFAULT_CASTLE_TILES, DEFAULT_CASTLE_UNITS, DEFAULT_CASTLE_FEATURES, DEFAULT_CASTLE_MANIFEST;
22743
22835
  var init_CastleTemplate = __esm({
22744
22836
  "components/game/templates/CastleTemplate.tsx"() {
22745
22837
  init_CastleBoard();
22838
+ CDN2 = "https://almadar-kflow-assets.web.app/shared";
22839
+ DEFAULT_CASTLE_TILES = [
22840
+ { x: 0, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22841
+ { x: 1, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22842
+ { x: 2, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22843
+ { x: 3, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22844
+ { x: 4, y: 0, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22845
+ { x: 0, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22846
+ { x: 1, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22847
+ { x: 2, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22848
+ { x: 3, y: 1, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22849
+ { x: 4, y: 1, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22850
+ { x: 0, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22851
+ { x: 1, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22852
+ { x: 2, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_09.png` },
22853
+ { x: 3, y: 2, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22854
+ { x: 4, y: 2, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22855
+ { x: 0, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22856
+ { x: 1, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22857
+ { x: 2, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22858
+ { x: 3, y: 3, terrain: "floor", passable: true, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
22859
+ { x: 4, y: 3, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22860
+ { x: 0, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22861
+ { x: 1, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22862
+ { x: 2, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22863
+ { x: 3, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` },
22864
+ { x: 4, y: 4, terrain: "wall", passable: false, terrainSprite: `${CDN2}/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png` }
22865
+ ];
22866
+ DEFAULT_CASTLE_UNITS = [
22867
+ { 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` },
22868
+ { 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` }
22869
+ ];
22870
+ DEFAULT_CASTLE_FEATURES = [
22871
+ { id: "f1", x: 2, y: 2, type: "chest", sprite: `${CDN2}/world-map/treasure_chest_closed.png` },
22872
+ { id: "f2", x: 3, y: 1, type: "crystal", sprite: `${CDN2}/world-map/resonance_crystal.png` }
22873
+ ];
22874
+ DEFAULT_CASTLE_MANIFEST = {
22875
+ baseUrl: CDN2,
22876
+ terrains: {
22877
+ wall: "/isometric-blocks/PNG/Platformer tiles/platformerTile_05.png",
22878
+ floor: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png"
22879
+ },
22880
+ units: {
22881
+ worker: "/sprite-sheets/coordinator-sprite-sheet-se.png",
22882
+ guardian: "/sprite-sheets/forger-sprite-sheet-se.png"
22883
+ },
22884
+ features: {
22885
+ chest: "/world-map/treasure_chest_closed.png",
22886
+ crystal: "/world-map/resonance_crystal.png"
22887
+ }
22888
+ };
22746
22889
  CastleTemplate.displayName = "CastleTemplate";
22747
22890
  }
22748
22891
  });
@@ -23864,7 +24007,7 @@ var init_CodeRunnerPanel = __esm({
23864
24007
  }
23865
24008
  });
23866
24009
  function CombatLog({
23867
- events: events2,
24010
+ events: events2 = DEFAULT_COMBAT_EVENTS,
23868
24011
  maxVisible = 50,
23869
24012
  autoScroll = true,
23870
24013
  showTimestamps = false,
@@ -23915,7 +24058,7 @@ function CombatLog({
23915
24058
  }) }) })
23916
24059
  ] });
23917
24060
  }
23918
- var eventIcons, eventColors, eventBadgeVariants;
24061
+ var eventIcons, eventColors, eventBadgeVariants, DEFAULT_COMBAT_EVENTS;
23919
24062
  var init_CombatLog = __esm({
23920
24063
  "components/game/molecules/CombatLog.tsx"() {
23921
24064
  init_atoms2();
@@ -23947,6 +24090,13 @@ var init_CombatLog = __esm({
23947
24090
  death: "secondary",
23948
24091
  spawn: "secondary"
23949
24092
  };
24093
+ DEFAULT_COMBAT_EVENTS = [
24094
+ { id: "e1", type: "spawn", message: "Shadow Guard entered the field.", timestamp: 0, turn: 1 },
24095
+ { id: "e2", type: "move", message: "Hero moved to (3, 4).", timestamp: 1, actorName: "Hero", turn: 1 },
24096
+ { id: "e3", type: "attack", message: "Hero attacked Shadow Guard.", timestamp: 2, actorName: "Hero", targetName: "Shadow Guard", value: 18, turn: 2 },
24097
+ { id: "e4", type: "defend", message: "Shadow Guard blocked 5 damage.", timestamp: 3, actorName: "Shadow Guard", value: 5, turn: 2 },
24098
+ { id: "e5", type: "heal", message: "Hero used Health Potion.", timestamp: 4, actorName: "Hero", value: 25, turn: 3 }
24099
+ ];
23950
24100
  CombatLog.displayName = "CombatLog";
23951
24101
  }
23952
24102
  });
@@ -24354,9 +24504,9 @@ function isValidRarity(value) {
24354
24504
  return rarityValues.includes(value);
24355
24505
  }
24356
24506
  function CraftingRecipe({
24357
- inputs,
24358
- output,
24359
- canCraft = false,
24507
+ inputs = DEFAULT_INPUTS,
24508
+ output = DEFAULT_OUTPUT,
24509
+ canCraft = true,
24360
24510
  onCraft,
24361
24511
  craftEvent,
24362
24512
  className
@@ -24417,7 +24567,7 @@ function CraftingRecipe({
24417
24567
  }
24418
24568
  );
24419
24569
  }
24420
- var rarityValues;
24570
+ var rarityValues, DEFAULT_INPUTS, DEFAULT_OUTPUT;
24421
24571
  var init_CraftingRecipe = __esm({
24422
24572
  "components/game/molecules/CraftingRecipe.tsx"() {
24423
24573
  "use client";
@@ -24429,6 +24579,15 @@ var init_CraftingRecipe = __esm({
24429
24579
  init_Stack();
24430
24580
  init_Icon();
24431
24581
  rarityValues = ["common", "uncommon", "rare", "epic", "legendary"];
24582
+ DEFAULT_INPUTS = [
24583
+ { icon: "gem", label: "Iron Ore", required: 2, available: 3 },
24584
+ { icon: "flame", label: "Coal", required: 1, available: 1 }
24585
+ ];
24586
+ DEFAULT_OUTPUT = {
24587
+ icon: "sword",
24588
+ label: "Iron Sword",
24589
+ rarity: "uncommon"
24590
+ };
24432
24591
  CraftingRecipe.displayName = "CraftingRecipe";
24433
24592
  }
24434
24593
  });
@@ -29425,10 +29584,10 @@ var init_StatBadge = __esm({
29425
29584
  }
29426
29585
  });
29427
29586
  function InventoryGrid({
29428
- items,
29587
+ items = DEFAULT_GRID_ITEMS,
29429
29588
  columns = 4,
29430
- totalSlots,
29431
- selectedId,
29589
+ totalSlots = 12,
29590
+ selectedId = "",
29432
29591
  onSelect,
29433
29592
  selectEvent,
29434
29593
  size = "md",
@@ -29477,7 +29636,7 @@ function InventoryGrid({
29477
29636
  }
29478
29637
  );
29479
29638
  }
29480
- var columnMap;
29639
+ var columnMap, DEFAULT_GRID_ITEMS;
29481
29640
  var init_InventoryGrid = __esm({
29482
29641
  "components/game/molecules/InventoryGrid.tsx"() {
29483
29642
  "use client";
@@ -29494,12 +29653,18 @@ var init_InventoryGrid = __esm({
29494
29653
  7: "grid-cols-7",
29495
29654
  8: "grid-cols-8"
29496
29655
  };
29656
+ DEFAULT_GRID_ITEMS = [
29657
+ { id: "grid-1", icon: "sword", label: "Iron Sword", quantity: 1, rarity: "common" },
29658
+ { id: "grid-2", icon: "flask-conical", label: "Health Potion", quantity: 3, rarity: "uncommon" },
29659
+ { id: "grid-3", icon: "shield", label: "Wooden Shield", quantity: 1, rarity: "common" },
29660
+ { id: "grid-4", icon: "gem", label: "Ruby Gem", quantity: 2, rarity: "rare" }
29661
+ ];
29497
29662
  InventoryGrid.displayName = "InventoryGrid";
29498
29663
  }
29499
29664
  });
29500
29665
  function QuestTracker({
29501
- quests,
29502
- activeQuestId,
29666
+ quests = DEFAULT_QUESTS,
29667
+ activeQuestId = "q2",
29503
29668
  className
29504
29669
  }) {
29505
29670
  return /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "sm", className, children: quests.map((quest) => {
@@ -29565,6 +29730,7 @@ function QuestTracker({
29565
29730
  );
29566
29731
  }) });
29567
29732
  }
29733
+ var DEFAULT_QUESTS;
29568
29734
  var init_QuestTracker = __esm({
29569
29735
  "components/game/molecules/QuestTracker.tsx"() {
29570
29736
  "use client";
@@ -29574,6 +29740,11 @@ var init_QuestTracker = __esm({
29574
29740
  init_Typography();
29575
29741
  init_Box();
29576
29742
  init_Stack();
29743
+ DEFAULT_QUESTS = [
29744
+ { id: "q1", title: "Reach the Ancient Ruins", progress: 1, maxProgress: 1, completed: true },
29745
+ { id: "q2", title: "Defeat the Shadow Guard", progress: 2, maxProgress: 5, active: true },
29746
+ { id: "q3", title: "Collect 3 Crystal Shards", progress: 0, maxProgress: 3, active: false }
29747
+ ];
29577
29748
  QuestTracker.displayName = "QuestTracker";
29578
29749
  }
29579
29750
  });
@@ -29586,7 +29757,7 @@ function formatTime2(seconds) {
29586
29757
  return `${seconds}s`;
29587
29758
  }
29588
29759
  function PowerupSlots({
29589
- active,
29760
+ active = DEFAULT_ACTIVE_POWERUPS,
29590
29761
  maxSlots = 4,
29591
29762
  className
29592
29763
  }) {
@@ -29631,6 +29802,7 @@ function PowerupSlots({
29631
29802
  ))
29632
29803
  ] });
29633
29804
  }
29805
+ var DEFAULT_ACTIVE_POWERUPS;
29634
29806
  var init_PowerupSlots = __esm({
29635
29807
  "components/game/molecules/PowerupSlots.tsx"() {
29636
29808
  "use client";
@@ -29639,6 +29811,10 @@ var init_PowerupSlots = __esm({
29639
29811
  init_Box();
29640
29812
  init_Stack();
29641
29813
  init_Typography();
29814
+ DEFAULT_ACTIVE_POWERUPS = [
29815
+ { id: "pw1", icon: "zap", label: "Speed Boost", remainingTime: 12 },
29816
+ { id: "pw2", icon: "shield", label: "Iron Shield", remainingTime: 30 }
29817
+ ];
29642
29818
  PowerupSlots.displayName = "PowerupSlots";
29643
29819
  }
29644
29820
  });
@@ -29650,7 +29826,7 @@ function GameCanvas2D({
29650
29826
  tickEvent,
29651
29827
  drawEvent,
29652
29828
  fps = 60,
29653
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
29829
+ backgroundImage = "",
29654
29830
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/",
29655
29831
  className
29656
29832
  }) {
@@ -29754,10 +29930,10 @@ var init_GameCanvas2D = __esm({
29754
29930
  }
29755
29931
  });
29756
29932
  function HealthPanel({
29757
- current,
29758
- max,
29759
- shield,
29760
- label,
29933
+ current = 75,
29934
+ max = 100,
29935
+ shield = 20,
29936
+ label = "Player HP",
29761
29937
  effects,
29762
29938
  showNumbers = true,
29763
29939
  size = "md",
@@ -29875,11 +30051,11 @@ var init_HealthPanel = __esm({
29875
30051
  }
29876
30052
  });
29877
30053
  function ScoreBoard({
29878
- score: rawScore,
29879
- highScore: rawHighScore,
29880
- combo: rawCombo,
29881
- multiplier: rawMultiplier,
29882
- level: rawLevel,
30054
+ score: rawScore = 4200,
30055
+ highScore: rawHighScore = 8750,
30056
+ combo: rawCombo = 3,
30057
+ multiplier: rawMultiplier = 2,
30058
+ level: rawLevel = 4,
29883
30059
  className
29884
30060
  }) {
29885
30061
  const score = rawScore ?? 0;
@@ -29952,7 +30128,7 @@ var init_ScoreBoard = __esm({
29952
30128
  }
29953
30129
  });
29954
30130
  function ResourceBar({
29955
- resources,
30131
+ resources = DEFAULT_RESOURCES,
29956
30132
  size = "md",
29957
30133
  className
29958
30134
  }) {
@@ -29978,21 +30154,27 @@ function ResourceBar({
29978
30154
  }
29979
30155
  );
29980
30156
  }
30157
+ var DEFAULT_RESOURCES;
29981
30158
  var init_ResourceBar = __esm({
29982
30159
  "components/game/molecules/ResourceBar.tsx"() {
29983
30160
  "use client";
29984
30161
  init_cn();
29985
30162
  init_StatBadge();
29986
30163
  init_Box();
30164
+ DEFAULT_RESOURCES = [
30165
+ { icon: "coins", label: "Gold", value: 320 },
30166
+ { icon: "zap", label: "Energy", value: 7, max: 10 },
30167
+ { icon: "gem", label: "Crystals", value: 15 }
30168
+ ];
29987
30169
  ResourceBar.displayName = "ResourceBar";
29988
30170
  }
29989
30171
  });
29990
30172
  function TurnPanel({
29991
- currentTurn,
29992
- maxTurns,
29993
- phase,
29994
- activeTeam,
29995
- actions,
30173
+ currentTurn = 3,
30174
+ maxTurns = 10,
30175
+ phase = "Attack",
30176
+ activeTeam = "Heroes",
30177
+ actions = DEFAULT_TURN_ACTIONS,
29996
30178
  className
29997
30179
  }) {
29998
30180
  const eventBus = useEventBus();
@@ -30037,6 +30219,7 @@ function TurnPanel({
30037
30219
  }
30038
30220
  );
30039
30221
  }
30222
+ var DEFAULT_TURN_ACTIONS;
30040
30223
  var init_TurnPanel = __esm({
30041
30224
  "components/game/molecules/TurnPanel.tsx"() {
30042
30225
  "use client";
@@ -30045,15 +30228,19 @@ var init_TurnPanel = __esm({
30045
30228
  init_Button();
30046
30229
  init_Box();
30047
30230
  init_useEventBus();
30231
+ DEFAULT_TURN_ACTIONS = [
30232
+ { label: "End Turn", icon: "skip-forward", event: "END_TURN" },
30233
+ { label: "Forfeit", icon: "flag", event: "FORFEIT", disabled: false }
30234
+ ];
30048
30235
  TurnPanel.displayName = "TurnPanel";
30049
30236
  }
30050
30237
  });
30051
30238
  function EnemyPlate({
30052
- name,
30053
- health,
30054
- maxHealth,
30055
- level,
30056
- effects,
30239
+ name = "Shadow Guard",
30240
+ health = 80,
30241
+ maxHealth = 100,
30242
+ level = 5,
30243
+ effects = DEFAULT_ENEMY_EFFECTS,
30057
30244
  className
30058
30245
  }) {
30059
30246
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -30119,7 +30306,7 @@ function EnemyPlate({
30119
30306
  }
30120
30307
  );
30121
30308
  }
30122
- var effectVariantMap2;
30309
+ var effectVariantMap2, DEFAULT_ENEMY_EFFECTS;
30123
30310
  var init_EnemyPlate = __esm({
30124
30311
  "components/game/molecules/EnemyPlate.tsx"() {
30125
30312
  "use client";
@@ -30133,12 +30320,15 @@ var init_EnemyPlate = __esm({
30133
30320
  debuff: "danger",
30134
30321
  neutral: "neutral"
30135
30322
  };
30323
+ DEFAULT_ENEMY_EFFECTS = [
30324
+ { icon: "flame", label: "Burn", variant: "debuff" }
30325
+ ];
30136
30326
  EnemyPlate.displayName = "EnemyPlate";
30137
30327
  }
30138
30328
  });
30139
30329
  function UnitCommandBar({
30140
- commands,
30141
- selectedUnitId,
30330
+ commands = DEFAULT_COMMANDS,
30331
+ selectedUnitId = "unit-1",
30142
30332
  className
30143
30333
  }) {
30144
30334
  const eventBus = useEventBus();
@@ -30181,6 +30371,7 @@ function UnitCommandBar({
30181
30371
  }
30182
30372
  );
30183
30373
  }
30374
+ var DEFAULT_COMMANDS;
30184
30375
  var init_UnitCommandBar = __esm({
30185
30376
  "components/game/molecules/UnitCommandBar.tsx"() {
30186
30377
  "use client";
@@ -30189,6 +30380,12 @@ var init_UnitCommandBar = __esm({
30189
30380
  init_Box();
30190
30381
  init_Typography();
30191
30382
  init_useEventBus();
30383
+ DEFAULT_COMMANDS = [
30384
+ { label: "Move", icon: "move", event: "MOVE", hotkey: "M" },
30385
+ { label: "Attack", icon: "sword", event: "ATTACK", hotkey: "A" },
30386
+ { label: "Defend", icon: "shield", event: "DEFEND", hotkey: "D" },
30387
+ { label: "Wait", icon: "clock", event: "WAIT", hotkey: "W" }
30388
+ ];
30192
30389
  UnitCommandBar.displayName = "UnitCommandBar";
30193
30390
  }
30194
30391
  });
@@ -30222,7 +30419,7 @@ function GameHud({
30222
30419
  className,
30223
30420
  transparent = true
30224
30421
  }) {
30225
- const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : []);
30422
+ const rawStats = propStats ?? items ?? (elements && Array.isArray(elements) ? convertElementsToStats(elements) : DEFAULT_HUD_STATS);
30226
30423
  const stats = Array.isArray(rawStats) ? rawStats : [];
30227
30424
  const position = propPosition ?? "corners";
30228
30425
  if (position === "corners") {
@@ -30247,7 +30444,7 @@ function GameHud({
30247
30444
  }
30248
30445
  );
30249
30446
  }
30250
- var positionMap;
30447
+ var positionMap, DEFAULT_HUD_STATS;
30251
30448
  var init_GameHud = __esm({
30252
30449
  "components/game/molecules/GameHud.tsx"() {
30253
30450
  init_cn();
@@ -30257,11 +30454,17 @@ var init_GameHud = __esm({
30257
30454
  bottom: "bottom-0 left-0 right-0 flex justify-between items-end p-4",
30258
30455
  corners: "inset-0 pointer-events-none"
30259
30456
  };
30457
+ DEFAULT_HUD_STATS = [
30458
+ { label: "HP", value: 75, max: 100, format: "bar", variant: "danger" },
30459
+ { label: "MP", value: 40, max: 60, format: "bar", variant: "primary" },
30460
+ { label: "Score", value: 4200, format: "number", variant: "warning" },
30461
+ { label: "Level", value: 4, format: "number", variant: "default" }
30462
+ ];
30260
30463
  GameHud.displayName = "GameHud";
30261
30464
  }
30262
30465
  });
30263
30466
  function DialogueBox({
30264
- dialogue,
30467
+ dialogue = DEFAULT_DIALOGUE,
30265
30468
  typewriterSpeed = 30,
30266
30469
  position = "bottom",
30267
30470
  onComplete,
@@ -30444,17 +30647,27 @@ function DialogueBox({
30444
30647
  }
30445
30648
  );
30446
30649
  }
30650
+ var DEFAULT_DIALOGUE;
30447
30651
  var init_DialogueBox = __esm({
30448
30652
  "components/game/molecules/DialogueBox.tsx"() {
30449
30653
  "use client";
30450
30654
  init_cn();
30451
30655
  init_useEventBus();
30656
+ DEFAULT_DIALOGUE = {
30657
+ speaker: "Village Elder",
30658
+ text: "The ancient ruins hold great power \u2014 and great danger. Choose your path wisely, traveler.",
30659
+ choices: [
30660
+ { text: "I am ready. Lead the way.", action: "ACCEPT_QUEST" },
30661
+ { text: "Tell me more about the ruins.", action: "ASK_LORE" },
30662
+ { text: "Perhaps another time.", action: "DECLINE" }
30663
+ ]
30664
+ };
30452
30665
  }
30453
30666
  });
30454
30667
  function InventoryPanel({
30455
- items,
30456
- slots,
30457
- columns,
30668
+ items = DEFAULT_INVENTORY_ITEMS,
30669
+ slots = 12,
30670
+ columns = 4,
30458
30671
  selectedSlot,
30459
30672
  onSelectSlot,
30460
30673
  onUseItem,
@@ -30602,25 +30815,31 @@ function InventoryPanel({
30602
30815
  )
30603
30816
  ] });
30604
30817
  }
30818
+ var DEFAULT_INVENTORY_ITEMS;
30605
30819
  var init_InventoryPanel = __esm({
30606
30820
  "components/game/molecules/InventoryPanel.tsx"() {
30607
30821
  "use client";
30608
30822
  init_cn();
30609
30823
  init_useEventBus();
30824
+ DEFAULT_INVENTORY_ITEMS = [
30825
+ { id: "item-1", type: "weapon", name: "Iron Sword", quantity: 1, description: "A sturdy iron blade." },
30826
+ { id: "item-2", type: "potion", name: "Health Potion", quantity: 3, description: "Restores 50 HP." },
30827
+ { id: "item-3", type: "armor", name: "Leather Helm", quantity: 1, description: "Light head protection." }
30828
+ ];
30610
30829
  }
30611
30830
  });
30612
30831
  function GameMenu({
30613
- title,
30832
+ title = "Epic Quest",
30614
30833
  subtitle,
30615
30834
  options,
30616
30835
  menuItems,
30617
30836
  onSelect,
30618
30837
  eventBus: eventBusProp,
30619
30838
  background,
30620
- logo,
30839
+ logo = "",
30621
30840
  className
30622
30841
  }) {
30623
- const resolvedOptions = options ?? menuItems ?? [];
30842
+ const resolvedOptions = options ?? menuItems ?? DEFAULT_MENU_OPTIONS;
30624
30843
  let eventBusFromHook = null;
30625
30844
  try {
30626
30845
  eventBusFromHook = useEventBus();
@@ -30701,7 +30920,7 @@ function GameMenu({
30701
30920
  }
30702
30921
  );
30703
30922
  }
30704
- var variantMap3;
30923
+ var variantMap3, DEFAULT_MENU_OPTIONS;
30705
30924
  var init_GameMenu = __esm({
30706
30925
  "components/game/molecules/GameMenu.tsx"() {
30707
30926
  "use client";
@@ -30712,6 +30931,11 @@ var init_GameMenu = __esm({
30712
30931
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
30713
30932
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
30714
30933
  };
30934
+ DEFAULT_MENU_OPTIONS = [
30935
+ { label: "New Game", event: "NEW_GAME", variant: "primary" },
30936
+ { label: "Continue", event: "CONTINUE", variant: "secondary" },
30937
+ { label: "Settings", event: "SETTINGS", variant: "ghost" }
30938
+ ];
30715
30939
  GameMenu.displayName = "GameMenu";
30716
30940
  }
30717
30941
  });
@@ -30722,19 +30946,19 @@ function formatTime3(ms) {
30722
30946
  return `${minutes}:${remainingSeconds.toString().padStart(2, "0")}`;
30723
30947
  }
30724
30948
  function GameOverScreen({
30725
- title,
30949
+ title = "Game Over",
30726
30950
  message,
30727
- stats = [],
30951
+ stats = DEFAULT_GAME_OVER_STATS,
30728
30952
  actions,
30729
30953
  menuItems,
30730
30954
  onAction,
30731
30955
  eventBus: eventBusProp,
30732
- variant = "neutral",
30733
- highScore,
30734
- currentScore,
30956
+ variant = "defeat",
30957
+ highScore = 2e3,
30958
+ currentScore = 1240,
30735
30959
  className
30736
30960
  }) {
30737
- const resolvedActions = actions ?? menuItems ?? [];
30961
+ const resolvedActions = actions ?? menuItems ?? DEFAULT_GAME_OVER_ACTIONS;
30738
30962
  let eventBusFromHook = null;
30739
30963
  try {
30740
30964
  eventBusFromHook = useEventBus();
@@ -30821,7 +31045,7 @@ function GameOverScreen({
30821
31045
  }
30822
31046
  );
30823
31047
  }
30824
- var variantColors, buttonVariants;
31048
+ var variantColors, buttonVariants, DEFAULT_GAME_OVER_ACTIONS, DEFAULT_GAME_OVER_STATS;
30825
31049
  var init_GameOverScreen = __esm({
30826
31050
  "components/game/molecules/GameOverScreen.tsx"() {
30827
31051
  "use client";
@@ -30850,21 +31074,35 @@ var init_GameOverScreen = __esm({
30850
31074
  secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
30851
31075
  ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
30852
31076
  };
31077
+ DEFAULT_GAME_OVER_ACTIONS = [
31078
+ { label: "Play Again", event: "RESTART", variant: "primary" },
31079
+ { label: "Main Menu", event: "MAIN_MENU", variant: "secondary" }
31080
+ ];
31081
+ DEFAULT_GAME_OVER_STATS = [
31082
+ { label: "Score", value: 1240 },
31083
+ { label: "Enemies Defeated", value: 8 },
31084
+ { label: "Time", value: 93e3, format: "time" }
31085
+ ];
30853
31086
  GameOverScreen.displayName = "GameOverScreen";
30854
31087
  }
30855
31088
  });
30856
31089
  function PlatformerCanvas({
30857
31090
  player,
30858
- platforms = [],
31091
+ platforms = [
31092
+ { x: 0, y: 368, width: 800, height: 32, type: "ground" },
31093
+ { x: 150, y: 280, width: 160, height: 16, type: "platform" },
31094
+ { x: 420, y: 220, width: 160, height: 16, type: "platform" },
31095
+ { x: 620, y: 300, width: 140, height: 16, type: "platform" }
31096
+ ],
30859
31097
  worldWidth = 800,
30860
31098
  worldHeight = 400,
30861
31099
  canvasWidth = 800,
30862
31100
  canvasHeight = 400,
30863
31101
  followCamera = true,
30864
- bgColor,
31102
+ bgColor = "#5c94fc",
30865
31103
  playerSprite = "https://almadar-kflow-assets.web.app/shared/platformer/characters/platformChar_idle.png",
30866
31104
  tileSprites,
30867
- backgroundImage = "https://almadar-kflow-assets.web.app/shared/scenes/dark_clouds_from_above.png",
31105
+ backgroundImage = "",
30868
31106
  assetBaseUrl = "https://almadar-kflow-assets.web.app/shared/platformer/",
30869
31107
  leftEvent = "MOVE_LEFT",
30870
31108
  rightEvent = "MOVE_RIGHT",
@@ -30912,10 +31150,10 @@ function PlatformerCanvas({
30912
31150
  };
30913
31151
  }, []);
30914
31152
  const resolvedPlayer = player ?? {
30915
- x: 50,
30916
- y: 300,
30917
- width: 24,
30918
- height: 32,
31153
+ x: 80,
31154
+ y: 336,
31155
+ width: 32,
31156
+ height: 48,
30919
31157
  facingRight: true
30920
31158
  };
30921
31159
  const handleKeyDown = React91.useCallback((e) => {
@@ -49204,12 +49442,12 @@ function WorldMapTemplate({
49204
49442
  entity,
49205
49443
  scale = 0.4,
49206
49444
  unitScale = 2.5,
49207
- diamondTopY,
49445
+ diamondTopY = 374,
49208
49446
  allowMoveAllHeroes = false,
49209
- tiles,
49210
- units,
49211
- features,
49212
- assetManifest,
49447
+ tiles = DEFAULT_WORLDMAP_TILES,
49448
+ units = DEFAULT_WORLDMAP_UNITS,
49449
+ features = DEFAULT_WORLDMAP_FEATURES,
49450
+ assetManifest = DEFAULT_WORLDMAP_MANIFEST,
49213
49451
  className
49214
49452
  }) {
49215
49453
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -49232,9 +49470,63 @@ function WorldMapTemplate({
49232
49470
  }
49233
49471
  );
49234
49472
  }
49473
+ var CDN3, DEFAULT_WORLDMAP_TILES, DEFAULT_WORLDMAP_UNITS, DEFAULT_WORLDMAP_FEATURES, DEFAULT_WORLDMAP_MANIFEST;
49235
49474
  var init_WorldMapTemplate = __esm({
49236
49475
  "components/game/templates/WorldMapTemplate.tsx"() {
49237
49476
  init_WorldMapBoard();
49477
+ CDN3 = "https://almadar-kflow-assets.web.app/shared";
49478
+ DEFAULT_WORLDMAP_TILES = [
49479
+ { x: 0, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49480
+ { x: 1, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49481
+ { x: 2, y: 0, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
49482
+ { x: 3, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49483
+ { x: 4, y: 0, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49484
+ { x: 0, y: 1, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49485
+ { x: 1, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49486
+ { x: 2, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49487
+ { x: 3, y: 1, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49488
+ { x: 4, y: 1, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
49489
+ { x: 0, y: 2, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
49490
+ { x: 1, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49491
+ { x: 2, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
49492
+ { x: 3, y: 2, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49493
+ { x: 4, y: 2, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49494
+ { x: 0, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49495
+ { x: 1, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49496
+ { x: 2, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49497
+ { x: 3, y: 3, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png` },
49498
+ { x: 4, y: 3, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49499
+ { x: 0, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49500
+ { x: 1, y: 4, terrain: "water", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png` },
49501
+ { x: 2, y: 4, terrain: "grass", passable: true, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png` },
49502
+ { x: 3, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` },
49503
+ { x: 4, y: 4, terrain: "mountain", passable: false, terrainSprite: `${CDN3}/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png` }
49504
+ ];
49505
+ DEFAULT_WORLDMAP_UNITS = [
49506
+ { 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` },
49507
+ { 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` }
49508
+ ];
49509
+ DEFAULT_WORLDMAP_FEATURES = [
49510
+ { id: "f1", x: 2, y: 2, type: "capital", sprite: `${CDN3}/scenes/world/capital.png` },
49511
+ { id: "f2", x: 4, y: 2, type: "power_node", sprite: `${CDN3}/world-map/power_node.png` }
49512
+ ];
49513
+ DEFAULT_WORLDMAP_MANIFEST = {
49514
+ baseUrl: CDN3,
49515
+ terrains: {
49516
+ grass: "/isometric-blocks/PNG/Platformer tiles/platformerTile_01.png",
49517
+ water: "/isometric-blocks/PNG/Platformer tiles/platformerTile_11.png",
49518
+ mountain: "/isometric-blocks/PNG/Platformer tiles/platformerTile_13.png",
49519
+ road: "/isometric-blocks/PNG/Platformer tiles/platformerTile_03.png"
49520
+ },
49521
+ units: {
49522
+ hero: "/sprite-sheets/amir-sprite-sheet-se.png",
49523
+ scout: "/sprite-sheets/archivist-sprite-sheet-se.png"
49524
+ },
49525
+ features: {
49526
+ capital: "/scenes/world/capital.png",
49527
+ power_node: "/world-map/power_node.png"
49528
+ }
49529
+ };
49238
49530
  WorldMapTemplate.displayName = "WorldMapTemplate";
49239
49531
  }
49240
49532
  });