@almadar/ui 5.9.5 → 5.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/avl/index.cjs +232 -215
- package/dist/avl/index.js +232 -215
- package/dist/components/index.cjs +248 -231
- package/dist/components/index.js +248 -231
- package/dist/components/molecules/game/GameCanvas2D.d.ts +5 -1
- package/dist/providers/index.cjs +232 -215
- package/dist/providers/index.js +232 -215
- package/dist/runtime/index.cjs +232 -215
- package/dist/runtime/index.js +232 -215
- package/package.json +1 -1
package/dist/providers/index.cjs
CHANGED
|
@@ -6770,7 +6770,7 @@ function HealthBar({
|
|
|
6770
6770
|
"div",
|
|
6771
6771
|
{
|
|
6772
6772
|
className: cn(
|
|
6773
|
-
"relative overflow-hidden rounded-full bg-
|
|
6773
|
+
"relative overflow-hidden rounded-full bg-muted",
|
|
6774
6774
|
sizes.bar,
|
|
6775
6775
|
"w-24",
|
|
6776
6776
|
className
|
|
@@ -6780,7 +6780,7 @@ function HealthBar({
|
|
|
6780
6780
|
{
|
|
6781
6781
|
className: cn(
|
|
6782
6782
|
"absolute inset-y-0 left-0 rounded-full",
|
|
6783
|
-
percentage > 66 ? "bg-
|
|
6783
|
+
percentage > 66 ? "bg-success" : percentage > 33 ? "bg-warning" : "bg-error",
|
|
6784
6784
|
animated && "transition-all duration-300"
|
|
6785
6785
|
),
|
|
6786
6786
|
style: { width: `${percentage}%` }
|
|
@@ -6802,7 +6802,7 @@ var init_HealthBar = __esm({
|
|
|
6802
6802
|
heartIcon = (filled, size) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
6803
6803
|
"svg",
|
|
6804
6804
|
{
|
|
6805
|
-
className: cn("transition-all duration-200", size, filled ? "text-
|
|
6805
|
+
className: cn("transition-all duration-200", size, filled ? "text-error" : "text-muted-foreground"),
|
|
6806
6806
|
viewBox: "0 0 24 24",
|
|
6807
6807
|
fill: filled ? "currentColor" : "none",
|
|
6808
6808
|
stroke: "currentColor",
|
|
@@ -6866,7 +6866,7 @@ function ScoreDisplay({
|
|
|
6866
6866
|
),
|
|
6867
6867
|
children: [
|
|
6868
6868
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
|
|
6869
|
-
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
6869
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
|
|
6870
6870
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: formattedValue })
|
|
6871
6871
|
]
|
|
6872
6872
|
}
|
|
@@ -6979,8 +6979,8 @@ var init_ControlButton = __esm({
|
|
|
6979
6979
|
};
|
|
6980
6980
|
shapeMap = {
|
|
6981
6981
|
circle: "rounded-full",
|
|
6982
|
-
rounded: "rounded-
|
|
6983
|
-
square: "rounded-
|
|
6982
|
+
rounded: "rounded-interactive",
|
|
6983
|
+
square: "rounded-interactive"
|
|
6984
6984
|
};
|
|
6985
6985
|
variantMap = {
|
|
6986
6986
|
primary: "bg-primary text-primary-foreground border-primary hover:bg-primary-hover",
|
|
@@ -7148,12 +7148,12 @@ function TimerDisplay({
|
|
|
7148
7148
|
"div",
|
|
7149
7149
|
{
|
|
7150
7150
|
className: cn(
|
|
7151
|
-
"inline-flex items-center justify-center rounded-
|
|
7152
|
-
"bg-
|
|
7151
|
+
"inline-flex items-center justify-center rounded-container",
|
|
7152
|
+
"bg-card/80 border border-muted font-mono font-bold tabular-nums",
|
|
7153
7153
|
sizeMap4[size],
|
|
7154
|
-
running && "border-
|
|
7155
|
-
isLow && "text-
|
|
7156
|
-
!isLow && "text-
|
|
7154
|
+
running && "border-success/50",
|
|
7155
|
+
isLow && "text-error border-error/50 animate-pulse",
|
|
7156
|
+
!isLow && "text-foreground",
|
|
7157
7157
|
className
|
|
7158
7158
|
),
|
|
7159
7159
|
children: formatTime(seconds, format)
|
|
@@ -7186,17 +7186,17 @@ function ResourceCounter({
|
|
|
7186
7186
|
"div",
|
|
7187
7187
|
{
|
|
7188
7188
|
className: cn(
|
|
7189
|
-
"inline-flex items-center rounded-
|
|
7190
|
-
"bg-
|
|
7189
|
+
"inline-flex items-center rounded-container",
|
|
7190
|
+
"bg-card/80 border border-muted font-medium text-foreground",
|
|
7191
7191
|
sizes.wrapper,
|
|
7192
7192
|
className
|
|
7193
7193
|
),
|
|
7194
7194
|
children: [
|
|
7195
7195
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: icon }),
|
|
7196
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7196
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
|
|
7197
7197
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold tabular-nums", color), children: [
|
|
7198
7198
|
value,
|
|
7199
|
-
max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
7199
|
+
max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
7200
7200
|
"/",
|
|
7201
7201
|
max
|
|
7202
7202
|
] })
|
|
@@ -7237,18 +7237,18 @@ function ItemSlot({
|
|
|
7237
7237
|
disabled: !isClickable,
|
|
7238
7238
|
title: label,
|
|
7239
7239
|
className: cn(
|
|
7240
|
-
"relative flex items-center justify-center rounded-
|
|
7241
|
-
"bg-
|
|
7240
|
+
"relative flex items-center justify-center rounded-interactive border-2",
|
|
7241
|
+
"bg-card/80 transition-all duration-150",
|
|
7242
7242
|
sizeMap6[size],
|
|
7243
|
-
empty ? "border-
|
|
7243
|
+
empty ? "border-border bg-card/50" : rarityBorderMap[rarity],
|
|
7244
7244
|
!empty && rarityGlowMap[rarity],
|
|
7245
|
-
selected && "ring-2 ring-
|
|
7245
|
+
selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
|
|
7246
7246
|
isClickable && !empty && "hover:brightness-125 cursor-pointer",
|
|
7247
|
-
isClickable && empty && "hover:border-
|
|
7247
|
+
isClickable && empty && "hover:border-muted cursor-pointer",
|
|
7248
7248
|
!isClickable && "cursor-default",
|
|
7249
7249
|
className
|
|
7250
7250
|
),
|
|
7251
|
-
children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7251
|
+
children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7252
7252
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
|
|
7253
7253
|
quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7254
7254
|
"span",
|
|
@@ -7256,7 +7256,7 @@ function ItemSlot({
|
|
|
7256
7256
|
className: cn(
|
|
7257
7257
|
"absolute -bottom-1 -right-1 flex items-center justify-center",
|
|
7258
7258
|
"min-w-[18px] h-[18px] rounded-full px-1",
|
|
7259
|
-
"bg-
|
|
7259
|
+
"bg-surface border border-muted text-xs font-bold text-foreground"
|
|
7260
7260
|
),
|
|
7261
7261
|
children: quantity
|
|
7262
7262
|
}
|
|
@@ -7276,18 +7276,18 @@ var init_ItemSlot = __esm({
|
|
|
7276
7276
|
lg: "w-18 h-18 text-3xl"
|
|
7277
7277
|
};
|
|
7278
7278
|
rarityBorderMap = {
|
|
7279
|
-
common: "border-
|
|
7280
|
-
uncommon: "border-
|
|
7281
|
-
rare: "border-
|
|
7282
|
-
epic: "border-
|
|
7283
|
-
legendary: "border-
|
|
7279
|
+
common: "border-muted",
|
|
7280
|
+
uncommon: "border-success",
|
|
7281
|
+
rare: "border-info",
|
|
7282
|
+
epic: "border-accent",
|
|
7283
|
+
legendary: "border-warning"
|
|
7284
7284
|
};
|
|
7285
7285
|
rarityGlowMap = {
|
|
7286
7286
|
common: "",
|
|
7287
7287
|
uncommon: "",
|
|
7288
|
-
rare: "shadow-
|
|
7289
|
-
epic: "shadow-
|
|
7290
|
-
legendary: "shadow-
|
|
7288
|
+
rare: "shadow-sm",
|
|
7289
|
+
epic: "shadow-lg",
|
|
7290
|
+
legendary: "shadow-lg"
|
|
7291
7291
|
};
|
|
7292
7292
|
ItemSlot.displayName = "ItemSlot";
|
|
7293
7293
|
}
|
|
@@ -7305,8 +7305,8 @@ function TurnIndicator({
|
|
|
7305
7305
|
"div",
|
|
7306
7306
|
{
|
|
7307
7307
|
className: cn(
|
|
7308
|
-
"inline-flex items-center rounded-
|
|
7309
|
-
"bg-
|
|
7308
|
+
"inline-flex items-center rounded-container",
|
|
7309
|
+
"bg-card/80 border border-muted font-medium text-foreground",
|
|
7310
7310
|
sizes.wrapper,
|
|
7311
7311
|
className
|
|
7312
7312
|
),
|
|
@@ -7314,19 +7314,19 @@ function TurnIndicator({
|
|
|
7314
7314
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-bold tabular-nums", children: [
|
|
7315
7315
|
"Turn ",
|
|
7316
7316
|
currentTurn,
|
|
7317
|
-
maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
7317
|
+
maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
7318
7318
|
"/",
|
|
7319
7319
|
maxTurns
|
|
7320
7320
|
] })
|
|
7321
7321
|
] }),
|
|
7322
7322
|
phase && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7323
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7324
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7323
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
|
|
7324
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: phase })
|
|
7325
7325
|
] }),
|
|
7326
7326
|
activeTeam && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7327
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7328
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-
|
|
7329
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7327
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
|
|
7328
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-success/20", sizes.dot) }),
|
|
7329
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-success", children: activeTeam })
|
|
7330
7330
|
] })
|
|
7331
7331
|
]
|
|
7332
7332
|
}
|
|
@@ -7345,10 +7345,10 @@ var init_TurnIndicator = __esm({
|
|
|
7345
7345
|
}
|
|
7346
7346
|
});
|
|
7347
7347
|
function getComboIntensity(combo) {
|
|
7348
|
-
if (combo >= 10) return "text-
|
|
7349
|
-
if (combo >= 7) return "text-
|
|
7350
|
-
if (combo >= 4) return "text-
|
|
7351
|
-
return "text-
|
|
7348
|
+
if (combo >= 10) return "text-error animate-pulse";
|
|
7349
|
+
if (combo >= 7) return "text-warning";
|
|
7350
|
+
if (combo >= 4) return "text-warning";
|
|
7351
|
+
return "text-foreground";
|
|
7352
7352
|
}
|
|
7353
7353
|
function getComboScale(combo) {
|
|
7354
7354
|
if (combo >= 10) return "scale-110";
|
|
@@ -7369,19 +7369,19 @@ function ComboCounter({
|
|
|
7369
7369
|
{
|
|
7370
7370
|
className: cn(
|
|
7371
7371
|
"inline-flex flex-col items-center justify-center",
|
|
7372
|
-
"rounded-
|
|
7372
|
+
"rounded-container bg-card/80 border border-muted px-3 py-1.5",
|
|
7373
7373
|
"transition-transform duration-200",
|
|
7374
7374
|
getComboScale(combo),
|
|
7375
7375
|
className
|
|
7376
7376
|
),
|
|
7377
7377
|
children: [
|
|
7378
7378
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-black tabular-nums leading-none", sizes.combo, getComboIntensity(combo)), children: combo }),
|
|
7379
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-
|
|
7380
|
-
multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-
|
|
7379
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-muted-foreground", sizes.label), children: "combo" }),
|
|
7380
|
+
multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-warning tabular-nums", sizes.multiplier), children: [
|
|
7381
7381
|
"x",
|
|
7382
7382
|
multiplier.toFixed(1)
|
|
7383
7383
|
] }),
|
|
7384
|
-
streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-
|
|
7384
|
+
streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.label), children: [
|
|
7385
7385
|
streak,
|
|
7386
7386
|
" streak"
|
|
7387
7387
|
] })
|
|
@@ -7417,8 +7417,8 @@ function XPBar({
|
|
|
7417
7417
|
"span",
|
|
7418
7418
|
{
|
|
7419
7419
|
className: cn(
|
|
7420
|
-
"flex-shrink-0 rounded-
|
|
7421
|
-
"bg-
|
|
7420
|
+
"flex-shrink-0 rounded-interactive font-bold",
|
|
7421
|
+
"bg-accent text-foreground border border-accent",
|
|
7422
7422
|
sizes.badge
|
|
7423
7423
|
),
|
|
7424
7424
|
children: [
|
|
@@ -7432,7 +7432,7 @@ function XPBar({
|
|
|
7432
7432
|
"div",
|
|
7433
7433
|
{
|
|
7434
7434
|
className: cn(
|
|
7435
|
-
"relative w-full overflow-hidden rounded-full bg-
|
|
7435
|
+
"relative w-full overflow-hidden rounded-full bg-muted border border-muted",
|
|
7436
7436
|
sizes.bar
|
|
7437
7437
|
),
|
|
7438
7438
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7440,7 +7440,7 @@ function XPBar({
|
|
|
7440
7440
|
{
|
|
7441
7441
|
className: cn(
|
|
7442
7442
|
"absolute inset-y-0 left-0 rounded-full",
|
|
7443
|
-
"bg-gradient-to-r from-
|
|
7443
|
+
"bg-gradient-to-r from-accent to-info",
|
|
7444
7444
|
animated && "transition-all duration-500 ease-out"
|
|
7445
7445
|
),
|
|
7446
7446
|
style: { width: `${percentage}%` }
|
|
@@ -7448,7 +7448,7 @@ function XPBar({
|
|
|
7448
7448
|
)
|
|
7449
7449
|
}
|
|
7450
7450
|
),
|
|
7451
|
-
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-
|
|
7451
|
+
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.text), children: [
|
|
7452
7452
|
current,
|
|
7453
7453
|
" / ",
|
|
7454
7454
|
max,
|
|
@@ -7484,7 +7484,7 @@ function WaypointMarker({
|
|
|
7484
7484
|
"div",
|
|
7485
7485
|
{
|
|
7486
7486
|
className: cn(
|
|
7487
|
-
"absolute rounded-full border-2 border-
|
|
7487
|
+
"absolute rounded-full border-2 border-info animate-ping opacity-50",
|
|
7488
7488
|
sizes.ring
|
|
7489
7489
|
)
|
|
7490
7490
|
}
|
|
@@ -7493,7 +7493,7 @@ function WaypointMarker({
|
|
|
7493
7493
|
"div",
|
|
7494
7494
|
{
|
|
7495
7495
|
className: cn(
|
|
7496
|
-
"absolute rounded-full border-2 border-
|
|
7496
|
+
"absolute rounded-full border-2 border-info",
|
|
7497
7497
|
sizes.ring
|
|
7498
7498
|
)
|
|
7499
7499
|
}
|
|
@@ -7504,9 +7504,9 @@ function WaypointMarker({
|
|
|
7504
7504
|
className: cn(
|
|
7505
7505
|
"relative flex items-center justify-center rounded-full transition-all duration-200",
|
|
7506
7506
|
sizes.dot,
|
|
7507
|
-
completed && "bg-
|
|
7508
|
-
active && !completed && "bg-
|
|
7509
|
-
!active && !completed && "bg-
|
|
7507
|
+
completed && "bg-success text-foreground",
|
|
7508
|
+
active && !completed && "bg-info text-foreground",
|
|
7509
|
+
!active && !completed && "bg-muted"
|
|
7510
7510
|
),
|
|
7511
7511
|
children: completed ? checkIcon : icon
|
|
7512
7512
|
}
|
|
@@ -7518,7 +7518,7 @@ function WaypointMarker({
|
|
|
7518
7518
|
className: cn(
|
|
7519
7519
|
"text-center whitespace-nowrap",
|
|
7520
7520
|
sizes.label,
|
|
7521
|
-
completed ? "text-
|
|
7521
|
+
completed ? "text-success" : active ? "text-info" : "text-muted-foreground"
|
|
7522
7522
|
),
|
|
7523
7523
|
children: label
|
|
7524
7524
|
}
|
|
@@ -7559,7 +7559,7 @@ function StatusEffect({
|
|
|
7559
7559
|
"div",
|
|
7560
7560
|
{
|
|
7561
7561
|
className: cn(
|
|
7562
|
-
"relative flex items-center justify-center rounded border-2",
|
|
7562
|
+
"relative flex items-center justify-center rounded-interactive border-2",
|
|
7563
7563
|
sizes.container,
|
|
7564
7564
|
variantStyles7[variant]
|
|
7565
7565
|
),
|
|
@@ -7570,7 +7570,7 @@ function StatusEffect({
|
|
|
7570
7570
|
"span",
|
|
7571
7571
|
{
|
|
7572
7572
|
className: cn(
|
|
7573
|
-
"absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-
|
|
7573
|
+
"absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-foreground bg-background/60 leading-tight",
|
|
7574
7574
|
sizes.timer
|
|
7575
7575
|
),
|
|
7576
7576
|
children: formatDuration(duration)
|
|
@@ -7583,7 +7583,7 @@ function StatusEffect({
|
|
|
7583
7583
|
"span",
|
|
7584
7584
|
{
|
|
7585
7585
|
className: cn(
|
|
7586
|
-
"absolute flex items-center justify-center rounded-full bg-
|
|
7586
|
+
"absolute flex items-center justify-center rounded-full bg-card text-foreground font-bold leading-none",
|
|
7587
7587
|
sizes.badge
|
|
7588
7588
|
),
|
|
7589
7589
|
children: stacks
|
|
@@ -7602,9 +7602,9 @@ var init_StatusEffect = __esm({
|
|
|
7602
7602
|
lg: { container: "w-12 h-12", icon: "text-lg", badge: "text-sm -top-1.5 -right-1.5 w-6 h-6", timer: "text-xs" }
|
|
7603
7603
|
};
|
|
7604
7604
|
variantStyles7 = {
|
|
7605
|
-
buff: "border-
|
|
7606
|
-
debuff: "border-
|
|
7607
|
-
neutral: "border-
|
|
7605
|
+
buff: "border-success bg-success/20",
|
|
7606
|
+
debuff: "border-error bg-error/20",
|
|
7607
|
+
neutral: "border-muted bg-muted/20"
|
|
7608
7608
|
};
|
|
7609
7609
|
StatusEffect.displayName = "StatusEffect";
|
|
7610
7610
|
}
|
|
@@ -7643,10 +7643,10 @@ var init_DamageNumber = __esm({
|
|
|
7643
7643
|
lg: "text-2xl"
|
|
7644
7644
|
};
|
|
7645
7645
|
typeStyles = {
|
|
7646
|
-
damage: "text-
|
|
7647
|
-
heal: "text-
|
|
7648
|
-
crit: "text-
|
|
7649
|
-
miss: "text-
|
|
7646
|
+
damage: "text-error font-bold",
|
|
7647
|
+
heal: "text-success font-bold",
|
|
7648
|
+
crit: "text-warning font-extrabold",
|
|
7649
|
+
miss: "text-muted-foreground italic"
|
|
7650
7650
|
};
|
|
7651
7651
|
floatKeyframes = `
|
|
7652
7652
|
@keyframes damageFloat {
|
|
@@ -7669,12 +7669,12 @@ function DialogueBubble({
|
|
|
7669
7669
|
"div",
|
|
7670
7670
|
{
|
|
7671
7671
|
className: cn(
|
|
7672
|
-
"flex items-start gap-3 rounded-
|
|
7672
|
+
"flex items-start gap-3 rounded-container bg-background/80 backdrop-blur-sm px-4 py-3 border border-border/10",
|
|
7673
7673
|
position === "top" ? "rounded-bl-none" : "rounded-tl-none",
|
|
7674
7674
|
className
|
|
7675
7675
|
),
|
|
7676
7676
|
children: [
|
|
7677
|
-
portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full overflow-hidden border-2 border-
|
|
7677
|
+
portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full overflow-hidden border-2 border-warning/60", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7678
7678
|
"img",
|
|
7679
7679
|
{
|
|
7680
7680
|
src: portrait,
|
|
@@ -7683,8 +7683,8 @@ function DialogueBubble({
|
|
|
7683
7683
|
}
|
|
7684
7684
|
) }),
|
|
7685
7685
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 min-w-0", children: [
|
|
7686
|
-
speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-
|
|
7687
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-
|
|
7686
|
+
speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-warning", children: speaker }),
|
|
7687
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground leading-relaxed", children: text })
|
|
7688
7688
|
] })
|
|
7689
7689
|
]
|
|
7690
7690
|
}
|
|
@@ -7711,7 +7711,7 @@ function ChoiceButton({
|
|
|
7711
7711
|
disabled,
|
|
7712
7712
|
onClick,
|
|
7713
7713
|
className: cn(
|
|
7714
|
-
"w-full text-left px-4 py-2.5 rounded-
|
|
7714
|
+
"w-full text-left px-4 py-2.5 rounded-interactive border transition-all duration-150",
|
|
7715
7715
|
"flex items-center gap-2",
|
|
7716
7716
|
selected ? "bg-accent/15 border-accent text-foreground" : "bg-muted/40 border-border text-foreground hover:bg-muted hover:border-border",
|
|
7717
7717
|
disabled && "opacity-40 cursor-not-allowed hover:bg-muted/40 hover:border-border",
|
|
@@ -7764,7 +7764,7 @@ function ActionButton({
|
|
|
7764
7764
|
disabled: isDisabled,
|
|
7765
7765
|
onClick,
|
|
7766
7766
|
className: cn(
|
|
7767
|
-
"relative inline-flex items-center gap-1.5 rounded-
|
|
7767
|
+
"relative inline-flex items-center gap-1.5 rounded-interactive border font-medium overflow-hidden transition-colors duration-150",
|
|
7768
7768
|
sizes.button,
|
|
7769
7769
|
variantStyles8[variant],
|
|
7770
7770
|
isDisabled && "opacity-60 cursor-not-allowed",
|
|
@@ -7807,9 +7807,9 @@ var init_ActionButton = __esm({
|
|
|
7807
7807
|
init_cn();
|
|
7808
7808
|
init_Icon();
|
|
7809
7809
|
sizeMap13 = {
|
|
7810
|
-
sm: { button: "px-3
|
|
7811
|
-
md: { button: "px-4
|
|
7812
|
-
lg: { button: "
|
|
7810
|
+
sm: { button: "h-button-sm px-3 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
|
|
7811
|
+
md: { button: "h-button-md px-4 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
|
|
7812
|
+
lg: { button: "h-button-lg px-5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
|
|
7813
7813
|
};
|
|
7814
7814
|
variantStyles8 = {
|
|
7815
7815
|
primary: "bg-primary text-primary-foreground hover:bg-primary-hover border-primary",
|
|
@@ -7889,7 +7889,7 @@ function MiniMap({
|
|
|
7889
7889
|
"div",
|
|
7890
7890
|
{
|
|
7891
7891
|
className: cn(
|
|
7892
|
-
"relative inline-block border border-
|
|
7892
|
+
"relative inline-block border border-border/20 rounded-container",
|
|
7893
7893
|
className
|
|
7894
7894
|
),
|
|
7895
7895
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -10961,7 +10961,7 @@ function ActionTile({
|
|
|
10961
10961
|
{
|
|
10962
10962
|
display: "flex",
|
|
10963
10963
|
className: cn(
|
|
10964
|
-
"flex-col items-center gap-1 rounded-
|
|
10964
|
+
"flex-col items-center gap-1 rounded-container border-2 transition-all select-none",
|
|
10965
10965
|
config.px,
|
|
10966
10966
|
disabled ? "opacity-40 cursor-not-allowed border-border bg-muted" : "cursor-grab active:cursor-grabbing hover:scale-105 hover:shadow-md border-border bg-card",
|
|
10967
10967
|
className
|
|
@@ -12261,12 +12261,12 @@ function IsometricCanvas({
|
|
|
12261
12261
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12262
12262
|
Box,
|
|
12263
12263
|
{
|
|
12264
|
-
className: cn("relative w-full overflow-hidden rounded-
|
|
12264
|
+
className: cn("relative w-full overflow-hidden rounded-container", className),
|
|
12265
12265
|
style: { height: viewportSize.height },
|
|
12266
12266
|
"data-testid": "game-canvas-empty",
|
|
12267
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex items-center justify-center h-full bg-[var(--color-card)] rounded-
|
|
12267
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex items-center justify-center h-full bg-[var(--color-card)] rounded-container", children: /* @__PURE__ */ jsxRuntime.jsxs(Stack, { direction: "vertical", gap: "md", align: "center", children: [
|
|
12268
12268
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "map", size: "xl" }),
|
|
12269
|
-
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-
|
|
12269
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: t("canvas.emptyMessage") || "No map data loaded" })
|
|
12270
12270
|
] }) })
|
|
12271
12271
|
}
|
|
12272
12272
|
);
|
|
@@ -12664,19 +12664,19 @@ function BattleBoard({
|
|
|
12664
12664
|
}
|
|
12665
12665
|
)
|
|
12666
12666
|
] }),
|
|
12667
|
-
gameResult && (gameOverOverlay ? gameOverOverlay(ctx) : /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-
|
|
12667
|
+
gameResult && (gameOverOverlay ? gameOverOverlay(ctx) : /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-background/70 backdrop-blur-sm rounded-container", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "text-center p-8", gap: "lg", children: [
|
|
12668
12668
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12669
12669
|
Typography,
|
|
12670
12670
|
{
|
|
12671
12671
|
variant: "h2",
|
|
12672
12672
|
className: cn(
|
|
12673
12673
|
"text-4xl font-black tracking-widest uppercase",
|
|
12674
|
-
gameResult === "victory" ? "text-
|
|
12674
|
+
gameResult === "victory" ? "text-warning" : "text-error"
|
|
12675
12675
|
),
|
|
12676
12676
|
children: gameResult === "victory" ? t("battle.victory") : t("battle.defeat")
|
|
12677
12677
|
}
|
|
12678
12678
|
),
|
|
12679
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-
|
|
12679
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-muted-foreground", children: [
|
|
12680
12680
|
t("battle.turnsPlayed"),
|
|
12681
12681
|
": ",
|
|
12682
12682
|
currentTurn
|
|
@@ -17553,7 +17553,7 @@ function BuilderBoard({
|
|
|
17553
17553
|
backgroundPosition: "center"
|
|
17554
17554
|
},
|
|
17555
17555
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
17556
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
17556
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
17557
17557
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
17558
17558
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
17559
17559
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -17591,7 +17591,7 @@ function BuilderBoard({
|
|
|
17591
17591
|
{
|
|
17592
17592
|
gap: "sm",
|
|
17593
17593
|
align: "center",
|
|
17594
|
-
className: `p-3 border-2 rounded ${result ? result.correct ? "border-
|
|
17594
|
+
className: `p-3 border-2 rounded ${result ? result.correct ? "border-success" : "border-error" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
|
|
17595
17595
|
onClick: () => handlePlaceComponent(slot.id),
|
|
17596
17596
|
children: [
|
|
17597
17597
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", className: "flex-1", children: [
|
|
@@ -17606,7 +17606,7 @@ function BuilderBoard({
|
|
|
17606
17606
|
] }) : null,
|
|
17607
17607
|
placedComp.label
|
|
17608
17608
|
] }),
|
|
17609
|
-
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-
|
|
17609
|
+
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-success" : "text-error" })
|
|
17610
17610
|
] }) : /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: t("builder.empty") })
|
|
17611
17611
|
]
|
|
17612
17612
|
},
|
|
@@ -17615,10 +17615,10 @@ function BuilderBoard({
|
|
|
17615
17615
|
}) })
|
|
17616
17616
|
] }) }),
|
|
17617
17617
|
submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
17618
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-
|
|
17618
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
|
|
17619
17619
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("builder.success") : entity.failMessage ?? t("builder.incorrect") })
|
|
17620
17620
|
] }) }),
|
|
17621
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
17621
|
+
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
|
|
17622
17622
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
17623
17623
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allPlaced, children: [
|
|
17624
17624
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Wrench, size: "sm" }),
|
|
@@ -19240,7 +19240,7 @@ function CanvasEffectEngine({
|
|
|
19240
19240
|
flash && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19241
19241
|
Box,
|
|
19242
19242
|
{
|
|
19243
|
-
className: "absolute inset-0 z-20 pointer-events-none rounded-
|
|
19243
|
+
className: "absolute inset-0 z-20 pointer-events-none rounded-container",
|
|
19244
19244
|
style: { backgroundColor: flash.color, opacity: flash.alpha }
|
|
19245
19245
|
}
|
|
19246
19246
|
),
|
|
@@ -19308,7 +19308,7 @@ function EmojiEffect({
|
|
|
19308
19308
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19309
19309
|
Box,
|
|
19310
19310
|
{
|
|
19311
|
-
className: "absolute rounded-
|
|
19311
|
+
className: "absolute rounded-pill animate-ping",
|
|
19312
19312
|
style: {
|
|
19313
19313
|
width: 48 * intensity,
|
|
19314
19314
|
height: 48 * intensity,
|
|
@@ -21125,7 +21125,7 @@ function ClassifierBoard({
|
|
|
21125
21125
|
backgroundPosition: "center"
|
|
21126
21126
|
},
|
|
21127
21127
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
21128
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
21128
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
21129
21129
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
21130
21130
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
21131
21131
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -21140,7 +21140,7 @@ function ClassifierBoard({
|
|
|
21140
21140
|
/* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "md", children: categories.map((cat) => {
|
|
21141
21141
|
const catItems = items.filter((item) => assignments[item.id] === cat.id);
|
|
21142
21142
|
return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
21143
|
-
cat.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-16 overflow-hidden rounded-
|
|
21143
|
+
cat.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-16 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: cat.imageUrl, alt: "", className: "w-full h-full object-cover" }) }),
|
|
21144
21144
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { justify: "between", align: "center", children: [
|
|
21145
21145
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: cat.label }),
|
|
21146
21146
|
/* @__PURE__ */ jsxRuntime.jsx(Badge, { size: "sm", children: catItems.length })
|
|
@@ -21151,12 +21151,12 @@ function ClassifierBoard({
|
|
|
21151
21151
|
Badge,
|
|
21152
21152
|
{
|
|
21153
21153
|
size: "sm",
|
|
21154
|
-
className: `cursor-pointer ${result ? result.correct ? "border-
|
|
21154
|
+
className: `cursor-pointer ${result ? result.correct ? "border-success bg-success/10" : "border-error bg-error/10" : ""}`,
|
|
21155
21155
|
onClick: () => handleUnassign(item.id),
|
|
21156
21156
|
children: [
|
|
21157
21157
|
item.iconUrl && /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.iconUrl, alt: "", className: "w-3 h-3 object-contain inline-block" }),
|
|
21158
21158
|
item.label,
|
|
21159
|
-
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-
|
|
21159
|
+
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-success" : "text-error" })
|
|
21160
21160
|
]
|
|
21161
21161
|
},
|
|
21162
21162
|
item.id
|
|
@@ -21179,11 +21179,11 @@ function ClassifierBoard({
|
|
|
21179
21179
|
] }) }, cat.id);
|
|
21180
21180
|
}) }),
|
|
21181
21181
|
submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
21182
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-
|
|
21182
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
|
|
21183
21183
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("classifier.allCorrect") : `${correctCount}/${items.length} ${t("classifier.correct")}` }),
|
|
21184
21184
|
!allCorrect && entity.failMessage && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: entity.failMessage })
|
|
21185
21185
|
] }) }),
|
|
21186
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
21186
|
+
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
|
|
21187
21187
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
21188
21188
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allAssigned, children: [
|
|
21189
21189
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
|
|
@@ -22231,7 +22231,7 @@ function CraftingRecipe({
|
|
|
22231
22231
|
Box,
|
|
22232
22232
|
{
|
|
22233
22233
|
className: cn(
|
|
22234
|
-
"flex flex-wrap items-center gap-3 rounded-
|
|
22234
|
+
"flex flex-wrap items-center gap-3 rounded-container bg-muted/50 border border-border/50 p-3",
|
|
22235
22235
|
className
|
|
22236
22236
|
),
|
|
22237
22237
|
children: [
|
|
@@ -22248,10 +22248,10 @@ function CraftingRecipe({
|
|
|
22248
22248
|
className: cn(!hasSufficient && "opacity-50")
|
|
22249
22249
|
}
|
|
22250
22250
|
) }),
|
|
22251
|
-
index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-
|
|
22251
|
+
index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-muted-foreground" })
|
|
22252
22252
|
] }, index);
|
|
22253
22253
|
}) }),
|
|
22254
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-
|
|
22254
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-muted-foreground" }),
|
|
22255
22255
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22256
22256
|
ItemSlot,
|
|
22257
22257
|
{
|
|
@@ -22339,7 +22339,7 @@ function DPad({
|
|
|
22339
22339
|
createButton("up"),
|
|
22340
22340
|
/* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
22341
22341
|
createButton("left"),
|
|
22342
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-
|
|
22342
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-interactive bg-muted border-2 border-muted-foreground" }) }),
|
|
22343
22343
|
createButton("right"),
|
|
22344
22344
|
/* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
22345
22345
|
createButton("down"),
|
|
@@ -26524,7 +26524,7 @@ function StatBadge({
|
|
|
26524
26524
|
"div",
|
|
26525
26525
|
{
|
|
26526
26526
|
className: cn(
|
|
26527
|
-
"inline-flex items-center gap-2 rounded-
|
|
26527
|
+
"inline-flex items-center gap-2 rounded-container border backdrop-blur-sm",
|
|
26528
26528
|
sizeMap17[size] ?? sizeMap17.md,
|
|
26529
26529
|
variantMap2[variant] ?? variantMap2.default,
|
|
26530
26530
|
className
|
|
@@ -26670,10 +26670,10 @@ function QuestTracker({
|
|
|
26670
26670
|
Box,
|
|
26671
26671
|
{
|
|
26672
26672
|
className: cn(
|
|
26673
|
-
"flex items-start gap-3 rounded-
|
|
26674
|
-
isActive && !isCompleted && "bg-
|
|
26675
|
-
isCompleted && "bg-
|
|
26676
|
-
!isActive && !isCompleted && "bg-
|
|
26673
|
+
"flex items-start gap-3 rounded-container px-3 py-2 transition-colors",
|
|
26674
|
+
isActive && !isCompleted && "bg-info/20 border border-info/50",
|
|
26675
|
+
isCompleted && "bg-success/10 border border-success/30 opacity-70",
|
|
26676
|
+
!isActive && !isCompleted && "bg-muted/30 border border-border/30"
|
|
26677
26677
|
),
|
|
26678
26678
|
children: [
|
|
26679
26679
|
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-shrink-0 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -26691,9 +26691,9 @@ function QuestTracker({
|
|
|
26691
26691
|
variant: "body2",
|
|
26692
26692
|
className: cn(
|
|
26693
26693
|
"font-medium truncate",
|
|
26694
|
-
isCompleted && "line-through text-
|
|
26695
|
-
isActive && !isCompleted && "text-
|
|
26696
|
-
!isActive && !isCompleted && "text-
|
|
26694
|
+
isCompleted && "line-through text-muted-foreground",
|
|
26695
|
+
isActive && !isCompleted && "text-info",
|
|
26696
|
+
!isActive && !isCompleted && "text-muted-foreground"
|
|
26697
26697
|
),
|
|
26698
26698
|
children: quest.title
|
|
26699
26699
|
}
|
|
@@ -26711,7 +26711,7 @@ function QuestTracker({
|
|
|
26711
26711
|
Typography,
|
|
26712
26712
|
{
|
|
26713
26713
|
variant: "caption",
|
|
26714
|
-
className: "text-
|
|
26714
|
+
className: "text-muted-foreground mt-1",
|
|
26715
26715
|
children: [
|
|
26716
26716
|
quest.progress,
|
|
26717
26717
|
" / ",
|
|
@@ -26768,14 +26768,14 @@ function PowerupSlots({
|
|
|
26768
26768
|
{
|
|
26769
26769
|
className: cn(
|
|
26770
26770
|
"absolute -bottom-1 left-1/2 -translate-x-1/2",
|
|
26771
|
-
"rounded px-1 py-px",
|
|
26772
|
-
"bg-
|
|
26771
|
+
"rounded-interactive px-1 py-px",
|
|
26772
|
+
"bg-background/80 border border-border"
|
|
26773
26773
|
),
|
|
26774
26774
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
26775
26775
|
Typography,
|
|
26776
26776
|
{
|
|
26777
26777
|
variant: "caption",
|
|
26778
|
-
className: "text-[9px] font-mono font-bold text-
|
|
26778
|
+
className: "text-[9px] font-mono font-bold text-warning whitespace-nowrap",
|
|
26779
26779
|
children: formatTime2(powerup.remainingTime)
|
|
26780
26780
|
}
|
|
26781
26781
|
)
|
|
@@ -26808,6 +26808,8 @@ function GameCanvas2D({
|
|
|
26808
26808
|
height = 600,
|
|
26809
26809
|
onDraw,
|
|
26810
26810
|
onTick,
|
|
26811
|
+
tickEvent,
|
|
26812
|
+
drawEvent,
|
|
26811
26813
|
fps = 60,
|
|
26812
26814
|
className
|
|
26813
26815
|
}) {
|
|
@@ -26815,10 +26817,17 @@ function GameCanvas2D({
|
|
|
26815
26817
|
const rafRef = React86__namespace.useRef(0);
|
|
26816
26818
|
const frameRef = React86__namespace.useRef(0);
|
|
26817
26819
|
const lastTimeRef = React86__namespace.useRef(0);
|
|
26820
|
+
const emit = useEmitEvent();
|
|
26818
26821
|
const onDrawRef = React86__namespace.useRef(onDraw);
|
|
26819
26822
|
onDrawRef.current = onDraw;
|
|
26820
26823
|
const onTickRef = React86__namespace.useRef(onTick);
|
|
26821
26824
|
onTickRef.current = onTick;
|
|
26825
|
+
const tickEventRef = React86__namespace.useRef(tickEvent);
|
|
26826
|
+
tickEventRef.current = tickEvent;
|
|
26827
|
+
const drawEventRef = React86__namespace.useRef(drawEvent);
|
|
26828
|
+
drawEventRef.current = drawEvent;
|
|
26829
|
+
const emitRef = React86__namespace.useRef(emit);
|
|
26830
|
+
emitRef.current = emit;
|
|
26822
26831
|
React86__namespace.useEffect(() => {
|
|
26823
26832
|
const canvas = canvasRef.current;
|
|
26824
26833
|
if (!canvas) return;
|
|
@@ -26835,8 +26844,15 @@ function GameCanvas2D({
|
|
|
26835
26844
|
if (elapsed >= interval) {
|
|
26836
26845
|
const dt = elapsed / 1e3;
|
|
26837
26846
|
lastTimeRef.current = timestamp - elapsed % interval;
|
|
26847
|
+
const frame = frameRef.current;
|
|
26838
26848
|
onTickRef.current?.(dt);
|
|
26839
|
-
|
|
26849
|
+
if (tickEventRef.current) {
|
|
26850
|
+
emitRef.current(tickEventRef.current, { dt, frame });
|
|
26851
|
+
}
|
|
26852
|
+
onDrawRef.current?.(ctx, frame);
|
|
26853
|
+
if (drawEventRef.current) {
|
|
26854
|
+
emitRef.current(drawEventRef.current, { frame });
|
|
26855
|
+
}
|
|
26840
26856
|
frameRef.current += 1;
|
|
26841
26857
|
}
|
|
26842
26858
|
rafRef.current = requestAnimationFrame(loop);
|
|
@@ -26862,6 +26878,7 @@ var init_GameCanvas2D = __esm({
|
|
|
26862
26878
|
"use client";
|
|
26863
26879
|
init_cn();
|
|
26864
26880
|
init_Box();
|
|
26881
|
+
init_useEventBus();
|
|
26865
26882
|
GameCanvas2D.displayName = "GameCanvas2D";
|
|
26866
26883
|
}
|
|
26867
26884
|
});
|
|
@@ -26880,7 +26897,7 @@ function HealthPanel({
|
|
|
26880
26897
|
Box,
|
|
26881
26898
|
{
|
|
26882
26899
|
className: cn(
|
|
26883
|
-
"rounded-
|
|
26900
|
+
"rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm",
|
|
26884
26901
|
sizes.padding,
|
|
26885
26902
|
className
|
|
26886
26903
|
),
|
|
@@ -26891,7 +26908,7 @@ function HealthPanel({
|
|
|
26891
26908
|
{
|
|
26892
26909
|
variant: "caption",
|
|
26893
26910
|
weight: "bold",
|
|
26894
|
-
className: "text-
|
|
26911
|
+
className: "text-muted-foreground uppercase tracking-wider",
|
|
26895
26912
|
children: label
|
|
26896
26913
|
}
|
|
26897
26914
|
),
|
|
@@ -26912,7 +26929,7 @@ function HealthPanel({
|
|
|
26912
26929
|
as: "span",
|
|
26913
26930
|
variant: "caption",
|
|
26914
26931
|
weight: "bold",
|
|
26915
|
-
className: "text-
|
|
26932
|
+
className: "text-info ml-1",
|
|
26916
26933
|
children: [
|
|
26917
26934
|
"+",
|
|
26918
26935
|
shield
|
|
@@ -26937,14 +26954,14 @@ function HealthPanel({
|
|
|
26937
26954
|
Box,
|
|
26938
26955
|
{
|
|
26939
26956
|
className: cn(
|
|
26940
|
-
"relative overflow-hidden rounded-
|
|
26957
|
+
"relative overflow-hidden rounded-container bg-muted",
|
|
26941
26958
|
size === "sm" ? "h-1" : size === "md" ? "h-1.5" : "h-2",
|
|
26942
26959
|
"w-full"
|
|
26943
26960
|
),
|
|
26944
26961
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
26945
26962
|
Box,
|
|
26946
26963
|
{
|
|
26947
|
-
className: "absolute inset-y-0 left-0 rounded-
|
|
26964
|
+
className: "absolute inset-y-0 left-0 rounded-container bg-info transition-all duration-300",
|
|
26948
26965
|
style: { width: `${Math.min(100, shield / max * 100)}%` }
|
|
26949
26966
|
}
|
|
26950
26967
|
)
|
|
@@ -27003,7 +27020,7 @@ function ScoreBoard({
|
|
|
27003
27020
|
Card,
|
|
27004
27021
|
{
|
|
27005
27022
|
className: cn(
|
|
27006
|
-
"bg-[var(--color-card)]/90 border-
|
|
27023
|
+
"bg-[var(--color-card)]/90 border-border backdrop-blur-sm",
|
|
27007
27024
|
className
|
|
27008
27025
|
),
|
|
27009
27026
|
children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex items-center gap-3 flex-wrap", children: [
|
|
@@ -27120,7 +27137,7 @@ function TurnPanel({
|
|
|
27120
27137
|
Box,
|
|
27121
27138
|
{
|
|
27122
27139
|
className: cn(
|
|
27123
|
-
"flex items-center gap-3 rounded-
|
|
27140
|
+
"flex items-center gap-3 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-2",
|
|
27124
27141
|
className
|
|
27125
27142
|
),
|
|
27126
27143
|
children: [
|
|
@@ -27172,7 +27189,7 @@ function EnemyPlate({
|
|
|
27172
27189
|
Box,
|
|
27173
27190
|
{
|
|
27174
27191
|
className: cn(
|
|
27175
|
-
"inline-flex flex-col gap-1 rounded-
|
|
27192
|
+
"inline-flex flex-col gap-1 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-1.5",
|
|
27176
27193
|
"min-w-[120px]",
|
|
27177
27194
|
className
|
|
27178
27195
|
),
|
|
@@ -27266,7 +27283,7 @@ function UnitCommandBar({
|
|
|
27266
27283
|
Box,
|
|
27267
27284
|
{
|
|
27268
27285
|
className: cn(
|
|
27269
|
-
"flex items-center gap-1.5 rounded-
|
|
27286
|
+
"flex items-center gap-1.5 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-2 py-1.5",
|
|
27270
27287
|
className
|
|
27271
27288
|
),
|
|
27272
27289
|
children: commands.map((command, i) => /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex flex-col items-center gap-0.5", children: [
|
|
@@ -27351,8 +27368,8 @@ function GameHud({
|
|
|
27351
27368
|
className: cn(
|
|
27352
27369
|
"relative z-10",
|
|
27353
27370
|
positionMap[position],
|
|
27354
|
-
transparent && "bg-gradient-to-b from-
|
|
27355
|
-
position === "bottom" && "bg-gradient-to-t from-
|
|
27371
|
+
transparent && "bg-gradient-to-b from-background/50 to-transparent",
|
|
27372
|
+
position === "bottom" && "bg-gradient-to-t from-background/50 to-transparent",
|
|
27356
27373
|
className
|
|
27357
27374
|
),
|
|
27358
27375
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsx(StatBadge, { ...stat, size }, i)) })
|
|
@@ -27510,8 +27527,8 @@ function DialogueBox({
|
|
|
27510
27527
|
tabIndex: 0,
|
|
27511
27528
|
role: "dialog",
|
|
27512
27529
|
"aria-label": "Dialogue",
|
|
27513
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 my-4 bg-[var(--color-card)] bg-opacity-95 border-2 border-
|
|
27514
|
-
dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-
|
|
27530
|
+
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 my-4 bg-[var(--color-card)] bg-opacity-95 border-2 border-border rounded-container overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex", children: [
|
|
27531
|
+
dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
27515
27532
|
"img",
|
|
27516
27533
|
{
|
|
27517
27534
|
src: dialogue.portrait,
|
|
@@ -27521,7 +27538,7 @@ function DialogueBox({
|
|
|
27521
27538
|
}
|
|
27522
27539
|
) }),
|
|
27523
27540
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 p-4", children: [
|
|
27524
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
27541
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-warning font-bold mb-2", children: dialogue.speaker }),
|
|
27525
27542
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-lg leading-relaxed min-h-[60px]", children: [
|
|
27526
27543
|
displayedText,
|
|
27527
27544
|
isTyping && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children: "\u258C" })
|
|
@@ -27531,9 +27548,9 @@ function DialogueBox({
|
|
|
27531
27548
|
{
|
|
27532
27549
|
type: "button",
|
|
27533
27550
|
className: cn(
|
|
27534
|
-
"block w-full text-left px-4 py-2 rounded transition-colors",
|
|
27535
|
-
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-
|
|
27536
|
-
selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-
|
|
27551
|
+
"block w-full text-left px-4 py-2 rounded-interactive transition-colors",
|
|
27552
|
+
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-warning",
|
|
27553
|
+
selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-warning" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
|
|
27537
27554
|
),
|
|
27538
27555
|
onClick: (e) => {
|
|
27539
27556
|
e.stopPropagation();
|
|
@@ -27541,7 +27558,7 @@ function DialogueBox({
|
|
|
27541
27558
|
onChoice?.(choice);
|
|
27542
27559
|
},
|
|
27543
27560
|
children: [
|
|
27544
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
27561
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground mr-2", children: [
|
|
27545
27562
|
index + 1,
|
|
27546
27563
|
"."
|
|
27547
27564
|
] }),
|
|
@@ -27550,7 +27567,7 @@ function DialogueBox({
|
|
|
27550
27567
|
},
|
|
27551
27568
|
index
|
|
27552
27569
|
)) }),
|
|
27553
|
-
!isTyping && !dialogue.choices?.length && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-
|
|
27570
|
+
!isTyping && !dialogue.choices?.length && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-muted-foreground text-sm animate-pulse", children: "Press SPACE or click to continue..." })
|
|
27554
27571
|
] })
|
|
27555
27572
|
] }) })
|
|
27556
27573
|
}
|
|
@@ -27653,7 +27670,7 @@ function InventoryPanel({
|
|
|
27653
27670
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
27654
27671
|
"div",
|
|
27655
27672
|
{
|
|
27656
|
-
className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-
|
|
27673
|
+
className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-container border border-border",
|
|
27657
27674
|
style: {
|
|
27658
27675
|
gridTemplateColumns: `repeat(${safeColumns}, ${slotSize}px)`,
|
|
27659
27676
|
gridTemplateRows: `repeat(${rows}, ${slotSize}px)`
|
|
@@ -27665,8 +27682,8 @@ function InventoryPanel({
|
|
|
27665
27682
|
className: cn(
|
|
27666
27683
|
"relative flex items-center justify-center",
|
|
27667
27684
|
"bg-[var(--color-card)] border rounded transition-colors",
|
|
27668
|
-
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-
|
|
27669
|
-
selectedSlot === index ? "border-
|
|
27685
|
+
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-info",
|
|
27686
|
+
selectedSlot === index ? "border-warning bg-[var(--color-surface,#374151)]" : "border-muted"
|
|
27670
27687
|
),
|
|
27671
27688
|
style: { width: slotSize, height: slotSize },
|
|
27672
27689
|
onClick: () => handleSlotClick(index),
|
|
@@ -27685,8 +27702,8 @@ function InventoryPanel({
|
|
|
27685
27702
|
className: "w-8 h-8 object-contain",
|
|
27686
27703
|
style: { imageRendering: "pixelated" }
|
|
27687
27704
|
}
|
|
27688
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-
|
|
27689
|
-
item.quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-0 right-0 bg-
|
|
27705
|
+
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-muted rounded-interactive flex items-center justify-center text-xs text-muted-foreground", children: (item.type ?? item.name ?? "I").charAt(0).toUpperCase() }),
|
|
27706
|
+
item.quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-0 right-0 bg-background/70 text-foreground text-xs px-1 rounded-tl", children: item.quantity })
|
|
27690
27707
|
] })
|
|
27691
27708
|
},
|
|
27692
27709
|
index
|
|
@@ -27696,7 +27713,7 @@ function InventoryPanel({
|
|
|
27696
27713
|
showTooltips && hoveredItem && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
27697
27714
|
"div",
|
|
27698
27715
|
{
|
|
27699
|
-
className: "fixed z-50 bg-[var(--color-card)] border border-
|
|
27716
|
+
className: "fixed z-50 bg-[var(--color-card)] border border-border rounded-container p-2 shadow-elevation-card pointer-events-none",
|
|
27700
27717
|
style: {
|
|
27701
27718
|
left: tooltipPosition.x,
|
|
27702
27719
|
top: tooltipPosition.y,
|
|
@@ -27704,8 +27721,8 @@ function InventoryPanel({
|
|
|
27704
27721
|
},
|
|
27705
27722
|
children: [
|
|
27706
27723
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-[var(--color-foreground)]", children: hoveredItem.name || hoveredItem.type }),
|
|
27707
|
-
hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-
|
|
27708
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-
|
|
27724
|
+
hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground mt-1", children: hoveredItem.description }),
|
|
27725
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground mt-1", children: [
|
|
27709
27726
|
"Quantity: ",
|
|
27710
27727
|
hoveredItem.quantity
|
|
27711
27728
|
] })
|
|
@@ -27783,7 +27800,7 @@ function GameMenu({
|
|
|
27783
27800
|
children: title
|
|
27784
27801
|
}
|
|
27785
27802
|
),
|
|
27786
|
-
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-
|
|
27803
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
|
|
27787
27804
|
] }),
|
|
27788
27805
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
27789
27806
|
"button",
|
|
@@ -27791,10 +27808,10 @@ function GameMenu({
|
|
|
27791
27808
|
onClick: () => handleOptionClick(option),
|
|
27792
27809
|
disabled: option.disabled,
|
|
27793
27810
|
className: cn(
|
|
27794
|
-
"w-full py-4 px-8 rounded-
|
|
27811
|
+
"w-full py-4 px-8 rounded-container border-2 font-bold text-lg",
|
|
27795
27812
|
"transition-all duration-200 transform",
|
|
27796
27813
|
"hover:scale-105 active:scale-95",
|
|
27797
|
-
"focus:outline-none focus:ring-4 focus:ring-
|
|
27814
|
+
"focus:outline-none focus:ring-4 focus:ring-foreground/25",
|
|
27798
27815
|
variantMap3[option.variant ?? "secondary"] ?? variantMap3.secondary,
|
|
27799
27816
|
option.disabled && "opacity-50 cursor-not-allowed hover:scale-100"
|
|
27800
27817
|
),
|
|
@@ -27806,8 +27823,8 @@ function GameMenu({
|
|
|
27806
27823
|
index
|
|
27807
27824
|
)) }),
|
|
27808
27825
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none overflow-hidden", children: [
|
|
27809
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-
|
|
27810
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-
|
|
27826
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
|
|
27827
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
|
|
27811
27828
|
] })
|
|
27812
27829
|
]
|
|
27813
27830
|
}
|
|
@@ -27820,9 +27837,9 @@ var init_GameMenu = __esm({
|
|
|
27820
27837
|
init_cn();
|
|
27821
27838
|
init_useEventBus();
|
|
27822
27839
|
variantMap3 = {
|
|
27823
|
-
primary: "bg-[var(--color-primary)] hover:bg-
|
|
27824
|
-
secondary: "bg-[var(--color-surface,#374151)] hover:bg-
|
|
27825
|
-
ghost: "bg-transparent hover:bg-
|
|
27840
|
+
primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info shadow-lg shadow-info/25",
|
|
27841
|
+
secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
|
|
27842
|
+
ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
|
|
27826
27843
|
};
|
|
27827
27844
|
GameMenu.displayName = "GameMenu";
|
|
27828
27845
|
}
|
|
@@ -27890,13 +27907,13 @@ function GameOverScreen({
|
|
|
27890
27907
|
children: title
|
|
27891
27908
|
}
|
|
27892
27909
|
),
|
|
27893
|
-
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-
|
|
27894
|
-
isNewHighScore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 px-6 py-2 bg-
|
|
27910
|
+
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-muted-foreground mb-8 text-center max-w-md", children: message }),
|
|
27911
|
+
isNewHighScore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 px-6 py-2 bg-warning/20 border-2 border-warning rounded-container animate-pulse", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-warning font-bold text-lg tracking-wide", children: "\u{1F3C6} NEW HIGH SCORE! \u{1F3C6}" }) }),
|
|
27895
27912
|
stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
27896
27913
|
"div",
|
|
27897
27914
|
{
|
|
27898
27915
|
className: cn(
|
|
27899
|
-
"mb-8 p-6 rounded-
|
|
27916
|
+
"mb-8 p-6 rounded-container border-2 bg-background/30",
|
|
27900
27917
|
colors.accent
|
|
27901
27918
|
),
|
|
27902
27919
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: stats.map((stat, index) => {
|
|
@@ -27905,7 +27922,7 @@ function GameOverScreen({
|
|
|
27905
27922
|
displayValue = formatTime3(displayValue);
|
|
27906
27923
|
}
|
|
27907
27924
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
27908
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
27925
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-sm mb-1", children: stat.label }),
|
|
27909
27926
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-2xl font-bold flex items-center justify-center gap-2", children: [
|
|
27910
27927
|
stat.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.icon }),
|
|
27911
27928
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: displayValue })
|
|
@@ -27919,10 +27936,10 @@ function GameOverScreen({
|
|
|
27919
27936
|
{
|
|
27920
27937
|
onClick: () => handleActionClick(action),
|
|
27921
27938
|
className: cn(
|
|
27922
|
-
"px-8 py-4 rounded-
|
|
27939
|
+
"px-8 py-4 rounded-container border-2 font-bold text-lg",
|
|
27923
27940
|
"transition-all duration-200",
|
|
27924
27941
|
"hover:scale-105 active:scale-95",
|
|
27925
|
-
"focus:outline-none focus:ring-4 focus:ring-
|
|
27942
|
+
"focus:outline-none focus:ring-4 focus:ring-foreground/25",
|
|
27926
27943
|
buttonVariants[action.variant ?? "secondary"]
|
|
27927
27944
|
),
|
|
27928
27945
|
children: action.label
|
|
@@ -27941,25 +27958,25 @@ var init_GameOverScreen = __esm({
|
|
|
27941
27958
|
init_useEventBus();
|
|
27942
27959
|
variantColors = {
|
|
27943
27960
|
victory: {
|
|
27944
|
-
bg: "from-
|
|
27945
|
-
title: "text-
|
|
27946
|
-
accent: "border-
|
|
27961
|
+
bg: "from-success/90 to-success/90",
|
|
27962
|
+
title: "text-success",
|
|
27963
|
+
accent: "border-success"
|
|
27947
27964
|
},
|
|
27948
27965
|
defeat: {
|
|
27949
|
-
bg: "from-
|
|
27950
|
-
title: "text-
|
|
27951
|
-
accent: "border-
|
|
27966
|
+
bg: "from-error/90 to-background/90",
|
|
27967
|
+
title: "text-error",
|
|
27968
|
+
accent: "border-error"
|
|
27952
27969
|
},
|
|
27953
27970
|
neutral: {
|
|
27954
|
-
bg: "from-
|
|
27955
|
-
title: "text-
|
|
27956
|
-
accent: "border-
|
|
27971
|
+
bg: "from-muted/90 to-background/90",
|
|
27972
|
+
title: "text-foreground",
|
|
27973
|
+
accent: "border-muted"
|
|
27957
27974
|
}
|
|
27958
27975
|
};
|
|
27959
27976
|
buttonVariants = {
|
|
27960
|
-
primary: "bg-[var(--color-primary)] hover:bg-
|
|
27961
|
-
secondary: "bg-[var(--color-surface,#374151)] hover:bg-
|
|
27962
|
-
ghost: "bg-transparent hover:bg-
|
|
27977
|
+
primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info",
|
|
27978
|
+
secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
|
|
27979
|
+
ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
|
|
27963
27980
|
};
|
|
27964
27981
|
GameOverScreen.displayName = "GameOverScreen";
|
|
27965
27982
|
}
|
|
@@ -28193,7 +28210,7 @@ function PlatformerCanvas({
|
|
|
28193
28210
|
{
|
|
28194
28211
|
ref: canvasRef,
|
|
28195
28212
|
style: { width: canvasWidth, height: canvasHeight },
|
|
28196
|
-
className: cn("block rounded-
|
|
28213
|
+
className: cn("block rounded-container border border-border/10", className),
|
|
28197
28214
|
"data-testid": "platformer-canvas",
|
|
28198
28215
|
tabIndex: 0
|
|
28199
28216
|
}
|
|
@@ -35736,7 +35753,7 @@ function DebuggerBoard({
|
|
|
35736
35753
|
backgroundPosition: "center"
|
|
35737
35754
|
},
|
|
35738
35755
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
35739
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
35756
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
35740
35757
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
35741
35758
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
35742
35759
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "sm" }),
|
|
@@ -35749,11 +35766,11 @@ function DebuggerBoard({
|
|
|
35749
35766
|
const isFlagged = flaggedLines.has(line.id);
|
|
35750
35767
|
let lineStyle = "";
|
|
35751
35768
|
if (submitted) {
|
|
35752
|
-
if (line.isBug && isFlagged) lineStyle = "bg-
|
|
35753
|
-
else if (line.isBug && !isFlagged) lineStyle = "bg-
|
|
35754
|
-
else if (!line.isBug && isFlagged) lineStyle = "bg-
|
|
35769
|
+
if (line.isBug && isFlagged) lineStyle = "bg-success/10";
|
|
35770
|
+
else if (line.isBug && !isFlagged) lineStyle = "bg-warning/10";
|
|
35771
|
+
else if (!line.isBug && isFlagged) lineStyle = "bg-error/10";
|
|
35755
35772
|
} else if (isFlagged) {
|
|
35756
|
-
lineStyle = "bg-
|
|
35773
|
+
lineStyle = "bg-error/10";
|
|
35757
35774
|
}
|
|
35758
35775
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
35759
35776
|
HStack,
|
|
@@ -35766,8 +35783,8 @@ function DebuggerBoard({
|
|
|
35766
35783
|
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-10 flex-shrink-0 flex items-center justify-center border-r border-border text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: i + 1 }) }),
|
|
35767
35784
|
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1 px-3 py-1.5 font-mono text-sm whitespace-pre", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "font-mono text-sm", children: line.content }) }),
|
|
35768
35785
|
/* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "w-8 flex-shrink-0 flex items-center justify-center", children: [
|
|
35769
|
-
isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-
|
|
35770
|
-
submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-
|
|
35786
|
+
isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-error" }),
|
|
35787
|
+
submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-warning" })
|
|
35771
35788
|
] })
|
|
35772
35789
|
]
|
|
35773
35790
|
},
|
|
@@ -35782,7 +35799,7 @@ function DebuggerBoard({
|
|
|
35782
35799
|
{
|
|
35783
35800
|
icon: flaggedLines.has(line.id) ? LucideIcons2.CheckCircle : LucideIcons2.XCircle,
|
|
35784
35801
|
size: "xs",
|
|
35785
|
-
className: flaggedLines.has(line.id) ? "text-
|
|
35802
|
+
className: flaggedLines.has(line.id) ? "text-success mt-0.5" : "text-warning mt-0.5"
|
|
35786
35803
|
}
|
|
35787
35804
|
),
|
|
35788
35805
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", children: [
|
|
@@ -35791,7 +35808,7 @@ function DebuggerBoard({
|
|
|
35791
35808
|
] })
|
|
35792
35809
|
] }, line.id))
|
|
35793
35810
|
] }) }),
|
|
35794
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
35811
|
+
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
|
|
35795
35812
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
35796
35813
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: flaggedLines.size === 0, children: [
|
|
35797
35814
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
|
|
@@ -36514,7 +36531,7 @@ function LinearView({
|
|
|
36514
36531
|
className
|
|
36515
36532
|
}) {
|
|
36516
36533
|
const currentIdx = trait.states.indexOf(trait.currentState);
|
|
36517
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
36534
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
36518
36535
|
trait.description && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: trait.description }),
|
|
36519
36536
|
/* @__PURE__ */ jsxRuntime.jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
36520
36537
|
const isDone = i < currentIdx;
|
|
@@ -36536,10 +36553,10 @@ function LinearView({
|
|
|
36536
36553
|
{
|
|
36537
36554
|
display: "inline-flex",
|
|
36538
36555
|
className: cn(
|
|
36539
|
-
"items-center justify-center rounded-
|
|
36556
|
+
"items-center justify-center rounded-pill px-3 py-1 border-2 transition-all",
|
|
36540
36557
|
SIZE_CONFIG2[size || "md"].fontSize,
|
|
36541
36558
|
isDone && "bg-success/20 border-success text-success",
|
|
36542
|
-
isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-
|
|
36559
|
+
isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-elevation-card shadow-primary/20",
|
|
36543
36560
|
!isDone && !isCurrent && "bg-muted border-border text-muted-foreground"
|
|
36544
36561
|
),
|
|
36545
36562
|
children: [
|
|
@@ -36561,7 +36578,7 @@ function CompactView({
|
|
|
36561
36578
|
const { t } = useTranslate();
|
|
36562
36579
|
const config = SIZE_CONFIG2[size || "md"];
|
|
36563
36580
|
const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
|
|
36564
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
36581
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
36565
36582
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
|
|
36566
36583
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
|
|
36567
36584
|
/* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
|
|
@@ -36597,7 +36614,7 @@ function FullView({
|
|
|
36597
36614
|
const { t } = useTranslate();
|
|
36598
36615
|
const config = SIZE_CONFIG2[size || "md"];
|
|
36599
36616
|
const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
|
|
36600
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
36617
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
36601
36618
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
|
|
36602
36619
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
|
|
36603
36620
|
/* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
|
|
@@ -36611,9 +36628,9 @@ function FullView({
|
|
|
36611
36628
|
{
|
|
36612
36629
|
display: "flex",
|
|
36613
36630
|
className: cn(
|
|
36614
|
-
"items-center justify-center rounded-
|
|
36631
|
+
"items-center justify-center rounded-container border-2 transition-all px-2",
|
|
36615
36632
|
config.nodeSize,
|
|
36616
|
-
isCurrent && "bg-primary/20 border-primary shadow-
|
|
36633
|
+
isCurrent && "bg-primary/20 border-primary shadow-elevation-card shadow-primary/20",
|
|
36617
36634
|
!isCurrent && hasOutgoing && "bg-muted border-border hover:border-muted-foreground",
|
|
36618
36635
|
!isCurrent && !hasOutgoing && "bg-background border-border opacity-60",
|
|
36619
36636
|
onStateClick && "cursor-pointer"
|
|
@@ -37043,7 +37060,7 @@ function EventHandlerBoard({
|
|
|
37043
37060
|
backgroundPosition: "center"
|
|
37044
37061
|
},
|
|
37045
37062
|
children: [
|
|
37046
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
37063
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
37047
37064
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
37048
37065
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
37049
37066
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
|
|
@@ -37058,7 +37075,7 @@ function EventHandlerBoard({
|
|
|
37058
37075
|
Box,
|
|
37059
37076
|
{
|
|
37060
37077
|
className: cn(
|
|
37061
|
-
"p-3 rounded-
|
|
37078
|
+
"p-3 rounded-container border-2 cursor-pointer transition-all hover:scale-105",
|
|
37062
37079
|
selectedObjectId === obj.id ? "border-primary bg-primary/10" : "border-border bg-card hover:border-muted-foreground"
|
|
37063
37080
|
),
|
|
37064
37081
|
onClick: () => setSelectedObjectId(obj.id),
|
|
@@ -37080,10 +37097,10 @@ function EventHandlerBoard({
|
|
|
37080
37097
|
}
|
|
37081
37098
|
),
|
|
37082
37099
|
eventLog.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(EventLog, { entries: eventLog }),
|
|
37083
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
37100
|
+
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("eventHandler.chainComplete") }) }),
|
|
37084
37101
|
playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
37085
|
-
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
37086
|
-
showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
37102
|
+
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body1", className: "text-foreground font-medium", children: t(encourageKey) }) }),
|
|
37103
|
+
showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
|
|
37087
37104
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
37088
37105
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
37089
37106
|
] }) })
|
|
@@ -40256,7 +40273,7 @@ function NegotiatorBoard({
|
|
|
40256
40273
|
backgroundPosition: "center"
|
|
40257
40274
|
},
|
|
40258
40275
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
40259
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
40276
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
40260
40277
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
40261
40278
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
40262
40279
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description }),
|
|
@@ -40302,7 +40319,7 @@ function NegotiatorBoard({
|
|
|
40302
40319
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: "vs" }),
|
|
40303
40320
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: getActionLabel(round.opponentAction) }),
|
|
40304
40321
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.ArrowRight, size: "xs" }),
|
|
40305
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-
|
|
40322
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-success", children: [
|
|
40306
40323
|
"+",
|
|
40307
40324
|
round.playerPayoff
|
|
40308
40325
|
] }),
|
|
@@ -40313,7 +40330,7 @@ function NegotiatorBoard({
|
|
|
40313
40330
|
] }, round.round))
|
|
40314
40331
|
] }) }),
|
|
40315
40332
|
isComplete && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
40316
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-
|
|
40333
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-success" : "text-error" }),
|
|
40317
40334
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: won ? entity.successMessage ?? t("negotiator.success") : entity.failMessage ?? t("negotiator.failed") }),
|
|
40318
40335
|
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
40319
40336
|
t("negotiator.finalScore"),
|
|
@@ -40323,7 +40340,7 @@ function NegotiatorBoard({
|
|
|
40323
40340
|
entity.targetScore
|
|
40324
40341
|
] })
|
|
40325
40342
|
] }) }),
|
|
40326
|
-
showHint && entity.hint && !won && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
40343
|
+
showHint && entity.hint && !won && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
|
|
40327
40344
|
isComplete && !won && /* @__PURE__ */ jsxRuntime.jsx(HStack, { justify: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: handleReset, children: t("negotiator.playAgain") }) })
|
|
40328
40345
|
] })
|
|
40329
40346
|
}
|
|
@@ -42908,7 +42925,7 @@ function TraitSlot({
|
|
|
42908
42925
|
display: "flex",
|
|
42909
42926
|
position: "relative",
|
|
42910
42927
|
className: cn(
|
|
42911
|
-
"items-center justify-center rounded-
|
|
42928
|
+
"items-center justify-center rounded-container transition-all duration-200 bg-card/50",
|
|
42912
42929
|
!locked && "cursor-pointer",
|
|
42913
42930
|
locked && "cursor-not-allowed opacity-50",
|
|
42914
42931
|
isEmpty && !locked && "border-2 border-dashed border-border hover:border-muted-foreground",
|
|
@@ -42924,7 +42941,7 @@ function TraitSlot({
|
|
|
42924
42941
|
style: {
|
|
42925
42942
|
width: config.box,
|
|
42926
42943
|
height: config.box,
|
|
42927
|
-
backgroundColor: catColor?.bg ||
|
|
42944
|
+
backgroundColor: catColor?.bg || void 0,
|
|
42928
42945
|
borderColor: isDragOver ? void 0 : feedback === "correct" ? "var(--color-success)" : feedback === "wrong" ? "var(--color-error)" : catColor?.border || void 0
|
|
42929
42946
|
},
|
|
42930
42947
|
onClick: handleClick,
|
|
@@ -42953,7 +42970,7 @@ function TraitSlot({
|
|
|
42953
42970
|
Box,
|
|
42954
42971
|
{
|
|
42955
42972
|
position: "absolute",
|
|
42956
|
-
className: "-top-1.5 -right-1.5 w-4 h-4 bg-error rounded-
|
|
42973
|
+
className: "-top-1.5 -right-1.5 w-4 h-4 bg-error rounded-pill flex items-center justify-center cursor-pointer hover:bg-error/80 transition-colors",
|
|
42957
42974
|
onClick: handleRemove,
|
|
42958
42975
|
children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground text-xs leading-none", children: "\xD7" })
|
|
42959
42976
|
}
|
|
@@ -42963,14 +42980,14 @@ function TraitSlot({
|
|
|
42963
42980
|
Box,
|
|
42964
42981
|
{
|
|
42965
42982
|
position: "absolute",
|
|
42966
|
-
className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-
|
|
42983
|
+
className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-pill flex items-center justify-center border border-border",
|
|
42967
42984
|
children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground text-xs", children: slotNumber })
|
|
42968
42985
|
}
|
|
42969
42986
|
),
|
|
42970
42987
|
showTooltip && isHovered && itemMachine && !isEmpty && equippedItem && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
42971
42988
|
Box,
|
|
42972
42989
|
{
|
|
42973
|
-
className: "p-3 bg-background border border-border rounded-
|
|
42990
|
+
className: "p-3 bg-background border border-border rounded-container shadow-xl",
|
|
42974
42991
|
style: {
|
|
42975
42992
|
...getTooltipStyle(),
|
|
42976
42993
|
minWidth: 200,
|
|
@@ -43220,12 +43237,12 @@ function SequencerBoard({
|
|
|
43220
43237
|
backgroundPosition: "center"
|
|
43221
43238
|
},
|
|
43222
43239
|
children: [
|
|
43223
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
43240
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
43224
43241
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
43225
43242
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
43226
43243
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description })
|
|
43227
43244
|
] }),
|
|
43228
|
-
showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
43245
|
+
showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
|
|
43229
43246
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
43230
43247
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
43231
43248
|
] }) }),
|
|
@@ -43263,8 +43280,8 @@ function SequencerBoard({
|
|
|
43263
43280
|
label: t("sequencer.dragActions")
|
|
43264
43281
|
}
|
|
43265
43282
|
),
|
|
43266
|
-
hasFeedback && playState === "idle" && attempts > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
43267
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
43283
|
+
hasFeedback && playState === "idle" && attempts > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: t(encourageKey) }) }),
|
|
43284
|
+
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("sequencer.levelComplete") }) }),
|
|
43268
43285
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", children: [
|
|
43269
43286
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
43270
43287
|
Button,
|
|
@@ -43940,7 +43957,7 @@ function SimulationCanvas({
|
|
|
43940
43957
|
ref: canvasRef,
|
|
43941
43958
|
width,
|
|
43942
43959
|
height,
|
|
43943
|
-
className: "rounded-
|
|
43960
|
+
className: "rounded-container block max-w-full h-auto"
|
|
43944
43961
|
}
|
|
43945
43962
|
) });
|
|
43946
43963
|
}
|
|
@@ -44148,7 +44165,7 @@ function SimulatorBoard({
|
|
|
44148
44165
|
backgroundPosition: "center"
|
|
44149
44166
|
},
|
|
44150
44167
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
44151
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
44168
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
44152
44169
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
44153
44170
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
44154
44171
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -44199,8 +44216,8 @@ function SimulatorBoard({
|
|
|
44199
44216
|
entity.outputUnit
|
|
44200
44217
|
] }),
|
|
44201
44218
|
submitted && /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
44202
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-
|
|
44203
|
-
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-
|
|
44219
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-success" : "text-error" }),
|
|
44220
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-success" : "text-error", children: isCorrect ? entity.successMessage ?? t("simulator.correct") : entity.failMessage ?? t("simulator.incorrect") })
|
|
44204
44221
|
] }),
|
|
44205
44222
|
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
44206
44223
|
t("simulator.target"),
|
|
@@ -44213,7 +44230,7 @@ function SimulatorBoard({
|
|
|
44213
44230
|
")"
|
|
44214
44231
|
] })
|
|
44215
44232
|
] }) }),
|
|
44216
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
44233
|
+
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.hint }) }),
|
|
44217
44234
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
44218
44235
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, children: [
|
|
44219
44236
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Play, size: "sm" }),
|
|
@@ -44614,7 +44631,7 @@ function StateNode2({
|
|
|
44614
44631
|
position: "absolute",
|
|
44615
44632
|
display: "flex",
|
|
44616
44633
|
className: cn(
|
|
44617
|
-
"items-center justify-center rounded-
|
|
44634
|
+
"items-center justify-center rounded-pill border-3 transition-all cursor-pointer select-none",
|
|
44618
44635
|
"min-w-[80px] h-[80px] px-3",
|
|
44619
44636
|
isCurrent && "bg-primary/20 border-primary shadow-lg shadow-primary/30 scale-110",
|
|
44620
44637
|
isSelected && !isCurrent && "bg-accent/20 border-accent ring-2 ring-accent/50",
|
|
@@ -44927,7 +44944,7 @@ function StateArchitectBoard({
|
|
|
44927
44944
|
backgroundPosition: "center"
|
|
44928
44945
|
},
|
|
44929
44946
|
children: [
|
|
44930
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
44947
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-container", children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: entity.headerImage, alt: "", onError: () => setHeaderError(true), className: "w-full h-full object-cover" }) }) : entity.headerImage && headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
44931
44948
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
44932
44949
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
44933
44950
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
|
|
@@ -44946,7 +44963,7 @@ function StateArchitectBoard({
|
|
|
44946
44963
|
Box,
|
|
44947
44964
|
{
|
|
44948
44965
|
position: "relative",
|
|
44949
|
-
className: "rounded-
|
|
44966
|
+
className: "rounded-container border border-border bg-background overflow-hidden",
|
|
44950
44967
|
style: { width: GRAPH_W, height: GRAPH_H },
|
|
44951
44968
|
children: [
|
|
44952
44969
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -45005,7 +45022,7 @@ function StateArchitectBoard({
|
|
|
45005
45022
|
children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
|
|
45006
45023
|
}
|
|
45007
45024
|
) }),
|
|
45008
|
-
transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-
|
|
45025
|
+
transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-container bg-muted/50 border border-border", children: [
|
|
45009
45026
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
|
|
45010
45027
|
transitions.map((t2) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
45011
45028
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
|
|
@@ -45039,7 +45056,7 @@ function StateArchitectBoard({
|
|
|
45039
45056
|
variables
|
|
45040
45057
|
}
|
|
45041
45058
|
),
|
|
45042
|
-
testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-
|
|
45059
|
+
testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-container bg-card border border-border", gap: "xs", children: [
|
|
45043
45060
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground font-medium", children: t("stateArchitect.testResults") + ":" }),
|
|
45044
45061
|
testResults.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
45045
45062
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: r.passed ? "text-success" : "text-error", children: r.passed ? "\u2714" : "\u2717" }),
|
|
@@ -45050,10 +45067,10 @@ function StateArchitectBoard({
|
|
|
45050
45067
|
entity.showCodeView !== false && /* @__PURE__ */ jsxRuntime.jsx(CodeView, { data: codeData, label: "View Code" })
|
|
45051
45068
|
] })
|
|
45052
45069
|
] }),
|
|
45053
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
45070
|
+
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("stateArchitect.allPassed") }) }),
|
|
45054
45071
|
playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
45055
|
-
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
45056
|
-
attempts >= 3 && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
45072
|
+
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body1", className: "text-foreground font-medium", children: t(ENCOURAGEMENT_KEYS3[Math.min(attempts - 1, ENCOURAGEMENT_KEYS3.length - 1)] ?? ENCOURAGEMENT_KEYS3[0]) }) }),
|
|
45073
|
+
attempts >= 3 && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-start", gap: "xs", children: [
|
|
45057
45074
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
45058
45075
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
45059
45076
|
] }) })
|