@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
|
@@ -9264,7 +9264,7 @@ function ActionButton({
|
|
|
9264
9264
|
disabled: isDisabled,
|
|
9265
9265
|
onClick,
|
|
9266
9266
|
className: cn(
|
|
9267
|
-
"relative inline-flex items-center gap-1.5 rounded-
|
|
9267
|
+
"relative inline-flex items-center gap-1.5 rounded-interactive border font-medium overflow-hidden transition-colors duration-150",
|
|
9268
9268
|
sizes.button,
|
|
9269
9269
|
variantStyles7[variant],
|
|
9270
9270
|
isDisabled && "opacity-60 cursor-not-allowed",
|
|
@@ -9307,9 +9307,9 @@ var init_ActionButton = __esm({
|
|
|
9307
9307
|
init_cn();
|
|
9308
9308
|
init_Icon();
|
|
9309
9309
|
sizeMap = {
|
|
9310
|
-
sm: { button: "px-3
|
|
9311
|
-
md: { button: "px-4
|
|
9312
|
-
lg: { button: "
|
|
9310
|
+
sm: { button: "h-button-sm px-3 text-xs", hotkey: "text-[9px] px-1", icon: "text-xs" },
|
|
9311
|
+
md: { button: "h-button-md px-4 text-sm", hotkey: "text-xs px-1.5", icon: "text-sm" },
|
|
9312
|
+
lg: { button: "h-button-lg px-5 text-base", hotkey: "text-xs px-2", icon: "text-base" }
|
|
9313
9313
|
};
|
|
9314
9314
|
variantStyles7 = {
|
|
9315
9315
|
primary: "bg-primary text-primary-foreground hover:bg-primary-hover border-primary",
|
|
@@ -9412,8 +9412,8 @@ var init_ControlButton = __esm({
|
|
|
9412
9412
|
};
|
|
9413
9413
|
shapeMap = {
|
|
9414
9414
|
circle: "rounded-full",
|
|
9415
|
-
rounded: "rounded-
|
|
9416
|
-
square: "rounded-
|
|
9415
|
+
rounded: "rounded-interactive",
|
|
9416
|
+
square: "rounded-interactive"
|
|
9417
9417
|
};
|
|
9418
9418
|
variantMap = {
|
|
9419
9419
|
primary: "bg-primary text-primary-foreground border-primary hover:bg-primary-hover",
|
|
@@ -9574,7 +9574,7 @@ function ActionTile({
|
|
|
9574
9574
|
{
|
|
9575
9575
|
display: "flex",
|
|
9576
9576
|
className: cn(
|
|
9577
|
-
"flex-col items-center gap-1 rounded-
|
|
9577
|
+
"flex-col items-center gap-1 rounded-container border-2 transition-all select-none",
|
|
9578
9578
|
config.px,
|
|
9579
9579
|
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",
|
|
9580
9580
|
className
|
|
@@ -10785,12 +10785,12 @@ function IsometricCanvas({
|
|
|
10785
10785
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
10786
10786
|
exports.Box,
|
|
10787
10787
|
{
|
|
10788
|
-
className: cn("relative w-full overflow-hidden rounded-
|
|
10788
|
+
className: cn("relative w-full overflow-hidden rounded-container", className),
|
|
10789
10789
|
style: { height: viewportSize.height },
|
|
10790
10790
|
"data-testid": "game-canvas-empty",
|
|
10791
|
-
children: /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex items-center justify-center h-full bg-[var(--color-card)] rounded-
|
|
10791
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex items-center justify-center h-full bg-[var(--color-card)] rounded-container", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.Stack, { direction: "vertical", gap: "md", align: "center", children: [
|
|
10792
10792
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "map", size: "xl" }),
|
|
10793
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", className: "text-
|
|
10793
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", className: "text-muted-foreground", children: t("canvas.emptyMessage") || "No map data loaded" })
|
|
10794
10794
|
] }) })
|
|
10795
10795
|
}
|
|
10796
10796
|
);
|
|
@@ -11188,19 +11188,19 @@ function BattleBoard({
|
|
|
11188
11188
|
}
|
|
11189
11189
|
)
|
|
11190
11190
|
] }),
|
|
11191
|
-
gameResult && (gameOverOverlay ? gameOverOverlay(ctx) : /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-
|
|
11191
|
+
gameResult && (gameOverOverlay ? gameOverOverlay(ctx) : /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-background/70 backdrop-blur-sm rounded-container", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: "text-center p-8", gap: "lg", children: [
|
|
11192
11192
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11193
11193
|
exports.Typography,
|
|
11194
11194
|
{
|
|
11195
11195
|
variant: "h2",
|
|
11196
11196
|
className: cn(
|
|
11197
11197
|
"text-4xl font-black tracking-widest uppercase",
|
|
11198
|
-
gameResult === "victory" ? "text-
|
|
11198
|
+
gameResult === "victory" ? "text-warning" : "text-error"
|
|
11199
11199
|
),
|
|
11200
11200
|
children: gameResult === "victory" ? t("battle.victory") : t("battle.defeat")
|
|
11201
11201
|
}
|
|
11202
11202
|
),
|
|
11203
|
-
/* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "body1", className: "text-
|
|
11203
|
+
/* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "body1", className: "text-muted-foreground", children: [
|
|
11204
11204
|
t("battle.turnsPlayed"),
|
|
11205
11205
|
": ",
|
|
11206
11206
|
currentTurn
|
|
@@ -16077,7 +16077,7 @@ function BuilderBoard({
|
|
|
16077
16077
|
backgroundPosition: "center"
|
|
16078
16078
|
},
|
|
16079
16079
|
children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "lg", className: "p-4", children: [
|
|
16080
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
16080
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.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(exports.Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
16081
16081
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", children: [
|
|
16082
16082
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
16083
16083
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.description })
|
|
@@ -16115,7 +16115,7 @@ function BuilderBoard({
|
|
|
16115
16115
|
{
|
|
16116
16116
|
gap: "sm",
|
|
16117
16117
|
align: "center",
|
|
16118
|
-
className: `p-3 border-2 rounded ${result ? result.correct ? "border-
|
|
16118
|
+
className: `p-3 border-2 rounded ${result ? result.correct ? "border-success" : "border-error" : selectedComponent ? "border-dashed border-foreground cursor-pointer" : "border-border"}`,
|
|
16119
16119
|
onClick: () => handlePlaceComponent(slot.id),
|
|
16120
16120
|
children: [
|
|
16121
16121
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "none", className: "flex-1", children: [
|
|
@@ -16130,7 +16130,7 @@ function BuilderBoard({
|
|
|
16130
16130
|
] }) : null,
|
|
16131
16131
|
placedComp.label
|
|
16132
16132
|
] }),
|
|
16133
|
-
result && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-
|
|
16133
|
+
result && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: result.correct ? "text-success" : "text-error" })
|
|
16134
16134
|
] }) : /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: t("builder.empty") })
|
|
16135
16135
|
]
|
|
16136
16136
|
},
|
|
@@ -16139,10 +16139,10 @@ function BuilderBoard({
|
|
|
16139
16139
|
}) })
|
|
16140
16140
|
] }) }),
|
|
16141
16141
|
submitted && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", align: "center", children: [
|
|
16142
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-
|
|
16142
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
|
|
16143
16143
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("builder.success") : entity.failMessage ?? t("builder.incorrect") })
|
|
16144
16144
|
] }) }),
|
|
16145
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-
|
|
16145
|
+
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.hint }) }),
|
|
16146
16146
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", justify: "center", children: [
|
|
16147
16147
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(exports.Button, { variant: "primary", onClick: handleSubmit, disabled: !allPlaced, children: [
|
|
16148
16148
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Wrench, size: "sm" }),
|
|
@@ -17764,7 +17764,7 @@ function CanvasEffectEngine({
|
|
|
17764
17764
|
flash && /* @__PURE__ */ jsxRuntime.jsx(
|
|
17765
17765
|
exports.Box,
|
|
17766
17766
|
{
|
|
17767
|
-
className: "absolute inset-0 z-20 pointer-events-none rounded-
|
|
17767
|
+
className: "absolute inset-0 z-20 pointer-events-none rounded-container",
|
|
17768
17768
|
style: { backgroundColor: flash.color, opacity: flash.alpha }
|
|
17769
17769
|
}
|
|
17770
17770
|
),
|
|
@@ -17832,7 +17832,7 @@ function EmojiEffect({
|
|
|
17832
17832
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
17833
17833
|
exports.Box,
|
|
17834
17834
|
{
|
|
17835
|
-
className: "absolute rounded-
|
|
17835
|
+
className: "absolute rounded-pill animate-ping",
|
|
17836
17836
|
style: {
|
|
17837
17837
|
width: 48 * intensity,
|
|
17838
17838
|
height: 48 * intensity,
|
|
@@ -19599,7 +19599,7 @@ function ChoiceButton({
|
|
|
19599
19599
|
disabled,
|
|
19600
19600
|
onClick,
|
|
19601
19601
|
className: cn(
|
|
19602
|
-
"w-full text-left px-4 py-2.5 rounded-
|
|
19602
|
+
"w-full text-left px-4 py-2.5 rounded-interactive border transition-all duration-150",
|
|
19603
19603
|
"flex items-center gap-2",
|
|
19604
19604
|
selected ? "bg-accent/15 border-accent text-foreground" : "bg-muted/40 border-border text-foreground hover:bg-muted hover:border-border",
|
|
19605
19605
|
disabled && "opacity-40 cursor-not-allowed hover:bg-muted/40 hover:border-border",
|
|
@@ -19695,7 +19695,7 @@ function ClassifierBoard({
|
|
|
19695
19695
|
backgroundPosition: "center"
|
|
19696
19696
|
},
|
|
19697
19697
|
children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "lg", className: "p-4", children: [
|
|
19698
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
19698
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.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(exports.Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
19699
19699
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", children: [
|
|
19700
19700
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
19701
19701
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.description })
|
|
@@ -19710,7 +19710,7 @@ function ClassifierBoard({
|
|
|
19710
19710
|
/* @__PURE__ */ jsxRuntime.jsx(exports.VStack, { gap: "md", children: categories.map((cat) => {
|
|
19711
19711
|
const catItems = items.filter((item) => assignments[item.id] === cat.id);
|
|
19712
19712
|
return /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", children: [
|
|
19713
|
-
cat.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-16 overflow-hidden rounded-
|
|
19713
|
+
cat.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(exports.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" }) }),
|
|
19714
19714
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { justify: "between", align: "center", children: [
|
|
19715
19715
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", weight: "bold", children: cat.label }),
|
|
19716
19716
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { size: "sm", children: catItems.length })
|
|
@@ -19721,12 +19721,12 @@ function ClassifierBoard({
|
|
|
19721
19721
|
exports.Badge,
|
|
19722
19722
|
{
|
|
19723
19723
|
size: "sm",
|
|
19724
|
-
className: `cursor-pointer ${result ? result.correct ? "border-
|
|
19724
|
+
className: `cursor-pointer ${result ? result.correct ? "border-success bg-success/10" : "border-error bg-error/10" : ""}`,
|
|
19725
19725
|
onClick: () => handleUnassign(item.id),
|
|
19726
19726
|
children: [
|
|
19727
19727
|
item.iconUrl && /* @__PURE__ */ jsxRuntime.jsx("img", { src: item.iconUrl, alt: "", className: "w-3 h-3 object-contain inline-block" }),
|
|
19728
19728
|
item.label,
|
|
19729
|
-
result && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-
|
|
19729
|
+
result && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: result.correct ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "xs", className: result.correct ? "text-success" : "text-error" })
|
|
19730
19730
|
]
|
|
19731
19731
|
},
|
|
19732
19732
|
item.id
|
|
@@ -19749,11 +19749,11 @@ function ClassifierBoard({
|
|
|
19749
19749
|
] }) }, cat.id);
|
|
19750
19750
|
}) }),
|
|
19751
19751
|
submitted && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", align: "center", children: [
|
|
19752
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-
|
|
19752
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: allCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "lg", className: allCorrect ? "text-success" : "text-error" }),
|
|
19753
19753
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", weight: "bold", children: allCorrect ? entity.successMessage ?? t("classifier.allCorrect") : `${correctCount}/${items.length} ${t("classifier.correct")}` }),
|
|
19754
19754
|
!allCorrect && entity.failMessage && /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", className: "text-muted-foreground", children: entity.failMessage })
|
|
19755
19755
|
] }) }),
|
|
19756
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-
|
|
19756
|
+
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.hint }) }),
|
|
19757
19757
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", justify: "center", children: [
|
|
19758
19758
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(exports.Button, { variant: "primary", onClick: handleSubmit, disabled: !allAssigned, children: [
|
|
19759
19759
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Send, size: "sm" }),
|
|
@@ -20403,10 +20403,10 @@ var init_CombatLog = __esm({
|
|
|
20403
20403
|
}
|
|
20404
20404
|
});
|
|
20405
20405
|
function getComboIntensity(combo) {
|
|
20406
|
-
if (combo >= 10) return "text-
|
|
20407
|
-
if (combo >= 7) return "text-
|
|
20408
|
-
if (combo >= 4) return "text-
|
|
20409
|
-
return "text-
|
|
20406
|
+
if (combo >= 10) return "text-error animate-pulse";
|
|
20407
|
+
if (combo >= 7) return "text-warning";
|
|
20408
|
+
if (combo >= 4) return "text-warning";
|
|
20409
|
+
return "text-foreground";
|
|
20410
20410
|
}
|
|
20411
20411
|
function getComboScale(combo) {
|
|
20412
20412
|
if (combo >= 10) return "scale-110";
|
|
@@ -20427,19 +20427,19 @@ function ComboCounter({
|
|
|
20427
20427
|
{
|
|
20428
20428
|
className: cn(
|
|
20429
20429
|
"inline-flex flex-col items-center justify-center",
|
|
20430
|
-
"rounded-
|
|
20430
|
+
"rounded-container bg-card/80 border border-muted px-3 py-1.5",
|
|
20431
20431
|
"transition-transform duration-200",
|
|
20432
20432
|
getComboScale(combo),
|
|
20433
20433
|
className
|
|
20434
20434
|
),
|
|
20435
20435
|
children: [
|
|
20436
20436
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-black tabular-nums leading-none", sizes.combo, getComboIntensity(combo)), children: combo }),
|
|
20437
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-
|
|
20438
|
-
multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-
|
|
20437
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("font-bold uppercase tracking-wider text-muted-foreground", sizes.label), children: "combo" }),
|
|
20438
|
+
multiplier != null && multiplier > 1 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold text-warning tabular-nums", sizes.multiplier), children: [
|
|
20439
20439
|
"x",
|
|
20440
20440
|
multiplier.toFixed(1)
|
|
20441
20441
|
] }),
|
|
20442
|
-
streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-
|
|
20442
|
+
streak != null && streak > 0 && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.label), children: [
|
|
20443
20443
|
streak,
|
|
20444
20444
|
" streak"
|
|
20445
20445
|
] })
|
|
@@ -20854,18 +20854,18 @@ function ItemSlot({
|
|
|
20854
20854
|
disabled: !isClickable,
|
|
20855
20855
|
title: label,
|
|
20856
20856
|
className: cn(
|
|
20857
|
-
"relative flex items-center justify-center rounded-
|
|
20858
|
-
"bg-
|
|
20857
|
+
"relative flex items-center justify-center rounded-interactive border-2",
|
|
20858
|
+
"bg-card/80 transition-all duration-150",
|
|
20859
20859
|
sizeMap5[size],
|
|
20860
|
-
empty ? "border-
|
|
20860
|
+
empty ? "border-border bg-card/50" : rarityBorderMap[rarity],
|
|
20861
20861
|
!empty && rarityGlowMap[rarity],
|
|
20862
|
-
selected && "ring-2 ring-
|
|
20862
|
+
selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background",
|
|
20863
20863
|
isClickable && !empty && "hover:brightness-125 cursor-pointer",
|
|
20864
|
-
isClickable && empty && "hover:border-
|
|
20864
|
+
isClickable && empty && "hover:border-muted cursor-pointer",
|
|
20865
20865
|
!isClickable && "cursor-default",
|
|
20866
20866
|
className
|
|
20867
20867
|
),
|
|
20868
|
-
children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
20868
|
+
children: empty ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground text-base", children: "+" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
20869
20869
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
|
|
20870
20870
|
quantity != null && quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
20871
20871
|
"span",
|
|
@@ -20873,7 +20873,7 @@ function ItemSlot({
|
|
|
20873
20873
|
className: cn(
|
|
20874
20874
|
"absolute -bottom-1 -right-1 flex items-center justify-center",
|
|
20875
20875
|
"min-w-[18px] h-[18px] rounded-full px-1",
|
|
20876
|
-
"bg-
|
|
20876
|
+
"bg-surface border border-muted text-xs font-bold text-foreground"
|
|
20877
20877
|
),
|
|
20878
20878
|
children: quantity
|
|
20879
20879
|
}
|
|
@@ -20893,18 +20893,18 @@ var init_ItemSlot = __esm({
|
|
|
20893
20893
|
lg: "w-18 h-18 text-3xl"
|
|
20894
20894
|
};
|
|
20895
20895
|
rarityBorderMap = {
|
|
20896
|
-
common: "border-
|
|
20897
|
-
uncommon: "border-
|
|
20898
|
-
rare: "border-
|
|
20899
|
-
epic: "border-
|
|
20900
|
-
legendary: "border-
|
|
20896
|
+
common: "border-muted",
|
|
20897
|
+
uncommon: "border-success",
|
|
20898
|
+
rare: "border-info",
|
|
20899
|
+
epic: "border-accent",
|
|
20900
|
+
legendary: "border-warning"
|
|
20901
20901
|
};
|
|
20902
20902
|
rarityGlowMap = {
|
|
20903
20903
|
common: "",
|
|
20904
20904
|
uncommon: "",
|
|
20905
|
-
rare: "shadow-
|
|
20906
|
-
epic: "shadow-
|
|
20907
|
-
legendary: "shadow-
|
|
20905
|
+
rare: "shadow-sm",
|
|
20906
|
+
epic: "shadow-lg",
|
|
20907
|
+
legendary: "shadow-lg"
|
|
20908
20908
|
};
|
|
20909
20909
|
ItemSlot.displayName = "ItemSlot";
|
|
20910
20910
|
}
|
|
@@ -20933,7 +20933,7 @@ function CraftingRecipe({
|
|
|
20933
20933
|
exports.Box,
|
|
20934
20934
|
{
|
|
20935
20935
|
className: cn(
|
|
20936
|
-
"flex flex-wrap items-center gap-3 rounded-
|
|
20936
|
+
"flex flex-wrap items-center gap-3 rounded-container bg-muted/50 border border-border/50 p-3",
|
|
20937
20937
|
className
|
|
20938
20938
|
),
|
|
20939
20939
|
children: [
|
|
@@ -20950,10 +20950,10 @@ function CraftingRecipe({
|
|
|
20950
20950
|
className: cn(!hasSufficient && "opacity-50")
|
|
20951
20951
|
}
|
|
20952
20952
|
) }),
|
|
20953
|
-
index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "plus", size: "sm", className: "text-
|
|
20953
|
+
index < inputs.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "plus", size: "sm", className: "text-muted-foreground" })
|
|
20954
20954
|
] }, index);
|
|
20955
20955
|
}) }),
|
|
20956
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "arrow-right", size: "md", className: "text-
|
|
20956
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "arrow-right", size: "md", className: "text-muted-foreground" }),
|
|
20957
20957
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
20958
20958
|
ItemSlot,
|
|
20959
20959
|
{
|
|
@@ -21041,7 +21041,7 @@ function DPad({
|
|
|
21041
21041
|
createButton("up"),
|
|
21042
21042
|
/* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
21043
21043
|
createButton("left"),
|
|
21044
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-
|
|
21044
|
+
/* @__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" }) }),
|
|
21045
21045
|
createButton("right"),
|
|
21046
21046
|
/* @__PURE__ */ jsxRuntime.jsx("div", {}),
|
|
21047
21047
|
createButton("down"),
|
|
@@ -21103,10 +21103,10 @@ var init_DamageNumber = __esm({
|
|
|
21103
21103
|
lg: "text-2xl"
|
|
21104
21104
|
};
|
|
21105
21105
|
typeStyles = {
|
|
21106
|
-
damage: "text-
|
|
21107
|
-
heal: "text-
|
|
21108
|
-
crit: "text-
|
|
21109
|
-
miss: "text-
|
|
21106
|
+
damage: "text-error font-bold",
|
|
21107
|
+
heal: "text-success font-bold",
|
|
21108
|
+
crit: "text-warning font-extrabold",
|
|
21109
|
+
miss: "text-muted-foreground italic"
|
|
21110
21110
|
};
|
|
21111
21111
|
floatKeyframes = `
|
|
21112
21112
|
@keyframes damageFloat {
|
|
@@ -25294,7 +25294,7 @@ function HealthBar({
|
|
|
25294
25294
|
"div",
|
|
25295
25295
|
{
|
|
25296
25296
|
className: cn(
|
|
25297
|
-
"relative overflow-hidden rounded-full bg-
|
|
25297
|
+
"relative overflow-hidden rounded-full bg-muted",
|
|
25298
25298
|
sizes.bar,
|
|
25299
25299
|
"w-24",
|
|
25300
25300
|
className
|
|
@@ -25304,7 +25304,7 @@ function HealthBar({
|
|
|
25304
25304
|
{
|
|
25305
25305
|
className: cn(
|
|
25306
25306
|
"absolute inset-y-0 left-0 rounded-full",
|
|
25307
|
-
percentage > 66 ? "bg-
|
|
25307
|
+
percentage > 66 ? "bg-success" : percentage > 33 ? "bg-warning" : "bg-error",
|
|
25308
25308
|
animated && "transition-all duration-300"
|
|
25309
25309
|
),
|
|
25310
25310
|
style: { width: `${percentage}%` }
|
|
@@ -25326,7 +25326,7 @@ var init_HealthBar = __esm({
|
|
|
25326
25326
|
heartIcon = (filled, size) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
25327
25327
|
"svg",
|
|
25328
25328
|
{
|
|
25329
|
-
className: cn("transition-all duration-200", size, filled ? "text-
|
|
25329
|
+
className: cn("transition-all duration-200", size, filled ? "text-error" : "text-muted-foreground"),
|
|
25330
25330
|
viewBox: "0 0 24 24",
|
|
25331
25331
|
fill: filled ? "currentColor" : "none",
|
|
25332
25332
|
stroke: "currentColor",
|
|
@@ -25390,7 +25390,7 @@ function ScoreDisplay({
|
|
|
25390
25390
|
),
|
|
25391
25391
|
children: [
|
|
25392
25392
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: icon }),
|
|
25393
|
-
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
25393
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
|
|
25394
25394
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: formattedValue })
|
|
25395
25395
|
]
|
|
25396
25396
|
}
|
|
@@ -25428,7 +25428,7 @@ function StatBadge({
|
|
|
25428
25428
|
"div",
|
|
25429
25429
|
{
|
|
25430
25430
|
className: cn(
|
|
25431
|
-
"inline-flex items-center gap-2 rounded-
|
|
25431
|
+
"inline-flex items-center gap-2 rounded-container border backdrop-blur-sm",
|
|
25432
25432
|
sizeMap11[size] ?? sizeMap11.md,
|
|
25433
25433
|
variantMap2[variant] ?? variantMap2.default,
|
|
25434
25434
|
className
|
|
@@ -25577,7 +25577,7 @@ function WaypointMarker({
|
|
|
25577
25577
|
"div",
|
|
25578
25578
|
{
|
|
25579
25579
|
className: cn(
|
|
25580
|
-
"absolute rounded-full border-2 border-
|
|
25580
|
+
"absolute rounded-full border-2 border-info animate-ping opacity-50",
|
|
25581
25581
|
sizes.ring
|
|
25582
25582
|
)
|
|
25583
25583
|
}
|
|
@@ -25586,7 +25586,7 @@ function WaypointMarker({
|
|
|
25586
25586
|
"div",
|
|
25587
25587
|
{
|
|
25588
25588
|
className: cn(
|
|
25589
|
-
"absolute rounded-full border-2 border-
|
|
25589
|
+
"absolute rounded-full border-2 border-info",
|
|
25590
25590
|
sizes.ring
|
|
25591
25591
|
)
|
|
25592
25592
|
}
|
|
@@ -25597,9 +25597,9 @@ function WaypointMarker({
|
|
|
25597
25597
|
className: cn(
|
|
25598
25598
|
"relative flex items-center justify-center rounded-full transition-all duration-200",
|
|
25599
25599
|
sizes.dot,
|
|
25600
|
-
completed && "bg-
|
|
25601
|
-
active && !completed && "bg-
|
|
25602
|
-
!active && !completed && "bg-
|
|
25600
|
+
completed && "bg-success text-foreground",
|
|
25601
|
+
active && !completed && "bg-info text-foreground",
|
|
25602
|
+
!active && !completed && "bg-muted"
|
|
25603
25603
|
),
|
|
25604
25604
|
children: completed ? checkIcon : icon
|
|
25605
25605
|
}
|
|
@@ -25611,7 +25611,7 @@ function WaypointMarker({
|
|
|
25611
25611
|
className: cn(
|
|
25612
25612
|
"text-center whitespace-nowrap",
|
|
25613
25613
|
sizes.label,
|
|
25614
|
-
completed ? "text-
|
|
25614
|
+
completed ? "text-success" : active ? "text-info" : "text-muted-foreground"
|
|
25615
25615
|
),
|
|
25616
25616
|
children: label
|
|
25617
25617
|
}
|
|
@@ -25643,10 +25643,10 @@ function QuestTracker({
|
|
|
25643
25643
|
exports.Box,
|
|
25644
25644
|
{
|
|
25645
25645
|
className: cn(
|
|
25646
|
-
"flex items-start gap-3 rounded-
|
|
25647
|
-
isActive && !isCompleted && "bg-
|
|
25648
|
-
isCompleted && "bg-
|
|
25649
|
-
!isActive && !isCompleted && "bg-
|
|
25646
|
+
"flex items-start gap-3 rounded-container px-3 py-2 transition-colors",
|
|
25647
|
+
isActive && !isCompleted && "bg-info/20 border border-info/50",
|
|
25648
|
+
isCompleted && "bg-success/10 border border-success/30 opacity-70",
|
|
25649
|
+
!isActive && !isCompleted && "bg-muted/30 border border-border/30"
|
|
25650
25650
|
),
|
|
25651
25651
|
children: [
|
|
25652
25652
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex-shrink-0 pt-0.5", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -25664,9 +25664,9 @@ function QuestTracker({
|
|
|
25664
25664
|
variant: "body2",
|
|
25665
25665
|
className: cn(
|
|
25666
25666
|
"font-medium truncate",
|
|
25667
|
-
isCompleted && "line-through text-
|
|
25668
|
-
isActive && !isCompleted && "text-
|
|
25669
|
-
!isActive && !isCompleted && "text-
|
|
25667
|
+
isCompleted && "line-through text-muted-foreground",
|
|
25668
|
+
isActive && !isCompleted && "text-info",
|
|
25669
|
+
!isActive && !isCompleted && "text-muted-foreground"
|
|
25670
25670
|
),
|
|
25671
25671
|
children: quest.title
|
|
25672
25672
|
}
|
|
@@ -25684,7 +25684,7 @@ function QuestTracker({
|
|
|
25684
25684
|
exports.Typography,
|
|
25685
25685
|
{
|
|
25686
25686
|
variant: "caption",
|
|
25687
|
-
className: "text-
|
|
25687
|
+
className: "text-muted-foreground mt-1",
|
|
25688
25688
|
children: [
|
|
25689
25689
|
quest.progress,
|
|
25690
25690
|
" / ",
|
|
@@ -25741,14 +25741,14 @@ function PowerupSlots({
|
|
|
25741
25741
|
{
|
|
25742
25742
|
className: cn(
|
|
25743
25743
|
"absolute -bottom-1 left-1/2 -translate-x-1/2",
|
|
25744
|
-
"rounded px-1 py-px",
|
|
25745
|
-
"bg-
|
|
25744
|
+
"rounded-interactive px-1 py-px",
|
|
25745
|
+
"bg-background/80 border border-border"
|
|
25746
25746
|
),
|
|
25747
25747
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
25748
25748
|
exports.Typography,
|
|
25749
25749
|
{
|
|
25750
25750
|
variant: "caption",
|
|
25751
|
-
className: "text-[9px] font-mono font-bold text-
|
|
25751
|
+
className: "text-[9px] font-mono font-bold text-warning whitespace-nowrap",
|
|
25752
25752
|
children: formatTime(powerup.remainingTime)
|
|
25753
25753
|
}
|
|
25754
25754
|
)
|
|
@@ -25781,6 +25781,8 @@ function GameCanvas2D({
|
|
|
25781
25781
|
height = 600,
|
|
25782
25782
|
onDraw,
|
|
25783
25783
|
onTick,
|
|
25784
|
+
tickEvent,
|
|
25785
|
+
drawEvent,
|
|
25784
25786
|
fps = 60,
|
|
25785
25787
|
className
|
|
25786
25788
|
}) {
|
|
@@ -25788,10 +25790,17 @@ function GameCanvas2D({
|
|
|
25788
25790
|
const rafRef = React80__namespace.useRef(0);
|
|
25789
25791
|
const frameRef = React80__namespace.useRef(0);
|
|
25790
25792
|
const lastTimeRef = React80__namespace.useRef(0);
|
|
25793
|
+
const emit = useEmitEvent();
|
|
25791
25794
|
const onDrawRef = React80__namespace.useRef(onDraw);
|
|
25792
25795
|
onDrawRef.current = onDraw;
|
|
25793
25796
|
const onTickRef = React80__namespace.useRef(onTick);
|
|
25794
25797
|
onTickRef.current = onTick;
|
|
25798
|
+
const tickEventRef = React80__namespace.useRef(tickEvent);
|
|
25799
|
+
tickEventRef.current = tickEvent;
|
|
25800
|
+
const drawEventRef = React80__namespace.useRef(drawEvent);
|
|
25801
|
+
drawEventRef.current = drawEvent;
|
|
25802
|
+
const emitRef = React80__namespace.useRef(emit);
|
|
25803
|
+
emitRef.current = emit;
|
|
25795
25804
|
React80__namespace.useEffect(() => {
|
|
25796
25805
|
const canvas = canvasRef.current;
|
|
25797
25806
|
if (!canvas) return;
|
|
@@ -25808,8 +25817,15 @@ function GameCanvas2D({
|
|
|
25808
25817
|
if (elapsed >= interval) {
|
|
25809
25818
|
const dt = elapsed / 1e3;
|
|
25810
25819
|
lastTimeRef.current = timestamp - elapsed % interval;
|
|
25820
|
+
const frame = frameRef.current;
|
|
25811
25821
|
onTickRef.current?.(dt);
|
|
25812
|
-
|
|
25822
|
+
if (tickEventRef.current) {
|
|
25823
|
+
emitRef.current(tickEventRef.current, { dt, frame });
|
|
25824
|
+
}
|
|
25825
|
+
onDrawRef.current?.(ctx, frame);
|
|
25826
|
+
if (drawEventRef.current) {
|
|
25827
|
+
emitRef.current(drawEventRef.current, { frame });
|
|
25828
|
+
}
|
|
25813
25829
|
frameRef.current += 1;
|
|
25814
25830
|
}
|
|
25815
25831
|
rafRef.current = requestAnimationFrame(loop);
|
|
@@ -25835,6 +25851,7 @@ var init_GameCanvas2D = __esm({
|
|
|
25835
25851
|
"use client";
|
|
25836
25852
|
init_cn();
|
|
25837
25853
|
init_Box();
|
|
25854
|
+
init_useEventBus();
|
|
25838
25855
|
GameCanvas2D.displayName = "GameCanvas2D";
|
|
25839
25856
|
}
|
|
25840
25857
|
});
|
|
@@ -25853,7 +25870,7 @@ function HealthPanel({
|
|
|
25853
25870
|
exports.Box,
|
|
25854
25871
|
{
|
|
25855
25872
|
className: cn(
|
|
25856
|
-
"rounded-
|
|
25873
|
+
"rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm",
|
|
25857
25874
|
sizes.padding,
|
|
25858
25875
|
className
|
|
25859
25876
|
),
|
|
@@ -25864,7 +25881,7 @@ function HealthPanel({
|
|
|
25864
25881
|
{
|
|
25865
25882
|
variant: "caption",
|
|
25866
25883
|
weight: "bold",
|
|
25867
|
-
className: "text-
|
|
25884
|
+
className: "text-muted-foreground uppercase tracking-wider",
|
|
25868
25885
|
children: label
|
|
25869
25886
|
}
|
|
25870
25887
|
),
|
|
@@ -25885,7 +25902,7 @@ function HealthPanel({
|
|
|
25885
25902
|
as: "span",
|
|
25886
25903
|
variant: "caption",
|
|
25887
25904
|
weight: "bold",
|
|
25888
|
-
className: "text-
|
|
25905
|
+
className: "text-info ml-1",
|
|
25889
25906
|
children: [
|
|
25890
25907
|
"+",
|
|
25891
25908
|
shield
|
|
@@ -25910,14 +25927,14 @@ function HealthPanel({
|
|
|
25910
25927
|
exports.Box,
|
|
25911
25928
|
{
|
|
25912
25929
|
className: cn(
|
|
25913
|
-
"relative overflow-hidden rounded-
|
|
25930
|
+
"relative overflow-hidden rounded-container bg-muted",
|
|
25914
25931
|
size === "sm" ? "h-1" : size === "md" ? "h-1.5" : "h-2",
|
|
25915
25932
|
"w-full"
|
|
25916
25933
|
),
|
|
25917
25934
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
25918
25935
|
exports.Box,
|
|
25919
25936
|
{
|
|
25920
|
-
className: "absolute inset-y-0 left-0 rounded-
|
|
25937
|
+
className: "absolute inset-y-0 left-0 rounded-container bg-info transition-all duration-300",
|
|
25921
25938
|
style: { width: `${Math.min(100, shield / max * 100)}%` }
|
|
25922
25939
|
}
|
|
25923
25940
|
)
|
|
@@ -25976,7 +25993,7 @@ function ScoreBoard({
|
|
|
25976
25993
|
exports.Card,
|
|
25977
25994
|
{
|
|
25978
25995
|
className: cn(
|
|
25979
|
-
"bg-[var(--color-card)]/90 border-
|
|
25996
|
+
"bg-[var(--color-card)]/90 border-border backdrop-blur-sm",
|
|
25980
25997
|
className
|
|
25981
25998
|
),
|
|
25982
25999
|
children: /* @__PURE__ */ jsxRuntime.jsx(exports.CardContent, { className: "p-3", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex items-center gap-3 flex-wrap", children: [
|
|
@@ -26085,8 +26102,8 @@ function TurnIndicator({
|
|
|
26085
26102
|
"div",
|
|
26086
26103
|
{
|
|
26087
26104
|
className: cn(
|
|
26088
|
-
"inline-flex items-center rounded-
|
|
26089
|
-
"bg-
|
|
26105
|
+
"inline-flex items-center rounded-container",
|
|
26106
|
+
"bg-card/80 border border-muted font-medium text-foreground",
|
|
26090
26107
|
sizes.wrapper,
|
|
26091
26108
|
className
|
|
26092
26109
|
),
|
|
@@ -26094,19 +26111,19 @@ function TurnIndicator({
|
|
|
26094
26111
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-bold tabular-nums", children: [
|
|
26095
26112
|
"Turn ",
|
|
26096
26113
|
currentTurn,
|
|
26097
|
-
maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
26114
|
+
maxTurns != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
26098
26115
|
"/",
|
|
26099
26116
|
maxTurns
|
|
26100
26117
|
] })
|
|
26101
26118
|
] }),
|
|
26102
26119
|
phase && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
26103
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
26104
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
26120
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
|
|
26121
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: phase })
|
|
26105
26122
|
] }),
|
|
26106
26123
|
activeTeam && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
26107
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
26108
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-
|
|
26109
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
26124
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "|" }),
|
|
26125
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("rounded-full bg-success/20", sizes.dot) }),
|
|
26126
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-success", children: activeTeam })
|
|
26110
26127
|
] })
|
|
26111
26128
|
]
|
|
26112
26129
|
}
|
|
@@ -26145,7 +26162,7 @@ function TurnPanel({
|
|
|
26145
26162
|
exports.Box,
|
|
26146
26163
|
{
|
|
26147
26164
|
className: cn(
|
|
26148
|
-
"flex items-center gap-3 rounded-
|
|
26165
|
+
"flex items-center gap-3 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-2",
|
|
26149
26166
|
className
|
|
26150
26167
|
),
|
|
26151
26168
|
children: [
|
|
@@ -26197,7 +26214,7 @@ function EnemyPlate({
|
|
|
26197
26214
|
exports.Box,
|
|
26198
26215
|
{
|
|
26199
26216
|
className: cn(
|
|
26200
|
-
"inline-flex flex-col gap-1 rounded-
|
|
26217
|
+
"inline-flex flex-col gap-1 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-3 py-1.5",
|
|
26201
26218
|
"min-w-[120px]",
|
|
26202
26219
|
className
|
|
26203
26220
|
),
|
|
@@ -26291,7 +26308,7 @@ function UnitCommandBar({
|
|
|
26291
26308
|
exports.Box,
|
|
26292
26309
|
{
|
|
26293
26310
|
className: cn(
|
|
26294
|
-
"flex items-center gap-1.5 rounded-
|
|
26311
|
+
"flex items-center gap-1.5 rounded-container bg-[var(--color-card)]/90 border border-border backdrop-blur-sm px-2 py-1.5",
|
|
26295
26312
|
className
|
|
26296
26313
|
),
|
|
26297
26314
|
children: commands.map((command, i) => /* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "flex flex-col items-center gap-0.5", children: [
|
|
@@ -26376,8 +26393,8 @@ function GameHud({
|
|
|
26376
26393
|
className: cn(
|
|
26377
26394
|
"relative z-10",
|
|
26378
26395
|
positionMap[position],
|
|
26379
|
-
transparent && "bg-gradient-to-b from-
|
|
26380
|
-
position === "bottom" && "bg-gradient-to-t from-
|
|
26396
|
+
transparent && "bg-gradient-to-b from-background/50 to-transparent",
|
|
26397
|
+
position === "bottom" && "bg-gradient-to-t from-background/50 to-transparent",
|
|
26381
26398
|
className
|
|
26382
26399
|
),
|
|
26383
26400
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4", children: stats.map((stat, i) => /* @__PURE__ */ jsxRuntime.jsx(StatBadge, { ...stat, size }, i)) })
|
|
@@ -26535,8 +26552,8 @@ function DialogueBox({
|
|
|
26535
26552
|
tabIndex: 0,
|
|
26536
26553
|
role: "dialog",
|
|
26537
26554
|
"aria-label": "Dialogue",
|
|
26538
|
-
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mx-4 my-4 bg-[var(--color-card)] bg-opacity-95 border-2 border-
|
|
26539
|
-
dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-
|
|
26555
|
+
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: [
|
|
26556
|
+
dialogue.portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 p-4 border-r border-border", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
26540
26557
|
"img",
|
|
26541
26558
|
{
|
|
26542
26559
|
src: dialogue.portrait,
|
|
@@ -26546,7 +26563,7 @@ function DialogueBox({
|
|
|
26546
26563
|
}
|
|
26547
26564
|
) }),
|
|
26548
26565
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 p-4", children: [
|
|
26549
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
26566
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-warning font-bold mb-2", children: dialogue.speaker }),
|
|
26550
26567
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-lg leading-relaxed min-h-[60px]", children: [
|
|
26551
26568
|
displayedText,
|
|
26552
26569
|
isTyping && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-pulse", children: "\u258C" })
|
|
@@ -26556,9 +26573,9 @@ function DialogueBox({
|
|
|
26556
26573
|
{
|
|
26557
26574
|
type: "button",
|
|
26558
26575
|
className: cn(
|
|
26559
|
-
"block w-full text-left px-4 py-2 rounded transition-colors",
|
|
26560
|
-
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-
|
|
26561
|
-
selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-
|
|
26576
|
+
"block w-full text-left px-4 py-2 rounded-interactive transition-colors",
|
|
26577
|
+
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-warning",
|
|
26578
|
+
selectedChoice === index ? "bg-[var(--color-surface,#374151)] text-warning" : "bg-[var(--color-card)] text-[var(--color-foreground)]"
|
|
26562
26579
|
),
|
|
26563
26580
|
onClick: (e) => {
|
|
26564
26581
|
e.stopPropagation();
|
|
@@ -26566,7 +26583,7 @@ function DialogueBox({
|
|
|
26566
26583
|
onChoice?.(choice);
|
|
26567
26584
|
},
|
|
26568
26585
|
children: [
|
|
26569
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
26586
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground mr-2", children: [
|
|
26570
26587
|
index + 1,
|
|
26571
26588
|
"."
|
|
26572
26589
|
] }),
|
|
@@ -26575,7 +26592,7 @@ function DialogueBox({
|
|
|
26575
26592
|
},
|
|
26576
26593
|
index
|
|
26577
26594
|
)) }),
|
|
26578
|
-
!isTyping && !dialogue.choices?.length && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 text-
|
|
26595
|
+
!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..." })
|
|
26579
26596
|
] })
|
|
26580
26597
|
] }) })
|
|
26581
26598
|
}
|
|
@@ -26678,7 +26695,7 @@ function InventoryPanel({
|
|
|
26678
26695
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
26679
26696
|
"div",
|
|
26680
26697
|
{
|
|
26681
|
-
className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-
|
|
26698
|
+
className: "grid gap-1 bg-[var(--color-card)] p-2 rounded-container border border-border",
|
|
26682
26699
|
style: {
|
|
26683
26700
|
gridTemplateColumns: `repeat(${safeColumns}, ${slotSize}px)`,
|
|
26684
26701
|
gridTemplateRows: `repeat(${rows}, ${slotSize}px)`
|
|
@@ -26690,8 +26707,8 @@ function InventoryPanel({
|
|
|
26690
26707
|
className: cn(
|
|
26691
26708
|
"relative flex items-center justify-center",
|
|
26692
26709
|
"bg-[var(--color-card)] border rounded transition-colors",
|
|
26693
|
-
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-
|
|
26694
|
-
selectedSlot === index ? "border-
|
|
26710
|
+
"hover:bg-[var(--color-surface,#374151)] focus:outline-none focus:ring-2 focus:ring-info",
|
|
26711
|
+
selectedSlot === index ? "border-warning bg-[var(--color-surface,#374151)]" : "border-muted"
|
|
26695
26712
|
),
|
|
26696
26713
|
style: { width: slotSize, height: slotSize },
|
|
26697
26714
|
onClick: () => handleSlotClick(index),
|
|
@@ -26710,8 +26727,8 @@ function InventoryPanel({
|
|
|
26710
26727
|
className: "w-8 h-8 object-contain",
|
|
26711
26728
|
style: { imageRendering: "pixelated" }
|
|
26712
26729
|
}
|
|
26713
|
-
) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-8 h-8 bg-
|
|
26714
|
-
item.quantity > 1 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute bottom-0 right-0 bg-
|
|
26730
|
+
) : /* @__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() }),
|
|
26731
|
+
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 })
|
|
26715
26732
|
] })
|
|
26716
26733
|
},
|
|
26717
26734
|
index
|
|
@@ -26721,7 +26738,7 @@ function InventoryPanel({
|
|
|
26721
26738
|
showTooltips && hoveredItem && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
26722
26739
|
"div",
|
|
26723
26740
|
{
|
|
26724
|
-
className: "fixed z-50 bg-[var(--color-card)] border border-
|
|
26741
|
+
className: "fixed z-50 bg-[var(--color-card)] border border-border rounded-container p-2 shadow-elevation-card pointer-events-none",
|
|
26725
26742
|
style: {
|
|
26726
26743
|
left: tooltipPosition.x,
|
|
26727
26744
|
top: tooltipPosition.y,
|
|
@@ -26729,8 +26746,8 @@ function InventoryPanel({
|
|
|
26729
26746
|
},
|
|
26730
26747
|
children: [
|
|
26731
26748
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-semibold text-[var(--color-foreground)]", children: hoveredItem.name || hoveredItem.type }),
|
|
26732
|
-
hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-
|
|
26733
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-
|
|
26749
|
+
hoveredItem.description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground mt-1", children: hoveredItem.description }),
|
|
26750
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-xs text-muted-foreground mt-1", children: [
|
|
26734
26751
|
"Quantity: ",
|
|
26735
26752
|
hoveredItem.quantity
|
|
26736
26753
|
] })
|
|
@@ -26808,7 +26825,7 @@ function GameMenu({
|
|
|
26808
26825
|
children: title
|
|
26809
26826
|
}
|
|
26810
26827
|
),
|
|
26811
|
-
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-
|
|
26828
|
+
subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
|
|
26812
26829
|
] }),
|
|
26813
26830
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
26814
26831
|
"button",
|
|
@@ -26816,10 +26833,10 @@ function GameMenu({
|
|
|
26816
26833
|
onClick: () => handleOptionClick(option),
|
|
26817
26834
|
disabled: option.disabled,
|
|
26818
26835
|
className: cn(
|
|
26819
|
-
"w-full py-4 px-8 rounded-
|
|
26836
|
+
"w-full py-4 px-8 rounded-container border-2 font-bold text-lg",
|
|
26820
26837
|
"transition-all duration-200 transform",
|
|
26821
26838
|
"hover:scale-105 active:scale-95",
|
|
26822
|
-
"focus:outline-none focus:ring-4 focus:ring-
|
|
26839
|
+
"focus:outline-none focus:ring-4 focus:ring-foreground/25",
|
|
26823
26840
|
variantMap3[option.variant ?? "secondary"] ?? variantMap3.secondary,
|
|
26824
26841
|
option.disabled && "opacity-50 cursor-not-allowed hover:scale-100"
|
|
26825
26842
|
),
|
|
@@ -26831,8 +26848,8 @@ function GameMenu({
|
|
|
26831
26848
|
index
|
|
26832
26849
|
)) }),
|
|
26833
26850
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute inset-0 pointer-events-none overflow-hidden", children: [
|
|
26834
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-
|
|
26835
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-
|
|
26851
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
|
|
26852
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
|
|
26836
26853
|
] })
|
|
26837
26854
|
]
|
|
26838
26855
|
}
|
|
@@ -26845,9 +26862,9 @@ var init_GameMenu = __esm({
|
|
|
26845
26862
|
init_cn();
|
|
26846
26863
|
init_useEventBus();
|
|
26847
26864
|
variantMap3 = {
|
|
26848
|
-
primary: "bg-[var(--color-primary)] hover:bg-
|
|
26849
|
-
secondary: "bg-[var(--color-surface,#374151)] hover:bg-
|
|
26850
|
-
ghost: "bg-transparent hover:bg-
|
|
26865
|
+
primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info shadow-lg shadow-info/25",
|
|
26866
|
+
secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
|
|
26867
|
+
ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
|
|
26851
26868
|
};
|
|
26852
26869
|
GameMenu.displayName = "GameMenu";
|
|
26853
26870
|
}
|
|
@@ -26915,13 +26932,13 @@ function GameOverScreen({
|
|
|
26915
26932
|
children: title
|
|
26916
26933
|
}
|
|
26917
26934
|
),
|
|
26918
|
-
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-
|
|
26919
|
-
isNewHighScore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-6 px-6 py-2 bg-
|
|
26935
|
+
message && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xl text-muted-foreground mb-8 text-center max-w-md", children: message }),
|
|
26936
|
+
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}" }) }),
|
|
26920
26937
|
stats.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
26921
26938
|
"div",
|
|
26922
26939
|
{
|
|
26923
26940
|
className: cn(
|
|
26924
|
-
"mb-8 p-6 rounded-
|
|
26941
|
+
"mb-8 p-6 rounded-container border-2 bg-background/30",
|
|
26925
26942
|
colors.accent
|
|
26926
26943
|
),
|
|
26927
26944
|
children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-4", children: stats.map((stat, index) => {
|
|
@@ -26930,7 +26947,7 @@ function GameOverScreen({
|
|
|
26930
26947
|
displayValue = formatTime2(displayValue);
|
|
26931
26948
|
}
|
|
26932
26949
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-center", children: [
|
|
26933
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-
|
|
26950
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-muted-foreground text-sm mb-1", children: stat.label }),
|
|
26934
26951
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-[var(--color-foreground)] text-2xl font-bold flex items-center justify-center gap-2", children: [
|
|
26935
26952
|
stat.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { children: stat.icon }),
|
|
26936
26953
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "tabular-nums", children: displayValue })
|
|
@@ -26944,10 +26961,10 @@ function GameOverScreen({
|
|
|
26944
26961
|
{
|
|
26945
26962
|
onClick: () => handleActionClick(action),
|
|
26946
26963
|
className: cn(
|
|
26947
|
-
"px-8 py-4 rounded-
|
|
26964
|
+
"px-8 py-4 rounded-container border-2 font-bold text-lg",
|
|
26948
26965
|
"transition-all duration-200",
|
|
26949
26966
|
"hover:scale-105 active:scale-95",
|
|
26950
|
-
"focus:outline-none focus:ring-4 focus:ring-
|
|
26967
|
+
"focus:outline-none focus:ring-4 focus:ring-foreground/25",
|
|
26951
26968
|
buttonVariants[action.variant ?? "secondary"]
|
|
26952
26969
|
),
|
|
26953
26970
|
children: action.label
|
|
@@ -26966,25 +26983,25 @@ var init_GameOverScreen = __esm({
|
|
|
26966
26983
|
init_useEventBus();
|
|
26967
26984
|
variantColors = {
|
|
26968
26985
|
victory: {
|
|
26969
|
-
bg: "from-
|
|
26970
|
-
title: "text-
|
|
26971
|
-
accent: "border-
|
|
26986
|
+
bg: "from-success/90 to-success/90",
|
|
26987
|
+
title: "text-success",
|
|
26988
|
+
accent: "border-success"
|
|
26972
26989
|
},
|
|
26973
26990
|
defeat: {
|
|
26974
|
-
bg: "from-
|
|
26975
|
-
title: "text-
|
|
26976
|
-
accent: "border-
|
|
26991
|
+
bg: "from-error/90 to-background/90",
|
|
26992
|
+
title: "text-error",
|
|
26993
|
+
accent: "border-error"
|
|
26977
26994
|
},
|
|
26978
26995
|
neutral: {
|
|
26979
|
-
bg: "from-
|
|
26980
|
-
title: "text-
|
|
26981
|
-
accent: "border-
|
|
26996
|
+
bg: "from-muted/90 to-background/90",
|
|
26997
|
+
title: "text-foreground",
|
|
26998
|
+
accent: "border-muted"
|
|
26982
26999
|
}
|
|
26983
27000
|
};
|
|
26984
27001
|
buttonVariants = {
|
|
26985
|
-
primary: "bg-[var(--color-primary)] hover:bg-
|
|
26986
|
-
secondary: "bg-[var(--color-surface,#374151)] hover:bg-
|
|
26987
|
-
ghost: "bg-transparent hover:bg-
|
|
27002
|
+
primary: "bg-[var(--color-primary)] hover:bg-info text-[var(--color-primary-foreground)] border-info",
|
|
27003
|
+
secondary: "bg-[var(--color-surface,#374151)] hover:bg-muted text-[var(--color-foreground)] border-muted",
|
|
27004
|
+
ghost: "bg-transparent hover:bg-foreground/10 text-[var(--color-foreground)] border-foreground/20"
|
|
26988
27005
|
};
|
|
26989
27006
|
GameOverScreen.displayName = "GameOverScreen";
|
|
26990
27007
|
}
|
|
@@ -27218,7 +27235,7 @@ function PlatformerCanvas({
|
|
|
27218
27235
|
{
|
|
27219
27236
|
ref: canvasRef,
|
|
27220
27237
|
style: { width: canvasWidth, height: canvasHeight },
|
|
27221
|
-
className: cn("block rounded-
|
|
27238
|
+
className: cn("block rounded-container border border-border/10", className),
|
|
27222
27239
|
"data-testid": "platformer-canvas",
|
|
27223
27240
|
tabIndex: 0
|
|
27224
27241
|
}
|
|
@@ -34885,7 +34902,7 @@ function DebuggerBoard({
|
|
|
34885
34902
|
backgroundPosition: "center"
|
|
34886
34903
|
},
|
|
34887
34904
|
children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "lg", className: "p-4", children: [
|
|
34888
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
34905
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.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(exports.Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
34889
34906
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", children: [
|
|
34890
34907
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", align: "center", children: [
|
|
34891
34908
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Bug, size: "sm" }),
|
|
@@ -34898,11 +34915,11 @@ function DebuggerBoard({
|
|
|
34898
34915
|
const isFlagged = flaggedLines.has(line.id);
|
|
34899
34916
|
let lineStyle = "";
|
|
34900
34917
|
if (submitted) {
|
|
34901
|
-
if (line.isBug && isFlagged) lineStyle = "bg-
|
|
34902
|
-
else if (line.isBug && !isFlagged) lineStyle = "bg-
|
|
34903
|
-
else if (!line.isBug && isFlagged) lineStyle = "bg-
|
|
34918
|
+
if (line.isBug && isFlagged) lineStyle = "bg-success/10";
|
|
34919
|
+
else if (line.isBug && !isFlagged) lineStyle = "bg-warning/10";
|
|
34920
|
+
else if (!line.isBug && isFlagged) lineStyle = "bg-error/10";
|
|
34904
34921
|
} else if (isFlagged) {
|
|
34905
|
-
lineStyle = "bg-
|
|
34922
|
+
lineStyle = "bg-error/10";
|
|
34906
34923
|
}
|
|
34907
34924
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
34908
34925
|
exports.HStack,
|
|
@@ -34915,8 +34932,8 @@ function DebuggerBoard({
|
|
|
34915
34932
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-10 flex-shrink-0 flex items-center justify-center border-r border-border text-muted-foreground", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", children: i + 1 }) }),
|
|
34916
34933
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex-1 px-3 py-1.5 font-mono text-sm whitespace-pre", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", className: "font-mono text-sm", children: line.content }) }),
|
|
34917
34934
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.Box, { className: "w-8 flex-shrink-0 flex items-center justify-center", children: [
|
|
34918
|
-
isFlagged && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-
|
|
34919
|
-
submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-
|
|
34935
|
+
isFlagged && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-error" }),
|
|
34936
|
+
submitted && line.isBug && !isFlagged && /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Bug, size: "xs", className: "text-warning" })
|
|
34920
34937
|
] })
|
|
34921
34938
|
]
|
|
34922
34939
|
},
|
|
@@ -34931,7 +34948,7 @@ function DebuggerBoard({
|
|
|
34931
34948
|
{
|
|
34932
34949
|
icon: flaggedLines.has(line.id) ? LucideIcons2.CheckCircle : LucideIcons2.XCircle,
|
|
34933
34950
|
size: "xs",
|
|
34934
|
-
className: flaggedLines.has(line.id) ? "text-
|
|
34951
|
+
className: flaggedLines.has(line.id) ? "text-success mt-0.5" : "text-warning mt-0.5"
|
|
34935
34952
|
}
|
|
34936
34953
|
),
|
|
34937
34954
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "none", children: [
|
|
@@ -34940,7 +34957,7 @@ function DebuggerBoard({
|
|
|
34940
34957
|
] })
|
|
34941
34958
|
] }, line.id))
|
|
34942
34959
|
] }) }),
|
|
34943
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-
|
|
34960
|
+
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.hint }) }),
|
|
34944
34961
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", justify: "center", children: [
|
|
34945
34962
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(exports.Button, { variant: "primary", onClick: handleSubmit, disabled: flaggedLines.size === 0, children: [
|
|
34946
34963
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Send, size: "sm" }),
|
|
@@ -35424,12 +35441,12 @@ function DialogueBubble({
|
|
|
35424
35441
|
"div",
|
|
35425
35442
|
{
|
|
35426
35443
|
className: cn(
|
|
35427
|
-
"flex items-start gap-3 rounded-
|
|
35444
|
+
"flex items-start gap-3 rounded-container bg-background/80 backdrop-blur-sm px-4 py-3 border border-border/10",
|
|
35428
35445
|
position === "top" ? "rounded-bl-none" : "rounded-tl-none",
|
|
35429
35446
|
className
|
|
35430
35447
|
),
|
|
35431
35448
|
children: [
|
|
35432
|
-
portrait && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-shrink-0 w-12 h-12 rounded-full overflow-hidden border-2 border-
|
|
35449
|
+
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(
|
|
35433
35450
|
"img",
|
|
35434
35451
|
{
|
|
35435
35452
|
src: portrait,
|
|
@@ -35438,8 +35455,8 @@ function DialogueBubble({
|
|
|
35438
35455
|
}
|
|
35439
35456
|
) }),
|
|
35440
35457
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1 min-w-0", children: [
|
|
35441
|
-
speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-
|
|
35442
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-
|
|
35458
|
+
speaker && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold text-warning", children: speaker }),
|
|
35459
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-foreground leading-relaxed", children: text })
|
|
35443
35460
|
] })
|
|
35444
35461
|
]
|
|
35445
35462
|
}
|
|
@@ -35758,7 +35775,7 @@ function LinearView({
|
|
|
35758
35775
|
className
|
|
35759
35776
|
}) {
|
|
35760
35777
|
const currentIdx = trait.states.indexOf(trait.currentState);
|
|
35761
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: cn("p-3 rounded-
|
|
35778
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
35762
35779
|
trait.description && /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: trait.description }),
|
|
35763
35780
|
/* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
35764
35781
|
const isDone = i < currentIdx;
|
|
@@ -35780,10 +35797,10 @@ function LinearView({
|
|
|
35780
35797
|
{
|
|
35781
35798
|
display: "inline-flex",
|
|
35782
35799
|
className: cn(
|
|
35783
|
-
"items-center justify-center rounded-
|
|
35800
|
+
"items-center justify-center rounded-pill px-3 py-1 border-2 transition-all",
|
|
35784
35801
|
SIZE_CONFIG2[size || "md"].fontSize,
|
|
35785
35802
|
isDone && "bg-success/20 border-success text-success",
|
|
35786
|
-
isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-
|
|
35803
|
+
isCurrent && "bg-primary/20 border-primary text-primary font-bold shadow-elevation-card shadow-primary/20",
|
|
35787
35804
|
!isDone && !isCurrent && "bg-muted border-border text-muted-foreground"
|
|
35788
35805
|
),
|
|
35789
35806
|
children: [
|
|
@@ -35805,7 +35822,7 @@ function CompactView({
|
|
|
35805
35822
|
const { t } = useTranslate();
|
|
35806
35823
|
const config = SIZE_CONFIG2[size || "md"];
|
|
35807
35824
|
const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
|
|
35808
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: cn("p-3 rounded-
|
|
35825
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
35809
35826
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { className: "items-center justify-between", children: [
|
|
35810
35827
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
|
|
35811
35828
|
/* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
|
|
@@ -35841,7 +35858,7 @@ function FullView({
|
|
|
35841
35858
|
const { t } = useTranslate();
|
|
35842
35859
|
const config = SIZE_CONFIG2[size || "md"];
|
|
35843
35860
|
const currentTransitions = trait.transitions.filter((t2) => t2.from === trait.currentState);
|
|
35844
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: cn("p-3 rounded-
|
|
35861
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: cn("p-3 rounded-container bg-card border border-border", className), gap: "sm", children: [
|
|
35845
35862
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { className: "items-center justify-between", children: [
|
|
35846
35863
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-foreground font-bold", children: trait.name }),
|
|
35847
35864
|
/* @__PURE__ */ jsxRuntime.jsx(StateIndicator, { state: trait.currentState, size: "sm", stateStyles })
|
|
@@ -35855,9 +35872,9 @@ function FullView({
|
|
|
35855
35872
|
{
|
|
35856
35873
|
display: "flex",
|
|
35857
35874
|
className: cn(
|
|
35858
|
-
"items-center justify-center rounded-
|
|
35875
|
+
"items-center justify-center rounded-container border-2 transition-all px-2",
|
|
35859
35876
|
config.nodeSize,
|
|
35860
|
-
isCurrent && "bg-primary/20 border-primary shadow-
|
|
35877
|
+
isCurrent && "bg-primary/20 border-primary shadow-elevation-card shadow-primary/20",
|
|
35861
35878
|
!isCurrent && hasOutgoing && "bg-muted border-border hover:border-muted-foreground",
|
|
35862
35879
|
!isCurrent && !hasOutgoing && "bg-background border-border opacity-60",
|
|
35863
35880
|
onStateClick && "cursor-pointer"
|
|
@@ -36287,7 +36304,7 @@ function EventHandlerBoard({
|
|
|
36287
36304
|
backgroundPosition: "center"
|
|
36288
36305
|
},
|
|
36289
36306
|
children: [
|
|
36290
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
36307
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.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(exports.Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
36291
36308
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", children: [
|
|
36292
36309
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
36293
36310
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
|
|
@@ -36302,7 +36319,7 @@ function EventHandlerBoard({
|
|
|
36302
36319
|
exports.Box,
|
|
36303
36320
|
{
|
|
36304
36321
|
className: cn(
|
|
36305
|
-
"p-3 rounded-
|
|
36322
|
+
"p-3 rounded-container border-2 cursor-pointer transition-all hover:scale-105",
|
|
36306
36323
|
selectedObjectId === obj.id ? "border-primary bg-primary/10" : "border-border bg-card hover:border-muted-foreground"
|
|
36307
36324
|
),
|
|
36308
36325
|
onClick: () => setSelectedObjectId(obj.id),
|
|
@@ -36324,10 +36341,10 @@ function EventHandlerBoard({
|
|
|
36324
36341
|
}
|
|
36325
36342
|
),
|
|
36326
36343
|
eventLog.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(EventLog, { entries: eventLog }),
|
|
36327
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-
|
|
36344
|
+
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("eventHandler.chainComplete") }) }),
|
|
36328
36345
|
playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", children: [
|
|
36329
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-
|
|
36330
|
-
showHint && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-3 rounded-
|
|
36346
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body1", className: "text-foreground font-medium", children: t(encourageKey) }) }),
|
|
36347
|
+
showHint && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { className: "items-start", gap: "xs", children: [
|
|
36331
36348
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
36332
36349
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
36333
36350
|
] }) })
|
|
@@ -39373,7 +39390,7 @@ function MiniMap({
|
|
|
39373
39390
|
"div",
|
|
39374
39391
|
{
|
|
39375
39392
|
className: cn(
|
|
39376
|
-
"relative inline-block border border-
|
|
39393
|
+
"relative inline-block border border-border/20 rounded-container",
|
|
39377
39394
|
className
|
|
39378
39395
|
),
|
|
39379
39396
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -39593,7 +39610,7 @@ function NegotiatorBoard({
|
|
|
39593
39610
|
backgroundPosition: "center"
|
|
39594
39611
|
},
|
|
39595
39612
|
children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "lg", className: "p-4", children: [
|
|
39596
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
39613
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.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(exports.Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
39597
39614
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", children: [
|
|
39598
39615
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
39599
39616
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.description }),
|
|
@@ -39639,7 +39656,7 @@ function NegotiatorBoard({
|
|
|
39639
39656
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: "vs" }),
|
|
39640
39657
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", children: getActionLabel(round.opponentAction) }),
|
|
39641
39658
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.ArrowRight, size: "xs" }),
|
|
39642
|
-
/* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", weight: "bold", className: "text-
|
|
39659
|
+
/* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", weight: "bold", className: "text-success", children: [
|
|
39643
39660
|
"+",
|
|
39644
39661
|
round.playerPayoff
|
|
39645
39662
|
] }),
|
|
@@ -39650,7 +39667,7 @@ function NegotiatorBoard({
|
|
|
39650
39667
|
] }, round.round))
|
|
39651
39668
|
] }) }),
|
|
39652
39669
|
isComplete && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", align: "center", children: [
|
|
39653
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-
|
|
39670
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.CheckCircle, size: "lg", className: won ? "text-success" : "text-error" }),
|
|
39654
39671
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", weight: "bold", children: won ? entity.successMessage ?? t("negotiator.success") : entity.failMessage ?? t("negotiator.failed") }),
|
|
39655
39672
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
39656
39673
|
t("negotiator.finalScore"),
|
|
@@ -39660,7 +39677,7 @@ function NegotiatorBoard({
|
|
|
39660
39677
|
entity.targetScore
|
|
39661
39678
|
] })
|
|
39662
39679
|
] }) }),
|
|
39663
|
-
showHint && entity.hint && !won && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-
|
|
39680
|
+
showHint && entity.hint && !won && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.hint }) }),
|
|
39664
39681
|
isComplete && !won && /* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { justify: "center", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Button, { variant: "primary", onClick: handleReset, children: t("negotiator.playAgain") }) })
|
|
39665
39682
|
] })
|
|
39666
39683
|
}
|
|
@@ -40333,17 +40350,17 @@ function ResourceCounter({
|
|
|
40333
40350
|
"div",
|
|
40334
40351
|
{
|
|
40335
40352
|
className: cn(
|
|
40336
|
-
"inline-flex items-center rounded-
|
|
40337
|
-
"bg-
|
|
40353
|
+
"inline-flex items-center rounded-container",
|
|
40354
|
+
"bg-card/80 border border-muted font-medium text-foreground",
|
|
40338
40355
|
sizes.wrapper,
|
|
40339
40356
|
className
|
|
40340
40357
|
),
|
|
40341
40358
|
children: [
|
|
40342
40359
|
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("flex-shrink-0", sizes.icon), children: icon }),
|
|
40343
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-
|
|
40360
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: label }),
|
|
40344
40361
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("font-bold tabular-nums", color), children: [
|
|
40345
40362
|
value,
|
|
40346
|
-
max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-
|
|
40363
|
+
max != null && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
|
|
40347
40364
|
"/",
|
|
40348
40365
|
max
|
|
40349
40366
|
] })
|
|
@@ -42290,7 +42307,7 @@ function TraitSlot({
|
|
|
42290
42307
|
display: "flex",
|
|
42291
42308
|
position: "relative",
|
|
42292
42309
|
className: cn(
|
|
42293
|
-
"items-center justify-center rounded-
|
|
42310
|
+
"items-center justify-center rounded-container transition-all duration-200 bg-card/50",
|
|
42294
42311
|
!locked && "cursor-pointer",
|
|
42295
42312
|
locked && "cursor-not-allowed opacity-50",
|
|
42296
42313
|
isEmpty && !locked && "border-2 border-dashed border-border hover:border-muted-foreground",
|
|
@@ -42306,7 +42323,7 @@ function TraitSlot({
|
|
|
42306
42323
|
style: {
|
|
42307
42324
|
width: config.box,
|
|
42308
42325
|
height: config.box,
|
|
42309
|
-
backgroundColor: catColor?.bg ||
|
|
42326
|
+
backgroundColor: catColor?.bg || void 0,
|
|
42310
42327
|
borderColor: isDragOver ? void 0 : feedback === "correct" ? "var(--color-success)" : feedback === "wrong" ? "var(--color-error)" : catColor?.border || void 0
|
|
42311
42328
|
},
|
|
42312
42329
|
onClick: handleClick,
|
|
@@ -42335,7 +42352,7 @@ function TraitSlot({
|
|
|
42335
42352
|
exports.Box,
|
|
42336
42353
|
{
|
|
42337
42354
|
position: "absolute",
|
|
42338
|
-
className: "-top-1.5 -right-1.5 w-4 h-4 bg-error rounded-
|
|
42355
|
+
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",
|
|
42339
42356
|
onClick: handleRemove,
|
|
42340
42357
|
children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-foreground text-xs leading-none", children: "\xD7" })
|
|
42341
42358
|
}
|
|
@@ -42345,14 +42362,14 @@ function TraitSlot({
|
|
|
42345
42362
|
exports.Box,
|
|
42346
42363
|
{
|
|
42347
42364
|
position: "absolute",
|
|
42348
|
-
className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-
|
|
42365
|
+
className: "-bottom-1 -left-1 w-4 h-4 bg-card rounded-pill flex items-center justify-center border border-border",
|
|
42349
42366
|
children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground text-xs", children: slotNumber })
|
|
42350
42367
|
}
|
|
42351
42368
|
),
|
|
42352
42369
|
showTooltip && isHovered && itemMachine && !isEmpty && equippedItem && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
42353
42370
|
exports.Box,
|
|
42354
42371
|
{
|
|
42355
|
-
className: "p-3 bg-background border border-border rounded-
|
|
42372
|
+
className: "p-3 bg-background border border-border rounded-container shadow-xl",
|
|
42356
42373
|
style: {
|
|
42357
42374
|
...getTooltipStyle(),
|
|
42358
42375
|
minWidth: 200,
|
|
@@ -42602,12 +42619,12 @@ function SequencerBoard({
|
|
|
42602
42619
|
backgroundPosition: "center"
|
|
42603
42620
|
},
|
|
42604
42621
|
children: [
|
|
42605
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
42622
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.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(exports.Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
42606
42623
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", children: [
|
|
42607
42624
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
42608
42625
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description })
|
|
42609
42626
|
] }),
|
|
42610
|
-
showHint && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-3 rounded-
|
|
42627
|
+
showHint && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { className: "items-start", gap: "xs", children: [
|
|
42611
42628
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
42612
42629
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
42613
42630
|
] }) }),
|
|
@@ -42645,8 +42662,8 @@ function SequencerBoard({
|
|
|
42645
42662
|
label: t("sequencer.dragActions")
|
|
42646
42663
|
}
|
|
42647
42664
|
),
|
|
42648
|
-
hasFeedback && playState === "idle" && attempts > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-3 rounded-
|
|
42649
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-
|
|
42665
|
+
hasFeedback && playState === "idle" && attempts > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-3 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-foreground", children: t(encourageKey) }) }),
|
|
42666
|
+
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("sequencer.levelComplete") }) }),
|
|
42650
42667
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", children: [
|
|
42651
42668
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
42652
42669
|
exports.Button,
|
|
@@ -43322,7 +43339,7 @@ function SimulationCanvas({
|
|
|
43322
43339
|
ref: canvasRef,
|
|
43323
43340
|
width,
|
|
43324
43341
|
height,
|
|
43325
|
-
className: "rounded-
|
|
43342
|
+
className: "rounded-container block max-w-full h-auto"
|
|
43326
43343
|
}
|
|
43327
43344
|
) });
|
|
43328
43345
|
}
|
|
@@ -43530,7 +43547,7 @@ function SimulatorBoard({
|
|
|
43530
43547
|
backgroundPosition: "center"
|
|
43531
43548
|
},
|
|
43532
43549
|
children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "lg", className: "p-4", children: [
|
|
43533
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
43550
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.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(exports.Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
43534
43551
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", children: [
|
|
43535
43552
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h4", weight: "bold", children: entity.title }),
|
|
43536
43553
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.description })
|
|
@@ -43581,8 +43598,8 @@ function SimulatorBoard({
|
|
|
43581
43598
|
entity.outputUnit
|
|
43582
43599
|
] }),
|
|
43583
43600
|
submitted && /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", align: "center", children: [
|
|
43584
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-
|
|
43585
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", className: isCorrect ? "text-
|
|
43601
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: isCorrect ? LucideIcons2.CheckCircle : LucideIcons2.XCircle, size: "sm", className: isCorrect ? "text-success" : "text-error" }),
|
|
43602
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", className: isCorrect ? "text-success" : "text-error", children: isCorrect ? entity.successMessage ?? t("simulator.correct") : entity.failMessage ?? t("simulator.incorrect") })
|
|
43586
43603
|
] }),
|
|
43587
43604
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
43588
43605
|
t("simulator.target"),
|
|
@@ -43595,7 +43612,7 @@ function SimulatorBoard({
|
|
|
43595
43612
|
")"
|
|
43596
43613
|
] })
|
|
43597
43614
|
] }) }),
|
|
43598
|
-
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-
|
|
43615
|
+
showHint && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Card, { className: "p-4 border-l-4 border-l-warning", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body", children: entity.hint }) }),
|
|
43599
43616
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", justify: "center", children: [
|
|
43600
43617
|
!submitted ? /* @__PURE__ */ jsxRuntime.jsxs(exports.Button, { variant: "primary", onClick: handleSubmit, children: [
|
|
43601
43618
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { icon: LucideIcons2.Play, size: "sm" }),
|
|
@@ -44107,7 +44124,7 @@ function StateNode2({
|
|
|
44107
44124
|
position: "absolute",
|
|
44108
44125
|
display: "flex",
|
|
44109
44126
|
className: cn(
|
|
44110
|
-
"items-center justify-center rounded-
|
|
44127
|
+
"items-center justify-center rounded-pill border-3 transition-all cursor-pointer select-none",
|
|
44111
44128
|
"min-w-[80px] h-[80px] px-3",
|
|
44112
44129
|
isCurrent && "bg-primary/20 border-primary shadow-lg shadow-primary/30 scale-110",
|
|
44113
44130
|
isSelected && !isCurrent && "bg-accent/20 border-accent ring-2 ring-accent/50",
|
|
@@ -44420,7 +44437,7 @@ function StateArchitectBoard({
|
|
|
44420
44437
|
backgroundPosition: "center"
|
|
44421
44438
|
},
|
|
44422
44439
|
children: [
|
|
44423
|
-
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "w-full h-32 overflow-hidden rounded-
|
|
44440
|
+
entity.headerImage && !headerError ? /* @__PURE__ */ jsxRuntime.jsx(exports.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(exports.Box, { className: "w-full h-32 rounded-container bg-gradient-to-br from-muted to-accent opacity-60" }) : null,
|
|
44424
44441
|
/* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", children: [
|
|
44425
44442
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h4", className: "text-foreground", children: entity.title }),
|
|
44426
44443
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-muted-foreground", children: entity.description }),
|
|
@@ -44439,7 +44456,7 @@ function StateArchitectBoard({
|
|
|
44439
44456
|
exports.Box,
|
|
44440
44457
|
{
|
|
44441
44458
|
position: "relative",
|
|
44442
|
-
className: "rounded-
|
|
44459
|
+
className: "rounded-container border border-border bg-background overflow-hidden",
|
|
44443
44460
|
style: { width: GRAPH_W, height: GRAPH_H },
|
|
44444
44461
|
children: [
|
|
44445
44462
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -44498,7 +44515,7 @@ function StateArchitectBoard({
|
|
|
44498
44515
|
children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
|
|
44499
44516
|
}
|
|
44500
44517
|
) }),
|
|
44501
|
-
transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", className: "p-3 rounded-
|
|
44518
|
+
transitions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "xs", className: "p-3 rounded-container bg-muted/50 border border-border", children: [
|
|
44502
44519
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
|
|
44503
44520
|
transitions.map((t2) => /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
44504
44521
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
|
|
@@ -44532,7 +44549,7 @@ function StateArchitectBoard({
|
|
|
44532
44549
|
variables
|
|
44533
44550
|
}
|
|
44534
44551
|
),
|
|
44535
|
-
testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: "p-3 rounded-
|
|
44552
|
+
testResults.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { className: "p-3 rounded-container bg-card border border-border", gap: "xs", children: [
|
|
44536
44553
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-muted-foreground font-medium", children: t("stateArchitect.testResults") + ":" }),
|
|
44537
44554
|
testResults.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
44538
44555
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: r.passed ? "text-success" : "text-error", children: r.passed ? "\u2714" : "\u2717" }),
|
|
@@ -44543,10 +44560,10 @@ function StateArchitectBoard({
|
|
|
44543
44560
|
entity.showCodeView !== false && /* @__PURE__ */ jsxRuntime.jsx(CodeView, { data: codeData, label: "View Code" })
|
|
44544
44561
|
] })
|
|
44545
44562
|
] }),
|
|
44546
|
-
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-
|
|
44563
|
+
playState === "success" && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-container bg-success/20 border border-success text-center", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "h5", className: "text-success", children: entity.successMessage || t("stateArchitect.allPassed") }) }),
|
|
44547
44564
|
playState === "fail" && /* @__PURE__ */ jsxRuntime.jsxs(exports.VStack, { gap: "sm", children: [
|
|
44548
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-
|
|
44549
|
-
attempts >= 3 && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-3 rounded-
|
|
44565
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-4 rounded-container bg-warning/10 border border-warning/30 text-center", children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body1", className: "text-foreground font-medium", children: t(ENCOURAGEMENT_KEYS3[Math.min(attempts - 1, ENCOURAGEMENT_KEYS3.length - 1)] ?? ENCOURAGEMENT_KEYS3[0]) }) }),
|
|
44566
|
+
attempts >= 3 && entity.hint && /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "p-3 rounded-container bg-accent/10 border border-accent/30", children: /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { className: "items-start", gap: "xs", children: [
|
|
44550
44567
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-accent font-bold shrink-0", children: "\u{1F4A1} " + t("game.hint") + ":" }),
|
|
44551
44568
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "body2", className: "text-foreground", children: entity.hint })
|
|
44552
44569
|
] }) })
|
|
@@ -44652,7 +44669,7 @@ function StatusEffect({
|
|
|
44652
44669
|
"div",
|
|
44653
44670
|
{
|
|
44654
44671
|
className: cn(
|
|
44655
|
-
"relative flex items-center justify-center rounded border-2",
|
|
44672
|
+
"relative flex items-center justify-center rounded-interactive border-2",
|
|
44656
44673
|
sizes.container,
|
|
44657
44674
|
variantStyles9[variant]
|
|
44658
44675
|
),
|
|
@@ -44663,7 +44680,7 @@ function StatusEffect({
|
|
|
44663
44680
|
"span",
|
|
44664
44681
|
{
|
|
44665
44682
|
className: cn(
|
|
44666
|
-
"absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-
|
|
44683
|
+
"absolute bottom-0 left-0 right-0 text-center font-mono font-bold text-foreground bg-background/60 leading-tight",
|
|
44667
44684
|
sizes.timer
|
|
44668
44685
|
),
|
|
44669
44686
|
children: formatDuration(duration)
|
|
@@ -44676,7 +44693,7 @@ function StatusEffect({
|
|
|
44676
44693
|
"span",
|
|
44677
44694
|
{
|
|
44678
44695
|
className: cn(
|
|
44679
|
-
"absolute flex items-center justify-center rounded-full bg-
|
|
44696
|
+
"absolute flex items-center justify-center rounded-full bg-card text-foreground font-bold leading-none",
|
|
44680
44697
|
sizes.badge
|
|
44681
44698
|
),
|
|
44682
44699
|
children: stacks
|
|
@@ -44695,9 +44712,9 @@ var init_StatusEffect = __esm({
|
|
|
44695
44712
|
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" }
|
|
44696
44713
|
};
|
|
44697
44714
|
variantStyles9 = {
|
|
44698
|
-
buff: "border-
|
|
44699
|
-
debuff: "border-
|
|
44700
|
-
neutral: "border-
|
|
44715
|
+
buff: "border-success bg-success/20",
|
|
44716
|
+
debuff: "border-error bg-error/20",
|
|
44717
|
+
neutral: "border-muted bg-muted/20"
|
|
44701
44718
|
};
|
|
44702
44719
|
StatusEffect.displayName = "StatusEffect";
|
|
44703
44720
|
}
|
|
@@ -45310,12 +45327,12 @@ function TimerDisplay({
|
|
|
45310
45327
|
"div",
|
|
45311
45328
|
{
|
|
45312
45329
|
className: cn(
|
|
45313
|
-
"inline-flex items-center justify-center rounded-
|
|
45314
|
-
"bg-
|
|
45330
|
+
"inline-flex items-center justify-center rounded-container",
|
|
45331
|
+
"bg-card/80 border border-muted font-mono font-bold tabular-nums",
|
|
45315
45332
|
sizeMap17[size],
|
|
45316
|
-
running && "border-
|
|
45317
|
-
isLow && "text-
|
|
45318
|
-
!isLow && "text-
|
|
45333
|
+
running && "border-success/50",
|
|
45334
|
+
isLow && "text-error border-error/50 animate-pulse",
|
|
45335
|
+
!isLow && "text-foreground",
|
|
45319
45336
|
className
|
|
45320
45337
|
),
|
|
45321
45338
|
children: formatTime3(seconds, format)
|
|
@@ -46039,8 +46056,8 @@ function XPBar({
|
|
|
46039
46056
|
"span",
|
|
46040
46057
|
{
|
|
46041
46058
|
className: cn(
|
|
46042
|
-
"flex-shrink-0 rounded-
|
|
46043
|
-
"bg-
|
|
46059
|
+
"flex-shrink-0 rounded-interactive font-bold",
|
|
46060
|
+
"bg-accent text-foreground border border-accent",
|
|
46044
46061
|
sizes.badge
|
|
46045
46062
|
),
|
|
46046
46063
|
children: [
|
|
@@ -46054,7 +46071,7 @@ function XPBar({
|
|
|
46054
46071
|
"div",
|
|
46055
46072
|
{
|
|
46056
46073
|
className: cn(
|
|
46057
|
-
"relative w-full overflow-hidden rounded-full bg-
|
|
46074
|
+
"relative w-full overflow-hidden rounded-full bg-muted border border-muted",
|
|
46058
46075
|
sizes.bar
|
|
46059
46076
|
),
|
|
46060
46077
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -46062,7 +46079,7 @@ function XPBar({
|
|
|
46062
46079
|
{
|
|
46063
46080
|
className: cn(
|
|
46064
46081
|
"absolute inset-y-0 left-0 rounded-full",
|
|
46065
|
-
"bg-gradient-to-r from-
|
|
46082
|
+
"bg-gradient-to-r from-accent to-info",
|
|
46066
46083
|
animated && "transition-all duration-500 ease-out"
|
|
46067
46084
|
),
|
|
46068
46085
|
style: { width: `${percentage}%` }
|
|
@@ -46070,7 +46087,7 @@ function XPBar({
|
|
|
46070
46087
|
)
|
|
46071
46088
|
}
|
|
46072
46089
|
),
|
|
46073
|
-
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-
|
|
46090
|
+
showLabel && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: cn("text-muted-foreground tabular-nums", sizes.text), children: [
|
|
46074
46091
|
current,
|
|
46075
46092
|
" / ",
|
|
46076
46093
|
max,
|
|
@@ -48367,7 +48384,7 @@ function CollapsibleSection({ title, expanded, onToggle, children, className })
|
|
|
48367
48384
|
CollapsibleSection.displayName = "CollapsibleSection";
|
|
48368
48385
|
function EditorSlider({ label, value, min, max, step = 0.1, onChange, className }) {
|
|
48369
48386
|
return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", align: "center", className, children: [
|
|
48370
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[80px] text-
|
|
48387
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[80px] text-muted-foreground", children: label }),
|
|
48371
48388
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
48372
48389
|
"input",
|
|
48373
48390
|
{
|
|
@@ -48377,22 +48394,22 @@ function EditorSlider({ label, value, min, max, step = 0.1, onChange, className
|
|
|
48377
48394
|
step,
|
|
48378
48395
|
value,
|
|
48379
48396
|
onChange: (e) => onChange(parseFloat(e.target.value)),
|
|
48380
|
-
className: "w-full h-1.5 bg-
|
|
48397
|
+
className: "w-full h-1.5 bg-muted rounded-interactive appearance-none cursor-pointer accent-primary"
|
|
48381
48398
|
}
|
|
48382
48399
|
) }),
|
|
48383
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[40px] text-right text-
|
|
48400
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[40px] text-right text-muted-foreground", children: typeof step === "number" && step < 1 ? value.toFixed(1) : value })
|
|
48384
48401
|
] });
|
|
48385
48402
|
}
|
|
48386
48403
|
EditorSlider.displayName = "EditorSlider";
|
|
48387
48404
|
function EditorSelect({ label, value, options, onChange, className }) {
|
|
48388
48405
|
return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", align: "center", className, children: [
|
|
48389
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[80px] text-
|
|
48406
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[80px] text-muted-foreground", children: label }),
|
|
48390
48407
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
48391
48408
|
"select",
|
|
48392
48409
|
{
|
|
48393
48410
|
value,
|
|
48394
48411
|
onChange: (e) => onChange(e.target.value),
|
|
48395
|
-
className: "w-full px-2 py-1 text-xs bg-
|
|
48412
|
+
className: "w-full px-2 py-1 text-xs bg-muted text-foreground border border-muted rounded cursor-pointer",
|
|
48396
48413
|
children: options.map((opt) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: opt.value, children: opt.label }, opt.value))
|
|
48397
48414
|
}
|
|
48398
48415
|
) })
|
|
@@ -48401,14 +48418,14 @@ function EditorSelect({ label, value, options, onChange, className }) {
|
|
|
48401
48418
|
EditorSelect.displayName = "EditorSelect";
|
|
48402
48419
|
function EditorCheckbox({ label, checked, onChange, className }) {
|
|
48403
48420
|
return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", align: "center", className, children: [
|
|
48404
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[80px] text-
|
|
48421
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[80px] text-muted-foreground", children: label }),
|
|
48405
48422
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
48406
48423
|
"input",
|
|
48407
48424
|
{
|
|
48408
48425
|
type: "checkbox",
|
|
48409
48426
|
checked,
|
|
48410
48427
|
onChange: (e) => onChange(e.target.checked),
|
|
48411
|
-
className: "w-4 h-4 accent-
|
|
48428
|
+
className: "w-4 h-4 accent-primary cursor-pointer"
|
|
48412
48429
|
}
|
|
48413
48430
|
) })
|
|
48414
48431
|
] });
|
|
@@ -48416,7 +48433,7 @@ function EditorCheckbox({ label, checked, onChange, className }) {
|
|
|
48416
48433
|
EditorCheckbox.displayName = "EditorCheckbox";
|
|
48417
48434
|
function EditorTextInput({ label, value, onChange, placeholder, className }) {
|
|
48418
48435
|
return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", align: "center", className, children: [
|
|
48419
|
-
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[80px] text-
|
|
48436
|
+
/* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", className: "min-w-[80px] text-muted-foreground", children: label }),
|
|
48420
48437
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
48421
48438
|
"input",
|
|
48422
48439
|
{
|
|
@@ -48424,30 +48441,30 @@ function EditorTextInput({ label, value, onChange, placeholder, className }) {
|
|
|
48424
48441
|
value,
|
|
48425
48442
|
onChange: (e) => onChange(e.target.value),
|
|
48426
48443
|
placeholder,
|
|
48427
|
-
className: "w-full px-2 py-1 text-xs bg-
|
|
48444
|
+
className: "w-full px-2 py-1 text-xs bg-muted text-foreground border border-muted rounded"
|
|
48428
48445
|
}
|
|
48429
48446
|
) })
|
|
48430
48447
|
] });
|
|
48431
48448
|
}
|
|
48432
48449
|
EditorTextInput.displayName = "EditorTextInput";
|
|
48433
48450
|
function StatusBar({ hoveredTile, mode, gridSize, unitCount, featureCount, className }) {
|
|
48434
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", align: "center", className: `px-3 py-1.5 bg-
|
|
48451
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "sm", align: "center", className: `px-3 py-1.5 bg-background border-t border-border ${className ?? ""}`, children: [
|
|
48435
48452
|
/* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: "info", size: "sm", children: mode }),
|
|
48436
|
-
/* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-
|
|
48453
|
+
/* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
48437
48454
|
"Tile: ",
|
|
48438
48455
|
hoveredTile ? `(${hoveredTile.x}, ${hoveredTile.y})` : "\u2014"
|
|
48439
48456
|
] }),
|
|
48440
|
-
gridSize && /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-
|
|
48457
|
+
gridSize && /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
48441
48458
|
"Grid: ",
|
|
48442
48459
|
gridSize.width,
|
|
48443
48460
|
"x",
|
|
48444
48461
|
gridSize.height
|
|
48445
48462
|
] }),
|
|
48446
|
-
unitCount !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-
|
|
48463
|
+
unitCount !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
48447
48464
|
"Units: ",
|
|
48448
48465
|
unitCount
|
|
48449
48466
|
] }),
|
|
48450
|
-
featureCount !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-
|
|
48467
|
+
featureCount !== void 0 && /* @__PURE__ */ jsxRuntime.jsxs(exports.Typography, { variant: "caption", className: "text-muted-foreground", children: [
|
|
48451
48468
|
"Features: ",
|
|
48452
48469
|
featureCount
|
|
48453
48470
|
] })
|
|
@@ -48459,8 +48476,8 @@ function TerrainPalette({ terrains, selectedTerrain, onSelect, className }) {
|
|
|
48459
48476
|
exports.Box,
|
|
48460
48477
|
{
|
|
48461
48478
|
onClick: () => onSelect(terrain),
|
|
48462
|
-
className: `w-8 h-8 rounded cursor-pointer border-2 transition-all ${selectedTerrain === terrain ? "border-
|
|
48463
|
-
style: { backgroundColor: TERRAIN_COLORS[terrain] || "
|
|
48479
|
+
className: `w-8 h-8 rounded cursor-pointer border-2 transition-all ${selectedTerrain === terrain ? "border-foreground scale-110 shadow-lg" : "border-muted hover:border-muted-foreground"}`,
|
|
48480
|
+
style: { backgroundColor: TERRAIN_COLORS[terrain] || "var(--color-muted)" },
|
|
48464
48481
|
title: terrain
|
|
48465
48482
|
},
|
|
48466
48483
|
terrain
|