12909 lines
1007 KiB
JavaScript
12909 lines
1007 KiB
JavaScript
(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
|