sa2kit 1.6.12 → 1.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mmd/index.d.mts +50 -1
- package/dist/mmd/index.d.ts +50 -1
- package/dist/mmd/index.js +882 -510
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +680 -311
- package/dist/mmd/index.mjs.map +1 -1
- package/package.json +18 -20
package/dist/mmd/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useMusic } from '../chunk-CDK3DHKM.mjs';
|
|
2
2
|
import '../chunk-ZCLAF3XN.mjs';
|
|
3
3
|
import '../chunk-BJTO5JO5.mjs';
|
|
4
|
-
import
|
|
4
|
+
import React24, { forwardRef, useRef, useEffect, useImperativeHandle, useState, useCallback } from 'react';
|
|
5
5
|
import * as THREE3 from 'three';
|
|
6
6
|
import { OutlineEffect, OrbitControls, MMDLoader, MMDAnimationHelper } from 'three-stdlib';
|
|
7
7
|
import { AlertCircle, Camera, Settings, RefreshCw, CameraOff, X, Check, SkipBack, Pause, Play, SkipForward, Repeat, Repeat1, Shuffle, ListMusic, Music, Search, Loader2, Grid3x3, Minimize, Maximize, Video, User, Image as Image$1 } from 'lucide-react';
|
|
@@ -2091,7 +2091,7 @@ var MMDPlayerBase = forwardRef((props, ref) => {
|
|
|
2091
2091
|
durationRef.current = animation.duration;
|
|
2092
2092
|
}
|
|
2093
2093
|
mesh.castShadow = true;
|
|
2094
|
-
mesh.receiveShadow =
|
|
2094
|
+
mesh.receiveShadow = false;
|
|
2095
2095
|
const tempScene = new THREE3.Scene();
|
|
2096
2096
|
tempScene.add(mesh);
|
|
2097
2097
|
await waitForMaterialsReady(mesh, renderer, tempScene, camera);
|
|
@@ -2271,7 +2271,7 @@ var MMDPlayerBase = forwardRef((props, ref) => {
|
|
|
2271
2271
|
let stageMaterialCount = 0;
|
|
2272
2272
|
stageMesh.traverse((child) => {
|
|
2273
2273
|
if (child instanceof THREE3.Mesh) {
|
|
2274
|
-
child.castShadow =
|
|
2274
|
+
child.castShadow = false;
|
|
2275
2275
|
child.receiveShadow = true;
|
|
2276
2276
|
const mesh2 = child;
|
|
2277
2277
|
const materials = Array.isArray(mesh2.material) ? mesh2.material : [mesh2.material];
|
|
@@ -2865,7 +2865,7 @@ ${errorMessage}
|
|
|
2865
2865
|
}
|
|
2866
2866
|
}
|
|
2867
2867
|
};
|
|
2868
|
-
return /* @__PURE__ */
|
|
2868
|
+
return /* @__PURE__ */ React24.createElement(
|
|
2869
2869
|
"div",
|
|
2870
2870
|
{
|
|
2871
2871
|
ref: containerRef,
|
|
@@ -2904,78 +2904,78 @@ var ControlPanel = ({
|
|
|
2904
2904
|
onNext,
|
|
2905
2905
|
onResetCamera
|
|
2906
2906
|
}) => {
|
|
2907
|
-
return /* @__PURE__ */
|
|
2907
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/80 to-transparent p-4 transition-opacity duration-300 hover:opacity-100" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-white" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-2" }, showPrevNext && onPrevious && /* @__PURE__ */ React24.createElement(
|
|
2908
2908
|
"button",
|
|
2909
2909
|
{
|
|
2910
2910
|
onClick: onPrevious,
|
|
2911
2911
|
className: "rounded-full p-2 hover:bg-white/20 transition-colors",
|
|
2912
2912
|
title: "\u4E0A\u4E00\u4E2A"
|
|
2913
2913
|
},
|
|
2914
|
-
/* @__PURE__ */
|
|
2915
|
-
), /* @__PURE__ */
|
|
2914
|
+
/* @__PURE__ */ React24.createElement(SkipBack, { size: 20 })
|
|
2915
|
+
), /* @__PURE__ */ React24.createElement(
|
|
2916
2916
|
"button",
|
|
2917
2917
|
{
|
|
2918
2918
|
onClick: onPlayPause,
|
|
2919
2919
|
className: "rounded-full p-2 hover:bg-white/20 transition-colors",
|
|
2920
2920
|
title: isPlaying ? "\u6682\u505C" : "\u64AD\u653E"
|
|
2921
2921
|
},
|
|
2922
|
-
isPlaying ? /* @__PURE__ */
|
|
2923
|
-
), showPrevNext && onNext && /* @__PURE__ */
|
|
2922
|
+
isPlaying ? /* @__PURE__ */ React24.createElement(Pause, { size: 24 }) : /* @__PURE__ */ React24.createElement(Play, { size: 24 })
|
|
2923
|
+
), showPrevNext && onNext && /* @__PURE__ */ React24.createElement(
|
|
2924
2924
|
"button",
|
|
2925
2925
|
{
|
|
2926
2926
|
onClick: onNext,
|
|
2927
2927
|
className: "rounded-full p-2 hover:bg-white/20 transition-colors",
|
|
2928
2928
|
title: "\u4E0B\u4E00\u4E2A"
|
|
2929
2929
|
},
|
|
2930
|
-
/* @__PURE__ */
|
|
2931
|
-
)), /* @__PURE__ */
|
|
2930
|
+
/* @__PURE__ */ React24.createElement(SkipForward, { size: 20 })
|
|
2931
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-4" }, (title || subtitle) && /* @__PURE__ */ React24.createElement("div", { className: "hidden text-sm font-medium opacity-80 md:block" }, title, subtitle && /* @__PURE__ */ React24.createElement("span", { className: "ml-2 text-xs opacity-60" }, subtitle)), onToggleListLoop && /* @__PURE__ */ React24.createElement(
|
|
2932
2932
|
"button",
|
|
2933
2933
|
{
|
|
2934
2934
|
onClick: onToggleListLoop,
|
|
2935
2935
|
className: `rounded-full p-2 transition-colors ${isListLooping ? "bg-green-500/30 hover:bg-green-500/50" : "hover:bg-white/20"}`,
|
|
2936
2936
|
title: isListLooping ? "\u5217\u8868\u5FAA\u73AF\uFF1A\u5F00\u542F" : "\u5217\u8868\u5FAA\u73AF\uFF1A\u5173\u95ED"
|
|
2937
2937
|
},
|
|
2938
|
-
/* @__PURE__ */
|
|
2939
|
-
), /* @__PURE__ */
|
|
2938
|
+
/* @__PURE__ */ React24.createElement(Repeat, { size: 20 })
|
|
2939
|
+
), /* @__PURE__ */ React24.createElement(
|
|
2940
2940
|
"button",
|
|
2941
2941
|
{
|
|
2942
2942
|
onClick: onToggleLoop,
|
|
2943
2943
|
className: `rounded-full p-2 transition-colors ${isLooping ? "bg-blue-500/30 hover:bg-blue-500/50" : "hover:bg-white/20"}`,
|
|
2944
2944
|
title: isLooping ? "\u5355\u66F2\u5FAA\u73AF\uFF1A\u5F00\u542F" : "\u5355\u66F2\u5FAA\u73AF\uFF1A\u5173\u95ED"
|
|
2945
2945
|
},
|
|
2946
|
-
/* @__PURE__ */
|
|
2947
|
-
), isCameraManual && onResetCamera && /* @__PURE__ */
|
|
2946
|
+
/* @__PURE__ */ React24.createElement(Repeat1, { size: 20 })
|
|
2947
|
+
), isCameraManual && onResetCamera && /* @__PURE__ */ React24.createElement(
|
|
2948
2948
|
"button",
|
|
2949
2949
|
{
|
|
2950
2950
|
onClick: onResetCamera,
|
|
2951
2951
|
className: "rounded-full p-2 bg-blue-500/30 text-blue-400 hover:bg-blue-500/50 hover:text-blue-300 transition-all animate-in zoom-in duration-300",
|
|
2952
2952
|
title: "\u6062\u590D\u521D\u59CB\u89C6\u89D2"
|
|
2953
2953
|
},
|
|
2954
|
-
/* @__PURE__ */
|
|
2955
|
-
), onToggleAxes && /* @__PURE__ */
|
|
2954
|
+
/* @__PURE__ */ React24.createElement(Camera, { size: 20 })
|
|
2955
|
+
), onToggleAxes && /* @__PURE__ */ React24.createElement(
|
|
2956
2956
|
"button",
|
|
2957
2957
|
{
|
|
2958
2958
|
onClick: onToggleAxes,
|
|
2959
2959
|
className: `rounded-full p-2 transition-colors ${showAxes ? "bg-blue-500/30 hover:bg-blue-500/50" : "hover:bg-white/20"}`,
|
|
2960
2960
|
title: "\u663E\u793A/\u9690\u85CF\u5750\u6807\u8F74"
|
|
2961
2961
|
},
|
|
2962
|
-
/* @__PURE__ */
|
|
2963
|
-
), showSettings && /* @__PURE__ */
|
|
2962
|
+
/* @__PURE__ */ React24.createElement(Grid3x3, { size: 20 })
|
|
2963
|
+
), showSettings && /* @__PURE__ */ React24.createElement(
|
|
2964
2964
|
"button",
|
|
2965
2965
|
{
|
|
2966
2966
|
onClick: onOpenSettings,
|
|
2967
2967
|
className: "rounded-full p-2 hover:bg-white/20 transition-colors",
|
|
2968
2968
|
title: "\u8D44\u6E90\u8BBE\u7F6E"
|
|
2969
2969
|
},
|
|
2970
|
-
/* @__PURE__ */
|
|
2971
|
-
), /* @__PURE__ */
|
|
2970
|
+
/* @__PURE__ */ React24.createElement(Settings, { size: 20 })
|
|
2971
|
+
), /* @__PURE__ */ React24.createElement(
|
|
2972
2972
|
"button",
|
|
2973
2973
|
{
|
|
2974
2974
|
onClick: onToggleFullscreen,
|
|
2975
2975
|
className: "rounded-full p-2 hover:bg-white/20 transition-colors",
|
|
2976
2976
|
title: isFullscreen ? "\u9000\u51FA\u5168\u5C4F" : "\u5168\u5C4F"
|
|
2977
2977
|
},
|
|
2978
|
-
isFullscreen ? /* @__PURE__ */
|
|
2978
|
+
isFullscreen ? /* @__PURE__ */ React24.createElement(Minimize, { size: 20 }) : /* @__PURE__ */ React24.createElement(Maximize, { size: 20 })
|
|
2979
2979
|
))));
|
|
2980
2980
|
};
|
|
2981
2981
|
var SettingsPanel = ({
|
|
@@ -2990,44 +2990,44 @@ var SettingsPanel = ({
|
|
|
2990
2990
|
}) => {
|
|
2991
2991
|
const renderListMode = () => {
|
|
2992
2992
|
if (!items) return null;
|
|
2993
|
-
return /* @__PURE__ */
|
|
2993
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-1 gap-2 p-4 sm:grid-cols-2" }, items.map((item) => /* @__PURE__ */ React24.createElement(
|
|
2994
2994
|
"button",
|
|
2995
2995
|
{
|
|
2996
2996
|
key: item.id,
|
|
2997
2997
|
onClick: () => onSelectId?.(item.id),
|
|
2998
2998
|
className: `group flex items-center gap-3 rounded-lg p-3 transition-all ${currentId === item.id ? "bg-blue-500/20 ring-1 ring-blue-500" : "bg-white/5 hover:bg-white/10"}`
|
|
2999
2999
|
},
|
|
3000
|
-
/* @__PURE__ */
|
|
3001
|
-
/* @__PURE__ */
|
|
3002
|
-
currentId === item.id && /* @__PURE__ */
|
|
3000
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex h-12 w-12 flex-shrink-0 items-center justify-center rounded bg-black/20 overflow-hidden" }, item.thumbnail ? /* @__PURE__ */ React24.createElement("img", { src: item.thumbnail, alt: item.name, className: "h-full w-full object-cover" }) : /* @__PURE__ */ React24.createElement(Video, { size: 20, className: "opacity-50" })),
|
|
3001
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex-1 text-left" }, /* @__PURE__ */ React24.createElement("div", { className: `font-medium ${currentId === item.id ? "text-blue-400" : "text-white"}` }, item.name), item.description && /* @__PURE__ */ React24.createElement("div", { className: "text-xs text-white/50 truncate" }, item.description)),
|
|
3002
|
+
currentId === item.id && /* @__PURE__ */ React24.createElement(Check, { size: 16, className: "text-blue-400" })
|
|
3003
3003
|
)));
|
|
3004
3004
|
};
|
|
3005
3005
|
const renderOptionGroup = (title, icon, type, list = [], currentVal) => {
|
|
3006
3006
|
if (!list || list.length === 0) return null;
|
|
3007
|
-
return /* @__PURE__ */
|
|
3007
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React24.createElement("div", { className: "mb-3 flex items-center gap-2 text-sm font-medium text-white/70" }, icon, /* @__PURE__ */ React24.createElement("span", null, title)), /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-2 gap-2 sm:grid-cols-3" }, list.map((opt) => /* @__PURE__ */ React24.createElement(
|
|
3008
3008
|
"button",
|
|
3009
3009
|
{
|
|
3010
3010
|
key: opt.id,
|
|
3011
3011
|
onClick: () => onSelectOption?.(type, opt.id),
|
|
3012
3012
|
className: `relative flex flex-col items-center gap-2 rounded-lg p-2 text-center transition-all ${currentVal === opt.id ? "bg-blue-500/20 ring-1 ring-blue-500" : "bg-white/5 hover:bg-white/10"}`
|
|
3013
3013
|
},
|
|
3014
|
-
opt.thumbnail ? /* @__PURE__ */
|
|
3015
|
-
/* @__PURE__ */
|
|
3016
|
-
currentVal === opt.id && /* @__PURE__ */
|
|
3014
|
+
opt.thumbnail ? /* @__PURE__ */ React24.createElement("img", { src: opt.thumbnail, alt: opt.name, className: "h-16 w-full rounded object-cover bg-black/20" }) : /* @__PURE__ */ React24.createElement("div", { className: "flex h-16 w-full items-center justify-center rounded bg-black/20" }, /* @__PURE__ */ React24.createElement("div", { className: "text-xs opacity-30" }, opt.name.slice(0, 2))),
|
|
3015
|
+
/* @__PURE__ */ React24.createElement("div", { className: `w-full truncate text-xs ${currentVal === opt.id ? "text-blue-400" : "text-white/80"}` }, opt.name),
|
|
3016
|
+
currentVal === opt.id && /* @__PURE__ */ React24.createElement("div", { className: "absolute top-1 right-1 rounded-full bg-blue-500 p-0.5" }, /* @__PURE__ */ React24.createElement(Check, { size: 10, className: "text-white" }))
|
|
3017
3017
|
))));
|
|
3018
3018
|
};
|
|
3019
3019
|
const renderOptionsMode = () => {
|
|
3020
3020
|
if (!options) return null;
|
|
3021
|
-
return /* @__PURE__ */
|
|
3021
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "p-4" }, renderOptionGroup("\u6A21\u578B", /* @__PURE__ */ React24.createElement(User, { size: 16 }), "models", options.models, currentSelection?.modelId), renderOptionGroup("\u52A8\u4F5C", /* @__PURE__ */ React24.createElement(Video, { size: 16 }), "motions", options.motions, currentSelection?.motionId), renderOptionGroup("\u955C\u5934", /* @__PURE__ */ React24.createElement(Image$1, { size: 16 }), "cameras", options.cameras, currentSelection?.cameraId), renderOptionGroup("\u97F3\u9891", /* @__PURE__ */ React24.createElement(Music, { size: 16 }), "audios", options.audios, currentSelection?.audioId), renderOptionGroup("\u821E\u53F0", /* @__PURE__ */ React24.createElement(Image$1, { size: 16 }), "stages", options.stages, currentSelection?.stageId));
|
|
3022
3022
|
};
|
|
3023
|
-
return /* @__PURE__ */
|
|
3023
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "absolute right-0 top-0 h-full w-full max-w-sm transform bg-[#1a1a1e]/95 backdrop-blur-md shadow-2xl transition-transform duration-300 ease-in-out overflow-y-auto z-20 border-l border-white/10" }, /* @__PURE__ */ React24.createElement("div", { className: "sticky top-0 z-10 flex items-center justify-between border-b border-white/10 bg-[#1a1a1e]/95 p-4 backdrop-blur-md" }, /* @__PURE__ */ React24.createElement("h2", { className: "text-lg font-semibold text-white" }, mode === "list" ? "\u64AD\u653E\u5217\u8868" : "\u81EA\u5B9A\u4E49\u573A\u666F"), /* @__PURE__ */ React24.createElement(
|
|
3024
3024
|
"button",
|
|
3025
3025
|
{
|
|
3026
3026
|
onClick: onClose,
|
|
3027
3027
|
className: "rounded-full p-2 text-white/50 hover:bg-white/10 hover:text-white"
|
|
3028
3028
|
},
|
|
3029
|
-
/* @__PURE__ */
|
|
3030
|
-
)), /* @__PURE__ */
|
|
3029
|
+
/* @__PURE__ */ React24.createElement(X, { size: 20 })
|
|
3030
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "pb-20" }, mode === "list" ? renderListMode() : renderOptionsMode()));
|
|
3031
3031
|
};
|
|
3032
3032
|
var MMDPlayerEnhancedDebugInfo = ({
|
|
3033
3033
|
isPlaying,
|
|
@@ -3052,7 +3052,7 @@ var MMDPlayerEnhancedDebugInfo = ({
|
|
|
3052
3052
|
}, 1e3);
|
|
3053
3053
|
return () => clearInterval(timer);
|
|
3054
3054
|
}, []);
|
|
3055
|
-
return /* @__PURE__ */
|
|
3055
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React24.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AE} MMDPlayerEnhanced Debug"), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5FAA\u73AF:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: isLooping, label: isLooping ? "On" : "Off" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u89C6\u56FE\u72B6\u6001"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5168\u5C4F:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: isFullscreen, label: isFullscreen ? "Yes" : "No" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5750\u6807\u8F74:"), /* @__PURE__ */ React24.createElement(StatusBadge, { active: showAxes, label: showAxes ? "Show" : "Hide" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u8D44\u6E90\u4FE1\u606F"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u6A21\u5F0F:"), /* @__PURE__ */ React24.createElement("span", { className: "text-blue-400 uppercase" }, mode)), mode === "list" && /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u603B\u6570:"), /* @__PURE__ */ React24.createElement("span", { className: "text-green-400" }, totalResources)), currentResourceId && /* @__PURE__ */ React24.createElement("div", { className: "mt-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React24.createElement("div", { className: "text-gray-400 text-[10px]" }, "\u5F53\u524D\u8D44\u6E90"), /* @__PURE__ */ React24.createElement("div", { className: "text-white truncate" }, currentResourceName || currentResourceId), /* @__PURE__ */ React24.createElement("div", { className: "text-gray-500 text-[10px] mt-1 truncate" }, "ID: ", currentResourceId))))), memoryInfo && /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5185\u5B58\u76D1\u63A7 (Chrome only)"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5DF2\u7528:"), /* @__PURE__ */ React24.createElement("span", { className: "text-yellow-400 font-bold" }, memoryInfo.used, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u603B\u8BA1:"), /* @__PURE__ */ React24.createElement("span", { className: "text-blue-400" }, memoryInfo.total, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u9650\u5236:"), /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, memoryInfo.limit, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React24.createElement("div", { className: "bg-gray-700 rounded-full h-2 overflow-hidden" }, /* @__PURE__ */ React24.createElement(
|
|
3056
3056
|
"div",
|
|
3057
3057
|
{
|
|
3058
3058
|
className: `h-full transition-all duration-300 ${parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100 > 80 ? "bg-red-500" : parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100 > 60 ? "bg-yellow-500" : "bg-green-500"}`,
|
|
@@ -3060,9 +3060,9 @@ var MMDPlayerEnhancedDebugInfo = ({
|
|
|
3060
3060
|
width: `${Math.min(100, parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100)}%`
|
|
3061
3061
|
}
|
|
3062
3062
|
}
|
|
3063
|
-
)), /* @__PURE__ */
|
|
3063
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "text-[9px] text-gray-500 mt-1 text-center" }, (parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100).toFixed(1), "%")))), /* @__PURE__ */ React24.createElement("div", { className: "mt-auto pt-4 border-t border-gray-700" }, /* @__PURE__ */ React24.createElement("div", { className: "text-gray-500 text-[10px]" }, "Last Update: ", (/* @__PURE__ */ new Date()).toLocaleTimeString())));
|
|
3064
3064
|
};
|
|
3065
|
-
var StatusBadge = ({ active, label }) => /* @__PURE__ */
|
|
3065
|
+
var StatusBadge = ({ active, label }) => /* @__PURE__ */ React24.createElement(
|
|
3066
3066
|
"span",
|
|
3067
3067
|
{
|
|
3068
3068
|
className: `px-2 py-0.5 rounded text-[10px] font-bold ${active ? "bg-green-600 text-white" : "bg-gray-700 text-gray-400"}`
|
|
@@ -3191,16 +3191,16 @@ var MMDPlayerEnhanced = ({
|
|
|
3191
3191
|
});
|
|
3192
3192
|
};
|
|
3193
3193
|
if (!currentResources) {
|
|
3194
|
-
return /* @__PURE__ */
|
|
3194
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "No Resources Configured");
|
|
3195
3195
|
}
|
|
3196
|
-
return /* @__PURE__ */
|
|
3196
|
+
return /* @__PURE__ */ React24.createElement(
|
|
3197
3197
|
"div",
|
|
3198
3198
|
{
|
|
3199
3199
|
ref: containerRef,
|
|
3200
3200
|
className: `relative overflow-hidden bg-black group flex ${className}`,
|
|
3201
3201
|
style
|
|
3202
3202
|
},
|
|
3203
|
-
/* @__PURE__ */
|
|
3203
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex-1 relative" }, /* @__PURE__ */ React24.createElement(
|
|
3204
3204
|
MMDPlayerBase,
|
|
3205
3205
|
{
|
|
3206
3206
|
key: mode === "list" ? currentId : JSON.stringify(currentResources),
|
|
@@ -3232,7 +3232,7 @@ var MMDPlayerEnhanced = ({
|
|
|
3232
3232
|
},
|
|
3233
3233
|
...rest
|
|
3234
3234
|
}
|
|
3235
|
-
), isLoading && /* @__PURE__ */
|
|
3235
|
+
), isLoading && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React24.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" })), /* @__PURE__ */ React24.createElement("div", { className: `transition-opacity duration-300 ${isPlaying && !showSettings ? "opacity-0 group-hover:opacity-100" : "opacity-100"}` }, /* @__PURE__ */ React24.createElement(
|
|
3236
3236
|
ControlPanel,
|
|
3237
3237
|
{
|
|
3238
3238
|
isPlaying,
|
|
@@ -3247,7 +3247,7 @@ var MMDPlayerEnhanced = ({
|
|
|
3247
3247
|
onToggleAxes: () => setShowAxes(!showAxes),
|
|
3248
3248
|
onOpenSettings: () => setShowSettings(true)
|
|
3249
3249
|
}
|
|
3250
|
-
)), showSettings && (mode === "list" || mode === "options") && /* @__PURE__ */
|
|
3250
|
+
)), showSettings && (mode === "list" || mode === "options") && /* @__PURE__ */ React24.createElement(
|
|
3251
3251
|
SettingsPanel,
|
|
3252
3252
|
{
|
|
3253
3253
|
mode,
|
|
@@ -3260,7 +3260,7 @@ var MMDPlayerEnhanced = ({
|
|
|
3260
3260
|
onClose: () => setShowSettings(false)
|
|
3261
3261
|
}
|
|
3262
3262
|
)),
|
|
3263
|
-
showDebugInfo && /* @__PURE__ */
|
|
3263
|
+
showDebugInfo && /* @__PURE__ */ React24.createElement("div", { className: "w-96 bg-gray-900/95 border-l border-gray-700 p-4 overflow-y-auto" }, /* @__PURE__ */ React24.createElement(
|
|
3264
3264
|
MMDPlayerEnhancedDebugInfo,
|
|
3265
3265
|
{
|
|
3266
3266
|
isPlaying,
|
|
@@ -3302,14 +3302,14 @@ var MMDPlaylistDebugInfo = ({
|
|
|
3302
3302
|
}, 1e3);
|
|
3303
3303
|
return () => clearInterval(timer);
|
|
3304
3304
|
}, []);
|
|
3305
|
-
return /* @__PURE__ */
|
|
3305
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React24.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AD} MMDPlaylist Debug"), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u5217\u8868"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "text-white truncate" }, playlistName), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u8FDB\u5EA6:"), /* @__PURE__ */ React24.createElement("span", { className: "text-blue-400" }, currentIndex + 1, " / ", totalNodes)), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5217\u8868\u5FAA\u73AF:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isListLooping, label: isListLooping ? "On" : "Off" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5F53\u524D\u8282\u70B9"), /* @__PURE__ */ React24.createElement("div", { className: "p-2 bg-gray-800 rounded space-y-1" }, /* @__PURE__ */ React24.createElement("div", { className: "text-white font-semibold truncate" }, currentNode.name), /* @__PURE__ */ React24.createElement("div", { className: "text-gray-500 text-[10px] truncate" }, "ID: ", currentNode.id), currentNode.duration && /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u65F6\u957F:"), /* @__PURE__ */ React24.createElement("span", { className: "text-green-400" }, currentNode.duration, "s")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u8282\u70B9\u5FAA\u73AF:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isNodeLooping, label: isNodeLooping ? "On" : "Off" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u9884\u52A0\u8F7D\u7B56\u7565"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u7B56\u7565:"), /* @__PURE__ */ React24.createElement("span", { className: `px-2 py-0.5 rounded text-[10px] font-bold uppercase ${preloadStrategy === "all" ? "bg-red-600 text-white" : preloadStrategy === "next" ? "bg-yellow-600 text-white" : "bg-gray-700 text-gray-400"}` }, preloadStrategy)), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5DF2\u9884\u52A0\u8F7D:"), /* @__PURE__ */ React24.createElement("span", { className: "text-purple-400" }, preloadedNodes.length)), preloadedNodes.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "mt-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React24.createElement("div", { className: "text-gray-400 text-[10px] mb-1" }, "\u9884\u52A0\u8F7D\u8282\u70B9\u7D22\u5F15"), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-wrap gap-1" }, preloadedNodes.map((idx) => /* @__PURE__ */ React24.createElement(
|
|
3306
3306
|
"span",
|
|
3307
3307
|
{
|
|
3308
3308
|
key: idx,
|
|
3309
3309
|
className: `px-1.5 py-0.5 rounded text-[10px] ${idx === currentIndex ? "bg-green-600 text-white font-bold" : "bg-gray-700 text-gray-300"}`
|
|
3310
3310
|
},
|
|
3311
3311
|
idx
|
|
3312
|
-
)))))), /* @__PURE__ */
|
|
3312
|
+
)))))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u89C6\u56FE\u72B6\u6001"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5168\u5C4F:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: isFullscreen, label: isFullscreen ? "Yes" : "No" })), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5750\u6807\u8F74:"), /* @__PURE__ */ React24.createElement(StatusBadge2, { active: showAxes, label: showAxes ? "Show" : "Hide" })))), memoryInfo && /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5185\u5B58\u76D1\u63A7 (Chrome only)"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u5DF2\u7528:"), /* @__PURE__ */ React24.createElement("span", { className: "text-yellow-400 font-bold" }, memoryInfo.used, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u603B\u8BA1:"), /* @__PURE__ */ React24.createElement("span", { className: "text-blue-400" }, memoryInfo.total, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, "\u9650\u5236:"), /* @__PURE__ */ React24.createElement("span", { className: "text-gray-400" }, memoryInfo.limit, " MB")), /* @__PURE__ */ React24.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React24.createElement("div", { className: "bg-gray-700 rounded-full h-2 overflow-hidden" }, /* @__PURE__ */ React24.createElement(
|
|
3313
3313
|
"div",
|
|
3314
3314
|
{
|
|
3315
3315
|
className: `h-full transition-all duration-300 ${parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100 > 80 ? "bg-red-500" : parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100 > 60 ? "bg-yellow-500" : "bg-green-500"}`,
|
|
@@ -3317,18 +3317,18 @@ var MMDPlaylistDebugInfo = ({
|
|
|
3317
3317
|
width: `${Math.min(100, parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100)}%`
|
|
3318
3318
|
}
|
|
3319
3319
|
}
|
|
3320
|
-
)), /* @__PURE__ */
|
|
3320
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "text-[9px] text-gray-500 mt-1 text-center" }, (parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100).toFixed(1), "%")))), /* @__PURE__ */ React24.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React24.createElement("h4", { className: "text-gray-400 mb-2" }, "\u8282\u70B9\u5217\u8868"), /* @__PURE__ */ React24.createElement("div", { className: "space-y-1 max-h-40 overflow-y-auto" }, Array.from({ length: totalNodes }).map((_, idx) => /* @__PURE__ */ React24.createElement(
|
|
3321
3321
|
"div",
|
|
3322
3322
|
{
|
|
3323
3323
|
key: idx,
|
|
3324
3324
|
className: `px-2 py-1 rounded text-[10px] flex items-center justify-between ${idx === currentIndex ? "bg-blue-600 text-white font-bold" : preloadedNodes.includes(idx) ? "bg-yellow-900/50 text-yellow-300" : "bg-gray-800 text-gray-400"}`
|
|
3325
3325
|
},
|
|
3326
|
-
/* @__PURE__ */
|
|
3327
|
-
idx === currentIndex && /* @__PURE__ */
|
|
3328
|
-
preloadedNodes.includes(idx) && idx !== currentIndex && /* @__PURE__ */
|
|
3329
|
-
)))), /* @__PURE__ */
|
|
3326
|
+
/* @__PURE__ */ React24.createElement("span", null, "\u8282\u70B9 ", idx),
|
|
3327
|
+
idx === currentIndex && /* @__PURE__ */ React24.createElement("span", null, "\u25B6"),
|
|
3328
|
+
preloadedNodes.includes(idx) && idx !== currentIndex && /* @__PURE__ */ React24.createElement("span", null, "\u23F3")
|
|
3329
|
+
)))), /* @__PURE__ */ React24.createElement("div", { className: "mt-auto pt-4 border-t border-gray-700" }, /* @__PURE__ */ React24.createElement("div", { className: "text-gray-500 text-[10px]" }, "Last Update: ", (/* @__PURE__ */ new Date()).toLocaleTimeString())));
|
|
3330
3330
|
};
|
|
3331
|
-
var StatusBadge2 = ({ active, label }) => /* @__PURE__ */
|
|
3331
|
+
var StatusBadge2 = ({ active, label }) => /* @__PURE__ */ React24.createElement(
|
|
3332
3332
|
"span",
|
|
3333
3333
|
{
|
|
3334
3334
|
className: `px-2 py-0.5 rounded text-[10px] font-bold ${active ? "bg-green-600 text-white" : "bg-gray-700 text-gray-400"}`
|
|
@@ -3494,17 +3494,17 @@ var MMDPlaylist = ({
|
|
|
3494
3494
|
};
|
|
3495
3495
|
}, []);
|
|
3496
3496
|
if (!currentNode) {
|
|
3497
|
-
return /* @__PURE__ */
|
|
3497
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u64AD\u653E\u5217\u8868\u4E3A\u7A7A");
|
|
3498
3498
|
}
|
|
3499
3499
|
const showPrevNext = nodes.length > 1;
|
|
3500
|
-
return /* @__PURE__ */
|
|
3500
|
+
return /* @__PURE__ */ React24.createElement(
|
|
3501
3501
|
"div",
|
|
3502
3502
|
{
|
|
3503
3503
|
ref: containerRef,
|
|
3504
3504
|
className: `relative overflow-hidden bg-black group flex h-full ${className}`,
|
|
3505
3505
|
style
|
|
3506
3506
|
},
|
|
3507
|
-
/* @__PURE__ */
|
|
3507
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex-1 relative" }, !isTransitioning && /* @__PURE__ */ React24.createElement(
|
|
3508
3508
|
MMDPlayerBase,
|
|
3509
3509
|
{
|
|
3510
3510
|
key: currentNode.id,
|
|
@@ -3527,12 +3527,12 @@ var MMDPlaylist = ({
|
|
|
3527
3527
|
onEnded: handleEnded,
|
|
3528
3528
|
onError
|
|
3529
3529
|
}
|
|
3530
|
-
), (isLoading || isTransitioning) && /* @__PURE__ */
|
|
3530
|
+
), (isLoading || isTransitioning) && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col items-center gap-3" }, /* @__PURE__ */ React24.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" }), /* @__PURE__ */ React24.createElement("div", { className: "text-sm text-white/80" }, isTransitioning ? "\u5207\u6362\u4E2D..." : `\u6B63\u5728\u52A0\u8F7D ${currentIndex + 1} / ${nodes.length}`))), /* @__PURE__ */ React24.createElement(
|
|
3531
3531
|
"div",
|
|
3532
3532
|
{
|
|
3533
3533
|
className: `transition-opacity duration-300 ${isPlaying && !showPlaylist ? "opacity-0 group-hover:opacity-100" : "opacity-100"}`
|
|
3534
3534
|
},
|
|
3535
|
-
/* @__PURE__ */
|
|
3535
|
+
/* @__PURE__ */ React24.createElement(
|
|
3536
3536
|
ControlPanel,
|
|
3537
3537
|
{
|
|
3538
3538
|
isPlaying,
|
|
@@ -3559,15 +3559,15 @@ var MMDPlaylist = ({
|
|
|
3559
3559
|
}
|
|
3560
3560
|
}
|
|
3561
3561
|
)
|
|
3562
|
-
), showPlaylist && /* @__PURE__ */
|
|
3562
|
+
), showPlaylist && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-20 flex items-end bg-black/80 backdrop-blur-sm" }, /* @__PURE__ */ React24.createElement("div", { className: "w-full max-h-[60vh] overflow-y-auto bg-gray-900/95 rounded-t-xl" }, /* @__PURE__ */ React24.createElement("div", { className: "sticky top-0 flex items-center justify-between bg-gray-800 px-4 py-3 border-b border-gray-700" }, /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("h3", { className: "text-white font-semibold" }, playlist.name), /* @__PURE__ */ React24.createElement("p", { className: "text-xs text-gray-400 mt-0.5" }, "\u5171 ", nodes.length, " \u4E2A\u8282\u70B9")), /* @__PURE__ */ React24.createElement(
|
|
3563
3563
|
"button",
|
|
3564
3564
|
{
|
|
3565
3565
|
onClick: () => setShowPlaylist(false),
|
|
3566
3566
|
className: "p-2 hover:bg-white/10 rounded-lg transition-colors",
|
|
3567
3567
|
"aria-label": "\u5173\u95ED\u64AD\u653E\u5217\u8868"
|
|
3568
3568
|
},
|
|
3569
|
-
/* @__PURE__ */
|
|
3570
|
-
)), /* @__PURE__ */
|
|
3569
|
+
/* @__PURE__ */ React24.createElement("svg", { className: "w-5 h-5 text-white", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React24.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
|
|
3570
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "p-2" }, nodes.map((node, index) => /* @__PURE__ */ React24.createElement(
|
|
3571
3571
|
"button",
|
|
3572
3572
|
{
|
|
3573
3573
|
key: node.id,
|
|
@@ -3577,17 +3577,17 @@ var MMDPlaylist = ({
|
|
|
3577
3577
|
},
|
|
3578
3578
|
className: `w-full flex items-center gap-3 p-3 rounded-lg mb-2 transition-all ${index === currentIndex ? "bg-blue-600 text-white" : "bg-gray-800 text-gray-300 hover:bg-gray-700"}`
|
|
3579
3579
|
},
|
|
3580
|
-
/* @__PURE__ */
|
|
3580
|
+
/* @__PURE__ */ React24.createElement(
|
|
3581
3581
|
"div",
|
|
3582
3582
|
{
|
|
3583
3583
|
className: `flex-shrink-0 w-8 h-8 rounded-full flex items-center justify-center text-sm font-semibold ${index === currentIndex ? "bg-white/20" : "bg-gray-700"}`
|
|
3584
3584
|
},
|
|
3585
3585
|
index + 1
|
|
3586
3586
|
),
|
|
3587
|
-
/* @__PURE__ */
|
|
3588
|
-
index === currentIndex && /* @__PURE__ */
|
|
3587
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex-1 text-left" }, /* @__PURE__ */ React24.createElement("div", { className: "font-medium" }, node.name), node.duration && /* @__PURE__ */ React24.createElement("div", { className: "text-xs opacity-75 mt-0.5" }, Math.floor(node.duration / 60), ":", String(Math.floor(node.duration % 60)).padStart(2, "0"))),
|
|
3588
|
+
index === currentIndex && /* @__PURE__ */ React24.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React24.createElement("svg", { className: "w-5 h-5", fill: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React24.createElement("path", { d: "M8 5v14l11-7z" })))
|
|
3589
3589
|
)))))),
|
|
3590
|
-
showDebugInfo && /* @__PURE__ */
|
|
3590
|
+
showDebugInfo && /* @__PURE__ */ React24.createElement("div", { className: "w-96 flex-shrink-0 bg-gray-900/95 border-l border-gray-700 p-4 overflow-y-auto h-full" }, /* @__PURE__ */ React24.createElement(
|
|
3591
3591
|
MMDPlaylistDebugInfo,
|
|
3592
3592
|
{
|
|
3593
3593
|
playlistName: playlist.name,
|
|
@@ -3638,13 +3638,13 @@ if (typeof document !== "undefined" && !document.getElementById("dialogue-box-an
|
|
|
3638
3638
|
document.head.appendChild(style);
|
|
3639
3639
|
}
|
|
3640
3640
|
var defaultTheme = {
|
|
3641
|
-
backgroundColor: "rgba(
|
|
3642
|
-
borderColor: "rgba(
|
|
3643
|
-
textColor: "#
|
|
3644
|
-
speakerBgColor: "rgba(
|
|
3645
|
-
speakerTextColor: "#
|
|
3646
|
-
opacity:
|
|
3647
|
-
blur: "
|
|
3641
|
+
backgroundColor: "rgba(248, 250, 252, 0.95)",
|
|
3642
|
+
borderColor: "rgba(203, 213, 225, 0.8)",
|
|
3643
|
+
textColor: "#22c55e",
|
|
3644
|
+
speakerBgColor: "rgba(148, 163, 184, 0.9)",
|
|
3645
|
+
speakerTextColor: "#22c55e",
|
|
3646
|
+
opacity: 1,
|
|
3647
|
+
blur: "16px",
|
|
3648
3648
|
continueHint: "\u70B9\u51FB\u7EE7\u7EED \u25BC",
|
|
3649
3649
|
showContinueHint: true
|
|
3650
3650
|
};
|
|
@@ -3733,7 +3733,14 @@ var DialogueBox = ({
|
|
|
3733
3733
|
displayedText,
|
|
3734
3734
|
isComplete
|
|
3735
3735
|
});
|
|
3736
|
-
|
|
3736
|
+
console.log("[DialogueBox] Theme colors:", {
|
|
3737
|
+
textColor: theme.textColor,
|
|
3738
|
+
backgroundColor: theme.backgroundColor,
|
|
3739
|
+
speakerBgColor: theme.speakerBgColor,
|
|
3740
|
+
speakerTextColor: theme.speakerTextColor,
|
|
3741
|
+
fullTheme: theme
|
|
3742
|
+
});
|
|
3743
|
+
const dialogueContent = /* @__PURE__ */ React24.createElement(
|
|
3737
3744
|
"div",
|
|
3738
3745
|
{
|
|
3739
3746
|
className: `${className || ""}`,
|
|
@@ -3749,7 +3756,7 @@ var DialogueBox = ({
|
|
|
3749
3756
|
pointerEvents: "auto"
|
|
3750
3757
|
}
|
|
3751
3758
|
},
|
|
3752
|
-
/* @__PURE__ */
|
|
3759
|
+
/* @__PURE__ */ React24.createElement(
|
|
3753
3760
|
"div",
|
|
3754
3761
|
{
|
|
3755
3762
|
className: "w-full h-full rounded-t-3xl border cursor-pointer select-none transition-all hover:border-white/50 hover:shadow-2xl flex flex-col relative overflow-hidden",
|
|
@@ -3763,128 +3770,128 @@ var DialogueBox = ({
|
|
|
3763
3770
|
position: "relative",
|
|
3764
3771
|
display: "flex",
|
|
3765
3772
|
background: `linear-gradient(135deg,
|
|
3766
|
-
rgba(
|
|
3767
|
-
rgba(
|
|
3768
|
-
rgba(
|
|
3773
|
+
rgba(248, 250, 252, 0.98) 0%,
|
|
3774
|
+
rgba(241, 245, 249, 0.95) 50%,
|
|
3775
|
+
rgba(226, 232, 240, 0.92) 100%)`,
|
|
3769
3776
|
boxShadow: `
|
|
3770
|
-
0 -8px 40px rgba(
|
|
3771
|
-
0 -4px 16px rgba(
|
|
3772
|
-
inset 0 1px 0 rgba(255, 255, 255, 0.
|
|
3773
|
-
inset 0 -1px 0 rgba(
|
|
3777
|
+
0 -8px 40px rgba(148, 163, 184, 0.2),
|
|
3778
|
+
0 -4px 16px rgba(100, 116, 139, 0.15),
|
|
3779
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.8),
|
|
3780
|
+
inset 0 -1px 0 rgba(203, 213, 225, 0.5)
|
|
3774
3781
|
`
|
|
3775
3782
|
}
|
|
3776
3783
|
},
|
|
3777
|
-
/* @__PURE__ */
|
|
3784
|
+
/* @__PURE__ */ React24.createElement(
|
|
3778
3785
|
"div",
|
|
3779
3786
|
{
|
|
3780
|
-
className: "absolute inset-0 opacity-
|
|
3787
|
+
className: "absolute inset-0 opacity-8 pointer-events-none",
|
|
3781
3788
|
style: {
|
|
3782
3789
|
background: `linear-gradient(45deg,
|
|
3783
|
-
rgba(
|
|
3784
|
-
rgba(
|
|
3785
|
-
rgba(
|
|
3786
|
-
rgba(
|
|
3787
|
-
rgba(
|
|
3790
|
+
rgba(226, 232, 240, 0.3) 0%,
|
|
3791
|
+
rgba(203, 213, 225, 0.3) 25%,
|
|
3792
|
+
rgba(241, 245, 249, 0.3) 50%,
|
|
3793
|
+
rgba(226, 232, 240, 0.3) 75%,
|
|
3794
|
+
rgba(203, 213, 225, 0.3) 100%)`,
|
|
3788
3795
|
backgroundSize: "400% 400%",
|
|
3789
3796
|
animation: "gradientShift 15s ease infinite"
|
|
3790
3797
|
}
|
|
3791
3798
|
}
|
|
3792
3799
|
),
|
|
3793
|
-
/* @__PURE__ */
|
|
3800
|
+
/* @__PURE__ */ React24.createElement(
|
|
3794
3801
|
"div",
|
|
3795
3802
|
{
|
|
3796
3803
|
className: "absolute top-0 left-0 right-0 h-1",
|
|
3797
3804
|
style: {
|
|
3798
|
-
background: "linear-gradient(90deg, transparent, rgba(255,255,255,0.
|
|
3805
|
+
background: "linear-gradient(90deg, transparent, rgba(255,255,255,0.9), transparent)"
|
|
3799
3806
|
}
|
|
3800
3807
|
}
|
|
3801
3808
|
),
|
|
3802
|
-
/* @__PURE__ */
|
|
3809
|
+
/* @__PURE__ */ React24.createElement(
|
|
3803
3810
|
"div",
|
|
3804
3811
|
{
|
|
3805
3812
|
className: "absolute bottom-0 left-0 right-0 h-px",
|
|
3806
3813
|
style: {
|
|
3807
|
-
background: "linear-gradient(90deg, transparent, rgba(
|
|
3814
|
+
background: "linear-gradient(90deg, transparent, rgba(203, 213, 225, 0.6), transparent)"
|
|
3808
3815
|
}
|
|
3809
3816
|
}
|
|
3810
3817
|
),
|
|
3811
|
-
showControls && /* @__PURE__ */
|
|
3818
|
+
showControls && /* @__PURE__ */ React24.createElement("div", { className: "flex justify-end gap-3 px-6 pt-4 pb-2 shrink-0 relative z-10" }, showHistoryButton && /* @__PURE__ */ React24.createElement(
|
|
3812
3819
|
"button",
|
|
3813
3820
|
{
|
|
3814
3821
|
onClick: (e) => {
|
|
3815
3822
|
e.stopPropagation();
|
|
3816
3823
|
onOpenHistory?.();
|
|
3817
3824
|
},
|
|
3818
|
-
className: "px-4 py-2 text-xs rounded-xl text-
|
|
3825
|
+
className: "px-4 py-2 text-xs rounded-xl text-slate-700 font-medium hover:text-slate-900 transition-all backdrop-blur-lg border border-slate-300 hover:border-slate-400 hover:scale-105 active:scale-95 shadow-lg",
|
|
3819
3826
|
style: {
|
|
3820
|
-
background: "linear-gradient(135deg, rgba(
|
|
3821
|
-
boxShadow: "0 4px 16px rgba(
|
|
3827
|
+
background: "linear-gradient(135deg, rgba(241, 245, 249, 0.95), rgba(226, 232, 240, 0.9))",
|
|
3828
|
+
boxShadow: "0 4px 16px rgba(100, 116, 139, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
|
|
3822
3829
|
},
|
|
3823
3830
|
title: "\u5386\u53F2\u8BB0\u5F55"
|
|
3824
3831
|
},
|
|
3825
3832
|
"\u{1F4DC} \u5386\u53F2"
|
|
3826
|
-
), isCameraManual && /* @__PURE__ */
|
|
3833
|
+
), isCameraManual && /* @__PURE__ */ React24.createElement(
|
|
3827
3834
|
"button",
|
|
3828
3835
|
{
|
|
3829
3836
|
onClick: (e) => {
|
|
3830
3837
|
e.stopPropagation();
|
|
3831
3838
|
onResetCamera?.();
|
|
3832
3839
|
},
|
|
3833
|
-
className: "px-4 py-2 text-xs rounded-xl text-white font-medium hover:text-white transition-all backdrop-blur-lg border border-blue-
|
|
3840
|
+
className: "px-4 py-2 text-xs rounded-xl text-white font-medium hover:text-white transition-all backdrop-blur-lg border border-blue-300 hover:border-blue-400 hover:scale-105 active:scale-95 shadow-lg animate-in zoom-in duration-300",
|
|
3834
3841
|
style: {
|
|
3835
|
-
background: "linear-gradient(135deg, rgba(59, 130, 246, 0.
|
|
3836
|
-
boxShadow: "0 4px 16px rgba(59, 130, 246, 0.
|
|
3842
|
+
background: "linear-gradient(135deg, rgba(59, 130, 246, 0.85), rgba(37, 99, 235, 0.75))",
|
|
3843
|
+
boxShadow: "0 4px 16px rgba(59, 130, 246, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.4)"
|
|
3837
3844
|
},
|
|
3838
3845
|
title: "\u6062\u590D\u521D\u59CB\u89C6\u89D2"
|
|
3839
3846
|
},
|
|
3840
3847
|
"\u{1F3A5} \u6062\u590D\u89C6\u89D2"
|
|
3841
|
-
), showAutoButton && /* @__PURE__ */
|
|
3848
|
+
), showAutoButton && /* @__PURE__ */ React24.createElement(
|
|
3842
3849
|
"button",
|
|
3843
3850
|
{
|
|
3844
3851
|
onClick: (e) => {
|
|
3845
3852
|
e.stopPropagation();
|
|
3846
3853
|
onToggleAuto?.();
|
|
3847
3854
|
},
|
|
3848
|
-
className: `px-4 py-2 text-xs rounded-xl font-medium transition-all backdrop-blur-lg border hover:scale-105 active:scale-95 shadow-lg ${isAutoMode ? "border-
|
|
3855
|
+
className: `px-4 py-2 text-xs rounded-xl font-medium transition-all backdrop-blur-lg border hover:scale-105 active:scale-95 shadow-lg ${isAutoMode ? "border-slate-400 text-slate-900" : "border-slate-300 hover:border-slate-400 text-slate-700"}`,
|
|
3849
3856
|
style: {
|
|
3850
|
-
background: isAutoMode ? "linear-gradient(135deg, rgba(
|
|
3851
|
-
boxShadow: isAutoMode ? "0 4px 20px rgba(
|
|
3857
|
+
background: isAutoMode ? "linear-gradient(135deg, rgba(203, 213, 225, 0.95), rgba(148, 163, 184, 0.85))" : "linear-gradient(135deg, rgba(241, 245, 249, 0.95), rgba(226, 232, 240, 0.9))",
|
|
3858
|
+
boxShadow: isAutoMode ? "0 4px 20px rgba(100, 116, 139, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.8)" : "0 4px 16px rgba(100, 116, 139, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
|
|
3852
3859
|
},
|
|
3853
3860
|
title: "\u81EA\u52A8\u64AD\u653E"
|
|
3854
3861
|
},
|
|
3855
3862
|
"\u25B6 \u81EA\u52A8"
|
|
3856
|
-
), showSkipButton && /* @__PURE__ */
|
|
3863
|
+
), showSkipButton && /* @__PURE__ */ React24.createElement(
|
|
3857
3864
|
"button",
|
|
3858
3865
|
{
|
|
3859
3866
|
onClick: (e) => {
|
|
3860
3867
|
e.stopPropagation();
|
|
3861
3868
|
onSkip?.();
|
|
3862
3869
|
},
|
|
3863
|
-
className: "px-4 py-2 text-xs rounded-xl text-
|
|
3870
|
+
className: "px-4 py-2 text-xs rounded-xl text-slate-700 font-medium hover:text-slate-900 transition-all backdrop-blur-lg border border-slate-300 hover:border-slate-400 hover:scale-105 active:scale-95 shadow-lg",
|
|
3864
3871
|
style: {
|
|
3865
|
-
background: "linear-gradient(135deg, rgba(
|
|
3866
|
-
boxShadow: "0 4px 16px rgba(
|
|
3872
|
+
background: "linear-gradient(135deg, rgba(241, 245, 249, 0.95), rgba(226, 232, 240, 0.9))",
|
|
3873
|
+
boxShadow: "0 4px 16px rgba(100, 116, 139, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
|
|
3867
3874
|
},
|
|
3868
3875
|
title: "\u5FEB\u8FDB"
|
|
3869
3876
|
},
|
|
3870
3877
|
"\u23E9 \u5FEB\u8FDB"
|
|
3871
3878
|
)),
|
|
3872
|
-
/* @__PURE__ */
|
|
3879
|
+
/* @__PURE__ */ React24.createElement("div", { className: "px-8 pb-6 pt-4 flex-1 flex flex-col justify-start overflow-y-auto relative z-10" }, dialogue.speaker && /* @__PURE__ */ React24.createElement(
|
|
3873
3880
|
"div",
|
|
3874
3881
|
{
|
|
3875
3882
|
className: "inline-block px-6 py-2.5 rounded-2xl mb-4 text-sm font-bold shadow-2xl self-start relative overflow-hidden transition-all hover:scale-105",
|
|
3876
3883
|
style: {
|
|
3877
3884
|
color: "#ffffff",
|
|
3878
3885
|
background: `linear-gradient(135deg,
|
|
3879
|
-
rgba(
|
|
3880
|
-
rgba(
|
|
3881
|
-
backdropFilter: "blur(
|
|
3882
|
-
WebkitBackdropFilter: "blur(
|
|
3883
|
-
boxShadow: "0
|
|
3884
|
-
border: "1px solid rgba(
|
|
3886
|
+
rgba(100, 116, 139, 0.95) 0%,
|
|
3887
|
+
rgba(71, 85, 105, 0.9) 100%)`,
|
|
3888
|
+
backdropFilter: "blur(12px)",
|
|
3889
|
+
WebkitBackdropFilter: "blur(12px)",
|
|
3890
|
+
boxShadow: "0 4px 16px rgba(100, 116, 139, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.3)",
|
|
3891
|
+
border: "1px solid rgba(148, 163, 184, 0.5)"
|
|
3885
3892
|
}
|
|
3886
3893
|
},
|
|
3887
|
-
/* @__PURE__ */
|
|
3894
|
+
/* @__PURE__ */ React24.createElement(
|
|
3888
3895
|
"div",
|
|
3889
3896
|
{
|
|
3890
3897
|
className: "absolute inset-0 opacity-30",
|
|
@@ -3895,40 +3902,40 @@ var DialogueBox = ({
|
|
|
3895
3902
|
}
|
|
3896
3903
|
}
|
|
3897
3904
|
),
|
|
3898
|
-
/* @__PURE__ */
|
|
3899
|
-
), /* @__PURE__ */
|
|
3905
|
+
/* @__PURE__ */ React24.createElement("span", { className: "relative z-10 drop-shadow-lg" }, dialogue.speaker)
|
|
3906
|
+
), /* @__PURE__ */ React24.createElement(
|
|
3900
3907
|
"div",
|
|
3901
3908
|
{
|
|
3902
3909
|
className: "text-lg leading-relaxed relative",
|
|
3903
3910
|
style: {
|
|
3904
3911
|
color: theme.textColor,
|
|
3905
|
-
textShadow: "0 2px
|
|
3912
|
+
textShadow: "0 1px 2px rgba(0, 0, 0, 0.1)"
|
|
3906
3913
|
}
|
|
3907
3914
|
},
|
|
3908
|
-
/* @__PURE__ */
|
|
3915
|
+
/* @__PURE__ */ React24.createElement("span", { className: "inline-block", style: {
|
|
3909
3916
|
animation: !isComplete ? "textFadeIn 0.3s ease-out" : "none"
|
|
3910
3917
|
} }, displayedText),
|
|
3911
|
-
!isComplete && /* @__PURE__ */
|
|
3918
|
+
!isComplete && /* @__PURE__ */ React24.createElement(
|
|
3912
3919
|
"span",
|
|
3913
3920
|
{
|
|
3914
3921
|
className: "inline-block w-1 h-6 ml-1 align-middle",
|
|
3915
3922
|
style: {
|
|
3916
|
-
background: "linear-gradient(to bottom,
|
|
3923
|
+
background: "linear-gradient(to bottom, #22c55e, #4ade80)",
|
|
3917
3924
|
animation: "cursorBlink 1s ease-in-out infinite",
|
|
3918
|
-
boxShadow: "0 0
|
|
3925
|
+
boxShadow: "0 0 8px rgba(34, 197, 94, 0.6)"
|
|
3919
3926
|
}
|
|
3920
3927
|
}
|
|
3921
3928
|
)
|
|
3922
|
-
),
|
|
3929
|
+
), /* @__PURE__ */ React24.createElement("div", { className: "flex justify-end mt-4 h-10 relative" }, isComplete && theme.showContinueHint && /* @__PURE__ */ React24.createElement(
|
|
3923
3930
|
"span",
|
|
3924
3931
|
{
|
|
3925
|
-
className: "text-sm px-4 py-2 rounded-full backdrop-blur-lg font-medium",
|
|
3932
|
+
className: "text-sm px-4 py-2 rounded-full backdrop-blur-lg font-medium absolute right-0",
|
|
3926
3933
|
style: {
|
|
3927
|
-
background: "linear-gradient(135deg, rgba(
|
|
3928
|
-
color: "rgba(
|
|
3934
|
+
background: "linear-gradient(135deg, rgba(203, 213, 225, 0.9), rgba(226, 232, 240, 0.85))",
|
|
3935
|
+
color: "rgba(71, 85, 105, 0.9)",
|
|
3929
3936
|
animation: "bounce 2s ease-in-out infinite",
|
|
3930
|
-
boxShadow: "0 4px 16px rgba(
|
|
3931
|
-
border: "1px solid rgba(
|
|
3937
|
+
boxShadow: "0 4px 16px rgba(100, 116, 139, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.6)",
|
|
3938
|
+
border: "1px solid rgba(148, 163, 184, 0.4)"
|
|
3932
3939
|
}
|
|
3933
3940
|
},
|
|
3934
3941
|
theme.continueHint
|
|
@@ -3957,7 +3964,7 @@ var HistoryPanel = ({
|
|
|
3957
3964
|
useEffect(() => {
|
|
3958
3965
|
setIsMounted(true);
|
|
3959
3966
|
}, []);
|
|
3960
|
-
const historyContent = /* @__PURE__ */
|
|
3967
|
+
const historyContent = /* @__PURE__ */ React24.createElement(
|
|
3961
3968
|
"div",
|
|
3962
3969
|
{
|
|
3963
3970
|
className: `fixed inset-0 flex flex-col ${className}`,
|
|
@@ -3968,7 +3975,7 @@ var HistoryPanel = ({
|
|
|
3968
3975
|
},
|
|
3969
3976
|
onClick: onClose
|
|
3970
3977
|
},
|
|
3971
|
-
/* @__PURE__ */
|
|
3978
|
+
/* @__PURE__ */ React24.createElement(
|
|
3972
3979
|
"div",
|
|
3973
3980
|
{
|
|
3974
3981
|
className: "absolute inset-0 opacity-25 pointer-events-none",
|
|
@@ -3984,7 +3991,7 @@ var HistoryPanel = ({
|
|
|
3984
3991
|
}
|
|
3985
3992
|
}
|
|
3986
3993
|
),
|
|
3987
|
-
/* @__PURE__ */
|
|
3994
|
+
/* @__PURE__ */ React24.createElement(
|
|
3988
3995
|
"div",
|
|
3989
3996
|
{
|
|
3990
3997
|
className: "absolute inset-0 pointer-events-none",
|
|
@@ -3994,7 +4001,7 @@ var HistoryPanel = ({
|
|
|
3994
4001
|
}
|
|
3995
4002
|
}
|
|
3996
4003
|
),
|
|
3997
|
-
/* @__PURE__ */
|
|
4004
|
+
/* @__PURE__ */ React24.createElement("div", { className: "relative z-10 flex flex-col h-full", onClick: (e) => e.stopPropagation() }, /* @__PURE__ */ React24.createElement(
|
|
3998
4005
|
"div",
|
|
3999
4006
|
{
|
|
4000
4007
|
className: "flex items-center justify-between px-8 py-6 border-b relative",
|
|
@@ -4006,8 +4013,8 @@ var HistoryPanel = ({
|
|
|
4006
4013
|
boxShadow: "0 4px 24px rgba(255, 255, 255, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.3)"
|
|
4007
4014
|
}
|
|
4008
4015
|
},
|
|
4009
|
-
/* @__PURE__ */
|
|
4010
|
-
/* @__PURE__ */
|
|
4016
|
+
/* @__PURE__ */ React24.createElement("h2", { className: "text-2xl font-bold text-white flex items-center gap-3" }, /* @__PURE__ */ React24.createElement("span", { className: "text-3xl" }, "\u{1F4DC}"), /* @__PURE__ */ React24.createElement("span", { style: { textShadow: "0 2px 12px rgba(255, 255, 255, 0.3)" } }, "\u5BF9\u8BDD\u5386\u53F2")),
|
|
4017
|
+
/* @__PURE__ */ React24.createElement(
|
|
4011
4018
|
"button",
|
|
4012
4019
|
{
|
|
4013
4020
|
onClick: onClose,
|
|
@@ -4021,9 +4028,9 @@ var HistoryPanel = ({
|
|
|
4021
4028
|
},
|
|
4022
4029
|
"aria-label": "\u5173\u95ED"
|
|
4023
4030
|
},
|
|
4024
|
-
/* @__PURE__ */
|
|
4031
|
+
/* @__PURE__ */ React24.createElement("svg", { className: "w-6 h-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React24.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }))
|
|
4025
4032
|
)
|
|
4026
|
-
), /* @__PURE__ */
|
|
4033
|
+
), /* @__PURE__ */ React24.createElement("div", { className: "flex-1 overflow-y-auto p-6 space-y-4" }, history.length === 0 ? /* @__PURE__ */ React24.createElement("div", { className: "text-center text-white/70 py-20 text-lg font-medium", style: { textShadow: "0 2px 8px rgba(0, 0, 0, 0.3)" } }, "\u6682\u65E0\u5BF9\u8BDD\u5386\u53F2") : history.map((item, index) => /* @__PURE__ */ React24.createElement(
|
|
4027
4034
|
"div",
|
|
4028
4035
|
{
|
|
4029
4036
|
key: `${item.nodeIndex}-${item.dialogueIndex}-${index}`,
|
|
@@ -4036,7 +4043,7 @@ var HistoryPanel = ({
|
|
|
4036
4043
|
boxShadow: "0 8px 24px rgba(255, 255, 255, 0.08), inset 0 1px 0 rgba(255, 255, 255, 0.25)"
|
|
4037
4044
|
}
|
|
4038
4045
|
},
|
|
4039
|
-
/* @__PURE__ */
|
|
4046
|
+
/* @__PURE__ */ React24.createElement(
|
|
4040
4047
|
"div",
|
|
4041
4048
|
{
|
|
4042
4049
|
className: "absolute top-0 left-0 right-0 h-0.5",
|
|
@@ -4045,7 +4052,7 @@ var HistoryPanel = ({
|
|
|
4045
4052
|
}
|
|
4046
4053
|
}
|
|
4047
4054
|
),
|
|
4048
|
-
item.speaker && /* @__PURE__ */
|
|
4055
|
+
item.speaker && /* @__PURE__ */ React24.createElement(
|
|
4049
4056
|
"div",
|
|
4050
4057
|
{
|
|
4051
4058
|
className: "inline-block px-5 py-2 rounded-xl mb-3 text-sm font-bold shadow-lg relative overflow-hidden",
|
|
@@ -4058,7 +4065,7 @@ var HistoryPanel = ({
|
|
|
4058
4065
|
border: "1px solid rgba(255, 255, 255, 0.25)"
|
|
4059
4066
|
}
|
|
4060
4067
|
},
|
|
4061
|
-
/* @__PURE__ */
|
|
4068
|
+
/* @__PURE__ */ React24.createElement(
|
|
4062
4069
|
"div",
|
|
4063
4070
|
{
|
|
4064
4071
|
className: "absolute inset-0 opacity-30",
|
|
@@ -4069,9 +4076,9 @@ var HistoryPanel = ({
|
|
|
4069
4076
|
}
|
|
4070
4077
|
}
|
|
4071
4078
|
),
|
|
4072
|
-
/* @__PURE__ */
|
|
4079
|
+
/* @__PURE__ */ React24.createElement("span", { className: "relative z-10 drop-shadow-lg" }, item.speaker)
|
|
4073
4080
|
),
|
|
4074
|
-
/* @__PURE__ */
|
|
4081
|
+
/* @__PURE__ */ React24.createElement(
|
|
4075
4082
|
"p",
|
|
4076
4083
|
{
|
|
4077
4084
|
className: "text-base leading-relaxed",
|
|
@@ -4082,7 +4089,7 @@ var HistoryPanel = ({
|
|
|
4082
4089
|
},
|
|
4083
4090
|
item.text
|
|
4084
4091
|
)
|
|
4085
|
-
))), /* @__PURE__ */
|
|
4092
|
+
))), /* @__PURE__ */ React24.createElement(
|
|
4086
4093
|
"div",
|
|
4087
4094
|
{
|
|
4088
4095
|
className: "px-8 py-4 border-t text-center",
|
|
@@ -4094,7 +4101,7 @@ var HistoryPanel = ({
|
|
|
4094
4101
|
boxShadow: "inset 0 1px 0 rgba(255, 255, 255, 0.2)"
|
|
4095
4102
|
}
|
|
4096
4103
|
},
|
|
4097
|
-
/* @__PURE__ */
|
|
4104
|
+
/* @__PURE__ */ React24.createElement(
|
|
4098
4105
|
"span",
|
|
4099
4106
|
{
|
|
4100
4107
|
className: "text-sm px-5 py-2.5 rounded-full inline-block font-medium",
|
|
@@ -4144,7 +4151,7 @@ var LoadingScreen = ({
|
|
|
4144
4151
|
console.log("[LoadingScreen] Not showing, returning null");
|
|
4145
4152
|
return null;
|
|
4146
4153
|
}
|
|
4147
|
-
const content = /* @__PURE__ */
|
|
4154
|
+
const content = /* @__PURE__ */ React24.createElement(
|
|
4148
4155
|
"div",
|
|
4149
4156
|
{
|
|
4150
4157
|
className: `fixed inset-0 w-screen h-screen flex items-center justify-center ${className}`,
|
|
@@ -4156,7 +4163,7 @@ var LoadingScreen = ({
|
|
|
4156
4163
|
padding: 0
|
|
4157
4164
|
}
|
|
4158
4165
|
},
|
|
4159
|
-
/* @__PURE__ */
|
|
4166
|
+
/* @__PURE__ */ React24.createElement(
|
|
4160
4167
|
"div",
|
|
4161
4168
|
{
|
|
4162
4169
|
className: "absolute inset-0 w-full h-full pointer-events-none",
|
|
@@ -4166,7 +4173,7 @@ var LoadingScreen = ({
|
|
|
4166
4173
|
WebkitBackdropFilter: "blur(32px) saturate(200%)"
|
|
4167
4174
|
}
|
|
4168
4175
|
},
|
|
4169
|
-
/* @__PURE__ */
|
|
4176
|
+
/* @__PURE__ */ React24.createElement(
|
|
4170
4177
|
"div",
|
|
4171
4178
|
{
|
|
4172
4179
|
className: "flex items-center justify-center flex-col inset-0 w-full h-full pointer-events-none",
|
|
@@ -4181,7 +4188,7 @@ var LoadingScreen = ({
|
|
|
4181
4188
|
animation: "gradientShift 15s ease infinite"
|
|
4182
4189
|
}
|
|
4183
4190
|
},
|
|
4184
|
-
/* @__PURE__ */
|
|
4191
|
+
/* @__PURE__ */ React24.createElement(
|
|
4185
4192
|
"div",
|
|
4186
4193
|
{
|
|
4187
4194
|
className: "text-lg font-medium text-white text-center px-6 py-3 rounded-2xl"
|
|
@@ -4216,39 +4223,53 @@ var LoadingScreen = ({
|
|
|
4216
4223
|
LoadingScreen.displayName = "LoadingScreen";
|
|
4217
4224
|
var VNModal = ({ title, show, onClose, children }) => {
|
|
4218
4225
|
if (!show) return null;
|
|
4219
|
-
return /* @__PURE__ */
|
|
4226
|
+
return /* @__PURE__ */ React24.createElement(
|
|
4220
4227
|
"div",
|
|
4221
4228
|
{
|
|
4222
|
-
className: "fixed inset-0 flex items-center justify-center
|
|
4229
|
+
className: "fixed inset-0 flex items-center justify-center backdrop-blur-xl z-[1000000] pointer-events-auto transition-all animate-in fade-in zoom-in-95 duration-300 px-4",
|
|
4230
|
+
style: { background: "rgba(100, 116, 139, 0.3)" },
|
|
4223
4231
|
onClick: onClose
|
|
4224
4232
|
},
|
|
4225
|
-
/* @__PURE__ */
|
|
4233
|
+
/* @__PURE__ */ React24.createElement(
|
|
4226
4234
|
"div",
|
|
4227
4235
|
{
|
|
4228
|
-
className: "w-full max-w-lg
|
|
4236
|
+
className: "w-full max-w-lg p-4 sm:p-6 md:p-8 rounded-3xl sm:rounded-[2.5rem] border relative overflow-hidden max-h-[90vh] overflow-y-auto",
|
|
4229
4237
|
style: {
|
|
4230
|
-
background: "linear-gradient(135deg, rgba(
|
|
4238
|
+
background: "linear-gradient(135deg, rgba(248, 250, 252, 0.98), rgba(241, 245, 249, 0.95))",
|
|
4231
4239
|
backdropFilter: "blur(40px) saturate(200%)",
|
|
4232
|
-
WebkitBackdropFilter: "blur(40px) saturate(200%)"
|
|
4240
|
+
WebkitBackdropFilter: "blur(40px) saturate(200%)",
|
|
4241
|
+
borderColor: "rgba(203, 213, 225, 0.8)",
|
|
4242
|
+
boxShadow: "0 20px 80px rgba(100, 116, 139, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
|
|
4233
4243
|
},
|
|
4234
4244
|
onClick: (e) => e.stopPropagation()
|
|
4235
4245
|
},
|
|
4236
|
-
/* @__PURE__ */
|
|
4237
|
-
/* @__PURE__ */
|
|
4238
|
-
/* @__PURE__ */
|
|
4246
|
+
/* @__PURE__ */ React24.createElement("div", { className: "absolute -top-24 -right-24 w-64 h-64 bg-slate-300/15 rounded-full blur-3xl pointer-events-none" }),
|
|
4247
|
+
/* @__PURE__ */ React24.createElement("div", { className: "absolute -bottom-24 -left-24 w-64 h-64 bg-slate-400/15 rounded-full blur-3xl pointer-events-none" }),
|
|
4248
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between mb-6 sm:mb-8 relative" }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React24.createElement("h2", { className: "text-xl sm:text-2xl font-bold tracking-wider drop-shadow-sm", style: { color: "#22c55e" } }, title), /* @__PURE__ */ React24.createElement("div", { className: "h-1 sm:h-1.5 w-12 sm:w-16 bg-green-500/80 rounded-full mt-2 shadow-[0_0_10px_rgba(34,197,94,0.4)]" })), /* @__PURE__ */ React24.createElement(
|
|
4239
4249
|
"button",
|
|
4240
4250
|
{
|
|
4241
4251
|
onClick: onClose,
|
|
4242
|
-
className: "w-12 h-12 rounded-full flex items-center justify-center
|
|
4252
|
+
className: "w-10 h-10 sm:w-12 sm:h-12 rounded-full flex items-center justify-center transition-all border shadow-inner touch-manipulation shrink-0",
|
|
4253
|
+
style: {
|
|
4254
|
+
background: "rgba(241, 245, 249, 0.8)",
|
|
4255
|
+
borderColor: "rgba(203, 213, 225, 0.6)",
|
|
4256
|
+
color: "#64748b"
|
|
4257
|
+
}
|
|
4243
4258
|
},
|
|
4244
4259
|
"\u2715"
|
|
4245
4260
|
)),
|
|
4246
|
-
/* @__PURE__ */
|
|
4247
|
-
/* @__PURE__ */
|
|
4261
|
+
/* @__PURE__ */ React24.createElement("div", { className: "leading-relaxed max-h-[40vh] sm:max-h-[50vh] overflow-y-auto pr-2 sm:pr-4 custom-scrollbar relative font-medium text-sm sm:text-base", style: { color: "#475569" } }, children),
|
|
4262
|
+
/* @__PURE__ */ React24.createElement("div", { className: "mt-6 sm:mt-10 flex justify-center relative" }, /* @__PURE__ */ React24.createElement(
|
|
4248
4263
|
"button",
|
|
4249
4264
|
{
|
|
4250
4265
|
onClick: onClose,
|
|
4251
|
-
className: "px-14 py-3.5 rounded-
|
|
4266
|
+
className: "px-10 sm:px-14 py-3 sm:py-3.5 rounded-xl sm:rounded-2xl font-bold transition-all border hover:scale-105 active:scale-95 tracking-[0.15em] sm:tracking-[0.2em] uppercase text-xs sm:text-sm touch-manipulation",
|
|
4267
|
+
style: {
|
|
4268
|
+
background: "linear-gradient(135deg, rgba(248, 250, 252, 0.98), rgba(226, 232, 240, 0.95))",
|
|
4269
|
+
borderColor: "rgba(203, 213, 225, 0.8)",
|
|
4270
|
+
color: "#22c55e",
|
|
4271
|
+
boxShadow: "0 4px 16px rgba(100, 116, 139, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
|
|
4272
|
+
}
|
|
4252
4273
|
},
|
|
4253
4274
|
"Confirm"
|
|
4254
4275
|
))
|
|
@@ -4272,97 +4293,120 @@ var StartScreen = ({
|
|
|
4272
4293
|
}, []);
|
|
4273
4294
|
if (!isMounted) return null;
|
|
4274
4295
|
if (!showStartScreen) return null;
|
|
4275
|
-
const content = /* @__PURE__ */
|
|
4296
|
+
const content = /* @__PURE__ */ React24.createElement(
|
|
4276
4297
|
"div",
|
|
4277
4298
|
{
|
|
4278
4299
|
className: `fixed inset-0 w-screen h-screen flex items-center justify-center overflow-hidden ${className}`,
|
|
4279
4300
|
style: {
|
|
4280
4301
|
zIndex: 999999,
|
|
4281
4302
|
pointerEvents: "auto",
|
|
4282
|
-
backgroundColor: "#
|
|
4303
|
+
backgroundColor: "#f1f5f9",
|
|
4283
4304
|
margin: 0,
|
|
4284
4305
|
padding: 0
|
|
4285
4306
|
}
|
|
4286
4307
|
},
|
|
4287
|
-
/* @__PURE__ */
|
|
4308
|
+
/* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 w-full h-full overflow-hidden" }, /* @__PURE__ */ React24.createElement(
|
|
4288
4309
|
"div",
|
|
4289
4310
|
{
|
|
4290
|
-
className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[150vw] h-[150vw] opacity-
|
|
4311
|
+
className: "absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-[150vw] h-[150vw] opacity-20 pointer-events-none",
|
|
4291
4312
|
style: {
|
|
4292
|
-
background: "radial-gradient(circle at center, rgba(
|
|
4313
|
+
background: "radial-gradient(circle at center, rgba(226, 232, 240, 0.6) 0%, rgba(203, 213, 225, 0.3) 30%, transparent 70%)",
|
|
4293
4314
|
filter: "blur(60px)",
|
|
4294
4315
|
animation: "pulse 10s ease-in-out infinite"
|
|
4295
4316
|
}
|
|
4296
4317
|
}
|
|
4297
|
-
), /* @__PURE__ */
|
|
4318
|
+
), /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 transition-opacity duration-1000" }, /* @__PURE__ */ React24.createElement("div", { className: "absolute top-[-10%] left-[-10%] w-[60%] h-[60%] bg-slate-300/20 rounded-full blur-[120px] animate-blob" }), /* @__PURE__ */ React24.createElement("div", { className: "absolute bottom-[-10%] right-[-10%] w-[60%] h-[60%] bg-slate-400/15 rounded-full blur-[120px] animate-blob animation-delay-2000" }), /* @__PURE__ */ React24.createElement("div", { className: "absolute top-[20%] right-[10%] w-[40%] h-[40%] bg-slate-300/15 rounded-full blur-[100px] animate-blob animation-delay-4000" })), /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 opacity-30" }, [...Array(typeof window !== "undefined" && window.innerWidth < 768 ? 20 : 40)].map((_, i) => /* @__PURE__ */ React24.createElement(
|
|
4298
4319
|
"div",
|
|
4299
4320
|
{
|
|
4300
4321
|
key: i,
|
|
4301
|
-
className: "absolute bg-
|
|
4322
|
+
className: "absolute bg-slate-400/60 rounded-full",
|
|
4302
4323
|
style: {
|
|
4303
4324
|
width: Math.random() * 3 + 1 + "px",
|
|
4304
4325
|
height: Math.random() * 3 + 1 + "px",
|
|
4305
4326
|
top: Math.random() * 100 + "%",
|
|
4306
4327
|
left: Math.random() * 100 + "%",
|
|
4307
|
-
boxShadow: "0 0 10px rgba(
|
|
4328
|
+
boxShadow: "0 0 10px rgba(148, 163, 184, 0.3)",
|
|
4308
4329
|
animation: `floatParticle ${Math.random() * 10 + 10}s linear infinite`,
|
|
4309
4330
|
animationDelay: `-${Math.random() * 20}s`
|
|
4310
4331
|
}
|
|
4311
4332
|
}
|
|
4312
4333
|
)))),
|
|
4313
|
-
/* @__PURE__ */
|
|
4334
|
+
/* @__PURE__ */ React24.createElement("div", { className: "relative z-10 w-full max-w-5xl mx-auto px-4 sm:px-6 flex flex-col items-center" }, /* @__PURE__ */ React24.createElement("div", { className: "text-center mb-12 sm:mb-20 md:mb-32 group flex flex-col items-center" }, /* @__PURE__ */ React24.createElement("div", { className: "w-24 sm:w-40 h-px bg-gradient-to-r from-transparent via-slate-400/60 to-transparent mb-6 sm:mb-10 shadow-[0_0_15px_rgba(148,163,184,0.3)]" }), /* @__PURE__ */ React24.createElement(
|
|
4314
4335
|
"h1",
|
|
4315
4336
|
{
|
|
4316
|
-
className: "text-
|
|
4337
|
+
className: "text-4xl sm:text-5xl md:text-6xl lg:text-8xl font-black tracking-[0.1em] sm:tracking-[0.15em] leading-tight select-none px-4",
|
|
4317
4338
|
style: {
|
|
4318
|
-
|
|
4319
|
-
|
|
4339
|
+
color: "#22c55e",
|
|
4340
|
+
filter: "drop-shadow(0 0 20px rgba(34, 197, 94, 0.4))",
|
|
4341
|
+
textShadow: "0 4px 12px rgba(100, 116, 139, 0.3)"
|
|
4320
4342
|
}
|
|
4321
4343
|
},
|
|
4322
4344
|
scriptName || "VISUAL NOVEL"
|
|
4323
|
-
), /* @__PURE__ */
|
|
4345
|
+
), /* @__PURE__ */ React24.createElement("div", { className: "mt-6 sm:mt-10 flex flex-col items-center gap-3 sm:gap-4" }, /* @__PURE__ */ React24.createElement("div", { className: "h-0.5 sm:h-1 w-20 sm:w-32 bg-green-500 rounded-full opacity-80 shadow-[0_0_20px_rgba(34,197,94,0.5)]" }), /* @__PURE__ */ React24.createElement("span", { className: "text-xs sm:text-sm md:text-base tracking-[0.5em] sm:tracking-[0.8em] font-medium uppercase translate-x-[0.25em] sm:translate-x-[0.4em]", style: { color: "#64748b" } }, "Adventure System"))), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-6 sm:gap-10 items-center w-full max-w-sm px-4 sm:px-0" }, /* @__PURE__ */ React24.createElement(
|
|
4324
4346
|
"button",
|
|
4325
4347
|
{
|
|
4326
4348
|
onClick: onStart,
|
|
4327
|
-
className: "group relative w-full h-20 flex items-center justify-center transition-all duration-500 active:scale-95"
|
|
4349
|
+
className: "group relative w-full h-16 sm:h-20 flex items-center justify-center transition-all duration-500 active:scale-95 touch-manipulation"
|
|
4328
4350
|
},
|
|
4329
|
-
/* @__PURE__ */
|
|
4351
|
+
/* @__PURE__ */ React24.createElement(
|
|
4330
4352
|
"div",
|
|
4331
4353
|
{
|
|
4332
|
-
className: "absolute inset-0
|
|
4354
|
+
className: "absolute inset-0 backdrop-blur-2xl border-2 rounded-3xl transition-all duration-500 group-hover:-inset-1",
|
|
4355
|
+
style: {
|
|
4356
|
+
background: "linear-gradient(135deg, rgba(248, 250, 252, 0.98), rgba(226, 232, 240, 0.95))",
|
|
4357
|
+
borderColor: "rgba(203, 213, 225, 0.8)",
|
|
4358
|
+
boxShadow: "0 8px 40px rgba(148, 163, 184, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.8)"
|
|
4359
|
+
}
|
|
4333
4360
|
}
|
|
4334
4361
|
),
|
|
4335
|
-
/* @__PURE__ */
|
|
4336
|
-
/* @__PURE__ */
|
|
4337
|
-
), /* @__PURE__ */
|
|
4338
|
-
{ text: settingsText, onClick: () => setShowSettings(true)
|
|
4339
|
-
{ text: aboutText, onClick: () => setShowAbout(true)
|
|
4340
|
-
].map((btn, idx) => /* @__PURE__ */
|
|
4362
|
+
/* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 overflow-hidden rounded-3xl pointer-events-none" }, /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-700 bg-gradient-to-r from-transparent via-slate-300/30 to-transparent -skew-x-[25deg] -translate-x-[200%] group-hover:translate-x-[200%] transition-transform duration-1000 ease-in-out" })),
|
|
4363
|
+
/* @__PURE__ */ React24.createElement("div", { className: "relative flex items-center gap-3 sm:gap-6" }, /* @__PURE__ */ React24.createElement("div", { className: "w-2 h-2 sm:w-3 sm:h-3 rounded-full bg-green-500 animate-ping opacity-75" }), /* @__PURE__ */ React24.createElement("span", { className: "text-lg sm:text-2xl font-black tracking-[0.3em] sm:tracking-[0.4em] drop-shadow-sm", style: { color: "#22c55e" } }, startText), /* @__PURE__ */ React24.createElement("div", { className: "w-2 h-2 sm:w-3 sm:h-3 rounded-full bg-green-600 animate-ping opacity-75" }))
|
|
4364
|
+
), /* @__PURE__ */ React24.createElement("div", { className: "flex gap-4 sm:gap-8 w-full justify-center" }, [
|
|
4365
|
+
{ text: settingsText, onClick: () => setShowSettings(true) },
|
|
4366
|
+
{ text: aboutText, onClick: () => setShowAbout(true) }
|
|
4367
|
+
].map((btn, idx) => /* @__PURE__ */ React24.createElement(
|
|
4341
4368
|
"button",
|
|
4342
4369
|
{
|
|
4343
4370
|
key: idx,
|
|
4344
4371
|
onClick: btn.onClick,
|
|
4345
|
-
className: "group relative flex-1 h-14 flex items-center justify-center transition-all duration-300 active:scale-95 overflow-hidden rounded-2xl"
|
|
4372
|
+
className: "group relative flex-1 h-12 sm:h-14 flex items-center justify-center transition-all duration-300 active:scale-95 overflow-hidden rounded-xl sm:rounded-2xl touch-manipulation"
|
|
4346
4373
|
},
|
|
4347
|
-
/* @__PURE__ */
|
|
4374
|
+
/* @__PURE__ */ React24.createElement(
|
|
4348
4375
|
"div",
|
|
4349
4376
|
{
|
|
4350
|
-
className: "absolute inset-0
|
|
4351
|
-
|
|
4352
|
-
|
|
4353
|
-
|
|
4354
|
-
|
|
4355
|
-
|
|
4356
|
-
className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
4357
|
-
style: { background: btn.color }
|
|
4377
|
+
className: "absolute inset-0 backdrop-blur-xl border transition-all duration-300",
|
|
4378
|
+
style: {
|
|
4379
|
+
background: "linear-gradient(135deg, rgba(241, 245, 249, 0.95), rgba(226, 232, 240, 0.9))",
|
|
4380
|
+
borderColor: "rgba(203, 213, 225, 0.6)",
|
|
4381
|
+
boxShadow: "0 4px 16px rgba(100, 116, 139, 0.15)"
|
|
4382
|
+
}
|
|
4358
4383
|
}
|
|
4359
4384
|
),
|
|
4360
|
-
/* @__PURE__ */
|
|
4385
|
+
/* @__PURE__ */ React24.createElement("span", { className: "relative text-xs sm:text-sm md:text-base font-bold tracking-[0.15em] sm:tracking-[0.25em] transition-colors uppercase", style: { color: "#64748b" } }, btn.text)
|
|
4361
4386
|
))))),
|
|
4362
|
-
/* @__PURE__ */
|
|
4363
|
-
|
|
4364
|
-
|
|
4365
|
-
/* @__PURE__ */
|
|
4387
|
+
/* @__PURE__ */ React24.createElement("div", { className: "fixed bottom-4 sm:bottom-10 left-0 right-0 text-center pointer-events-none select-none px-4" }, /* @__PURE__ */ React24.createElement("div", { className: "inline-block px-3 sm:px-6 py-1.5 sm:py-2 rounded-full backdrop-blur-md border", style: {
|
|
4388
|
+
background: "rgba(248, 250, 252, 0.8)",
|
|
4389
|
+
borderColor: "rgba(203, 213, 225, 0.3)"
|
|
4390
|
+
} }, /* @__PURE__ */ React24.createElement("span", { className: "text-[8px] sm:text-[10px] md:text-xs tracking-[0.3em] sm:tracking-[0.5em] font-light uppercase", style: { color: "rgba(100, 116, 139, 0.5)" } }, "Ver 1.6.2 \u2014 ENGINE POWERED BY SA2KIT"))),
|
|
4391
|
+
/* @__PURE__ */ React24.createElement(VNModal, { title: settingsText, show: showSettings, onClose: () => setShowSettings(false) }, /* @__PURE__ */ React24.createElement("div", { className: "space-y-6 sm:space-y-8 py-2 sm:py-4" }, /* @__PURE__ */ React24.createElement("div", { className: "space-y-3 sm:space-y-4" }, /* @__PURE__ */ React24.createElement("div", { className: "flex justify-between items-center text-xs sm:text-sm font-bold tracking-wider sm:tracking-widest", style: { color: "#64748b" } }, /* @__PURE__ */ React24.createElement("span", null, "MUSIC VOLUME"), /* @__PURE__ */ React24.createElement("span", null, "80%")), /* @__PURE__ */ React24.createElement("div", { className: "h-2.5 sm:h-3 rounded-full p-0.5 border", style: { background: "rgba(241, 245, 249, 0.5)", borderColor: "rgba(203, 213, 225, 0.4)" } }, /* @__PURE__ */ React24.createElement("div", { className: "h-full w-[80%] rounded-full", style: { background: "linear-gradient(to right, #22c55e, #4ade80)", boxShadow: "0 0 15px rgba(34, 197, 94, 0.5)" } }))), /* @__PURE__ */ React24.createElement("div", { className: "space-y-3 sm:space-y-4" }, /* @__PURE__ */ React24.createElement("div", { className: "flex justify-between items-center text-xs sm:text-sm font-bold tracking-wider sm:tracking-widest", style: { color: "#64748b" } }, /* @__PURE__ */ React24.createElement("span", null, "TEXT SPEED"), /* @__PURE__ */ React24.createElement("span", null, "NORMAL")), /* @__PURE__ */ React24.createElement("div", { className: "flex gap-2 sm:gap-3" }, ["SLOW", "NORMAL", "FAST"].map((s, i) => /* @__PURE__ */ React24.createElement(
|
|
4392
|
+
"div",
|
|
4393
|
+
{
|
|
4394
|
+
key: s,
|
|
4395
|
+
className: "flex-1 py-2.5 sm:py-3 rounded-lg sm:rounded-xl border text-center text-[10px] sm:text-xs font-bold transition-all cursor-pointer touch-manipulation",
|
|
4396
|
+
style: i === 1 ? {
|
|
4397
|
+
background: "rgba(34, 197, 94, 0.15)",
|
|
4398
|
+
borderColor: "#22c55e",
|
|
4399
|
+
color: "#22c55e"
|
|
4400
|
+
} : {
|
|
4401
|
+
background: "rgba(241, 245, 249, 0.5)",
|
|
4402
|
+
borderColor: "rgba(203, 213, 225, 0.4)",
|
|
4403
|
+
color: "rgba(100, 116, 139, 0.6)"
|
|
4404
|
+
}
|
|
4405
|
+
},
|
|
4406
|
+
s
|
|
4407
|
+
)))), /* @__PURE__ */ React24.createElement("div", { className: "pt-3 sm:pt-4 flex flex-col sm:flex-row items-center justify-between gap-2 sm:gap-0 opacity-50 italic text-[10px] sm:text-xs border-t", style: { borderColor: "rgba(203, 213, 225, 0.3)" } }, /* @__PURE__ */ React24.createElement("span", null, "Auto Save Enabled"), /* @__PURE__ */ React24.createElement("span", null, "Cloud Sync Active")))),
|
|
4408
|
+
/* @__PURE__ */ React24.createElement(VNModal, { title: aboutText, show: showAbout, onClose: () => setShowAbout(false) }, /* @__PURE__ */ React24.createElement("div", { className: "space-y-6 sm:space-y-8 py-2 sm:py-4" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-3 sm:gap-6 p-4 sm:p-6 rounded-2xl sm:rounded-3xl border", style: { background: "rgba(241, 245, 249, 0.6)", borderColor: "rgba(203, 213, 225, 0.4)" } }, /* @__PURE__ */ React24.createElement("div", { className: "w-14 h-14 sm:w-20 sm:h-20 rounded-xl sm:rounded-2xl flex items-center justify-center text-2xl sm:text-3xl font-black text-white shadow-lg shrink-0", style: { background: "linear-gradient(to bottom right, #22c55e, #4ade80)" } }, "S2"), /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("h3", { className: "text-lg sm:text-2xl font-black tracking-tight", style: { color: "#22c55e" } }, scriptName || "Project SA2"), /* @__PURE__ */ React24.createElement("p", { className: "text-[10px] sm:text-xs font-bold tracking-wider sm:tracking-widest mt-1 uppercase", style: { color: "rgba(100, 116, 139, 0.6)" } }, "Visual Novel Experience"))), /* @__PURE__ */ React24.createElement("div", { className: "space-y-3 sm:space-y-4 px-1 sm:px-2" }, /* @__PURE__ */ React24.createElement("p", { className: "font-medium leading-relaxed text-sm sm:text-base", style: { color: "#475569" } }, "\u91C7\u7528 sa2kit \u5F15\u64CE\u6784\u5EFA\u7684\u65B0\u4E00\u4EE3\u5B9E\u65F6 3D \u89C6\u89C9\u5C0F\u8BF4\u3002\u7ED3\u5408\u4E86 MMD \u5B9E\u65F6\u6E32\u67D3\u6280\u672F\u4E0E\u4EA4\u4E92\u5F0F\u5267\u60C5\u5206\u652F\u7CFB\u7EDF\uFF0C\u81F4\u529B\u4E8E\u6253\u9020\u6781\u81F4\u7684\u6C89\u6D78\u5F0F\u53D9\u4E8B\u4F53\u9A8C\u3002")), /* @__PURE__ */ React24.createElement("div", { className: "grid grid-cols-2 gap-3 sm:gap-4 pt-4 sm:pt-6 border-t", style: { borderColor: "rgba(203, 213, 225, 0.3)" } }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-1" }, /* @__PURE__ */ React24.createElement("span", { className: "text-[9px] sm:text-[10px] font-bold tracking-wider sm:tracking-widest", style: { color: "rgba(100, 116, 139, 0.5)" } }, "DEVELOPER"), /* @__PURE__ */ React24.createElement("span", { className: "text-xs font-bold", style: { color: "#64748b" } }, "SA2KIT TEAM")), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-1 text-right" }, /* @__PURE__ */ React24.createElement("span", { className: "text-[9px] sm:text-[10px] font-bold tracking-wider sm:tracking-widest", style: { color: "rgba(100, 116, 139, 0.5)" } }, "ENGINE"), /* @__PURE__ */ React24.createElement("span", { className: "text-xs font-bold", style: { color: "#64748b" } }, "THREE.JS / REACT"))))),
|
|
4409
|
+
/* @__PURE__ */ React24.createElement("style", null, `
|
|
4366
4410
|
@keyframes floatParticle {
|
|
4367
4411
|
from { transform: translateY(0) translateX(0); opacity: 0; }
|
|
4368
4412
|
20% { opacity: 1; }
|
|
@@ -4447,14 +4491,14 @@ var LoadingOverlay = ({
|
|
|
4447
4491
|
onStart,
|
|
4448
4492
|
className = ""
|
|
4449
4493
|
}) => {
|
|
4450
|
-
return /* @__PURE__ */
|
|
4494
|
+
return /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement(
|
|
4451
4495
|
LoadingScreen,
|
|
4452
4496
|
{
|
|
4453
4497
|
isLoading,
|
|
4454
4498
|
loadingText,
|
|
4455
4499
|
className
|
|
4456
4500
|
}
|
|
4457
|
-
), /* @__PURE__ */
|
|
4501
|
+
), /* @__PURE__ */ React24.createElement(
|
|
4458
4502
|
StartScreen,
|
|
4459
4503
|
{
|
|
4460
4504
|
showStartScreen,
|
|
@@ -4472,18 +4516,18 @@ var SkipConfirmDialog = ({
|
|
|
4472
4516
|
onConfirm,
|
|
4473
4517
|
onCancel
|
|
4474
4518
|
}) => {
|
|
4475
|
-
const [isMounted, setIsMounted] =
|
|
4476
|
-
|
|
4519
|
+
const [isMounted, setIsMounted] = React24.useState(false);
|
|
4520
|
+
React24.useEffect(() => {
|
|
4477
4521
|
setIsMounted(true);
|
|
4478
4522
|
}, []);
|
|
4479
4523
|
if (!isMounted) return null;
|
|
4480
|
-
const content = /* @__PURE__ */
|
|
4524
|
+
const content = /* @__PURE__ */ React24.createElement(
|
|
4481
4525
|
"div",
|
|
4482
4526
|
{
|
|
4483
4527
|
className: "fixed inset-0 flex items-center justify-center bg-black/40 backdrop-blur-sm pointer-events-auto",
|
|
4484
4528
|
style: { zIndex: 999999 }
|
|
4485
4529
|
},
|
|
4486
|
-
/* @__PURE__ */
|
|
4530
|
+
/* @__PURE__ */ React24.createElement(
|
|
4487
4531
|
"div",
|
|
4488
4532
|
{
|
|
4489
4533
|
className: "p-8 rounded-3xl border border-white/30 shadow-2xl max-w-sm w-full mx-4 overflow-hidden relative",
|
|
@@ -4495,16 +4539,16 @@ var SkipConfirmDialog = ({
|
|
|
4495
4539
|
WebkitBackdropFilter: "blur(32px) saturate(200%)"
|
|
4496
4540
|
}
|
|
4497
4541
|
},
|
|
4498
|
-
/* @__PURE__ */
|
|
4499
|
-
/* @__PURE__ */
|
|
4500
|
-
/* @__PURE__ */
|
|
4542
|
+
/* @__PURE__ */ React24.createElement("h3", { className: "text-xl font-bold text-white mb-4 drop-shadow-md" }, "\u52A8\u753B\u5C1A\u672A\u64AD\u653E\u5B8C\u6210"),
|
|
4543
|
+
/* @__PURE__ */ React24.createElement("p", { className: "text-white/90 mb-8 leading-relaxed drop-shadow-sm" }, "\u5F53\u524D\u573A\u666F\u7684\u52A8\u753B\u8FD8\u6CA1\u6709\u5B8C\u6574\u64AD\u653E\u4E00\u904D\uFF0C\u662F\u5426\u76F4\u63A5\u8DF3\u8F6C\u5230\u4E0B\u4E00\u4E2A\u573A\u666F\uFF1F"),
|
|
4544
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex justify-end gap-4" }, /* @__PURE__ */ React24.createElement(
|
|
4501
4545
|
"button",
|
|
4502
4546
|
{
|
|
4503
4547
|
onClick: onCancel,
|
|
4504
4548
|
className: "px-6 py-2.5 rounded-2xl text-white/80 font-medium hover:text-white hover:bg-white/10 transition-all border border-white/10 hover:border-white/30"
|
|
4505
4549
|
},
|
|
4506
4550
|
"\u53D6\u6D88"
|
|
4507
|
-
), /* @__PURE__ */
|
|
4551
|
+
), /* @__PURE__ */ React24.createElement(
|
|
4508
4552
|
"button",
|
|
4509
4553
|
{
|
|
4510
4554
|
onClick: onConfirm,
|
|
@@ -4528,34 +4572,51 @@ var ChoiceMenu = ({
|
|
|
4528
4572
|
onSelect,
|
|
4529
4573
|
theme
|
|
4530
4574
|
}) => {
|
|
4531
|
-
const [isMounted, setIsMounted] =
|
|
4532
|
-
|
|
4575
|
+
const [isMounted, setIsMounted] = React24.useState(false);
|
|
4576
|
+
React24.useEffect(() => {
|
|
4533
4577
|
setIsMounted(true);
|
|
4534
4578
|
}, []);
|
|
4535
4579
|
if (!isMounted) return null;
|
|
4536
|
-
const content = /* @__PURE__ */
|
|
4580
|
+
const content = /* @__PURE__ */ React24.createElement(
|
|
4537
4581
|
"div",
|
|
4538
4582
|
{
|
|
4539
4583
|
className: "fixed inset-0 flex flex-col items-center justify-center bg-black/20 backdrop-blur-sm pointer-events-auto transition-all animate-in fade-in duration-500",
|
|
4540
4584
|
style: { zIndex: 1e6 }
|
|
4541
4585
|
},
|
|
4542
|
-
/* @__PURE__ */
|
|
4586
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-4 w-full max-w-md px-6" }, choices.map((choice, index) => /* @__PURE__ */ React24.createElement(
|
|
4543
4587
|
"button",
|
|
4544
4588
|
{
|
|
4545
4589
|
key: index,
|
|
4546
4590
|
onClick: () => onSelect(choice),
|
|
4547
|
-
className: "w-full py-4 px-8 rounded-2xl
|
|
4591
|
+
className: "w-full py-4 px-8 rounded-2xl font-bold text-lg transition-all border shadow-xl hover:scale-105 active:scale-95 group relative overflow-hidden",
|
|
4548
4592
|
style: {
|
|
4549
4593
|
background: `linear-gradient(135deg,
|
|
4550
|
-
rgba(
|
|
4551
|
-
rgba(
|
|
4552
|
-
|
|
4553
|
-
|
|
4594
|
+
rgba(248, 250, 252, 0.98) 0%,
|
|
4595
|
+
rgba(241, 245, 249, 0.95) 50%,
|
|
4596
|
+
rgba(226, 232, 240, 0.92) 100%)`,
|
|
4597
|
+
backdropFilter: "blur(16px) saturate(200%)",
|
|
4598
|
+
WebkitBackdropFilter: "blur(16px) saturate(200%)",
|
|
4599
|
+
borderColor: "rgba(203, 213, 225, 0.8)",
|
|
4600
|
+
color: "#22c55e",
|
|
4601
|
+
boxShadow: `
|
|
4602
|
+
0 8px 40px rgba(148, 163, 184, 0.2),
|
|
4603
|
+
0 4px 16px rgba(100, 116, 139, 0.15),
|
|
4604
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.8),
|
|
4605
|
+
inset 0 -1px 0 rgba(203, 213, 225, 0.5)
|
|
4606
|
+
`
|
|
4554
4607
|
}
|
|
4555
4608
|
},
|
|
4556
|
-
/* @__PURE__ */
|
|
4557
|
-
|
|
4558
|
-
|
|
4609
|
+
/* @__PURE__ */ React24.createElement(
|
|
4610
|
+
"div",
|
|
4611
|
+
{
|
|
4612
|
+
className: "absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
4613
|
+
style: {
|
|
4614
|
+
background: "linear-gradient(135deg, rgba(226, 232, 240, 0.5), rgba(203, 213, 225, 0.3))"
|
|
4615
|
+
}
|
|
4616
|
+
}
|
|
4617
|
+
),
|
|
4618
|
+
/* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 bg-gradient-to-r from-transparent via-white/30 to-transparent -translate-x-full group-hover:translate-x-full transition-transform duration-1000 ease-in-out" }),
|
|
4619
|
+
/* @__PURE__ */ React24.createElement("span", { className: "relative z-10 " }, choice.text)
|
|
4559
4620
|
)))
|
|
4560
4621
|
);
|
|
4561
4622
|
let portalContainer = document.getElementById("dialogue-portal-root");
|
|
@@ -4567,6 +4628,268 @@ var ChoiceMenu = ({
|
|
|
4567
4628
|
}
|
|
4568
4629
|
return createPortal(content, portalContainer);
|
|
4569
4630
|
};
|
|
4631
|
+
var LoopConfirmDialog = ({
|
|
4632
|
+
onRestart,
|
|
4633
|
+
onBackToStart,
|
|
4634
|
+
onCancel
|
|
4635
|
+
}) => {
|
|
4636
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "fixed inset-0 z-[9999] flex items-center justify-center bg-black/70 backdrop-blur-sm" }, /* @__PURE__ */ React24.createElement("div", { className: "mx-4 w-full max-w-md rounded-lg bg-gradient-to-br from-slate-800 to-slate-900 p-6 shadow-2xl border border-slate-700" }, /* @__PURE__ */ React24.createElement("div", { className: "mb-6 text-center" }, /* @__PURE__ */ React24.createElement("h3", { className: "text-2xl font-bold text-white mb-2" }, "\u{1F3AC} \u5267\u672C\u5DF2\u64AD\u653E\u5B8C\u6BD5"), /* @__PURE__ */ React24.createElement("p", { className: "text-slate-300 text-sm" }, "\u4F60\u60F3\u8981\u505A\u4EC0\u4E48\u5462\uFF1F")), /* @__PURE__ */ React24.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React24.createElement(
|
|
4637
|
+
"button",
|
|
4638
|
+
{
|
|
4639
|
+
onClick: onRestart,
|
|
4640
|
+
className: "w-full rounded-lg bg-gradient-to-r from-blue-500 to-blue-600 px-6 py-4 text-white font-medium shadow-lg hover:from-blue-600 hover:to-blue-700 transition-all duration-200 hover:shadow-xl hover:scale-105 active:scale-95"
|
|
4641
|
+
},
|
|
4642
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ React24.createElement("span", { className: "text-xl" }, "\u{1F504}"), /* @__PURE__ */ React24.createElement("div", { className: "text-left" }, /* @__PURE__ */ React24.createElement("div", { className: "font-bold" }, "\u91CD\u65B0\u5F00\u59CB"), /* @__PURE__ */ React24.createElement("div", { className: "text-xs text-blue-100 opacity-90" }, "\u4ECE\u7B2C\u4E00\u4E2A\u8282\u70B9\u7EE7\u7EED\u64AD\u653E")))
|
|
4643
|
+
), /* @__PURE__ */ React24.createElement(
|
|
4644
|
+
"button",
|
|
4645
|
+
{
|
|
4646
|
+
onClick: onBackToStart,
|
|
4647
|
+
className: "w-full rounded-lg bg-gradient-to-r from-purple-500 to-purple-600 px-6 py-4 text-white font-medium shadow-lg hover:from-purple-600 hover:to-purple-700 transition-all duration-200 hover:shadow-xl hover:scale-105 active:scale-95"
|
|
4648
|
+
},
|
|
4649
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-center gap-2" }, /* @__PURE__ */ React24.createElement("span", { className: "text-xl" }, "\u{1F3E0}"), /* @__PURE__ */ React24.createElement("div", { className: "text-left" }, /* @__PURE__ */ React24.createElement("div", { className: "font-bold" }, "\u56DE\u5230\u5F00\u59CB\u9875\u9762"), /* @__PURE__ */ React24.createElement("div", { className: "text-xs text-purple-100 opacity-90" }, "\u8FD4\u56DE\u6807\u9898\u754C\u9762")))
|
|
4650
|
+
), onCancel && /* @__PURE__ */ React24.createElement(
|
|
4651
|
+
"button",
|
|
4652
|
+
{
|
|
4653
|
+
onClick: onCancel,
|
|
4654
|
+
className: "w-full rounded-lg bg-slate-700 px-6 py-3 text-slate-300 font-medium hover:bg-slate-600 transition-all duration-200"
|
|
4655
|
+
},
|
|
4656
|
+
"\u53D6\u6D88"
|
|
4657
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "mt-4 text-center text-xs text-slate-400" }, "\u{1F4A1} \u63D0\u793A\uFF1A\u4F60\u4E5F\u53EF\u4EE5\u4F7F\u7528\u5FEB\u8FDB\u6309\u94AE\u8DF3\u8FC7\u5DF2\u770B\u8FC7\u7684\u5185\u5BB9")));
|
|
4658
|
+
};
|
|
4659
|
+
var CheerButton = ({
|
|
4660
|
+
onClick,
|
|
4661
|
+
text = "\u5E94\u63F4",
|
|
4662
|
+
show,
|
|
4663
|
+
className = ""
|
|
4664
|
+
}) => {
|
|
4665
|
+
if (!show) return null;
|
|
4666
|
+
return /* @__PURE__ */ React24.createElement(
|
|
4667
|
+
"button",
|
|
4668
|
+
{
|
|
4669
|
+
onClick,
|
|
4670
|
+
className: `
|
|
4671
|
+
fixed bottom-32 right-8
|
|
4672
|
+
px-6 py-3 rounded-full
|
|
4673
|
+
bg-gradient-to-r from-pink-500 to-purple-500
|
|
4674
|
+
hover:from-pink-600 hover:to-purple-600
|
|
4675
|
+
active:scale-95
|
|
4676
|
+
text-white font-bold text-lg
|
|
4677
|
+
shadow-lg hover:shadow-xl
|
|
4678
|
+
transition-all duration-200
|
|
4679
|
+
flex items-center gap-2
|
|
4680
|
+
${className}
|
|
4681
|
+
`,
|
|
4682
|
+
style: {
|
|
4683
|
+
animation: "cheer-pulse 2s ease-in-out infinite",
|
|
4684
|
+
zIndex: 1e6
|
|
4685
|
+
// 高于对话框的 z-index (999999)
|
|
4686
|
+
}
|
|
4687
|
+
},
|
|
4688
|
+
/* @__PURE__ */ React24.createElement("span", { className: "text-2xl" }, "\u{1F389}"),
|
|
4689
|
+
/* @__PURE__ */ React24.createElement("span", null, text),
|
|
4690
|
+
/* @__PURE__ */ React24.createElement("style", null, `
|
|
4691
|
+
@keyframes cheer-pulse {
|
|
4692
|
+
0%, 100% {
|
|
4693
|
+
transform: scale(1);
|
|
4694
|
+
box-shadow: 0 0 0 0 rgba(236, 72, 153, 0.7);
|
|
4695
|
+
}
|
|
4696
|
+
50% {
|
|
4697
|
+
transform: scale(1.05);
|
|
4698
|
+
box-shadow: 0 0 20px 10px rgba(236, 72, 153, 0);
|
|
4699
|
+
}
|
|
4700
|
+
}
|
|
4701
|
+
`)
|
|
4702
|
+
);
|
|
4703
|
+
};
|
|
4704
|
+
var CheerParticles = forwardRef(
|
|
4705
|
+
({ className = "" }, ref) => {
|
|
4706
|
+
const containerRef = useRef(null);
|
|
4707
|
+
const sceneRef = useRef(null);
|
|
4708
|
+
const cameraRef = useRef(null);
|
|
4709
|
+
const rendererRef = useRef(null);
|
|
4710
|
+
const particlesRef = useRef([]);
|
|
4711
|
+
const animationFrameRef = useRef(null);
|
|
4712
|
+
useEffect(() => {
|
|
4713
|
+
if (!containerRef.current) return;
|
|
4714
|
+
const container = containerRef.current;
|
|
4715
|
+
const width = container.clientWidth;
|
|
4716
|
+
const height = container.clientHeight;
|
|
4717
|
+
const scene = new THREE3.Scene();
|
|
4718
|
+
sceneRef.current = scene;
|
|
4719
|
+
const camera = new THREE3.OrthographicCamera(
|
|
4720
|
+
-width / 2,
|
|
4721
|
+
width / 2,
|
|
4722
|
+
height / 2,
|
|
4723
|
+
-height / 2,
|
|
4724
|
+
1,
|
|
4725
|
+
1e3
|
|
4726
|
+
);
|
|
4727
|
+
camera.position.z = 100;
|
|
4728
|
+
cameraRef.current = camera;
|
|
4729
|
+
const renderer = new THREE3.WebGLRenderer({
|
|
4730
|
+
alpha: true,
|
|
4731
|
+
antialias: true
|
|
4732
|
+
});
|
|
4733
|
+
renderer.setSize(width, height);
|
|
4734
|
+
renderer.setPixelRatio(window.devicePixelRatio);
|
|
4735
|
+
container.appendChild(renderer.domElement);
|
|
4736
|
+
rendererRef.current = renderer;
|
|
4737
|
+
const animate = () => {
|
|
4738
|
+
animationFrameRef.current = requestAnimationFrame(animate);
|
|
4739
|
+
updateParticles();
|
|
4740
|
+
if (rendererRef.current && sceneRef.current && cameraRef.current) {
|
|
4741
|
+
rendererRef.current.render(sceneRef.current, cameraRef.current);
|
|
4742
|
+
}
|
|
4743
|
+
};
|
|
4744
|
+
animate();
|
|
4745
|
+
const handleResize = () => {
|
|
4746
|
+
if (!containerRef.current || !cameraRef.current || !rendererRef.current) return;
|
|
4747
|
+
const newWidth = containerRef.current.clientWidth;
|
|
4748
|
+
const newHeight = containerRef.current.clientHeight;
|
|
4749
|
+
cameraRef.current.left = -newWidth / 2;
|
|
4750
|
+
cameraRef.current.right = newWidth / 2;
|
|
4751
|
+
cameraRef.current.top = newHeight / 2;
|
|
4752
|
+
cameraRef.current.bottom = -newHeight / 2;
|
|
4753
|
+
cameraRef.current.updateProjectionMatrix();
|
|
4754
|
+
rendererRef.current.setSize(newWidth, newHeight);
|
|
4755
|
+
};
|
|
4756
|
+
window.addEventListener("resize", handleResize);
|
|
4757
|
+
return () => {
|
|
4758
|
+
window.removeEventListener("resize", handleResize);
|
|
4759
|
+
if (animationFrameRef.current) {
|
|
4760
|
+
cancelAnimationFrame(animationFrameRef.current);
|
|
4761
|
+
}
|
|
4762
|
+
if (rendererRef.current) {
|
|
4763
|
+
container.removeChild(rendererRef.current.domElement);
|
|
4764
|
+
rendererRef.current.dispose();
|
|
4765
|
+
}
|
|
4766
|
+
clearParticles();
|
|
4767
|
+
};
|
|
4768
|
+
}, []);
|
|
4769
|
+
const createParticle = (position, velocity, color) => {
|
|
4770
|
+
const shapes = [
|
|
4771
|
+
new THREE3.SphereGeometry(8, 8, 8),
|
|
4772
|
+
new THREE3.BoxGeometry(10, 10, 10),
|
|
4773
|
+
new THREE3.ConeGeometry(5, 15, 6)
|
|
4774
|
+
];
|
|
4775
|
+
const geometry = shapes[Math.floor(Math.random() * shapes.length)];
|
|
4776
|
+
const material = new THREE3.MeshBasicMaterial({
|
|
4777
|
+
color,
|
|
4778
|
+
transparent: true,
|
|
4779
|
+
opacity: 1
|
|
4780
|
+
});
|
|
4781
|
+
const mesh = new THREE3.Mesh(geometry, material);
|
|
4782
|
+
mesh.position.copy(position);
|
|
4783
|
+
const initialScale = 1 + Math.random() * 0.5;
|
|
4784
|
+
mesh.scale.set(initialScale, initialScale, initialScale);
|
|
4785
|
+
return {
|
|
4786
|
+
mesh,
|
|
4787
|
+
velocity: velocity.clone(),
|
|
4788
|
+
acceleration: new THREE3.Vector3(0, -500, 0),
|
|
4789
|
+
// 重力
|
|
4790
|
+
lifetime: 0,
|
|
4791
|
+
maxLifetime: 2 + Math.random() * 1,
|
|
4792
|
+
// 2-3秒
|
|
4793
|
+
initialScale
|
|
4794
|
+
};
|
|
4795
|
+
};
|
|
4796
|
+
const triggerParticles = () => {
|
|
4797
|
+
if (!sceneRef.current || !containerRef.current) return;
|
|
4798
|
+
const scene = sceneRef.current;
|
|
4799
|
+
containerRef.current.clientWidth;
|
|
4800
|
+
const height = containerRef.current.clientHeight;
|
|
4801
|
+
const colors = [
|
|
4802
|
+
16738740,
|
|
4803
|
+
// 粉红
|
|
4804
|
+
16766720,
|
|
4805
|
+
// 金黄
|
|
4806
|
+
65535,
|
|
4807
|
+
// 青色
|
|
4808
|
+
16716947,
|
|
4809
|
+
// 深粉
|
|
4810
|
+
9662683,
|
|
4811
|
+
// 紫色
|
|
4812
|
+
16737095,
|
|
4813
|
+
// 番茄红
|
|
4814
|
+
8388564,
|
|
4815
|
+
// 青绿色
|
|
4816
|
+
16753920
|
|
4817
|
+
// 橙色
|
|
4818
|
+
];
|
|
4819
|
+
const particleCount = 100;
|
|
4820
|
+
for (let i = 0; i < particleCount; i++) {
|
|
4821
|
+
const angle = Math.PI * 2 * i / particleCount;
|
|
4822
|
+
const speed = 200 + Math.random() * 300;
|
|
4823
|
+
const spreadZ = (Math.random() - 0.5) * 200;
|
|
4824
|
+
const velocity = new THREE3.Vector3(
|
|
4825
|
+
Math.cos(angle) * speed,
|
|
4826
|
+
Math.sin(angle) * speed + Math.random() * 200,
|
|
4827
|
+
spreadZ
|
|
4828
|
+
);
|
|
4829
|
+
const color = colors[Math.floor(Math.random() * colors.length)] ?? 16738740;
|
|
4830
|
+
const position = new THREE3.Vector3(0, -height / 4, 0);
|
|
4831
|
+
const particle = createParticle(position, velocity, color);
|
|
4832
|
+
scene.add(particle.mesh);
|
|
4833
|
+
particlesRef.current.push(particle);
|
|
4834
|
+
}
|
|
4835
|
+
};
|
|
4836
|
+
const updateParticles = () => {
|
|
4837
|
+
const deltaTime = 1 / 60;
|
|
4838
|
+
const particles = particlesRef.current;
|
|
4839
|
+
for (let i = particles.length - 1; i >= 0; i--) {
|
|
4840
|
+
const particle = particles[i];
|
|
4841
|
+
if (!particle) continue;
|
|
4842
|
+
particle.lifetime += deltaTime;
|
|
4843
|
+
if (particle.lifetime >= particle.maxLifetime) {
|
|
4844
|
+
if (sceneRef.current) {
|
|
4845
|
+
sceneRef.current.remove(particle.mesh);
|
|
4846
|
+
}
|
|
4847
|
+
particle.mesh.geometry.dispose();
|
|
4848
|
+
particle.mesh.material.dispose();
|
|
4849
|
+
particles.splice(i, 1);
|
|
4850
|
+
continue;
|
|
4851
|
+
}
|
|
4852
|
+
particle.velocity.add(
|
|
4853
|
+
particle.acceleration.clone().multiplyScalar(deltaTime)
|
|
4854
|
+
);
|
|
4855
|
+
particle.mesh.position.add(
|
|
4856
|
+
particle.velocity.clone().multiplyScalar(deltaTime)
|
|
4857
|
+
);
|
|
4858
|
+
particle.mesh.rotation.x += deltaTime * 2;
|
|
4859
|
+
particle.mesh.rotation.y += deltaTime * 3;
|
|
4860
|
+
const progress = particle.lifetime / particle.maxLifetime;
|
|
4861
|
+
const opacity = Math.max(0, 1 - progress);
|
|
4862
|
+
particle.mesh.material.opacity = opacity;
|
|
4863
|
+
const scale = particle.initialScale * (1 - progress * 0.5);
|
|
4864
|
+
particle.mesh.scale.set(scale, scale, scale);
|
|
4865
|
+
}
|
|
4866
|
+
};
|
|
4867
|
+
const clearParticles = () => {
|
|
4868
|
+
const particles = particlesRef.current;
|
|
4869
|
+
particles.forEach((particle) => {
|
|
4870
|
+
if (sceneRef.current) {
|
|
4871
|
+
sceneRef.current.remove(particle.mesh);
|
|
4872
|
+
}
|
|
4873
|
+
particle.mesh.geometry.dispose();
|
|
4874
|
+
particle.mesh.material.dispose();
|
|
4875
|
+
});
|
|
4876
|
+
particlesRef.current = [];
|
|
4877
|
+
};
|
|
4878
|
+
useImperativeHandle(ref, () => ({
|
|
4879
|
+
trigger: triggerParticles,
|
|
4880
|
+
clear: clearParticles
|
|
4881
|
+
}));
|
|
4882
|
+
return /* @__PURE__ */ React24.createElement(
|
|
4883
|
+
"div",
|
|
4884
|
+
{
|
|
4885
|
+
ref: containerRef,
|
|
4886
|
+
className: `pointer-events-none absolute inset-0 ${className}`,
|
|
4887
|
+
style: { zIndex: 999998 }
|
|
4888
|
+
}
|
|
4889
|
+
);
|
|
4890
|
+
}
|
|
4891
|
+
);
|
|
4892
|
+
CheerParticles.displayName = "CheerParticles";
|
|
4570
4893
|
|
|
4571
4894
|
// src/mmd/visual-novel/MMDVisualNovel.tsx
|
|
4572
4895
|
var MMDVisualNovel = forwardRef(
|
|
@@ -4609,6 +4932,7 @@ var MMDVisualNovel = forwardRef(
|
|
|
4609
4932
|
const [isCameraManual, setIsCameraManual] = useState(false);
|
|
4610
4933
|
const [variables, setVariables] = useState({});
|
|
4611
4934
|
const [activeEffect, setActiveEffect] = useState(null);
|
|
4935
|
+
const [showLoopConfirm, setShowLoopConfirm] = useState(false);
|
|
4612
4936
|
const playerRef = useRef(null);
|
|
4613
4937
|
const containerRef = useRef(null);
|
|
4614
4938
|
const autoTimerRef = useRef(null);
|
|
@@ -4617,6 +4941,7 @@ var MMDVisualNovel = forwardRef(
|
|
|
4617
4941
|
const lastAnimationTimeRef = useRef(0);
|
|
4618
4942
|
const isVmdFinishedRef = useRef(false);
|
|
4619
4943
|
const effectTimerRef = useRef(null);
|
|
4944
|
+
const cheerParticlesRef = useRef(null);
|
|
4620
4945
|
const currentNode = nodes[currentNodeIndex];
|
|
4621
4946
|
const currentDialogue = currentNode?.dialogues[currentDialogueIndex] || null;
|
|
4622
4947
|
const addToHistory = useCallback((dialogue, nodeIndex, dialogueIndex) => {
|
|
@@ -4698,7 +5023,8 @@ var MMDVisualNovel = forwardRef(
|
|
|
4698
5023
|
if (nextNodeIndex < nodes.length && nextNodeIndex >= 0) {
|
|
4699
5024
|
goToNode(nextNodeIndex);
|
|
4700
5025
|
} else if (loop) {
|
|
4701
|
-
|
|
5026
|
+
console.log("[MMDVisualNovel] \u5230\u8FBE\u6700\u540E\u4E00\u4E2A\u8282\u70B9\uFF0C\u663E\u793A\u5FAA\u73AF\u786E\u8BA4\u5BF9\u8BDD\u6846");
|
|
5027
|
+
setShowLoopConfirm(true);
|
|
4702
5028
|
} else {
|
|
4703
5029
|
onScriptComplete?.();
|
|
4704
5030
|
}
|
|
@@ -4778,6 +5104,9 @@ var MMDVisualNovel = forwardRef(
|
|
|
4778
5104
|
setIsAutoMode((prev) => !prev);
|
|
4779
5105
|
}, []);
|
|
4780
5106
|
const handleSkip = useCallback(() => {
|
|
5107
|
+
if (showLoopConfirm) {
|
|
5108
|
+
return;
|
|
5109
|
+
}
|
|
4781
5110
|
if (currentNode?.choices && currentNode.choices.length > 0) {
|
|
4782
5111
|
setShowChoices(true);
|
|
4783
5112
|
return;
|
|
@@ -4786,11 +5115,12 @@ var MMDVisualNovel = forwardRef(
|
|
|
4786
5115
|
if (nextNodeIndex < nodes.length) {
|
|
4787
5116
|
goToNode(nextNodeIndex);
|
|
4788
5117
|
} else if (loop) {
|
|
4789
|
-
|
|
5118
|
+
console.log("[MMDVisualNovel] \u5FEB\u8FDB\u5230\u6700\u540E\uFF0C\u663E\u793A\u5FAA\u73AF\u786E\u8BA4\u5BF9\u8BDD\u6846");
|
|
5119
|
+
setShowLoopConfirm(true);
|
|
4790
5120
|
} else {
|
|
4791
5121
|
onScriptComplete?.();
|
|
4792
5122
|
}
|
|
4793
|
-
}, [currentNodeIndex, nodes.length, loop, goToNode, onScriptComplete]);
|
|
5123
|
+
}, [currentNode, currentNodeIndex, nodes.length, loop, goToNode, onScriptComplete, showLoopConfirm]);
|
|
4794
5124
|
const handleStart = useCallback(() => {
|
|
4795
5125
|
setIsStarted(true);
|
|
4796
5126
|
isStartedRef.current = true;
|
|
@@ -4801,6 +5131,28 @@ var MMDVisualNovel = forwardRef(
|
|
|
4801
5131
|
playerRef.current?.play();
|
|
4802
5132
|
}, 100);
|
|
4803
5133
|
}, [currentNode, currentNodeIndex, addToHistory]);
|
|
5134
|
+
const handleBackToStart = useCallback(() => {
|
|
5135
|
+
setShowLoopConfirm(false);
|
|
5136
|
+
setIsStarted(false);
|
|
5137
|
+
isStartedRef.current = false;
|
|
5138
|
+
setCurrentNodeIndex(initialNodeIndex);
|
|
5139
|
+
setCurrentDialogueIndex(initialDialogueIndex);
|
|
5140
|
+
setHistory([]);
|
|
5141
|
+
setVariables({});
|
|
5142
|
+
setIsLoading(true);
|
|
5143
|
+
setIsAnimationPlaying(false);
|
|
5144
|
+
typingCompleteRef.current = false;
|
|
5145
|
+
console.log("[MMDVisualNovel] \u56DE\u5230\u5F00\u59CB\u9875\u9762");
|
|
5146
|
+
}, [initialNodeIndex, initialDialogueIndex]);
|
|
5147
|
+
const handleCheer = useCallback(() => {
|
|
5148
|
+
console.log("[MMDVisualNovel] \u89E6\u53D1\u5E94\u63F4\u6548\u679C");
|
|
5149
|
+
cheerParticlesRef.current?.trigger();
|
|
5150
|
+
}, []);
|
|
5151
|
+
const handleRestartLoop = useCallback(() => {
|
|
5152
|
+
setShowLoopConfirm(false);
|
|
5153
|
+
goToNode(0, true);
|
|
5154
|
+
console.log("[MMDVisualNovel] \u91CD\u65B0\u5F00\u59CB\u5FAA\u73AF");
|
|
5155
|
+
}, [goToNode]);
|
|
4804
5156
|
useImperativeHandle(
|
|
4805
5157
|
ref,
|
|
4806
5158
|
() => ({
|
|
@@ -4837,16 +5189,16 @@ var MMDVisualNovel = forwardRef(
|
|
|
4837
5189
|
};
|
|
4838
5190
|
}, []);
|
|
4839
5191
|
if (!currentNode) {
|
|
4840
|
-
return /* @__PURE__ */
|
|
5192
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u5267\u672C\u4E3A\u7A7A");
|
|
4841
5193
|
}
|
|
4842
|
-
return /* @__PURE__ */
|
|
5194
|
+
return /* @__PURE__ */ React24.createElement(
|
|
4843
5195
|
"div",
|
|
4844
5196
|
{
|
|
4845
5197
|
ref: containerRef,
|
|
4846
5198
|
className: `relative bg-black ${className}`,
|
|
4847
5199
|
style: { width: "100%", height: "100%", overflow: "hidden", ...style }
|
|
4848
5200
|
},
|
|
4849
|
-
/* @__PURE__ */
|
|
5201
|
+
/* @__PURE__ */ React24.createElement(
|
|
4850
5202
|
"div",
|
|
4851
5203
|
{
|
|
4852
5204
|
className: "absolute inset-0 w-full h-full",
|
|
@@ -4857,7 +5209,7 @@ var MMDVisualNovel = forwardRef(
|
|
|
4857
5209
|
transition: "opacity 0.3s ease-in-out"
|
|
4858
5210
|
}
|
|
4859
5211
|
},
|
|
4860
|
-
!isTransitioning && /* @__PURE__ */
|
|
5212
|
+
!isTransitioning && /* @__PURE__ */ React24.createElement(
|
|
4861
5213
|
MMDPlayerBase,
|
|
4862
5214
|
{
|
|
4863
5215
|
key: currentNode.id,
|
|
@@ -4906,13 +5258,13 @@ var MMDVisualNovel = forwardRef(
|
|
|
4906
5258
|
}
|
|
4907
5259
|
)
|
|
4908
5260
|
),
|
|
4909
|
-
activeEffect && /* @__PURE__ */
|
|
5261
|
+
activeEffect && /* @__PURE__ */ React24.createElement(
|
|
4910
5262
|
"div",
|
|
4911
5263
|
{
|
|
4912
5264
|
className: "pointer-events-none absolute inset-0 flex items-center justify-center",
|
|
4913
5265
|
style: { zIndex: 999 }
|
|
4914
5266
|
},
|
|
4915
|
-
activeEffect.type === "flash" && /* @__PURE__ */
|
|
5267
|
+
activeEffect.type === "flash" && /* @__PURE__ */ React24.createElement(
|
|
4916
5268
|
"div",
|
|
4917
5269
|
{
|
|
4918
5270
|
className: "h-full w-full",
|
|
@@ -4922,7 +5274,7 @@ var MMDVisualNovel = forwardRef(
|
|
|
4922
5274
|
}
|
|
4923
5275
|
}
|
|
4924
5276
|
),
|
|
4925
|
-
activeEffect.type === "gif" && activeEffect.url && /* @__PURE__ */
|
|
5277
|
+
activeEffect.type === "gif" && activeEffect.url && /* @__PURE__ */ React24.createElement(
|
|
4926
5278
|
"img",
|
|
4927
5279
|
{
|
|
4928
5280
|
src: activeEffect.url,
|
|
@@ -4930,7 +5282,7 @@ var MMDVisualNovel = forwardRef(
|
|
|
4930
5282
|
className: activeEffect.position === "full" ? "h-full w-full object-cover" : "max-h-full max-w-full"
|
|
4931
5283
|
}
|
|
4932
5284
|
),
|
|
4933
|
-
/* @__PURE__ */
|
|
5285
|
+
/* @__PURE__ */ React24.createElement("style", null, `
|
|
4934
5286
|
@keyframes flash-anim {
|
|
4935
5287
|
0% { opacity: 0; }
|
|
4936
5288
|
25% { opacity: 1; }
|
|
@@ -4938,7 +5290,7 @@ var MMDVisualNovel = forwardRef(
|
|
|
4938
5290
|
}
|
|
4939
5291
|
`)
|
|
4940
5292
|
),
|
|
4941
|
-
/* @__PURE__ */
|
|
5293
|
+
/* @__PURE__ */ React24.createElement(
|
|
4942
5294
|
LoadingOverlay,
|
|
4943
5295
|
{
|
|
4944
5296
|
isLoading: (() => {
|
|
@@ -4962,17 +5314,18 @@ var MMDVisualNovel = forwardRef(
|
|
|
4962
5314
|
}
|
|
4963
5315
|
),
|
|
4964
5316
|
(() => {
|
|
4965
|
-
const shouldShow = isStarted && isAnimationPlaying && currentDialogue && !showHistory && !showChoices;
|
|
5317
|
+
const shouldShow = isStarted && isAnimationPlaying && currentDialogue && !showHistory && !showChoices && !showLoopConfirm;
|
|
4966
5318
|
console.log("[MMDVisualNovel] DialogueBox render condition:", {
|
|
4967
5319
|
isStarted,
|
|
4968
5320
|
isAnimationPlaying,
|
|
4969
5321
|
hasDialogue: !!currentDialogue,
|
|
4970
5322
|
showHistory,
|
|
4971
5323
|
showChoices,
|
|
5324
|
+
showLoopConfirm,
|
|
4972
5325
|
shouldShow,
|
|
4973
5326
|
dialogue: currentDialogue
|
|
4974
5327
|
});
|
|
4975
|
-
return shouldShow ? /* @__PURE__ */
|
|
5328
|
+
return shouldShow ? /* @__PURE__ */ React24.createElement(
|
|
4976
5329
|
DialogueBox,
|
|
4977
5330
|
{
|
|
4978
5331
|
dialogue: currentDialogue,
|
|
@@ -4998,7 +5351,7 @@ var MMDVisualNovel = forwardRef(
|
|
|
4998
5351
|
}
|
|
4999
5352
|
) : null;
|
|
5000
5353
|
})(),
|
|
5001
|
-
pendingNodeIndex !== null && /* @__PURE__ */
|
|
5354
|
+
pendingNodeIndex !== null && /* @__PURE__ */ React24.createElement(
|
|
5002
5355
|
SkipConfirmDialog,
|
|
5003
5356
|
{
|
|
5004
5357
|
onConfirm: () => {
|
|
@@ -5011,7 +5364,7 @@ var MMDVisualNovel = forwardRef(
|
|
|
5011
5364
|
}
|
|
5012
5365
|
}
|
|
5013
5366
|
),
|
|
5014
|
-
showChoices && (currentDialogue?.choices || currentNode.choices) && /* @__PURE__ */
|
|
5367
|
+
showChoices && (currentDialogue?.choices || currentNode.choices) && /* @__PURE__ */ React24.createElement(
|
|
5015
5368
|
ChoiceMenu,
|
|
5016
5369
|
{
|
|
5017
5370
|
choices: currentDialogue?.choices || currentNode.choices,
|
|
@@ -5050,13 +5403,29 @@ var MMDVisualNovel = forwardRef(
|
|
|
5050
5403
|
}
|
|
5051
5404
|
}
|
|
5052
5405
|
),
|
|
5053
|
-
showHistory && /* @__PURE__ */
|
|
5406
|
+
showHistory && /* @__PURE__ */ React24.createElement(
|
|
5054
5407
|
HistoryPanel,
|
|
5055
5408
|
{
|
|
5056
5409
|
history,
|
|
5057
5410
|
theme: dialogueTheme,
|
|
5058
5411
|
onClose: () => setShowHistory(false)
|
|
5059
5412
|
}
|
|
5413
|
+
),
|
|
5414
|
+
showLoopConfirm && /* @__PURE__ */ React24.createElement(
|
|
5415
|
+
LoopConfirmDialog,
|
|
5416
|
+
{
|
|
5417
|
+
onRestart: handleRestartLoop,
|
|
5418
|
+
onBackToStart: handleBackToStart
|
|
5419
|
+
}
|
|
5420
|
+
),
|
|
5421
|
+
/* @__PURE__ */ React24.createElement(CheerParticles, { ref: cheerParticlesRef }),
|
|
5422
|
+
/* @__PURE__ */ React24.createElement(
|
|
5423
|
+
CheerButton,
|
|
5424
|
+
{
|
|
5425
|
+
show: isStarted && isAnimationPlaying && !showHistory && !showChoices && !showLoopConfirm && currentNode?.supportCheer === true,
|
|
5426
|
+
onClick: handleCheer,
|
|
5427
|
+
text: "\u5E94\u63F4"
|
|
5428
|
+
}
|
|
5060
5429
|
)
|
|
5061
5430
|
);
|
|
5062
5431
|
}
|
|
@@ -5083,18 +5452,18 @@ var MusicControls = ({
|
|
|
5083
5452
|
return `${mins}:${secs.toString().padStart(2, "0")}`;
|
|
5084
5453
|
};
|
|
5085
5454
|
const progress = duration > 0 ? currentTime / duration * 100 : 0;
|
|
5086
|
-
return /* @__PURE__ */
|
|
5455
|
+
return /* @__PURE__ */ React24.createElement(
|
|
5087
5456
|
"div",
|
|
5088
5457
|
{
|
|
5089
5458
|
className: `w-full max-w-4xl mx-auto px-6 py-4 bg-white/10 backdrop-blur-xl border border-white/20 rounded-2xl shadow-2xl pointer-events-auto transition-all group ${className}`
|
|
5090
5459
|
},
|
|
5091
|
-
/* @__PURE__ */
|
|
5460
|
+
/* @__PURE__ */ React24.createElement("div", { className: "relative w-full h-1.5 bg-white/20 rounded-full mb-4 cursor-pointer group/progress overflow-hidden" }, /* @__PURE__ */ React24.createElement(
|
|
5092
5461
|
"div",
|
|
5093
5462
|
{
|
|
5094
5463
|
className: "absolute h-full bg-blue-500 rounded-full transition-all duration-300",
|
|
5095
5464
|
style: { width: `${progress}%` }
|
|
5096
5465
|
}
|
|
5097
|
-
), /* @__PURE__ */
|
|
5466
|
+
), /* @__PURE__ */ React24.createElement(
|
|
5098
5467
|
"input",
|
|
5099
5468
|
{
|
|
5100
5469
|
type: "range",
|
|
@@ -5105,52 +5474,52 @@ var MusicControls = ({
|
|
|
5105
5474
|
className: "absolute inset-0 w-full h-full opacity-0 cursor-pointer"
|
|
5106
5475
|
}
|
|
5107
5476
|
)),
|
|
5108
|
-
/* @__PURE__ */
|
|
5477
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-2 text-xs font-mono text-white/60 w-32" }, /* @__PURE__ */ React24.createElement("span", null, formatTime(currentTime)), /* @__PURE__ */ React24.createElement("span", null, "/"), /* @__PURE__ */ React24.createElement("span", null, formatTime(duration))), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-6" }, /* @__PURE__ */ React24.createElement(
|
|
5109
5478
|
"button",
|
|
5110
5479
|
{
|
|
5111
5480
|
onClick: onPrevious,
|
|
5112
5481
|
className: "text-white/80 hover:text-white transition-colors"
|
|
5113
5482
|
},
|
|
5114
|
-
/* @__PURE__ */
|
|
5115
|
-
), /* @__PURE__ */
|
|
5483
|
+
/* @__PURE__ */ React24.createElement(SkipBack, { className: "w-6 h-6 fill-current" })
|
|
5484
|
+
), /* @__PURE__ */ React24.createElement(
|
|
5116
5485
|
"button",
|
|
5117
5486
|
{
|
|
5118
5487
|
onClick: onPlayPause,
|
|
5119
5488
|
className: "w-12 h-12 flex items-center justify-center bg-blue-500 hover:bg-blue-400 text-white rounded-full shadow-lg shadow-blue-500/20 transition-all hover:scale-105 active:scale-95"
|
|
5120
5489
|
},
|
|
5121
|
-
isPlaying ? /* @__PURE__ */
|
|
5122
|
-
), /* @__PURE__ */
|
|
5490
|
+
isPlaying ? /* @__PURE__ */ React24.createElement(Pause, { className: "w-6 h-6 fill-current" }) : /* @__PURE__ */ React24.createElement(Play, { className: "w-6 h-6 fill-current ml-1" })
|
|
5491
|
+
), /* @__PURE__ */ React24.createElement(
|
|
5123
5492
|
"button",
|
|
5124
5493
|
{
|
|
5125
5494
|
onClick: onNext,
|
|
5126
5495
|
className: "text-white/80 hover:text-white transition-colors"
|
|
5127
5496
|
},
|
|
5128
|
-
/* @__PURE__ */
|
|
5129
|
-
)), /* @__PURE__ */
|
|
5497
|
+
/* @__PURE__ */ React24.createElement(SkipForward, { className: "w-6 h-6 fill-current" })
|
|
5498
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-4 w-32 justify-end" }, isCameraManual && /* @__PURE__ */ React24.createElement(
|
|
5130
5499
|
"button",
|
|
5131
5500
|
{
|
|
5132
5501
|
onClick: onResetCamera,
|
|
5133
5502
|
className: "text-blue-400 hover:text-blue-300 transition-colors animate-in zoom-in duration-300",
|
|
5134
5503
|
title: "\u6062\u590D\u521D\u59CB\u89C6\u89D2"
|
|
5135
5504
|
},
|
|
5136
|
-
/* @__PURE__ */
|
|
5137
|
-
), /* @__PURE__ */
|
|
5505
|
+
/* @__PURE__ */ React24.createElement(Camera, { className: "w-5 h-5" })
|
|
5506
|
+
), /* @__PURE__ */ React24.createElement(
|
|
5138
5507
|
"button",
|
|
5139
5508
|
{
|
|
5140
5509
|
onClick: onToggleLoop,
|
|
5141
5510
|
className: "text-white/60 hover:text-white transition-colors",
|
|
5142
5511
|
title: loopMode
|
|
5143
5512
|
},
|
|
5144
|
-
loopMode === "list" && /* @__PURE__ */
|
|
5145
|
-
loopMode === "single" && /* @__PURE__ */
|
|
5146
|
-
loopMode === "shuffle" && /* @__PURE__ */
|
|
5147
|
-
), /* @__PURE__ */
|
|
5513
|
+
loopMode === "list" && /* @__PURE__ */ React24.createElement(Repeat, { className: "w-5 h-5" }),
|
|
5514
|
+
loopMode === "single" && /* @__PURE__ */ React24.createElement(Repeat1, { className: "w-5 h-5 text-blue-400" }),
|
|
5515
|
+
loopMode === "shuffle" && /* @__PURE__ */ React24.createElement(Shuffle, { className: "w-5 h-5 text-orange-400" })
|
|
5516
|
+
), /* @__PURE__ */ React24.createElement(
|
|
5148
5517
|
"button",
|
|
5149
5518
|
{
|
|
5150
5519
|
onClick: onTogglePlaylist,
|
|
5151
5520
|
className: "text-white/60 hover:text-white transition-colors"
|
|
5152
5521
|
},
|
|
5153
|
-
/* @__PURE__ */
|
|
5522
|
+
/* @__PURE__ */ React24.createElement(ListMusic, { className: "w-5 h-5" })
|
|
5154
5523
|
)))
|
|
5155
5524
|
);
|
|
5156
5525
|
};
|
|
@@ -5165,25 +5534,25 @@ var PlaylistPanel = ({
|
|
|
5165
5534
|
onSearch,
|
|
5166
5535
|
isSearching
|
|
5167
5536
|
}) => {
|
|
5168
|
-
const [searchValue, setSearchValue] =
|
|
5537
|
+
const [searchValue, setSearchValue] = React24.useState("");
|
|
5169
5538
|
if (!isOpen) return null;
|
|
5170
5539
|
const handleSearchSubmit = (e) => {
|
|
5171
5540
|
e.preventDefault();
|
|
5172
5541
|
onSearch?.(searchValue);
|
|
5173
5542
|
};
|
|
5174
|
-
return /* @__PURE__ */
|
|
5543
|
+
return /* @__PURE__ */ React24.createElement(
|
|
5175
5544
|
"div",
|
|
5176
5545
|
{
|
|
5177
5546
|
className: `fixed inset-y-0 right-0 w-80 bg-gray-900/90 backdrop-blur-2xl border-l border-white/10 shadow-2xl z-50 flex flex-col pointer-events-auto transform transition-transform duration-500 ease-out ${isOpen ? "translate-x-0" : "translate-x-full"} ${className}`
|
|
5178
5547
|
},
|
|
5179
|
-
/* @__PURE__ */
|
|
5548
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex flex-col p-6 border-b border-white/10 gap-4" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React24.createElement(Music, { className: "w-5 h-5 text-blue-400" }), /* @__PURE__ */ React24.createElement("h3", { className: "text-lg font-bold text-white" }, mikuMode ? "Miku \u6B4C\u66F2\u5E93" : "\u64AD\u653E\u5217\u8868")), /* @__PURE__ */ React24.createElement(
|
|
5180
5549
|
"button",
|
|
5181
5550
|
{
|
|
5182
5551
|
onClick: onClose,
|
|
5183
5552
|
className: "p-2 text-white/60 hover:text-white transition-colors"
|
|
5184
5553
|
},
|
|
5185
|
-
/* @__PURE__ */
|
|
5186
|
-
)), mikuMode && /* @__PURE__ */
|
|
5554
|
+
/* @__PURE__ */ React24.createElement(X, { className: "w-5 h-5" })
|
|
5555
|
+
)), mikuMode && /* @__PURE__ */ React24.createElement("form", { onSubmit: handleSearchSubmit, className: "relative" }, /* @__PURE__ */ React24.createElement(
|
|
5187
5556
|
"input",
|
|
5188
5557
|
{
|
|
5189
5558
|
type: "text",
|
|
@@ -5192,23 +5561,23 @@ var PlaylistPanel = ({
|
|
|
5192
5561
|
placeholder: "\u641C\u7D22 Miku \u6B4C\u66F2...",
|
|
5193
5562
|
className: "w-full bg-white/5 border border-white/10 rounded-lg py-2 pl-10 pr-4 text-sm text-white placeholder:text-white/20 focus:outline-none focus:border-blue-500/50 transition-colors"
|
|
5194
5563
|
}
|
|
5195
|
-
), /* @__PURE__ */
|
|
5196
|
-
/* @__PURE__ */
|
|
5564
|
+
), /* @__PURE__ */ React24.createElement(Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-white/20" }), isSearching && /* @__PURE__ */ React24.createElement(Loader2, { className: "absolute right-3 top-1/2 -translate-y-1/2 w-4 h-4 text-blue-400 animate-spin" }))),
|
|
5565
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex-1 overflow-y-auto p-4 space-y-2 custom-scrollbar" }, tracks.map((track, index) => {
|
|
5197
5566
|
const isActive = index === currentIndex;
|
|
5198
|
-
return /* @__PURE__ */
|
|
5567
|
+
return /* @__PURE__ */ React24.createElement(
|
|
5199
5568
|
"button",
|
|
5200
5569
|
{
|
|
5201
5570
|
key: track.id,
|
|
5202
5571
|
onClick: () => onSelectTrack(index),
|
|
5203
5572
|
className: `w-full flex items-center gap-4 p-3 rounded-xl transition-all group ${isActive ? "bg-blue-500/20 border border-blue-500/30" : "hover:bg-white/5 border border-transparent"}`
|
|
5204
5573
|
},
|
|
5205
|
-
/* @__PURE__ */
|
|
5206
|
-
/* @__PURE__ */
|
|
5207
|
-
!isActive && /* @__PURE__ */
|
|
5574
|
+
/* @__PURE__ */ React24.createElement("div", { className: "relative w-12 h-12 flex-shrink-0 rounded-lg overflow-hidden bg-gray-800" }, track.coverUrl ? /* @__PURE__ */ React24.createElement("img", { src: track.coverUrl, alt: track.title, className: "w-full h-full object-cover" }) : /* @__PURE__ */ React24.createElement("div", { className: "w-full h-full flex items-center justify-center text-white/20" }, /* @__PURE__ */ React24.createElement(Music, { className: "w-6 h-6" })), isActive && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 bg-blue-500/40 flex items-center justify-center" }, /* @__PURE__ */ React24.createElement("div", { className: "flex gap-1 items-end h-4" }, /* @__PURE__ */ React24.createElement("div", { className: "w-1 bg-white animate-music-bar-1" }), /* @__PURE__ */ React24.createElement("div", { className: "w-1 bg-white animate-music-bar-2" }), /* @__PURE__ */ React24.createElement("div", { className: "w-1 bg-white animate-music-bar-3" })))),
|
|
5575
|
+
/* @__PURE__ */ React24.createElement("div", { className: "flex-1 text-left min-w-0" }, /* @__PURE__ */ React24.createElement("h4", { className: `text-sm font-bold truncate ${isActive ? "text-blue-400" : "text-white/90"}` }, track.title), /* @__PURE__ */ React24.createElement("p", { className: "text-xs text-white/40 truncate mt-0.5" }, track.artist || "\u672A\u77E5\u827A\u672F\u5BB6")),
|
|
5576
|
+
!isActive && /* @__PURE__ */ React24.createElement("div", { className: "opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React24.createElement(Play, { className: "w-4 h-4 text-white/40 fill-current" }))
|
|
5208
5577
|
);
|
|
5209
5578
|
})),
|
|
5210
|
-
/* @__PURE__ */
|
|
5211
|
-
/* @__PURE__ */
|
|
5579
|
+
/* @__PURE__ */ React24.createElement("div", { className: "p-6 border-t border-white/10" }, /* @__PURE__ */ React24.createElement("p", { className: "text-xs text-gray-500 text-center" }, "\u5171 ", tracks.length, " \u9996\u66F2\u76EE")),
|
|
5580
|
+
/* @__PURE__ */ React24.createElement("style", { dangerouslySetInnerHTML: { __html: `
|
|
5212
5581
|
.custom-scrollbar::-webkit-scrollbar {
|
|
5213
5582
|
width: 4px;
|
|
5214
5583
|
}
|
|
@@ -5241,7 +5610,7 @@ var PlaylistPanel = ({
|
|
|
5241
5610
|
);
|
|
5242
5611
|
};
|
|
5243
5612
|
var TrackInfo = ({ track, className = "" }) => {
|
|
5244
|
-
return /* @__PURE__ */
|
|
5613
|
+
return /* @__PURE__ */ React24.createElement("div", { className: `flex flex-col items-center text-center gap-2 ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "px-4 py-1.5 bg-black/40 backdrop-blur-md rounded-full border border-white/10 shadow-lg" }, /* @__PURE__ */ React24.createElement("h2", { className: "text-lg font-bold text-white tracking-wider truncate max-w-md" }, track.title)), /* @__PURE__ */ React24.createElement("p", { className: "text-sm font-medium text-white/60 drop-shadow-md" }, track.artist || "\u672A\u77E5\u827A\u672F\u5BB6"));
|
|
5245
5614
|
};
|
|
5246
5615
|
|
|
5247
5616
|
// src/mmd/music-player/MMDMusicPlayer.tsx
|
|
@@ -5443,9 +5812,9 @@ var MMDMusicPlayer = forwardRef(
|
|
|
5443
5812
|
};
|
|
5444
5813
|
}, [resetUITimeout]);
|
|
5445
5814
|
if (!currentTrack) {
|
|
5446
|
-
return /* @__PURE__ */
|
|
5815
|
+
return /* @__PURE__ */ React24.createElement("div", { className: "flex h-full w-full items-center justify-center bg-black text-white" }, "\u64AD\u653E\u5217\u8868\u4E3A\u7A7A");
|
|
5447
5816
|
}
|
|
5448
|
-
return /* @__PURE__ */
|
|
5817
|
+
return /* @__PURE__ */ React24.createElement(
|
|
5449
5818
|
"div",
|
|
5450
5819
|
{
|
|
5451
5820
|
ref: containerRef,
|
|
@@ -5454,7 +5823,7 @@ var MMDMusicPlayer = forwardRef(
|
|
|
5454
5823
|
onMouseMove: resetUITimeout,
|
|
5455
5824
|
onClick: resetUITimeout
|
|
5456
5825
|
},
|
|
5457
|
-
/* @__PURE__ */
|
|
5826
|
+
/* @__PURE__ */ React24.createElement(
|
|
5458
5827
|
"div",
|
|
5459
5828
|
{
|
|
5460
5829
|
className: "absolute inset-0 w-full h-full",
|
|
@@ -5464,7 +5833,7 @@ var MMDMusicPlayer = forwardRef(
|
|
|
5464
5833
|
transition: "opacity 0.5s ease-in-out"
|
|
5465
5834
|
}
|
|
5466
5835
|
},
|
|
5467
|
-
!isTransitioning && /* @__PURE__ */
|
|
5836
|
+
!isTransitioning && /* @__PURE__ */ React24.createElement(
|
|
5468
5837
|
MMDPlayerBase,
|
|
5469
5838
|
{
|
|
5470
5839
|
ref: playerRef,
|
|
@@ -5498,14 +5867,14 @@ var MMDMusicPlayer = forwardRef(
|
|
|
5498
5867
|
}
|
|
5499
5868
|
)
|
|
5500
5869
|
),
|
|
5501
|
-
(isLoading || isTransitioning) && /* @__PURE__ */
|
|
5502
|
-
/* @__PURE__ */
|
|
5870
|
+
(isLoading || isTransitioning) && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-50 flex items-center justify-center bg-black/60 backdrop-blur-md" }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col items-center gap-4" }, /* @__PURE__ */ React24.createElement("div", { className: "h-12 w-12 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" }), /* @__PURE__ */ React24.createElement("div", { className: "text-white font-medium" }, isTransitioning ? "\u51C6\u5907\u4E0B\u4E00\u9996..." : "\u6B63\u5728\u52A0\u8F7D\u821E\u53F0..."))),
|
|
5871
|
+
/* @__PURE__ */ React24.createElement(
|
|
5503
5872
|
"div",
|
|
5504
5873
|
{
|
|
5505
5874
|
className: `absolute inset-0 z-10 flex flex-col justify-between transition-opacity duration-700 pointer-events-none ${isUIVisible ? "opacity-100" : "opacity-0"}`
|
|
5506
5875
|
},
|
|
5507
|
-
/* @__PURE__ */
|
|
5508
|
-
/* @__PURE__ */
|
|
5876
|
+
/* @__PURE__ */ React24.createElement("div", { className: "pt-12 px-8 flex justify-center" }, /* @__PURE__ */ React24.createElement(TrackInfo, { track: currentTrack })),
|
|
5877
|
+
/* @__PURE__ */ React24.createElement("div", { className: "pb-12 px-8" }, /* @__PURE__ */ React24.createElement(
|
|
5509
5878
|
MusicControls,
|
|
5510
5879
|
{
|
|
5511
5880
|
isPlaying,
|
|
@@ -5530,7 +5899,7 @@ var MMDMusicPlayer = forwardRef(
|
|
|
5530
5899
|
}
|
|
5531
5900
|
))
|
|
5532
5901
|
),
|
|
5533
|
-
/* @__PURE__ */
|
|
5902
|
+
/* @__PURE__ */ React24.createElement(
|
|
5534
5903
|
PlaylistPanel,
|
|
5535
5904
|
{
|
|
5536
5905
|
tracks,
|
|
@@ -5668,13 +6037,13 @@ var MMDARPlayer = forwardRef((props, ref) => {
|
|
|
5668
6037
|
}
|
|
5669
6038
|
return () => stopCamera();
|
|
5670
6039
|
}, [autoPlay, startCamera, stopCamera]);
|
|
5671
|
-
return /* @__PURE__ */
|
|
6040
|
+
return /* @__PURE__ */ React24.createElement(
|
|
5672
6041
|
"div",
|
|
5673
6042
|
{
|
|
5674
6043
|
className: `relative w-full h-full bg-black overflow-hidden ${className}`,
|
|
5675
6044
|
style
|
|
5676
6045
|
},
|
|
5677
|
-
/* @__PURE__ */
|
|
6046
|
+
/* @__PURE__ */ React24.createElement(
|
|
5678
6047
|
"video",
|
|
5679
6048
|
{
|
|
5680
6049
|
ref: videoRef,
|
|
@@ -5685,13 +6054,13 @@ var MMDARPlayer = forwardRef((props, ref) => {
|
|
|
5685
6054
|
style: { zIndex: 0 }
|
|
5686
6055
|
}
|
|
5687
6056
|
),
|
|
5688
|
-
/* @__PURE__ */
|
|
6057
|
+
/* @__PURE__ */ React24.createElement(
|
|
5689
6058
|
"div",
|
|
5690
6059
|
{
|
|
5691
6060
|
className: "absolute inset-0 w-full h-full",
|
|
5692
6061
|
style: { zIndex: 1 }
|
|
5693
6062
|
},
|
|
5694
|
-
/* @__PURE__ */
|
|
6063
|
+
/* @__PURE__ */ React24.createElement(
|
|
5695
6064
|
MMDPlayerBase,
|
|
5696
6065
|
{
|
|
5697
6066
|
ref: playerRef,
|
|
@@ -5714,45 +6083,45 @@ var MMDARPlayer = forwardRef((props, ref) => {
|
|
|
5714
6083
|
}
|
|
5715
6084
|
)
|
|
5716
6085
|
),
|
|
5717
|
-
/* @__PURE__ */
|
|
6086
|
+
/* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 z-10 pointer-events-none flex flex-col justify-between p-6" }, /* @__PURE__ */ React24.createElement("div", { className: "flex justify-between items-start pointer-events-auto" }, cameraError ? /* @__PURE__ */ React24.createElement("div", { className: "bg-red-500/80 backdrop-blur-md text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm" }, /* @__PURE__ */ React24.createElement(AlertCircle, { className: "w-4 h-4" }), cameraError, /* @__PURE__ */ React24.createElement(
|
|
5718
6087
|
"button",
|
|
5719
6088
|
{
|
|
5720
6089
|
onClick: () => startCamera(),
|
|
5721
6090
|
className: "ml-2 underline"
|
|
5722
6091
|
},
|
|
5723
6092
|
"\u91CD\u8BD5"
|
|
5724
|
-
)) : /* @__PURE__ */
|
|
6093
|
+
)) : /* @__PURE__ */ React24.createElement("div", { className: "bg-black/40 backdrop-blur-md text-white px-4 py-2 rounded-full flex items-center gap-2 text-sm" }, /* @__PURE__ */ React24.createElement(Camera, { className: "w-4 h-4 text-green-400" }), isCameraStarted ? "\u5B9E\u666F AR \u6A21\u5F0F\u5DF2\u5F00\u542F" : "\u7B49\u5F85\u6444\u50CF\u5934..."), /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col gap-2" }, showSettings && /* @__PURE__ */ React24.createElement(
|
|
5725
6094
|
"button",
|
|
5726
6095
|
{
|
|
5727
6096
|
onClick: () => setIsSettingsOpen(!isSettingsOpen),
|
|
5728
6097
|
className: `p-3 backdrop-blur-md rounded-full text-white transition-all active:scale-95 pointer-events-auto ${isSettingsOpen ? "bg-blue-500" : "bg-white/10 hover:bg-white/20"}`,
|
|
5729
6098
|
title: "\u8BBE\u7F6E\u6A21\u578B\u4E0E\u52A8\u4F5C"
|
|
5730
6099
|
},
|
|
5731
|
-
/* @__PURE__ */
|
|
5732
|
-
), /* @__PURE__ */
|
|
6100
|
+
/* @__PURE__ */ React24.createElement(Settings, { className: "w-5 h-5" })
|
|
6101
|
+
), /* @__PURE__ */ React24.createElement(
|
|
5733
6102
|
"button",
|
|
5734
6103
|
{
|
|
5735
6104
|
onClick: switchCamera,
|
|
5736
6105
|
className: "p-3 bg-white/10 hover:bg-white/20 backdrop-blur-md rounded-full text-white transition-all active:scale-95 pointer-events-auto",
|
|
5737
6106
|
title: "\u5207\u6362\u524D\u540E\u6444\u50CF\u5934"
|
|
5738
6107
|
},
|
|
5739
|
-
/* @__PURE__ */
|
|
5740
|
-
), /* @__PURE__ */
|
|
6108
|
+
/* @__PURE__ */ React24.createElement(RefreshCw, { className: "w-5 h-5" })
|
|
6109
|
+
), /* @__PURE__ */ React24.createElement(
|
|
5741
6110
|
"button",
|
|
5742
6111
|
{
|
|
5743
6112
|
onClick: isCameraStarted ? stopCamera : () => startCamera(),
|
|
5744
6113
|
className: `p-3 backdrop-blur-md rounded-full text-white transition-all active:scale-95 pointer-events-auto ${isCameraStarted ? "bg-red-500/20 hover:bg-red-500/40" : "bg-green-500/20 hover:bg-green-500/40"}`,
|
|
5745
6114
|
title: isCameraStarted ? "\u5173\u95ED\u6444\u50CF\u5934" : "\u5F00\u542F\u6444\u50CF\u5934"
|
|
5746
6115
|
},
|
|
5747
|
-
isCameraStarted ? /* @__PURE__ */
|
|
5748
|
-
))), isSettingsOpen && /* @__PURE__ */
|
|
6116
|
+
isCameraStarted ? /* @__PURE__ */ React24.createElement(CameraOff, { className: "w-5 h-5" }) : /* @__PURE__ */ React24.createElement(Camera, { className: "w-5 h-5" })
|
|
6117
|
+
))), isSettingsOpen && /* @__PURE__ */ React24.createElement("div", { className: "absolute top-20 right-6 w-80 bg-black/80 backdrop-blur-xl border border-white/10 rounded-2xl p-6 pointer-events-auto shadow-2xl animate-in slide-in-from-right-4 duration-300" }, /* @__PURE__ */ React24.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ React24.createElement("h3", { className: "text-white font-bold flex items-center gap-2" }, /* @__PURE__ */ React24.createElement(Settings, { className: "w-4 h-4" }), "\u8D44\u6E90\u8BBE\u7F6E"), /* @__PURE__ */ React24.createElement(
|
|
5749
6118
|
"button",
|
|
5750
6119
|
{
|
|
5751
6120
|
onClick: () => setIsSettingsOpen(false),
|
|
5752
6121
|
className: "p-1 hover:bg-white/10 rounded-full transition-colors text-white/60"
|
|
5753
6122
|
},
|
|
5754
|
-
/* @__PURE__ */
|
|
5755
|
-
)), /* @__PURE__ */
|
|
6123
|
+
/* @__PURE__ */ React24.createElement(X, { className: "w-4 h-4" })
|
|
6124
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("label", { className: "block text-xs font-medium text-white/50 mb-1.5 ml-1 uppercase tracking-wider" }, "\u6A21\u578B\u8DEF\u5F84 (.pmx)"), /* @__PURE__ */ React24.createElement(
|
|
5756
6125
|
"input",
|
|
5757
6126
|
{
|
|
5758
6127
|
type: "text",
|
|
@@ -5761,7 +6130,7 @@ var MMDARPlayer = forwardRef((props, ref) => {
|
|
|
5761
6130
|
placeholder: "\u8BF7\u8F93\u5165\u6A21\u578B URL...",
|
|
5762
6131
|
className: "w-full bg-white/5 border border-white/10 rounded-xl px-4 py-2.5 text-sm text-white placeholder:text-white/10 focus:outline-none focus:border-blue-500/50 transition-colors"
|
|
5763
6132
|
}
|
|
5764
|
-
)), /* @__PURE__ */
|
|
6133
|
+
)), /* @__PURE__ */ React24.createElement("div", null, /* @__PURE__ */ React24.createElement("label", { className: "block text-xs font-medium text-white/50 mb-1.5 ml-1 uppercase tracking-wider" }, "\u52A8\u4F5C\u8DEF\u5F84 (.vmd)"), /* @__PURE__ */ React24.createElement(
|
|
5765
6134
|
"input",
|
|
5766
6135
|
{
|
|
5767
6136
|
type: "text",
|
|
@@ -5770,7 +6139,7 @@ var MMDARPlayer = forwardRef((props, ref) => {
|
|
|
5770
6139
|
placeholder: "\u8BF7\u8F93\u5165\u52A8\u4F5C URL...",
|
|
5771
6140
|
className: "w-full bg-white/5 border border-white/10 rounded-xl px-4 py-2.5 text-sm text-white placeholder:text-white/10 focus:outline-none focus:border-blue-500/50 transition-colors"
|
|
5772
6141
|
}
|
|
5773
|
-
)), /* @__PURE__ */
|
|
6142
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "pt-2" }, /* @__PURE__ */ React24.createElement(
|
|
5774
6143
|
"button",
|
|
5775
6144
|
{
|
|
5776
6145
|
onClick: () => {
|
|
@@ -5781,9 +6150,9 @@ var MMDARPlayer = forwardRef((props, ref) => {
|
|
|
5781
6150
|
},
|
|
5782
6151
|
className: "w-full bg-blue-500 hover:bg-blue-600 text-white font-bold py-3 rounded-xl flex items-center justify-center gap-2 transition-all active:scale-95 shadow-lg shadow-blue-500/20"
|
|
5783
6152
|
},
|
|
5784
|
-
/* @__PURE__ */
|
|
6153
|
+
/* @__PURE__ */ React24.createElement(Check, { className: "w-4 h-4" }),
|
|
5785
6154
|
"\u5E94\u7528\u66F4\u6539"
|
|
5786
|
-
)))), isLoading && /* @__PURE__ */
|
|
6155
|
+
)))), isLoading && /* @__PURE__ */ React24.createElement("div", { className: "absolute inset-0 flex items-center justify-center pointer-events-none" }, /* @__PURE__ */ React24.createElement("div", { className: "flex flex-col items-center gap-3" }, /* @__PURE__ */ React24.createElement("div", { className: "w-12 h-12 border-4 border-blue-500/30 border-t-blue-500 rounded-full animate-spin" }), /* @__PURE__ */ React24.createElement("div", { className: "text-white text-sm font-medium bg-black/40 px-3 py-1 rounded-full backdrop-blur-sm" }, "\u6B63\u5728\u52A0\u8F7D Miku \u8D44\u6E90..."))))
|
|
5787
6156
|
);
|
|
5788
6157
|
});
|
|
5789
6158
|
MMDARPlayer.displayName = "MMDARPlayer";
|
|
@@ -6036,20 +6405,20 @@ var FXViewer = ({
|
|
|
6036
6405
|
parse();
|
|
6037
6406
|
}, [source, isContent, fileName, onParsed, onError]);
|
|
6038
6407
|
if (loading) {
|
|
6039
|
-
return /* @__PURE__ */
|
|
6408
|
+
return /* @__PURE__ */ React24.createElement("div", { className: `fx-viewer loading ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-spinner" }, "\u52A0\u8F7D\u4E2D..."));
|
|
6040
6409
|
}
|
|
6041
6410
|
if (error || !effect || !summary) {
|
|
6042
|
-
return /* @__PURE__ */
|
|
6411
|
+
return /* @__PURE__ */ React24.createElement("div", { className: `fx-viewer error ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-error" }, /* @__PURE__ */ React24.createElement("h3", null, "\u274C \u89E3\u6790\u9519\u8BEF"), /* @__PURE__ */ React24.createElement("p", null, error || "\u672A\u77E5\u9519\u8BEF")));
|
|
6043
6412
|
}
|
|
6044
6413
|
const validation = validateFXEffect(effect);
|
|
6045
|
-
return /* @__PURE__ */
|
|
6414
|
+
return /* @__PURE__ */ React24.createElement("div", { className: `fx-viewer ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-header" }, /* @__PURE__ */ React24.createElement("h2", null, effect.fileName), /* @__PURE__ */ React24.createElement("p", { className: "fx-viewer-config-summary" }, getConfigSummaryText(effect))), /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-tabs" }, /* @__PURE__ */ React24.createElement(
|
|
6046
6415
|
"button",
|
|
6047
6416
|
{
|
|
6048
6417
|
className: activeTab === "summary" ? "active" : "",
|
|
6049
6418
|
onClick: () => setActiveTab("summary")
|
|
6050
6419
|
},
|
|
6051
6420
|
"\u6458\u8981"
|
|
6052
|
-
), /* @__PURE__ */
|
|
6421
|
+
), /* @__PURE__ */ React24.createElement(
|
|
6053
6422
|
"button",
|
|
6054
6423
|
{
|
|
6055
6424
|
className: activeTab === "defines" ? "active" : "",
|
|
@@ -6058,7 +6427,7 @@ var FXViewer = ({
|
|
|
6058
6427
|
"\u5B8F\u5B9A\u4E49 (",
|
|
6059
6428
|
summary.defineCount,
|
|
6060
6429
|
")"
|
|
6061
|
-
), /* @__PURE__ */
|
|
6430
|
+
), /* @__PURE__ */ React24.createElement(
|
|
6062
6431
|
"button",
|
|
6063
6432
|
{
|
|
6064
6433
|
className: activeTab === "textures" ? "active" : "",
|
|
@@ -6067,7 +6436,7 @@ var FXViewer = ({
|
|
|
6067
6436
|
"\u7EB9\u7406 (",
|
|
6068
6437
|
summary.textureCount,
|
|
6069
6438
|
")"
|
|
6070
|
-
), /* @__PURE__ */
|
|
6439
|
+
), /* @__PURE__ */ React24.createElement(
|
|
6071
6440
|
"button",
|
|
6072
6441
|
{
|
|
6073
6442
|
className: activeTab === "parameters" ? "active" : "",
|
|
@@ -6076,20 +6445,20 @@ var FXViewer = ({
|
|
|
6076
6445
|
"\u53C2\u6570 (",
|
|
6077
6446
|
summary.parameterCount,
|
|
6078
6447
|
")"
|
|
6079
|
-
), /* @__PURE__ */
|
|
6448
|
+
), /* @__PURE__ */ React24.createElement(
|
|
6080
6449
|
"button",
|
|
6081
6450
|
{
|
|
6082
6451
|
className: activeTab === "validation" ? "active" : "",
|
|
6083
6452
|
onClick: () => setActiveTab("validation")
|
|
6084
6453
|
},
|
|
6085
6454
|
"\u9A8C\u8BC1"
|
|
6086
|
-
)), /* @__PURE__ */
|
|
6455
|
+
)), /* @__PURE__ */ React24.createElement("div", { className: "fx-viewer-content" }, activeTab === "summary" && /* @__PURE__ */ React24.createElement(SummaryTab, { summary, effect }), activeTab === "defines" && /* @__PURE__ */ React24.createElement(DefinesTab, { effect }), activeTab === "textures" && /* @__PURE__ */ React24.createElement(TexturesTab, { effect }), activeTab === "parameters" && /* @__PURE__ */ React24.createElement(ParametersTab, { effect }), activeTab === "validation" && /* @__PURE__ */ React24.createElement(ValidationTab, { validation })));
|
|
6087
6456
|
};
|
|
6088
|
-
var SummaryTab = ({ summary, effect }) => /* @__PURE__ */
|
|
6089
|
-
var DefinesTab = ({ effect }) => /* @__PURE__ */
|
|
6090
|
-
var TexturesTab = ({ effect }) => /* @__PURE__ */
|
|
6091
|
-
var ParametersTab = ({ effect }) => /* @__PURE__ */
|
|
6092
|
-
var ValidationTab = ({ validation }) => /* @__PURE__ */
|
|
6457
|
+
var SummaryTab = ({ summary, effect }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-summary" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stats-grid" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-label" }, "\u5B8F\u5B9A\u4E49"), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-value" }, summary.defineCount)), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-label" }, "\u53C2\u6570"), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-value" }, summary.parameterCount)), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-label" }, "\u7EB9\u7406"), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-value" }, summary.textureCount)), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-card" }, /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-label" }, "Technique"), /* @__PURE__ */ React24.createElement("div", { className: "fx-stat-value" }, summary.techniqueCount))), /* @__PURE__ */ React24.createElement("div", { className: "fx-features" }, /* @__PURE__ */ React24.createElement("h3", null, "\u529F\u80FD\u7279\u6027"), /* @__PURE__ */ React24.createElement("div", { className: "fx-feature-list" }, /* @__PURE__ */ React24.createElement("div", { className: `fx-feature ${summary.hasLocalShadow ? "enabled" : "disabled"}` }, summary.hasLocalShadow ? "\u2713" : "\u2717", " LocalShadow"), /* @__PURE__ */ React24.createElement("div", { className: `fx-feature ${summary.hasExcellentShadow ? "enabled" : "disabled"}` }, summary.hasExcellentShadow ? "\u2713" : "\u2717", " ExcellentShadow"), /* @__PURE__ */ React24.createElement("div", { className: `fx-feature ${summary.hasHgShadow ? "enabled" : "disabled"}` }, summary.hasHgShadow ? "\u2713" : "\u2717", " HgShadow"))), effect.includes.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "fx-includes" }, /* @__PURE__ */ React24.createElement("h3", null, "\u5305\u542B\u6587\u4EF6"), /* @__PURE__ */ React24.createElement("ul", null, effect.includes.map((inc, idx) => /* @__PURE__ */ React24.createElement("li", { key: idx }, /* @__PURE__ */ React24.createElement("code", null, inc))))), effect.controllers.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "fx-controllers" }, /* @__PURE__ */ React24.createElement("h3", null, "\u63A7\u5236\u5668"), /* @__PURE__ */ React24.createElement("ul", null, effect.controllers.map((ctrl, idx) => /* @__PURE__ */ React24.createElement("li", { key: idx }, /* @__PURE__ */ React24.createElement("strong", null, ctrl.name), ": ", ctrl.objectName, " / ", ctrl.itemName)))));
|
|
6458
|
+
var DefinesTab = ({ effect }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-defines" }, /* @__PURE__ */ React24.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React24.createElement("thead", null, /* @__PURE__ */ React24.createElement("tr", null, /* @__PURE__ */ React24.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React24.createElement("th", null, "\u503C"), /* @__PURE__ */ React24.createElement("th", null, "\u72B6\u6001"), /* @__PURE__ */ React24.createElement("th", null, "\u884C\u53F7"))), /* @__PURE__ */ React24.createElement("tbody", null, effect.defines.map((define, idx) => /* @__PURE__ */ React24.createElement("tr", { key: idx, className: define.isCommented ? "disabled" : "enabled" }, /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("code", null, define.name)), /* @__PURE__ */ React24.createElement("td", null, define.value || "-"), /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("span", { className: `status-badge ${define.isCommented ? "disabled" : "enabled"}` }, define.isCommented ? "\u7981\u7528" : "\u542F\u7528")), /* @__PURE__ */ React24.createElement("td", null, define.lineNumber))))));
|
|
6459
|
+
var TexturesTab = ({ effect }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-textures" }, effect.textures.length === 0 ? /* @__PURE__ */ React24.createElement("p", { className: "fx-empty-message" }, "\u672A\u627E\u5230\u7EB9\u7406\u5B9A\u4E49") : /* @__PURE__ */ React24.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React24.createElement("thead", null, /* @__PURE__ */ React24.createElement("tr", null, /* @__PURE__ */ React24.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React24.createElement("th", null, "\u8DEF\u5F84"), /* @__PURE__ */ React24.createElement("th", null, "\u5C3A\u5BF8"), /* @__PURE__ */ React24.createElement("th", null, "\u7528\u9014"))), /* @__PURE__ */ React24.createElement("tbody", null, effect.textures.map((texture, idx) => /* @__PURE__ */ React24.createElement("tr", { key: idx }, /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("code", null, texture.name)), /* @__PURE__ */ React24.createElement("td", null, texture.path), /* @__PURE__ */ React24.createElement("td", null, texture.width && texture.height ? `${texture.width}\xD7${texture.height}` : "-"), /* @__PURE__ */ React24.createElement("td", null, texture.purpose || "-"))))));
|
|
6460
|
+
var ParametersTab = ({ effect }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-parameters" }, /* @__PURE__ */ React24.createElement("table", { className: "fx-table" }, /* @__PURE__ */ React24.createElement("thead", null, /* @__PURE__ */ React24.createElement("tr", null, /* @__PURE__ */ React24.createElement("th", null, "\u540D\u79F0"), /* @__PURE__ */ React24.createElement("th", null, "\u7C7B\u578B"), /* @__PURE__ */ React24.createElement("th", null, "\u8BED\u4E49"), /* @__PURE__ */ React24.createElement("th", null, "\u9ED8\u8BA4\u503C"), /* @__PURE__ */ React24.createElement("th", null, "\u884C\u53F7"))), /* @__PURE__ */ React24.createElement("tbody", null, effect.parameters.map((param, idx) => /* @__PURE__ */ React24.createElement("tr", { key: idx }, /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("code", null, param.name)), /* @__PURE__ */ React24.createElement("td", null, /* @__PURE__ */ React24.createElement("code", null, param.type)), /* @__PURE__ */ React24.createElement("td", null, param.semantic || "-"), /* @__PURE__ */ React24.createElement("td", null, param.defaultValue || "-"), /* @__PURE__ */ React24.createElement("td", null, param.lineNumber))))));
|
|
6461
|
+
var ValidationTab = ({ validation }) => /* @__PURE__ */ React24.createElement("div", { className: "fx-tab-validation" }, /* @__PURE__ */ React24.createElement("div", { className: `fx-validation-status ${validation.isValid ? "valid" : "invalid"}` }, /* @__PURE__ */ React24.createElement("h3", null, validation.isValid ? "\u2713 \u9A8C\u8BC1\u901A\u8FC7" : "\u2717 \u9A8C\u8BC1\u5931\u8D25")), validation.errors.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "fx-validation-section fx-errors" }, /* @__PURE__ */ React24.createElement("h4", null, "\u9519\u8BEF (", validation.errors.length, ")"), /* @__PURE__ */ React24.createElement("ul", null, validation.errors.map((error, idx) => /* @__PURE__ */ React24.createElement("li", { key: idx, className: "fx-error-item" }, error)))), validation.warnings.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "fx-validation-section fx-warnings" }, /* @__PURE__ */ React24.createElement("h4", null, "\u8B66\u544A (", validation.warnings.length, ")"), /* @__PURE__ */ React24.createElement("ul", null, validation.warnings.map((warning, idx) => /* @__PURE__ */ React24.createElement("li", { key: idx, className: "fx-warning-item" }, warning)))), validation.isValid && validation.warnings.length === 0 && /* @__PURE__ */ React24.createElement("p", { className: "fx-success-message" }, "FX\u6587\u4EF6\u7ED3\u6784\u5B8C\u6574\uFF0C\u6CA1\u6709\u53D1\u73B0\u95EE\u9898\u3002"));
|
|
6093
6462
|
FXViewer.displayName = "FXViewer";
|
|
6094
6463
|
var FXThreePreview = ({
|
|
6095
6464
|
effect,
|
|
@@ -6215,12 +6584,12 @@ var FXThreePreview = ({
|
|
|
6215
6584
|
};
|
|
6216
6585
|
}, [effect, texturePath, objectType]);
|
|
6217
6586
|
if (loading) {
|
|
6218
|
-
return /* @__PURE__ */
|
|
6587
|
+
return /* @__PURE__ */ React24.createElement("div", { className: `fx-three-preview loading ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "preview-loading" }, "\u52A0\u8F7D\u4E2D..."));
|
|
6219
6588
|
}
|
|
6220
6589
|
if (error) {
|
|
6221
|
-
return /* @__PURE__ */
|
|
6590
|
+
return /* @__PURE__ */ React24.createElement("div", { className: `fx-three-preview error ${className}` }, /* @__PURE__ */ React24.createElement("div", { className: "preview-error" }, /* @__PURE__ */ React24.createElement("h3", null, "\u274C \u6E32\u67D3\u5931\u8D25"), /* @__PURE__ */ React24.createElement("p", null, error)));
|
|
6222
6591
|
}
|
|
6223
|
-
return /* @__PURE__ */
|
|
6592
|
+
return /* @__PURE__ */ React24.createElement("div", { className: `fx-three-preview ${className}` }, /* @__PURE__ */ React24.createElement(
|
|
6224
6593
|
"div",
|
|
6225
6594
|
{
|
|
6226
6595
|
ref: containerRef,
|
|
@@ -6232,7 +6601,7 @@ var FXThreePreview = ({
|
|
|
6232
6601
|
position: "relative"
|
|
6233
6602
|
}
|
|
6234
6603
|
}
|
|
6235
|
-
), showInfo && adapterInfo && /* @__PURE__ */
|
|
6604
|
+
), showInfo && adapterInfo && /* @__PURE__ */ React24.createElement("div", { className: "preview-info" }, /* @__PURE__ */ React24.createElement("div", { className: "info-section" }, /* @__PURE__ */ React24.createElement("h4", null, "\u{1F3A8} \u5E94\u7528\u7684FX\u53C2\u6570"), /* @__PURE__ */ React24.createElement("div", { className: "info-badges" }, /* @__PURE__ */ React24.createElement("span", { className: "badge" }, adapterInfo.materialParams.length, " \u4E2A\u6750\u8D28\u53C2\u6570"), /* @__PURE__ */ React24.createElement("span", { className: "badge" }, adapterInfo.textures.length, " \u4E2A\u7EB9\u7406"), /* @__PURE__ */ React24.createElement("span", { className: "badge" }, adapterInfo.renderFeatures.length, " \u4E2A\u6E32\u67D3\u7279\u6027"))), adapterInfo.renderFeatures.length > 0 && /* @__PURE__ */ React24.createElement("div", { className: "info-section" }, /* @__PURE__ */ React24.createElement("h5", null, "\u542F\u7528\u7684\u7279\u6027:"), /* @__PURE__ */ React24.createElement("div", { className: "feature-list" }, adapterInfo.renderFeatures.map((feature, idx) => /* @__PURE__ */ React24.createElement("span", { key: idx, className: "feature-tag" }, feature))))), /* @__PURE__ */ React24.createElement("style", null, `
|
|
6236
6605
|
.fx-three-preview {
|
|
6237
6606
|
display: flex;
|
|
6238
6607
|
flex-direction: column;
|
|
@@ -6332,6 +6701,6 @@ var FXThreePreview = ({
|
|
|
6332
6701
|
};
|
|
6333
6702
|
FXThreePreview.displayName = "FXThreePreview";
|
|
6334
6703
|
|
|
6335
|
-
export { ChoiceMenu, DialogueBox, FXParser, FXThreePreview, FXToThreeAdapter, FXViewer, HLSLToGLSLConverter, HistoryPanel, LoadingOverlay, LoadingScreen, MMDARPlayer, MMDMusicPlayer, MMDPlayerBase, MMDPlayerEnhanced, MMDPlayerEnhancedDebugInfo, MMDPlaylist, MMDPlaylistDebugInfo, MMDVisualNovel, MultiFXAdapter, MusicControls, PlaylistPanel, StartScreen, TrackInfo, compareFXEffects, exportFXToJSON, exportFXToMarkdown, extractTexturePaths, filterDefinesByPrefix, getColorParameters, getConfigSummaryText, getFeatureFlags, getTextureDefines, hasFeature, loadAmmo, validateFXEffect };
|
|
6704
|
+
export { CheerButton, CheerParticles, ChoiceMenu, DialogueBox, FXParser, FXThreePreview, FXToThreeAdapter, FXViewer, HLSLToGLSLConverter, HistoryPanel, LoadingOverlay, LoadingScreen, LoopConfirmDialog, MMDARPlayer, MMDMusicPlayer, MMDPlayerBase, MMDPlayerEnhanced, MMDPlayerEnhancedDebugInfo, MMDPlaylist, MMDPlaylistDebugInfo, MMDVisualNovel, MultiFXAdapter, MusicControls, PlaylistPanel, StartScreen, TrackInfo, compareFXEffects, exportFXToJSON, exportFXToMarkdown, extractTexturePaths, filterDefinesByPrefix, getColorParameters, getConfigSummaryText, getFeatureFlags, getTextureDefines, hasFeature, loadAmmo, validateFXEffect };
|
|
6336
6705
|
//# sourceMappingURL=index.mjs.map
|
|
6337
6706
|
//# sourceMappingURL=index.mjs.map
|