@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/avl/index.cjs
CHANGED
|
@@ -11501,7 +11501,7 @@ function HealthBar({
|
|
|
11501
11501
|
"div",
|
|
11502
11502
|
{
|
|
11503
11503
|
className: cn(
|
|
11504
|
-
"relative overflow-hidden rounded-full bg-
|
|
11504
|
+
"relative overflow-hidden rounded-full bg-muted",
|
|
11505
11505
|
sizes.bar,
|
|
11506
11506
|
"w-24",
|
|
11507
11507
|
className
|
|
@@ -11511,7 +11511,7 @@ function HealthBar({
|
|
|
11511
11511
|
{
|
|
11512
11512
|
className: cn(
|
|
11513
11513
|
"absolute inset-y-0 left-0 rounded-full",
|
|
11514
|
-
percentage > 66 ? "bg-
|
|
11514
|
+
percentage > 66 ? "bg-success" : percentage > 33 ? "bg-warning" : "bg-error",
|
|
11515
11515
|
animated && "transition-all duration-300"
|
|
11516
11516
|
),
|
|
11517
11517
|
style: { width: `${percentage}%` }
|
|
@@ -11533,7 +11533,7 @@ var init_HealthBar = __esm({
|
|
|
11533
11533
|
heartIcon = (filled, size) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
11534
11534
|
"svg",
|
|
11535
11535
|
{
|
|
11536
|
-
className: cn("transition-all duration-200", size, filled ? "text-
|
|
11536
|
+
className: cn("transition-all duration-200", size, filled ? "text-error" : "text-muted-foreground"),
|
|
11537
11537
|
viewBox: "0 0 24 24",
|
|
11538
11538
|
fill: filled ? "currentColor" : "none",
|
|
11539
11539
|
stroke: "currentColor",
|
|
@@ -11597,7 +11597,7 @@ function ScoreDisplay({
|
|
|
11597
11597
|
),
|
|
11598
11598
|
children: [
|
|
11599
11599
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
|
|
11600
|
-
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
11600
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
|
|
11601
11601
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: formattedValue })
|
|
11602
11602
|
]
|
|
11603
11603
|
}
|
|
@@ -11710,8 +11710,8 @@ var init_ControlButton = __esm({
|
|
|
11710
11710
|
};
|
|
11711
11711
|
shapeMap = {
|
|
11712
11712
|
circle: "rounded-full",
|
|
11713
|
-
rounded: "rounded-
|
|
11714
|
-
square: "rounded-
|
|
11713
|
+
rounded: "rounded-interactive",
|
|
11714
|
+
square: "rounded-interactive"
|
|
11715
11715
|
};
|
|
11716
11716
|
variantMap = {
|
|
11717
11717
|
primary: "bg-primary text-primary-foreground border-primary hover:bg-primary-hover",
|
|
@@ -11879,12 +11879,12 @@ function TimerDisplay({
|
|
|
11879
11879
|
"div",
|
|
11880
11880
|
{
|
|
11881
11881
|
className: cn(
|
|
11882
|
-
"inline-flex items-center justify-center rounded-
|
|
11883
|
-
"bg-
|
|
11882
|
+
"inline-flex items-center justify-center rounded-container",
|
|
11883
|
+
"bg-card/80 border border-muted font-mono font-bold tabular-nums",
|
|
11884
11884
|
sizeMap4[size],
|
|
11885
|
-
running && "border-
|
|
11886
|
-
isLow && "text-
|
|
11887
|
-
!isLow && "text-
|
|
11885
|
+
running && "border-success/50",
|
|
11886
|
+
isLow && "text-error border-error/50 animate-pulse",
|
|
11887
|
+
!isLow && "text-foreground",
|
|
11888
11888
|
className
|
|
11889
11889
|
),
|
|
11890
11890
|
children: formatTime(seconds, format)
|
|
@@ -11917,17 +11917,17 @@ function ResourceCounter({
|
|
|
11917
11917
|
"div",
|
|
11918
11918
|
{
|
|
11919
11919
|
className: cn(
|
|
11920
|
-
"inline-flex items-center rounded-
|
|
11921
|
-
"bg-
|
|
11920
|
+
"inline-flex items-center rounded-container",
|
|
11921
|
+
"bg-card/80 border border-muted font-medium text-foreground",
|
|
11922
11922
|
sizes.wrapper,
|
|
11923
11923
|
className
|
|
11924
11924
|
),
|
|
11925
11925
|
children: [
|
|
11926
11926
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: icon }),
|
|
11927
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
11927
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
|
|
11928
11928
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold tabular-nums", color), children: [
|
|
11929
11929
|
value,
|
|
11930
|
-
max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
11930
|
+
max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
11931
11931
|
"/",
|
|
11932
11932
|
max
|
|
11933
11933
|
] })
|
|
@@ -11968,18 +11968,18 @@ function ItemSlot({
|
|
|
11968
11968
|
disabled: !isClickable,
|
|
11969
11969
|
title: label,
|
|
11970
11970
|
className: cn(
|
|
11971
|
-
"relative flex items-center justify-center rounded-
|
|
11972
|
-
"bg-
|
|
11971
|
+
"relative flex items-center justify-center rounded-interactive border-2",
|
|
11972
|
+
"bg-card/80 transition-all duration-150",
|
|
11973
11973
|
sizeMap6[size],
|
|
11974
|
-
empty ? "border-
|
|
11974
|
+
empty ? "border-border bg-card/50" : rarityBorderMap[rarity],
|
|
11975
11975
|
!empty && rarityGlowMap[rarity],
|
|
11976
|
-
selected && "ring-2 ring-
|
|
11976
|
+
selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
|
|
11977
11977
|
isClickable && !empty && "hover:brightness-125 cursor-pointer",
|
|
11978
|
-
isClickable && empty && "hover:border-
|
|
11978
|
+
isClickable && empty && "hover:border-muted cursor-pointer",
|
|
11979
11979
|
!isClickable && "cursor-default",
|
|
11980
11980
|
className
|
|
11981
11981
|
),
|
|
11982
|
-
children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
11982
|
+
children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
11983
11983
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
|
|
11984
11984
|
quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
11985
11985
|
"span",
|
|
@@ -11987,7 +11987,7 @@ function ItemSlot({
|
|
|
11987
11987
|
className: cn(
|
|
11988
11988
|
"absolute -bottom-1 -right-1 flex items-center justify-center",
|
|
11989
11989
|
"min-w-[18px] h-[18px] rounded-full px-1",
|
|
11990
|
-
"bg-
|
|
11990
|
+
"bg-surface border border-muted text-xs font-bold text-foreground"
|
|
11991
11991
|
),
|
|
11992
11992
|
children: quantity
|
|
11993
11993
|
}
|
|
@@ -12007,18 +12007,18 @@ var init_ItemSlot = __esm({
|
|
|
12007
12007
|
lg: "w-18 h-18 text-3xl"
|
|
12008
12008
|
};
|
|
12009
12009
|
rarityBorderMap = {
|
|
12010
|
-
common: "border-
|
|
12011
|
-
uncommon: "border-
|
|
12012
|
-
rare: "border-
|
|
12013
|
-
epic: "border-
|
|
12014
|
-
legendary: "border-
|
|
12010
|
+
common: "border-muted",
|
|
12011
|
+
uncommon: "border-success",
|
|
12012
|
+
rare: "border-info",
|
|
12013
|
+
epic: "border-accent",
|
|
12014
|
+
legendary: "border-warning"
|
|
12015
12015
|
};
|
|
12016
12016
|
rarityGlowMap = {
|
|
12017
12017
|
common: "",
|
|
12018
12018
|
uncommon: "",
|
|
12019
|
-
rare: "shadow-
|
|
12020
|
-
epic: "shadow-
|
|
12021
|
-
legendary: "shadow-
|
|
12019
|
+
rare: "shadow-sm",
|
|
12020
|
+
epic: "shadow-lg",
|
|
12021
|
+
legendary: "shadow-lg"
|
|
12022
12022
|
};
|
|
12023
12023
|
ItemSlot.displayName = "ItemSlot";
|
|
12024
12024
|
}
|
|
@@ -12036,8 +12036,8 @@ function TurnIndicator({
|
|
|
12036
12036
|
"div",
|
|
12037
12037
|
{
|
|
12038
12038
|
className: cn(
|
|
12039
|
-
"inline-flex items-center rounded-
|
|
12040
|
-
"bg-
|
|
12039
|
+
"inline-flex items-center rounded-container",
|
|
12040
|
+
"bg-card/80 border border-muted font-medium text-foreground",
|
|
12041
12041
|
sizes.wrapper,
|
|
12042
12042
|
className
|
|
12043
12043
|
),
|
|
@@ -12045,19 +12045,19 @@ function TurnIndicator({
|
|
|
12045
12045
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-bold tabular-nums", children: [
|
|
12046
12046
|
"Turn ",
|
|
12047
12047
|
currentTurn,
|
|
12048
|
-
maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
12048
|
+
maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
12049
12049
|
"/",
|
|
12050
12050
|
maxTurns
|
|
12051
12051
|
] })
|
|
12052
12052
|
] }),
|
|
12053
12053
|
phase && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
12054
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
12055
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
12054
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
|
|
12055
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: phase })
|
|
12056
12056
|
] }),
|
|
12057
12057
|
activeTeam && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
12058
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
12059
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-
|
|
12060
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
12058
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
|
|
12059
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-success/20", sizes.dot) }),
|
|
12060
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-success", children: activeTeam })
|
|
12061
12061
|
] })
|
|
12062
12062
|
]
|
|
12063
12063
|
}
|
|
@@ -12076,10 +12076,10 @@ var init_TurnIndicator = __esm({
|
|
|
12076
12076
|
}
|
|
12077
12077
|
});
|
|
12078
12078
|
function getComboIntensity(combo) {
|
|
12079
|
-
if (combo >= 10) return "text-
|
|
12080
|
-
if (combo >= 7) return "text-
|
|
12081
|
-
if (combo >= 4) return "text-
|
|
12082
|
-
return "text-
|
|
12079
|
+
if (combo >= 10) return "text-error animate-pulse";
|
|
12080
|
+
if (combo >= 7) return "text-warning";
|
|
12081
|
+
if (combo >= 4) return "text-warning";
|
|
12082
|
+
return "text-foreground";
|
|
12083
12083
|
}
|
|
12084
12084
|
function getComboScale(combo) {
|
|
12085
12085
|
if (combo >= 10) return "scale-110";
|
|
@@ -12100,19 +12100,19 @@ function ComboCounter({
|
|
|
12100
12100
|
{
|
|
12101
12101
|
className: cn(
|
|
12102
12102
|
"inline-flex flex-col items-center justify-center",
|
|
12103
|
-
"rounded-
|
|
12103
|
+
"rounded-container bg-card/80 border border-muted px-3 py-1.5",
|
|
12104
12104
|
"transition-transform duration-200",
|
|
12105
12105
|
getComboScale(combo),
|
|
12106
12106
|
className
|
|
12107
12107
|
),
|
|
12108
12108
|
children: [
|
|
12109
12109
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-black tabular-nums leading-none", sizes.combo, getComboIntensity(combo)), children: combo }),
|
|
12110
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-
|
|
12111
|
-
multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-
|
|
12110
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-muted-foreground", sizes.label), children: "combo" }),
|
|
12111
|
+
multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-warning tabular-nums", sizes.multiplier), children: [
|
|
12112
12112
|
"x",
|
|
12113
12113
|
multiplier.toFixed(1)
|
|
12114
12114
|
] }),
|
|
12115
|
-
streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-
|
|
12115
|
+
streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.label), children: [
|
|
12116
12116
|
streak,
|
|
12117
12117
|
" streak"
|
|
12118
12118
|
] })
|
|
@@ -12148,8 +12148,8 @@ function XPBar({
|
|
|
12148
12148
|
"span",
|
|
12149
12149
|
{
|
|
12150
12150
|
className: cn(
|
|
12151
|
-
"flex-shrink-0 rounded-
|
|
12152
|
-
"bg-
|
|
12151
|
+
"flex-shrink-0 rounded-interactive font-bold",
|
|
12152
|
+
"bg-accent text-foreground border border-accent",
|
|
12153
12153
|
sizes.badge
|
|
12154
12154
|
),
|
|
12155
12155
|
children: [
|
|
@@ -12163,7 +12163,7 @@ function XPBar({
|
|
|
12163
12163
|
"div",
|
|
12164
12164
|
{
|
|
12165
12165
|
className: cn(
|
|
12166
|
-
"relative w-full overflow-hidden rounded-full bg-
|
|
12166
|
+
"relative w-full overflow-hidden rounded-full bg-muted border border-muted",
|
|
12167
12167
|
sizes.bar
|
|
12168
12168
|
),
|
|
12169
12169
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -12171,7 +12171,7 @@ function XPBar({
|
|
|
12171
12171
|
{
|
|
12172
12172
|
className: cn(
|
|
12173
12173
|
"absolute inset-y-0 left-0 rounded-full",
|
|
12174
|
-
"bg-gradient-to-r from-
|
|
12174
|
+
"bg-gradient-to-r from-accent to-info",
|
|
12175
12175
|
animated && "transition-all duration-500 ease-out"
|
|
12176
12176
|
),
|
|
12177
12177
|
style: { width: `${percentage}%` }
|
|
@@ -12179,7 +12179,7 @@ function XPBar({
|
|
|
12179
12179
|
)
|
|
12180
12180
|
}
|
|
12181
12181
|
),
|
|
12182
|
-
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-
|
|
12182
|
+
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.text), children: [
|
|
12183
12183
|
current,
|
|
12184
12184
|
" / ",
|
|
12185
12185
|
max,
|
|
@@ -12215,7 +12215,7 @@ function WaypointMarker({
|
|
|
12215
12215
|
"div",
|
|
12216
12216
|
{
|
|
12217
12217
|
className: cn(
|
|
12218
|
-
"absolute rounded-full border-2 border-
|
|
12218
|
+
"absolute rounded-full border-2 border-info animate-ping opacity-50",
|
|
12219
12219
|
sizes.ring
|
|
12220
12220
|
)
|
|
12221
12221
|
}
|
|
@@ -12224,7 +12224,7 @@ function WaypointMarker({
|
|
|
12224
12224
|
"div",
|
|
12225
12225
|
{
|
|
12226
12226
|
className: cn(
|
|
12227
|
-
"absolute rounded-full border-2 border-
|
|
12227
|
+
"absolute rounded-full border-2 border-info",
|
|
12228
12228
|
sizes.ring
|
|
12229
12229
|
)
|
|
12230
12230
|
}
|
|
@@ -12235,9 +12235,9 @@ function WaypointMarker({
|
|
|
12235
12235
|
className: cn(
|
|
12236
12236
|
"relative flex items-center justify-center rounded-full transition-all duration-200",
|
|
12237
12237
|
sizes.dot,
|
|
12238
|
-
completed && "bg-
|
|
12239
|
-
active && !completed && "bg-
|
|
12240
|
-
!active && !completed && "bg-
|
|
12238
|
+
completed && "bg-success text-foreground",
|
|
12239
|
+
active && !completed && "bg-info text-foreground",
|
|
12240
|
+
!active && !completed && "bg-muted"
|
|
12241
12241
|
),
|
|
12242
12242
|
children: completed ? checkIcon : icon
|
|
12243
12243
|
}
|
|
@@ -12249,7 +12249,7 @@ function WaypointMarker({
|
|
|
12249
12249
|
className: cn(
|
|
12250
12250
|
"text-center whitespace-nowrap",
|
|
12251
12251
|
sizes.label,
|
|
12252
|
-
completed ? "text-
|
|
12252
|
+
completed ? "text-success" : active ? "text-info" : "text-muted-foreground"
|
|
12253
12253
|
),
|
|
12254
12254
|
children: label
|
|
12255
12255
|
}
|
|
@@ -12290,7 +12290,7 @@ function StatusEffect({
|
|
|
12290
12290
|
"div",
|
|
12291
12291
|
{
|
|
12292
12292
|
className: cn(
|
|
12293
|
-
"relative flex items-center justify-center rounded border-2",
|
|
12293
|
+
"relative flex items-center justify-center rounded-interactive border-2",
|
|
12294
12294
|
sizes.container,
|
|
12295
12295
|
variantStyles7[variant]
|
|
12296
12296
|
),
|
|
@@ -12301,7 +12301,7 @@ function StatusEffect({
|
|
|
12301
12301
|
"span",
|
|
12302
12302
|
{
|
|
12303
12303
|
className: cn(
|
|
12304
|
-
"absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-
|
|
12304
|
+
"absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-foreground bg-background/60 leading-tight",
|
|
12305
12305
|
sizes.timer
|
|
12306
12306
|
),
|
|
12307
12307
|
children: formatDuration(duration)
|
|
@@ -12314,7 +12314,7 @@ function StatusEffect({
|
|
|
12314
12314
|
"span",
|
|
12315
12315
|
{
|
|
12316
12316
|
className: cn(
|
|
12317
|
-
"absolute flex items-center justify-center rounded-full bg-
|
|
12317
|
+
"absolute flex items-center justify-center rounded-full bg-card text-foreground font-bold leading-none",
|
|
12318
12318
|
sizes.badge
|
|
12319
12319
|
),
|
|
12320
12320
|
children: stacks
|
|
@@ -12333,9 +12333,9 @@ var init_StatusEffect = __esm({
|
|
|
12333
12333
|
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" }
|
|
12334
12334
|
};
|
|
12335
12335
|
variantStyles7 = {
|
|
12336
|
-
buff: "border-
|
|
12337
|
-
debuff: "border-
|
|
12338
|
-
neutral: "border-
|
|
12336
|
+
buff: "border-success bg-success/20",
|
|
12337
|
+
debuff: "border-error bg-error/20",
|
|
12338
|
+
neutral: "border-muted bg-muted/20"
|
|
12339
12339
|
};
|
|
12340
12340
|
StatusEffect.displayName = "StatusEffect";
|
|
12341
12341
|
}
|
|
@@ -12374,10 +12374,10 @@ var init_DamageNumber = __esm({
|
|
|
12374
12374
|
lg: "text-2xl"
|
|
12375
12375
|
};
|
|
12376
12376
|
typeStyles = {
|
|
12377
|
-
damage: "text-
|
|
12378
|
-
heal: "text-
|
|
12379
|
-
crit: "text-
|
|
12380
|
-
miss: "text-
|
|
12377
|
+
damage: "text-error font-bold",
|
|
12378
|
+
heal: "text-success font-bold",
|
|
12379
|
+
crit: "text-warning font-extrabold",
|
|
12380
|
+
miss: "text-muted-foreground italic"
|
|
12381
12381
|
};
|
|
12382
12382
|
floatKeyframes = `
|
|
12383
12383
|
@keyframes damageFloat {
|
|
@@ -12400,12 +12400,12 @@ function DialogueBubble({
|
|
|
12400
12400
|
"div",
|
|
12401
12401
|
{
|
|
12402
12402
|
className: cn(
|
|
12403
|
-
"flex items-start gap-3 rounded-
|
|
12403
|
+
"flex items-start gap-3 rounded-container bg-background/80 backdrop-blur-sm px-4 py-3 border border-border/10",
|
|
12404
12404
|
position === "top" ? "rounded-bl-none" : "rounded-tl-none",
|
|
12405
12405
|
className
|
|
12406
12406
|
),
|
|
12407
12407
|
children: [
|
|
12408
|
-
portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full overflow-hidden border-2 border-
|
|
12408
|
+
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(
|
|
12409
12409
|
"img",
|
|
12410
12410
|
{
|
|
12411
12411
|
src: portrait,
|
|
@@ -12414,8 +12414,8 @@ function DialogueBubble({
|
|
|
12414
12414
|
}
|
|
12415
12415
|
) }),
|
|
12416
12416
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 min-w-0", children: [
|
|
12417
|
-
speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-
|
|
12418
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-
|
|
12417
|
+
speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-warning", children: speaker }),
|
|
12418
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground leading-relaxed", children: text })
|
|
12419
12419
|
] })
|
|
12420
12420
|
]
|
|
12421
12421
|
}
|
|
@@ -12442,7 +12442,7 @@ function ChoiceButton({
|
|
|
12442
12442
|
disabled,
|
|
12443
12443
|
onClick,
|
|
12444
12444
|
className: cn(
|
|
12445
|
-
"w-full text-left px-4 py-2.5 rounded-
|
|
12445
|
+
"w-full text-left px-4 py-2.5 rounded-interactive border transition-all duration-150",
|
|
12446
12446
|
"flex items-center gap-2",
|
|
12447
12447
|
selected ? "bg-accent/15 border-accent text-foreground" : "bg-muted/40 border-border text-foreground hover:bg-muted hover:border-border",
|
|
12448
12448
|
disabled && "opacity-40 cursor-not-allowed hover:bg-muted/40 hover:border-border",
|
|
@@ -12495,7 +12495,7 @@ function ActionButton({
|
|
|
12495
12495
|
disabled: isDisabled,
|
|
12496
12496
|
onClick,
|
|
12497
12497
|
className: cn(
|
|
12498
|
-
"relative inline-flex items-center gap-1.5 rounded-
|
|
12498
|
+
"relative inline-flex items-center gap-1.5 rounded-interactive border font-medium overflow-hidden transition-colors duration-150",
|
|
12499
12499
|
sizes.button,
|
|
12500
12500
|
variantStyles8[variant],
|
|
12501
12501
|
isDisabled && "opacity-60 cursor-not-allowed",
|
|
@@ -12538,9 +12538,9 @@ var init_ActionButton = __esm({
|
|
|
12538
12538
|
init_cn();
|
|
12539
12539
|
init_Icon();
|
|
12540
12540
|
sizeMap13 = {
|
|
12541
|
-
sm: { button: "px-3
|
|
12542
|
-
md: { button: "px-4
|
|
12543
|
-
lg: { button: "
|
|
12541
|
+
sm: { button: "h-button-sm px-3 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
|
|
12542
|
+
md: { button: "h-button-md px-4 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
|
|
12543
|
+
lg: { button: "h-button-lg px-5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
|
|
12544
12544
|
};
|
|
12545
12545
|
variantStyles8 = {
|
|
12546
12546
|
primary: "bg-primary text-primary-foreground hover:bg-primary-hover border-primary",
|
|
@@ -12620,7 +12620,7 @@ function MiniMap({
|
|
|
12620
12620
|
"div",
|
|
12621
12621
|
{
|
|
12622
12622
|
className: cn(
|
|
12623
|
-
"relative inline-block border border-
|
|
12623
|
+
"relative inline-block border border-border/20 rounded-container",
|
|
12624
12624
|
className
|
|
12625
12625
|
),
|
|
12626
12626
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -15336,7 +15336,7 @@ function ActionTile({
|
|
|
15336
15336
|
{
|
|
15337
15337
|
display: "flex",
|
|
15338
15338
|
className: cn(
|
|
15339
|
-
"flex-col items-center gap-1 rounded-
|
|
15339
|
+
"flex-col items-center gap-1 rounded-container border-2 transition-all select-none",
|
|
15340
15340
|
config.px,
|
|
15341
15341
|
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",
|
|
15342
15342
|
className
|
|
@@ -16680,12 +16680,12 @@ function IsometricCanvas({
|
|
|
16680
16680
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
16681
16681
|
Box,
|
|
16682
16682
|
{
|
|
16683
|
-
className: cn("relative w-full overflow-hidden rounded-
|
|
16683
|
+
className: cn("relative w-full overflow-hidden rounded-container", className),
|
|
16684
16684
|
style: { height: viewportSize.height },
|
|
16685
16685
|
"data-testid": "game-canvas-empty",
|
|
16686
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex items-center justify-center h-full bg-[var(--color-card)] rounded-
|
|
16686
|
+
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: [
|
|
16687
16687
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "map", size: "xl" }),
|
|
16688
|
-
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-
|
|
16688
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: t("canvas.emptyMessage") || "No map data loaded" })
|
|
16689
16689
|
] }) })
|
|
16690
16690
|
}
|
|
16691
16691
|
);
|
|
@@ -17083,19 +17083,19 @@ function BattleBoard({
|
|
|
17083
17083
|
}
|
|
17084
17084
|
)
|
|
17085
17085
|
] }),
|
|
17086
|
-
gameResult && (gameOverOverlay ? gameOverOverlay(ctx) : /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-
|
|
17086
|
+
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: [
|
|
17087
17087
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17088
17088
|
Typography,
|
|
17089
17089
|
{
|
|
17090
17090
|
variant: "h2",
|
|
17091
17091
|
className: cn(
|
|
17092
17092
|
"text-4xl font-black tracking-widest uppercase",
|
|
17093
|
-
gameResult === "victory" ? "text-
|
|
17093
|
+
gameResult === "victory" ? "text-warning" : "text-error"
|
|
17094
17094
|
),
|
|
17095
17095
|
children: gameResult === "victory" ? t("battle.victory") : t("battle.defeat")
|
|
17096
17096
|
}
|
|
17097
17097
|
),
|
|
17098
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-
|
|
17098
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "body1", className: "text-muted-foreground", children: [
|
|
17099
17099
|
t("battle.turnsPlayed"),
|
|
17100
17100
|
": ",
|
|
17101
17101
|
currentTurn
|
|
@@ -21141,7 +21141,7 @@ function BuilderBoard({
|
|
|
21141
21141
|
backgroundPosition: "center"
|
|
21142
21142
|
},
|
|
21143
21143
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
21144
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
21144
|
+
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,
|
|
21145
21145
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
21146
21146
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
21147
21147
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -21179,7 +21179,7 @@ function BuilderBoard({
|
|
|
21179
21179
|
{
|
|
21180
21180
|
gap: "sm",
|
|
21181
21181
|
align: "center",
|
|
21182
|
-
className: `p-3 border-2 rounded ${result ? result.correct ? "border-
|
|
21182
|
+
className: `p-3 border-2 rounded ${result ? result.correct ? "border-success" : "border-error" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
|
|
21183
21183
|
onClick: () => handlePlaceComponent(slot.id),
|
|
21184
21184
|
children: [
|
|
21185
21185
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", className: "flex-1", children: [
|
|
@@ -21194,7 +21194,7 @@ function BuilderBoard({
|
|
|
21194
21194
|
] }) : null,
|
|
21195
21195
|
placedComp.label
|
|
21196
21196
|
] }),
|
|
21197
|
-
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-
|
|
21197
|
+
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-success" : "text-error" })
|
|
21198
21198
|
] }) : /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: t("builder.empty") })
|
|
21199
21199
|
]
|
|
21200
21200
|
},
|
|
@@ -21203,10 +21203,10 @@ function BuilderBoard({
|
|
|
21203
21203
|
}) })
|
|
21204
21204
|
] }) }),
|
|
21205
21205
|
submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
21206
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-
|
|
21206
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
|
|
21207
21207
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("builder.success") : entity.failMessage ?? t("builder.incorrect") })
|
|
21208
21208
|
] }) }),
|
|
21209
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
21209
|
+
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 }) }),
|
|
21210
21210
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
21211
21211
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allPlaced, children: [
|
|
21212
21212
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Wrench, size: "sm" }),
|
|
@@ -22828,7 +22828,7 @@ function CanvasEffectEngine({
|
|
|
22828
22828
|
flash && /* @__PURE__ */ jsxRuntime.jsx(
|
|
22829
22829
|
Box,
|
|
22830
22830
|
{
|
|
22831
|
-
className: "absolute inset-0 z-20 pointer-events-none rounded-
|
|
22831
|
+
className: "absolute inset-0 z-20 pointer-events-none rounded-container",
|
|
22832
22832
|
style: { backgroundColor: flash.color, opacity: flash.alpha }
|
|
22833
22833
|
}
|
|
22834
22834
|
),
|
|
@@ -22896,7 +22896,7 @@ function EmojiEffect({
|
|
|
22896
22896
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22897
22897
|
Box,
|
|
22898
22898
|
{
|
|
22899
|
-
className: "absolute rounded-
|
|
22899
|
+
className: "absolute rounded-pill animate-ping",
|
|
22900
22900
|
style: {
|
|
22901
22901
|
width: 48 * intensity,
|
|
22902
22902
|
height: 48 * intensity,
|
|
@@ -24713,7 +24713,7 @@ function ClassifierBoard({
|
|
|
24713
24713
|
backgroundPosition: "center"
|
|
24714
24714
|
},
|
|
24715
24715
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
24716
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
24716
|
+
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,
|
|
24717
24717
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
24718
24718
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
24719
24719
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -24728,7 +24728,7 @@ function ClassifierBoard({
|
|
|
24728
24728
|
/* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "md", children: categories.map((cat) => {
|
|
24729
24729
|
const catItems = items.filter((item) => assignments[item.id] === cat.id);
|
|
24730
24730
|
return /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
24731
|
-
cat.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-16 overflow-hidden rounded-
|
|
24731
|
+
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" }) }),
|
|
24732
24732
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { justify: "between", align: "center", children: [
|
|
24733
24733
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: cat.label }),
|
|
24734
24734
|
/* @__PURE__ */ jsxRuntime.jsx(Badge, { size: "sm", children: catItems.length })
|
|
@@ -24739,12 +24739,12 @@ function ClassifierBoard({
|
|
|
24739
24739
|
Badge,
|
|
24740
24740
|
{
|
|
24741
24741
|
size: "sm",
|
|
24742
|
-
className: `cursor-pointer ${result ? result.correct ? "border-
|
|
24742
|
+
className: `cursor-pointer ${result ? result.correct ? "border-success bg-success/10" : "border-error bg-error/10" : ""}`,
|
|
24743
24743
|
onClick: () => handleUnassign(item.id),
|
|
24744
24744
|
children: [
|
|
24745
24745
|
item.iconUrl && /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.iconUrl, alt: "", className: "w-3 h-3 object-contain inline-block" }),
|
|
24746
24746
|
item.label,
|
|
24747
|
-
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-
|
|
24747
|
+
result && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-success" : "text-error" })
|
|
24748
24748
|
]
|
|
24749
24749
|
},
|
|
24750
24750
|
item.id
|
|
@@ -24767,11 +24767,11 @@ function ClassifierBoard({
|
|
|
24767
24767
|
] }) }, cat.id);
|
|
24768
24768
|
}) }),
|
|
24769
24769
|
submitted && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
24770
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-
|
|
24770
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
|
|
24771
24771
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("classifier.allCorrect") : `${correctCount}/${items.length} ${t("classifier.correct")}` }),
|
|
24772
24772
|
!allCorrect && entity.failMessage && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-muted-foreground", children: entity.failMessage })
|
|
24773
24773
|
] }) }),
|
|
24774
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
24774
|
+
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 }) }),
|
|
24775
24775
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
24776
24776
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: !allAssigned, children: [
|
|
24777
24777
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
|
|
@@ -25819,7 +25819,7 @@ function CraftingRecipe({
|
|
|
25819
25819
|
Box,
|
|
25820
25820
|
{
|
|
25821
25821
|
className: cn(
|
|
25822
|
-
"flex flex-wrap items-center gap-3 rounded-
|
|
25822
|
+
"flex flex-wrap items-center gap-3 rounded-container bg-muted/50 border border-border/50 p-3",
|
|
25823
25823
|
className
|
|
25824
25824
|
),
|
|
25825
25825
|
children: [
|
|
@@ -25836,10 +25836,10 @@ function CraftingRecipe({
|
|
|
25836
25836
|
className: cn(!hasSufficient && "opacity-50")
|
|
25837
25837
|
}
|
|
25838
25838
|
) }),
|
|
25839
|
-
index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-
|
|
25839
|
+
index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "plus", size: "sm", className: "text-muted-foreground" })
|
|
25840
25840
|
] }, index);
|
|
25841
25841
|
}) }),
|
|
25842
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-
|
|
25842
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "arrow-right", size: "md", className: "text-muted-foreground" }),
|
|
25843
25843
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25844
25844
|
ItemSlot,
|
|
25845
25845
|
{
|
|
@@ -25927,7 +25927,7 @@ function DPad({
|
|
|
25927
25927
|
createButton("up"),
|
|
25928
25928
|
/* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
25929
25929
|
createButton("left"),
|
|
25930
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-
|
|
25930
|
+
/* @__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" }) }),
|
|
25931
25931
|
createButton("right"),
|
|
25932
25932
|
/* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
25933
25933
|
createButton("down"),
|
|
@@ -30112,7 +30112,7 @@ function StatBadge({
|
|
|
30112
30112
|
"div",
|
|
30113
30113
|
{
|
|
30114
30114
|
className: cn(
|
|
30115
|
-
"inline-flex items-center gap-2 rounded-
|
|
30115
|
+
"inline-flex items-center gap-2 rounded-container border backdrop-blur-sm",
|
|
30116
30116
|
sizeMap17[size] ?? sizeMap17.md,
|
|
30117
30117
|
variantMap2[variant] ?? variantMap2.default,
|
|
30118
30118
|
className
|
|
@@ -30258,10 +30258,10 @@ function QuestTracker({
|
|
|
30258
30258
|
Box,
|
|
30259
30259
|
{
|
|
30260
30260
|
className: cn(
|
|
30261
|
-
"flex items-start gap-3 rounded-
|
|
30262
|
-
isActive && !isCompleted && "bg-
|
|
30263
|
-
isCompleted && "bg-
|
|
30264
|
-
!isActive && !isCompleted && "bg-
|
|
30261
|
+
"flex items-start gap-3 rounded-container px-3 py-2 transition-colors",
|
|
30262
|
+
isActive && !isCompleted && "bg-info/20 border border-info/50",
|
|
30263
|
+
isCompleted && "bg-success/10 border border-success/30 opacity-70",
|
|
30264
|
+
!isActive && !isCompleted && "bg-muted/30 border border-border/30"
|
|
30265
30265
|
),
|
|
30266
30266
|
children: [
|
|
30267
30267
|
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-shrink-0 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -30279,9 +30279,9 @@ function QuestTracker({
|
|
|
30279
30279
|
variant: "body2",
|
|
30280
30280
|
className: cn(
|
|
30281
30281
|
"font-medium truncate",
|
|
30282
|
-
isCompleted && "line-through text-
|
|
30283
|
-
isActive && !isCompleted && "text-
|
|
30284
|
-
!isActive && !isCompleted && "text-
|
|
30282
|
+
isCompleted && "line-through text-muted-foreground",
|
|
30283
|
+
isActive && !isCompleted && "text-info",
|
|
30284
|
+
!isActive && !isCompleted && "text-muted-foreground"
|
|
30285
30285
|
),
|
|
30286
30286
|
children: quest.title
|
|
30287
30287
|
}
|
|
@@ -30299,7 +30299,7 @@ function QuestTracker({
|
|
|
30299
30299
|
Typography,
|
|
30300
30300
|
{
|
|
30301
30301
|
variant: "caption",
|
|
30302
|
-
className: "text-
|
|
30302
|
+
className: "text-muted-foreground mt-1",
|
|
30303
30303
|
children: [
|
|
30304
30304
|
quest.progress,
|
|
30305
30305
|
" / ",
|
|
@@ -30356,14 +30356,14 @@ function PowerupSlots({
|
|
|
30356
30356
|
{
|
|
30357
30357
|
className: cn(
|
|
30358
30358
|
"absolute -bottom-1 left-1/2 -translate-x-1/2",
|
|
30359
|
-
"rounded px-1 py-px",
|
|
30360
|
-
"bg-
|
|
30359
|
+
"rounded-interactive px-1 py-px",
|
|
30360
|
+
"bg-background/80 border border-border"
|
|
30361
30361
|
),
|
|
30362
30362
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
30363
30363
|
Typography,
|
|
30364
30364
|
{
|
|
30365
30365
|
variant: "caption",
|
|
30366
|
-
className: "text-[9px] font-mono font-bold text-
|
|
30366
|
+
className: "text-[9px] font-mono font-bold text-warning whitespace-nowrap",
|
|
30367
30367
|
children: formatTime2(powerup.remainingTime)
|
|
30368
30368
|
}
|
|
30369
30369
|
)
|
|
@@ -30396,6 +30396,8 @@ function GameCanvas2D({
|
|
|
30396
30396
|
height = 600,
|
|
30397
30397
|
onDraw,
|
|
30398
30398
|
onTick,
|
|
30399
|
+
tickEvent,
|
|
30400
|
+
drawEvent,
|
|
30399
30401
|
fps = 60,
|
|
30400
30402
|
className
|
|
30401
30403
|
}) {
|
|
@@ -30403,10 +30405,17 @@ function GameCanvas2D({
|
|
|
30403
30405
|
const rafRef = React98__namespace.useRef(0);
|
|
30404
30406
|
const frameRef = React98__namespace.useRef(0);
|
|
30405
30407
|
const lastTimeRef = React98__namespace.useRef(0);
|
|
30408
|
+
const emit = useEmitEvent();
|
|
30406
30409
|
const onDrawRef = React98__namespace.useRef(onDraw);
|
|
30407
30410
|
onDrawRef.current = onDraw;
|
|
30408
30411
|
const onTickRef = React98__namespace.useRef(onTick);
|
|
30409
30412
|
onTickRef.current = onTick;
|
|
30413
|
+
const tickEventRef = React98__namespace.useRef(tickEvent);
|
|
30414
|
+
tickEventRef.current = tickEvent;
|
|
30415
|
+
const drawEventRef = React98__namespace.useRef(drawEvent);
|
|
30416
|
+
drawEventRef.current = drawEvent;
|
|
30417
|
+
const emitRef = React98__namespace.useRef(emit);
|
|
30418
|
+
emitRef.current = emit;
|
|
30410
30419
|
React98__namespace.useEffect(() => {
|
|
30411
30420
|
const canvas = canvasRef.current;
|
|
30412
30421
|
if (!canvas) return;
|
|
@@ -30423,8 +30432,15 @@ function GameCanvas2D({
|
|
|
30423
30432
|
if (elapsed >= interval) {
|
|
30424
30433
|
const dt = elapsed / 1e3;
|
|
30425
30434
|
lastTimeRef.current = timestamp - elapsed % interval;
|
|
30435
|
+
const frame = frameRef.current;
|
|
30426
30436
|
onTickRef.current?.(dt);
|
|
30427
|
-
|
|
30437
|
+
if (tickEventRef.current) {
|
|
30438
|
+
emitRef.current(tickEventRef.current, { dt, frame });
|
|
30439
|
+
}
|
|
30440
|
+
onDrawRef.current?.(ctx, frame);
|
|
30441
|
+
if (drawEventRef.current) {
|
|
30442
|
+
emitRef.current(drawEventRef.current, { frame });
|
|
30443
|
+
}
|
|
30428
30444
|
frameRef.current += 1;
|
|
30429
30445
|
}
|
|
30430
30446
|
rafRef.current = requestAnimationFrame(loop);
|
|
@@ -30450,6 +30466,7 @@ var init_GameCanvas2D = __esm({
|
|
|
30450
30466
|
"use client";
|
|
30451
30467
|
init_cn();
|
|
30452
30468
|
init_Box();
|
|
30469
|
+
init_useEventBus();
|
|
30453
30470
|
GameCanvas2D.displayName = "GameCanvas2D";
|
|
30454
30471
|
}
|
|
30455
30472
|
});
|
|
@@ -30468,7 +30485,7 @@ function HealthPanel({
|
|
|
30468
30485
|
Box,
|
|
30469
30486
|
{
|
|
30470
30487
|
className: cn(
|
|
30471
|
-
"rounded-
|
|
30488
|
+
"rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm",
|
|
30472
30489
|
sizes.padding,
|
|
30473
30490
|
className
|
|
30474
30491
|
),
|
|
@@ -30479,7 +30496,7 @@ function HealthPanel({
|
|
|
30479
30496
|
{
|
|
30480
30497
|
variant: "caption",
|
|
30481
30498
|
weight: "bold",
|
|
30482
|
-
className: "text-
|
|
30499
|
+
className: "text-muted-foreground uppercase tracking-wider",
|
|
30483
30500
|
children: label
|
|
30484
30501
|
}
|
|
30485
30502
|
),
|
|
@@ -30500,7 +30517,7 @@ function HealthPanel({
|
|
|
30500
30517
|
as: "span",
|
|
30501
30518
|
variant: "caption",
|
|
30502
30519
|
weight: "bold",
|
|
30503
|
-
className: "text-
|
|
30520
|
+
className: "text-info ml-1",
|
|
30504
30521
|
children: [
|
|
30505
30522
|
"+",
|
|
30506
30523
|
shield
|
|
@@ -30525,14 +30542,14 @@ function HealthPanel({
|
|
|
30525
30542
|
Box,
|
|
30526
30543
|
{
|
|
30527
30544
|
className: cn(
|
|
30528
|
-
"relative overflow-hidden rounded-
|
|
30545
|
+
"relative overflow-hidden rounded-container bg-muted",
|
|
30529
30546
|
size === "sm" ? "h-1" : size === "md" ? "h-1.5" : "h-2",
|
|
30530
30547
|
"w-full"
|
|
30531
30548
|
),
|
|
30532
30549
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
30533
30550
|
Box,
|
|
30534
30551
|
{
|
|
30535
|
-
className: "absolute inset-y-0 left-0 rounded-
|
|
30552
|
+
className: "absolute inset-y-0 left-0 rounded-container bg-info transition-all duration-300",
|
|
30536
30553
|
style: { width: `${Math.min(100, shield / max * 100)}%` }
|
|
30537
30554
|
}
|
|
30538
30555
|
)
|
|
@@ -30591,7 +30608,7 @@ function ScoreBoard({
|
|
|
30591
30608
|
Card,
|
|
30592
30609
|
{
|
|
30593
30610
|
className: cn(
|
|
30594
|
-
"bg-[var(--color-card)]/90 border-
|
|
30611
|
+
"bg-[var(--color-card)]/90 border-border backdrop-blur-sm",
|
|
30595
30612
|
className
|
|
30596
30613
|
),
|
|
30597
30614
|
children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex items-center gap-3 flex-wrap", children: [
|
|
@@ -30708,7 +30725,7 @@ function TurnPanel({
|
|
|
30708
30725
|
Box,
|
|
30709
30726
|
{
|
|
30710
30727
|
className: cn(
|
|
30711
|
-
"flex items-center gap-3 rounded-
|
|
30728
|
+
"flex items-center gap-3 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-2",
|
|
30712
30729
|
className
|
|
30713
30730
|
),
|
|
30714
30731
|
children: [
|
|
@@ -30760,7 +30777,7 @@ function EnemyPlate({
|
|
|
30760
30777
|
Box,
|
|
30761
30778
|
{
|
|
30762
30779
|
className: cn(
|
|
30763
|
-
"inline-flex flex-col gap-1 rounded-
|
|
30780
|
+
"inline-flex flex-col gap-1 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-1.5",
|
|
30764
30781
|
"min-w-[120px]",
|
|
30765
30782
|
className
|
|
30766
30783
|
),
|
|
@@ -30854,7 +30871,7 @@ function UnitCommandBar({
|
|
|
30854
30871
|
Box,
|
|
30855
30872
|
{
|
|
30856
30873
|
className: cn(
|
|
30857
|
-
"flex items-center gap-1.5 rounded-
|
|
30874
|
+
"flex items-center gap-1.5 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-2 py-1.5",
|
|
30858
30875
|
className
|
|
30859
30876
|
),
|
|
30860
30877
|
children: commands.map((command, i) => /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "flex flex-col items-center gap-0.5", children: [
|
|
@@ -30939,8 +30956,8 @@ function GameHud({
|
|
|
30939
30956
|
className: cn(
|
|
30940
30957
|
"relative z-10",
|
|
30941
30958
|
positionMap[position],
|
|
30942
|
-
transparent && "bg-gradient-to-b from-
|
|
30943
|
-
position === "bottom" && "bg-gradient-to-t from-
|
|
30959
|
+
transparent && "bg-gradient-to-b from-background/50 to-transparent",
|
|
30960
|
+
position === "bottom" && "bg-gradient-to-t from-background/50 to-transparent",
|
|
30944
30961
|
className
|
|
30945
30962
|
),
|
|
30946
30963
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsx(StatBadge, { ...stat, size }, i)) })
|
|
@@ -31098,8 +31115,8 @@ function DialogueBox({
|
|
|
31098
31115
|
tabIndex: 0,
|
|
31099
31116
|
role: "dialog",
|
|
31100
31117
|
"aria-label": "Dialogue",
|
|
31101
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 my-4 bg-[var(--color-card)] bg-opacity-95 border-2 border-
|
|
31102
|
-
dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-
|
|
31118
|
+
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: [
|
|
31119
|
+
dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
31103
31120
|
"img",
|
|
31104
31121
|
{
|
|
31105
31122
|
src: dialogue.portrait,
|
|
@@ -31109,7 +31126,7 @@ function DialogueBox({
|
|
|
31109
31126
|
}
|
|
31110
31127
|
) }),
|
|
31111
31128
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 p-4", children: [
|
|
31112
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
31129
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-warning font-bold mb-2", children: dialogue.speaker }),
|
|
31113
31130
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-lg leading-relaxed min-h-[60px]", children: [
|
|
31114
31131
|
displayedText,
|
|
31115
31132
|
isTyping && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children: "\u258C" })
|
|
@@ -31119,9 +31136,9 @@ function DialogueBox({
|
|
|
31119
31136
|
{
|
|
31120
31137
|
type: "button",
|
|
31121
31138
|
className: cn(
|
|
31122
|
-
"block w-full text-left px-4 py-2 rounded transition-colors",
|
|
31123
|
-
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-
|
|
31124
|
-
selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-
|
|
31139
|
+
"block w-full text-left px-4 py-2 rounded-interactive transition-colors",
|
|
31140
|
+
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-warning",
|
|
31141
|
+
selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-warning" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
|
|
31125
31142
|
),
|
|
31126
31143
|
onClick: (e) => {
|
|
31127
31144
|
e.stopPropagation();
|
|
@@ -31129,7 +31146,7 @@ function DialogueBox({
|
|
|
31129
31146
|
onChoice?.(choice);
|
|
31130
31147
|
},
|
|
31131
31148
|
children: [
|
|
31132
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
31149
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground mr-2", children: [
|
|
31133
31150
|
index + 1,
|
|
31134
31151
|
"."
|
|
31135
31152
|
] }),
|
|
@@ -31138,7 +31155,7 @@ function DialogueBox({
|
|
|
31138
31155
|
},
|
|
31139
31156
|
index
|
|
31140
31157
|
)) }),
|
|
31141
|
-
!isTyping && !dialogue.choices?.length && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-
|
|
31158
|
+
!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..." })
|
|
31142
31159
|
] })
|
|
31143
31160
|
] }) })
|
|
31144
31161
|
}
|
|
@@ -31241,7 +31258,7 @@ function InventoryPanel({
|
|
|
31241
31258
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
31242
31259
|
"div",
|
|
31243
31260
|
{
|
|
31244
|
-
className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-
|
|
31261
|
+
className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-container border border-border",
|
|
31245
31262
|
style: {
|
|
31246
31263
|
gridTemplateColumns: `repeat(${safeColumns}, ${slotSize}px)`,
|
|
31247
31264
|
gridTemplateRows: `repeat(${rows}, ${slotSize}px)`
|
|
@@ -31253,8 +31270,8 @@ function InventoryPanel({
|
|
|
31253
31270
|
className: cn(
|
|
31254
31271
|
"relative flex items-center justify-center",
|
|
31255
31272
|
"bg-[var(--color-card)] border rounded transition-colors",
|
|
31256
|
-
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-
|
|
31257
|
-
selectedSlot === index ? "border-
|
|
31273
|
+
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-info",
|
|
31274
|
+
selectedSlot === index ? "border-warning bg-[var(--color-surface,#374151)]" : "border-muted"
|
|
31258
31275
|
),
|
|
31259
31276
|
style: { width: slotSize, height: slotSize },
|
|
31260
31277
|
onClick: () => handleSlotClick(index),
|
|
@@ -31273,8 +31290,8 @@ function InventoryPanel({
|
|
|
31273
31290
|
className: "w-8 h-8 object-contain",
|
|
31274
31291
|
style: { imageRendering: "pixelated" }
|
|
31275
31292
|
}
|
|
31276
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-
|
|
31277
|
-
item.quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-0 right-0 bg-
|
|
31293
|
+
) : /* @__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() }),
|
|
31294
|
+
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 })
|
|
31278
31295
|
] })
|
|
31279
31296
|
},
|
|
31280
31297
|
index
|
|
@@ -31284,7 +31301,7 @@ function InventoryPanel({
|
|
|
31284
31301
|
showTooltips && hoveredItem && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
31285
31302
|
"div",
|
|
31286
31303
|
{
|
|
31287
|
-
className: "fixed z-50 bg-[var(--color-card)] border border-
|
|
31304
|
+
className: "fixed z-50 bg-[var(--color-card)] border border-border rounded-container p-2 shadow-elevation-card pointer-events-none",
|
|
31288
31305
|
style: {
|
|
31289
31306
|
left: tooltipPosition.x,
|
|
31290
31307
|
top: tooltipPosition.y,
|
|
@@ -31292,8 +31309,8 @@ function InventoryPanel({
|
|
|
31292
31309
|
},
|
|
31293
31310
|
children: [
|
|
31294
31311
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-[var(--color-foreground)]", children: hoveredItem.name || hoveredItem.type }),
|
|
31295
|
-
hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-
|
|
31296
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-
|
|
31312
|
+
hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground mt-1", children: hoveredItem.description }),
|
|
31313
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground mt-1", children: [
|
|
31297
31314
|
"Quantity: ",
|
|
31298
31315
|
hoveredItem.quantity
|
|
31299
31316
|
] })
|
|
@@ -31371,7 +31388,7 @@ function GameMenu({
|
|
|
31371
31388
|
children: title
|
|
31372
31389
|
}
|
|
31373
31390
|
),
|
|
31374
|
-
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-
|
|
31391
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
|
|
31375
31392
|
] }),
|
|
31376
31393
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
31377
31394
|
"button",
|
|
@@ -31379,10 +31396,10 @@ function GameMenu({
|
|
|
31379
31396
|
onClick: () => handleOptionClick(option),
|
|
31380
31397
|
disabled: option.disabled,
|
|
31381
31398
|
className: cn(
|
|
31382
|
-
"w-full py-4 px-8 rounded-
|
|
31399
|
+
"w-full py-4 px-8 rounded-container border-2 font-bold text-lg",
|
|
31383
31400
|
"transition-all duration-200 transform",
|
|
31384
31401
|
"hover:scale-105 active:scale-95",
|
|
31385
|
-
"focus:outline-none focus:ring-4 focus:ring-
|
|
31402
|
+
"focus:outline-none focus:ring-4 focus:ring-foreground/25",
|
|
31386
31403
|
variantMap3[option.variant ?? "secondary"] ?? variantMap3.secondary,
|
|
31387
31404
|
option.disabled && "opacity-50 cursor-not-allowed hover:scale-100"
|
|
31388
31405
|
),
|
|
@@ -31394,8 +31411,8 @@ function GameMenu({
|
|
|
31394
31411
|
index
|
|
31395
31412
|
)) }),
|
|
31396
31413
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none overflow-hidden", children: [
|
|
31397
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-
|
|
31398
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-
|
|
31414
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
|
|
31415
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
|
|
31399
31416
|
] })
|
|
31400
31417
|
]
|
|
31401
31418
|
}
|
|
@@ -31408,9 +31425,9 @@ var init_GameMenu = __esm({
|
|
|
31408
31425
|
init_cn();
|
|
31409
31426
|
init_useEventBus();
|
|
31410
31427
|
variantMap3 = {
|
|
31411
|
-
primary: "bg-[var(--color-primary)] hover:bg-
|
|
31412
|
-
secondary: "bg-[var(--color-surface,#374151)] hover:bg-
|
|
31413
|
-
ghost: "bg-transparent hover:bg-
|
|
31428
|
+
primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info shadow-lg shadow-info/25",
|
|
31429
|
+
secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
|
|
31430
|
+
ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
|
|
31414
31431
|
};
|
|
31415
31432
|
GameMenu.displayName = "GameMenu";
|
|
31416
31433
|
}
|
|
@@ -31478,13 +31495,13 @@ function GameOverScreen({
|
|
|
31478
31495
|
children: title
|
|
31479
31496
|
}
|
|
31480
31497
|
),
|
|
31481
|
-
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-
|
|
31482
|
-
isNewHighScore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 px-6 py-2 bg-
|
|
31498
|
+
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-muted-foreground mb-8 text-center max-w-md", children: message }),
|
|
31499
|
+
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}" }) }),
|
|
31483
31500
|
stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
31484
31501
|
"div",
|
|
31485
31502
|
{
|
|
31486
31503
|
className: cn(
|
|
31487
|
-
"mb-8 p-6 rounded-
|
|
31504
|
+
"mb-8 p-6 rounded-container border-2 bg-background/30",
|
|
31488
31505
|
colors.accent
|
|
31489
31506
|
),
|
|
31490
31507
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: stats.map((stat, index) => {
|
|
@@ -31493,7 +31510,7 @@ function GameOverScreen({
|
|
|
31493
31510
|
displayValue = formatTime3(displayValue);
|
|
31494
31511
|
}
|
|
31495
31512
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
31496
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
31513
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-sm mb-1", children: stat.label }),
|
|
31497
31514
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-2xl font-bold flex items-center justify-center gap-2", children: [
|
|
31498
31515
|
stat.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.icon }),
|
|
31499
31516
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: displayValue })
|
|
@@ -31507,10 +31524,10 @@ function GameOverScreen({
|
|
|
31507
31524
|
{
|
|
31508
31525
|
onClick: () => handleActionClick(action),
|
|
31509
31526
|
className: cn(
|
|
31510
|
-
"px-8 py-4 rounded-
|
|
31527
|
+
"px-8 py-4 rounded-container border-2 font-bold text-lg",
|
|
31511
31528
|
"transition-all duration-200",
|
|
31512
31529
|
"hover:scale-105 active:scale-95",
|
|
31513
|
-
"focus:outline-none focus:ring-4 focus:ring-
|
|
31530
|
+
"focus:outline-none focus:ring-4 focus:ring-foreground/25",
|
|
31514
31531
|
buttonVariants[action.variant ?? "secondary"]
|
|
31515
31532
|
),
|
|
31516
31533
|
children: action.label
|
|
@@ -31529,25 +31546,25 @@ var init_GameOverScreen = __esm({
|
|
|
31529
31546
|
init_useEventBus();
|
|
31530
31547
|
variantColors = {
|
|
31531
31548
|
victory: {
|
|
31532
|
-
bg: "from-
|
|
31533
|
-
title: "text-
|
|
31534
|
-
accent: "border-
|
|
31549
|
+
bg: "from-success/90 to-success/90",
|
|
31550
|
+
title: "text-success",
|
|
31551
|
+
accent: "border-success"
|
|
31535
31552
|
},
|
|
31536
31553
|
defeat: {
|
|
31537
|
-
bg: "from-
|
|
31538
|
-
title: "text-
|
|
31539
|
-
accent: "border-
|
|
31554
|
+
bg: "from-error/90 to-background/90",
|
|
31555
|
+
title: "text-error",
|
|
31556
|
+
accent: "border-error"
|
|
31540
31557
|
},
|
|
31541
31558
|
neutral: {
|
|
31542
|
-
bg: "from-
|
|
31543
|
-
title: "text-
|
|
31544
|
-
accent: "border-
|
|
31559
|
+
bg: "from-muted/90 to-background/90",
|
|
31560
|
+
title: "text-foreground",
|
|
31561
|
+
accent: "border-muted"
|
|
31545
31562
|
}
|
|
31546
31563
|
};
|
|
31547
31564
|
buttonVariants = {
|
|
31548
|
-
primary: "bg-[var(--color-primary)] hover:bg-
|
|
31549
|
-
secondary: "bg-[var(--color-surface,#374151)] hover:bg-
|
|
31550
|
-
ghost: "bg-transparent hover:bg-
|
|
31565
|
+
primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info",
|
|
31566
|
+
secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
|
|
31567
|
+
ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
|
|
31551
31568
|
};
|
|
31552
31569
|
GameOverScreen.displayName = "GameOverScreen";
|
|
31553
31570
|
}
|
|
@@ -31781,7 +31798,7 @@ function PlatformerCanvas({
|
|
|
31781
31798
|
{
|
|
31782
31799
|
ref: canvasRef,
|
|
31783
31800
|
style: { width: canvasWidth, height: canvasHeight },
|
|
31784
|
-
className: cn("block rounded-
|
|
31801
|
+
className: cn("block rounded-container border border-border/10", className),
|
|
31785
31802
|
"data-testid": "platformer-canvas",
|
|
31786
31803
|
tabIndex: 0
|
|
31787
31804
|
}
|
|
@@ -38921,7 +38938,7 @@ function DebuggerBoard({
|
|
|
38921
38938
|
backgroundPosition: "center"
|
|
38922
38939
|
},
|
|
38923
38940
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
38924
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
38941
|
+
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,
|
|
38925
38942
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
38926
38943
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
38927
38944
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "sm" }),
|
|
@@ -38934,11 +38951,11 @@ function DebuggerBoard({
|
|
|
38934
38951
|
const isFlagged = flaggedLines.has(line.id);
|
|
38935
38952
|
let lineStyle = "";
|
|
38936
38953
|
if (submitted) {
|
|
38937
|
-
if (line.isBug && isFlagged) lineStyle = "bg-
|
|
38938
|
-
else if (line.isBug && !isFlagged) lineStyle = "bg-
|
|
38939
|
-
else if (!line.isBug && isFlagged) lineStyle = "bg-
|
|
38954
|
+
if (line.isBug && isFlagged) lineStyle = "bg-success/10";
|
|
38955
|
+
else if (line.isBug && !isFlagged) lineStyle = "bg-warning/10";
|
|
38956
|
+
else if (!line.isBug && isFlagged) lineStyle = "bg-error/10";
|
|
38940
38957
|
} else if (isFlagged) {
|
|
38941
|
-
lineStyle = "bg-
|
|
38958
|
+
lineStyle = "bg-error/10";
|
|
38942
38959
|
}
|
|
38943
38960
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
38944
38961
|
HStack,
|
|
@@ -38951,8 +38968,8 @@ function DebuggerBoard({
|
|
|
38951
38968
|
/* @__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 }) }),
|
|
38952
38969
|
/* @__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 }) }),
|
|
38953
38970
|
/* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "w-8 flex-shrink-0 flex items-center justify-center", children: [
|
|
38954
|
-
isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-
|
|
38955
|
-
submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-
|
|
38971
|
+
isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-error" }),
|
|
38972
|
+
submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-warning" })
|
|
38956
38973
|
] })
|
|
38957
38974
|
]
|
|
38958
38975
|
},
|
|
@@ -38967,7 +38984,7 @@ function DebuggerBoard({
|
|
|
38967
38984
|
{
|
|
38968
38985
|
icon: flaggedLines.has(line.id) ? LucideIcons2.CheckCircle : LucideIcons2.XCircle,
|
|
38969
38986
|
size: "xs",
|
|
38970
|
-
className: flaggedLines.has(line.id) ? "text-
|
|
38987
|
+
className: flaggedLines.has(line.id) ? "text-success mt-0.5" : "text-warning mt-0.5"
|
|
38971
38988
|
}
|
|
38972
38989
|
),
|
|
38973
38990
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", children: [
|
|
@@ -38976,7 +38993,7 @@ function DebuggerBoard({
|
|
|
38976
38993
|
] })
|
|
38977
38994
|
] }, line.id))
|
|
38978
38995
|
] }) }),
|
|
38979
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
38996
|
+
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 }) }),
|
|
38980
38997
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
38981
38998
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, disabled: flaggedLines.size === 0, children: [
|
|
38982
38999
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Send, size: "sm" }),
|
|
@@ -39699,7 +39716,7 @@ function LinearView({
|
|
|
39699
39716
|
className
|
|
39700
39717
|
}) {
|
|
39701
39718
|
const currentIdx = trait.states.indexOf(trait.currentState);
|
|
39702
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
39719
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
39703
39720
|
trait.description && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: trait.description }),
|
|
39704
39721
|
/* @__PURE__ */ jsxRuntime.jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
39705
39722
|
const isDone = i < currentIdx;
|
|
@@ -39721,10 +39738,10 @@ function LinearView({
|
|
|
39721
39738
|
{
|
|
39722
39739
|
display: "inline-flex",
|
|
39723
39740
|
className: cn(
|
|
39724
|
-
"items-center justify-center rounded-
|
|
39741
|
+
"items-center justify-center rounded-pill px-3 py-1 border-2 transition-all",
|
|
39725
39742
|
SIZE_CONFIG2[size || "md"].fontSize,
|
|
39726
39743
|
isDone && "bg-success/20 border-success text-success",
|
|
39727
|
-
isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-
|
|
39744
|
+
isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-elevation-card shadow-primary/20",
|
|
39728
39745
|
!isDone && !isCurrent && "bg-muted border-border text-muted-foreground"
|
|
39729
39746
|
),
|
|
39730
39747
|
children: [
|
|
@@ -39746,7 +39763,7 @@ function CompactView({
|
|
|
39746
39763
|
const { t } = useTranslate();
|
|
39747
39764
|
const config = SIZE_CONFIG2[size || "md"];
|
|
39748
39765
|
const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
|
|
39749
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
39766
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
39750
39767
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
|
|
39751
39768
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
|
|
39752
39769
|
/* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
|
|
@@ -39782,7 +39799,7 @@ function FullView({
|
|
|
39782
39799
|
const { t } = useTranslate();
|
|
39783
39800
|
const config = SIZE_CONFIG2[size || "md"];
|
|
39784
39801
|
const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
|
|
39785
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-
|
|
39802
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
39786
39803
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center justify-between", children: [
|
|
39787
39804
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
|
|
39788
39805
|
/* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
|
|
@@ -39796,9 +39813,9 @@ function FullView({
|
|
|
39796
39813
|
{
|
|
39797
39814
|
display: "flex",
|
|
39798
39815
|
className: cn(
|
|
39799
|
-
"items-center justify-center rounded-
|
|
39816
|
+
"items-center justify-center rounded-container border-2 transition-all px-2",
|
|
39800
39817
|
config.nodeSize,
|
|
39801
|
-
isCurrent && "bg-primary/20 border-primary shadow-
|
|
39818
|
+
isCurrent && "bg-primary/20 border-primary shadow-elevation-card shadow-primary/20",
|
|
39802
39819
|
!isCurrent && hasOutgoing && "bg-muted border-border hover:border-muted-foreground",
|
|
39803
39820
|
!isCurrent && !hasOutgoing && "bg-background border-border opacity-60",
|
|
39804
39821
|
onStateClick && "cursor-pointer"
|
|
@@ -40228,7 +40245,7 @@ function EventHandlerBoard({
|
|
|
40228
40245
|
backgroundPosition: "center"
|
|
40229
40246
|
},
|
|
40230
40247
|
children: [
|
|
40231
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
40248
|
+
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,
|
|
40232
40249
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
40233
40250
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
40234
40251
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
|
|
@@ -40243,7 +40260,7 @@ function EventHandlerBoard({
|
|
|
40243
40260
|
Box,
|
|
40244
40261
|
{
|
|
40245
40262
|
className: cn(
|
|
40246
|
-
"p-3 rounded-
|
|
40263
|
+
"p-3 rounded-container border-2 cursor-pointer transition-all hover:scale-105",
|
|
40247
40264
|
selectedObjectId === obj.id ? "border-primary bg-primary/10" : "border-border bg-card hover:border-muted-foreground"
|
|
40248
40265
|
),
|
|
40249
40266
|
onClick: () => setSelectedObjectId(obj.id),
|
|
@@ -40265,10 +40282,10 @@ function EventHandlerBoard({
|
|
|
40265
40282
|
}
|
|
40266
40283
|
),
|
|
40267
40284
|
eventLog.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(EventLog, { entries: eventLog }),
|
|
40268
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
40285
|
+
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") }) }),
|
|
40269
40286
|
playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
40270
|
-
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
40271
|
-
showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
40287
|
+
/* @__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) }) }),
|
|
40288
|
+
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: [
|
|
40272
40289
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
40273
40290
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
40274
40291
|
] }) })
|
|
@@ -43441,7 +43458,7 @@ function NegotiatorBoard({
|
|
|
43441
43458
|
backgroundPosition: "center"
|
|
43442
43459
|
},
|
|
43443
43460
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
43444
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
43461
|
+
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,
|
|
43445
43462
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
43446
43463
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
43447
43464
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description }),
|
|
@@ -43487,7 +43504,7 @@ function NegotiatorBoard({
|
|
|
43487
43504
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: "vs" }),
|
|
43488
43505
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: getActionLabel(round.opponentAction) }),
|
|
43489
43506
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.ArrowRight, size: "xs" }),
|
|
43490
|
-
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-
|
|
43507
|
+
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", weight: "bold", className: "text-success", children: [
|
|
43491
43508
|
"+",
|
|
43492
43509
|
round.playerPayoff
|
|
43493
43510
|
] }),
|
|
@@ -43498,7 +43515,7 @@ function NegotiatorBoard({
|
|
|
43498
43515
|
] }, round.round))
|
|
43499
43516
|
] }) }),
|
|
43500
43517
|
isComplete && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", children: [
|
|
43501
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-
|
|
43518
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-success" : "text-error" }),
|
|
43502
43519
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", children: won ? entity.successMessage ?? t("negotiator.success") : entity.failMessage ?? t("negotiator.failed") }),
|
|
43503
43520
|
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
43504
43521
|
t("negotiator.finalScore"),
|
|
@@ -43508,7 +43525,7 @@ function NegotiatorBoard({
|
|
|
43508
43525
|
entity.targetScore
|
|
43509
43526
|
] })
|
|
43510
43527
|
] }) }),
|
|
43511
|
-
showHint && entity.hint && !won && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
43528
|
+
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 }) }),
|
|
43512
43529
|
isComplete && !won && /* @__PURE__ */ jsxRuntime.jsx(HStack, { justify: "center", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: handleReset, children: t("negotiator.playAgain") }) })
|
|
43513
43530
|
] })
|
|
43514
43531
|
}
|
|
@@ -46112,7 +46129,7 @@ function TraitSlot({
|
|
|
46112
46129
|
display: "flex",
|
|
46113
46130
|
position: "relative",
|
|
46114
46131
|
className: cn(
|
|
46115
|
-
"items-center justify-center rounded-
|
|
46132
|
+
"items-center justify-center rounded-container transition-all duration-200 bg-card/50",
|
|
46116
46133
|
!locked && "cursor-pointer",
|
|
46117
46134
|
locked && "cursor-not-allowed opacity-50",
|
|
46118
46135
|
isEmpty && !locked && "border-2 border-dashed border-border hover:border-muted-foreground",
|
|
@@ -46128,7 +46145,7 @@ function TraitSlot({
|
|
|
46128
46145
|
style: {
|
|
46129
46146
|
width: config.box,
|
|
46130
46147
|
height: config.box,
|
|
46131
|
-
backgroundColor: catColor?.bg ||
|
|
46148
|
+
backgroundColor: catColor?.bg || void 0,
|
|
46132
46149
|
borderColor: isDragOver ? void 0 : feedback === "correct" ? "var(--color-success)" : feedback === "wrong" ? "var(--color-error)" : catColor?.border || void 0
|
|
46133
46150
|
},
|
|
46134
46151
|
onClick: handleClick,
|
|
@@ -46157,7 +46174,7 @@ function TraitSlot({
|
|
|
46157
46174
|
Box,
|
|
46158
46175
|
{
|
|
46159
46176
|
position: "absolute",
|
|
46160
|
-
className: "-top-1.5 -right-1.5 w-4 h-4 bg-error rounded-
|
|
46177
|
+
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",
|
|
46161
46178
|
onClick: handleRemove,
|
|
46162
46179
|
children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground text-xs leading-none", children: "\xD7" })
|
|
46163
46180
|
}
|
|
@@ -46167,14 +46184,14 @@ function TraitSlot({
|
|
|
46167
46184
|
Box,
|
|
46168
46185
|
{
|
|
46169
46186
|
position: "absolute",
|
|
46170
|
-
className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-
|
|
46187
|
+
className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-pill flex items-center justify-center border border-border",
|
|
46171
46188
|
children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground text-xs", children: slotNumber })
|
|
46172
46189
|
}
|
|
46173
46190
|
),
|
|
46174
46191
|
showTooltip && isHovered && itemMachine && !isEmpty && equippedItem && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
46175
46192
|
Box,
|
|
46176
46193
|
{
|
|
46177
|
-
className: "p-3 bg-background border border-border rounded-
|
|
46194
|
+
className: "p-3 bg-background border border-border rounded-container shadow-xl",
|
|
46178
46195
|
style: {
|
|
46179
46196
|
...getTooltipStyle(),
|
|
46180
46197
|
minWidth: 200,
|
|
@@ -46424,12 +46441,12 @@ function SequencerBoard({
|
|
|
46424
46441
|
backgroundPosition: "center"
|
|
46425
46442
|
},
|
|
46426
46443
|
children: [
|
|
46427
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
46444
|
+
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,
|
|
46428
46445
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
46429
46446
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
46430
46447
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description })
|
|
46431
46448
|
] }),
|
|
46432
|
-
showHint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
46449
|
+
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: [
|
|
46433
46450
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
46434
46451
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
46435
46452
|
] }) }),
|
|
@@ -46467,8 +46484,8 @@ function SequencerBoard({
|
|
|
46467
46484
|
label: t("sequencer.dragActions")
|
|
46468
46485
|
}
|
|
46469
46486
|
),
|
|
46470
|
-
hasFeedback && playState === "idle" && attempts > 0 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
46471
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
46487
|
+
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) }) }),
|
|
46488
|
+
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") }) }),
|
|
46472
46489
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", children: [
|
|
46473
46490
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
46474
46491
|
Button,
|
|
@@ -47144,7 +47161,7 @@ function SimulationCanvas({
|
|
|
47144
47161
|
ref: canvasRef,
|
|
47145
47162
|
width,
|
|
47146
47163
|
height,
|
|
47147
|
-
className: "rounded-
|
|
47164
|
+
className: "rounded-container block max-w-full h-auto"
|
|
47148
47165
|
}
|
|
47149
47166
|
) });
|
|
47150
47167
|
}
|
|
@@ -47352,7 +47369,7 @@ function SimulatorBoard({
|
|
|
47352
47369
|
backgroundPosition: "center"
|
|
47353
47370
|
},
|
|
47354
47371
|
children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "p-4", children: [
|
|
47355
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
47372
|
+
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,
|
|
47356
47373
|
/* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
47357
47374
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
47358
47375
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: entity.description })
|
|
@@ -47403,8 +47420,8 @@ function SimulatorBoard({
|
|
|
47403
47420
|
entity.outputUnit
|
|
47404
47421
|
] }),
|
|
47405
47422
|
submitted && /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xs", align: "center", children: [
|
|
47406
|
-
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-
|
|
47407
|
-
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-
|
|
47423
|
+
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-success" : "text-error" }),
|
|
47424
|
+
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: isCorrect ? "text-success" : "text-error", children: isCorrect ? entity.successMessage ?? t("simulator.correct") : entity.failMessage ?? t("simulator.incorrect") })
|
|
47408
47425
|
] }),
|
|
47409
47426
|
/* @__PURE__ */ jsxRuntime.jsxs(Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
47410
47427
|
t("simulator.target"),
|
|
@@ -47417,7 +47434,7 @@ function SimulatorBoard({
|
|
|
47417
47434
|
")"
|
|
47418
47435
|
] })
|
|
47419
47436
|
] }) }),
|
|
47420
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Card, { className: "p-4 border-l-4 border-l-
|
|
47437
|
+
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 }) }),
|
|
47421
47438
|
/* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", justify: "center", children: [
|
|
47422
47439
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "primary", onClick: handleSubmit, children: [
|
|
47423
47440
|
/* @__PURE__ */ jsxRuntime.jsx(Icon, { icon: LucideIcons2.Play, size: "sm" }),
|
|
@@ -47818,7 +47835,7 @@ function StateNode2({
|
|
|
47818
47835
|
position: "absolute",
|
|
47819
47836
|
display: "flex",
|
|
47820
47837
|
className: cn(
|
|
47821
|
-
"items-center justify-center rounded-
|
|
47838
|
+
"items-center justify-center rounded-pill border-3 transition-all cursor-pointer select-none",
|
|
47822
47839
|
"min-w-[80px] h-[80px] px-3",
|
|
47823
47840
|
isCurrent && "bg-primary/20 border-primary shadow-lg shadow-primary/30 scale-110",
|
|
47824
47841
|
isSelected && !isCurrent && "bg-accent/20 border-accent ring-2 ring-accent/50",
|
|
@@ -48131,7 +48148,7 @@ function StateArchitectBoard({
|
|
|
48131
48148
|
backgroundPosition: "center"
|
|
48132
48149
|
},
|
|
48133
48150
|
children: [
|
|
48134
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
48151
|
+
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,
|
|
48135
48152
|
/* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", children: [
|
|
48136
48153
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
48137
48154
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
|
|
@@ -48150,7 +48167,7 @@ function StateArchitectBoard({
|
|
|
48150
48167
|
Box,
|
|
48151
48168
|
{
|
|
48152
48169
|
position: "relative",
|
|
48153
|
-
className: "rounded-
|
|
48170
|
+
className: "rounded-container border border-border bg-background overflow-hidden",
|
|
48154
48171
|
style: { width: GRAPH_W, height: GRAPH_H },
|
|
48155
48172
|
children: [
|
|
48156
48173
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -48209,7 +48226,7 @@ function StateArchitectBoard({
|
|
|
48209
48226
|
children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
|
|
48210
48227
|
}
|
|
48211
48228
|
) }),
|
|
48212
|
-
transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-
|
|
48229
|
+
transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "p-3 rounded-container bg-muted/50 border border-border", children: [
|
|
48213
48230
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
|
|
48214
48231
|
transitions.map((t2) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
48215
48232
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
|
|
@@ -48243,7 +48260,7 @@ function StateArchitectBoard({
|
|
|
48243
48260
|
variables
|
|
48244
48261
|
}
|
|
48245
48262
|
),
|
|
48246
|
-
testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-
|
|
48263
|
+
testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { className: "p-3 rounded-container bg-card border border-border", gap: "xs", children: [
|
|
48247
48264
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-muted-foreground font-medium", children: t("stateArchitect.testResults") + ":" }),
|
|
48248
48265
|
testResults.map((r2, i) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
48249
48266
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: r2.passed ? "text-success" : "text-error", children: r2.passed ? "\u2714" : "\u2717" }),
|
|
@@ -48254,10 +48271,10 @@ function StateArchitectBoard({
|
|
|
48254
48271
|
entity.showCodeView !== false && /* @__PURE__ */ jsxRuntime.jsx(CodeView, { data: codeData, label: "View Code" })
|
|
48255
48272
|
] })
|
|
48256
48273
|
] }),
|
|
48257
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
48274
|
+
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") }) }),
|
|
48258
48275
|
playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", children: [
|
|
48259
|
-
/* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 rounded-
|
|
48260
|
-
attempts >= 3 && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-3 rounded-
|
|
48276
|
+
/* @__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]) }) }),
|
|
48277
|
+
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: [
|
|
48261
48278
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
48262
48279
|
/* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
48263
48280
|
] }) })
|