@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/runtime/index.cjs
CHANGED
|
@@ -7145,7 +7145,7 @@ function HealthBar({
|
|
|
7145
7145
|
"div",
|
|
7146
7146
|
{
|
|
7147
7147
|
className: cn(
|
|
7148
|
-
"relative overflow-hidden rounded-full bg-
|
|
7148
|
+
"relative overflow-hidden rounded-full bg-muted",
|
|
7149
7149
|
sizes.bar,
|
|
7150
7150
|
"w-24",
|
|
7151
7151
|
className
|
|
@@ -7155,7 +7155,7 @@ function HealthBar({
|
|
|
7155
7155
|
{
|
|
7156
7156
|
className: cn(
|
|
7157
7157
|
"absolute inset-y-0 left-0 rounded-full",
|
|
7158
|
-
percentage > 66 ? "bg-
|
|
7158
|
+
percentage > 66 ? "bg-success" : percentage > 33 ? "bg-warning" : "bg-error",
|
|
7159
7159
|
animated && "transition-all duration-300"
|
|
7160
7160
|
),
|
|
7161
7161
|
style: { width: `${percentage}%` }
|
|
@@ -7177,7 +7177,7 @@ var init_HealthBar = __esm({
|
|
|
7177
7177
|
heartIcon = (filled, size) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
7178
7178
|
"svg",
|
|
7179
7179
|
{
|
|
7180
|
-
className: cn("transition-all duration-200", size, filled ? "text-
|
|
7180
|
+
className: cn("transition-all duration-200", size, filled ? "text-error" : "text-muted-foreground"),
|
|
7181
7181
|
viewBox: "0 0 24 24",
|
|
7182
7182
|
fill: filled ? "currentColor" : "none",
|
|
7183
7183
|
stroke: "currentColor",
|
|
@@ -7241,7 +7241,7 @@ function ScoreDisplay({
|
|
|
7241
7241
|
),
|
|
7242
7242
|
children: [
|
|
7243
7243
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
|
|
7244
|
-
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7244
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
|
|
7245
7245
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: formattedValue })
|
|
7246
7246
|
]
|
|
7247
7247
|
}
|
|
@@ -7354,8 +7354,8 @@ var init_ControlButton = __esm({
|
|
|
7354
7354
|
};
|
|
7355
7355
|
shapeMap = {
|
|
7356
7356
|
circle: "rounded-full",
|
|
7357
|
-
rounded: "rounded-
|
|
7358
|
-
square: "rounded-
|
|
7357
|
+
rounded: "rounded-interactive",
|
|
7358
|
+
square: "rounded-interactive"
|
|
7359
7359
|
};
|
|
7360
7360
|
variantMap = {
|
|
7361
7361
|
primary: "bg-primary text-primary-foreground border-primary hover:bg-primary-hover",
|
|
@@ -7523,12 +7523,12 @@ function TimerDisplay({
|
|
|
7523
7523
|
"div",
|
|
7524
7524
|
{
|
|
7525
7525
|
className: cn(
|
|
7526
|
-
"inline-flex items-center justify-center rounded-
|
|
7527
|
-
"bg-
|
|
7526
|
+
"inline-flex items-center justify-center rounded-container",
|
|
7527
|
+
"bg-card/80 border border-muted font-mono font-bold tabular-nums",
|
|
7528
7528
|
sizeMap4[size],
|
|
7529
|
-
running && "border-
|
|
7530
|
-
isLow && "text-
|
|
7531
|
-
!isLow && "text-
|
|
7529
|
+
running && "border-success/50",
|
|
7530
|
+
isLow && "text-error border-error/50 animate-pulse",
|
|
7531
|
+
!isLow && "text-foreground",
|
|
7532
7532
|
className
|
|
7533
7533
|
),
|
|
7534
7534
|
children: formatTime(seconds, format)
|
|
@@ -7561,17 +7561,17 @@ function ResourceCounter({
|
|
|
7561
7561
|
"div",
|
|
7562
7562
|
{
|
|
7563
7563
|
className: cn(
|
|
7564
|
-
"inline-flex items-center rounded-
|
|
7565
|
-
"bg-
|
|
7564
|
+
"inline-flex items-center rounded-container",
|
|
7565
|
+
"bg-card/80 border border-muted font-medium text-foreground",
|
|
7566
7566
|
sizes.wrapper,
|
|
7567
7567
|
className
|
|
7568
7568
|
),
|
|
7569
7569
|
children: [
|
|
7570
7570
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: icon }),
|
|
7571
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7571
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
|
|
7572
7572
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold tabular-nums", color), children: [
|
|
7573
7573
|
value,
|
|
7574
|
-
max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
7574
|
+
max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
7575
7575
|
"/",
|
|
7576
7576
|
max
|
|
7577
7577
|
] })
|
|
@@ -7612,18 +7612,18 @@ function ItemSlot({
|
|
|
7612
7612
|
disabled: !isClickable,
|
|
7613
7613
|
title: label,
|
|
7614
7614
|
className: cn(
|
|
7615
|
-
"relative flex items-center justify-center rounded-
|
|
7616
|
-
"bg-
|
|
7615
|
+
"relative flex items-center justify-center rounded-interactive border-2",
|
|
7616
|
+
"bg-card/80 transition-all duration-150",
|
|
7617
7617
|
sizeMap6[size],
|
|
7618
|
-
empty ? "border-
|
|
7618
|
+
empty ? "border-border bg-card/50" : rarityBorderMap[rarity],
|
|
7619
7619
|
!empty && rarityGlowMap[rarity],
|
|
7620
|
-
selected && "ring-2 ring-
|
|
7620
|
+
selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
|
|
7621
7621
|
isClickable && !empty && "hover:brightness-125 cursor-pointer",
|
|
7622
|
-
isClickable && empty && "hover:border-
|
|
7622
|
+
isClickable && empty && "hover:border-muted cursor-pointer",
|
|
7623
7623
|
!isClickable && "cursor-default",
|
|
7624
7624
|
className
|
|
7625
7625
|
),
|
|
7626
|
-
children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7626
|
+
children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7627
7627
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
|
|
7628
7628
|
quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7629
7629
|
"span",
|
|
@@ -7631,7 +7631,7 @@ function ItemSlot({
|
|
|
7631
7631
|
className: cn(
|
|
7632
7632
|
"absolute -bottom-1 -right-1 flex items-center justify-center",
|
|
7633
7633
|
"min-w-[18px] h-[18px] rounded-full px-1",
|
|
7634
|
-
"bg-
|
|
7634
|
+
"bg-surface border border-muted text-xs font-bold text-foreground"
|
|
7635
7635
|
),
|
|
7636
7636
|
children: quantity
|
|
7637
7637
|
}
|
|
@@ -7651,18 +7651,18 @@ var init_ItemSlot = __esm({
|
|
|
7651
7651
|
lg: "w-18 h-18 text-3xl"
|
|
7652
7652
|
};
|
|
7653
7653
|
rarityBorderMap = {
|
|
7654
|
-
common: "border-
|
|
7655
|
-
uncommon: "border-
|
|
7656
|
-
rare: "border-
|
|
7657
|
-
epic: "border-
|
|
7658
|
-
legendary: "border-
|
|
7654
|
+
common: "border-muted",
|
|
7655
|
+
uncommon: "border-success",
|
|
7656
|
+
rare: "border-info",
|
|
7657
|
+
epic: "border-accent",
|
|
7658
|
+
legendary: "border-warning"
|
|
7659
7659
|
};
|
|
7660
7660
|
rarityGlowMap = {
|
|
7661
7661
|
common: "",
|
|
7662
7662
|
uncommon: "",
|
|
7663
|
-
rare: "shadow-
|
|
7664
|
-
epic: "shadow-
|
|
7665
|
-
legendary: "shadow-
|
|
7663
|
+
rare: "shadow-sm",
|
|
7664
|
+
epic: "shadow-lg",
|
|
7665
|
+
legendary: "shadow-lg"
|
|
7666
7666
|
};
|
|
7667
7667
|
ItemSlot.displayName = "ItemSlot";
|
|
7668
7668
|
}
|
|
@@ -7680,8 +7680,8 @@ function TurnIndicator({
|
|
|
7680
7680
|
"div",
|
|
7681
7681
|
{
|
|
7682
7682
|
className: cn(
|
|
7683
|
-
"inline-flex items-center rounded-
|
|
7684
|
-
"bg-
|
|
7683
|
+
"inline-flex items-center rounded-container",
|
|
7684
|
+
"bg-card/80 border border-muted font-medium text-foreground",
|
|
7685
7685
|
sizes.wrapper,
|
|
7686
7686
|
className
|
|
7687
7687
|
),
|
|
@@ -7689,19 +7689,19 @@ function TurnIndicator({
|
|
|
7689
7689
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-bold tabular-nums", children: [
|
|
7690
7690
|
"Turn ",
|
|
7691
7691
|
currentTurn,
|
|
7692
|
-
maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
7692
|
+
maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
7693
7693
|
"/",
|
|
7694
7694
|
maxTurns
|
|
7695
7695
|
] })
|
|
7696
7696
|
] }),
|
|
7697
7697
|
phase && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7698
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7699
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7698
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
|
|
7699
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: phase })
|
|
7700
7700
|
] }),
|
|
7701
7701
|
activeTeam && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7702
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7703
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-
|
|
7704
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
7702
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
|
|
7703
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-success/20", sizes.dot) }),
|
|
7704
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-success", children: activeTeam })
|
|
7705
7705
|
] })
|
|
7706
7706
|
]
|
|
7707
7707
|
}
|
|
@@ -7720,10 +7720,10 @@ var init_TurnIndicator = __esm({
|
|
|
7720
7720
|
}
|
|
7721
7721
|
});
|
|
7722
7722
|
function getComboIntensity(combo) {
|
|
7723
|
-
if (combo >= 10) return "text-
|
|
7724
|
-
if (combo >= 7) return "text-
|
|
7725
|
-
if (combo >= 4) return "text-
|
|
7726
|
-
return "text-
|
|
7723
|
+
if (combo >= 10) return "text-error animate-pulse";
|
|
7724
|
+
if (combo >= 7) return "text-warning";
|
|
7725
|
+
if (combo >= 4) return "text-warning";
|
|
7726
|
+
return "text-foreground";
|
|
7727
7727
|
}
|
|
7728
7728
|
function getComboScale(combo) {
|
|
7729
7729
|
if (combo >= 10) return "scale-110";
|
|
@@ -7744,19 +7744,19 @@ function ComboCounter({
|
|
|
7744
7744
|
{
|
|
7745
7745
|
className: cn(
|
|
7746
7746
|
"inline-flex flex-col items-center justify-center",
|
|
7747
|
-
"rounded-
|
|
7747
|
+
"rounded-container bg-card/80 border border-muted px-3 py-1.5",
|
|
7748
7748
|
"transition-transform duration-200",
|
|
7749
7749
|
getComboScale(combo),
|
|
7750
7750
|
className
|
|
7751
7751
|
),
|
|
7752
7752
|
children: [
|
|
7753
7753
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-black tabular-nums leading-none", sizes.combo, getComboIntensity(combo)), children: combo }),
|
|
7754
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-
|
|
7755
|
-
multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-
|
|
7754
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-muted-foreground", sizes.label), children: "combo" }),
|
|
7755
|
+
multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-warning tabular-nums", sizes.multiplier), children: [
|
|
7756
7756
|
"x",
|
|
7757
7757
|
multiplier.toFixed(1)
|
|
7758
7758
|
] }),
|
|
7759
|
-
streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-
|
|
7759
|
+
streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.label), children: [
|
|
7760
7760
|
streak,
|
|
7761
7761
|
" streak"
|
|
7762
7762
|
] })
|
|
@@ -7792,8 +7792,8 @@ function XPBar({
|
|
|
7792
7792
|
"span",
|
|
7793
7793
|
{
|
|
7794
7794
|
className: cn(
|
|
7795
|
-
"flex-shrink-0 rounded-
|
|
7796
|
-
"bg-
|
|
7795
|
+
"flex-shrink-0 rounded-interactive font-bold",
|
|
7796
|
+
"bg-accent text-foreground border border-accent",
|
|
7797
7797
|
sizes.badge
|
|
7798
7798
|
),
|
|
7799
7799
|
children: [
|
|
@@ -7807,7 +7807,7 @@ function XPBar({
|
|
|
7807
7807
|
"div",
|
|
7808
7808
|
{
|
|
7809
7809
|
className: cn(
|
|
7810
|
-
"relative w-full overflow-hidden rounded-full bg-
|
|
7810
|
+
"relative w-full overflow-hidden rounded-full bg-muted border border-muted",
|
|
7811
7811
|
sizes.bar
|
|
7812
7812
|
),
|
|
7813
7813
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -7815,7 +7815,7 @@ function XPBar({
|
|
|
7815
7815
|
{
|
|
7816
7816
|
className: cn(
|
|
7817
7817
|
"absolute inset-y-0 left-0 rounded-full",
|
|
7818
|
-
"bg-gradient-to-r from-
|
|
7818
|
+
"bg-gradient-to-r from-accent to-info",
|
|
7819
7819
|
animated && "transition-all duration-500 ease-out"
|
|
7820
7820
|
),
|
|
7821
7821
|
style: { width: `${percentage}%` }
|
|
@@ -7823,7 +7823,7 @@ function XPBar({
|
|
|
7823
7823
|
)
|
|
7824
7824
|
}
|
|
7825
7825
|
),
|
|
7826
|
-
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-
|
|
7826
|
+
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.text), children: [
|
|
7827
7827
|
current,
|
|
7828
7828
|
" / ",
|
|
7829
7829
|
max,
|
|
@@ -7859,7 +7859,7 @@ function WaypointMarker({
|
|
|
7859
7859
|
"div",
|
|
7860
7860
|
{
|
|
7861
7861
|
className: cn(
|
|
7862
|
-
"absolute rounded-full border-2 border-
|
|
7862
|
+
"absolute rounded-full border-2 border-info animate-ping opacity-50",
|
|
7863
7863
|
sizes.ring
|
|
7864
7864
|
)
|
|
7865
7865
|
}
|
|
@@ -7868,7 +7868,7 @@ function WaypointMarker({
|
|
|
7868
7868
|
"div",
|
|
7869
7869
|
{
|
|
7870
7870
|
className: cn(
|
|
7871
|
-
"absolute rounded-full border-2 border-
|
|
7871
|
+
"absolute rounded-full border-2 border-info",
|
|
7872
7872
|
sizes.ring
|
|
7873
7873
|
)
|
|
7874
7874
|
}
|
|
@@ -7879,9 +7879,9 @@ function WaypointMarker({
|
|
|
7879
7879
|
className: cn(
|
|
7880
7880
|
"relative flex items-center justify-center rounded-full transition-all duration-200",
|
|
7881
7881
|
sizes.dot,
|
|
7882
|
-
completed && "bg-
|
|
7883
|
-
active && !completed && "bg-
|
|
7884
|
-
!active && !completed && "bg-
|
|
7882
|
+
completed && "bg-success text-foreground",
|
|
7883
|
+
active && !completed && "bg-info text-foreground",
|
|
7884
|
+
!active && !completed && "bg-muted"
|
|
7885
7885
|
),
|
|
7886
7886
|
children: completed ? checkIcon : icon
|
|
7887
7887
|
}
|
|
@@ -7893,7 +7893,7 @@ function WaypointMarker({
|
|
|
7893
7893
|
className: cn(
|
|
7894
7894
|
"text-center whitespace-nowrap",
|
|
7895
7895
|
sizes.label,
|
|
7896
|
-
completed ? "text-
|
|
7896
|
+
completed ? "text-success" : active ? "text-info" : "text-muted-foreground"
|
|
7897
7897
|
),
|
|
7898
7898
|
children: label
|
|
7899
7899
|
}
|
|
@@ -7934,7 +7934,7 @@ function StatusEffect({
|
|
|
7934
7934
|
"div",
|
|
7935
7935
|
{
|
|
7936
7936
|
className: cn(
|
|
7937
|
-
"relative flex items-center justify-center rounded border-2",
|
|
7937
|
+
"relative flex items-center justify-center rounded-interactive border-2",
|
|
7938
7938
|
sizes.container,
|
|
7939
7939
|
variantStyles7[variant]
|
|
7940
7940
|
),
|
|
@@ -7945,7 +7945,7 @@ function StatusEffect({
|
|
|
7945
7945
|
"span",
|
|
7946
7946
|
{
|
|
7947
7947
|
className: cn(
|
|
7948
|
-
"absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-
|
|
7948
|
+
"absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-foreground bg-background/60 leading-tight",
|
|
7949
7949
|
sizes.timer
|
|
7950
7950
|
),
|
|
7951
7951
|
children: formatDuration(duration)
|
|
@@ -7958,7 +7958,7 @@ function StatusEffect({
|
|
|
7958
7958
|
"span",
|
|
7959
7959
|
{
|
|
7960
7960
|
className: cn(
|
|
7961
|
-
"absolute flex items-center justify-center rounded-full bg-
|
|
7961
|
+
"absolute flex items-center justify-center rounded-full bg-card text-foreground font-bold leading-none",
|
|
7962
7962
|
sizes.badge
|
|
7963
7963
|
),
|
|
7964
7964
|
children: stacks
|
|
@@ -7977,9 +7977,9 @@ var init_StatusEffect = __esm({
|
|
|
7977
7977
|
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" }
|
|
7978
7978
|
};
|
|
7979
7979
|
variantStyles7 = {
|
|
7980
|
-
buff: "border-
|
|
7981
|
-
debuff: "border-
|
|
7982
|
-
neutral: "border-
|
|
7980
|
+
buff: "border-success bg-success/20",
|
|
7981
|
+
debuff: "border-error bg-error/20",
|
|
7982
|
+
neutral: "border-muted bg-muted/20"
|
|
7983
7983
|
};
|
|
7984
7984
|
StatusEffect.displayName = "StatusEffect";
|
|
7985
7985
|
}
|
|
@@ -8018,10 +8018,10 @@ var init_DamageNumber = __esm({
|
|
|
8018
8018
|
lg: "text-2xl"
|
|
8019
8019
|
};
|
|
8020
8020
|
typeStyles = {
|
|
8021
|
-
damage: "text-
|
|
8022
|
-
heal: "text-
|
|
8023
|
-
crit: "text-
|
|
8024
|
-
miss: "text-
|
|
8021
|
+
damage: "text-error font-bold",
|
|
8022
|
+
heal: "text-success font-bold",
|
|
8023
|
+
crit: "text-warning font-extrabold",
|
|
8024
|
+
miss: "text-muted-foreground italic"
|
|
8025
8025
|
};
|
|
8026
8026
|
floatKeyframes = `
|
|
8027
8027
|
@keyframes damageFloat {
|
|
@@ -8044,12 +8044,12 @@ function DialogueBubble({
|
|
|
8044
8044
|
"div",
|
|
8045
8045
|
{
|
|
8046
8046
|
className: cn(
|
|
8047
|
-
"flex items-start gap-3 rounded-
|
|
8047
|
+
"flex items-start gap-3 rounded-container bg-background/80 backdrop-blur-sm px-4 py-3 border border-border/10",
|
|
8048
8048
|
position === "top" ? "rounded-bl-none" : "rounded-tl-none",
|
|
8049
8049
|
className
|
|
8050
8050
|
),
|
|
8051
8051
|
children: [
|
|
8052
|
-
portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full overflow-hidden border-2 border-
|
|
8052
|
+
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(
|
|
8053
8053
|
"img",
|
|
8054
8054
|
{
|
|
8055
8055
|
src: portrait,
|
|
@@ -8058,8 +8058,8 @@ function DialogueBubble({
|
|
|
8058
8058
|
}
|
|
8059
8059
|
) }),
|
|
8060
8060
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 min-w-0", children: [
|
|
8061
|
-
speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-
|
|
8062
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-
|
|
8061
|
+
speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-warning", children: speaker }),
|
|
8062
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground leading-relaxed", children: text })
|
|
8063
8063
|
] })
|
|
8064
8064
|
]
|
|
8065
8065
|
}
|
|
@@ -8086,7 +8086,7 @@ function ChoiceButton({
|
|
|
8086
8086
|
disabled,
|
|
8087
8087
|
onClick,
|
|
8088
8088
|
className: cn(
|
|
8089
|
-
"w-full text-left px-4 py-2.5 rounded-
|
|
8089
|
+
"w-full text-left px-4 py-2.5 rounded-interactive border transition-all duration-150",
|
|
8090
8090
|
"flex items-center gap-2",
|
|
8091
8091
|
selected ? "bg-accent/15 border-accent text-foreground" : "bg-muted/40 border-border text-foreground hover:bg-muted hover:border-border",
|
|
8092
8092
|
disabled && "opacity-40 cursor-not-allowed hover:bg-muted/40 hover:border-border",
|
|
@@ -8139,7 +8139,7 @@ function ActionButton({
|
|
|
8139
8139
|
disabled: isDisabled,
|
|
8140
8140
|
onClick,
|
|
8141
8141
|
className: cn(
|
|
8142
|
-
"relative inline-flex items-center gap-1.5 rounded-
|
|
8142
|
+
"relative inline-flex items-center gap-1.5 rounded-interactive border font-medium overflow-hidden transition-colors duration-150",
|
|
8143
8143
|
sizes.button,
|
|
8144
8144
|
variantStyles8[variant],
|
|
8145
8145
|
isDisabled && "opacity-60 cursor-not-allowed",
|
|
@@ -8182,9 +8182,9 @@ var init_ActionButton = __esm({
|
|
|
8182
8182
|
init_cn();
|
|
8183
8183
|
init_Icon();
|
|
8184
8184
|
sizeMap13 = {
|
|
8185
|
-
sm: { button: "px-3
|
|
8186
|
-
md: { button: "px-4
|
|
8187
|
-
lg: { button: "
|
|
8185
|
+
sm: { button: "h-button-sm px-3 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
|
|
8186
|
+
md: { button: "h-button-md px-4 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
|
|
8187
|
+
lg: { button: "h-button-lg px-5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
|
|
8188
8188
|
};
|
|
8189
8189
|
variantStyles8 = {
|
|
8190
8190
|
primary: "bg-primary text-primary-foreground hover:bg-primary-hover border-primary",
|
|
@@ -8264,7 +8264,7 @@ function MiniMap({
|
|
|
8264
8264
|
"div",
|
|
8265
8265
|
{
|
|
8266
8266
|
className: cn(
|
|
8267
|
-
"relative inline-block border border-
|
|
8267
|
+
"relative inline-block border border-border/20 rounded-container",
|
|
8268
8268
|
className
|
|
8269
8269
|
),
|
|
8270
8270
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -10849,7 +10849,7 @@ function ActionTile({
|
|
|
10849
10849
|
{
|
|
10850
10850
|
display: "flex",
|
|
10851
10851
|
className: cn(
|
|
10852
|
-
"flex-col items-center gap-1 rounded-
|
|
10852
|
+
"flex-col items-center gap-1 rounded-container border-2 transition-all select-none",
|
|
10853
10853
|
config.px,
|
|
10854
10854
|
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",
|
|
10855
10855
|
className
|
|
@@ -12161,12 +12161,12 @@ function IsometricCanvas({
|
|
|
12161
12161
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12162
12162
|
Box,
|
|
12163
12163
|
{
|
|
12164
|
-
className: cn("relative w-full overflow-hidden rounded-
|
|
12164
|
+
className: cn("relative w-full overflow-hidden rounded-container", className),
|
|
12165
12165
|
style: { height: viewportSize.height },
|
|
12166
12166
|
"data-testid": "game-canvas-empty",
|
|
12167
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex items-center justify-center h-full bg-[var(--color-card)] rounded-
|
|
12167
|
+
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: [
|
|
12168
12168
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "map", size: "xl" }),
|
|
12169
|
-
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-
|
|
12169
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: t("canvas.emptyMessage") || "No map data loaded" })
|
|
12170
12170
|
] }) })
|
|
12171
12171
|
}
|
|
12172
12172
|
);
|
|
@@ -12564,19 +12564,19 @@ function BattleBoard({
|
|
|
12564
12564
|
}
|
|
12565
12565
|
)
|
|
12566
12566
|
] }),
|
|
12567
|
-
gameResult && (gameOverOverlay ? gameOverOverlay(ctx) : /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-
|
|
12567
|
+
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: [
|
|
12568
12568
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12569
12569
|
Typography,
|
|
12570
12570
|
{
|
|
12571
12571
|
variant: "h2",
|
|
12572
12572
|
className: cn(
|
|
12573
12573
|
"text-4xl font-black tracking-widest uppercase",
|
|
12574
|
-
gameResult === "victory" ? "text-
|
|
12574
|
+
gameResult === "victory" ? "text-warning" : "text-error"
|
|
12575
12575
|
),
|
|
12576
12576
|
children: gameResult === "victory" ? t("battle.victory") : t("battle.defeat")
|
|
12577
12577
|
}
|
|
12578
12578
|
),
|
|
12579
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-
|
|
12579
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-muted-foreground", children: [
|
|
12580
12580
|
t("battle.turnsPlayed"),
|
|
12581
12581
|
": ",
|
|
12582
12582
|
currentTurn
|
|
@@ -17403,7 +17403,7 @@ function BuilderBoard({
|
|
|
17403
17403
|
backgroundPosition: "center"
|
|
17404
17404
|
},
|
|
17405
17405
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
17406
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
17406
|
+
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,
|
|
17407
17407
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
17408
17408
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
17409
17409
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -17441,7 +17441,7 @@ function BuilderBoard({
|
|
|
17441
17441
|
{
|
|
17442
17442
|
gap: "sm",
|
|
17443
17443
|
align: "center",
|
|
17444
|
-
className: `p-3 border-2 rounded ${result ? result.correct ? "border-
|
|
17444
|
+
className: `p-3 border-2 rounded ${result ? result.correct ? "border-success" : "border-error" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
|
|
17445
17445
|
onClick: () => handlePlaceComponent(slot.id),
|
|
17446
17446
|
children: [
|
|
17447
17447
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", className: "flex-1", children: [
|
|
@@ -17456,7 +17456,7 @@ function BuilderBoard({
|
|
|
17456
17456
|
] }) : null,
|
|
17457
17457
|
placedComp.label
|
|
17458
17458
|
] }),
|
|
17459
|
-
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-
|
|
17459
|
+
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-success" : "text-error" })
|
|
17460
17460
|
] }) : /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: t("builder.empty") })
|
|
17461
17461
|
]
|
|
17462
17462
|
},
|
|
@@ -17465,10 +17465,10 @@ function BuilderBoard({
|
|
|
17465
17465
|
}) })
|
|
17466
17466
|
] }) }),
|
|
17467
17467
|
submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
17468
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-
|
|
17468
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
|
|
17469
17469
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("builder.success") : entity.failMessage ?? t("builder.incorrect") })
|
|
17470
17470
|
] }) }),
|
|
17471
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
17471
|
+
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 }) }),
|
|
17472
17472
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
17473
17473
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allPlaced, children: [
|
|
17474
17474
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Wrench, size: "sm" }),
|
|
@@ -19023,7 +19023,7 @@ function CanvasEffectEngine({
|
|
|
19023
19023
|
flash && /* @__PURE__ */ jsxRuntime.jsx(
|
|
19024
19024
|
Box,
|
|
19025
19025
|
{
|
|
19026
|
-
className: "absolute inset-0 z-20 pointer-events-none rounded-
|
|
19026
|
+
className: "absolute inset-0 z-20 pointer-events-none rounded-container",
|
|
19027
19027
|
style: { backgroundColor: flash.color, opacity: flash.alpha }
|
|
19028
19028
|
}
|
|
19029
19029
|
),
|
|
@@ -19091,7 +19091,7 @@ function EmojiEffect({
|
|
|
19091
19091
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
19092
19092
|
Box,
|
|
19093
19093
|
{
|
|
19094
|
-
className: "absolute rounded-
|
|
19094
|
+
className: "absolute rounded-pill animate-ping",
|
|
19095
19095
|
style: {
|
|
19096
19096
|
width: 48 * intensity,
|
|
19097
19097
|
height: 48 * intensity,
|
|
@@ -20908,7 +20908,7 @@ function ClassifierBoard({
|
|
|
20908
20908
|
backgroundPosition: "center"
|
|
20909
20909
|
},
|
|
20910
20910
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
20911
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
20911
|
+
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,
|
|
20912
20912
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
20913
20913
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
20914
20914
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -20923,7 +20923,7 @@ function ClassifierBoard({
|
|
|
20923
20923
|
/* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "md", children: categories.map((cat) => {
|
|
20924
20924
|
const catItems = items.filter((item) => assignments[item.id] === cat.id);
|
|
20925
20925
|
return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
20926
|
-
cat.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-16 overflow-hidden rounded-
|
|
20926
|
+
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" }) }),
|
|
20927
20927
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { justify: "between", align: "center", children: [
|
|
20928
20928
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: cat.label }),
|
|
20929
20929
|
/* @__PURE__ */ jsxRuntime.jsx(Badge, { size: "sm", children: catItems.length })
|
|
@@ -20934,12 +20934,12 @@ function ClassifierBoard({
|
|
|
20934
20934
|
Badge,
|
|
20935
20935
|
{
|
|
20936
20936
|
size: "sm",
|
|
20937
|
-
className: `cursor-pointer ${result ? result.correct ? "border-
|
|
20937
|
+
className: `cursor-pointer ${result ? result.correct ? "border-success bg-success/10" : "border-error bg-error/10" : ""}`,
|
|
20938
20938
|
onClick: () => handleUnassign(item.id),
|
|
20939
20939
|
children: [
|
|
20940
20940
|
item.iconUrl && /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.iconUrl, alt: "", className: "w-3 h-3 object-contain inline-block" }),
|
|
20941
20941
|
item.label,
|
|
20942
|
-
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-
|
|
20942
|
+
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-success" : "text-error" })
|
|
20943
20943
|
]
|
|
20944
20944
|
},
|
|
20945
20945
|
item.id
|
|
@@ -20962,11 +20962,11 @@ function ClassifierBoard({
|
|
|
20962
20962
|
] }) }, cat.id);
|
|
20963
20963
|
}) }),
|
|
20964
20964
|
submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
20965
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-
|
|
20965
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
|
|
20966
20966
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("classifier.allCorrect") : `${correctCount}/${items.length} ${t("classifier.correct")}` }),
|
|
20967
20967
|
!allCorrect && entity.failMessage && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: entity.failMessage })
|
|
20968
20968
|
] }) }),
|
|
20969
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
20969
|
+
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 }) }),
|
|
20970
20970
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
20971
20971
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allAssigned, children: [
|
|
20972
20972
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
|
|
@@ -22014,7 +22014,7 @@ function CraftingRecipe({
|
|
|
22014
22014
|
Box,
|
|
22015
22015
|
{
|
|
22016
22016
|
className: cn(
|
|
22017
|
-
"flex flex-wrap items-center gap-3 rounded-
|
|
22017
|
+
"flex flex-wrap items-center gap-3 rounded-container bg-muted/50 border border-border/50 p-3",
|
|
22018
22018
|
className
|
|
22019
22019
|
),
|
|
22020
22020
|
children: [
|
|
@@ -22031,10 +22031,10 @@ function CraftingRecipe({
|
|
|
22031
22031
|
className: cn(!hasSufficient && "opacity-50")
|
|
22032
22032
|
}
|
|
22033
22033
|
) }),
|
|
22034
|
-
index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-
|
|
22034
|
+
index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-muted-foreground" })
|
|
22035
22035
|
] }, index);
|
|
22036
22036
|
}) }),
|
|
22037
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-
|
|
22037
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-muted-foreground" }),
|
|
22038
22038
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22039
22039
|
ItemSlot,
|
|
22040
22040
|
{
|
|
@@ -22122,7 +22122,7 @@ function DPad({
|
|
|
22122
22122
|
createButton("up"),
|
|
22123
22123
|
/* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
22124
22124
|
createButton("left"),
|
|
22125
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-
|
|
22125
|
+
/* @__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" }) }),
|
|
22126
22126
|
createButton("right"),
|
|
22127
22127
|
/* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
22128
22128
|
createButton("down"),
|
|
@@ -26229,7 +26229,7 @@ function StatBadge({
|
|
|
26229
26229
|
"div",
|
|
26230
26230
|
{
|
|
26231
26231
|
className: cn(
|
|
26232
|
-
"inline-flex items-center gap-2 rounded-
|
|
26232
|
+
"inline-flex items-center gap-2 rounded-container border backdrop-blur-sm",
|
|
26233
26233
|
sizeMap17[size] ?? sizeMap17.md,
|
|
26234
26234
|
variantMap2[variant] ?? variantMap2.default,
|
|
26235
26235
|
className
|
|
@@ -26375,10 +26375,10 @@ function QuestTracker({
|
|
|
26375
26375
|
Box,
|
|
26376
26376
|
{
|
|
26377
26377
|
className: cn(
|
|
26378
|
-
"flex items-start gap-3 rounded-
|
|
26379
|
-
isActive && !isCompleted && "bg-
|
|
26380
|
-
isCompleted && "bg-
|
|
26381
|
-
!isActive && !isCompleted && "bg-
|
|
26378
|
+
"flex items-start gap-3 rounded-container px-3 py-2 transition-colors",
|
|
26379
|
+
isActive && !isCompleted && "bg-info/20 border border-info/50",
|
|
26380
|
+
isCompleted && "bg-success/10 border border-success/30 opacity-70",
|
|
26381
|
+
!isActive && !isCompleted && "bg-muted/30 border border-border/30"
|
|
26382
26382
|
),
|
|
26383
26383
|
children: [
|
|
26384
26384
|
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-shrink-0 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -26396,9 +26396,9 @@ function QuestTracker({
|
|
|
26396
26396
|
variant: "body2",
|
|
26397
26397
|
className: cn(
|
|
26398
26398
|
"font-medium truncate",
|
|
26399
|
-
isCompleted && "line-through text-
|
|
26400
|
-
isActive && !isCompleted && "text-
|
|
26401
|
-
!isActive && !isCompleted && "text-
|
|
26399
|
+
isCompleted && "line-through text-muted-foreground",
|
|
26400
|
+
isActive && !isCompleted && "text-info",
|
|
26401
|
+
!isActive && !isCompleted && "text-muted-foreground"
|
|
26402
26402
|
),
|
|
26403
26403
|
children: quest.title
|
|
26404
26404
|
}
|
|
@@ -26416,7 +26416,7 @@ function QuestTracker({
|
|
|
26416
26416
|
Typography,
|
|
26417
26417
|
{
|
|
26418
26418
|
variant: "caption",
|
|
26419
|
-
className: "text-
|
|
26419
|
+
className: "text-muted-foreground mt-1",
|
|
26420
26420
|
children: [
|
|
26421
26421
|
quest.progress,
|
|
26422
26422
|
" / ",
|
|
@@ -26473,14 +26473,14 @@ function PowerupSlots({
|
|
|
26473
26473
|
{
|
|
26474
26474
|
className: cn(
|
|
26475
26475
|
"absolute -bottom-1 left-1/2 -translate-x-1/2",
|
|
26476
|
-
"rounded px-1 py-px",
|
|
26477
|
-
"bg-
|
|
26476
|
+
"rounded-interactive px-1 py-px",
|
|
26477
|
+
"bg-background/80 border border-border"
|
|
26478
26478
|
),
|
|
26479
26479
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
26480
26480
|
Typography,
|
|
26481
26481
|
{
|
|
26482
26482
|
variant: "caption",
|
|
26483
|
-
className: "text-[9px] font-mono font-bold text-
|
|
26483
|
+
className: "text-[9px] font-mono font-bold text-warning whitespace-nowrap",
|
|
26484
26484
|
children: formatTime2(powerup.remainingTime)
|
|
26485
26485
|
}
|
|
26486
26486
|
)
|
|
@@ -26513,6 +26513,8 @@ function GameCanvas2D({
|
|
|
26513
26513
|
height = 600,
|
|
26514
26514
|
onDraw,
|
|
26515
26515
|
onTick,
|
|
26516
|
+
tickEvent,
|
|
26517
|
+
drawEvent,
|
|
26516
26518
|
fps = 60,
|
|
26517
26519
|
className
|
|
26518
26520
|
}) {
|
|
@@ -26520,10 +26522,17 @@ function GameCanvas2D({
|
|
|
26520
26522
|
const rafRef = React85__namespace.useRef(0);
|
|
26521
26523
|
const frameRef = React85__namespace.useRef(0);
|
|
26522
26524
|
const lastTimeRef = React85__namespace.useRef(0);
|
|
26525
|
+
const emit = useEmitEvent();
|
|
26523
26526
|
const onDrawRef = React85__namespace.useRef(onDraw);
|
|
26524
26527
|
onDrawRef.current = onDraw;
|
|
26525
26528
|
const onTickRef = React85__namespace.useRef(onTick);
|
|
26526
26529
|
onTickRef.current = onTick;
|
|
26530
|
+
const tickEventRef = React85__namespace.useRef(tickEvent);
|
|
26531
|
+
tickEventRef.current = tickEvent;
|
|
26532
|
+
const drawEventRef = React85__namespace.useRef(drawEvent);
|
|
26533
|
+
drawEventRef.current = drawEvent;
|
|
26534
|
+
const emitRef = React85__namespace.useRef(emit);
|
|
26535
|
+
emitRef.current = emit;
|
|
26527
26536
|
React85__namespace.useEffect(() => {
|
|
26528
26537
|
const canvas = canvasRef.current;
|
|
26529
26538
|
if (!canvas) return;
|
|
@@ -26540,8 +26549,15 @@ function GameCanvas2D({
|
|
|
26540
26549
|
if (elapsed >= interval) {
|
|
26541
26550
|
const dt = elapsed / 1e3;
|
|
26542
26551
|
lastTimeRef.current = timestamp - elapsed % interval;
|
|
26552
|
+
const frame = frameRef.current;
|
|
26543
26553
|
onTickRef.current?.(dt);
|
|
26544
|
-
|
|
26554
|
+
if (tickEventRef.current) {
|
|
26555
|
+
emitRef.current(tickEventRef.current, { dt, frame });
|
|
26556
|
+
}
|
|
26557
|
+
onDrawRef.current?.(ctx, frame);
|
|
26558
|
+
if (drawEventRef.current) {
|
|
26559
|
+
emitRef.current(drawEventRef.current, { frame });
|
|
26560
|
+
}
|
|
26545
26561
|
frameRef.current += 1;
|
|
26546
26562
|
}
|
|
26547
26563
|
rafRef.current = requestAnimationFrame(loop);
|
|
@@ -26567,6 +26583,7 @@ var init_GameCanvas2D = __esm({
|
|
|
26567
26583
|
"use client";
|
|
26568
26584
|
init_cn();
|
|
26569
26585
|
init_Box();
|
|
26586
|
+
init_useEventBus();
|
|
26570
26587
|
GameCanvas2D.displayName = "GameCanvas2D";
|
|
26571
26588
|
}
|
|
26572
26589
|
});
|
|
@@ -26585,7 +26602,7 @@ function HealthPanel({
|
|
|
26585
26602
|
Box,
|
|
26586
26603
|
{
|
|
26587
26604
|
className: cn(
|
|
26588
|
-
"rounded-
|
|
26605
|
+
"rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm",
|
|
26589
26606
|
sizes.padding,
|
|
26590
26607
|
className
|
|
26591
26608
|
),
|
|
@@ -26596,7 +26613,7 @@ function HealthPanel({
|
|
|
26596
26613
|
{
|
|
26597
26614
|
variant: "caption",
|
|
26598
26615
|
weight: "bold",
|
|
26599
|
-
className: "text-
|
|
26616
|
+
className: "text-muted-foreground uppercase tracking-wider",
|
|
26600
26617
|
children: label
|
|
26601
26618
|
}
|
|
26602
26619
|
),
|
|
@@ -26617,7 +26634,7 @@ function HealthPanel({
|
|
|
26617
26634
|
as: "span",
|
|
26618
26635
|
variant: "caption",
|
|
26619
26636
|
weight: "bold",
|
|
26620
|
-
className: "text-
|
|
26637
|
+
className: "text-info ml-1",
|
|
26621
26638
|
children: [
|
|
26622
26639
|
"+",
|
|
26623
26640
|
shield
|
|
@@ -26642,14 +26659,14 @@ function HealthPanel({
|
|
|
26642
26659
|
Box,
|
|
26643
26660
|
{
|
|
26644
26661
|
className: cn(
|
|
26645
|
-
"relative overflow-hidden rounded-
|
|
26662
|
+
"relative overflow-hidden rounded-container bg-muted",
|
|
26646
26663
|
size === "sm" ? "h-1" : size === "md" ? "h-1.5" : "h-2",
|
|
26647
26664
|
"w-full"
|
|
26648
26665
|
),
|
|
26649
26666
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
26650
26667
|
Box,
|
|
26651
26668
|
{
|
|
26652
|
-
className: "absolute inset-y-0 left-0 rounded-
|
|
26669
|
+
className: "absolute inset-y-0 left-0 rounded-container bg-info transition-all duration-300",
|
|
26653
26670
|
style: { width: `${Math.min(100, shield / max * 100)}%` }
|
|
26654
26671
|
}
|
|
26655
26672
|
)
|
|
@@ -26708,7 +26725,7 @@ function ScoreBoard({
|
|
|
26708
26725
|
Card,
|
|
26709
26726
|
{
|
|
26710
26727
|
className: cn(
|
|
26711
|
-
"bg-[var(--color-card)]/90 border-
|
|
26728
|
+
"bg-[var(--color-card)]/90 border-border backdrop-blur-sm",
|
|
26712
26729
|
className
|
|
26713
26730
|
),
|
|
26714
26731
|
children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex items-center gap-3 flex-wrap", children: [
|
|
@@ -26825,7 +26842,7 @@ function TurnPanel({
|
|
|
26825
26842
|
Box,
|
|
26826
26843
|
{
|
|
26827
26844
|
className: cn(
|
|
26828
|
-
"flex items-center gap-3 rounded-
|
|
26845
|
+
"flex items-center gap-3 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-2",
|
|
26829
26846
|
className
|
|
26830
26847
|
),
|
|
26831
26848
|
children: [
|
|
@@ -26877,7 +26894,7 @@ function EnemyPlate({
|
|
|
26877
26894
|
Box,
|
|
26878
26895
|
{
|
|
26879
26896
|
className: cn(
|
|
26880
|
-
"inline-flex flex-col gap-1 rounded-
|
|
26897
|
+
"inline-flex flex-col gap-1 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-1.5",
|
|
26881
26898
|
"min-w-[120px]",
|
|
26882
26899
|
className
|
|
26883
26900
|
),
|
|
@@ -26971,7 +26988,7 @@ function UnitCommandBar({
|
|
|
26971
26988
|
Box,
|
|
26972
26989
|
{
|
|
26973
26990
|
className: cn(
|
|
26974
|
-
"flex items-center gap-1.5 rounded-
|
|
26991
|
+
"flex items-center gap-1.5 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-2 py-1.5",
|
|
26975
26992
|
className
|
|
26976
26993
|
),
|
|
26977
26994
|
children: commands.map((command, i) => /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex flex-col items-center gap-0.5", children: [
|
|
@@ -27056,8 +27073,8 @@ function GameHud({
|
|
|
27056
27073
|
className: cn(
|
|
27057
27074
|
"relative z-10",
|
|
27058
27075
|
positionMap[position],
|
|
27059
|
-
transparent && "bg-gradient-to-b from-
|
|
27060
|
-
position === "bottom" && "bg-gradient-to-t from-
|
|
27076
|
+
transparent && "bg-gradient-to-b from-background/50 to-transparent",
|
|
27077
|
+
position === "bottom" && "bg-gradient-to-t from-background/50 to-transparent",
|
|
27061
27078
|
className
|
|
27062
27079
|
),
|
|
27063
27080
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsx(StatBadge, { ...stat, size }, i)) })
|
|
@@ -27215,8 +27232,8 @@ function DialogueBox({
|
|
|
27215
27232
|
tabIndex: 0,
|
|
27216
27233
|
role: "dialog",
|
|
27217
27234
|
"aria-label": "Dialogue",
|
|
27218
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 my-4 bg-[var(--color-card)] bg-opacity-95 border-2 border-
|
|
27219
|
-
dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-
|
|
27235
|
+
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: [
|
|
27236
|
+
dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
27220
27237
|
"img",
|
|
27221
27238
|
{
|
|
27222
27239
|
src: dialogue.portrait,
|
|
@@ -27226,7 +27243,7 @@ function DialogueBox({
|
|
|
27226
27243
|
}
|
|
27227
27244
|
) }),
|
|
27228
27245
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 p-4", children: [
|
|
27229
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
27246
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-warning font-bold mb-2", children: dialogue.speaker }),
|
|
27230
27247
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-lg leading-relaxed min-h-[60px]", children: [
|
|
27231
27248
|
displayedText,
|
|
27232
27249
|
isTyping && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children: "\u258C" })
|
|
@@ -27236,9 +27253,9 @@ function DialogueBox({
|
|
|
27236
27253
|
{
|
|
27237
27254
|
type: "button",
|
|
27238
27255
|
className: cn(
|
|
27239
|
-
"block w-full text-left px-4 py-2 rounded transition-colors",
|
|
27240
|
-
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-
|
|
27241
|
-
selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-
|
|
27256
|
+
"block w-full text-left px-4 py-2 rounded-interactive transition-colors",
|
|
27257
|
+
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-warning",
|
|
27258
|
+
selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-warning" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
|
|
27242
27259
|
),
|
|
27243
27260
|
onClick: (e) => {
|
|
27244
27261
|
e.stopPropagation();
|
|
@@ -27246,7 +27263,7 @@ function DialogueBox({
|
|
|
27246
27263
|
onChoice?.(choice);
|
|
27247
27264
|
},
|
|
27248
27265
|
children: [
|
|
27249
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
27266
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground mr-2", children: [
|
|
27250
27267
|
index + 1,
|
|
27251
27268
|
"."
|
|
27252
27269
|
] }),
|
|
@@ -27255,7 +27272,7 @@ function DialogueBox({
|
|
|
27255
27272
|
},
|
|
27256
27273
|
index
|
|
27257
27274
|
)) }),
|
|
27258
|
-
!isTyping && !dialogue.choices?.length && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-
|
|
27275
|
+
!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..." })
|
|
27259
27276
|
] })
|
|
27260
27277
|
] }) })
|
|
27261
27278
|
}
|
|
@@ -27358,7 +27375,7 @@ function InventoryPanel({
|
|
|
27358
27375
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
27359
27376
|
"div",
|
|
27360
27377
|
{
|
|
27361
|
-
className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-
|
|
27378
|
+
className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-container border border-border",
|
|
27362
27379
|
style: {
|
|
27363
27380
|
gridTemplateColumns: `repeat(${safeColumns}, ${slotSize}px)`,
|
|
27364
27381
|
gridTemplateRows: `repeat(${rows}, ${slotSize}px)`
|
|
@@ -27370,8 +27387,8 @@ function InventoryPanel({
|
|
|
27370
27387
|
className: cn(
|
|
27371
27388
|
"relative flex items-center justify-center",
|
|
27372
27389
|
"bg-[var(--color-card)] border rounded transition-colors",
|
|
27373
|
-
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-
|
|
27374
|
-
selectedSlot === index ? "border-
|
|
27390
|
+
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-info",
|
|
27391
|
+
selectedSlot === index ? "border-warning bg-[var(--color-surface,#374151)]" : "border-muted"
|
|
27375
27392
|
),
|
|
27376
27393
|
style: { width: slotSize, height: slotSize },
|
|
27377
27394
|
onClick: () => handleSlotClick(index),
|
|
@@ -27390,8 +27407,8 @@ function InventoryPanel({
|
|
|
27390
27407
|
className: "w-8 h-8 object-contain",
|
|
27391
27408
|
style: { imageRendering: "pixelated" }
|
|
27392
27409
|
}
|
|
27393
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-
|
|
27394
|
-
item.quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-0 right-0 bg-
|
|
27410
|
+
) : /* @__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() }),
|
|
27411
|
+
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 })
|
|
27395
27412
|
] })
|
|
27396
27413
|
},
|
|
27397
27414
|
index
|
|
@@ -27401,7 +27418,7 @@ function InventoryPanel({
|
|
|
27401
27418
|
showTooltips && hoveredItem && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
27402
27419
|
"div",
|
|
27403
27420
|
{
|
|
27404
|
-
className: "fixed z-50 bg-[var(--color-card)] border border-
|
|
27421
|
+
className: "fixed z-50 bg-[var(--color-card)] border border-border rounded-container p-2 shadow-elevation-card pointer-events-none",
|
|
27405
27422
|
style: {
|
|
27406
27423
|
left: tooltipPosition.x,
|
|
27407
27424
|
top: tooltipPosition.y,
|
|
@@ -27409,8 +27426,8 @@ function InventoryPanel({
|
|
|
27409
27426
|
},
|
|
27410
27427
|
children: [
|
|
27411
27428
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-[var(--color-foreground)]", children: hoveredItem.name || hoveredItem.type }),
|
|
27412
|
-
hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-
|
|
27413
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-
|
|
27429
|
+
hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground mt-1", children: hoveredItem.description }),
|
|
27430
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground mt-1", children: [
|
|
27414
27431
|
"Quantity: ",
|
|
27415
27432
|
hoveredItem.quantity
|
|
27416
27433
|
] })
|
|
@@ -27488,7 +27505,7 @@ function GameMenu({
|
|
|
27488
27505
|
children: title
|
|
27489
27506
|
}
|
|
27490
27507
|
),
|
|
27491
|
-
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-
|
|
27508
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
|
|
27492
27509
|
] }),
|
|
27493
27510
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
27494
27511
|
"button",
|
|
@@ -27496,10 +27513,10 @@ function GameMenu({
|
|
|
27496
27513
|
onClick: () => handleOptionClick(option),
|
|
27497
27514
|
disabled: option.disabled,
|
|
27498
27515
|
className: cn(
|
|
27499
|
-
"w-full py-4 px-8 rounded-
|
|
27516
|
+
"w-full py-4 px-8 rounded-container border-2 font-bold text-lg",
|
|
27500
27517
|
"transition-all duration-200 transform",
|
|
27501
27518
|
"hover:scale-105 active:scale-95",
|
|
27502
|
-
"focus:outline-none focus:ring-4 focus:ring-
|
|
27519
|
+
"focus:outline-none focus:ring-4 focus:ring-foreground/25",
|
|
27503
27520
|
variantMap3[option.variant ?? "secondary"] ?? variantMap3.secondary,
|
|
27504
27521
|
option.disabled && "opacity-50 cursor-not-allowed hover:scale-100"
|
|
27505
27522
|
),
|
|
@@ -27511,8 +27528,8 @@ function GameMenu({
|
|
|
27511
27528
|
index
|
|
27512
27529
|
)) }),
|
|
27513
27530
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none overflow-hidden", children: [
|
|
27514
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-
|
|
27515
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-
|
|
27531
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
|
|
27532
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
|
|
27516
27533
|
] })
|
|
27517
27534
|
]
|
|
27518
27535
|
}
|
|
@@ -27525,9 +27542,9 @@ var init_GameMenu = __esm({
|
|
|
27525
27542
|
init_cn();
|
|
27526
27543
|
init_useEventBus();
|
|
27527
27544
|
variantMap3 = {
|
|
27528
|
-
primary: "bg-[var(--color-primary)] hover:bg-
|
|
27529
|
-
secondary: "bg-[var(--color-surface,#374151)] hover:bg-
|
|
27530
|
-
ghost: "bg-transparent hover:bg-
|
|
27545
|
+
primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info shadow-lg shadow-info/25",
|
|
27546
|
+
secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
|
|
27547
|
+
ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
|
|
27531
27548
|
};
|
|
27532
27549
|
GameMenu.displayName = "GameMenu";
|
|
27533
27550
|
}
|
|
@@ -27595,13 +27612,13 @@ function GameOverScreen({
|
|
|
27595
27612
|
children: title
|
|
27596
27613
|
}
|
|
27597
27614
|
),
|
|
27598
|
-
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-
|
|
27599
|
-
isNewHighScore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 px-6 py-2 bg-
|
|
27615
|
+
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-muted-foreground mb-8 text-center max-w-md", children: message }),
|
|
27616
|
+
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}" }) }),
|
|
27600
27617
|
stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
27601
27618
|
"div",
|
|
27602
27619
|
{
|
|
27603
27620
|
className: cn(
|
|
27604
|
-
"mb-8 p-6 rounded-
|
|
27621
|
+
"mb-8 p-6 rounded-container border-2 bg-background/30",
|
|
27605
27622
|
colors.accent
|
|
27606
27623
|
),
|
|
27607
27624
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: stats.map((stat, index) => {
|
|
@@ -27610,7 +27627,7 @@ function GameOverScreen({
|
|
|
27610
27627
|
displayValue = formatTime3(displayValue);
|
|
27611
27628
|
}
|
|
27612
27629
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
27613
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
27630
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-sm mb-1", children: stat.label }),
|
|
27614
27631
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-2xl font-bold flex items-center justify-center gap-2", children: [
|
|
27615
27632
|
stat.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.icon }),
|
|
27616
27633
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: displayValue })
|
|
@@ -27624,10 +27641,10 @@ function GameOverScreen({
|
|
|
27624
27641
|
{
|
|
27625
27642
|
onClick: () => handleActionClick(action),
|
|
27626
27643
|
className: cn(
|
|
27627
|
-
"px-8 py-4 rounded-
|
|
27644
|
+
"px-8 py-4 rounded-container border-2 font-bold text-lg",
|
|
27628
27645
|
"transition-all duration-200",
|
|
27629
27646
|
"hover:scale-105 active:scale-95",
|
|
27630
|
-
"focus:outline-none focus:ring-4 focus:ring-
|
|
27647
|
+
"focus:outline-none focus:ring-4 focus:ring-foreground/25",
|
|
27631
27648
|
buttonVariants[action.variant ?? "secondary"]
|
|
27632
27649
|
),
|
|
27633
27650
|
children: action.label
|
|
@@ -27646,25 +27663,25 @@ var init_GameOverScreen = __esm({
|
|
|
27646
27663
|
init_useEventBus();
|
|
27647
27664
|
variantColors = {
|
|
27648
27665
|
victory: {
|
|
27649
|
-
bg: "from-
|
|
27650
|
-
title: "text-
|
|
27651
|
-
accent: "border-
|
|
27666
|
+
bg: "from-success/90 to-success/90",
|
|
27667
|
+
title: "text-success",
|
|
27668
|
+
accent: "border-success"
|
|
27652
27669
|
},
|
|
27653
27670
|
defeat: {
|
|
27654
|
-
bg: "from-
|
|
27655
|
-
title: "text-
|
|
27656
|
-
accent: "border-
|
|
27671
|
+
bg: "from-error/90 to-background/90",
|
|
27672
|
+
title: "text-error",
|
|
27673
|
+
accent: "border-error"
|
|
27657
27674
|
},
|
|
27658
27675
|
neutral: {
|
|
27659
|
-
bg: "from-
|
|
27660
|
-
title: "text-
|
|
27661
|
-
accent: "border-
|
|
27676
|
+
bg: "from-muted/90 to-background/90",
|
|
27677
|
+
title: "text-foreground",
|
|
27678
|
+
accent: "border-muted"
|
|
27662
27679
|
}
|
|
27663
27680
|
};
|
|
27664
27681
|
buttonVariants = {
|
|
27665
|
-
primary: "bg-[var(--color-primary)] hover:bg-
|
|
27666
|
-
secondary: "bg-[var(--color-surface,#374151)] hover:bg-
|
|
27667
|
-
ghost: "bg-transparent hover:bg-
|
|
27682
|
+
primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info",
|
|
27683
|
+
secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
|
|
27684
|
+
ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
|
|
27668
27685
|
};
|
|
27669
27686
|
GameOverScreen.displayName = "GameOverScreen";
|
|
27670
27687
|
}
|
|
@@ -27898,7 +27915,7 @@ function PlatformerCanvas({
|
|
|
27898
27915
|
{
|
|
27899
27916
|
ref: canvasRef,
|
|
27900
27917
|
style: { width: canvasWidth, height: canvasHeight },
|
|
27901
|
-
className: cn("block rounded-
|
|
27918
|
+
className: cn("block rounded-container border border-border/10", className),
|
|
27902
27919
|
"data-testid": "platformer-canvas",
|
|
27903
27920
|
tabIndex: 0
|
|
27904
27921
|
}
|
|
@@ -35303,7 +35320,7 @@ function DebuggerBoard({
|
|
|
35303
35320
|
backgroundPosition: "center"
|
|
35304
35321
|
},
|
|
35305
35322
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
35306
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
35323
|
+
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,
|
|
35307
35324
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
35308
35325
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
35309
35326
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "sm" }),
|
|
@@ -35316,11 +35333,11 @@ function DebuggerBoard({
|
|
|
35316
35333
|
const isFlagged = flaggedLines.has(line.id);
|
|
35317
35334
|
let lineStyle = "";
|
|
35318
35335
|
if (submitted) {
|
|
35319
|
-
if (line.isBug && isFlagged) lineStyle = "bg-
|
|
35320
|
-
else if (line.isBug && !isFlagged) lineStyle = "bg-
|
|
35321
|
-
else if (!line.isBug && isFlagged) lineStyle = "bg-
|
|
35336
|
+
if (line.isBug && isFlagged) lineStyle = "bg-success/10";
|
|
35337
|
+
else if (line.isBug && !isFlagged) lineStyle = "bg-warning/10";
|
|
35338
|
+
else if (!line.isBug && isFlagged) lineStyle = "bg-error/10";
|
|
35322
35339
|
} else if (isFlagged) {
|
|
35323
|
-
lineStyle = "bg-
|
|
35340
|
+
lineStyle = "bg-error/10";
|
|
35324
35341
|
}
|
|
35325
35342
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
35326
35343
|
HStack,
|
|
@@ -35333,8 +35350,8 @@ function DebuggerBoard({
|
|
|
35333
35350
|
/* @__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 }) }),
|
|
35334
35351
|
/* @__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 }) }),
|
|
35335
35352
|
/* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "w-8 flex-shrink-0 flex items-center justify-center", children: [
|
|
35336
|
-
isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-
|
|
35337
|
-
submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-
|
|
35353
|
+
isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-error" }),
|
|
35354
|
+
submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-warning" })
|
|
35338
35355
|
] })
|
|
35339
35356
|
]
|
|
35340
35357
|
},
|
|
@@ -35349,7 +35366,7 @@ function DebuggerBoard({
|
|
|
35349
35366
|
{
|
|
35350
35367
|
icon: flaggedLines.has(line.id) ? LucideIcons2.CheckCircle : LucideIcons2.XCircle,
|
|
35351
35368
|
size: "xs",
|
|
35352
|
-
className: flaggedLines.has(line.id) ? "text-
|
|
35369
|
+
className: flaggedLines.has(line.id) ? "text-success mt-0.5" : "text-warning mt-0.5"
|
|
35353
35370
|
}
|
|
35354
35371
|
),
|
|
35355
35372
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", children: [
|
|
@@ -35358,7 +35375,7 @@ function DebuggerBoard({
|
|
|
35358
35375
|
] })
|
|
35359
35376
|
] }, line.id))
|
|
35360
35377
|
] }) }),
|
|
35361
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
35378
|
+
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 }) }),
|
|
35362
35379
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
35363
35380
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: flaggedLines.size === 0, children: [
|
|
35364
35381
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
|
|
@@ -36081,7 +36098,7 @@ function LinearView({
|
|
|
36081
36098
|
className
|
|
36082
36099
|
}) {
|
|
36083
36100
|
const currentIdx = trait.states.indexOf(trait.currentState);
|
|
36084
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
36101
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
36085
36102
|
trait.description && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: trait.description }),
|
|
36086
36103
|
/* @__PURE__ */ jsxRuntime.jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
36087
36104
|
const isDone = i < currentIdx;
|
|
@@ -36103,10 +36120,10 @@ function LinearView({
|
|
|
36103
36120
|
{
|
|
36104
36121
|
display: "inline-flex",
|
|
36105
36122
|
className: cn(
|
|
36106
|
-
"items-center justify-center rounded-
|
|
36123
|
+
"items-center justify-center rounded-pill px-3 py-1 border-2 transition-all",
|
|
36107
36124
|
SIZE_CONFIG2[size || "md"].fontSize,
|
|
36108
36125
|
isDone && "bg-success/20 border-success text-success",
|
|
36109
|
-
isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-
|
|
36126
|
+
isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-elevation-card shadow-primary/20",
|
|
36110
36127
|
!isDone && !isCurrent && "bg-muted border-border text-muted-foreground"
|
|
36111
36128
|
),
|
|
36112
36129
|
children: [
|
|
@@ -36128,7 +36145,7 @@ function CompactView({
|
|
|
36128
36145
|
const { t } = useTranslate();
|
|
36129
36146
|
const config = SIZE_CONFIG2[size || "md"];
|
|
36130
36147
|
const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
|
|
36131
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
36148
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
36132
36149
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
|
|
36133
36150
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
|
|
36134
36151
|
/* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
|
|
@@ -36164,7 +36181,7 @@ function FullView({
|
|
|
36164
36181
|
const { t } = useTranslate();
|
|
36165
36182
|
const config = SIZE_CONFIG2[size || "md"];
|
|
36166
36183
|
const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
|
|
36167
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
36184
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
36168
36185
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
|
|
36169
36186
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
|
|
36170
36187
|
/* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
|
|
@@ -36178,9 +36195,9 @@ function FullView({
|
|
|
36178
36195
|
{
|
|
36179
36196
|
display: "flex",
|
|
36180
36197
|
className: cn(
|
|
36181
|
-
"items-center justify-center rounded-
|
|
36198
|
+
"items-center justify-center rounded-container border-2 transition-all px-2",
|
|
36182
36199
|
config.nodeSize,
|
|
36183
|
-
isCurrent && "bg-primary/20 border-primary shadow-
|
|
36200
|
+
isCurrent && "bg-primary/20 border-primary shadow-elevation-card shadow-primary/20",
|
|
36184
36201
|
!isCurrent && hasOutgoing && "bg-muted border-border hover:border-muted-foreground",
|
|
36185
36202
|
!isCurrent && !hasOutgoing && "bg-background border-border opacity-60",
|
|
36186
36203
|
onStateClick && "cursor-pointer"
|
|
@@ -36610,7 +36627,7 @@ function EventHandlerBoard({
|
|
|
36610
36627
|
backgroundPosition: "center"
|
|
36611
36628
|
},
|
|
36612
36629
|
children: [
|
|
36613
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
36630
|
+
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,
|
|
36614
36631
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
36615
36632
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
36616
36633
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
|
|
@@ -36625,7 +36642,7 @@ function EventHandlerBoard({
|
|
|
36625
36642
|
Box,
|
|
36626
36643
|
{
|
|
36627
36644
|
className: cn(
|
|
36628
|
-
"p-3 rounded-
|
|
36645
|
+
"p-3 rounded-container border-2 cursor-pointer transition-all hover:scale-105",
|
|
36629
36646
|
selectedObjectId === obj.id ? "border-primary bg-primary/10" : "border-border bg-card hover:border-muted-foreground"
|
|
36630
36647
|
),
|
|
36631
36648
|
onClick: () => setSelectedObjectId(obj.id),
|
|
@@ -36647,10 +36664,10 @@ function EventHandlerBoard({
|
|
|
36647
36664
|
}
|
|
36648
36665
|
),
|
|
36649
36666
|
eventLog.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(EventLog, { entries: eventLog }),
|
|
36650
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
36667
|
+
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") }) }),
|
|
36651
36668
|
playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
36652
|
-
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
36653
|
-
showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
36669
|
+
/* @__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) }) }),
|
|
36670
|
+
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: [
|
|
36654
36671
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
36655
36672
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
36656
36673
|
] }) })
|
|
@@ -39823,7 +39840,7 @@ function NegotiatorBoard({
|
|
|
39823
39840
|
backgroundPosition: "center"
|
|
39824
39841
|
},
|
|
39825
39842
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
39826
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
39843
|
+
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,
|
|
39827
39844
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
39828
39845
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
39829
39846
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description }),
|
|
@@ -39869,7 +39886,7 @@ function NegotiatorBoard({
|
|
|
39869
39886
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: "vs" }),
|
|
39870
39887
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: getActionLabel(round.opponentAction) }),
|
|
39871
39888
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.ArrowRight, size: "xs" }),
|
|
39872
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-
|
|
39889
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-success", children: [
|
|
39873
39890
|
"+",
|
|
39874
39891
|
round.playerPayoff
|
|
39875
39892
|
] }),
|
|
@@ -39880,7 +39897,7 @@ function NegotiatorBoard({
|
|
|
39880
39897
|
] }, round.round))
|
|
39881
39898
|
] }) }),
|
|
39882
39899
|
isComplete && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
39883
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-
|
|
39900
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-success" : "text-error" }),
|
|
39884
39901
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: won ? entity.successMessage ?? t("negotiator.success") : entity.failMessage ?? t("negotiator.failed") }),
|
|
39885
39902
|
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
39886
39903
|
t("negotiator.finalScore"),
|
|
@@ -39890,7 +39907,7 @@ function NegotiatorBoard({
|
|
|
39890
39907
|
entity.targetScore
|
|
39891
39908
|
] })
|
|
39892
39909
|
] }) }),
|
|
39893
|
-
showHint && entity.hint && !won && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
39910
|
+
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 }) }),
|
|
39894
39911
|
isComplete && !won && /* @__PURE__ */ jsxRuntime.jsx(HStack, { justify: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: handleReset, children: t("negotiator.playAgain") }) })
|
|
39895
39912
|
] })
|
|
39896
39913
|
}
|
|
@@ -42494,7 +42511,7 @@ function TraitSlot({
|
|
|
42494
42511
|
display: "flex",
|
|
42495
42512
|
position: "relative",
|
|
42496
42513
|
className: cn(
|
|
42497
|
-
"items-center justify-center rounded-
|
|
42514
|
+
"items-center justify-center rounded-container transition-all duration-200 bg-card/50",
|
|
42498
42515
|
!locked && "cursor-pointer",
|
|
42499
42516
|
locked && "cursor-not-allowed opacity-50",
|
|
42500
42517
|
isEmpty && !locked && "border-2 border-dashed border-border hover:border-muted-foreground",
|
|
@@ -42510,7 +42527,7 @@ function TraitSlot({
|
|
|
42510
42527
|
style: {
|
|
42511
42528
|
width: config.box,
|
|
42512
42529
|
height: config.box,
|
|
42513
|
-
backgroundColor: catColor?.bg ||
|
|
42530
|
+
backgroundColor: catColor?.bg || void 0,
|
|
42514
42531
|
borderColor: isDragOver ? void 0 : feedback === "correct" ? "var(--color-success)" : feedback === "wrong" ? "var(--color-error)" : catColor?.border || void 0
|
|
42515
42532
|
},
|
|
42516
42533
|
onClick: handleClick,
|
|
@@ -42539,7 +42556,7 @@ function TraitSlot({
|
|
|
42539
42556
|
Box,
|
|
42540
42557
|
{
|
|
42541
42558
|
position: "absolute",
|
|
42542
|
-
className: "-top-1.5 -right-1.5 w-4 h-4 bg-error rounded-
|
|
42559
|
+
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",
|
|
42543
42560
|
onClick: handleRemove,
|
|
42544
42561
|
children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground text-xs leading-none", children: "\xD7" })
|
|
42545
42562
|
}
|
|
@@ -42549,14 +42566,14 @@ function TraitSlot({
|
|
|
42549
42566
|
Box,
|
|
42550
42567
|
{
|
|
42551
42568
|
position: "absolute",
|
|
42552
|
-
className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-
|
|
42569
|
+
className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-pill flex items-center justify-center border border-border",
|
|
42553
42570
|
children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground text-xs", children: slotNumber })
|
|
42554
42571
|
}
|
|
42555
42572
|
),
|
|
42556
42573
|
showTooltip && isHovered && itemMachine && !isEmpty && equippedItem && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
42557
42574
|
Box,
|
|
42558
42575
|
{
|
|
42559
|
-
className: "p-3 bg-background border border-border rounded-
|
|
42576
|
+
className: "p-3 bg-background border border-border rounded-container shadow-xl",
|
|
42560
42577
|
style: {
|
|
42561
42578
|
...getTooltipStyle(),
|
|
42562
42579
|
minWidth: 200,
|
|
@@ -42806,12 +42823,12 @@ function SequencerBoard({
|
|
|
42806
42823
|
backgroundPosition: "center"
|
|
42807
42824
|
},
|
|
42808
42825
|
children: [
|
|
42809
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
42826
|
+
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,
|
|
42810
42827
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
42811
42828
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
42812
42829
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description })
|
|
42813
42830
|
] }),
|
|
42814
|
-
showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
42831
|
+
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: [
|
|
42815
42832
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
42816
42833
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
42817
42834
|
] }) }),
|
|
@@ -42849,8 +42866,8 @@ function SequencerBoard({
|
|
|
42849
42866
|
label: t("sequencer.dragActions")
|
|
42850
42867
|
}
|
|
42851
42868
|
),
|
|
42852
|
-
hasFeedback && playState === "idle" && attempts > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
42853
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
42869
|
+
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) }) }),
|
|
42870
|
+
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") }) }),
|
|
42854
42871
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", children: [
|
|
42855
42872
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
42856
42873
|
Button,
|
|
@@ -43526,7 +43543,7 @@ function SimulationCanvas({
|
|
|
43526
43543
|
ref: canvasRef,
|
|
43527
43544
|
width,
|
|
43528
43545
|
height,
|
|
43529
|
-
className: "rounded-
|
|
43546
|
+
className: "rounded-container block max-w-full h-auto"
|
|
43530
43547
|
}
|
|
43531
43548
|
) });
|
|
43532
43549
|
}
|
|
@@ -43734,7 +43751,7 @@ function SimulatorBoard({
|
|
|
43734
43751
|
backgroundPosition: "center"
|
|
43735
43752
|
},
|
|
43736
43753
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
43737
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
43754
|
+
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,
|
|
43738
43755
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
43739
43756
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
43740
43757
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -43785,8 +43802,8 @@ function SimulatorBoard({
|
|
|
43785
43802
|
entity.outputUnit
|
|
43786
43803
|
] }),
|
|
43787
43804
|
submitted && /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
43788
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-
|
|
43789
|
-
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-
|
|
43805
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-success" : "text-error" }),
|
|
43806
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-success" : "text-error", children: isCorrect ? entity.successMessage ?? t("simulator.correct") : entity.failMessage ?? t("simulator.incorrect") })
|
|
43790
43807
|
] }),
|
|
43791
43808
|
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
43792
43809
|
t("simulator.target"),
|
|
@@ -43799,7 +43816,7 @@ function SimulatorBoard({
|
|
|
43799
43816
|
")"
|
|
43800
43817
|
] })
|
|
43801
43818
|
] }) }),
|
|
43802
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
43819
|
+
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 }) }),
|
|
43803
43820
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
43804
43821
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, children: [
|
|
43805
43822
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Play, size: "sm" }),
|
|
@@ -44200,7 +44217,7 @@ function StateNode2({
|
|
|
44200
44217
|
position: "absolute",
|
|
44201
44218
|
display: "flex",
|
|
44202
44219
|
className: cn(
|
|
44203
|
-
"items-center justify-center rounded-
|
|
44220
|
+
"items-center justify-center rounded-pill border-3 transition-all cursor-pointer select-none",
|
|
44204
44221
|
"min-w-[80px] h-[80px] px-3",
|
|
44205
44222
|
isCurrent && "bg-primary/20 border-primary shadow-lg shadow-primary/30 scale-110",
|
|
44206
44223
|
isSelected && !isCurrent && "bg-accent/20 border-accent ring-2 ring-accent/50",
|
|
@@ -44513,7 +44530,7 @@ function StateArchitectBoard({
|
|
|
44513
44530
|
backgroundPosition: "center"
|
|
44514
44531
|
},
|
|
44515
44532
|
children: [
|
|
44516
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
44533
|
+
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,
|
|
44517
44534
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
44518
44535
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
44519
44536
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
|
|
@@ -44532,7 +44549,7 @@ function StateArchitectBoard({
|
|
|
44532
44549
|
Box,
|
|
44533
44550
|
{
|
|
44534
44551
|
position: "relative",
|
|
44535
|
-
className: "rounded-
|
|
44552
|
+
className: "rounded-container border border-border bg-background overflow-hidden",
|
|
44536
44553
|
style: { width: GRAPH_W, height: GRAPH_H },
|
|
44537
44554
|
children: [
|
|
44538
44555
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -44591,7 +44608,7 @@ function StateArchitectBoard({
|
|
|
44591
44608
|
children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
|
|
44592
44609
|
}
|
|
44593
44610
|
) }),
|
|
44594
|
-
transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-
|
|
44611
|
+
transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-container bg-muted/50 border border-border", children: [
|
|
44595
44612
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
|
|
44596
44613
|
transitions.map((t2) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
44597
44614
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
|
|
@@ -44625,7 +44642,7 @@ function StateArchitectBoard({
|
|
|
44625
44642
|
variables
|
|
44626
44643
|
}
|
|
44627
44644
|
),
|
|
44628
|
-
testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-
|
|
44645
|
+
testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-container bg-card border border-border", gap: "xs", children: [
|
|
44629
44646
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground font-medium", children: t("stateArchitect.testResults") + ":" }),
|
|
44630
44647
|
testResults.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
44631
44648
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: r.passed ? "text-success" : "text-error", children: r.passed ? "\u2714" : "\u2717" }),
|
|
@@ -44636,10 +44653,10 @@ function StateArchitectBoard({
|
|
|
44636
44653
|
entity.showCodeView !== false && /* @__PURE__ */ jsxRuntime.jsx(CodeView, { data: codeData, label: "View Code" })
|
|
44637
44654
|
] })
|
|
44638
44655
|
] }),
|
|
44639
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
44656
|
+
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") }) }),
|
|
44640
44657
|
playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
44641
|
-
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
44642
|
-
attempts >= 3 && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
44658
|
+
/* @__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]) }) }),
|
|
44659
|
+
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: [
|
|
44643
44660
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
44644
44661
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
44645
44662
|
] }) })
|