Files
echo-nexus/.next/dev/static/chunks/src_components_668f4971._.js
T

12909 lines
1007 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(globalThis.TURBOPACK || (globalThis.TURBOPACK = [])).push([typeof document === "object" ? document.currentScript : undefined,
"[project]/src/components/game/StarfieldCanvas.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"StarfieldCanvas",
()=>StarfieldCanvas
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 深空星空背景 Canvas
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
function StarfieldCanvas({ className }) {
_s();
const canvasRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"StarfieldCanvas.useEffect": ()=>{
const canvas = canvasRef.current;
if (!canvas) return;
const ctx = canvas.getContext("2d");
if (!ctx) return;
let w = 0;
let h = 0;
let dpr = 1;
let stars = [];
const dust = [];
let raf = 0;
let lastT = performance.now();
const palette = [
"#34d399",
"#fb7185",
"#fbbf24",
"#e879f9",
"#a5f3fc"
];
function resize() {
dpr = Math.min(2, window.devicePixelRatio || 1);
w = canvas.clientWidth;
h = canvas.clientHeight;
canvas.width = Math.floor(w * dpr);
canvas.height = Math.floor(h * dpr);
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
// 生成星星:密度随面积
const count = Math.min(220, Math.floor(w * h / 7000));
stars = Array.from({
length: count
}, {
"StarfieldCanvas.useEffect.resize": ()=>({
x: Math.random() * w,
y: Math.random() * h,
z: Math.random(),
r: Math.random() * 1.4 + 0.2,
tw: Math.random() * Math.PI * 2,
hue: Math.random() < 0.15 ? Math.floor(Math.random() * palette.length) : -1
})
}["StarfieldCanvas.useEffect.resize"]);
}
resize();
const ro = new ResizeObserver(resize);
ro.observe(canvas);
function spawnDust() {
if (dust.length > 60) return;
const color = palette[Math.floor(Math.random() * palette.length)];
dust.push({
x: Math.random() * w,
y: h + 10,
vx: (Math.random() - 0.5) * 0.3,
vy: -(Math.random() * 0.5 + 0.2),
life: 0,
maxLife: 600 + Math.random() * 800,
color
});
}
function draw(t) {
const dt = t - lastT;
lastT = t;
// 背景渐变
const g = ctx.createRadialGradient(w * 0.5, h * 0.4, 0, w * 0.5, h * 0.5, Math.max(w, h) * 0.8);
g.addColorStop(0, "#1a0f2e");
g.addColorStop(0.45, "#0d0a1f");
g.addColorStop(1, "#050410");
ctx.fillStyle = g;
ctx.fillRect(0, 0, w, h);
// 星云团块
ctx.globalCompositeOperation = "screen";
for(let i = 0; i < 3; i++){
const cx = w * (0.2 + i * 0.3) + Math.sin(t / 9000 + i) * 40;
const cy = h * (0.3 + i % 2 * 0.4) + Math.cos(t / 11000 + i) * 30;
const rad = Math.max(80, Math.min(w, h) * (0.25 + i * 0.05));
const ng = ctx.createRadialGradient(cx, cy, 0, cx, cy, rad);
const col = i === 0 ? "rgba(232,121,249,0.10)" : i === 1 ? "rgba(52,211,153,0.08)" : "rgba(251,113,133,0.08)";
ng.addColorStop(0, col);
ng.addColorStop(1, "rgba(0,0,0,0)");
ctx.fillStyle = ng;
ctx.beginPath();
ctx.arc(cx, cy, rad, 0, Math.PI * 2);
ctx.fill();
}
ctx.globalCompositeOperation = "source-over";
// 星星
for (const s of stars){
s.tw += 0.02 + s.z * 0.04;
const alpha = 0.4 + Math.sin(s.tw) * 0.35 + s.z * 0.3;
if (s.hue >= 0) {
ctx.fillStyle = palette[s.hue];
ctx.globalAlpha = Math.max(0, Math.min(1, alpha));
ctx.beginPath();
ctx.arc(s.x, s.y, s.r * 1.6, 0, Math.PI * 2);
ctx.fill();
// 光晕
ctx.globalAlpha = Math.max(0, Math.min(1, alpha * 0.25));
ctx.beginPath();
ctx.arc(s.x, s.y, s.r * 4, 0, Math.PI * 2);
ctx.fill();
} else {
ctx.fillStyle = `rgba(220,230,255,${Math.max(0, Math.min(1, alpha))})`;
ctx.beginPath();
ctx.arc(s.x, s.y, s.r, 0, Math.PI * 2);
ctx.fill();
}
// 缓慢漂移
s.y += 0.02 + s.z * 0.05;
if (s.y > h + 2) {
s.y = -2;
s.x = Math.random() * w;
}
}
ctx.globalAlpha = 1;
// 偶尔生成星尘
if (Math.random() < 0.04) spawnDust();
// 星尘
ctx.globalCompositeOperation = "screen";
for(let i = dust.length - 1; i >= 0; i--){
const d = dust[i];
d.life += dt;
d.x += d.vx * dt * 0.06;
d.y += d.vy * dt * 0.06;
if (d.life > d.maxLife || d.y < -10) {
dust.splice(i, 1);
continue;
}
const a = Math.sin(d.life / d.maxLife * Math.PI) * 0.7;
ctx.fillStyle = d.color;
ctx.globalAlpha = a;
ctx.beginPath();
ctx.arc(d.x, d.y, 1.6, 0, Math.PI * 2);
ctx.fill();
ctx.globalAlpha = a * 0.2;
ctx.beginPath();
ctx.arc(d.x, d.y, 5, 0, Math.PI * 2);
ctx.fill();
}
ctx.globalAlpha = 1;
ctx.globalCompositeOperation = "source-over";
raf = requestAnimationFrame(draw);
}
raf = requestAnimationFrame(draw);
return ({
"StarfieldCanvas.useEffect": ()=>{
cancelAnimationFrame(raf);
ro.disconnect();
}
})["StarfieldCanvas.useEffect"];
}
}["StarfieldCanvas.useEffect"], []);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("canvas", {
ref: canvasRef,
className: className,
"aria-hidden": "true"
}, void 0, false, {
fileName: "[project]/src/components/game/StarfieldCanvas.tsx",
lineNumber: 175,
columnNumber: 5
}, this);
}
_s(StarfieldCanvas, "UJgi7ynoup7eqypjnwyX/s32POg=");
_c = StarfieldCanvas;
var _c;
__turbopack_context__.k.register(_c, "StarfieldCanvas");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/ui/progress.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"Progress",
()=>Progress
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$progress$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-progress/dist/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/utils.ts [app-client] (ecmascript)");
"use client";
;
;
;
function Progress({ className, value, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$progress$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Root"], {
"data-slot": "progress",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("bg-primary/20 relative h-2 w-full overflow-hidden rounded-full", className),
...props,
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$progress$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Indicator"], {
"data-slot": "progress-indicator",
className: "bg-primary h-full w-full flex-1 transition-all",
style: {
transform: `translateX(-${100 - (value || 0)}%)`
}
}, void 0, false, {
fileName: "[project]/src/components/ui/progress.tsx",
lineNumber: 22,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: "[project]/src/components/ui/progress.tsx",
lineNumber: 14,
columnNumber: 5
}, this);
}
_c = Progress;
;
var _c;
__turbopack_context__.k.register(_c, "Progress");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/ResourceBar.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"ResourceBar",
()=>ResourceBar
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 顶栏资源栏
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$gem$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Gem$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/gem.js [app-client] (ecmascript) <export default as Gem>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lightbulb$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lightbulb$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/lightbulb.js [app-client] (ecmascript) <export default as Lightbulb>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$waves$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Waves$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/waves.js [app-client] (ecmascript) <export default as Waves>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rotate$2d$ccw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RotateCcw$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js [app-client] (ecmascript) <export default as RotateCcw>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/progress.tsx [app-client] (ecmascript)");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
function ResourceBar({ onPrestige }) {
_s();
const crystals = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ResourceBar.useGameStore[crystals]": (s)=>s.crystals
}["ResourceBar.useGameStore[crystals]"]);
const crystalsPerSec = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ResourceBar.useGameStore[crystalsPerSec]": (s)=>s.crystalsPerSec
}["ResourceBar.useGameStore[crystalsPerSec]"]);
const insights = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ResourceBar.useGameStore[insights]": (s)=>s.insights
}["ResourceBar.useGameStore[insights]"]);
const contact = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ResourceBar.useGameStore[contact]": (s)=>s.contact
}["ResourceBar.useGameStore[contact]"]);
const ascensions = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ResourceBar.useGameStore[ascensions]": (s)=>s.ascensions
}["ResourceBar.useGameStore[ascensions]"]);
const blueprints = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ResourceBar.useGameStore[blueprints]": (s)=>s.blueprints
}["ResourceBar.useGameStore[blueprints]"]);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex flex-wrap items-center gap-x-3 gap-y-2 sm:gap-x-4 px-3.5 py-2.5 rounded-2xl border border-white/10 bg-black/40 backdrop-blur-md",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Stat, {
icon: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$gem$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Gem$3e$__["Gem"], {
className: "h-4 w-4 text-emerald-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 20,
columnNumber: 15
}, void 0),
label: "记忆晶体",
value: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(crystals),
sub: `+${crystalsPerSec.toFixed(1)}/s`,
glow: "rgba(52,211,153,0.4)"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 19,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "h-9 w-px bg-gradient-to-b from-transparent via-white/15 to-transparent hidden sm:block"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 26,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Stat, {
icon: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lightbulb$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lightbulb$3e$__["Lightbulb"], {
className: "h-4 w-4 text-amber-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 29,
columnNumber: 15
}, void 0),
label: "技术洞见",
value: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(insights),
sub: "解码产出",
glow: "rgba(251,191,36,0.4)"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 28,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "h-9 w-px bg-gradient-to-b from-transparent via-white/15 to-transparent hidden sm:block"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 35,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex-1 min-w-[200px] flex flex-col gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$waves$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Waves$3e$__["Waves"], {
className: "h-4 w-4 text-fuchsia-400 shrink-0"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 39,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-xs text-muted-foreground whitespace-nowrap",
children: "接触进度"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 40,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-xs font-mono font-semibold text-fuchsia-300 ml-auto tabular-nums",
children: [
contact.toFixed(1),
"%"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 41,
columnNumber: 11
}, this),
contact >= 100 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: onPrestige,
className: "text-[10px] px-2 py-0.5 rounded-full bg-fuchsia-500/20 border border-fuchsia-400/50 text-fuchsia-200 hover:bg-fuchsia-500/30 transition animate-pulse whitespace-nowrap ml-1",
children: "飞升"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 45,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 38,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Progress"], {
value: contact,
className: "h-1.5 bg-white/10 [&>div]:bg-gradient-to-r [&>div]:from-fuchsia-500 [&>div]:to-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 53,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 37,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "h-9 w-px bg-gradient-to-b from-transparent via-white/15 to-transparent hidden sm:block"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 58,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rotate$2d$ccw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RotateCcw$3e$__["RotateCcw"], {
className: "h-4 w-4 text-rose-400 shrink-0"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 61,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex flex-col gap-0.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[10px] text-muted-foreground leading-none",
children: "飞升"
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 63,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-baseline gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-sm font-mono font-semibold leading-none",
children: ascensions
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 65,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-amber-300 text-xs leading-none",
children: [
"×",
blueprints.length
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 68,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 64,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 62,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 60,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 17,
columnNumber: 5
}, this);
}
_s(ResourceBar, "wIfOv/6NbYI5LuwMTqrSd44e1M8=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = ResourceBar;
function Stat({ icon, label, value, sub, glow }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2.5",
style: {
filter: `drop-shadow(0 0 6px ${glow})`
},
children: [
icon,
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex flex-col gap-0.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[10px] text-muted-foreground leading-none",
children: label
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 93,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-baseline gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-sm font-mono font-semibold leading-none tabular-nums",
children: value
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 95,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[10px] text-muted-foreground/80 whitespace-nowrap",
children: sub
}, void 0, false, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 96,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 94,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 92,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ResourceBar.tsx",
lineNumber: 90,
columnNumber: 5
}, this);
}
_c1 = Stat;
var _c, _c1;
__turbopack_context__.k.register(_c, "ResourceBar");
__turbopack_context__.k.register(_c1, "Stat");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/CrystalOrb.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"CrystalOrb",
()=>CrystalOrb
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 中央晶体集群 + 主动脉冲(v0.7 Canvas 粒子系统)
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/use-toast.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$narrative$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/narrative.ts [app-client] (ecmascript)");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
;
const COLORS = {
emerald: "#34d399",
fuchsia: "#e879f9",
rose: "#fb7185",
amber: "#fbbf24",
white: "#ffffff"
};
function comboColor(combo) {
if (combo >= 5) return COLORS.amber;
if (combo >= 3) return COLORS.fuchsia;
return COLORS.emerald;
}
function CrystalOrb() {
_s();
const pulse = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"CrystalOrb.useGameStore[pulse]": (s)=>s.pulse
}["CrystalOrb.useGameStore[pulse]"]);
const crystals = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"CrystalOrb.useGameStore[crystals]": (s)=>s.crystals
}["CrystalOrb.useGameStore[crystals]"]);
const crystalsPerSec = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"CrystalOrb.useGameStore[crystalsPerSec]": (s)=>s.crystalsPerSec
}["CrystalOrb.useGameStore[crystalsPerSec]"]);
const crystalCap = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"CrystalOrb.useGameStore[crystalCap]": (s)=>s.crystalCap
}["CrystalOrb.useGameStore[crystalCap]"]);
const combo = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"CrystalOrb.useGameStore[combo]": (s)=>s._combo
}["CrystalOrb.useGameStore[combo]"]);
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
const [floats, setFloats] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
const idRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(0);
// Canvas refs
const canvasRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null);
const containerRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null);
const pulseAnimRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(0);
const [pulseAnim, setPulseAnim] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(0); // 触发 SVG 环动画
// 粒子状态 refs(不触发 re-render
const energyParticlesRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])([]);
const ambientParticlesRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])([]);
const shockRingsRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])([]);
const burstParticlesRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])([]);
const comboRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(combo);
const fillPctRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(0);
const crystalsRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(crystals);
const crystalCapRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(crystalCap);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"CrystalOrb.useEffect": ()=>{
comboRef.current = combo;
crystalsRef.current = crystals;
crystalCapRef.current = crystalCap;
}
}["CrystalOrb.useEffect"], [
combo,
crystals,
crystalCap
]);
const mouseRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])({
x: 0,
y: 0,
inside: false
});
// ===== 初始化粒子 =====
const initParticles = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"CrystalOrb.useCallback[initParticles]": (w, h)=>{
const cx = w / 2;
const cy = h / 2;
const baseR = Math.min(w, h) * 0.28;
// 环绕能量粒子(3 层,每层不同速度方向)
const energy = [];
const layers = [
{
count: 14,
rMul: 0.95,
speed: 0.6,
color: COLORS.emerald
},
{
count: 10,
rMul: 1.15,
speed: -0.4,
color: COLORS.fuchsia
},
{
count: 8,
rMul: 1.35,
speed: 0.3,
color: COLORS.rose
}
];
layers.forEach({
"CrystalOrb.useCallback[initParticles]": (layer)=>{
for(let i = 0; i < layer.count; i++){
energy.push({
angle: Math.PI * 2 * i / layer.count + Math.random() * 0.3,
radius: baseR * layer.rMul,
baseRadius: baseR * layer.rMul,
speed: layer.speed * (0.8 + Math.random() * 0.4),
size: 1.5 + Math.random() * 2,
color: layer.color,
alpha: 0.5 + Math.random() * 0.4,
phase: Math.random() * Math.PI * 2
});
}
}
}["CrystalOrb.useCallback[initParticles]"]);
energyParticlesRef.current = energy;
// 环境星尘
const ambient = [];
for(let i = 0; i < 40; i++){
ambient.push({
x: Math.random() * w,
y: Math.random() * h,
vx: (Math.random() - 0.5) * 8,
vy: (Math.random() - 0.5) * 8,
size: 0.5 + Math.random() * 1.5,
alpha: 0.2 + Math.random() * 0.5,
twinkle: Math.random() * Math.PI * 2
});
}
ambientParticlesRef.current = ambient;
void cx;
void cy;
}
}["CrystalOrb.useCallback[initParticles]"], []);
// ===== 触发脉冲效果(Canvas 部分)=====
const triggerPulseEffect = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"CrystalOrb.useCallback[triggerPulseEffect]": (x, y, res)=>{
const color = comboColor(res.combo);
const now = performance.now();
// 冲击波环(多层错峰)
shockRingsRef.current.push({
born: now,
color: COLORS.emerald,
maxRadius: 140,
duration: 700
});
if (res.combo >= 3) {
shockRingsRef.current.push({
born: now + 100,
color: COLORS.fuchsia,
maxRadius: 170,
duration: 800
});
}
if (res.combo >= 5) {
shockRingsRef.current.push({
born: now + 200,
color: COLORS.amber,
maxRadius: 200,
duration: 900
});
}
// 径向爆发粒子
const pcount = 10 + Math.min(10, res.combo) * 2;
for(let i = 0; i < pcount; i++){
const angle = Math.PI * 2 * i / pcount + Math.random() * 0.4;
const speed = 120 + Math.random() * 180;
burstParticlesRef.current.push({
x,
y,
vx: Math.cos(angle) * speed,
vy: Math.sin(angle) * speed,
size: 2 + Math.random() * 3,
color,
born: now,
life: 600 + Math.random() * 300
});
}
// 让能量粒子被"推开"再回弹
energyParticlesRef.current.forEach({
"CrystalOrb.useCallback[triggerPulseEffect]": (p)=>{
p.radius = p.baseRadius * (1.25 + Math.random() * 0.15);
}
}["CrystalOrb.useCallback[triggerPulseEffect]"]);
}
}["CrystalOrb.useCallback[triggerPulseEffect]"], []);
// ===== 点击处理 =====
const handleClick = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"CrystalOrb.useCallback[handleClick]": (e)=>{
const res = pulse();
if (!res) return;
const rect = e.currentTarget.getBoundingClientRect();
const x = e.clientX - rect.left;
const y = e.clientY - rect.top;
const id = idRef.current++;
const floatColor = comboColor(res.combo);
setFloats({
"CrystalOrb.useCallback[handleClick]": (f)=>[
...f,
{
id,
x,
y,
text: `+${res.gain.toFixed(1)}`,
born: Date.now(),
color: floatColor
}
]
}["CrystalOrb.useCallback[handleClick]"]);
triggerPulseEffect(x, y, res);
setPulseAnim({
"CrystalOrb.useCallback[handleClick]": (n)=>n + 1
}["CrystalOrb.useCallback[handleClick]"]);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])(res.combo >= 3 ? "pulseCombo" : "pulse", {
combo: res.combo
});
setTimeout({
"CrystalOrb.useCallback[handleClick]": ()=>{
setFloats({
"CrystalOrb.useCallback[handleClick]": (f)=>f.filter({
"CrystalOrb.useCallback[handleClick]": (it)=>it.id !== id
}["CrystalOrb.useCallback[handleClick]"])
}["CrystalOrb.useCallback[handleClick]"]);
}
}["CrystalOrb.useCallback[handleClick]"], 900);
if (res.combo >= 5 && res.combo % 5 === 0) {
// v0.9 叙事融入:高连击时注入世界观低语
const whisper = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$narrative$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["maybeWhisper"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$narrative$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["PULSE_WHISPERS"], 0.6);
toast({
title: `×${res.combo} 连击!`,
description: whisper ? `「${whisper}」` : "谐振叠加,产能飙升。"
});
} else if (res.combo >= 3 && res.combo % 3 === 0) {
// 3 连击时也有概率出现叙事
const whisper = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$narrative$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["maybeWhisper"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$narrative$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["PULSE_WHISPERS"], 0.3);
if (whisper) {
toast({
title: "低语",
description: `「${whisper}」`
});
}
}
}
}["CrystalOrb.useCallback[handleClick]"], [
pulse,
toast,
triggerPulseEffect
]);
// ===== Canvas 动画循环 =====
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"CrystalOrb.useEffect": ()=>{
const canvas = canvasRef.current;
const container = containerRef.current;
if (!canvas || !container) return;
const ctx = canvas.getContext("2d");
if (!ctx) return;
let rafId = 0;
let lastTime = performance.now();
let dpr = Math.min(window.devicePixelRatio || 1, 2);
const resize = {
"CrystalOrb.useEffect.resize": ()=>{
const rect = container.getBoundingClientRect();
dpr = Math.min(window.devicePixelRatio || 1, 2);
canvas.width = Math.max(1, Math.floor(rect.width * dpr));
canvas.height = Math.max(1, Math.floor(rect.height * dpr));
canvas.style.width = `${rect.width}px`;
canvas.style.height = `${rect.height}px`;
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
initParticles(rect.width, rect.height);
}
}["CrystalOrb.useEffect.resize"];
resize();
const ro = new ResizeObserver(resize);
ro.observe(container);
const draw = {
"CrystalOrb.useEffect.draw": (now)=>{
const dt = Math.min(0.05, (now - lastTime) / 1000);
lastTime = now;
const w = canvas.width / dpr;
const h = canvas.height / dpr;
const cx = w / 2;
const cy = h / 2;
const baseR = Math.min(w, h) * 0.28;
ctx.clearRect(0, 0, w, h);
// === 1. 环境星尘 ===
ambientParticlesRef.current.forEach({
"CrystalOrb.useEffect.draw": (p)=>{
p.x += p.vx * dt;
p.y += p.vy * dt;
p.twinkle += dt * 2;
if (p.x < 0) p.x = w;
if (p.x > w) p.x = 0;
if (p.y < 0) p.y = h;
if (p.y > h) p.y = 0;
const tw = 0.5 + 0.5 * Math.sin(p.twinkle);
ctx.globalAlpha = p.alpha * tw;
ctx.fillStyle = "#ffffff";
ctx.beginPath();
ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
ctx.fill();
}
}["CrystalOrb.useEffect.draw"]);
ctx.globalAlpha = 1;
// === 2. 外层辉光(呼吸)===
const breath = 0.85 + 0.15 * Math.sin(now * 0.001);
const glowGrad = ctx.createRadialGradient(cx, cy, baseR * 0.3, cx, cy, baseR * 2.2);
glowGrad.addColorStop(0, `rgba(52,211,153,${0.18 * breath})`);
glowGrad.addColorStop(0.5, `rgba(232,121,249,${0.1 * breath})`);
glowGrad.addColorStop(1, "rgba(0,0,0,0)");
ctx.fillStyle = glowGrad;
ctx.fillRect(0, 0, w, h);
// === 3. 进度填充环(背景 + 进度)===
ctx.lineWidth = 2.5;
ctx.strokeStyle = "rgba(255,255,255,0.06)";
ctx.beginPath();
ctx.arc(cx, cy, baseR * 1.45, 0, Math.PI * 2);
ctx.stroke();
const fp = Math.min(100, crystalsRef.current / Math.max(1, crystalCapRef.current) * 100);
fillPctRef.current = fp;
const ringR = baseR * 1.45;
const grad = ctx.createLinearGradient(cx - ringR, cy - ringR, cx + ringR, cy + ringR);
grad.addColorStop(0, COLORS.emerald);
grad.addColorStop(0.5, COLORS.fuchsia);
grad.addColorStop(1, COLORS.rose);
ctx.strokeStyle = grad;
ctx.lineWidth = 3;
ctx.lineCap = "round";
ctx.shadowBlur = 8;
ctx.shadowColor = COLORS.emerald;
ctx.beginPath();
ctx.arc(cx, cy, ringR, -Math.PI / 2, -Math.PI / 2 + Math.PI * 2 * fp / 100);
ctx.stroke();
ctx.shadowBlur = 0;
// === 4. 环绕能量粒子 ===
energyParticlesRef.current.forEach({
"CrystalOrb.useEffect.draw": (p)=>{
p.angle += p.speed * dt;
// 回弹到 baseRadius
p.radius += (p.baseRadius - p.radius) * Math.min(1, dt * 4);
const px = cx + Math.cos(p.angle) * p.radius;
const py = cy + Math.sin(p.angle) * p.radius;
const flicker = 0.7 + 0.3 * Math.sin(now * 0.005 + p.phase);
ctx.globalAlpha = p.alpha * flicker;
ctx.fillStyle = p.color;
ctx.shadowBlur = 10;
ctx.shadowColor = p.color;
ctx.beginPath();
ctx.arc(px, py, p.size, 0, Math.PI * 2);
ctx.fill();
// 拖尾(向心方向的小线段)
ctx.globalAlpha = p.alpha * flicker * 0.4;
ctx.strokeStyle = p.color;
ctx.lineWidth = p.size * 0.6;
ctx.beginPath();
ctx.moveTo(px, py);
ctx.lineTo(cx + Math.cos(p.angle - p.speed * 0.08) * (p.radius - 2), cy + Math.sin(p.angle - p.speed * 0.08) * (p.radius - 2));
ctx.stroke();
}
}["CrystalOrb.useEffect.draw"]);
ctx.globalAlpha = 1;
ctx.shadowBlur = 0;
// === 5. 中央晶核 ===
const coreR = baseR * 0.95;
// 鼠标接近时晶核轻微偏移(视差感)
let coreOffsetX = 0;
let coreOffsetY = 0;
if (mouseRef.current.inside) {
const dx = mouseRef.current.x - cx;
const dy = mouseRef.current.y - cy;
const dist = Math.hypot(dx, dy);
if (dist > 0.1) {
coreOffsetX = dx / dist * Math.min(8, dist * 0.05);
coreOffsetY = dy / dist * Math.min(8, dist * 0.05);
}
}
const ccx = cx + coreOffsetX;
const ccy = cy + coreOffsetY;
// 晶核主体(径向渐变)
const coreGrad = ctx.createRadialGradient(ccx - coreR * 0.25, ccy - coreR * 0.3, coreR * 0.1, ccx, ccy, coreR);
coreGrad.addColorStop(0, "rgba(255,255,255,0.95)");
coreGrad.addColorStop(0.3, `rgba(52,211,153,${0.85 * breath})`);
coreGrad.addColorStop(0.65, "rgba(232,121,249,0.55)");
coreGrad.addColorStop(1, "rgba(251,113,133,0.2)");
ctx.fillStyle = coreGrad;
ctx.shadowBlur = 30;
ctx.shadowColor = COLORS.emerald;
ctx.beginPath();
ctx.arc(ccx, ccy, coreR, 0, Math.PI * 2);
ctx.fill();
// 晶核内部六边形纹理
ctx.save();
ctx.translate(ccx, ccy);
ctx.globalAlpha = 0.25;
ctx.strokeStyle = "rgba(255,255,255,0.6)";
ctx.lineWidth = 0.8;
const hexR = coreR * 0.7;
for(let layer = 0; layer < 3; layer++){
const r = hexR * (1 - layer * 0.3);
ctx.beginPath();
for(let i = 0; i < 6; i++){
const a = Math.PI / 3 * i + now * 0.0002 * (layer % 2 ? 1 : -1);
const px = Math.cos(a) * r;
const py = Math.sin(a) * r;
if (i === 0) ctx.moveTo(px, py);
else ctx.lineTo(px, py);
}
ctx.closePath();
ctx.stroke();
}
ctx.restore();
// 高光
ctx.globalAlpha = 0.4;
ctx.fillStyle = "#ffffff";
ctx.beginPath();
ctx.ellipse(ccx - coreR * 0.25, ccy - coreR * 0.35, coreR * 0.35, coreR * 0.18, -0.4, 0, Math.PI * 2);
ctx.fill();
ctx.globalAlpha = 1;
ctx.shadowBlur = 0;
// === 6. 冲击波环 ===
shockRingsRef.current = shockRingsRef.current.filter({
"CrystalOrb.useEffect.draw": (ring)=>{
const elapsed = now - ring.born;
if (elapsed < 0 || elapsed > ring.duration) return elapsed <= ring.duration + 50;
const t = elapsed / ring.duration;
const r = ring.maxRadius * t;
const alpha = (1 - t) * 0.8;
ctx.globalAlpha = alpha;
ctx.strokeStyle = ring.color;
ctx.lineWidth = 2.5 * (1 - t * 0.5);
ctx.shadowBlur = 12;
ctx.shadowColor = ring.color;
ctx.beginPath();
ctx.arc(cx, cy, r, 0, Math.PI * 2);
ctx.stroke();
ctx.shadowBlur = 0;
return true;
}
}["CrystalOrb.useEffect.draw"]);
shockRingsRef.current = shockRingsRef.current.filter({
"CrystalOrb.useEffect.draw": (r)=>now - r.born < r.duration
}["CrystalOrb.useEffect.draw"]);
ctx.globalAlpha = 1;
// === 7. 爆发粒子 ===
burstParticlesRef.current = burstParticlesRef.current.filter({
"CrystalOrb.useEffect.draw": (p)=>{
const age = now - p.born;
if (age > p.life) return false;
p.x += p.vx * dt;
p.y += p.vy * dt;
p.vx *= 0.96;
p.vy *= 0.96;
const t = age / p.life;
const alpha = 1 - t;
ctx.globalAlpha = alpha;
ctx.fillStyle = p.color;
ctx.shadowBlur = 8;
ctx.shadowColor = p.color;
ctx.beginPath();
ctx.arc(p.x, p.y, p.size * (1 - t * 0.5), 0, Math.PI * 2);
ctx.fill();
return true;
}
}["CrystalOrb.useEffect.draw"]);
ctx.globalAlpha = 1;
ctx.shadowBlur = 0;
rafId = requestAnimationFrame(draw);
}
}["CrystalOrb.useEffect.draw"];
rafId = requestAnimationFrame(draw);
return ({
"CrystalOrb.useEffect": ()=>{
cancelAnimationFrame(rafId);
ro.disconnect();
}
})["CrystalOrb.useEffect"];
}
}["CrystalOrb.useEffect"], [
initParticles
]);
// ===== 鼠标追踪(视差)=====
const handleMouseMove = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"CrystalOrb.useCallback[handleMouseMove]": (e)=>{
const rect = e.currentTarget.getBoundingClientRect();
mouseRef.current = {
x: e.clientX - rect.left,
y: e.clientY - rect.top,
inside: true
};
}
}["CrystalOrb.useCallback[handleMouseMove]"], []);
const handleMouseLeave = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"CrystalOrb.useCallback[handleMouseLeave]": ()=>{
mouseRef.current.inside = false;
}
}["CrystalOrb.useCallback[handleMouseLeave]"], []);
// 进度比例(用于显示)
const fillPct = Math.min(100, crystals / Math.max(1, crystalCap) * 100);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-dda3ce20a1930cc3" + " " + "relative flex flex-col items-center justify-center gap-4 select-none",
children: [
combo > 1 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-dda3ce20a1930cc3" + " " + "absolute -top-2 left-1/2 -translate-x-1/2 px-3 py-1 rounded-full bg-rose-500/20 border border-rose-400/40 text-rose-200 text-xs font-mono animate-pulse z-10",
children: [
"×",
combo,
" 连击"
]
}, void 0, true, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 557,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: handleClick,
onMouseMove: handleMouseMove,
onMouseLeave: handleMouseLeave,
"aria-label": "脉冲扫描,获取记忆晶体",
className: "jsx-dda3ce20a1930cc3" + " " + "relative h-52 w-52 sm:h-64 sm:w-64 rounded-full focus:outline-none group",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
ref: containerRef,
className: "jsx-dda3ce20a1930cc3" + " " + "absolute inset-0 rounded-full overflow-hidden",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("canvas", {
ref: canvasRef,
className: "jsx-dda3ce20a1930cc3" + " " + "block w-full h-full"
}, void 0, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 574,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 570,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
animation: "echo-spin 18s linear infinite"
},
className: "jsx-dda3ce20a1930cc3" + " " + "absolute inset-2 rounded-full border border-emerald-400/30 pointer-events-none",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-dda3ce20a1930cc3" + " " + "absolute top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 h-2 w-2 rounded-full bg-emerald-300 shadow-[0_0_8px_#34d399]"
}, void 0, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 582,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-dda3ce20a1930cc3" + " " + "absolute bottom-0 left-1/2 -translate-x-1/2 translate-y-1/2 h-1.5 w-1.5 rounded-full bg-rose-300 shadow-[0_0_8px_#fb7185]"
}, void 0, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 583,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 578,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
animation: "echo-spin 24s linear infinite reverse"
},
className: "jsx-dda3ce20a1930cc3" + " " + "absolute inset-6 rounded-full border border-fuchsia-400/20 border-dashed pointer-events-none"
}, void 0, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 586,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
animation: "echo-ring 0.7s ease-out forwards"
},
className: "jsx-dda3ce20a1930cc3" + " " + "absolute inset-8 rounded-full border-2 border-emerald-400/60 pointer-events-none"
}, `ring-${pulseAnim}`, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 592,
columnNumber: 9
}, this),
floats.map((f)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
left: f.x,
top: f.y,
color: f.color,
transform: "translate(-50%, -50%)",
animation: "echo-float 0.9s ease-out forwards",
textShadow: `0 0 8px ${f.color}`
},
className: "jsx-dda3ce20a1930cc3" + " " + "absolute pointer-events-none font-mono font-bold text-sm z-10",
children: f.text
}, f.id, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 600,
columnNumber: 11
}, this))
]
}, void 0, true, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 562,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-dda3ce20a1930cc3" + " " + "text-center",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
textShadow: "0 0 12px rgba(52,211,153,0.5)"
},
className: "jsx-dda3ce20a1930cc3" + " " + "text-2xl font-mono font-bold text-emerald-300",
children: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(crystals)
}, void 0, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 619,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-dda3ce20a1930cc3" + " " + "text-xs text-muted-foreground mt-0.5",
children: [
"记忆晶体 · ",
crystalsPerSec.toFixed(1),
"/s · 上限",
" ",
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(crystalCap)
]
}, void 0, true, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 625,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-dda3ce20a1930cc3" + " " + "text-[11px] text-muted-foreground/70 mt-2",
children: [
"点击晶体发起",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-dda3ce20a1930cc3" + " " + "text-emerald-300",
children: "脉冲扫描"
}, void 0, false, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 631,
columnNumber: 11
}, this),
",连击叠加加成"
]
}, void 0, true, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 629,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-dda3ce20a1930cc3" + " " + "text-[10px] text-muted-foreground/50 mt-1 tabular-nums",
children: [
"仓库 ",
fillPct.toFixed(1),
"% · 连击 ×",
Math.max(1, combo)
]
}, void 0, true, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 633,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 618,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "dda3ce20a1930cc3",
children: "@keyframes echo-spin{to{transform:rotate(360deg)}}@keyframes echo-float{0%{opacity:1;transform:translate(-50%,-50%)scale(1)}to{opacity:0;transform:translate(-50%,-180%)scale(1.3)}}@keyframes echo-ring{0%{opacity:.8;transform:scale(.8)}to{opacity:0;transform:scale(1.6)}}"
}, void 0, false, void 0, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/CrystalOrb.tsx",
lineNumber: 554,
columnNumber: 5
}, this);
}
_s(CrystalOrb, "ZGgMlgi4oltvIiYOrQuBUUAmXyg=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
];
});
_c = CrystalOrb;
var _c;
__turbopack_context__.k.register(_c, "CrystalOrb");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/ui/button.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"Button",
()=>Button,
"buttonVariants",
()=>buttonVariants
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-slot/dist/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$class$2d$variance$2d$authority$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/class-variance-authority/dist/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/utils.ts [app-client] (ecmascript)");
;
;
;
;
const buttonVariants = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$class$2d$variance$2d$authority$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cva"])("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
variants: {
variant: {
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
destructive: "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
link: "text-primary underline-offset-4 hover:underline"
},
size: {
default: "h-9 px-4 py-2 has-[>svg]:px-3",
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
icon: "size-9"
}
},
defaultVariants: {
variant: "default",
size: "default"
}
});
function Button({ className, variant, size, asChild = false, ...props }) {
const Comp = asChild ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$slot$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Slot"] : "button";
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Comp, {
"data-slot": "button",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])(buttonVariants({
variant,
size,
className
})),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/button.tsx",
lineNumber: 51,
columnNumber: 5
}, this);
}
_c = Button;
;
var _c;
__turbopack_context__.k.register(_c, "Button");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/DecodeArray.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"DecodeArray",
()=>DecodeArray,
"DecodePanel",
()=>DecodePanel
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 解码共振谜题(核心原创玩法)
//
// 谐振序列:按目标颜色顺序点击四邻接节点,重建回路。
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/use-toast.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$decode$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/decode.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/button.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rotate$2d$ccw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RotateCcw$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js [app-client] (ecmascript) <export default as RotateCcw>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.js [app-client] (ecmascript) <export default as X>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.js [app-client] (ecmascript) <export default as Check>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$undo$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Undo2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/undo-2.js [app-client] (ecmascript) <export default as Undo2>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.js [app-client] (ecmascript) <export default as AlertTriangle>");
;
var _s = __turbopack_context__.k.signature(), _s1 = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
;
;
;
function DecodeArray() {
_s();
const activePuzzle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodeArray.useGameStore[activePuzzle]": (s)=>s.activePuzzle
}["DecodeArray.useGameStore[activePuzzle]"]);
const clickNode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodeArray.useGameStore[clickNode]": (s)=>s.clickNode
}["DecodeArray.useGameStore[clickNode]"]);
const undoStep = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodeArray.useGameStore[undoStep]": (s)=>s.undoStep
}["DecodeArray.useGameStore[undoStep]"]);
const retryPuzzle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodeArray.useGameStore[retryPuzzle]": (s)=>s.retryPuzzle
}["DecodeArray.useGameStore[retryPuzzle]"]);
const abandonPuzzle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodeArray.useGameStore[abandonPuzzle]": (s)=>s.abandonPuzzle
}["DecodeArray.useGameStore[abandonPuzzle]"]);
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
const [hoverId, setHoverId] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [flash, setFlash] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [warned, setWarned] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
if (!activePuzzle) return null;
const { grid, rows, cols, target, path, stepLimit, tier } = activePuzzle;
const currentTargetIdx = path.length;
const currentColor = target[currentTargetIdx];
// 当前局面是否仍可解(精确判定)
const stuck = path.length > 0 && path.length < target.length && !(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$decode$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["isSolvable"])(activePuzzle);
const handleNodeClick = (node)=>{
const res = clickNode(node.id);
if (res.ok && res.finished) {
setWarned(false);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("decodeSuccess");
if (res.failReason) {
const ids = res.failReason.split(",").filter(Boolean);
if (ids.length) {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("fragmentUnlock");
toast({
title: "✦ 记忆碎片浮现",
description: "新的回响被拼入图谱,前往「记忆图谱」查看。"
});
}
}
toast({
title: "谐振闭合!",
description: "晶体解码成功,记忆已释放。"
});
return;
}
if (!res.ok) {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("decodeFail");
setFlash({
id: node.id,
ok: false
});
setTimeout(()=>setFlash(null), 280);
} else {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("decodeClick", {
color: node.color
});
setFlash({
id: node.id,
ok: true
});
setTimeout(()=>setFlash(null), 280);
// 点击后若不可解,提示玩家撤销
if (res.solvable === false && !warned) {
setWarned(true);
toast({
title: "谐振受阻",
description: "此路不通,建议撤销上一步或重排。"
});
}
if (res.solvable === true) setWarned(false);
}
};
const handleUndo = ()=>{
undoStep();
setWarned(false);
setFlash(null);
};
const handleRetry = ()=>{
retryPuzzle();
setWarned(false);
setFlash(null);
};
// 计算节点位置(百分比)
const cellW = 100 / cols;
const cellH = 100 / rows;
// 路径线段
const pathNodes = path.map((id)=>grid.find((n)=>n.id === id)).filter(Boolean);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-35ab0418fdc54847" + " " + "flex flex-col gap-4 h-full",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-35ab0418fdc54847" + " " + "flex items-center justify-center gap-2 flex-wrap",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + "text-xs text-muted-foreground mr-1",
children: "目标谐振"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 101,
columnNumber: 9
}, this),
target.map((c, i)=>{
const done = i < currentTargetIdx;
const active = i === currentTargetIdx;
const v = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["COLOR_VISUAL"][c];
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: `radial-gradient(circle at 35% 30%, ${v.hex}, ${v.hex}aa 60%, ${v.hex}44)`,
boxShadow: active ? `0 0 18px ${v.glow}, 0 0 36px ${v.glow}` : `0 0 8px ${v.glow}`,
["--tw-ring-color"]: v.hex
},
className: "jsx-35ab0418fdc54847" + " " + `relative h-9 w-9 rounded-full flex items-center justify-center transition-all duration-300 ${done ? "opacity-30 scale-90" : ""} ${active ? "scale-125 ring-2 ring-offset-2 ring-offset-background" : ""}`,
children: [
done && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], {
className: "h-4 w-4 text-white"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 120,
columnNumber: 24
}, this),
active && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: v.hex
},
className: "jsx-35ab0418fdc54847" + " " + "absolute -bottom-5 text-[10px] font-medium",
children: "下一个"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 122,
columnNumber: 17
}, this)
]
}, i, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 107,
columnNumber: 13
}, this);
})
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 100,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-35ab0418fdc54847" + " " + "relative flex-1 min-h-[260px] rounded-2xl border border-white/10 bg-black/30 backdrop-blur-sm overflow-hidden",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
backgroundImage: "linear-gradient(rgba(255,255,255,0.08) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,0.08) 1px, transparent 1px)",
backgroundSize: `${cellW}% ${cellH}%`
},
className: "jsx-35ab0418fdc54847" + " " + "absolute inset-0 opacity-20"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 137,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("svg", {
className: "jsx-35ab0418fdc54847" + " " + "absolute inset-0 w-full h-full pointer-events-none",
children: pathNodes.map((n, i)=>{
if (i === 0) return null;
const prev = pathNodes[i - 1];
const x1 = (prev.col + 0.5) * cellW;
const y1 = (prev.row + 0.5) * cellH;
const x2 = (n.col + 0.5) * cellW;
const y2 = (n.row + 0.5) * cellH;
const v = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["COLOR_VISUAL"][n.color];
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("line", {
x1: `${x1}%`,
y1: `${y1}%`,
x2: `${x2}%`,
y2: `${y2}%`,
stroke: v.hex,
strokeWidth: 2.5,
strokeLinecap: "round",
style: {
filter: `drop-shadow(0 0 4px ${v.glow})`
},
className: "jsx-35ab0418fdc54847" + " " + "echo-path-line"
}, i, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 156,
columnNumber: 15
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 146,
columnNumber: 9
}, this),
grid.map((node)=>{
const v = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["COLOR_VISUAL"][node.color];
const used = node.used;
const isCurrentTarget = currentColor !== undefined && node.color === currentColor && !used;
// 选起点阶段:标记「可行起点」(选了之后仍可解),避免玩家踩死起点
const isViableStart = path.length === 0 && isCurrentTarget && (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$decode$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["canStartFrom"])(activePuzzle, node.id);
// 选起点阶段:是目标色但选了会死局的起点(淡化提示)
const isDeadStart = path.length === 0 && isCurrentTarget && !isViableStart;
const isHover = hoverId === node.id;
const isFlash = flash?.id === node.id;
const cx = (node.col + 0.5) * cellW;
const cy = (node.row + 0.5) * cellH;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: ()=>handleNodeClick(node),
onMouseEnter: ()=>setHoverId(node.id),
onMouseLeave: ()=>setHoverId(null),
disabled: used,
style: {
left: `${cx}%`,
top: `${cy}%`,
width: `min(${100 / cols * 0.62}%, 56px)`,
aspectRatio: "1",
background: used ? "rgba(255,255,255,0.04)" : `radial-gradient(circle at 35% 30%, ${v.hex}, ${v.hex}cc 55%, ${v.hex}55)`,
boxShadow: used ? "inset 0 0 12px rgba(0,0,0,0.5)" : isViableStart ? `0 0 16px ${v.glow}, 0 0 32px ${v.glow}, inset 0 0 10px rgba(255,255,255,0.5)` : isCurrentTarget ? `0 0 10px ${v.glow}, 0 0 20px ${v.glow}, inset 0 0 6px rgba(255,255,255,0.3)` : `0 0 6px ${v.glow}`,
border: isViableStart ? `2px solid ${v.hex}` : isCurrentTarget ? `1.5px solid ${v.hex}aa` : "1px solid rgba(255,255,255,0.12)",
opacity: used ? 0.35 : isDeadStart ? 0.5 : 1,
// 统一用 inline transform 定位居中 + 缩放,避免与 Tailwind translate 冲突导致左上偏移
transform: `translate(-50%, -50%) scale(${isHover && !used ? 1.12 : isFlash ? flash?.ok ? 1.25 : 0.8 : 1})`,
animation: isViableStart ? "echo-pulse 1.2s ease-in-out infinite" : isCurrentTarget && !isDeadStart ? "echo-pulse 1.6s ease-in-out infinite" : undefined
},
"aria-label": `${v.label}色节点 ${node.row + 1}-${node.col + 1}`,
className: "jsx-35ab0418fdc54847" + " " + "absolute rounded-full transition-[box-shadow,background,border,opacity] duration-200 focus:outline-none disabled:cursor-not-allowed",
children: !used && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
background: "radial-gradient(circle at 35% 30%, rgba(255,255,255,0.5), transparent 45%)"
},
className: "jsx-35ab0418fdc54847" + " " + "absolute inset-0 rounded-full"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 230,
columnNumber: 17
}, this)
}, node.id, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 189,
columnNumber: 13
}, this);
})
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 135,
columnNumber: 7
}, this),
stuck && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-35ab0418fdc54847" + " " + "flex items-center gap-2 px-3 py-2 rounded-lg border border-rose-400/40 bg-rose-950/40 text-rose-200 text-xs animate-pulse",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__["AlertTriangle"], {
className: "h-3.5 w-3.5 shrink-0"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 246,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847",
children: "谐振受阻,此路已无解。"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 247,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
size: "sm",
variant: "outline",
onClick: handleUndo,
className: "h-6 px-2 ml-auto border-rose-400/50 text-rose-100 hover:bg-rose-500/20 text-[11px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$undo$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Undo2$3e$__["Undo2"], {
className: "h-3 w-3 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 254,
columnNumber: 13
}, this),
"撤销"
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 248,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 245,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-35ab0418fdc54847" + " " + "flex items-center justify-between gap-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-35ab0418fdc54847" + " " + "flex items-center gap-2 text-xs",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + "text-muted-foreground",
children: "步数"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 263,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + `font-mono font-semibold ${path.length >= stepLimit ? "text-rose-400" : "text-foreground"}`,
children: [
path.length,
" / ",
stepLimit
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 264,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + "ml-2 text-muted-foreground",
children: [
"T",
tier
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 271,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 262,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-35ab0418fdc54847" + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
variant: "ghost",
size: "sm",
onClick: handleUndo,
disabled: path.length === 0,
className: "h-7",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$undo$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Undo2$3e$__["Undo2"], {
className: "h-3.5 w-3.5 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 281,
columnNumber: 13
}, this),
"撤销"
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 274,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
variant: "ghost",
size: "sm",
onClick: handleRetry,
className: "h-7",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rotate$2d$ccw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RotateCcw$3e$__["RotateCcw"], {
className: "h-3.5 w-3.5 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 290,
columnNumber: 13
}, this),
"重排"
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 284,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
variant: "ghost",
size: "sm",
onClick: ()=>{
abandonPuzzle();
setFlash(null);
setWarned(false);
},
className: "h-7",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
className: "h-3.5 w-3.5 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 303,
columnNumber: 13
}, this),
"放回"
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 293,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 273,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 261,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-35ab0418fdc54847" + " " + "text-[11px] text-muted-foreground/80 text-center leading-relaxed",
children: path.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
"点击",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + "text-emerald-300",
children: "高亮"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 312,
columnNumber: 17
}, this),
"的可行起点开始,按目标顺序走",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + "text-emerald-300",
children: "相邻同色"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 312,
columnNumber: 75
}, this),
"节点;走错可",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + "text-rose-300",
children: "撤销"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 312,
columnNumber: 127
}, this),
"。"
]
}, void 0, true) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
"按「目标谐振」顺序,点击",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + "text-emerald-300",
children: "上下左右相邻"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 313,
columnNumber: 27
}, this),
"的同色节点。每个节点仅可使用一次;走错可",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-35ab0418fdc54847" + " " + "text-rose-300",
children: "撤销"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 313,
columnNumber: 95
}, this),
"。"
]
}, void 0, true)
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 310,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "35ab0418fdc54847",
children: "@keyframes echo-pulse{0%,to{filter:brightness()}50%{filter:brightness(1.4)}}@keyframes echo-line{0%{stroke-dashoffset:100px}to{stroke-dashoffset:0}}.echo-path-line{stroke-dasharray:100;animation:.4s ease-out forwards echo-line}"
}, void 0, false, void 0, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 98,
columnNumber: 5
}, this);
}
_s(DecodeArray, "DQb1xRQVKNqdpnDRQy3QaTWVOiY=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
];
});
_c = DecodeArray;
function DecodePanel() {
_s1();
const activePuzzle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodePanel.useGameStore[activePuzzle]": (s)=>s.activePuzzle
}["DecodePanel.useGameStore[activePuzzle]"]);
const pendingCrystals = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodePanel.useGameStore[pendingCrystals]": (s)=>s.pendingCrystals
}["DecodePanel.useGameStore[pendingCrystals]"]);
const startDecode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodePanel.useGameStore[startDecode]": (s)=>s.startDecode
}["DecodePanel.useGameStore[startDecode]"]);
const crystalsPerSec = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodePanel.useGameStore[crystalsPerSec]": (s)=>s.crystalsPerSec
}["DecodePanel.useGameStore[crystalsPerSec]"]);
const crystalCap = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodePanel.useGameStore[crystalCap]": (s)=>s.crystalCap
}["DecodePanel.useGameStore[crystalCap]"]);
const crystals = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"DecodePanel.useGameStore[crystals]": (s)=>s.crystals
}["DecodePanel.useGameStore[crystals]"]);
if (activePuzzle) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "h-full flex flex-col",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2 mb-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-4 w-4 text-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 347,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "text-sm font-semibold",
children: "解码共振阵列"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 348,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 346,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex-1 min-h-0",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DecodeArray, {}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 351,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 350,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 345,
columnNumber: 7
}, this);
}
// 无活跃谜题:展示待解码晶体队列
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-53059b9e32765d5f" + " " + "h-full flex flex-col",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-53059b9e32765d5f" + " " + "flex items-center gap-2 mb-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-4 w-4 text-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 361,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "jsx-53059b9e32765d5f" + " " + "text-sm font-semibold",
children: "待解码晶体"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 362,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-53059b9e32765d5f" + " " + "text-xs text-muted-foreground ml-auto",
children: [
"产能 ",
crystalsPerSec.toFixed(1),
"/s · ",
Math.floor(crystals),
"/",
Math.floor(crystalCap)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 363,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 360,
columnNumber: 7
}, this),
pendingCrystals.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-53059b9e32765d5f" + " " + "flex-1 flex flex-col items-center justify-center text-center gap-3 rounded-2xl border border-dashed border-white/10 bg-black/20 p-6",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-53059b9e32765d5f" + " " + "relative h-16 w-16",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-53059b9e32765d5f" + " " + "absolute inset-0 rounded-full bg-rose-500/20 blur-xl animate-pulse"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 371,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-53059b9e32765d5f" + " " + "absolute inset-2 rounded-full border-2 border-rose-400/40 rotate-45"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 372,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-53059b9e32765d5f" + " " + "absolute inset-4 rounded-full bg-rose-500/30"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 373,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 370,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-53059b9e32765d5f" + " " + "text-sm text-muted-foreground",
children: "晶体正在生成中…"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 375,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-53059b9e32765d5f" + " " + "text-xs text-muted-foreground/70 max-w-[220px]",
children: "自治无人机每数秒回收一颗记忆晶体,点击下方晶体开启解码。"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 378,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 369,
columnNumber: 9
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-53059b9e32765d5f" + " " + "flex-1 grid grid-cols-2 sm:grid-cols-3 gap-3 content-start max-h-[420px] overflow-y-auto echo-scroll pr-1",
children: pendingCrystals.map((c)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(CrystalCard, {
crystal: c,
onClick: ()=>startDecode(c.id)
}, c.id, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 385,
columnNumber: 13
}, this))
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 383,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "53059b9e32765d5f",
children: ".echo-scroll::-webkit-scrollbar{width:6px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:3px}.echo-scroll::-webkit-scrollbar-track{background:0 0}"
}, void 0, false, void 0, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 359,
columnNumber: 5
}, this);
}
_s1(DecodePanel, "HSEa0JoWzN+r2cLAwkGbCXkSxdw=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c1 = DecodePanel;
function CrystalCard({ crystal, onClick }) {
const tierColor = crystal.tier === 1 ? "#34d399" : crystal.tier === 2 ? "#fbbf24" : "#e879f9";
const tierLabel = crystal.tier === 1 ? "常见" : crystal.tier === 2 ? "稀有" : "史诗";
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: onClick,
className: "group relative aspect-square rounded-2xl border border-white/10 bg-black/40 hover:border-white/40 transition-all duration-300 hover:scale-[1.04] focus:outline-none overflow-hidden",
style: {
boxShadow: `inset 0 0 24px ${tierColor}22`
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute inset-0 rounded-2xl opacity-0 group-hover:opacity-100 transition-opacity duration-300 pointer-events-none",
style: {
background: `linear-gradient(120deg, transparent 30%, ${tierColor}40 50%, transparent 70%)`,
backgroundSize: "200% 100%",
animation: "echo-border-flow 2s linear infinite",
mixBlendMode: "screen"
}
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 415,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity pointer-events-none overflow-hidden",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute inset-x-0 h-px",
style: {
background: `linear-gradient(90deg, transparent, ${tierColor}, transparent)`,
animation: "echo-scan 1.8s ease-in-out infinite"
}
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 426,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 425,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute inset-0 flex items-center justify-center",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "relative h-12 w-12 transition-transform duration-500 group-hover:rotate-[200deg] group-hover:scale-110",
style: {
filter: `drop-shadow(0 0 12px ${tierColor}88)`
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute inset-0 rotate-45 rounded-md",
style: {
background: `linear-gradient(135deg, ${tierColor}, ${tierColor}66)`,
border: `1px solid ${tierColor}`
}
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 440,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute inset-2 rotate-45 rounded-sm",
style: {
background: `linear-gradient(135deg, rgba(255,255,255,0.5), transparent)`
}
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 447,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 436,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 435,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute top-1.5 left-1.5 z-10 text-[10px] font-mono font-semibold px-1.5 py-0.5 rounded bg-black/60 backdrop-blur-sm border",
style: {
color: tierColor,
borderColor: `${tierColor}40`
},
children: [
"T",
crystal.tier
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 454,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute top-1.5 right-1.5 z-10 text-[9px] text-white/60 font-mono tracking-wider",
children: tierLabel
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 460,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute inset-x-0 bottom-0 z-10 bg-gradient-to-t from-black/85 via-black/50 to-transparent pt-4 pb-1.5 px-1 text-center opacity-0 group-hover:opacity-100 transition-opacity duration-200",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[12px] font-mono font-bold leading-none",
style: {
color: tierColor
},
children: [
"+",
crystal.value
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 465,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[8px] text-white/60 uppercase tracking-[0.15em] mt-0.5",
children: "解码 →"
}, void 0, false, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 468,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 464,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/DecodeArray.tsx",
lineNumber: 409,
columnNumber: 5
}, this);
}
_c2 = CrystalCard;
var _c, _c1, _c2;
__turbopack_context__.k.register(_c, "DecodeArray");
__turbopack_context__.k.register(_c1, "DecodePanel");
__turbopack_context__.k.register(_c2, "CrystalCard");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/ui/card.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"Card",
()=>Card,
"CardAction",
()=>CardAction,
"CardContent",
()=>CardContent,
"CardDescription",
()=>CardDescription,
"CardFooter",
()=>CardFooter,
"CardHeader",
()=>CardHeader,
"CardTitle",
()=>CardTitle
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/utils.ts [app-client] (ecmascript)");
;
;
function Card({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "card",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/card.tsx",
lineNumber: 7,
columnNumber: 5
}, this);
}
_c = Card;
function CardHeader({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "card-header",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/card.tsx",
lineNumber: 20,
columnNumber: 5
}, this);
}
_c1 = CardHeader;
function CardTitle({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "card-title",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("leading-none font-semibold", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/card.tsx",
lineNumber: 33,
columnNumber: 5
}, this);
}
_c2 = CardTitle;
function CardDescription({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "card-description",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("text-muted-foreground text-sm", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/card.tsx",
lineNumber: 43,
columnNumber: 5
}, this);
}
_c3 = CardDescription;
function CardAction({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "card-action",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/card.tsx",
lineNumber: 53,
columnNumber: 5
}, this);
}
_c4 = CardAction;
function CardContent({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "card-content",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("px-6", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/card.tsx",
lineNumber: 66,
columnNumber: 5
}, this);
}
_c5 = CardContent;
function CardFooter({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "card-footer",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("flex items-center px-6 [.border-t]:pt-6", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/card.tsx",
lineNumber: 76,
columnNumber: 5
}, this);
}
_c6 = CardFooter;
;
var _c, _c1, _c2, _c3, _c4, _c5, _c6;
__turbopack_context__.k.register(_c, "Card");
__turbopack_context__.k.register(_c1, "CardHeader");
__turbopack_context__.k.register(_c2, "CardTitle");
__turbopack_context__.k.register(_c3, "CardDescription");
__turbopack_context__.k.register(_c4, "CardAction");
__turbopack_context__.k.register(_c5, "CardContent");
__turbopack_context__.k.register(_c6, "CardFooter");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/TechTree.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"TechTree",
()=>TechTree
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 技术树
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$narrative$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/narrative.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/card.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/button.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pickaxe$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Pickaxe$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/pickaxe.js [app-client] (ecmascript) <export default as Pickaxe>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$scan$2d$line$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ScanLine$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/scan-line.js [app-client] (ecmascript) <export default as ScanLine>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/rocket.js [app-client] (ecmascript) <export default as Rocket>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/book-open.js [app-client] (ecmascript) <export default as BookOpen>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/check.js [app-client] (ecmascript) <export default as Check>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/lock.js [app-client] (ecmascript) <export default as Lock>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
;
;
const ICONS = {
Pickaxe: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$pickaxe$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Pickaxe$3e$__["Pickaxe"],
ScanLine: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$scan$2d$line$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ScanLine$3e$__["ScanLine"],
Rocket: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__["Rocket"],
BookOpen: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"]
};
const BRANCH_COLOR = {
mining: "#34d399",
decoding: "#fb7185",
expedition: "#fbbf24",
narrative: "#e879f9"
};
function TechTree() {
_s();
const tech = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"TechTree.useGameStore[tech]": (s)=>s.tech
}["TechTree.useGameStore[tech]"]);
const insights = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"TechTree.useGameStore[insights]": (s)=>s.insights
}["TechTree.useGameStore[insights]"]);
const buyTech = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"TechTree.useGameStore[buyTech]": (s)=>s.buyTech
}["TechTree.useGameStore[buyTech]"]);
const branches = [
"mining",
"decoding",
"expedition",
"narrative"
];
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd" + " " + "flex flex-col gap-3 h-full",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd" + " " + "flex items-center justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "jsx-fbf3fdae687a84dd" + " " + "text-sm font-semibold",
children: "技术树"
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 43,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fbf3fdae687a84dd" + " " + "text-xs text-muted-foreground",
children: [
"洞见 ",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fbf3fdae687a84dd" + " " + "text-amber-300 font-mono",
children: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(insights)
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 45,
columnNumber: 14
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 44,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 42,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd" + " " + "flex-1 overflow-y-auto echo-scroll pr-1 space-y-3",
children: branches.map((b)=>{
const meta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TECH_BRANCH_META"][b];
const Icon = ICONS[meta.icon];
const color = BRANCH_COLOR[b];
const nodes = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TECH_TREE"].filter((t)=>t.branch === b);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd" + " " + "flex items-center gap-2 mb-1.5 px-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Icon, {
className: "jsx-fbf3fdae687a84dd" + " " + "h-3.5 w-3.5"
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 58,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color
},
className: "jsx-fbf3fdae687a84dd" + " " + "text-xs font-medium",
children: meta.name
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 59,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fbf3fdae687a84dd" + " " + "text-[10px] text-muted-foreground/70 truncate flex-1",
children: meta.desc
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 62,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 57,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-fbf3fdae687a84dd" + " " + "text-[9px] italic text-muted-foreground/50 px-1 mb-1.5 truncate",
children: [
"「",
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$narrative$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TECH_LORE"][b] ?? "",
"」"
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 67,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd" + " " + "grid gap-1.5",
children: nodes.map((node)=>{
const owned = (tech[node.id] ?? 0) >= 1;
const affordable = insights >= node.cost;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Card"], {
className: `p-2.5 transition-all duration-200 ${owned ? "bg-white/5 border-white/10" : affordable ? "bg-black/30 border-white/15 hover:border-white/30 cursor-pointer" : "bg-black/20 border-white/5 opacity-60"}`,
style: owned ? {
boxShadow: `inset 0 0 0 1px ${color}44, 0 0 12px ${color}22`
} : undefined,
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd" + " " + "flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd" + " " + "flex-1 min-w-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fbf3fdae687a84dd" + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: owned ? color : undefined
},
className: "jsx-fbf3fdae687a84dd" + " " + "text-xs font-semibold truncate",
children: node.name
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 93,
columnNumber: 29
}, this),
owned && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$check$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Check$3e$__["Check"], {
className: "h-3 w-3",
style: {
color
}
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 100,
columnNumber: 31
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 92,
columnNumber: 27
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-fbf3fdae687a84dd" + " " + "text-[10px] text-muted-foreground/80 truncate",
children: node.desc
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 103,
columnNumber: 27
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 91,
columnNumber: 25
}, this),
!owned && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
size: "sm",
variant: affordable ? "default" : "ghost",
disabled: !affordable,
onClick: ()=>{
if (buyTech(node.id)) (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("techBuy");
},
className: "h-7 px-2 text-[11px] shrink-0",
style: affordable ? {
background: `${color}22`,
border: `1px solid ${color}66`,
color
} : undefined,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lock$3e$__["Lock"], {
className: "h-2.5 w-2.5 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 126,
columnNumber: 29
}, this),
node.cost
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 108,
columnNumber: 27
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 90,
columnNumber: 23
}, this)
}, node.id, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 75,
columnNumber: 21
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 70,
columnNumber: 15
}, this)
]
}, b, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 56,
columnNumber: 13
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 49,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "fbf3fdae687a84dd",
children: ".echo-scroll::-webkit-scrollbar{width:5px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:3px}.echo-scroll::-webkit-scrollbar-track{background:0 0}"
}, void 0, false, void 0, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TechTree.tsx",
lineNumber: 41,
columnNumber: 5
}, this);
}
_s(TechTree, "Fd+YwuKOI1sOmUu3IEPLYikJnPw=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = TechTree;
var _c;
__turbopack_context__.k.register(_c, "TechTree");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/ui/scroll-area.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"ScrollArea",
()=>ScrollArea,
"ScrollBar",
()=>ScrollBar
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$scroll$2d$area$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-scroll-area/dist/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/utils.ts [app-client] (ecmascript)");
"use client";
;
;
;
function ScrollArea({ className, children, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$scroll$2d$area$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Root"], {
"data-slot": "scroll-area",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("relative", className),
...props,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$scroll$2d$area$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Viewport"], {
"data-slot": "scroll-area-viewport",
className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
children: children
}, void 0, false, {
fileName: "[project]/src/components/ui/scroll-area.tsx",
lineNumber: 19,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(ScrollBar, {}, void 0, false, {
fileName: "[project]/src/components/ui/scroll-area.tsx",
lineNumber: 25,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$scroll$2d$area$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Corner"], {}, void 0, false, {
fileName: "[project]/src/components/ui/scroll-area.tsx",
lineNumber: 26,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/ui/scroll-area.tsx",
lineNumber: 14,
columnNumber: 5
}, this);
}
_c = ScrollArea;
function ScrollBar({ className, orientation = "vertical", ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$scroll$2d$area$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ScrollAreaScrollbar"], {
"data-slot": "scroll-area-scrollbar",
orientation: orientation,
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("flex touch-none p-px transition-colors select-none", orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent", orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent", className),
...props,
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$scroll$2d$area$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ScrollAreaThumb"], {
"data-slot": "scroll-area-thumb",
className: "bg-border relative flex-1 rounded-full"
}, void 0, false, {
fileName: "[project]/src/components/ui/scroll-area.tsx",
lineNumber: 50,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: "[project]/src/components/ui/scroll-area.tsx",
lineNumber: 37,
columnNumber: 5
}, this);
}
_c1 = ScrollBar;
;
var _c, _c1;
__turbopack_context__.k.register(_c, "ScrollArea");
__turbopack_context__.k.register(_c1, "ScrollBar");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/Codex.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"Codex",
()=>Codex
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 记忆图谱(碎片叙事)
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/card.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$scroll$2d$area$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/scroll-area.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/book-open.js [app-client] (ecmascript) <export default as BookOpen>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/lock.js [app-client] (ecmascript) <export default as Lock>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
const ERA_NAMES = [
"",
"寂灭前夜",
"谐振纪",
"飞升潮",
"回响纪",
"接触纪"
];
function Codex() {
_s();
const fragments = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"Codex.useGameStore[fragments]": (s)=>s.fragments
}["Codex.useGameStore[fragments]"]);
const totalDecoded = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"Codex.useGameStore[totalDecoded]": (s)=>s.totalDecoded
}["Codex.useGameStore[totalDecoded]"]);
const nextThreshold = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["nextFragmentThreshold"])(totalDecoded);
const [selected, setSelected] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
// v0.1 只展示第一纪元
const era1 = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["FRAGMENTS"].filter((f)=>f.era === 1);
const unlockedCount = era1.filter((f)=>fragments[f.id]).length;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex flex-col gap-2 h-full",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "text-sm font-semibold flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"], {
className: "h-4 w-4 text-fuchsia-400"
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 27,
columnNumber: 11
}, this),
"记忆图谱"
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 26,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-xs text-muted-foreground",
children: [
unlockedCount,
"/",
era1.length,
" · 第一纪元"
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 30,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 25,
columnNumber: 7
}, this),
nextThreshold && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[10px] text-muted-foreground/80 px-1",
children: [
"再解码 ",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-fuchsia-300 font-mono",
children: nextThreshold - totalDecoded
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 37,
columnNumber: 15
}, this),
" 颗 → 下一个碎片"
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 36,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$scroll$2d$area$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ScrollArea"], {
className: "flex-1 min-h-0",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "grid grid-cols-2 gap-2 pr-2",
children: era1.map((f, i)=>{
const unlocked = !!fragments[f.id];
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: ()=>unlocked && setSelected(f),
disabled: !unlocked,
className: `relative aspect-[4/3] rounded-xl border text-left p-2 transition-all duration-300 overflow-hidden ${unlocked ? "border-fuchsia-400/40 bg-gradient-to-br from-fuchsia-950/40 to-black/40 hover:border-fuchsia-400/70 hover:scale-[1.02] cursor-pointer" : "border-white/5 bg-black/30 cursor-not-allowed"}`,
style: unlocked ? {
boxShadow: "0 0 16px rgba(232,121,249,0.15)"
} : undefined,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: `absolute top-1.5 right-1.5 text-[9px] font-mono ${unlocked ? "text-fuchsia-300/70" : "text-white/20"}`,
children: String(i + 1).padStart(2, "0")
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 62,
columnNumber: 17
}, this),
unlocked ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute -top-3 -right-3 h-12 w-12 rounded-full bg-fuchsia-500/20 blur-xl"
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 71,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-3 w-3 text-fuchsia-300 mb-1"
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 72,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[11px] font-semibold text-fuchsia-100 leading-tight",
children: f.title
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 73,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[9px] text-muted-foreground mt-1 line-clamp-2",
children: [
f.echo.slice(0, 28),
"…"
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 76,
columnNumber: 21
}, this)
]
}, void 0, true) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex flex-col items-center justify-center h-full gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lock$3e$__["Lock"], {
className: "h-4 w-4 text-white/20"
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 82,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[9px] text-white/30",
children: [
"需解码 ",
f.threshold,
" 颗"
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 83,
columnNumber: 21
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 81,
columnNumber: 19
}, this)
]
}, f.id, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 46,
columnNumber: 15
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 42,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 41,
columnNumber: 7
}, this),
selected && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/70 backdrop-blur-sm",
onClick: ()=>setSelected(null),
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$card$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Card"], {
className: "max-w-md w-full p-5 bg-gradient-to-br from-fuchsia-950/60 to-black/80 border-fuchsia-400/40",
onClick: (e)=>e.stopPropagation(),
style: {
boxShadow: "0 0 40px rgba(232,121,249,0.25)"
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2 mb-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-4 w-4 text-fuchsia-300"
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 106,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[10px] text-fuchsia-300/70 font-mono",
children: [
"第 ",
selected.era,
" 纪元 · ",
ERA_NAMES[selected.era] || ""
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 107,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 105,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", {
className: "text-lg font-bold text-fuchsia-100 mb-3",
children: selected.title
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 111,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-sm text-foreground/90 leading-relaxed italic",
children: [
"「",
selected.echo,
"」"
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 114,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: ()=>setSelected(null),
className: "mt-4 text-xs text-muted-foreground hover:text-foreground transition",
children: "关闭"
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 117,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 100,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 96,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/Codex.tsx",
lineNumber: 24,
columnNumber: 5
}, this);
}
_s(Codex, "pVJ1pc7dBMtnuMxklosK2w8o6qQ=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = Codex;
var _c;
__turbopack_context__.k.register(_c, "Codex");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/ui/dialog.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"Dialog",
()=>Dialog,
"DialogClose",
()=>DialogClose,
"DialogContent",
()=>DialogContent,
"DialogDescription",
()=>DialogDescription,
"DialogFooter",
()=>DialogFooter,
"DialogHeader",
()=>DialogHeader,
"DialogOverlay",
()=>DialogOverlay,
"DialogPortal",
()=>DialogPortal,
"DialogTitle",
()=>DialogTitle,
"DialogTrigger",
()=>DialogTrigger
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-dialog/dist/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__XIcon$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.js [app-client] (ecmascript) <export default as XIcon>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/utils.ts [app-client] (ecmascript)");
"use client";
;
;
;
;
function Dialog({ ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Root"], {
"data-slot": "dialog",
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 12,
columnNumber: 10
}, this);
}
_c = Dialog;
function DialogTrigger({ ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Trigger"], {
"data-slot": "dialog-trigger",
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 18,
columnNumber: 10
}, this);
}
_c1 = DialogTrigger;
function DialogPortal({ ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Portal"], {
"data-slot": "dialog-portal",
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 24,
columnNumber: 10
}, this);
}
_c2 = DialogPortal;
function DialogClose({ ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Close"], {
"data-slot": "dialog-close",
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 30,
columnNumber: 10
}, this);
}
_c3 = DialogClose;
function DialogOverlay({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Overlay"], {
"data-slot": "dialog-overlay",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 38,
columnNumber: 5
}, this);
}
_c4 = DialogOverlay;
function DialogContent({ className, children, showCloseButton = true, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DialogPortal, {
"data-slot": "dialog-portal",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DialogOverlay, {}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 59,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Content"], {
"data-slot": "dialog-content",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", className),
...props,
children: [
children,
showCloseButton && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Close"], {
"data-slot": "dialog-close",
className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__XIcon$3e$__["XIcon"], {}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 74,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "sr-only",
children: "Close"
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 75,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 70,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 60,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 58,
columnNumber: 5
}, this);
}
_c5 = DialogContent;
function DialogHeader({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "dialog-header",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("flex flex-col gap-2 text-center sm:text-left", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 85,
columnNumber: 5
}, this);
}
_c6 = DialogHeader;
function DialogFooter({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
"data-slot": "dialog-footer",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 95,
columnNumber: 5
}, this);
}
_c7 = DialogFooter;
function DialogTitle({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Title"], {
"data-slot": "dialog-title",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("text-lg leading-none font-semibold", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 111,
columnNumber: 5
}, this);
}
_c8 = DialogTitle;
function DialogDescription({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$dialog$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Description"], {
"data-slot": "dialog-description",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("text-muted-foreground text-sm", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/dialog.tsx",
lineNumber: 124,
columnNumber: 5
}, this);
}
_c9 = DialogDescription;
;
var _c, _c1, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9;
__turbopack_context__.k.register(_c, "Dialog");
__turbopack_context__.k.register(_c1, "DialogTrigger");
__turbopack_context__.k.register(_c2, "DialogPortal");
__turbopack_context__.k.register(_c3, "DialogClose");
__turbopack_context__.k.register(_c4, "DialogOverlay");
__turbopack_context__.k.register(_c5, "DialogContent");
__turbopack_context__.k.register(_c6, "DialogHeader");
__turbopack_context__.k.register(_c7, "DialogFooter");
__turbopack_context__.k.register(_c8, "DialogTitle");
__turbopack_context__.k.register(_c9, "DialogDescription");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/PrestigeDialog.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"PrestigeDialog",
()=>PrestigeDialog
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 飞升(Prestige)对话框
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/dialog.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/button.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rotate$2d$ccw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RotateCcw$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js [app-client] (ecmascript) <export default as RotateCcw>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$star$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Star$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/star.js [app-client] (ecmascript) <export default as Star>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/book-open.js [app-client] (ecmascript) <export default as BookOpen>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$engine$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/engine.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/constellation.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/use-toast.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
;
;
;
;
function PrestigeDialog({ open, onOpenChange }) {
_s();
const state = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])();
const doPrestige = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"PrestigeDialog.useGameStore[doPrestige]": (s)=>s.doPrestige
}["PrestigeDialog.useGameStore[doPrestige]"]);
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
const [confirming, setConfirming] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
const [canReconfirm, setCanReconfirm] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
const newBp = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$engine$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["computeNewBlueprints"])(state);
const bonus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$engine$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["computePrestigeBonus"])(state);
const totalBpAfter = Math.min(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["PRESTIGE"].maxBlueprints, state.blueprints.length + newBp);
const cProgress = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["constellationProgress"])(state.constellation ?? []);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Dialog"], {
open: open,
onOpenChange: onOpenChange,
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogContent"], {
className: "bg-gradient-to-br from-fuchsia-950/70 to-black/90 border-fuchsia-400/40",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogHeader"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogTitle"], {
className: "flex items-center gap-2 text-fuchsia-100",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rotate$2d$ccw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RotateCcw$3e$__["RotateCcw"], {
className: "h-5 w-5"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 44,
columnNumber: 13
}, this),
"飞升 · 跨越维度"
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 43,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogDescription"], {
className: "text-fuchsia-200/70",
children: "当接触进度满溢,你将跨越维度与以太族相会。本次飞升将重置资源与技术,但保留记忆图谱与蓝图加成。"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 47,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 42,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "space-y-3 py-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-lg border border-fuchsia-400/30 bg-fuchsia-950/30 p-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-sm text-fuchsia-200",
children: "本次获得蓝图"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 56,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-2xl font-mono font-bold text-fuchsia-100",
children: [
"+",
newBp
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 57,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 55,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[11px] text-muted-foreground mt-1",
children: [
"蓝图总数将达 ",
totalBpAfter,
"/",
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["PRESTIGE"].maxBlueprints,
"(每 ",
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["PRESTIGE"].blueprintsPerDecode,
" 次解码产出 1 张)"
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 61,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 54,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "grid grid-cols-3 gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(BonusCard, {
label: "产能",
value: `+${(totalBpAfter * __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["PRESTIGE"].perBlueprint.crystalsPerSecMult * 100).toFixed(0)}%`,
color: "#34d399"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 68,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(BonusCard, {
label: "洞见",
value: `+${(totalBpAfter * __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["PRESTIGE"].perBlueprint.insightMult * 100).toFixed(0)}%`,
color: "#fbbf24"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 73,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(BonusCard, {
label: "接触",
value: `+${(totalBpAfter * __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["PRESTIGE"].perBlueprint.contactRateMult * 100).toFixed(0)}%`,
color: "#e879f9"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 78,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 67,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[11px] text-muted-foreground space-y-1 pt-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-3 w-3 text-fuchsia-400"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 88,
columnNumber: 15
}, this),
"保留:记忆图谱、累计解码数、飞升次数、蓝图、星图天赋"
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 87,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rotate$2d$ccw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RotateCcw$3e$__["RotateCcw"], {
className: "h-3 w-3 text-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 92,
columnNumber: 15
}, this),
"重置:晶体、洞见、技术树、接触进度、待解码晶体"
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 91,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 86,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-lg border border-fuchsia-400/30 bg-gradient-to-r from-fuchsia-950/40 to-purple-950/40 p-2.5",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$star$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Star$3e$__["Star"], {
className: "h-4 w-4 text-fuchsia-300"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 100,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[12px] text-fuchsia-200 font-bold",
children: "星图觉醒预告"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 102,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[10px] text-muted-foreground",
children: [
"飞升后将从 3 道随机天赋中选 1,永久获得加成",
cProgress.unlocked < cProgress.total && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-fuchsia-300/80",
children: [
" · 当前 ",
cProgress.unlocked,
"/",
cProgress.total
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 106,
columnNumber: 21
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 103,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 101,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[10px] text-fuchsia-300/70 font-mono",
children: cProgress.unlocked < cProgress.total ? "✦ 可觉醒" : "✧ 已圆满"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 110,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 99,
columnNumber: 13
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 98,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-lg border border-violet-400/25 bg-violet-950/20 p-2.5 flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"], {
className: "h-4 w-4 text-violet-300 flex-shrink-0"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 118,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex-1 text-[10px] text-violet-100/70 leading-relaxed",
children: [
"本次飞升将铭刻入",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-violet-200 font-bold",
children: "回响编年史"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 120,
columnNumber: 23
}, this),
", 记录本周目的解码、探险、星潮与觉醒天赋,形成永恒叙事时间轴。"
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 119,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 117,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 52,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogFooter"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
variant: "ghost",
onClick: ()=>onOpenChange(false),
children: "取消"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 127,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
disabled: confirming && !canReconfirm,
onClick: ()=>{
if (!confirming) {
setConfirming(true);
setCanReconfirm(false);
window.setTimeout(()=>setCanReconfirm(true), 900);
return;
}
const res = doPrestige();
onOpenChange(false);
setConfirming(false);
setCanReconfirm(false);
if (res) {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("prestige");
// 编年史铭刻音效(稍延迟,与飞升音分层)
window.setTimeout(()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("chronicle"), 600);
toast({
title: "✦ 飞升成功",
description: `获得 ${res.newBp} 张蓝图,进入第 ${state.ascensions + 2} 周目。编年史已铭刻新纪元。`
});
}
},
className: "bg-gradient-to-r from-fuchsia-600 to-rose-500 hover:from-fuchsia-500 hover:to-rose-400 text-white border-0",
children: confirming ? canReconfirm ? "再次确认飞升" : "请确认…" : newBp <= 0 ? "飞升(无新蓝图)" : "飞升"
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 130,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 126,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 41,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 40,
columnNumber: 5
}, this);
}
_s(PrestigeDialog, "fpgVc8aKBfhhkw1D6pIu2jTtEKY=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
];
});
_c = PrestigeDialog;
function BonusCard({ label, value, color }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-lg border p-2 text-center",
style: {
borderColor: `${color}44`,
background: `${color}11`
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[10px] text-muted-foreground",
children: label
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 183,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-sm font-mono font-bold",
style: {
color
},
children: value
}, void 0, false, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 184,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/PrestigeDialog.tsx",
lineNumber: 179,
columnNumber: 5
}, this);
}
_c1 = BonusCard;
var _c, _c1;
__turbopack_context__.k.register(_c, "PrestigeDialog");
__turbopack_context__.k.register(_c1, "BonusCard");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/ui/switch.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"Switch",
()=>Switch
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$switch$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-switch/dist/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/utils.ts [app-client] (ecmascript)");
"use client";
;
;
;
function Switch({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$switch$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Root"], {
"data-slot": "switch",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", className),
...props,
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$switch$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Thumb"], {
"data-slot": "switch-thumb",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")
}, void 0, false, {
fileName: "[project]/src/components/ui/switch.tsx",
lineNumber: 21,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: "[project]/src/components/ui/switch.tsx",
lineNumber: 13,
columnNumber: 5
}, this);
}
_c = Switch;
;
var _c;
__turbopack_context__.k.register(_c, "Switch");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/ui/label.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"Label",
()=>Label
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$label$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-label/dist/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/utils.ts [app-client] (ecmascript)");
"use client";
;
;
;
function Label({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$label$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Root"], {
"data-slot": "label",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/label.tsx",
lineNumber: 13,
columnNumber: 5
}, this);
}
_c = Label;
;
var _c;
__turbopack_context__.k.register(_c, "Label");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/SettingsDialog.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"SettingsDialog",
()=>SettingsDialog
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 设置对话框
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/dialog.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/button.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$switch$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/switch.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/label.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trash-2.js [app-client] (ecmascript) <export default as Trash2>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$github$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Github$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/github.js [app-client] (ecmascript) <export default as Github>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/triangle-alert.js [app-client] (ecmascript) <export default as AlertTriangle>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$volume$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Volume2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/volume-2.js [app-client] (ecmascript) <export default as Volume2>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$graduation$2d$cap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__GraduationCap$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/graduation-cap.js [app-client] (ecmascript) <export default as GraduationCap>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$external$2d$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ExternalLink$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/external-link.js [app-client] (ecmascript) <export default as ExternalLink>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/use-toast.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/tutorial.ts [app-client] (ecmascript)");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
;
;
;
;
function SettingsDialog({ open, onOpenChange }) {
_s();
const soundOn = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"SettingsDialog.useGameStore[soundOn]": (s)=>s.soundOn
}["SettingsDialog.useGameStore[soundOn]"]);
const toggleSound = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"SettingsDialog.useGameStore[toggleSound]": (s)=>s.toggleSound
}["SettingsDialog.useGameStore[toggleSound]"]);
const hardReset = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"SettingsDialog.useGameStore[hardReset]": (s)=>s.hardReset
}["SettingsDialog.useGameStore[hardReset]"]);
const ascensions = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"SettingsDialog.useGameStore[ascensions]": (s)=>s.ascensions
}["SettingsDialog.useGameStore[ascensions]"]);
const totalDecoded = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"SettingsDialog.useGameStore[totalDecoded]": (s)=>s.totalDecoded
}["SettingsDialog.useGameStore[totalDecoded]"]);
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
const [confirmReset, setConfirmReset] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Dialog"], {
open: open,
onOpenChange: onOpenChange,
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogContent"], {
className: "bg-gradient-to-br from-slate-900/80 to-black/90 border-white/15",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogHeader"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogTitle"], {
children: "设置"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 40,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogDescription"], {
children: "游戏偏好与存档管理"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 41,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 39,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "space-y-4 py-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between rounded-lg border border-white/10 bg-black/30 p-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Label"], {
className: "text-sm",
children: "音效反馈"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 48,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[11px] text-muted-foreground mt-0.5",
children: "脉冲、解码、探险、飞升等程序化音效"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 49,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 47,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
size: "sm",
variant: "ghost",
className: "h-7 px-2 text-muted-foreground hover:text-foreground",
onClick: ()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("decodeSuccess"),
"aria-label": "试听音效",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$volume$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Volume2$3e$__["Volume2"], {
className: "h-3.5 w-3.5"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 61,
columnNumber: 17
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 54,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$switch$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Switch"], {
checked: soundOn,
onCheckedChange: toggleSound
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 63,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 53,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 46,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between rounded-lg border border-white/10 bg-black/30 p-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$label$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Label"], {
className: "text-sm",
children: "新手教程"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 70,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[11px] text-muted-foreground mt-0.5",
children: "重新查看 5 步玩法引导"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 71,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 69,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
size: "sm",
variant: "outline",
className: "h-7 px-2 text-[11px] border-fuchsia-400/40 text-fuchsia-200 hover:bg-fuchsia-500/10",
onClick: ()=>{
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["restartTutorial"])();
onOpenChange(false);
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$graduation$2d$cap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__GraduationCap$3e$__["GraduationCap"], {
className: "h-3.5 w-3.5 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 84,
columnNumber: 15
}, this),
"重看教程"
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 75,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 68,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-lg border border-white/10 bg-black/30 p-3 text-xs space-y-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-muted-foreground",
children: "累计解码"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 92,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "font-mono",
children: [
totalDecoded,
" 颗"
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 93,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 91,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-muted-foreground",
children: "飞升周目"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 96,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "font-mono",
children: ascensions
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 97,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 95,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-muted-foreground",
children: "存档位置"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 100,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "font-mono text-[10px]",
children: "浏览器本地"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 101,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 99,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 90,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-lg border border-rose-500/30 bg-rose-950/20 p-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2 mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$triangle$2d$alert$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__AlertTriangle$3e$__["AlertTriangle"], {
className: "h-4 w-4 text-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 108,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-sm font-medium text-rose-200",
children: "危险操作"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 109,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 107,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[11px] text-muted-foreground mb-2",
children: "清空所有进度,包括记忆图谱与飞升记录,不可恢复。"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 111,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
variant: "outline",
size: "sm",
className: "border-rose-500/40 text-rose-300 hover:bg-rose-500/10",
onClick: ()=>{
if (!confirmReset) {
setConfirmReset(true);
return;
}
hardReset();
setConfirmReset(false);
onOpenChange(false);
toast({
title: "存档已清空",
description: "一切归零,重新开始。"
});
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trash$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trash2$3e$__["Trash2"], {
className: "h-3.5 w-3.5 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 129,
columnNumber: 15
}, this),
confirmReset ? "再次点击确认清空" : "清空存档"
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 114,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 106,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "space-y-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
href: "https://gitea-pages.atdunbg.xyz/Super_Z/echo-nexus/",
target: "_blank",
rel: "noreferrer",
className: "flex items-center gap-2 text-xs text-emerald-300/80 hover:text-emerald-200 transition px-1 py-1 rounded hover:bg-emerald-500/5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$external$2d$link$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ExternalLink$3e$__["ExternalLink"], {
className: "h-3.5 w-3.5"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 142,
columnNumber: 15
}, this),
"在线游玩(gitea-pages"
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 136,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("a", {
href: "https://git.atdunbg.xyz/Super_Z/echo-nexus",
target: "_blank",
rel: "noreferrer",
className: "flex items-center gap-2 text-xs text-muted-foreground hover:text-foreground transition px-1 py-1 rounded hover:bg-white/5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$github$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Github$3e$__["Github"], {
className: "h-3.5 w-3.5"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 151,
columnNumber: 15
}, this),
"git.atdunbg.xyz/Super_Z/echo-nexus"
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 145,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 135,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 44,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$dialog$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["DialogFooter"], {
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
variant: "ghost",
onClick: ()=>onOpenChange(false),
children: "关闭"
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 158,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 157,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 38,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/SettingsDialog.tsx",
lineNumber: 37,
columnNumber: 5
}, this);
}
_s(SettingsDialog, "9LWgEAPBmP8CMySwhsqO2rPqFiM=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
];
});
_c = SettingsDialog;
var _c;
__turbopack_context__.k.register(_c, "SettingsDialog");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/ExpeditionPanel.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"ExpeditionPanel",
()=>ExpeditionPanel
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 遗迹探险面板(v0.2 肉鸽系统,v0.9 工单修复)
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/use-toast.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/expedition.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/button.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/progress.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$swords$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Swords$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/swords.js [app-client] (ecmascript) <export default as Swords>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$gem$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Gem$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/gem.js [app-client] (ecmascript) <export default as Gem>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$question$2d$mark$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__HelpCircle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js [app-client] (ecmascript) <export default as HelpCircle>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$puzzle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Puzzle$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/puzzle.js [app-client] (ecmascript) <export default as Puzzle>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$skull$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Skull$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/skull.js [app-client] (ecmascript) <export default as Skull>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/heart.js [app-client] (ecmascript) <export default as Heart>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/zap.js [app-client] (ecmascript) <export default as Zap>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronRight$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-client] (ecmascript) <export default as ChevronRight>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$log$2d$out$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__LogOut$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/log-out.js [app-client] (ecmascript) <export default as LogOut>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/rocket.js [app-client] (ecmascript) <export default as Rocket>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
;
;
;
;
const NODE_META = {
combat: {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$swords$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Swords$3e$__["Swords"],
color: "#fb7185",
label: "战斗",
bg: "rgba(251,113,133,0.15)"
},
treasure: {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$gem$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Gem$3e$__["Gem"],
color: "#fbbf24",
label: "宝藏",
bg: "rgba(251,191,36,0.15)"
},
choice: {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$question$2d$mark$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__HelpCircle$3e$__["HelpCircle"],
color: "#a5f3fc",
label: "抉择",
bg: "rgba(165,243,252,0.15)"
},
puzzle: {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$puzzle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Puzzle$3e$__["Puzzle"],
color: "#e879f9",
label: "解谜",
bg: "rgba(232,121,249,0.15)"
},
rest: {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__["Heart"],
color: "#34d399",
label: "休整",
bg: "rgba(52,211,153,0.15)"
},
boss: {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$skull$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Skull$3e$__["Skull"],
color: "#f43f5e",
label: "BOSS",
bg: "rgba(244,63,94,0.2)"
}
};
function ExpeditionPanel() {
_s();
const activeExpedition = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[activeExpedition]": (s)=>s.activeExpedition
}["ExpeditionPanel.useGameStore[activeExpedition]"]);
const energy = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[energy]": (s)=>s.energy
}["ExpeditionPanel.useGameStore[energy]"]);
const energyMax = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[energyMax]": (s)=>s.energyMax
}["ExpeditionPanel.useGameStore[energyMax]"]);
const lastEnergyTick = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[lastEnergyTick]": (s)=>s.lastEnergyTick
}["ExpeditionPanel.useGameStore[lastEnergyTick]"]);
const expeditionLog = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[expeditionLog]": (s)=>s.expeditionLog
}["ExpeditionPanel.useGameStore[expeditionLog]"]);
const totalExpeditions = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[totalExpeditions]": (s)=>s.totalExpeditions
}["ExpeditionPanel.useGameStore[totalExpeditions]"]);
const lastExpeditionSummary = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[lastExpeditionSummary]": (s)=>s.lastExpeditionSummary
}["ExpeditionPanel.useGameStore[lastExpeditionSummary]"]);
// v0.8.1 动态能量恢复间隔(技术 + 探索力属性缩短)
const regenIntervalSec = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[regenIntervalSec]": (s)=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["computeEnergyRegenInterval"])(s)
}["ExpeditionPanel.useGameStore[regenIntervalSec]"]);
const startExpedition = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[startExpedition]": (s)=>s.startExpedition
}["ExpeditionPanel.useGameStore[startExpedition]"]);
const resolveCurrentNode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[resolveCurrentNode]": (s)=>s.resolveCurrentNode
}["ExpeditionPanel.useGameStore[resolveCurrentNode]"]);
const advanceNode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[advanceNode]": (s)=>s.advanceNode
}["ExpeditionPanel.useGameStore[advanceNode]"]);
const abortExpedition = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ExpeditionPanel.useGameStore[abortExpedition]": (s)=>s.abortExpedition
}["ExpeditionPanel.useGameStore[abortExpedition]"]);
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
const [lastLog, setLastLog] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [now, setNow] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
"ExpeditionPanel.useState": ()=>Date.now()
}["ExpeditionPanel.useState"]);
// v0.9 工单修复:能量恢复实时倒计时(每秒刷新)
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"ExpeditionPanel.useEffect": ()=>{
const id = setInterval({
"ExpeditionPanel.useEffect.id": ()=>setNow(Date.now())
}["ExpeditionPanel.useEffect.id"], 1000);
return ({
"ExpeditionPanel.useEffect": ()=>clearInterval(id)
})["ExpeditionPanel.useEffect"];
}
}["ExpeditionPanel.useEffect"], []);
// 能量恢复进度(v0.8.1 动态间隔,v0.9 实时刷新)
const regenMs = regenIntervalSec * 1000;
const elapsed = now - lastEnergyTick;
const regenProgress = energy >= energyMax ? 100 : Math.min(100, elapsed / regenMs * 100);
const regenBoosted = regenIntervalSec < __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EXPEDITION_CONFIG"].energyRegenSec;
const nextEnergyInSec = energy >= energyMax ? 0 : Math.max(0, Math.ceil((regenMs - elapsed) / 1000));
const canStart = energy >= __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EXPEDITION_CONFIG"].energyCost;
const handleStart = ()=>{
const res = startExpedition();
if (!res.ok) {
toast({
title: "无法出发",
description: res.reason,
variant: "destructive"
});
} else {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("expeditionStart");
toast({
title: "探险队出发",
description: "深入遗迹,谨慎前行。"
});
setLastLog(null);
}
};
const handleResolve = ()=>{
const result = resolveCurrentNode();
if (!result) return;
setLastLog(result.log);
if (result.ended) {
if (result.endReason === "victory") (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("expeditionVictory");
else (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("expeditionDefeat");
} else {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("expeditionNode");
}
toast({
title: result.ended ? result.endReason === "victory" ? "✦ 探险胜利!" : "探险失败" : "节点结算",
description: result.log,
variant: result.endReason === "defeat" ? "destructive" : "default"
});
};
const handleAdvance = ()=>{
advanceNode();
setLastLog(null);
};
const handleAbort = ()=>{
abortExpedition();
toast({
title: "探险队撤退",
description: "保留已获奖励,安全返回。"
});
setLastLog(null);
};
// ===== 无活跃探险:展示入口 =====
// v0.10 工单 #2 修复:探险结束自动清空 activeExpedition,无需 justFinished 判断
if (!activeExpedition || activeExpedition.finished) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex flex-col gap-3 h-full",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "text-sm font-semibold flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__["Rocket"], {
className: "h-4 w-4 text-amber-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 117,
columnNumber: 13
}, this),
"遗迹探险"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 116,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[10px] text-muted-foreground",
children: [
"已探索 ",
totalExpeditions,
" 次"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 120,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 115,
columnNumber: 9
}, this),
lastExpeditionSummary && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: `rounded-xl border p-2.5 relative overflow-hidden ${lastExpeditionSummary.result === "victory" ? "border-emerald-400/40 bg-emerald-950/20" : lastExpeditionSummary.result === "defeat" ? "border-rose-400/40 bg-rose-950/20" : "border-amber-400/30 bg-amber-950/10"}`,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between mb-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[11px] font-semibold flex items-center gap-1",
children: lastExpeditionSummary.result === "victory" ? "✦ 上次探险:胜利" : lastExpeditionSummary.result === "defeat" ? "✕ 上次探险:失败" : "→ 上次探险:撤退"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 135,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[9px] text-muted-foreground font-mono",
children: [
lastExpeditionSummary.nodeCount,
" 节点"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 138,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 134,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2.5 text-[10px]",
children: [
lastExpeditionSummary.rewards.crystals > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-emerald-300",
children: [
"+",
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(lastExpeditionSummary.rewards.crystals),
" 晶体"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 142,
columnNumber: 17
}, this),
lastExpeditionSummary.rewards.insights > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-amber-300",
children: [
"+",
lastExpeditionSummary.rewards.insights,
" 洞见"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 145,
columnNumber: 17
}, this),
lastExpeditionSummary.rewards.contact > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-fuchsia-300",
children: [
"+",
lastExpeditionSummary.rewards.contact.toFixed(1),
" 接触"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 148,
columnNumber: 17
}, this),
lastExpeditionSummary.rewards.crystals === 0 && lastExpeditionSummary.rewards.insights === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-muted-foreground/60",
children: "无奖励"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 151,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 140,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 125,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-xl border border-amber-400/20 bg-amber-950/20 p-3",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between mb-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__["Zap"], {
className: "h-3.5 w-3.5 text-amber-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 161,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-xs text-amber-200",
children: "探险能量"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 162,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 160,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-xs font-mono text-amber-100",
children: [
energy,
" / ",
energyMax
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 164,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 159,
columnNumber: 11
}, this),
energy < energyMax ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Progress"], {
value: regenProgress,
className: "h-1.5 bg-black/40 [&>div]:bg-gradient-to-r [&>div]:from-amber-500 [&>div]:to-yellow-300"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 170,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[10px] text-muted-foreground/70 mt-1 flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
children: "下一点能量"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 175,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-amber-300 font-mono font-semibold",
children: [
nextEnergyInSec,
"s"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 176,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
children: "后恢复"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 177,
columnNumber: 17
}, this),
regenBoosted && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-emerald-400/80 ml-1",
children: [
"⚡ ",
regenIntervalSec.toFixed(0),
"s/点 (已加速)"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 179,
columnNumber: 19
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 174,
columnNumber: 15
}, this)
]
}, void 0, true) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[10px] text-amber-300/80 mt-0.5",
children: "能量已满,可立即出发"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 184,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 158,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex-1 flex flex-col items-center justify-center gap-3 rounded-2xl border border-dashed border-amber-400/20 bg-black/30 p-4 relative overflow-hidden",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute -top-10 -right-10 h-32 w-32 rounded-full bg-amber-500/10 blur-2xl"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 190,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "relative",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: `h-16 w-16 rounded-full bg-gradient-to-br from-amber-500/30 to-rose-500/20 flex items-center justify-center mx-auto ${canStart ? "animate-pulse" : ""}`,
style: {
boxShadow: "0 0 30px rgba(251,191,36,0.3)"
},
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__["Rocket"], {
className: "h-7 w-7 text-amber-300"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 193,
columnNumber: 15
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 192,
columnNumber: 13
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 191,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-center space-y-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-sm font-medium text-amber-100",
children: "深入以太遗迹"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 197,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[11px] text-muted-foreground/80 max-w-[220px]",
children: "程序化生成的遗迹路径,沿途遭遇战斗、宝藏、抉择与解谜,击败终点 BOSS 获取丰厚奖励。"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 198,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 196,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
onClick: handleStart,
disabled: !canStart,
className: "bg-gradient-to-r from-amber-600 to-rose-500 hover:from-amber-500 hover:to-rose-400 text-white border-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__["Rocket"], {
className: "h-4 w-4 mr-1.5"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 207,
columnNumber: 13
}, this),
canStart ? `出发(消耗 ${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EXPEDITION_CONFIG"].energyCost} 能量)` : `能量不足(${nextEnergyInSec}s 后恢复)`
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 202,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 189,
columnNumber: 9
}, this),
expeditionLog.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-xl border border-white/5 bg-black/20 p-2 max-h-28 overflow-y-auto echo-scroll",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[10px] text-muted-foreground/60 mb-1 px-1",
children: "最近探险记录"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 215,
columnNumber: 13
}, this),
expeditionLog.slice(0, 4).map((entry, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[10px] text-muted-foreground/70 px-1 py-0.5 border-b border-white/5 last:border-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-amber-300/60",
children: ""
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 218,
columnNumber: 17
}, this),
" ",
entry.result,
entry.rewards && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-emerald-300/70 ml-1",
children: entry.rewards
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 219,
columnNumber: 35
}, this)
]
}, i, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 217,
columnNumber: 15
}, this))
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 214,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 114,
columnNumber: 7
}, this);
}
// ===== 活跃探险:展示地图 + 事件 =====
const exp = activeExpedition;
const currentNode = exp.nodes[exp.currentNode];
const nodeMeta = NODE_META[currentNode.type];
const NodeIcon = nodeMeta.icon;
const hpPct = exp.hp / exp.maxHp * 100;
const pathProgress = (exp.currentNode + (currentNode.cleared ? 1 : 0)) / exp.nodes.length * 100;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex flex-col gap-2.5 h-full",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center justify-between gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__["Rocket"], {
className: "h-3.5 w-3.5 text-amber-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 241,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-xs font-semibold",
children: "遗迹探险"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 242,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-[10px] text-muted-foreground",
children: [
"第 ",
exp.currentNode + 1,
"/",
exp.nodes.length,
" 节点"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 243,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 240,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-[10px] text-muted-foreground",
children: "探险力"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 246,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-xs font-mono font-semibold text-amber-300",
children: exp.power
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 247,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 245,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 239,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center justify-between mb-0.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$heart$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Heart$3e$__["Heart"], {
className: "h-3 w-3 text-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 255,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-[10px] text-muted-foreground",
children: "探险队生命"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 256,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 254,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + `text-[10px] font-mono ${hpPct < 30 ? "text-rose-400" : "text-foreground"}`,
children: [
exp.hp,
" / ",
exp.maxHp
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 258,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 253,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Progress"], {
value: hpPct,
className: "h-1.5 bg-black/40 [&>div]:bg-gradient-to-r [&>div]:from-rose-500 [&>div]:to-emerald-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 262,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 252,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "rounded-xl border border-white/10 bg-black/30 p-2.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center gap-1 overflow-x-auto echo-scroll pb-1",
children: exp.nodes.map((node, i)=>{
const meta = NODE_META[node.type];
const Icon = meta.icon;
const isCurrent = i === exp.currentNode;
const isCleared = node.cleared;
const isPast = i < exp.currentNode;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center shrink-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: isCleared || isPast ? "rgba(255,255,255,0.04)" : meta.bg,
border: isCurrent ? `1.5px solid ${meta.color}` : "1px solid rgba(255,255,255,0.08)",
boxShadow: isCurrent ? `0 0 12px ${meta.color}66` : "none"
},
title: `${meta.label} · ${node.title}`,
className: "jsx-df1c681cdb543264" + " " + `relative h-9 w-9 rounded-lg flex items-center justify-center transition-all duration-300 ${isCurrent ? "scale-125" : ""}`,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Icon, {
style: {
color: isCleared || isPast ? "#666" : meta.color
},
className: "jsx-df1c681cdb543264" + " " + `h-4 w-4 ${isCleared || isPast ? "opacity-30" : ""}`
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 290,
columnNumber: 19
}, this),
isCleared && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "absolute -top-1 -right-1 h-3 w-3 rounded-full bg-emerald-500/80 flex items-center justify-center",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-[8px] text-white",
children: "✓"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 293,
columnNumber: 23
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 292,
columnNumber: 21
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 279,
columnNumber: 17
}, this),
i < exp.nodes.length - 1 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronRight$3e$__["ChevronRight"], {
className: `h-3 w-3 mx-0.5 ${isPast || isCurrent && isCleared ? "text-amber-400/60" : "text-white/15"}`
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 298,
columnNumber: 19
}, this)
]
}, node.id, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 278,
columnNumber: 15
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 270,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "mt-1.5",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Progress"], {
value: pathProgress,
className: "h-1 bg-black/40 [&>div]:bg-gradient-to-r [&>div]:from-amber-500 [&>div]:to-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 305,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 304,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 269,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
borderColor: `${nodeMeta.color}44`,
background: `linear-gradient(135deg, ${nodeMeta.color}11, rgba(0,0,0,0.4))`,
boxShadow: `0 0 20px ${nodeMeta.color}22`
},
className: "jsx-df1c681cdb543264" + " " + "rounded-xl border p-3 relative overflow-hidden",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: `${nodeMeta.color}22`
},
className: "jsx-df1c681cdb543264" + " " + "absolute -top-8 -right-8 h-24 w-24 rounded-full blur-2xl"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 318,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "relative",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center gap-2 mb-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: nodeMeta.bg,
border: `1px solid ${nodeMeta.color}44`
},
className: "jsx-df1c681cdb543264" + " " + "h-8 w-8 rounded-lg flex items-center justify-center",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(NodeIcon, {
style: {
color: nodeMeta.color
},
className: "jsx-df1c681cdb543264" + " " + "h-4 w-4"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 325,
columnNumber: 15
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 321,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
background: nodeMeta.bg,
color: nodeMeta.color
},
className: "jsx-df1c681cdb543264" + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded",
children: nodeMeta.label
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 329,
columnNumber: 17
}, this),
currentNode.type === "combat" && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-[10px] text-muted-foreground",
children: [
"胜率 ",
Math.round((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["combatWinRate"])(exp.power, currentNode.difficulty) * 100),
"%"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 333,
columnNumber: 19
}, this),
currentNode.difficulty > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-[10px] text-muted-foreground/60",
children: [
"难度 ",
currentNode.difficulty
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 338,
columnNumber: 19
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 328,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", {
style: {
color: nodeMeta.color
},
className: "jsx-df1c681cdb543264" + " " + "text-sm font-semibold mt-0.5",
children: currentNode.title
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 341,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 327,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 320,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-df1c681cdb543264" + " " + "text-[11px] text-muted-foreground/90 leading-relaxed",
children: currentNode.desc
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 346,
columnNumber: 11
}, this),
lastLog && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "mt-2 px-2 py-1.5 rounded-lg bg-black/40 border border-white/10",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-df1c681cdb543264" + " " + "text-[11px] text-foreground/90",
children: lastLog
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 353,
columnNumber: 15
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 352,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 319,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 310,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center gap-1.5",
children: [
!currentNode.cleared ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
onClick: handleResolve,
className: "flex-1 bg-gradient-to-r from-amber-600 to-rose-500 hover:from-amber-500 hover:to-rose-400 text-white border-0 h-8",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-3.5 w-3.5 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 366,
columnNumber: 13
}, this),
"探索节点"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 362,
columnNumber: 11
}, this) : exp.currentNode < exp.nodes.length - 1 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
onClick: handleAdvance,
className: "flex-1 h-8",
variant: "outline",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronRight$3e$__["ChevronRight"], {
className: "h-3.5 w-3.5 mr-1"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 375,
columnNumber: 13
}, this),
"前进"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 370,
columnNumber: 11
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex-1 text-center text-xs text-emerald-300 py-1.5",
children: "探险已完成 ✓"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 379,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
onClick: handleAbort,
variant: "ghost",
size: "sm",
className: "h-8 px-2 text-muted-foreground hover:text-rose-300",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$log$2d$out$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__LogOut$3e$__["LogOut"], {
className: "h-3.5 w-3.5"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 387,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 381,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 360,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-df1c681cdb543264" + " " + "flex items-center gap-2 text-[10px] px-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-muted-foreground/60",
children: "本次已获:"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 393,
columnNumber: 9
}, this),
exp.rewards.crystals > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-emerald-300",
children: [
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(exp.rewards.crystals),
"晶体"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 394,
columnNumber: 38
}, this),
exp.rewards.insights > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-amber-300",
children: [
exp.rewards.insights,
"洞见"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 395,
columnNumber: 38
}, this),
exp.rewards.contact > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-fuchsia-300",
children: [
exp.rewards.contact.toFixed(1),
"接触"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 396,
columnNumber: 37
}, this),
exp.rewards.crystals === 0 && exp.rewards.insights === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-df1c681cdb543264" + " " + "text-muted-foreground/40",
children: "暂无"
}, void 0, false, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 398,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 392,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "df1c681cdb543264",
children: ".echo-scroll::-webkit-scrollbar{width:4px;height:4px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:2px}.echo-scroll::-webkit-scrollbar-track{background:0 0}"
}, void 0, false, void 0, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExpeditionPanel.tsx",
lineNumber: 237,
columnNumber: 5
}, this);
}
_s(ExpeditionPanel, "FR5mW+pym+CWCiYwojfRmBLsSFM=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
];
});
_c = ExpeditionPanel;
var _c;
__turbopack_context__.k.register(_c, "ExpeditionPanel");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/AchievementsPanel.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"AchievementsPanel",
()=>AchievementsPanel
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 成就系统面板(v0.10 工单 #2 重写:单列 + 分类过滤 + 防溢出)
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$achievements$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/achievements.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trophy$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trophy$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trophy.js [app-client] (ecmascript) <export default as Trophy>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/lock.js [app-client] (ecmascript) <export default as Lock>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$funnel$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Filter$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/funnel.js [app-client] (ecmascript) <export default as Filter>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
const FILTER_TABS = [
{
key: "all",
label: "全部",
color: "#a78bfa"
},
{
key: "unlocked",
label: "已解锁",
color: "#34d399"
},
{
key: "locked",
label: "未解锁",
color: "#fb7185"
}
];
function AchievementsPanel() {
_s();
const achievements = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"AchievementsPanel.useGameStore[achievements]": (s)=>s.achievements
}["AchievementsPanel.useGameStore[achievements]"]);
const [filter, setFilter] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("all");
const unlockedCount = Object.values(achievements).filter(Boolean).length;
const bonus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$achievements$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["achievementBonuses"])(achievements);
const totalCount = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$achievements$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ACHIEVEMENTS"].length;
const unlockPct = totalCount > 0 ? unlockedCount / totalCount * 100 : 0;
// 按筛选条件过滤成就列表
const filtered = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({
"AchievementsPanel.useMemo[filtered]": ()=>{
return __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$achievements$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ACHIEVEMENTS"].filter({
"AchievementsPanel.useMemo[filtered]": (a)=>{
const unlocked = !!achievements[a.id];
if (filter === "unlocked") return unlocked;
if (filter === "locked") return !unlocked;
return true;
}
}["AchievementsPanel.useMemo[filtered]"]);
}
}["AchievementsPanel.useMemo[filtered]"], [
achievements,
filter
]);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex flex-col gap-2.5 h-full min-h-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center justify-between gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "jsx-89979d12e77b884d" + " " + "text-sm font-semibold flex items-center gap-1.5 shrink-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trophy$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trophy$3e$__["Trophy"], {
className: "h-4 w-4 text-amber-400"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 40,
columnNumber: 11
}, this),
"成就"
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 39,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-2 text-[10px] font-mono",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-amber-300",
children: unlockedCount
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 44,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-muted-foreground/50",
children: "/"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 45,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-muted-foreground",
children: totalCount
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 46,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-muted-foreground/60",
children: [
"(",
unlockPct.toFixed(0),
"%)"
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 47,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 43,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 38,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "h-1 rounded-full bg-black/40 overflow-hidden",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
width: `${unlockPct}%`,
boxShadow: "0 0 8px rgba(251,191,36,0.5)"
},
className: "jsx-89979d12e77b884d" + " " + "h-full bg-gradient-to-r from-amber-500 via-rose-400 to-fuchsia-400 transition-all duration-500"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 53,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 52,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "rounded-lg border border-amber-400/20 bg-amber-950/20 px-2.5 py-1.5 flex items-center gap-2 text-[10px] flex-wrap",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-3 w-3 text-amber-400 shrink-0"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 61,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-amber-300/80",
children: "永久加成"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 62,
columnNumber: 9
}, this),
bonus.crystalsPerSecPct > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-emerald-300",
children: [
"产能 +",
bonus.crystalsPerSecPct,
"%"
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 64,
columnNumber: 11
}, this),
bonus.insightPct > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-fuchsia-300",
children: [
"洞见 +",
bonus.insightPct,
"%"
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 67,
columnNumber: 11
}, this),
bonus.crystalsPerSecPct === 0 && bonus.insightPct === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-muted-foreground/60",
children: "达成成就解锁永久加成"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 70,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 60,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-1 text-[10px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$funnel$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Filter$3e$__["Filter"], {
className: "h-3 w-3 text-muted-foreground/60 shrink-0"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 76,
columnNumber: 9
}, this),
FILTER_TABS.map((t)=>{
const active = filter === t.key;
const count = t.key === "all" ? totalCount : t.key === "unlocked" ? unlockedCount : totalCount - unlockedCount;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: ()=>setFilter(t.key),
style: active ? {
color: t.color,
boxShadow: `inset 0 0 0 1px ${t.color}55`
} : undefined,
className: "jsx-89979d12e77b884d" + " " + `px-2 py-0.5 rounded-md transition-all ${active ? "bg-white/10 text-foreground" : "text-muted-foreground/70 hover:text-foreground hover:bg-white/5"}`,
children: [
t.label,
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "ml-1 font-mono opacity-70",
children: count
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 97,
columnNumber: 15
}, this)
]
}, t.key, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 86,
columnNumber: 13
}, this);
})
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 75,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex-1 min-h-0 overflow-y-auto echo-scroll pr-1 space-y-1.5",
children: [
filtered.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "text-center text-[11px] text-muted-foreground/60 py-6",
children: "该分类下暂无成就"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 106,
columnNumber: 11
}, this),
filtered.map((a)=>{
const unlocked = !!achievements[a.id];
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: unlocked ? {
boxShadow: `inset 0 0 14px ${a.color}10`
} : undefined,
className: "jsx-89979d12e77b884d" + " " + `relative rounded-lg border px-2.5 py-2 transition-all duration-300 min-h-[68px] flex items-center ${unlocked ? "border-white/15 bg-black/30" : "border-white/5 bg-black/15 opacity-70"}`,
children: [
unlocked && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: a.color
},
className: "jsx-89979d12e77b884d" + " " + "absolute -top-6 -right-6 h-16 w-16 rounded-full blur-2xl opacity-40 pointer-events-none"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 127,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: unlocked ? `${a.color}22` : "rgba(255,255,255,0.04)",
border: `1px solid ${unlocked ? a.color + "55" : "rgba(255,255,255,0.08)"}`,
color: unlocked ? a.color : "#666",
boxShadow: unlocked ? `0 0 10px ${a.color}33` : "none"
},
className: "jsx-89979d12e77b884d" + " " + "shrink-0 h-10 w-10 rounded-lg flex items-center justify-center text-lg mr-2.5",
children: unlocked ? a.icon : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lock$3e$__["Lock"], {
className: "h-4 w-4"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 142,
columnNumber: 38
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 133,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "min-w-0 flex-1 flex flex-col gap-0.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: unlocked ? a.color : "rgba(255,255,255,0.5)"
},
className: "jsx-89979d12e77b884d" + " " + "text-[11px] font-semibold truncate",
children: a.name
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 147,
columnNumber: 19
}, this),
unlocked && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
background: `${a.color}22`,
color: a.color
},
className: "jsx-89979d12e77b884d" + " " + "text-[8px] px-1 py-0 rounded shrink-0 font-mono",
children: "✓"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 154,
columnNumber: 21
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 146,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "text-[10px] text-muted-foreground/80 leading-tight line-clamp-2",
children: a.desc
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 162,
columnNumber: 17
}, this),
unlocked && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
color: a.color + "cc"
},
className: "jsx-89979d12e77b884d" + " " + "text-[9px] mt-0.5 font-mono truncate",
children: [
"✦ ",
a.rewardText
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 166,
columnNumber: 19
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 145,
columnNumber: 15
}, this)
]
}, a.id, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 113,
columnNumber: 13
}, this);
})
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 104,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "89979d12e77b884d",
children: ".echo-scroll::-webkit-scrollbar{width:5px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff24;border-radius:3px}.echo-scroll::-webkit-scrollbar-track{background:0 0}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}"
}, void 0, false, void 0, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementsPanel.tsx",
lineNumber: 36,
columnNumber: 5
}, this);
}
_s(AchievementsPanel, "GqbFbWwKEylYjiiR9koAZ6owrsU=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = AchievementsPanel;
var _c;
__turbopack_context__.k.register(_c, "AchievementsPanel");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/AchievementNotifier.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"AchievementNotifier",
()=>AchievementNotifier
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 成就解锁通知(v0.9 全屏特效增强)
// 工单 Issue #2 反馈"成就系统没看出来有什么用",改为居中全息弹窗 + 奖励数字弹出
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$components$2f$AnimatePresence$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/use-toast.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
function AchievementNotifier() {
_s();
const queue = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"AchievementNotifier.useGameStore[queue]": (s)=>s._achievementQueue
}["AchievementNotifier.useGameStore[queue]"]);
const consume = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"AchievementNotifier.useGameStore[consume]": (s)=>s.consumeAchievementQueue
}["AchievementNotifier.useGameStore[consume]"]);
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
const [notifications, setNotifications] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"AchievementNotifier.useEffect": ()=>{
if (queue.length === 0) return;
const items = consume();
for (const a of items){
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("achievement");
// v0.9:全屏居中特效通知
const id = Date.now() + Math.random();
// eslint-disable-next-line react-hooks/set-state-in-effect
setNotifications({
"AchievementNotifier.useEffect": (prev)=>[
...prev,
{
achievement: a,
id
}
]
}["AchievementNotifier.useEffect"]);
// 4 秒后自动移除
setTimeout({
"AchievementNotifier.useEffect": ()=>{
setNotifications({
"AchievementNotifier.useEffect": (prev)=>prev.filter({
"AchievementNotifier.useEffect": (n)=>n.id !== id
}["AchievementNotifier.useEffect"])
}["AchievementNotifier.useEffect"]);
}
}["AchievementNotifier.useEffect"], 4000);
// 同时保留底部 toast 作为日志
toast({
title: `成就解锁:${a.name}`,
description: `${a.desc} 奖励:${a.rewardText}`
});
}
}
}["AchievementNotifier.useEffect"], [
queue,
consume,
toast
]);
if (notifications.length === 0) return null;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed inset-0 z-[120] pointer-events-none flex items-center justify-center",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$components$2f$AnimatePresence$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["AnimatePresence"], {
children: notifications.map((n, idx)=>{
const a = n.achievement;
// 多个同时出现时垂直堆叠偏移
const offset = (idx - (notifications.length - 1) / 2) * 140;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["motion"].div, {
initial: {
opacity: 0,
scale: 0.4,
y: 40,
rotateX: -30
},
animate: {
opacity: 1,
scale: 1,
y: offset,
rotateX: 0
},
exit: {
opacity: 0,
scale: 0.6,
y: -60
},
transition: {
type: "spring",
stiffness: 280,
damping: 22
},
className: "absolute",
style: {
transformOrigin: "center center"
},
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "relative rounded-2xl border-2 px-8 py-5 backdrop-blur-xl overflow-hidden",
style: {
borderColor: a.color,
background: `linear-gradient(135deg, ${a.color}22, rgba(5,4,16,0.92))`,
boxShadow: `0 0 60px ${a.color}66, 0 0 120px ${a.color}33, inset 0 0 30px ${a.color}11`,
minWidth: 320,
maxWidth: 420
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute -top-20 -right-20 h-40 w-40 rounded-full blur-3xl opacity-50",
style: {
background: a.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 73,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["motion"].div, {
className: "absolute inset-0 rounded-2xl opacity-20",
style: {
background: `conic-gradient(from 0deg, transparent, ${a.color}, transparent, ${a.color}, transparent)`
},
animate: {
rotate: 360
},
transition: {
duration: 8,
repeat: Infinity,
ease: "linear"
}
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 78,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "relative flex items-center gap-4",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["motion"].div, {
className: "shrink-0 h-16 w-16 rounded-2xl flex items-center justify-center text-3xl",
style: {
background: `${a.color}33`,
border: `2px solid ${a.color}`,
boxShadow: `0 0 20px ${a.color}88, inset 0 0 12px ${a.color}44`
},
animate: {
boxShadow: [
`0 0 20px ${a.color}88, inset 0 0 12px ${a.color}44`,
`0 0 40px ${a.color}cc, inset 0 0 20px ${a.color}66`,
`0 0 20px ${a.color}88, inset 0 0 12px ${a.color}44`
]
},
transition: {
duration: 2,
repeat: Infinity
},
children: a.icon
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 89,
columnNumber: 19
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "min-w-0 flex-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["motion"].div, {
initial: {
opacity: 0,
x: -10
},
animate: {
opacity: 1,
x: 0
},
transition: {
delay: 0.15
},
className: "text-[10px] font-mono uppercase tracking-[0.2em] mb-0.5",
style: {
color: a.color
},
children: "✦ Achievement Unlocked"
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 110,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["motion"].h3, {
initial: {
opacity: 0,
x: -10
},
animate: {
opacity: 1,
x: 0
},
transition: {
delay: 0.2
},
className: "text-lg font-bold truncate",
style: {
color: a.color,
textShadow: `0 0 12px ${a.color}66`
},
children: a.name
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 119,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["motion"].p, {
initial: {
opacity: 0
},
animate: {
opacity: 1
},
transition: {
delay: 0.3
},
className: "text-[11px] text-muted-foreground/90 truncate",
children: a.desc
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 128,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["motion"].div, {
initial: {
opacity: 0,
y: 8
},
animate: {
opacity: 1,
y: 0
},
transition: {
delay: 0.4
},
className: "mt-1.5 inline-flex items-center gap-1 px-2 py-0.5 rounded-md text-[10px] font-mono font-semibold",
style: {
background: `${a.color}22`,
border: `1px solid ${a.color}55`,
color: a.color
},
children: [
"▸ ",
a.rewardText
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 137,
columnNumber: 21
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 109,
columnNumber: 19
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 87,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$framer$2d$motion$2f$dist$2f$es$2f$render$2f$components$2f$motion$2f$proxy$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["motion"].div, {
className: "absolute bottom-0 left-0 h-0.5",
style: {
background: a.color
},
initial: {
width: "100%"
},
animate: {
width: "0%"
},
transition: {
duration: 4,
ease: "linear"
}
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 154,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 62,
columnNumber: 15
}, this)
}, n.id, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 53,
columnNumber: 13
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 47,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/AchievementNotifier.tsx",
lineNumber: 46,
columnNumber: 5
}, this);
}
_s(AchievementNotifier, "oieRFR54daXP36ucFl1dyC1oJI0=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
];
});
_c = AchievementNotifier;
var _c;
__turbopack_context__.k.register(_c, "AchievementNotifier");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/ConstellationPanel.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"ConstellationPanel",
()=>ConstellationPanel
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 星图天文台面板(飞升元进程可视化)
// 6 个星座(六边形布局)× 3 颗星 = 18 个天赋节点,已解锁的星点亮 + 连线
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/constellation.ts [app-client] (ecmascript)");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
function ConstellationPanel() {
_s();
const constellation = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"ConstellationPanel.useGameStore[constellation]": (s)=>s.constellation ?? []
}["ConstellationPanel.useGameStore[constellation]"]);
const canvasRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null);
const containerRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null);
const [size, setSize] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])({
w: 360,
h: 360
});
const [hover, setHover] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const ownedSet = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({
"ConstellationPanel.useMemo[ownedSet]": ()=>new Set(constellation)
}["ConstellationPanel.useMemo[ownedSet]"], [
constellation
]);
// 自适应尺寸
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"ConstellationPanel.useEffect": ()=>{
const el = containerRef.current;
if (!el) return;
const ro = new ResizeObserver({
"ConstellationPanel.useEffect": ()=>{
const r = el.getBoundingClientRect();
setSize({
w: Math.max(280, r.width),
h: Math.max(280, Math.min(420, r.width))
});
}
}["ConstellationPanel.useEffect"]);
ro.observe(el);
return ({
"ConstellationPanel.useEffect": ()=>ro.disconnect()
})["ConstellationPanel.useEffect"];
}
}["ConstellationPanel.useEffect"], []);
// 计算布局(中心点 + 半径)
const layout = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({
"ConstellationPanel.useMemo[layout]": ()=>{
const cx = size.w / 2;
const cy = size.h / 2;
const radius = Math.min(size.w, size.h) * 0.32;
return {
cx,
cy,
radius
};
}
}["ConstellationPanel.useMemo[layout]"], [
size
]);
// 收集所有星点 + 每个星座的星点列表
const clusters = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({
"ConstellationPanel.useMemo[clusters]": ()=>{
const centers = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getConstellationLayout"])(layout.cx, layout.cy, layout.radius);
return centers.map({
"ConstellationPanel.useMemo[clusters]": (c)=>{
const stars = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getStarsInCategory"])(c.category, c.cx, c.cy, 1);
return {
...c,
stars
};
}
}["ConstellationPanel.useMemo[clusters]"]);
}
}["ConstellationPanel.useMemo[clusters]"], [
layout
]);
// 绘制
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"ConstellationPanel.useEffect": ()=>{
const canvas = canvasRef.current;
if (!canvas) return;
const ctx = canvas.getContext("2d");
if (!ctx) return;
const dpr = window.devicePixelRatio || 1;
canvas.width = size.w * dpr;
canvas.height = size.h * dpr;
canvas.style.width = `${size.w}px`;
canvas.style.height = `${size.h}px`;
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
let rafId = 0;
const start = performance.now();
const draw = {
"ConstellationPanel.useEffect.draw": (now)=>{
const t = (now - start) / 1000;
ctx.clearRect(0, 0, size.w, size.h);
// 背景径向暗光
const bg = ctx.createRadialGradient(layout.cx, layout.cy, 0, layout.cx, layout.cy, layout.radius * 1.6);
bg.addColorStop(0, "rgba(40,30,80,0.18)");
bg.addColorStop(1, "rgba(5,4,16,0)");
ctx.fillStyle = bg;
ctx.fillRect(0, 0, size.w, size.h);
// 中心装饰:星核
ctx.save();
ctx.translate(layout.cx, layout.cy);
const coreR = 6 + Math.sin(t * 1.5) * 1.5;
const coreGrad = ctx.createRadialGradient(0, 0, 0, 0, 0, coreR * 3);
coreGrad.addColorStop(0, "rgba(232,121,249,0.9)");
coreGrad.addColorStop(0.4, "rgba(232,121,249,0.3)");
coreGrad.addColorStop(1, "rgba(232,121,249,0)");
ctx.fillStyle = coreGrad;
ctx.beginPath();
ctx.arc(0, 0, coreR * 3, 0, Math.PI * 2);
ctx.fill();
ctx.fillStyle = "#fce7ff";
ctx.beginPath();
ctx.arc(0, 0, coreR * 0.6, 0, Math.PI * 2);
ctx.fill();
ctx.restore();
// 连接星座到中心的虚线(已解锁 >=1 时)
for (const c of clusters){
const cnt = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["countUnlockedInCategory"])(constellation, c.category);
if (cnt > 0) {
ctx.save();
ctx.strokeStyle = c.meta.glow;
ctx.lineWidth = 1;
ctx.setLineDash([
2,
4
]);
ctx.globalAlpha = 0.4 + Math.sin(t * 2 + c.cx) * 0.1;
ctx.beginPath();
ctx.moveTo(layout.cx, layout.cy);
ctx.lineTo(c.cx, c.cy);
ctx.stroke();
ctx.restore();
}
}
// 绘制每个星座
for (const c of clusters){
const cnt = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["countUnlockedInCategory"])(constellation, c.category);
// 星座中心标签
ctx.save();
ctx.font = "10px ui-monospace, monospace";
ctx.textAlign = "center";
ctx.fillStyle = cnt > 0 ? c.meta.hex : "rgba(148,163,184,0.5)";
ctx.globalAlpha = 0.85;
ctx.fillText(c.meta.name, c.cx, c.cy + 38);
ctx.restore();
// 同星座内已解锁星点之间的连线
const unlockedStars = c.stars.filter({
"ConstellationPanel.useEffect.draw.unlockedStars": (s)=>ownedSet.has(s.perk.id)
}["ConstellationPanel.useEffect.draw.unlockedStars"]);
if (unlockedStars.length >= 2) {
ctx.save();
ctx.strokeStyle = c.meta.glow;
ctx.lineWidth = 1.5;
ctx.globalAlpha = 0.6;
ctx.beginPath();
unlockedStars.forEach({
"ConstellationPanel.useEffect.draw": (s, i)=>{
if (i === 0) ctx.moveTo(s.x, s.y);
else ctx.lineTo(s.x, s.y);
}
}["ConstellationPanel.useEffect.draw"]);
ctx.stroke();
ctx.restore();
}
// 绘制星点
for (const star of c.stars){
const unlocked = ownedSet.has(star.perk.id);
ctx.save();
ctx.translate(star.x, star.y);
// 闪烁系数
const twinkle = unlocked ? 0.85 + Math.sin(t * 3 + star.x * 0.1) * 0.15 : 0.3;
// 外光晕
const haloR = unlocked ? 10 : 5;
const haloGrad = ctx.createRadialGradient(0, 0, 0, 0, 0, haloR);
haloGrad.addColorStop(0, unlocked ? c.meta.glow : "rgba(100,116,139,0.2)");
haloGrad.addColorStop(1, "rgba(0,0,0,0)");
ctx.fillStyle = haloGrad;
ctx.globalAlpha = twinkle;
ctx.beginPath();
ctx.arc(0, 0, haloR, 0, Math.PI * 2);
ctx.fill();
// 核心
ctx.globalAlpha = unlocked ? 1 : 0.4;
ctx.fillStyle = unlocked ? c.meta.hex : "#475569";
ctx.beginPath();
ctx.arc(0, 0, unlocked ? 3.5 : 2, 0, Math.PI * 2);
ctx.fill();
// 解锁星点:4 道十字光线
if (unlocked) {
ctx.strokeStyle = c.meta.hex;
ctx.globalAlpha = 0.7 * twinkle;
ctx.lineWidth = 0.8;
const ray = 7 + Math.sin(t * 4 + star.y * 0.1) * 1.5;
ctx.beginPath();
ctx.moveTo(-ray, 0);
ctx.lineTo(ray, 0);
ctx.moveTo(0, -ray);
ctx.lineTo(0, ray);
ctx.stroke();
}
ctx.restore();
}
}
rafId = requestAnimationFrame(draw);
}
}["ConstellationPanel.useEffect.draw"];
rafId = requestAnimationFrame(draw);
return ({
"ConstellationPanel.useEffect": ()=>cancelAnimationFrame(rafId)
})["ConstellationPanel.useEffect"];
}
}["ConstellationPanel.useEffect"], [
clusters,
layout,
size,
constellation,
ownedSet
]);
// 鼠标交互:检测 hover
const handleMove = (e)=>{
const canvas = canvasRef.current;
if (!canvas) return;
const rect = canvas.getBoundingClientRect();
const mx = e.clientX - rect.left;
const my = e.clientY - rect.top;
let best = null;
let bestDist = 14;
for (const c of clusters){
for (const star of c.stars){
const d = Math.hypot(star.x - mx, star.y - my);
if (d < bestDist) {
bestDist = d;
best = {
perk: star.perk,
x: star.x,
y: star.y,
unlocked: ownedSet.has(star.perk.id)
};
}
}
}
setHover(best);
};
const handleLeave = ()=>setHover(null);
const progress = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["constellationProgress"])(constellation);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
ref: containerRef,
className: "flex flex-col gap-2 min-h-0 h-full",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between text-[11px] px-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-fuchsia-300",
children: "✦"
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 234,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-muted-foreground",
children: "星图天赋"
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 235,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "font-mono text-foreground",
children: [
progress.unlocked,
"/",
progress.total
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 236,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 233,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-muted-foreground/60 text-[10px]",
children: "每次飞升可解锁 1 个"
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 240,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 232,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "relative rounded-xl bg-black/30 border border-white/5 overflow-hidden flex-shrink-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("canvas", {
ref: canvasRef,
onMouseMove: handleMove,
onMouseLeave: handleLeave,
className: "block cursor-pointer"
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 245,
columnNumber: 9
}, this),
hover && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "pointer-events-none absolute z-10 max-w-[200px] rounded-md bg-black/85 border border-white/10 px-2 py-1.5 text-[10px] leading-tight shadow-lg backdrop-blur-sm",
style: {
left: Math.min(hover.x + 12, size.w - 200),
top: Math.max(0, hover.y - 40)
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "font-bold mb-0.5",
style: {
color: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_CATEGORY_META"][hover.perk.category].hex
},
children: [
hover.unlocked ? "★ " : "☆ ",
hover.perk.name
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 260,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-muted-foreground",
children: hover.perk.desc
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 267,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-muted-foreground/60 mt-0.5",
children: [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_CATEGORY_META"][hover.perk.category].name,
" · 序",
hover.perk.order
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 268,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 253,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 244,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "grid grid-cols-3 gap-1 text-[10px]",
children: Object.keys(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_CATEGORY_META"]).map((cat)=>{
const meta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_CATEGORY_META"][cat];
const cnt = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["countUnlockedInCategory"])(constellation, cat);
const total = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_PERKS"].filter((p)=>p.category === cat).length;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-md bg-black/25 border border-white/5 px-1.5 py-1 flex items-center gap-1",
style: cnt > 0 ? {
borderColor: `${meta.hex}40`
} : undefined,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "inline-block h-1.5 w-1.5 rounded-full flex-shrink-0",
style: {
background: meta.hex,
boxShadow: cnt > 0 ? `0 0 4px ${meta.hex}` : "none"
}
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 287,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-muted-foreground truncate",
children: meta.name
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 291,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "ml-auto font-mono",
style: {
color: cnt > 0 ? meta.hex : "rgba(148,163,184,0.5)"
},
children: [
cnt,
"/",
total
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 292,
columnNumber: 15
}, this)
]
}, cat, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 282,
columnNumber: 13
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 276,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex-1 min-h-0 overflow-y-auto pr-1 echo-scrollbar",
children: constellation.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-md bg-black/25 border border-dashed border-white/10 px-3 py-3 text-center text-[11px] text-muted-foreground/70",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "mb-1 text-fuchsia-300/80",
children: "✦"
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 304,
columnNumber: 13
}, this),
"尚未解锁任何天赋。",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("br", {}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 305,
columnNumber: 22
}, this),
"累积接触进度至 100%,发起「飞升」即可在 3 个随机天赋中选 1。"
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 303,
columnNumber: 11
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex flex-col gap-1",
children: constellation.map((id)=>{
const perk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getPerk"])(id);
if (!perk) return null;
const meta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_CATEGORY_META"][perk.category];
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-md bg-black/25 border px-2 py-1.5 flex items-center gap-2 text-[11px]",
style: {
borderColor: `${meta.hex}30`
},
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "inline-block h-2 w-2 rounded-full flex-shrink-0",
style: {
background: meta.hex,
boxShadow: `0 0 6px ${meta.hex}`
}
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 320,
columnNumber: 19
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex-1 min-w-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-foreground truncate",
children: perk.name
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 325,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-muted-foreground/70 text-[10px] truncate",
children: perk.desc
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 326,
columnNumber: 21
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 324,
columnNumber: 19
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[9px] text-muted-foreground/50 font-mono",
children: meta.name
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 328,
columnNumber: 19
}, this)
]
}, id, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 315,
columnNumber: 17
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 309,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 301,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ConstellationPanel.tsx",
lineNumber: 230,
columnNumber: 5
}, this);
}
_s(ConstellationPanel, "ZmbIWV+yXfYQdnOsS7ih+bHN+yg=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = ConstellationPanel;
var _c;
__turbopack_context__.k.register(_c, "ConstellationPanel");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/BeaconPanel.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"BeaconPanel",
()=>BeaconPanel
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 深空信标面板
// v0.5:每日挑战 + 本地排行榜
// v0.8:周挑战 + 信标链(连续完成奖励)
// v0.8.2:限时挑战(每 4 小时刷新,amber 主题)
// v0.8.2 P2/#4:本地/全球双榜(云排行榜 mini-service 端口 3030
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/use-toast.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/beacon.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/button.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/progress.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$radio$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Radio$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/radio.js [app-client] (ecmascript) <export default as Radio>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/clock.js [app-client] (ecmascript) <export default as Clock>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trophy$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trophy$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trophy.js [app-client] (ecmascript) <export default as Trophy>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$award$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Award$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/award.js [app-client] (ecmascript) <export default as Award>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$crown$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Crown$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/crown.js [app-client] (ecmascript) <export default as Crown>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$medal$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Medal$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/medal.js [app-client] (ecmascript) <export default as Medal>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$link$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Link2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/link-2.js [app-client] (ecmascript) <export default as Link2>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$flame$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Flame$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/flame.js [app-client] (ecmascript) <export default as Flame>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/zap.js [app-client] (ecmascript) <export default as Zap>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$hourglass$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Hourglass$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/hourglass.js [app-client] (ecmascript) <export default as Hourglass>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$cw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RefreshCw$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/refresh-cw.js [app-client] (ecmascript) <export default as RefreshCw>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$globe$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Globe$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/globe.js [app-client] (ecmascript) <export default as Globe>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$wifi$2d$off$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__WifiOff$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/wifi-off.js [app-client] (ecmascript) <export default as WifiOff>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Loader2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/loader-circle.js [app-client] (ecmascript) <export default as Loader2>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
;
;
;
;
const DIFFICULTY_ORDER = [
"routine",
"anomaly",
"singular"
];
function rankBadge(rank) {
if (rank === 0) return {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$crown$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Crown$3e$__["Crown"],
color: "#fbbf24",
label: "1st"
};
if (rank === 1) return {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$medal$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Medal$3e$__["Medal"],
color: "#cbd5e1",
label: "2nd"
};
if (rank === 2) return {
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$award$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Award$3e$__["Award"],
color: "#f97316",
label: "3rd"
};
return null;
}
function BeaconPanel() {
_s();
const grantBeaconReward = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"BeaconPanel.useGameStore[grantBeaconReward]": (s)=>s.grantBeaconReward
}["BeaconPanel.useGameStore[grantBeaconReward]"]);
const claimWeeklyBeacon = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"BeaconPanel.useGameStore[claimWeeklyBeacon]": (s)=>s.claimWeeklyBeacon
}["BeaconPanel.useGameStore[claimWeeklyBeacon]"]);
const claimTimedBeacon = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"BeaconPanel.useGameStore[claimTimedBeacon]": (s)=>s.claimTimedBeacon
}["BeaconPanel.useGameStore[claimTimedBeacon]"]);
const claimChainReward = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"BeaconPanel.useGameStore[claimChainReward]": (s)=>s.claimChainReward
}["BeaconPanel.useGameStore[claimChainReward]"]);
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
const [challenge, setChallenge] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [progress, setProgress] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [timedChallenge, setTimedChallenge] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [timedProgress, setTimedProgress] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [weeklyChallenge, setWeeklyChallenge] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [weeklyProgress, setWeeklyProgress] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [chainState, setChainState] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [leaderboard, setLeaderboard] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
const [dayCountdown, setDayCountdown] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("00:00:00");
const [timedCountdown, setTimedCountdown] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("00:00:00");
const [weekCountdown, setWeekCountdown] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("00:00:00");
const [now, setNow] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(Date.now());
// 云排行榜状态(v0.8.2 P2/#4
const [lbTab, setLbTab] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])("local");
const [cloudEntries, setCloudEntries] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])([]);
const [cloudLoading, setCloudLoading] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
const [cloudError, setCloudError] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [cloudFetched, setCloudFetched] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
const [mySubmitTs, setMySubmitTs] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(0);
const cloudFetchingRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(false);
// 初始化 + 每秒刷新(进度 + 倒计时)
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"BeaconPanel.useEffect": ()=>{
setChallenge((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["generateDailyChallenge"])());
setProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadDailyProgress"])());
setTimedChallenge((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["generateTimedChallenge"])());
setTimedProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadTimedProgress"])());
setWeeklyChallenge((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["generateWeeklyChallenge"])());
setWeeklyProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadWeeklyProgress"])());
setChainState((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadChainState"])());
setLeaderboard((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadLeaderboard"])());
const id = setInterval({
"BeaconPanel.useEffect.id": ()=>{
setNow(Date.now());
setProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadDailyProgress"])());
setTimedProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadTimedProgress"])());
setWeeklyProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadWeeklyProgress"])());
setChainState((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadChainState"])());
setChallenge({
"BeaconPanel.useEffect.id": (c)=>c ?? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["generateDailyChallenge"])()
}["BeaconPanel.useEffect.id"]);
setTimedChallenge({
"BeaconPanel.useEffect.id": (c)=>c ?? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["generateTimedChallenge"])()
}["BeaconPanel.useEffect.id"]);
setWeeklyChallenge({
"BeaconPanel.useEffect.id": (c)=>c ?? (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["generateWeeklyChallenge"])()
}["BeaconPanel.useEffect.id"]);
}
}["BeaconPanel.useEffect.id"], 1000);
return ({
"BeaconPanel.useEffect": ()=>clearInterval(id)
})["BeaconPanel.useEffect"];
}
}["BeaconPanel.useEffect"], []);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"BeaconPanel.useEffect": ()=>{
setDayCountdown((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatCountdown"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["msUntilNextDay"])(new Date(now))));
setTimedCountdown((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatCountdown"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["msUntilNextTimedSlot"])(new Date(now))));
setWeekCountdown((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatCountdown"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["msUntilNextWeek"])(new Date(now))));
}
}["BeaconPanel.useEffect"], [
now
]);
// 初始化:读取本地保存的"上次提交时间戳"(用于全球榜高亮我的记录)
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"BeaconPanel.useEffect": ()=>{
setMySubmitTs((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadLastCloudSubmitTimestamp"])());
}
}["BeaconPanel.useEffect"], []);
// 拉取全球排行榜
const refreshCloudLeaderboard = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"BeaconPanel.useCallback[refreshCloudLeaderboard]": async ()=>{
if (cloudFetchingRef.current) return;
cloudFetchingRef.current = true;
setCloudLoading(true);
setCloudError(null);
try {
const entries = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["fetchCloudLeaderboard"])();
setCloudEntries(entries);
setCloudFetched(true);
setMySubmitTs((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadLastCloudSubmitTimestamp"])());
if (entries.length === 0) {
setCloudError("尚无全球记录,成为首位登顶者!");
}
} catch {
setCloudError("全球榜连接失败,请稍后重试");
} finally{
setCloudLoading(false);
cloudFetchingRef.current = false;
}
}
}["BeaconPanel.useCallback[refreshCloudLeaderboard]"], []);
// 切到全球 tab 时自动拉取一次(如已拉取过则不强制)
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"BeaconPanel.useEffect": ()=>{
if (lbTab === "global" && !cloudFetched && !cloudLoading) {
void refreshCloudLeaderboard();
}
}
}["BeaconPanel.useEffect"], [
lbTab,
cloudFetched,
cloudLoading,
refreshCloudLeaderboard
]);
const handleClaimDaily = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"BeaconPanel.useCallback[handleClaimDaily]": ()=>{
if (!challenge || !progress) return;
if (progress.completedAt === null || progress.claimed) return;
const res = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["claimBeaconReward"])(challenge, progress);
setLeaderboard(res.leaderboard);
setProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadDailyProgress"])());
// 发放奖励到游戏状态
grantBeaconReward(res.rewardInsight, res.rewardContact);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("achievement");
toast({
title: "✦ 每日信标奖励已领取",
description: `+${res.rewardInsight} 洞见 · +${res.rewardContact.toFixed(1)} 接触 · 得分 ${res.score}`
});
// 异步提交到云排行榜(失败静默,不影响本地)
if (res.entry) {
void (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["submitCloudScore"])(res.entry).then({
"BeaconPanel.useCallback[handleClaimDaily]": (rank)=>{
if (rank >= 1) {
setMySubmitTs(res.entry.timestamp);
// 若用户在全球 tab,自动刷新
if (lbTab === "global") {
void refreshCloudLeaderboard();
}
}
}
}["BeaconPanel.useCallback[handleClaimDaily]"]);
}
}
}["BeaconPanel.useCallback[handleClaimDaily]"], [
challenge,
progress,
toast,
grantBeaconReward,
lbTab,
refreshCloudLeaderboard
]);
const handleClaimTimed = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"BeaconPanel.useCallback[handleClaimTimed]": ()=>{
if (!timedChallenge || !timedProgress) return;
if (timedProgress.completedAt === null || timedProgress.claimed) return;
const res = claimTimedBeacon();
setLeaderboard((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadLeaderboard"])());
setTimedProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadTimedProgress"])());
if (res.rewardInsight > 0 || res.rewardContact > 0) {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("achievement");
toast({
title: "✦ 限时挑战奖励已领取",
description: `+${res.rewardInsight} 洞见 · +${res.rewardContact.toFixed(1)} 接触 · 得分 ${res.score}`
});
// 异步刷新云榜(claimTimedBeacon 已在 gameStore 内异步提交到云端)
setMySubmitTs((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadLastCloudSubmitTimestamp"])());
if (lbTab === "global") {
void refreshCloudLeaderboard();
}
}
}
}["BeaconPanel.useCallback[handleClaimTimed]"], [
timedChallenge,
timedProgress,
toast,
claimTimedBeacon,
lbTab,
refreshCloudLeaderboard
]);
const handleClaimWeekly = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"BeaconPanel.useCallback[handleClaimWeekly]": ()=>{
if (!weeklyChallenge || !weeklyProgress) return;
if (weeklyProgress.completedAt === null || weeklyProgress.claimed) return;
const res = claimWeeklyBeacon();
setLeaderboard((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadLeaderboard"])());
setWeeklyProgress((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadWeeklyProgress"])());
if (res.rewardInsight > 0 || res.rewardContact > 0) {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("achievement");
toast({
title: "✦ 周挑战奖励已领取",
description: `+${res.rewardInsight} 洞见 · +${res.rewardContact.toFixed(1)} 接触 · 得分 ${res.score}`
});
// 异步刷新云榜(claimWeeklyBeacon 已在 gameStore 内异步提交到云端)
setMySubmitTs((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadLastCloudSubmitTimestamp"])());
if (lbTab === "global") {
void refreshCloudLeaderboard();
}
}
}
}["BeaconPanel.useCallback[handleClaimWeekly]"], [
weeklyChallenge,
weeklyProgress,
toast,
claimWeeklyBeacon,
lbTab,
refreshCloudLeaderboard
]);
const handleClaimChain = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"BeaconPanel.useCallback[handleClaimChain]": (milestone)=>{
const reward = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_CHAIN_REWARDS"].find({
"BeaconPanel.useCallback[handleClaimChain].reward": (r)=>r.milestone === milestone
}["BeaconPanel.useCallback[handleClaimChain].reward"]);
const res = claimChainReward(milestone);
setChainState((0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["loadChainState"])());
if (res.ok) {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("achievement");
toast({
title: `✦ ${res.label || reward?.label || "里程碑"} 已领取`,
description: `+${res.rewardInsight} 洞见 · +${res.rewardContact.toFixed(1)} 接触`
});
}
}
}["BeaconPanel.useCallback[handleClaimChain]"], [
toast,
claimChainReward
]);
if (!challenge || !progress || !timedChallenge || !timedProgress || !weeklyChallenge || !weeklyProgress || !chainState) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-center h-full text-xs text-muted-foreground/60",
children: "正在校准深空信标…"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 269,
columnNumber: 7
}, this);
}
const diffMeta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_DIFFICULTY"][challenge.difficulty];
const typeMeta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_TYPE_META"][challenge.type];
const pct = Math.min(100, progress.progress / challenge.goal * 100);
const isCompleted = progress.completedAt !== null;
const isClaimed = progress.claimed;
const canClaim = isCompleted && !isClaimed;
// 限时挑战派生量
const tDiffMeta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_DIFFICULTY"][timedChallenge.difficulty];
const tTypeMeta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_TYPE_META"][timedChallenge.type];
const tPct = Math.min(100, timedProgress.progress / timedChallenge.goal * 100);
const tCompleted = timedProgress.completedAt !== null;
const tClaimed = timedProgress.claimed;
const tCanClaim = tCompleted && !tClaimed;
// 周挑战派生量
const wDiffMeta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_DIFFICULTY"][weeklyChallenge.difficulty];
const wTypeMeta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_TYPE_META"][weeklyChallenge.type];
const wPct = Math.min(100, weeklyProgress.progress / weeklyChallenge.goal * 100);
const wCompleted = weeklyProgress.completedAt !== null;
const wClaimed = weeklyProgress.claimed;
const wCanClaim = wCompleted && !wClaimed;
// 信标链派生量
const chainProgress = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getChainProgress"])(chainState.currentStreak);
const nextMilestone = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getNextMilestone"])(chainState.currentStreak);
const todayKey = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getTodayKey"])();
const completedToday = chainState.lastCompletedDateKey === todayKey;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex flex-col gap-2.5 h-full overflow-y-auto echo-scroll pr-0.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "12f5fcaad97b9273",
dynamic: [
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
],
children: `.echo-scroll::-webkit-scrollbar{width:4px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:2px}.echo-scroll::-webkit-scrollbar-track{background:0 0}@keyframes beacon-pulse-ring{0%{opacity:.8;transform:scale(.8)}to{opacity:0;transform:scale(2.2)}}@keyframes beacon-glow{0%,to{box-shadow:0 0 18px ${diffMeta.glow},inset 0 0 12px ${diffMeta.glow}}50%{box-shadow:0 0 32px ${diffMeta.glow},inset 0 0 20px ${diffMeta.glow}}}@keyframes weekly-glow{0%,to{box-shadow:0 0 18px #e879f959,inset 0 0 12px #e879f940}50%{box-shadow:0 0 32px #e879f980,inset 0 0 20px #e879f959}}@keyframes timed-glow{0%,to{box-shadow:0 0 18px #fbbf2466,inset 0 0 12px #fbbf2440}50%{box-shadow:0 0 30px #fbbf248c,inset 0 0 20px #fbbf2459}}@keyframes timed-urgent{0%,to{box-shadow:0 0 18px #f43f5e80,inset 0 0 12px #f43f5e4d}50%{box-shadow:0 0 34px #f43f5eb3,inset 0 0 22px #f43f5e66}}@keyframes chain-milestone-pulse{0%,to{transform:scale(1);box-shadow:0 0 #fb71858c}50%{transform:scale(1.06);box-shadow:0 0 0 8px #fb718500}}.chain-milestone-reachable{animation:1.8s ease-in-out infinite chain-milestone-pulse}@keyframes chain-streak-flux{0%,to{background-position:0%}50%{background-position:100%}}.chain-streak-text{-webkit-text-fill-color:transparent;background:linear-gradient(90deg,#fbbf24,#fb7185,#fbbf24) 0 0/200% 100%;-webkit-background-clip:text;background-clip:text;animation:4s ease-in-out infinite chain-streak-flux}`
}, void 0, false, void 0, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-sm font-semibold flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$radio$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Radio$3e$__["Radio"], {
className: "h-4 w-4 text-fuchsia-400"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 354,
columnNumber: 11
}, this),
"深空信标"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 353,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1 text-[10px] text-muted-foreground/70",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__["Clock"], {
className: "h-3 w-3"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 358,
columnNumber: 11
}, this),
"次日重置",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono text-fuchsia-300/90",
children: dayCountdown
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 360,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 357,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 352,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
borderColor: `${diffMeta.color}55`,
background: `linear-gradient(135deg, ${diffMeta.color}1f, rgba(0,0,0,0.45))`,
animation: isCompleted ? "none" : "beacon-glow 3s ease-in-out infinite"
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "relative rounded-xl border p-3 overflow-hidden",
children: [
!isCompleted && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
border: `1.5px solid ${diffMeta.color}`,
animation: "beacon-pulse-ring 2.5s ease-out infinite"
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "absolute top-4 right-4 h-10 w-10 rounded-full pointer-events-none"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 376,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
border: `1.5px solid ${diffMeta.color}`,
animation: "beacon-pulse-ring 2.5s ease-out infinite 1.25s"
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "absolute top-4 right-4 h-10 w-10 rounded-full pointer-events-none"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 383,
columnNumber: 13
}, this)
]
}, void 0, true),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "relative",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5 mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
background: `${diffMeta.color}22`,
color: diffMeta.color,
border: `1px solid ${diffMeta.color}55`
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]),
children: diffMeta.icon
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 400,
columnNumber: 15
}, this),
diffMeta.label
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 396,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded bg-white/5 text-muted-foreground border border-white/10",
children: [
typeMeta.icon,
" ",
typeMeta.label
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 403,
columnNumber: 13
}, this),
isCompleted && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded bg-emerald-500/20 text-emerald-300 border border-emerald-500/40 flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 408,
columnNumber: 17
}, this),
" 已完成"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 407,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 395,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", {
style: {
color: diffMeta.color,
textShadow: `0 0 10px ${diffMeta.glow}`
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-sm font-semibold mb-1",
children: challenge.title
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 414,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[11px] text-muted-foreground/80 leading-relaxed mb-2.5",
children: challenge.desc
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 417,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between mb-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/70",
children: "进度"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 424,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: diffMeta.color
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[11px] font-mono font-semibold",
children: [
Math.min(progress.progress, challenge.goal),
" / ",
challenge.goal,
" ",
typeMeta.unit
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 425,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 423,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Progress"], {
value: pct,
className: "h-2 bg-black/40",
style: {
["--progress-color"]: diffMeta.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 429,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 422,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-2 text-[10px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/60",
children: "奖励:"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 441,
columnNumber: 15
}, this),
challenge.rewardInsight > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-amber-300 font-mono",
children: [
"+",
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(challenge.rewardInsight),
"洞见"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 443,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-fuchsia-300 font-mono",
children: [
"+",
challenge.rewardContact.toFixed(1),
"接触"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 445,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 440,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
onClick: handleClaimDaily,
disabled: !canClaim,
size: "sm",
className: "h-7 px-3 text-[11px] border-0",
style: {
background: canClaim ? `linear-gradient(90deg, ${diffMeta.color}, ${diffMeta.color}cc)` : `${diffMeta.color}1a`,
color: canClaim ? "#022c22" : `${diffMeta.color}99`
},
children: isClaimed ? "已领取" : canClaim ? "领取奖励" : isCompleted ? "已领取" : "进行中…"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 447,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 439,
columnNumber: 11
}, this),
isCompleted && progress.durationSec > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mt-1.5 text-[10px] text-muted-foreground/50 text-center",
children: [
"完成用时 ",
Math.floor(progress.durationSec / 60),
"分",
progress.durationSec % 60,
"秒"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 465,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 393,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 365,
columnNumber: 7
}, this),
(()=>{
// 距离时段结束 < 30 分钟时进入"紧急"状态(rose 脉冲)
const msLeft = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["msUntilNextTimedSlot"])(new Date(now));
const urgent = msLeft < 30 * 60 * 1000 && !tCompleted;
const glowAnim = tCompleted ? "none" : urgent ? "timed-urgent 1.5s ease-in-out infinite" : "timed-glow 3s ease-in-out infinite";
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
borderColor: urgent ? "rgba(244,63,94,0.5)" : "rgba(251,191,36,0.4)",
background: urgent ? "linear-gradient(135deg, rgba(244,63,94,0.12), rgba(251,191,36,0.08), rgba(0,0,0,0.45))" : "linear-gradient(135deg, rgba(251,191,36,0.14), rgba(0,0,0,0.45))",
animation: glowAnim
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "relative rounded-xl border p-3 overflow-hidden",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$hourglass$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Hourglass$3e$__["Hourglass"], {
className: `h-3.5 w-3.5 ${urgent ? "text-rose-400" : "text-amber-400"}`
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 496,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `text-xs font-semibold ${urgent ? "text-rose-200" : "text-amber-200"}`,
children: "限时挑战 · TIMED"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 497,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 495,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1 text-[9px] text-muted-foreground/70",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono text-amber-300/70",
children: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getTimedSlotKey"])().split("_").slice(1).join(" ")
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 502,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__["Clock"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 505,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `font-mono ${urgent ? "text-rose-300" : "text-amber-300/90"}`,
children: timedCountdown
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 506,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 501,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 494,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5 mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
background: `${tDiffMeta.color}22`,
color: tDiffMeta.color,
border: `1px solid ${tDiffMeta.color}55`
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]),
children: tDiffMeta.icon
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 518,
columnNumber: 17
}, this),
tDiffMeta.label
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 514,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded bg-white/5 text-muted-foreground border border-white/10",
children: [
tTypeMeta.icon,
" ",
tTypeMeta.label
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 521,
columnNumber: 15
}, this),
tCompleted && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded bg-emerald-500/20 text-emerald-300 border border-emerald-500/40 flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 526,
columnNumber: 19
}, this),
" 已完成"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 525,
columnNumber: 17
}, this),
urgent && !tCompleted && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded bg-rose-500/20 text-rose-300 border border-rose-500/40 flex items-center gap-1 animate-pulse",
children: "即将结束"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 530,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 513,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", {
style: {
color: tDiffMeta.color,
textShadow: `0 0 10px ${tDiffMeta.glow}`
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-sm font-semibold mb-1",
children: timedChallenge.title
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 537,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/80 leading-relaxed mb-2",
children: timedChallenge.desc
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 543,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between mb-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/70",
children: "进度"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 550,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: tDiffMeta.color
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[11px] font-mono font-semibold",
children: [
Math.min(timedProgress.progress, timedChallenge.goal),
" / ",
timedChallenge.goal,
" ",
tTypeMeta.unit
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 551,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 549,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Progress"], {
value: tPct,
className: "h-2 bg-black/40",
style: {
["--progress-color"]: urgent ? "#f43f5e" : tDiffMeta.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 555,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 548,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5 text-[10px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/60",
children: "奖励:"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 567,
columnNumber: 17
}, this),
timedChallenge.rewardInsight > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-amber-300 font-mono",
children: [
"+",
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(timedChallenge.rewardInsight),
"洞见"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 569,
columnNumber: 19
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-fuchsia-300 font-mono",
children: [
"+",
timedChallenge.rewardContact.toFixed(1),
"接触"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 573,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 566,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
onClick: handleClaimTimed,
disabled: !tCanClaim,
size: "sm",
className: "h-7 px-3 text-[11px] border-0",
style: {
background: tCanClaim ? `linear-gradient(90deg, #34d399, #34d399cc)` : "rgba(251,191,36,0.10)",
color: tCanClaim ? "#022c22" : "rgba(251,191,36,0.55)"
},
children: tClaimed ? "已领取" : tCanClaim ? "领取奖励" : tCompleted ? "已领取" : "进行中…"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 577,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 565,
columnNumber: 13
}, this),
tCompleted && timedProgress.durationSec > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mt-1.5 text-[10px] text-muted-foreground/50 text-center",
children: [
"完成用时 ",
Math.floor(timedProgress.durationSec / 60),
"分",
timedProgress.durationSec % 60,
"秒"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 602,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 483,
columnNumber: 11
}, this);
})(),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "grid grid-cols-1 lg:grid-cols-2 gap-2.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
borderColor: "rgba(232,121,249,0.4)",
background: `linear-gradient(135deg, rgba(232,121,249,0.12), rgba(0,0,0,0.45))`,
animation: wCompleted ? "none" : "weekly-glow 3.5s ease-in-out infinite"
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "relative rounded-xl border p-3 overflow-hidden",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$zap$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Zap$3e$__["Zap"], {
className: "h-3.5 w-3.5 text-fuchsia-400"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 624,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-xs font-semibold text-fuchsia-200",
children: "周挑战 · WEEKLY"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 625,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 623,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1 text-[9px] text-muted-foreground/70",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono text-fuchsia-300/80",
children: weeklyChallenge.weekKey
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 630,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__["Clock"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 633,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono text-fuchsia-300/90",
children: weekCountdown
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 634,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 629,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 622,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5 mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
background: `${wDiffMeta.color}22`,
color: wDiffMeta.color,
border: `1px solid ${wDiffMeta.color}55`
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]),
children: wDiffMeta.icon
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 644,
columnNumber: 15
}, this),
wDiffMeta.label
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 640,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded bg-white/5 text-muted-foreground border border-white/10",
children: [
wTypeMeta.icon,
" ",
wTypeMeta.label
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 647,
columnNumber: 13
}, this),
wCompleted && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono px-1.5 py-0.5 rounded bg-emerald-500/20 text-emerald-300 border border-emerald-500/40 flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 652,
columnNumber: 17
}, this),
" 已完成"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 651,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 639,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h4", {
style: {
color: wDiffMeta.color,
textShadow: `0 0 10px ${wDiffMeta.glow}`
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-sm font-semibold mb-1",
children: weeklyChallenge.title
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 658,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/80 leading-relaxed mb-2",
children: weeklyChallenge.desc
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 664,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between mb-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/70",
children: "进度"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 671,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: wDiffMeta.color
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[11px] font-mono font-semibold",
children: [
Math.min(weeklyProgress.progress, weeklyChallenge.goal),
" / ",
weeklyChallenge.goal,
" ",
wTypeMeta.unit
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 672,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 670,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Progress"], {
value: wPct,
className: "h-2 bg-black/40",
style: {
["--progress-color"]: wDiffMeta.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 676,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 669,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5 text-[10px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/60",
children: "奖励:"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 688,
columnNumber: 15
}, this),
weeklyChallenge.rewardInsight > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-amber-300 font-mono",
children: [
"+",
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(weeklyChallenge.rewardInsight),
"洞见"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 690,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-fuchsia-300 font-mono",
children: [
"+",
weeklyChallenge.rewardContact.toFixed(1),
"接触"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 694,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 687,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
onClick: handleClaimWeekly,
disabled: !wCanClaim,
size: "sm",
className: "h-7 px-3 text-[11px] border-0",
style: {
background: wCanClaim ? `linear-gradient(90deg, #34d399, #34d399cc)` : "rgba(232,121,249,0.10)",
color: wCanClaim ? "#022c22" : "rgba(232,121,249,0.55)"
},
children: wClaimed ? "已领取" : wCanClaim ? "领取奖励" : wCompleted ? "已领取" : "进行中…"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 698,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 686,
columnNumber: 11
}, this),
wCompleted && weeklyProgress.durationSec > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mt-1.5 text-[10px] text-muted-foreground/50 text-center",
children: [
"完成用时 ",
Math.floor(weeklyProgress.durationSec / 60),
"分",
weeklyProgress.durationSec % 60,
"秒"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 723,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 613,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
borderColor: "rgba(251,191,36,0.35)",
background: `linear-gradient(135deg, rgba(251,191,36,0.10), rgba(251,113,133,0.10), rgba(0,0,0,0.4))`
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "relative rounded-xl border p-3 overflow-hidden",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$link$2d$2$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Link2$3e$__["Link2"], {
className: "h-3.5 w-3.5 text-amber-400"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 740,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-xs font-semibold text-amber-200",
children: "信标链 · CHAIN"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 741,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 739,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-baseline gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$flame$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Flame$3e$__["Flame"], {
className: "h-3 w-3 text-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 746,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/60",
children: "连续"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 747,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "chain-streak-text text-2xl font-bold font-mono leading-none",
children: chainState.currentStreak
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 748,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/60",
children: "天"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 751,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 745,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 738,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mb-2 flex items-center justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/70",
children: completedToday ? "今日已贡献" : "今日尚未完成日挑战"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 757,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `text-[10px] font-mono px-1.5 py-0.5 rounded border ${completedToday ? "bg-emerald-500/15 text-emerald-300 border-emerald-500/30" : "bg-white/5 text-muted-foreground/70 border-white/10"}`,
children: completedToday ? "✓ 已记录" : "○ 待完成"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 762,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 756,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between mb-2 relative",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "absolute top-6 left-[12.5%] right-[12.5%] h-[2px] bg-white/10"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 776,
columnNumber: 13
}, this),
(()=>{
// 节点圆心水平位置(百分比)
const MILESTONE_POS = {
0: 12.5,
3: 12.5,
7: 37.5,
14: 62.5,
30: 87.5
};
const prevPos = MILESTONE_POS[chainProgress.prev] ?? 12.5;
const nextPos = chainProgress.next !== null ? MILESTONE_POS[chainProgress.next] ?? 87.5 : 87.5;
const pct = chainProgress.progressPct / 100;
const activeEndPos = prevPos + (nextPos - prevPos) * pct;
const widthPct = Math.max(0, activeEndPos - 12.5);
if (widthPct <= 0) return null;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
left: "12.5%",
width: `${widthPct}%`,
background: "linear-gradient(90deg, #fbbf24, #fb7185)",
boxShadow: "0 0 8px rgba(251,113,133,0.5)"
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "absolute top-6 h-[2px]"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 798,
columnNumber: 17
}, this);
})(),
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_CHAIN_MILESTONES"].map((m)=>{
const reward = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_CHAIN_REWARDS"].find((r)=>r.milestone === m);
const claimed = chainState.milestonesClaimed.includes(m);
const reachable = chainState.currentStreak >= m && !claimed;
const inProgress = chainState.currentStreak > 0 && nextMilestone === m;
// 节点配色
let nodeBg = "rgba(255,255,255,0.05)";
let nodeBorder = "rgba(255,255,255,0.15)";
let textColor = "rgba(255,255,255,0.4)";
if (claimed) {
nodeBg = "rgba(52,211,153,0.25)";
nodeBorder = "#34d399";
textColor = "#34d399";
} else if (reachable) {
nodeBg = "rgba(251,113,133,0.20)";
nodeBorder = "#fb7185";
textColor = "#fb7185";
} else if (inProgress) {
nodeBg = "rgba(251,191,36,0.20)";
nodeBorder = "#fbbf24";
textColor = "#fbbf24";
}
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex flex-col items-center gap-1 z-10 flex-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: nodeBg,
borderColor: nodeBorder,
color: textColor
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `w-12 h-12 rounded-full flex items-center justify-center font-mono font-bold text-sm border-2 ${reachable ? "chain-milestone-reachable" : ""}`,
children: claimed ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-4 w-4"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 851,
columnNumber: 23
}, this) : m
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 840,
columnNumber: 19
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: textColor
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[9px] text-center leading-tight",
children: reward?.label
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 856,
columnNumber: 19
}, this),
claimed ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[9px] text-emerald-400/80 font-mono",
children: "已领"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 863,
columnNumber: 21
}, this) : reachable ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
onClick: ()=>handleClaimChain(m),
size: "sm",
className: "h-5 px-2 text-[9px] py-0 border-0",
style: {
background: "linear-gradient(90deg, #fb7185, #f43f5e)",
color: "#1c0608"
},
children: "领取"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 867,
columnNumber: 21
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[9px] text-muted-foreground/40 font-mono",
children: [
"+",
reward?.rewardInsight,
"洞"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 880,
columnNumber: 21
}, this)
]
}, m, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 836,
columnNumber: 17
}, this);
})
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 774,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between mb-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] text-muted-foreground/70",
children: chainProgress.next === null ? "已通关全部里程碑" : `下一目标:${chainProgress.next} 天`
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 892,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[10px] font-mono text-amber-300",
children: [
chainProgress.current,
chainProgress.next !== null && ` / ${chainProgress.next}`,
" 天"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 897,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 891,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$progress$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Progress"], {
value: chainProgress.progressPct,
className: "h-1.5 bg-black/40",
style: {
["--progress-color"]: "#fbbf24"
}
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 902,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 890,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between gap-2 text-[10px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/60",
children: "最长"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 914,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono text-amber-300",
children: [
chainState.longestStreak,
"天"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 915,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 913,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/60",
children: "累计"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 920,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono text-rose-300",
children: [
chainState.totalCompletions,
"次"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 921,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 919,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/60",
children: "续命"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 926,
columnNumber: 15
}, this),
chainState.graceUsed >= 1 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono text-rose-400/80",
children: "已用"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 928,
columnNumber: 17
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono text-emerald-400/80",
children: "可用"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 930,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 925,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 912,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 730,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 611,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "rounded-xl border border-white/10 bg-black/30 p-2.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-between gap-2 mb-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trophy$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trophy$3e$__["Trophy"], {
className: "h-3.5 w-3.5 text-amber-400"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 942,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-xs font-semibold",
children: "深空排行榜"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 943,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 941,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-0.5 p-0.5 rounded-lg bg-black/40 border border-white/10",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
type: "button",
onClick: ()=>setLbTab("local"),
"aria-pressed": lbTab === "local",
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `flex items-center gap-1 px-2 py-0.5 rounded-md text-[10px] font-mono transition-colors ${lbTab === "local" ? "bg-amber-500/25 text-amber-300 border border-amber-500/40" : "text-muted-foreground/60 hover:text-muted-foreground border border-transparent"}`,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trophy$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trophy$3e$__["Trophy"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 958,
columnNumber: 17
}, this),
"本地"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 948,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
type: "button",
onClick: ()=>setLbTab("global"),
"aria-pressed": lbTab === "global",
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `flex items-center gap-1 px-2 py-0.5 rounded-md text-[10px] font-mono transition-colors ${lbTab === "global" ? "bg-emerald-500/25 text-emerald-300 border border-emerald-500/40" : "text-muted-foreground/60 hover:text-muted-foreground border border-transparent"}`,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$globe$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Globe$3e$__["Globe"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 971,
columnNumber: 17
}, this),
"全球"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 961,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 947,
columnNumber: 13
}, this),
lbTab === "global" && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
type: "button",
onClick: ()=>void refreshCloudLeaderboard(),
disabled: cloudLoading,
"aria-label": "刷新全球榜",
title: "刷新全球榜",
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "p-1 rounded-md text-muted-foreground/70 hover:text-emerald-300 hover:bg-emerald-500/10 disabled:opacity-40 disabled:cursor-not-allowed transition-colors",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$refresh$2d$cw$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__RefreshCw$3e$__["RefreshCw"], {
className: `h-3 w-3 ${cloudLoading ? "animate-spin" : ""}`
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 985,
columnNumber: 17
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 977,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 945,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 940,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "mb-1.5 text-[10px] text-muted-foreground/50 flex items-center gap-2",
children: lbTab === "local" ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]),
children: [
"本机 Top ",
leaderboard.length || 0,
" · 离线可用"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 996,
columnNumber: 13
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]),
children: [
"全球 Top ",
cloudEntries.length || 0
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 999,
columnNumber: 15
}, this),
cloudFetched && !cloudLoading && cloudEntries.length > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-emerald-400/60",
children: "· 已同步"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1001,
columnNumber: 17
}, this),
cloudLoading && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-amber-400/70 flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Loader2$3e$__["Loader2"], {
className: "h-2.5 w-2.5 animate-spin"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1005,
columnNumber: 19
}, this),
"同步中…"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1004,
columnNumber: 17
}, this)
]
}, void 0, true)
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 994,
columnNumber: 9
}, this),
lbTab === "local" && (leaderboard.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-center py-4 text-[11px] text-muted-foreground/40",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trophy$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trophy$3e$__["Trophy"], {
className: "h-6 w-6 mx-auto mb-1 opacity-30"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1017,
columnNumber: 15
}, this),
"尚无记录。完成限时、每日或本周信标即可登榜。"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1016,
columnNumber: 13
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "space-y-0.5 max-h-[200px] overflow-y-auto echo-scroll",
children: leaderboard.map((entry, i)=>{
const rb = rankBadge(i);
const eDiff = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_DIFFICULTY"][entry.difficulty];
const eType = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_TYPE_META"][entry.challenge];
const isMine = entry.dateKey === (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getTodayKey"])() || entry.dateKey === (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getWeekKey"])() || entry.dateKey === (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getTimedSlotKey"])();
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `flex items-center gap-2 px-2 py-1 rounded-lg text-[11px] ${entry.isWeekly ? "bg-fuchsia-500/10 border border-fuchsia-500/20" : entry.isTimed ? "bg-amber-500/10 border border-amber-500/20" : isMine ? "bg-fuchsia-500/10 border border-fuchsia-500/20" : "hover:bg-white/5"}`,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "w-6 flex items-center justify-center",
children: rb ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(rb.icon, {
className: "h-3.5 w-3.5",
style: {
color: rb.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1045,
columnNumber: 25
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/50 font-mono",
children: i + 1
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1047,
columnNumber: 25
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1043,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1 flex-1 min-w-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: eDiff.color
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono",
children: eDiff.icon
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1051,
columnNumber: 23
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/80 truncate",
children: eType.label
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1052,
columnNumber: 23
}, this),
entry.isWeekly && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[9px] font-mono px-1 rounded bg-fuchsia-500/20 text-fuchsia-300 border border-fuchsia-500/40",
children: "WEEK"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1054,
columnNumber: 25
}, this),
entry.isTimed && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[9px] font-mono px-1 rounded bg-amber-500/20 text-amber-300 border border-amber-500/40",
children: "TIMED"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1059,
columnNumber: 25
}, this),
entry.progress >= 1 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-emerald-400/70",
children: "✓"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1063,
columnNumber: 47
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1050,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/50 font-mono text-[10px] w-16 text-right",
children: [
Math.floor(entry.durationSec / 60),
"m",
entry.durationSec % 60,
"s"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1065,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: eDiff.color
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono font-semibold w-12 text-right",
children: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(entry.score)
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1068,
columnNumber: 21
}, this)
]
}, `local-${entry.timestamp}-${i}`, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1031,
columnNumber: 19
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1021,
columnNumber: 13
}, this)),
lbTab === "global" && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: cloudLoading && cloudEntries.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-center py-4 text-[11px] text-muted-foreground/60 flex items-center justify-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$loader$2d$circle$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Loader2$3e$__["Loader2"], {
className: "h-3.5 w-3.5 animate-spin text-emerald-400"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1082,
columnNumber: 17
}, this),
"正在拉取全球榜…"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1081,
columnNumber: 15
}, this) : cloudEntries.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-center py-4 text-[11px] text-muted-foreground/40",
children: cloudError ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$wifi$2d$off$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__WifiOff$3e$__["WifiOff"], {
className: "h-6 w-6 mx-auto mb-1 opacity-40 text-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1089,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-rose-300/70",
children: cloudError
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1090,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
type: "button",
onClick: ()=>void refreshCloudLeaderboard(),
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "block mx-auto mt-2 text-[10px] text-emerald-400/80 hover:text-emerald-300 underline-offset-2 hover:underline",
children: "重试"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1091,
columnNumber: 21
}, this)
]
}, void 0, true) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$globe$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Globe$3e$__["Globe"], {
className: "h-6 w-6 mx-auto mb-1 opacity-30 text-emerald-400"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1101,
columnNumber: 21
}, this),
"尚无全球记录。完成挑战并领取即可登顶全球榜!"
]
}, void 0, true)
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1086,
columnNumber: 15
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "space-y-0.5 max-h-[200px] overflow-y-auto echo-scroll",
children: cloudEntries.map((entry, i)=>{
const rb = rankBadge(i);
const eDiff = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_DIFFICULTY"][entry.difficulty] ?? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_DIFFICULTY"].routine;
const eType = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_TYPE_META"][entry.challenge] ?? {
label: entry.challenge,
icon: "·",
unit: ""
};
// 高亮"我的"记录:通过 timestamp 匹配本机最后一次成功提交
const isMine = mySubmitTs > 0 && entry.timestamp === mySubmitTs;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `flex items-center gap-2 px-2 py-1 rounded-lg text-[11px] ${isMine ? "bg-emerald-500/15 border border-emerald-500/40 shadow-[0_0_12px_rgba(52,211,153,0.25)]" : entry.isWeekly ? "bg-fuchsia-500/10 border border-fuchsia-500/20" : entry.isTimed ? "bg-amber-500/10 border border-amber-500/20" : "hover:bg-white/5"}`,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "w-6 flex items-center justify-center",
children: rb ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(rb.icon, {
className: "h-3.5 w-3.5",
style: {
color: rb.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1129,
columnNumber: 27
}, this) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + `font-mono ${isMine ? "text-emerald-300 font-bold" : "text-muted-foreground/50"}`,
children: i + 1
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1131,
columnNumber: 27
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1127,
columnNumber: 23
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1 flex-1 min-w-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: eDiff.color
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono",
children: eDiff.icon
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1137,
columnNumber: 25
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/80 truncate",
children: eType.label
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1138,
columnNumber: 25
}, this),
entry.isWeekly && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[9px] font-mono px-1 rounded bg-fuchsia-500/20 text-fuchsia-300 border border-fuchsia-500/40",
children: "WEEK"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1140,
columnNumber: 27
}, this),
entry.isTimed && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[9px] font-mono px-1 rounded bg-amber-500/20 text-amber-300 border border-amber-500/40",
children: "TIMED"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1145,
columnNumber: 27
}, this),
isMine && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-[9px] font-mono px-1 rounded bg-emerald-500/25 text-emerald-200 border border-emerald-500/50",
children: "YOU"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1150,
columnNumber: 27
}, this),
entry.progress >= 1 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-emerald-400/70",
children: "✓"
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1154,
columnNumber: 49
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1136,
columnNumber: 23
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "text-muted-foreground/50 font-mono text-[10px] w-16 text-right",
children: [
Math.floor(entry.durationSec / 60),
"m",
entry.durationSec % 60,
"s"
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1156,
columnNumber: 23
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: isMine ? "#34d399" : eDiff.color
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "font-mono font-semibold w-12 text-right",
children: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["formatNum"])(entry.score)
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1159,
columnNumber: 23
}, this)
]
}, `global-${entry.timestamp}-${i}`, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1115,
columnNumber: 21
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1107,
columnNumber: 15
}, this)
}, void 0, false)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 938,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center justify-center gap-3 text-[9px] text-muted-foreground/50",
children: DIFFICULTY_ORDER.map((d)=>{
const m = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$beacon$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["BEACON_DIFFICULTY"][d];
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]) + " " + "flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: m.color
},
className: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"].dynamic([
[
"12f5fcaad97b9273",
[
diffMeta.glow,
diffMeta.glow,
diffMeta.glow,
diffMeta.glow
]
]
]),
children: m.icon
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1177,
columnNumber: 15
}, this),
m.label,
" ×",
m.mult
]
}, d, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1176,
columnNumber: 13
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 1172,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/BeaconPanel.tsx",
lineNumber: 305,
columnNumber: 5
}, this);
}
_s(BeaconPanel, "tj/kCJ/sKhs7ZFVY6SSfLnZO9cY=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
];
});
_c = BeaconPanel;
var _c;
__turbopack_context__.k.register(_c, "BeaconPanel");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/TutorialOverlay.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"TutorialOverlay",
()=>TutorialOverlay
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 新手教程覆盖层
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/tutorial.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/components/ui/button.tsx [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$left$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronLeft$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/chevron-left.js [app-client] (ecmascript) <export default as ChevronLeft>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronRight$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/chevron-right.js [app-client] (ecmascript) <export default as ChevronRight>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/x.js [app-client] (ecmascript) <export default as X>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
function TutorialOverlay() {
_s();
const [open, setOpen] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
const [stepIdx, setStepIdx] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(0);
const [targetRect, setTargetRect] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const [actionDone, setActionDone] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(false);
const rafRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null);
// 首次访问自动打开
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"TutorialOverlay.useEffect": ()=>{
if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["hasSeenTutorial"])()) {
// 等待游戏 mount
const t = setTimeout({
"TutorialOverlay.useEffect.t": ()=>setOpen(true)
}["TutorialOverlay.useEffect.t"], 600);
return ({
"TutorialOverlay.useEffect": ()=>clearTimeout(t)
})["TutorialOverlay.useEffect"];
}
}
}["TutorialOverlay.useEffect"], []);
// 监听「重新查看教程」事件
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"TutorialOverlay.useEffect": ()=>{
const handler = {
"TutorialOverlay.useEffect.handler": ()=>{
setStepIdx(0);
setActionDone(false);
setOpen(true);
}
}["TutorialOverlay.useEffect.handler"];
window.addEventListener("echo-nexus-tutorial-restart", handler);
return ({
"TutorialOverlay.useEffect": ()=>window.removeEventListener("echo-nexus-tutorial-restart", handler)
})["TutorialOverlay.useEffect"];
}
}["TutorialOverlay.useEffect"], []);
// 监听预期动作(用现有 store 状态推断,避免改 schema
const crystals = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"TutorialOverlay.useGameStore[crystals]": (s)=>s.crystals
}["TutorialOverlay.useGameStore[crystals]"]);
const pulsePower = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"TutorialOverlay.useGameStore[pulsePower]": (s)=>s.pulsePower
}["TutorialOverlay.useGameStore[pulsePower]"]);
const ownedTech = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"TutorialOverlay.useGameStore[ownedTech]": (s)=>s.tech
}["TutorialOverlay.useGameStore[ownedTech]"]);
const activePuzzle = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"TutorialOverlay.useGameStore[activePuzzle]": (s)=>s.activePuzzle
}["TutorialOverlay.useGameStore[activePuzzle]"]);
const hasActiveExpedition = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"TutorialOverlay.useGameStore[hasActiveExpedition]": (s)=>!!s.activeExpedition && !s.activeExpedition.finished
}["TutorialOverlay.useGameStore[hasActiveExpedition]"]);
// 记录进入 pulse 步骤时的晶体基线
const pulseBaseRef = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useRef"])(null);
// 动作完成检测:用 rAF 异步轮询,避免 effect 中同步 setState
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"TutorialOverlay.useEffect": ()=>{
if (!open) return;
const step = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TUTORIAL_STEPS"][stepIdx];
if (!step?.expectAction) {
return;
}
let raf2 = 0;
const check = {
"TutorialOverlay.useEffect.check": ()=>{
const s = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"].getState();
let done = false;
if (step.expectAction === "pulse") {
if (pulseBaseRef.current === null) pulseBaseRef.current = s.crystals;
done = s.crystals >= (pulseBaseRef.current ?? 0) + Math.max(0.5, s.pulsePower * 0.5);
} else if (step.expectAction === "decode-start") {
done = !!s.activePuzzle;
} else if (step.expectAction === "tech-buy") {
done = Object.values(s.tech).some({
"TutorialOverlay.useEffect.check": (v)=>v > 0
}["TutorialOverlay.useEffect.check"]);
} else if (step.expectAction === "expedition-start") {
done = !!s.activeExpedition && !s.activeExpedition.finished;
}
setActionDone({
"TutorialOverlay.useEffect.check": (prev)=>prev !== done ? done : prev
}["TutorialOverlay.useEffect.check"]);
raf2 = requestAnimationFrame(check);
}
}["TutorialOverlay.useEffect.check"];
raf2 = requestAnimationFrame(check);
return ({
"TutorialOverlay.useEffect": ()=>cancelAnimationFrame(raf2)
})["TutorialOverlay.useEffect"];
}
}["TutorialOverlay.useEffect"], [
open,
stepIdx
]);
// 跟踪目标元素位置
const updateTargetRect = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"TutorialOverlay.useCallback[updateTargetRect]": ()=>{
const step = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TUTORIAL_STEPS"][stepIdx];
if (!step?.target) {
setTargetRect(null);
return;
}
const el = document.querySelector(`[data-tut="${step.target}"]`);
if (!el) {
setTargetRect(null);
return;
}
const r = el.getBoundingClientRect();
setTargetRect({
left: r.left,
top: r.top,
width: r.width,
height: r.height
});
}
}["TutorialOverlay.useCallback[updateTargetRect]"], [
stepIdx
]);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"TutorialOverlay.useEffect": ()=>{
if (!open) return;
// 首帧不直接 setState,统一交给 rAF 循环检测
const loop = {
"TutorialOverlay.useEffect.loop": ()=>{
updateTargetRect();
rafRef.current = requestAnimationFrame(loop);
}
}["TutorialOverlay.useEffect.loop"];
rafRef.current = requestAnimationFrame(loop);
return ({
"TutorialOverlay.useEffect": ()=>{
if (rafRef.current) cancelAnimationFrame(rafRef.current);
}
})["TutorialOverlay.useEffect"];
}
}["TutorialOverlay.useEffect"], [
open,
stepIdx,
updateTargetRect
]);
const close = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"TutorialOverlay.useCallback[close]": ()=>{
setOpen(false);
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["markTutorialSeen"])();
}
}["TutorialOverlay.useCallback[close]"], []);
const next = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"TutorialOverlay.useCallback[next]": ()=>{
if (stepIdx >= __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TUTORIAL_STEPS"].length - 1) {
close();
return;
}
setStepIdx({
"TutorialOverlay.useCallback[next]": (i)=>i + 1
}["TutorialOverlay.useCallback[next]"]);
setActionDone(false);
}
}["TutorialOverlay.useCallback[next]"], [
stepIdx,
close
]);
const prev = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useCallback"])({
"TutorialOverlay.useCallback[prev]": ()=>{
if (stepIdx <= 0) return;
setStepIdx({
"TutorialOverlay.useCallback[prev]": (i)=>i - 1
}["TutorialOverlay.useCallback[prev]"]);
setActionDone(false);
}
}["TutorialOverlay.useCallback[prev]"], [
stepIdx
]);
if (!open) return null;
const step = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TUTORIAL_STEPS"][stepIdx];
const isLast = stepIdx >= __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TUTORIAL_STEPS"].length - 1;
// 计算提示气泡位置
const placement = step.placement ?? "auto";
let tooltipStyle = {};
if (targetRect) {
const pad = 16;
if (placement === "right") {
tooltipStyle = {
left: targetRect.left + targetRect.width + pad,
top: targetRect.top + targetRect.height / 2,
transform: "translateY(-50%)"
};
} else if (placement === "left") {
tooltipStyle = {
left: Math.max(16, targetRect.left - 360 - pad),
top: targetRect.top + targetRect.height / 2,
transform: "translateY(-50%)",
maxWidth: 340
};
} else if (placement === "top") {
tooltipStyle = {
left: Math.max(16, Math.min(targetRect.left, window.innerWidth - 360 - 16)),
top: Math.max(16, targetRect.top - 220),
maxWidth: 340
};
} else {
// bottom / auto
tooltipStyle = {
left: Math.max(16, Math.min(window.innerWidth / 2 - 170, window.innerWidth - 360 - 16)),
top: Math.min(window.innerHeight - 260, (targetRect?.bottom ?? window.innerHeight / 2) + pad),
maxWidth: 340
};
}
} else {
// 无目标 → 居中
tooltipStyle = {
left: "50%",
top: "50%",
transform: "translate(-50%, -50%)",
maxWidth: 440
};
}
// 聚光灯遮罩:用 4 块 div 挖洞
const renderMask = ()=>{
if (!targetRect) {
// 全屏半透明
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed inset-0 bg-black/70 z-[80] pointer-events-auto"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 187,
columnNumber: 14
}, this);
}
const { left, top, width, height } = targetRect;
const pad = 6;
const l = left - pad;
const t = top - pad;
const w = width + pad * 2;
const h = height + pad * 2;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed bg-black/70 z-[80] pointer-events-auto",
style: {
left: 0,
top: 0,
right: 0,
height: Math.max(0, t)
}
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 198,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed bg-black/70 z-[80] pointer-events-auto",
style: {
left: 0,
top: t + h,
right: 0,
bottom: 0
}
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 200,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed bg-black/70 z-[80] pointer-events-auto",
style: {
left: 0,
top: t,
width: Math.max(0, l),
height: h
}
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 202,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed bg-black/70 z-[80] pointer-events-auto",
style: {
left: l + w,
top: t,
right: 0,
height: h
}
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 204,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed z-[81] pointer-events-none rounded-lg",
style: {
left: l,
top: t,
width: w,
height: h,
boxShadow: `0 0 0 2px rgba(232,121,249,0.9), 0 0 24px 4px rgba(232,121,249,0.5)`,
animation: "tut-pulse 1.6s ease-in-out infinite"
}
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 206,
columnNumber: 9
}, this)
]
}, void 0, true);
};
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed inset-0 z-[79]",
children: [
renderMask(),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "fixed z-[82] w-[340px] sm:w-[360px] max-w-[calc(100vw-32px)]",
style: tooltipStyle,
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "relative rounded-2xl border border-fuchsia-400/40 bg-gradient-to-br from-[#1a0a2e]/95 to-[#0a0a1e]/95 backdrop-blur-xl shadow-2xl shadow-fuchsia-500/20 overflow-hidden",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "h-1 w-full bg-gradient-to-r from-emerald-400 via-fuchsia-500 to-rose-400"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 233,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: close,
className: "absolute top-2 right-2 h-7 w-7 rounded-full flex items-center justify-center text-muted-foreground hover:text-foreground hover:bg-white/10 transition z-10",
"aria-label": "关闭教程",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$x$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__X$3e$__["X"], {
className: "h-3.5 w-3.5"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 240,
columnNumber: 13
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 235,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "p-4 pt-3.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-1.5 mb-2.5",
children: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TUTORIAL_STEPS"].map((s, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: `h-1 rounded-full transition-all ${i === stepIdx ? "w-6 bg-fuchsia-400" : i < stepIdx ? "w-3 bg-fuchsia-400/50" : "w-3 bg-white/15"}`
}, s.id, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 247,
columnNumber: 17
}, this))
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 245,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "text-sm font-bold text-fuchsia-100 mb-1.5 flex items-center gap-1.5 pr-6",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-3.5 w-3.5 text-fuchsia-300 shrink-0"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 261,
columnNumber: 15
}, this),
step.title
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 260,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[12.5px] text-muted-foreground leading-relaxed whitespace-pre-line",
children: step.body
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 264,
columnNumber: 13
}, this),
step.expectAction && !actionDone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "mt-3 px-2.5 py-1.5 rounded-lg bg-amber-500/10 border border-amber-400/30 text-[11px] text-amber-200 flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "h-1.5 w-1.5 rounded-full bg-amber-400 animate-pulse"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 271,
columnNumber: 17
}, this),
"完成动作后自动进入下一步,或点跳过"
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 270,
columnNumber: 15
}, this),
step.expectAction && actionDone && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "mt-3 px-2.5 py-1.5 rounded-lg bg-emerald-500/10 border border-emerald-400/30 text-[11px] text-emerald-200 flex items-center gap-1.5",
children: "✓ 已检测到动作"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 276,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-2 mt-4",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
size: "sm",
variant: "ghost",
onClick: prev,
disabled: stepIdx === 0,
className: "h-7 px-2 text-[11px] text-muted-foreground hover:text-foreground",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$left$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronLeft$3e$__["ChevronLeft"], {
className: "h-3.5 w-3.5"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 290,
columnNumber: 17
}, this),
"上一步"
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 283,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "ml-auto flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
size: "sm",
variant: "ghost",
onClick: close,
className: "h-7 px-2 text-[11px] text-muted-foreground hover:text-foreground",
children: "跳过"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 294,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$components$2f$ui$2f$button$2e$tsx__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Button"], {
size: "sm",
onClick: next,
className: "h-7 px-3 text-[11px] bg-fuchsia-500 hover:bg-fuchsia-600 text-white border-fuchsia-400/50",
children: [
isLast ? "完成" : "下一步",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$right$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronRight$3e$__["ChevronRight"], {
className: "h-3.5 w-3.5 ml-0.5"
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 308,
columnNumber: 19
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 302,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 293,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 282,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "text-[10px] text-muted-foreground/60 text-center mt-2",
children: [
stepIdx + 1,
" / ",
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$tutorial$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TUTORIAL_STEPS"].length
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 312,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 243,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 231,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 227,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/TutorialOverlay.tsx",
lineNumber: 222,
columnNumber: 5
}, this);
}
_s(TutorialOverlay, "fP+LbeeOStt+TK/VOII60jUus28=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = TutorialOverlay;
var _c;
__turbopack_context__.k.register(_c, "TutorialOverlay");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/AttributesPanel.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"AttributesPanel",
()=>AttributesPanel
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 角色属性面板(v0.7 P1
//
// 无人机驾驶员四维属性可视化:
// • 探索力 emerald / 智慧 fuchsia / 勇气 amber / 灵感 rose
// • 显示数值(0-100)、加成百分比、经验进度条、等级 badge
// • 待分配属性点时高亮 + 闪烁提示,「+」按钮可分配 1 点
// • 顶部待分配点数提示;底部总览
// • 小屏 2×2 网格,大屏 1×4 横排
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/attributes.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$compass$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Compass$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/compass.js [app-client] (ecmascript) <export default as Compass>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$brain$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Brain$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/brain.js [app-client] (ecmascript) <export default as Brain>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$swords$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Swords$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/swords.js [app-client] (ecmascript) <export default as Swords>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/plus.js [app-client] (ecmascript) <export default as Plus>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$up$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronUp$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/chevron-up.js [app-client] (ecmascript) <export default as ChevronUp>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
const ICON_MAP = {
Compass: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$compass$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Compass$3e$__["Compass"],
Brain: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$brain$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Brain$3e$__["Brain"],
Swords: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$swords$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Swords$3e$__["Swords"],
Sparkles: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"]
};
/** 主题色 → Tailwind/CSS 颜色映射 */ const COLOR_STYLES = {
exploration: {
text: "text-emerald-300",
border: "border-emerald-400/30",
borderActive: "border-emerald-400/70",
bg: "bg-emerald-500/10",
ring: "ring-emerald-400/40",
barFrom: "from-emerald-400",
barTo: "to-emerald-500",
glow: "rgba(52,211,153,0.45)"
},
wisdom: {
text: "text-fuchsia-300",
border: "border-fuchsia-400/30",
borderActive: "border-fuchsia-400/70",
bg: "bg-fuchsia-500/10",
ring: "ring-fuchsia-400/40",
barFrom: "from-fuchsia-400",
barTo: "to-fuchsia-500",
glow: "rgba(232,121,249,0.45)"
},
courage: {
text: "text-amber-300",
border: "border-amber-400/30",
borderActive: "border-amber-400/70",
bg: "bg-amber-500/10",
ring: "ring-amber-400/40",
barFrom: "from-amber-400",
barTo: "to-amber-500",
glow: "rgba(251,191,36,0.45)"
},
inspiration: {
text: "text-rose-300",
border: "border-rose-400/30",
borderActive: "border-rose-400/70",
bg: "bg-rose-500/10",
ring: "ring-rose-400/40",
barFrom: "from-rose-400",
barTo: "to-rose-500",
glow: "rgba(251,113,133,0.45)"
}
};
function AttributesPanel() {
_s();
const attributes = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"AttributesPanel.useGameStore[attributes]": (s)=>s.attributes
}["AttributesPanel.useGameStore[attributes]"]);
const attributeProgress = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"AttributesPanel.useGameStore[attributeProgress]": (s)=>s.attributeProgress
}["AttributesPanel.useGameStore[attributeProgress]"]);
const pendingAttrPoints = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"AttributesPanel.useGameStore[pendingAttrPoints]": (s)=>s.pendingAttrPoints ?? 0
}["AttributesPanel.useGameStore[pendingAttrPoints]"]);
const allocateAttribute = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"AttributesPanel.useGameStore[allocateAttribute]": (s)=>s.allocateAttribute
}["AttributesPanel.useGameStore[allocateAttribute]"]);
const bonuses = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({
"AttributesPanel.useMemo[bonuses]": ()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getAllBonuses"])(attributes)
}["AttributesPanel.useMemo[bonuses]"], [
attributes
]);
const totalLvl = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({
"AttributesPanel.useMemo[totalLvl]": ()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["totalAttributeLevel"])(attributes)
}["AttributesPanel.useMemo[totalLvl]"], [
attributes
]);
const totalBonus = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useMemo"])({
"AttributesPanel.useMemo[totalBonus]": ()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["totalAttributeBonusPct"])(attributes)
}["AttributesPanel.useMemo[totalBonus]"], [
attributes
]);
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "flex flex-col gap-2.5 h-full overflow-y-auto echo-scroll pr-0.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "fb70db4abea5ec9f",
children: ".echo-scroll::-webkit-scrollbar{width:4px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:2px}.echo-scroll::-webkit-scrollbar-track{background:0 0}@keyframes echo-pending-pulse{0%,to{box-shadow:0 0 #e879f980}50%{box-shadow:0 0 14px 4px #e879f9a6}}.echo-pending-pulse{animation:1.6s ease-in-out infinite echo-pending-pulse}@keyframes echo-card-glow{0%,to{opacity:.5}50%{opacity:1}}"
}, void 0, false, void 0, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "flex items-center justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-sm font-semibold flex items-center gap-1.5",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "bg-gradient-to-br from-emerald-300 via-fuchsia-300 to-rose-300 bg-clip-text text-transparent",
children: "驾驶员属性"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 132,
columnNumber: 11
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 131,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + `text-[10px] px-2 py-0.5 rounded-full border ${pendingAttrPoints > 0 ? "border-fuchsia-400/60 bg-fuchsia-500/15 text-fuchsia-200 echo-pending-pulse font-bold" : "border-white/15 bg-black/25 text-muted-foreground"}`,
children: [
"待分配 ",
pendingAttrPoints
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 136,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 130,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "grid grid-cols-2 lg:grid-cols-4 gap-2",
children: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ATTRIBUTE_KEYS"].map((key)=>{
const meta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ATTRIBUTE_CONFIG"][key];
const cs = COLOR_STYLES[key];
const Icon = ICON_MAP[meta.icon] ?? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"];
const value = attributes?.[key] ?? 0;
const prog = attributeProgress?.[key] ?? {
exp: 0,
level: value
};
const bonusPct = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getAttributeBonus"])(value) * 100;
const nextExp = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["expRequiredForLevel"])(value);
const curExp = prog.exp;
const expPct = nextExp > 0 ? Math.min(100, curExp / nextExp * 100) : 100;
const isMax = value >= __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ATTRIBUTE_HARD_CAP"];
const canAllocate = pendingAttrPoints > 0 && !isMax;
// 区域标记
const inDiminishing = value > __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ATTRIBUTE_LINEAR_CAP"];
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
boxShadow: `inset 0 0 18px ${cs.glow}`
},
className: "jsx-fb70db4abea5ec9f" + " " + `relative rounded-xl border ${cs.border} ${cs.bg} p-2.5 flex flex-col gap-1.5 overflow-hidden transition-all duration-300`,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: meta.hex
},
className: "jsx-fb70db4abea5ec9f" + " " + "pointer-events-none absolute -top-8 -right-8 h-20 w-20 rounded-full blur-2xl opacity-50"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 174,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "relative flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
boxShadow: `0 0 8px ${cs.glow}`
},
className: "jsx-fb70db4abea5ec9f" + " " + `shrink-0 h-7 w-7 rounded-lg flex items-center justify-center ${cs.bg} border ${cs.border}`,
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Icon, {
className: "jsx-fb70db4abea5ec9f" + " " + `h-3.5 w-3.5 ${cs.text}`
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 184,
columnNumber: 19
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 180,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "min-w-0 flex-1 leading-tight",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + `text-[11px] font-semibold ${cs.text} truncate`,
children: meta.name
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 187,
columnNumber: 19
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-[8px] text-muted-foreground/70 uppercase tracking-wider truncate",
children: meta.enName
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 190,
columnNumber: 19
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 186,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + `shrink-0 text-[9px] px-1.5 py-0.5 rounded font-mono font-bold ${isMax ? "bg-amber-400/20 text-amber-200 border border-amber-400/40" : "bg-black/30 text-white/80 border border-white/10"}`,
children: [
"Lv.",
value
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 194,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 179,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "relative flex items-end justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + `text-lg font-mono font-bold ${cs.text} leading-none`,
children: [
value,
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-[9px] text-muted-foreground/60 ml-0.5",
children: [
"/",
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ATTRIBUTE_HARD_CAP"]
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 209,
columnNumber: 19
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 207,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + `text-[10px] ${cs.text} font-mono`,
children: [
"+",
bonusPct.toFixed(1),
"%"
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 213,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 206,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "relative",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "h-1.5 rounded-full bg-black/40 overflow-hidden border border-white/5",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
width: `${isMax ? 100 : expPct}%`,
boxShadow: `0 0 6px ${cs.glow}`
},
className: "jsx-fb70db4abea5ec9f" + " " + `h-full bg-gradient-to-r ${cs.barFrom} ${cs.barTo} transition-all duration-500`
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 221,
columnNumber: 19
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 220,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "flex items-center justify-between mt-0.5 text-[8px] text-muted-foreground/70 font-mono",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f",
children: isMax ? "已满级" : `${curExp} / ${nextExp} EXP`
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 230,
columnNumber: 19
}, this),
inDiminishing && !isMax && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-amber-300/70",
children: "递减区"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 234,
columnNumber: 21
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 229,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 219,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "relative flex flex-col gap-0.5 mt-0.5",
children: meta.effects.map((eff, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-[8.5px] text-muted-foreground/70 leading-tight flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + (cs.text || ""),
children: "·"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 246,
columnNumber: 21
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "truncate",
children: eff
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 247,
columnNumber: 21
}, this)
]
}, i, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 242,
columnNumber: 19
}, this))
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 240,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
type: "button",
disabled: !canAllocate,
onClick: ()=>allocateAttribute(key, 1),
"aria-label": `分配 1 点到 ${meta.name}`,
style: canAllocate ? {
boxShadow: `0 0 8px ${cs.glow}`
} : undefined,
className: "jsx-fb70db4abea5ec9f" + " " + `relative mt-auto rounded-md border px-1.5 py-1 flex items-center justify-center gap-0.5 text-[10px] font-bold transition-all ${canAllocate ? `${cs.borderActive} ${cs.bg} ${cs.text} hover:scale-105 cursor-pointer` : "border-white/5 bg-black/20 text-muted-foreground/30 cursor-not-allowed"}`,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$plus$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Plus$3e$__["Plus"], {
className: "h-3 w-3"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 269,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f",
children: "分配"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 270,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 253,
columnNumber: 15
}, this)
]
}, key, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 166,
columnNumber: 13
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 148,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "mt-auto rounded-lg border border-white/10 bg-black/30 px-2.5 py-1.5 flex items-center justify-between gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "flex items-center gap-1.5 text-[10px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$chevron$2d$up$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ChevronUp$3e$__["ChevronUp"], {
className: "h-3 w-3 text-fuchsia-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 280,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-muted-foreground",
children: "总等级"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 281,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "font-mono font-bold text-fuchsia-200",
children: [
totalLvl,
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-muted-foreground/60 text-[9px]",
children: [
"/",
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$attributes$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ATTRIBUTE_HARD_CAP"] * 4
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 284,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 282,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 279,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "flex items-center gap-2 text-[10px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-muted-foreground",
children: "总加成"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 288,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "font-mono font-bold text-emerald-200",
children: [
"+",
totalBonus.toFixed(1),
"%"
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 289,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 287,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 278,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "grid grid-cols-2 gap-1 text-[9px]",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "探险力",
value: `×${bonuses.expeditionPowerMult.toFixed(2)}`,
color: "text-emerald-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 297,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "解码步数",
value: `+${bonuses.decodeStepsBonus}`,
color: "text-fuchsia-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 298,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "洞见倍率",
value: `+${(bonuses.insightMultAdd * 100).toFixed(1)}%`,
color: "text-fuchsia-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 299,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "自动解码周期",
value: `×${bonuses.autoDecodeIntervalMult.toFixed(2)}`,
color: "text-fuchsia-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 300,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "探险生命",
value: `+${bonuses.expeditionHpBonus}`,
color: "text-amber-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 301,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "BOSS 胜率",
value: `+${(bonuses.bossWinRateBonus * 100).toFixed(1)}%`,
color: "text-amber-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 302,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "巡航护盾",
value: `+${bonuses.cruiseShieldBonus}`,
color: "text-amber-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 303,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "接触率",
value: `×${bonuses.contactRateMult.toFixed(2)}`,
color: "text-rose-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 304,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "星潮触发",
value: `+${(bonuses.tideTriggerBonus * 100).toFixed(1)}%`,
color: "text-rose-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 305,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "脉冲连击",
value: `+${(bonuses.pulseComboBonus * 100).toFixed(1)}%`,
color: "text-rose-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 306,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "巡航速度",
value: `×${bonuses.cruiseShipSpeedMult.toFixed(2)}`,
color: "text-emerald-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 307,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(DetailLine, {
label: "产能加成",
value: `×${bonuses.crystalsPerSecMult.toFixed(2)}`,
color: "text-emerald-300"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 308,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 296,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-[9px] text-muted-foreground/60 text-center leading-tight",
children: [
"每次飞升获得 ",
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-fb70db4abea5ec9f" + " " + "text-fuchsia-300 font-mono",
children: "飞升次数 × 2 + 1"
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 313,
columnNumber: 16
}, this),
" 点属性点;完成对应活动自动累积经验"
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 312,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 111,
columnNumber: 5
}, this);
}
_s(AttributesPanel, "TnH9sTiN7yxDJVZqlARic7vS5cw=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = AttributesPanel;
function DetailLine({ label, value, color }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between rounded bg-black/25 border border-white/5 px-1.5 py-0.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-muted-foreground/80 truncate",
children: label
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 330,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: `font-mono ${color}`,
children: value
}, void 0, false, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 331,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/AttributesPanel.tsx",
lineNumber: 329,
columnNumber: 5
}, this);
}
_c1 = DetailLine;
var _c, _c1;
__turbopack_context__.k.register(_c, "AttributesPanel");
__turbopack_context__.k.register(_c1, "DetailLine");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/ExplorationRadar.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"ExplorationRadar",
()=>ExplorationRadar
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 探索目标雷达(v0.10 新增)
// 动态展示当前可解锁/可探索的下一目标,让"等待"变"期待"
// 缓解工单 #2 "占地方没用" 反馈 — 晶体球下方提供持续探索动力
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/config.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$achievements$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/achievements.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/constellation.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/expedition.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$target$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Target$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/target.js [app-client] (ecmascript) <export default as Target>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$cpu$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Cpu$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/cpu.js [app-client] (ecmascript) <export default as Cpu>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trophy$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trophy$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trophy.js [app-client] (ecmascript) <export default as Trophy>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/book-open.js [app-client] (ecmascript) <export default as BookOpen>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/rocket.js [app-client] (ecmascript) <export default as Rocket>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$star$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Star$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/star.js [app-client] (ecmascript) <export default as Star>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trending$2d$down$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__TrendingDown$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/trending-down.js [app-client] (ecmascript) <export default as TrendingDown>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle2$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/circle-check.js [app-client] (ecmascript) <export default as CheckCircle2>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
function ExplorationRadar() {
_s();
const s = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])();
// ===== 计算各系统的下一个目标 =====
const targets = [];
// 1. 下一个技术节点(按洞见排序)
const nextTech = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TECH_TREE"].filter((t)=>!s.tech[t.id]).sort((a, b)=>a.cost - b.cost)[0];
if (nextTech) {
const insightProgress = Math.min(100, s.insights / nextTech.cost * 100);
targets.push({
id: "tech_" + nextTech.id,
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$cpu$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Cpu$3e$__["Cpu"],
color: "#34d399",
label: nextTech.name,
detail: `需 ${nextTech.cost} 洞见 · ${nextTech.desc}`,
progress: insightProgress,
hint: s.insights >= nextTech.cost ? "可解锁" : `还差 ${nextTech.cost - s.insights} 洞见`
});
}
// 2. 下一个成就(按达成难度近似)
const nextAch = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$achievements$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["ACHIEVEMENTS"].find((a)=>!s.achievements[a.id]);
if (nextAch) {
targets.push({
id: "ach_" + nextAch.id,
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trophy$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Trophy$3e$__["Trophy"],
color: "#fbbf24",
label: nextAch.name,
detail: nextAch.desc,
progress: 30,
hint: nextAch.rewardText
});
}
// 3. 下一个记忆碎片
const nextFrag = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["FRAGMENTS"].find((f)=>!s.fragments[f.id]);
if (nextFrag) {
const ownedFrag = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["FRAGMENTS"].filter((f)=>s.fragments[f.id]).length;
targets.push({
id: "frag_" + nextFrag.id,
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$open$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookOpen$3e$__["BookOpen"],
color: "#e879f9",
label: nextFrag.title,
detail: "解码晶体有概率获取",
progress: ownedFrag / __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["FRAGMENTS"].length * 100,
hint: `图谱 ${ownedFrag}/${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$config$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["FRAGMENTS"].length}`
});
}
// 4. 探险能量
if (s.energy < __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EXPEDITION_CONFIG"].energyCost) {
targets.push({
id: "expedition_energy",
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$rocket$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Rocket$3e$__["Rocket"],
color: "#fb7185",
label: "探险能量恢复中",
detail: `满能量可深入遗迹`,
progress: s.energy / __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EXPEDITION_CONFIG"].energyCost * 100,
hint: `${s.energy}/${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$expedition$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["EXPEDITION_CONFIG"].energyCost}`
});
}
// 5. 飞升进度(接触<100 时)
if (s.contact < 100) {
targets.push({
id: "ascension",
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$star$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Star$3e$__["Star"],
color: "#a78bfa",
label: "接触进度",
detail: "满 100 可飞升新周目",
progress: s.contact,
hint: `${s.contact.toFixed(1)}/100`
});
}
// 6. 星图天赋(飞升后未选择)
const ownedConstellation = s.constellation ?? [];
if (s.pendingPerkChoices && s.pendingPerkChoices.length > 0) {
targets.push({
id: "constellation_pending",
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"],
color: "#e879f9",
label: "星图觉醒待选择",
detail: "3 选 1 永久天赋",
progress: 100,
hint: "立即选择"
});
} else if (ownedConstellation.length < __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_PERKS"].length && s.ascensions > 0) {
targets.push({
id: "constellation_next",
icon: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$star$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Star$3e$__["Star"],
color: "#e879f9",
label: "下一道星图天赋",
detail: `已觉醒 ${ownedConstellation.length}/${__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_PERKS"].length}`,
progress: ownedConstellation.length / __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$constellation$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["CONSTELLATION_PERKS"].length * 100,
hint: "飞升后解锁"
});
}
// 取前 3 个最相关目标展示
const topTargets = targets.slice(0, 3);
if (topTargets.length === 0) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-xl border border-emerald-400/20 bg-emerald-950/10 p-3 text-center",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$circle$2d$check$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__CheckCircle2$3e$__["CheckCircle2"], {
className: "h-5 w-5 text-emerald-400 mx-auto mb-1"
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 138,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[11px] text-emerald-200/80",
children: "所有目标已达成"
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 139,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[9px] text-muted-foreground/60 mt-0.5",
children: "继续飞升开启新周目"
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 140,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 137,
columnNumber: 7
}, this);
}
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "rounded-xl border border-white/10 bg-black/30 p-2.5 space-y-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center justify-between",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$target$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Target$3e$__["Target"], {
className: "h-3.5 w-3.5 text-emerald-400"
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 150,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[11px] font-semibold text-emerald-200",
children: "探索目标"
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 151,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 149,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[9px] text-muted-foreground/50 font-mono",
children: "RADAR"
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 153,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 148,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "space-y-1.5",
children: topTargets.map((t)=>{
const Icon = t.icon;
const isReady = t.progress >= 100;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: `rounded-lg p-1.5 transition-all ${isReady ? "bg-white/8 border border-white/15" : "bg-black/20 border border-white/5"}`,
style: isReady ? {
boxShadow: `0 0 10px ${t.color}33`
} : undefined,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-1.5 mb-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(Icon, {
className: `h-3 w-3 shrink-0 ${isReady ? "animate-pulse" : ""}`,
style: {
color: t.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 176,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[10px] font-medium truncate flex-1",
style: {
color: isReady ? t.color : "rgba(255,255,255,0.75)"
},
children: t.label
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 180,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "text-[8px] font-mono text-muted-foreground/70 shrink-0",
children: t.hint
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 186,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 175,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "h-0.5 rounded-full bg-black/50 overflow-hidden",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "h-full transition-all duration-500",
style: {
width: `${Math.min(100, t.progress)}%`,
background: t.color,
boxShadow: isReady ? `0 0 6px ${t.color}` : "none"
}
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 192,
columnNumber: 17
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 191,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "text-[8px] text-muted-foreground/60 mt-0.5 truncate",
children: t.detail
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 202,
columnNumber: 15
}, this)
]
}, t.id, true, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 162,
columnNumber: 13
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 157,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "flex items-center gap-1 text-[8px] text-muted-foreground/50 pt-0.5 border-t border-white/5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$trending$2d$down$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__TrendingDown$3e$__["TrendingDown"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 210,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
children: "持续探索 · 解锁深空奥秘"
}, void 0, false, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 211,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 209,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/ExplorationRadar.tsx",
lineNumber: 146,
columnNumber: 5
}, this);
}
_s(ExplorationRadar, "fAEq+83UwCivaXSTAo8NpxzXJHM=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = ExplorationRadar;
var _c;
__turbopack_context__.k.register(_c, "ExplorationRadar");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/RelicCodex.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"RelicCodex",
()=>RelicCodex
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 文明遗迹图鉴面板(v0.10 新增)
// 展示深空考古发现的远古文明遗迹,增加世界观深度与探索乐趣
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$relicCodex$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/relicCodex.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$marked$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookMarked$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/book-marked.js [app-client] (ecmascript) <export default as BookMarked>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/lock.js [app-client] (ecmascript) <export default as Lock>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/sparkles.js [app-client] (ecmascript) <export default as Sparkles>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/clock.js [app-client] (ecmascript) <export default as Clock>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/users.js [app-client] (ecmascript) <export default as Users>");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$scroll$2d$text$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ScrollText$3e$__ = __turbopack_context__.i("[project]/node_modules/lucide-react/dist/esm/icons/scroll-text.js [app-client] (ecmascript) <export default as ScrollText>");
;
var _s = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
function RelicCodex() {
_s();
const state = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])();
const [selected, setSelected] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(null);
const unlockedRelics = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$relicCodex$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getUnlockedRelics"])(state);
const progress = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$relicCodex$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getRelicProgress"])(state);
const rewards = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$relicCodex$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["getRelicRewards"])(state);
const selectedRelic = selected ? __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$relicCodex$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["RELIC_CODEX"].find((r)=>r.id === selected) : null;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex flex-col gap-2.5 h-full min-h-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center justify-between gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("h3", {
className: "jsx-89979d12e77b884d" + " " + "text-sm font-semibold flex items-center gap-1.5 shrink-0",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$book$2d$marked$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__BookMarked$3e$__["BookMarked"], {
className: "h-4 w-4 text-fuchsia-400"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 29,
columnNumber: 11
}, this),
"遗迹图鉴"
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 28,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-2 text-[10px] font-mono",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-fuchsia-300",
children: unlockedRelics.length
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 33,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-muted-foreground/50",
children: "/"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 34,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-muted-foreground",
children: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$relicCodex$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["RELIC_CODEX"].length
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 35,
columnNumber: 11
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-muted-foreground/60",
children: [
"(",
progress.toFixed(0),
"%)"
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 36,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 32,
columnNumber: 9
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 27,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "h-1 rounded-full bg-black/40 overflow-hidden",
children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
width: `${progress}%`,
boxShadow: "0 0 8px rgba(232,121,249,0.5)"
},
className: "jsx-89979d12e77b884d" + " " + "h-full bg-gradient-to-r from-fuchsia-500 via-rose-400 to-amber-400 transition-all duration-500"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 42,
columnNumber: 9
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 41,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "rounded-lg border border-fuchsia-400/20 bg-fuchsia-950/20 px-2.5 py-1.5 flex items-center gap-2 text-[10px] flex-wrap",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-3 w-3 text-fuchsia-400 shrink-0"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 50,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-fuchsia-300/80",
children: "考古收获"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 51,
columnNumber: 9
}, this),
rewards.crystals > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-emerald-300",
children: [
"+",
rewards.crystals,
" 晶体"
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 53,
columnNumber: 11
}, this),
rewards.insights > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-amber-300",
children: [
"+",
rewards.insights,
" 洞见"
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 56,
columnNumber: 11
}, this),
rewards.contact > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-fuchsia-300",
children: [
"+",
rewards.contact,
" 接触"
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 59,
columnNumber: 11
}, this),
rewards.crystalsPerSecPct > 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-emerald-300",
children: [
"产能 +",
rewards.crystalsPerSecPct,
"%"
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 62,
columnNumber: 11
}, this),
unlockedRelics.length === 0 && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "text-muted-foreground/60",
children: "持续探索解锁奖励"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 65,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 49,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex-1 min-h-0 overflow-y-auto echo-scroll pr-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "grid grid-cols-1 sm:grid-cols-2 gap-1.5",
children: __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$relicCodex$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["RELIC_CODEX"].map((relic)=>{
const unlocked = !!state.achievements?.[`relic_${relic.id}`] || relic.unlock(state);
const isSelected = selected === relic.id;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("button", {
onClick: ()=>setSelected(isSelected ? null : relic.id),
style: unlocked ? {
boxShadow: `inset 0 0 14px ${relic.color}10`
} : undefined,
className: "jsx-89979d12e77b884d" + " " + `relative rounded-lg border px-2.5 py-2 transition-all duration-300 min-h-[72px] text-left ${unlocked ? isSelected ? "border-white/30 bg-white/8" : "border-white/15 bg-black/30 hover:bg-black/40" : "border-white/5 bg-black/15 opacity-70"}`,
children: [
unlocked && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: relic.color
},
className: "jsx-89979d12e77b884d" + " " + "absolute -top-6 -right-6 h-14 w-14 rounded-full blur-2xl opacity-30 pointer-events-none"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 93,
columnNumber: 19
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "relative flex items-start gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: unlocked ? `${relic.color}22` : "rgba(255,255,255,0.04)",
border: `1px solid ${unlocked ? relic.color + "55" : "rgba(255,255,255,0.08)"}`,
color: unlocked ? relic.color : "#555",
boxShadow: unlocked ? `0 0 10px ${relic.color}33` : "none"
},
className: "jsx-89979d12e77b884d" + " " + "shrink-0 h-9 w-9 rounded-lg flex items-center justify-center text-lg",
children: unlocked ? relic.icon : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$lock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Lock$3e$__["Lock"], {
className: "h-3.5 w-3.5"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 109,
columnNumber: 46
}, this)
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 100,
columnNumber: 19
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "min-w-0 flex-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
color: unlocked ? relic.color : "rgba(255,255,255,0.5)"
},
className: "jsx-89979d12e77b884d" + " " + "text-[11px] font-semibold truncate",
children: unlocked ? relic.name : "??? 未发现"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 113,
columnNumber: 21
}, this),
unlocked ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Fragment"], {
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "text-[9px] text-muted-foreground/70 truncate flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 122,
columnNumber: 27
}, this),
relic.race
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 121,
columnNumber: 25
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "text-[9px] text-muted-foreground/60 truncate flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__["Clock"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 126,
columnNumber: 27
}, this),
relic.era
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 125,
columnNumber: 25
}, this)
]
}, void 0, true) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "text-[9px] text-muted-foreground/60 mt-0.5 line-clamp-2",
children: relic.unlockHint
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 131,
columnNumber: 23
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 112,
columnNumber: 19
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 98,
columnNumber: 17
}, this)
]
}, relic.id, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 76,
columnNumber: 15
}, this);
})
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 71,
columnNumber: 9
}, this),
selectedRelic && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
borderColor: `${selectedRelic.color}44`,
background: `linear-gradient(135deg, ${selectedRelic.color}11, rgba(0,0,0,0.4))`
},
className: "jsx-89979d12e77b884d" + " " + "mt-2 rounded-lg border p-3 relative overflow-hidden",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: `${selectedRelic.color}22`
},
className: "jsx-89979d12e77b884d" + " " + "absolute -top-8 -right-8 h-24 w-24 rounded-full blur-2xl pointer-events-none"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 151,
columnNumber: 13
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "relative space-y-1.5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-2",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: selectedRelic.color
},
className: "jsx-89979d12e77b884d" + " " + "text-base",
children: selectedRelic.icon
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 157,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: selectedRelic.color
},
className: "jsx-89979d12e77b884d" + " " + "text-sm font-semibold",
children: selectedRelic.name
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 160,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 156,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-3 text-[9px] text-muted-foreground/80",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$users$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Users$3e$__["Users"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 169,
columnNumber: 19
}, this),
selectedRelic.race
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 168,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$clock$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Clock$3e$__["Clock"], {
className: "h-2.5 w-2.5"
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 173,
columnNumber: 19
}, this),
selectedRelic.era
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 172,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 167,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-89979d12e77b884d" + " " + "text-[10px] text-muted-foreground/90 italic",
children: selectedRelic.brief
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 177,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-start gap-1.5 pt-1 border-t border-white/5",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$scroll$2d$text$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__ScrollText$3e$__["ScrollText"], {
className: "h-3 w-3 mt-0.5 shrink-0",
style: {
color: selectedRelic.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 181,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("p", {
className: "jsx-89979d12e77b884d" + " " + "text-[10px] text-foreground/85 leading-relaxed",
children: selectedRelic.story
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 185,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 180,
columnNumber: 15
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-89979d12e77b884d" + " " + "flex items-center gap-1.5 pt-1",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$lucide$2d$react$2f$dist$2f$esm$2f$icons$2f$sparkles$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$export__default__as__Sparkles$3e$__["Sparkles"], {
className: "h-3 w-3 shrink-0",
style: {
color: selectedRelic.color
}
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 190,
columnNumber: 17
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
style: {
color: selectedRelic.color + "cc"
},
className: "jsx-89979d12e77b884d" + " " + "text-[10px] font-mono",
children: selectedRelic.rewardText
}, void 0, false, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 194,
columnNumber: 17
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 189,
columnNumber: 15
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 155,
columnNumber: 13
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 144,
columnNumber: 11
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 70,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "89979d12e77b884d",
children: ".echo-scroll::-webkit-scrollbar{width:5px}.echo-scroll::-webkit-scrollbar-thumb{background:#ffffff24;border-radius:3px}.echo-scroll::-webkit-scrollbar-track{background:0 0}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}"
}, void 0, false, void 0, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/RelicCodex.tsx",
lineNumber: 25,
columnNumber: 5
}, this);
}
_s(RelicCodex, "iOc0Y94UFL6wVp6drOqh3RSAvpM=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c = RelicCodex;
var _c;
__turbopack_context__.k.register(_c, "RelicCodex");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/game/StarTide.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"StarTideIndicator",
()=>StarTideIndicator,
"StarTideNotifier",
()=>StarTideNotifier,
"StarTideOverlay",
()=>StarTideOverlay
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/styled-jsx/style.js [app-client] (ecmascript)");
// 回响星核 / Echo Nexus — 星潮事件 UI(横幅 + 通知 + 背景叠层)
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/index.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/src/store/gameStore.ts [app-client] (ecmascript) <locals>");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/use-toast.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/hooks/useAudio.ts [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$starTide$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/game/starTide.ts [app-client] (ecmascript)");
;
var _s = __turbopack_context__.k.signature(), _s1 = __turbopack_context__.k.signature(), _s2 = __turbopack_context__.k.signature();
"use client";
;
;
;
;
;
;
function StarTideNotifier() {
_s();
const events = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"StarTideNotifier.useGameStore[events]": (s)=>s._tideEvents
}["StarTideNotifier.useGameStore[events]"]);
const consume = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"StarTideNotifier.useGameStore[consume]": (s)=>s.consumeTideEvents
}["StarTideNotifier.useGameStore[consume]"]);
const { toast } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"])();
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"StarTideNotifier.useEffect": ()=>{
if (events.length === 0) return;
const items = consume();
for (const ev of items){
const globalTag = ev.isGlobal ? "🌐 " : "";
if (ev.started) {
const meta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$starTide$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TIDE_EVENTS"][ev.started];
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("tideStart");
toast({
title: `${globalTag}${meta.icon} ${ev.isGlobal ? "全球星潮" : "星潮降临"}${meta.name}`,
description: ev.isGlobal ? `全球玩家同步经历 · ${meta.desc}` : meta.desc
});
}
if (ev.ended) {
const meta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$starTide$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TIDE_EVENTS"][ev.ended];
if (ev.silenceCompensation && ev.silenceCompensation > 0) {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("techBuy");
toast({
title: `${globalTag}${meta.icon} 寂静期消散`,
description: `虚空回赠 ${ev.silenceCompensation} 洞见。`
});
} else {
(0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$useAudio$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["sfx"])("tideEnd");
toast({
title: `${globalTag}${meta.icon} ${meta.name}结束`,
description: ev.isGlobal ? "全球星潮退去,物理法则恢复。" : "星潮退去,物理法则恢复。"
});
}
}
}
}
}["StarTideNotifier.useEffect"], [
events,
consume,
toast
]);
return null;
}
_s(StarTideNotifier, "Zqo+Z3odtW6uHeagt5EN6OsC9aw=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$hooks$2f$use$2d$toast$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useToast"]
];
});
_c = StarTideNotifier;
function StarTideIndicator() {
_s1();
const activeTide = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"StarTideIndicator.useGameStore[activeTide]": (s)=>s.activeTide
}["StarTideIndicator.useGameStore[activeTide]"]);
const globalTide = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"StarTideIndicator.useGameStore[globalTide]": (s)=>s.globalTide
}["StarTideIndicator.useGameStore[globalTide]"]);
const [, force] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useState"])(0);
// 每秒刷新倒计时
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$index$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["useEffect"])({
"StarTideIndicator.useEffect": ()=>{
if (!activeTide) return;
const id = setInterval({
"StarTideIndicator.useEffect.id": ()=>force({
"StarTideIndicator.useEffect.id": (n)=>n + 1
}["StarTideIndicator.useEffect.id"])
}["StarTideIndicator.useEffect.id"], 500);
return ({
"StarTideIndicator.useEffect": ()=>clearInterval(id)
})["StarTideIndicator.useEffect"];
}
}["StarTideIndicator.useEffect"], [
activeTide
]);
if (!activeTide) return null;
const meta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$starTide$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TIDE_EVENTS"][activeTide.type];
const remaining = Math.max(0, activeTide.endsAt - Date.now());
const secs = Math.ceil(remaining / 1000);
// 全球星潮持续 60s,本地 75s —— 用实际 endsAt-startedAt 计算 progress,避免越界
const duration = globalTide ? globalTide.endsAt - globalTide.startedAt : __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$starTide$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TIDE_CONFIG"].duration;
const progress = Math.min(1, Math.max(0, 1 - remaining / duration));
const isGlobal = !!globalTide;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: `flex items-center gap-1.5 px-2 py-1 rounded-full text-[10px] font-medium relative overflow-hidden ${isGlobal ? "ring-1 ring-amber-300/60" : ""}`,
style: {
background: isGlobal ? `linear-gradient(135deg, ${meta.color}26, ${meta.color}11)` : `${meta.color}1a`,
border: `1px solid ${meta.color}${isGlobal ? "88" : "55"}`,
color: meta.color,
boxShadow: `0 0 ${isGlobal ? "16" : "10"}px ${meta.glow}`
},
title: isGlobal ? `🌐 全球星潮 · ${meta.desc}` : meta.desc,
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "absolute inset-0 opacity-20",
style: {
background: `linear-gradient(90deg, ${meta.color}40 ${progress * 100}%, transparent ${progress * 100}%)`
}
}, void 0, false, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 94,
columnNumber: 7
}, this),
isGlobal && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "relative text-[11px] leading-none animate-pulse",
"aria-label": "全球星潮标记",
children: "🌐"
}, void 0, false, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 101,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "relative text-xs leading-none",
children: meta.icon
}, void 0, false, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 108,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "relative leading-none",
children: meta.name
}, void 0, false, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 109,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("span", {
className: "relative font-mono leading-none opacity-80",
children: [
secs,
"s"
]
}, void 0, true, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 110,
columnNumber: 7
}, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 79,
columnNumber: 5
}, this);
}
_s1(StarTideIndicator, "ltU8198o96+gwp6cgll9T4zhwZI=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c1 = StarTideIndicator;
function StarTideOverlay() {
_s2();
const activeTide = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"StarTideOverlay.useGameStore[activeTide]": (s)=>s.activeTide
}["StarTideOverlay.useGameStore[activeTide]"]);
const globalTide = (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"])({
"StarTideOverlay.useGameStore[globalTide]": (s)=>s.globalTide
}["StarTideOverlay.useGameStore[globalTide]"]);
if (!activeTide) return null;
const meta = __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$game$2f$starTide$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["TIDE_EVENTS"][activeTide.type];
const isGlobal = !!globalTide;
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
className: "jsx-12289952018fdcbd" + " " + "fixed inset-0 pointer-events-none z-0 transition-opacity duration-1000",
children: [
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: `linear-gradient(180deg, ${meta.color}22, transparent)`
},
className: "jsx-12289952018fdcbd" + " " + "absolute top-0 left-0 right-0 h-24 opacity-40"
}, void 0, false, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 126,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: `linear-gradient(0deg, ${meta.color}22, transparent)`
},
className: "jsx-12289952018fdcbd" + " " + "absolute bottom-0 left-0 right-0 h-24 opacity-40"
}, void 0, false, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 133,
columnNumber: 7
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
boxShadow: `inset 0 0 ${isGlobal ? "160" : "120"}px ${meta.glow}`,
animation: "tide-breathe 3s ease-in-out infinite"
},
className: "jsx-12289952018fdcbd" + " " + "absolute inset-0"
}, void 0, false, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 140,
columnNumber: 7
}, this),
isGlobal && /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])("div", {
style: {
background: "linear-gradient(90deg, transparent, #fbbf24, #fcd34d, #fbbf24, transparent)",
boxShadow: "0 0 16px rgba(251,191,36,0.7)",
animation: "global-tide-sweep 2.5s linear infinite"
},
className: "jsx-12289952018fdcbd" + " " + "absolute top-0 left-0 right-0 h-1 opacity-90"
}, void 0, false, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 149,
columnNumber: 9
}, this),
/*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$styled$2d$jsx$2f$style$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["default"], {
id: "12289952018fdcbd",
children: "@keyframes tide-breathe{0%,to{opacity:.5}50%{opacity:.9}}@keyframes global-tide-sweep{0%{transform:translate(-30%)}to{transform:translate(30%)}}"
}, void 0, false, void 0, this)
]
}, void 0, true, {
fileName: "[project]/src/components/game/StarTide.tsx",
lineNumber: 124,
columnNumber: 5
}, this);
}
_s2(StarTideOverlay, "AHFYbMIC8IXJtt89GvDORwFzHx8=", false, function() {
return [
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"],
__TURBOPACK__imported__module__$5b$project$5d2f$src$2f$store$2f$gameStore$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__$3c$locals$3e$__["useGameStore"]
];
});
_c2 = StarTideOverlay;
var _c, _c1, _c2;
__turbopack_context__.k.register(_c, "StarTideNotifier");
__turbopack_context__.k.register(_c1, "StarTideIndicator");
__turbopack_context__.k.register(_c2, "StarTideOverlay");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
"[project]/src/components/ui/tabs.tsx [app-client] (ecmascript)", ((__turbopack_context__) => {
"use strict";
__turbopack_context__.s([
"Tabs",
()=>Tabs,
"TabsContent",
()=>TabsContent,
"TabsList",
()=>TabsList,
"TabsTrigger",
()=>TabsTrigger
]);
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/react/jsx-dev-runtime.js [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$tabs$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/@radix-ui/react-tabs/dist/index.mjs [app-client] (ecmascript)");
var __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/src/lib/utils.ts [app-client] (ecmascript)");
"use client";
;
;
;
function Tabs({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$tabs$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Root"], {
"data-slot": "tabs",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("flex flex-col gap-2", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/tabs.tsx",
lineNumber: 13,
columnNumber: 5
}, this);
}
_c = Tabs;
function TabsList({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$tabs$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["List"], {
"data-slot": "tabs-list",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/tabs.tsx",
lineNumber: 26,
columnNumber: 5
}, this);
}
_c1 = TabsList;
function TabsTrigger({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$tabs$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Trigger"], {
"data-slot": "tabs-trigger",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/tabs.tsx",
lineNumber: 42,
columnNumber: 5
}, this);
}
_c2 = TabsTrigger;
function TabsContent({ className, ...props }) {
return /*#__PURE__*/ (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$react$2f$jsx$2d$dev$2d$runtime$2e$js__$5b$app$2d$client$5d$__$28$ecmascript$29$__["jsxDEV"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f40$radix$2d$ui$2f$react$2d$tabs$2f$dist$2f$index$2e$mjs__$5b$app$2d$client$5d$__$28$ecmascript$29$__["Content"], {
"data-slot": "tabs-content",
className: (0, __TURBOPACK__imported__module__$5b$project$5d2f$src$2f$lib$2f$utils$2e$ts__$5b$app$2d$client$5d$__$28$ecmascript$29$__["cn"])("flex-1 outline-none", className),
...props
}, void 0, false, {
fileName: "[project]/src/components/ui/tabs.tsx",
lineNumber: 58,
columnNumber: 5
}, this);
}
_c3 = TabsContent;
;
var _c, _c1, _c2, _c3;
__turbopack_context__.k.register(_c, "Tabs");
__turbopack_context__.k.register(_c1, "TabsList");
__turbopack_context__.k.register(_c2, "TabsTrigger");
__turbopack_context__.k.register(_c3, "TabsContent");
if (typeof globalThis.$RefreshHelpers$ === 'object' && globalThis.$RefreshHelpers !== null) {
__turbopack_context__.k.registerExports(__turbopack_context__.m, globalThis.$RefreshHelpers$);
}
}),
]);
//# sourceMappingURL=src_components_668f4971._.js.map