sa2kit 1.6.29 → 1.6.31
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/AliyunOSSProvider-P6TOVKMM.mjs +6 -0
- package/dist/{AliyunOSSProvider-I7I5YGLB.mjs.map → AliyunOSSProvider-P6TOVKMM.mjs.map} +1 -1
- package/dist/AliyunOSSProvider-Z5BRBCG6.js +15 -0
- package/dist/{AliyunOSSProvider-L7JWMKS4.js.map → AliyunOSSProvider-Z5BRBCG6.js.map} +1 -1
- package/dist/ConfigService-3DIC6C3Q.js +21 -0
- package/dist/{ConfigService-7MEZXKJ5.js.map → ConfigService-3DIC6C3Q.js.map} +1 -1
- package/dist/ConfigService-V6ZK273Z.mjs +4 -0
- package/dist/{ConfigService-BV57YYFW.mjs.map → ConfigService-V6ZK273Z.mjs.map} +1 -1
- package/dist/LocalStorageProvider-3RVPCQB3.mjs +6 -0
- package/dist/{LocalStorageProvider-FVLLHBHO.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
- package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
- package/dist/{LocalStorageProvider-NBNHHWLY.js.map → LocalStorageProvider-PP7MA5OT.js.map} +1 -1
- package/dist/PMXParser-2VTA737I.js +13 -0
- package/dist/{PMXParser-YBS3B6HM.js.map → PMXParser-2VTA737I.js.map} +1 -1
- package/dist/PMXParser-RNVQL76A.mjs +4 -0
- package/dist/{PMXParser-L6IWHL4I.mjs.map → PMXParser-RNVQL76A.mjs.map} +1 -1
- package/dist/analytics/index.js +46 -45
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs +45 -44
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/analytics/server/index.js +4 -4
- package/dist/analytics/server/index.js.map +1 -1
- package/dist/analytics/server/index.mjs +4 -4
- package/dist/analytics/server/index.mjs.map +1 -1
- package/dist/api/index.js +5 -5
- package/dist/api/index.js.map +1 -1
- package/dist/api/index.mjs +5 -5
- package/dist/api/index.mjs.map +1 -1
- package/dist/audioDetection/index.js +17 -16
- package/dist/audioDetection/index.js.map +1 -1
- package/dist/audioDetection/index.mjs +17 -16
- package/dist/audioDetection/index.mjs.map +1 -1
- package/dist/auth/client/index.js +4 -4
- package/dist/auth/client/index.mjs +1 -1
- package/dist/auth/components/index.js +3 -3
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/components/index.mjs +3 -3
- package/dist/auth/components/index.mjs.map +1 -1
- package/dist/auth/index.js +29 -29
- package/dist/auth/index.mjs +5 -5
- package/dist/auth/middleware/index.js +3 -3
- package/dist/auth/middleware/index.mjs +2 -2
- package/dist/auth/routes/index.js +14 -14
- package/dist/auth/routes/index.mjs +2 -2
- package/dist/auth/services/index.js +7 -7
- package/dist/auth/services/index.mjs +1 -1
- package/dist/calendar/index.js +146 -182
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/index.mjs +139 -175
- package/dist/calendar/index.mjs.map +1 -1
- package/dist/calendar/routes/index.js +1 -1
- package/dist/calendar/routes/index.js.map +1 -1
- package/dist/calendar/routes/index.mjs +1 -1
- package/dist/calendar/routes/index.mjs.map +1 -1
- package/dist/{chunk-5YQ5B7IZ.js → chunk-24HGREE6.js} +5 -5
- package/dist/{chunk-5YQ5B7IZ.js.map → chunk-24HGREE6.js.map} +1 -1
- package/dist/{chunk-6PRFP5EG.js → chunk-25OFOKNF.js} +6 -6
- package/dist/chunk-25OFOKNF.js.map +1 -0
- package/dist/{chunk-KQGP6BTS.mjs → chunk-3DXPQ4YV.mjs} +6 -6
- package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
- package/dist/{chunk-3BGPZN4X.mjs → chunk-3NHAT7D4.mjs} +12 -12
- package/dist/chunk-3NHAT7D4.mjs.map +1 -0
- package/dist/{chunk-MW4BCIZC.mjs → chunk-4HC6M7FK.mjs} +3 -3
- package/dist/chunk-4HC6M7FK.mjs.map +1 -0
- package/dist/{chunk-ESRCX5TQ.mjs → chunk-52TN2QSS.mjs} +3 -3
- package/dist/{chunk-ESRCX5TQ.mjs.map → chunk-52TN2QSS.mjs.map} +1 -1
- package/dist/{chunk-DW2ZTOCV.js → chunk-5A7ERLKK.js} +105 -106
- package/dist/chunk-5A7ERLKK.js.map +1 -0
- package/dist/{chunk-CNTILN5J.mjs → chunk-5YQ62BKX.mjs} +20 -19
- package/dist/chunk-5YQ62BKX.mjs.map +1 -0
- package/dist/{chunk-6W5BMXJG.js → chunk-6OWNMJKG.js} +4 -4
- package/dist/{chunk-6W5BMXJG.js.map → chunk-6OWNMJKG.js.map} +1 -1
- package/dist/{chunk-WSNM4EU5.mjs → chunk-77M5AQG3.mjs} +37 -41
- package/dist/chunk-77M5AQG3.mjs.map +1 -0
- package/dist/{chunk-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
- package/dist/chunk-7VRT55ZD.js.map +1 -0
- package/dist/{chunk-LX4XX6W7.js → chunk-C54W2CMK.js} +16 -16
- package/dist/chunk-C54W2CMK.js.map +1 -0
- package/dist/{chunk-3WOAPLEG.mjs → chunk-EB4NR623.mjs} +27 -26
- package/dist/chunk-EB4NR623.mjs.map +1 -0
- package/dist/{chunk-CD77U7LZ.js → chunk-GBPLX42J.js} +9 -9
- package/dist/chunk-GBPLX42J.js.map +1 -0
- package/dist/{chunk-TFQF2HDO.mjs → chunk-HDEOCX2L.mjs} +12 -12
- package/dist/chunk-HDEOCX2L.mjs.map +1 -0
- package/dist/{chunk-LFG6FPM5.mjs → chunk-KIP2CERU.mjs} +37 -38
- package/dist/chunk-KIP2CERU.mjs.map +1 -0
- package/dist/{chunk-6YKMCPQI.mjs → chunk-KZKIH4AS.mjs} +4 -4
- package/dist/chunk-KZKIH4AS.mjs.map +1 -0
- package/dist/{chunk-6MQUBPKB.mjs → chunk-LJ4CCSSY.mjs} +3 -3
- package/dist/{chunk-6MQUBPKB.mjs.map → chunk-LJ4CCSSY.mjs.map} +1 -1
- package/dist/{chunk-TOC5FSHP.js → chunk-NJ2SNXBJ.js} +12 -12
- package/dist/chunk-NJ2SNXBJ.js.map +1 -0
- package/dist/{chunk-OCR5DS4C.mjs → chunk-PE5EAHZK.mjs} +3 -3
- package/dist/chunk-PE5EAHZK.mjs.map +1 -0
- package/dist/{chunk-TKCYPDWU.js → chunk-Q5EDCKQA.js} +27 -29
- package/dist/chunk-Q5EDCKQA.js.map +1 -0
- package/dist/{chunk-CLKKZSPZ.js → chunk-RBKGYWME.js} +20 -19
- package/dist/chunk-RBKGYWME.js.map +1 -0
- package/dist/{chunk-VRTRSEEH.mjs → chunk-RSJSZ7QH.mjs} +11 -11
- package/dist/chunk-RSJSZ7QH.mjs.map +1 -0
- package/dist/{chunk-E7RGBAYJ.js → chunk-TDCDEBGP.js} +30 -29
- package/dist/chunk-TDCDEBGP.js.map +1 -0
- package/dist/{chunk-T5OZHYVM.mjs → chunk-TVROG2Q4.mjs} +15 -15
- package/dist/chunk-TVROG2Q4.mjs.map +1 -0
- package/dist/{chunk-JZXJQMVE.js → chunk-UIFFDRTE.js} +11 -11
- package/dist/chunk-UIFFDRTE.js.map +1 -0
- package/dist/{chunk-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
- package/dist/chunk-UL6XJGUZ.js.map +1 -0
- package/dist/{chunk-A3UP56MS.js → chunk-WA67GZSZ.js} +3 -3
- package/dist/chunk-WA67GZSZ.js.map +1 -0
- package/dist/{chunk-OLHGZXN3.mjs → chunk-WEEXCPSE.mjs} +5 -5
- package/dist/chunk-WEEXCPSE.mjs.map +1 -0
- package/dist/{chunk-5GCHAXY5.js → chunk-X3UU7JHT.js} +38 -42
- package/dist/chunk-X3UU7JHT.js.map +1 -0
- package/dist/{chunk-QU5OT4DF.js → chunk-XJ7ZAGC5.js} +5 -5
- package/dist/chunk-XJ7ZAGC5.js.map +1 -0
- package/dist/{chunk-GSTLV3MB.mjs → chunk-YOTQG4NP.mjs} +26 -28
- package/dist/chunk-YOTQG4NP.mjs.map +1 -0
- package/dist/{chunk-QAT2RWAO.mjs → chunk-Z36R3P62.mjs} +7 -7
- package/dist/chunk-Z36R3P62.mjs.map +1 -0
- package/dist/{chunk-7Z5LLJ3A.js → chunk-ZWQJSZEY.js} +13 -13
- package/dist/chunk-ZWQJSZEY.js.map +1 -0
- package/dist/config/index.js +6 -6
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.mjs +6 -6
- package/dist/config/index.mjs.map +1 -1
- package/dist/config/server/index.js +37 -37
- package/dist/config/server/index.js.map +1 -1
- package/dist/config/server/index.mjs +37 -37
- package/dist/config/server/index.mjs.map +1 -1
- package/dist/i18n/index.d.mts +2 -2
- package/dist/i18n/index.d.ts +2 -2
- package/dist/i18n/index.js +16 -17
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/index.mjs +16 -17
- package/dist/i18n/index.mjs.map +1 -1
- package/dist/imageCrop/index.js +11 -10
- package/dist/imageCrop/index.js.map +1 -1
- package/dist/imageCrop/index.mjs +11 -10
- package/dist/imageCrop/index.mjs.map +1 -1
- package/dist/index.js +221 -246
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +79 -104
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.js +6 -6
- package/dist/logger/index.mjs +1 -1
- package/dist/mmd/admin/index.js +11 -10
- package/dist/mmd/admin/index.js.map +1 -1
- package/dist/mmd/admin/index.mjs +11 -10
- package/dist/mmd/admin/index.mjs.map +1 -1
- package/dist/mmd/index.js +223 -241
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +220 -238
- package/dist/mmd/index.mjs.map +1 -1
- package/dist/mmd/server/index.js +6 -6
- package/dist/mmd/server/index.js.map +1 -1
- package/dist/mmd/server/index.mjs +6 -6
- package/dist/mmd/server/index.mjs.map +1 -1
- package/dist/music/index.js +16 -16
- package/dist/music/index.mjs +2 -2
- package/dist/music/server/index.js +8 -8
- package/dist/music/server/index.mjs +1 -1
- package/dist/request/index.js +2 -2
- package/dist/request/index.js.map +1 -1
- package/dist/request/index.mjs +2 -2
- package/dist/request/index.mjs.map +1 -1
- package/dist/storage/index.js +11 -11
- package/dist/storage/index.mjs +2 -2
- package/dist/testYourself/admin/index.js +3 -3
- package/dist/testYourself/admin/index.mjs +1 -1
- package/dist/testYourself/index.js +22 -22
- package/dist/testYourself/index.js.map +1 -1
- package/dist/testYourself/index.mjs +14 -14
- package/dist/testYourself/index.mjs.map +1 -1
- package/dist/testYourself/server/index.js +4 -4
- package/dist/testYourself/server/index.mjs +1 -1
- package/dist/universalExport/index.d.mts +3 -3
- package/dist/universalExport/index.d.ts +3 -3
- package/dist/universalExport/index.js +48 -47
- package/dist/universalExport/index.js.map +1 -1
- package/dist/universalExport/index.mjs +48 -47
- package/dist/universalExport/index.mjs.map +1 -1
- package/dist/universalExport/server/index.js +29 -29
- package/dist/universalExport/server/index.js.map +1 -1
- package/dist/universalExport/server/index.mjs +28 -28
- package/dist/universalExport/server/index.mjs.map +1 -1
- package/dist/universalFile/index.d.mts +3 -3
- package/dist/universalFile/index.d.ts +3 -3
- package/dist/universalFile/index.js +73 -72
- package/dist/universalFile/index.js.map +1 -1
- package/dist/universalFile/index.mjs +73 -72
- package/dist/universalFile/index.mjs.map +1 -1
- package/dist/universalFile/server/index.js +258 -260
- package/dist/universalFile/server/index.js.map +1 -1
- package/dist/universalFile/server/index.mjs +244 -246
- package/dist/universalFile/server/index.mjs.map +1 -1
- package/dist/utils/index.js +11 -11
- package/dist/utils/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/AliyunOSSProvider-I7I5YGLB.mjs +0 -6
- package/dist/AliyunOSSProvider-L7JWMKS4.js +0 -15
- package/dist/ConfigService-7MEZXKJ5.js +0 -21
- package/dist/ConfigService-BV57YYFW.mjs +0 -4
- package/dist/LocalStorageProvider-FVLLHBHO.mjs +0 -6
- package/dist/LocalStorageProvider-NBNHHWLY.js +0 -15
- package/dist/PMXParser-L6IWHL4I.mjs +0 -4
- package/dist/PMXParser-YBS3B6HM.js +0 -13
- package/dist/chunk-3BGPZN4X.mjs.map +0 -1
- package/dist/chunk-3WOAPLEG.mjs.map +0 -1
- package/dist/chunk-5GCHAXY5.js.map +0 -1
- package/dist/chunk-6PRFP5EG.js.map +0 -1
- package/dist/chunk-6YKMCPQI.mjs.map +0 -1
- package/dist/chunk-7Z5LLJ3A.js.map +0 -1
- package/dist/chunk-A3UP56MS.js.map +0 -1
- package/dist/chunk-CD77U7LZ.js.map +0 -1
- package/dist/chunk-CLKKZSPZ.js.map +0 -1
- package/dist/chunk-CNTILN5J.mjs.map +0 -1
- package/dist/chunk-DUHZ7VZP.js.map +0 -1
- package/dist/chunk-DW2ZTOCV.js.map +0 -1
- package/dist/chunk-E7RGBAYJ.js.map +0 -1
- package/dist/chunk-GSTLV3MB.mjs.map +0 -1
- package/dist/chunk-JZXJQMVE.js.map +0 -1
- package/dist/chunk-KQGP6BTS.mjs.map +0 -1
- package/dist/chunk-LFG6FPM5.mjs.map +0 -1
- package/dist/chunk-LX4XX6W7.js.map +0 -1
- package/dist/chunk-MW4BCIZC.mjs.map +0 -1
- package/dist/chunk-OCR5DS4C.mjs.map +0 -1
- package/dist/chunk-OLHGZXN3.mjs.map +0 -1
- package/dist/chunk-QAT2RWAO.mjs.map +0 -1
- package/dist/chunk-QU5OT4DF.js.map +0 -1
- package/dist/chunk-T5OZHYVM.mjs.map +0 -1
- package/dist/chunk-TFQF2HDO.mjs.map +0 -1
- package/dist/chunk-TKCYPDWU.js.map +0 -1
- package/dist/chunk-TOC5FSHP.js.map +0 -1
- package/dist/chunk-UOFTHYIH.js.map +0 -1
- package/dist/chunk-VRTRSEEH.mjs.map +0 -1
- package/dist/chunk-WSNM4EU5.mjs.map +0 -1
package/dist/mmd/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
var
|
|
3
|
+
var chunkTDCDEBGP_js = require('../chunk-TDCDEBGP.js');
|
|
4
|
+
require('../chunk-WA67GZSZ.js');
|
|
5
|
+
var chunkUIFFDRTE_js = require('../chunk-UIFFDRTE.js');
|
|
6
6
|
require('../chunk-DGUM43GV.js');
|
|
7
7
|
var React10 = require('react');
|
|
8
|
+
var clsx = require('clsx');
|
|
8
9
|
var THREE2 = require('three');
|
|
9
10
|
var threeStdlib = require('three-stdlib');
|
|
10
11
|
var lucideReact = require('lucide-react');
|
|
@@ -97,7 +98,7 @@ var PMXEditor = class {
|
|
|
97
98
|
action: "add",
|
|
98
99
|
target: newTexture.index,
|
|
99
100
|
data: { path }
|
|
100
|
-
},
|
|
101
|
+
}, "\u6DFB\u52A0\u7EB9\u7406: " + path);
|
|
101
102
|
return newTexture.index;
|
|
102
103
|
}
|
|
103
104
|
/**
|
|
@@ -105,7 +106,7 @@ var PMXEditor = class {
|
|
|
105
106
|
*/
|
|
106
107
|
updateTexture(index, newPath) {
|
|
107
108
|
if (index < 0 || index >= this.data.textures.length) {
|
|
108
|
-
throw new Error(
|
|
109
|
+
throw new Error("Invalid texture index: " + index);
|
|
109
110
|
}
|
|
110
111
|
const oldPath = this.data.textures[index].path;
|
|
111
112
|
this.data.textures[index].path = newPath;
|
|
@@ -114,7 +115,7 @@ var PMXEditor = class {
|
|
|
114
115
|
action: "update",
|
|
115
116
|
target: index,
|
|
116
117
|
data: { oldPath, newPath }
|
|
117
|
-
},
|
|
118
|
+
}, "\u66F4\u65B0\u7EB9\u7406 #" + index + ": " + oldPath + " \u2192 " + newPath);
|
|
118
119
|
return true;
|
|
119
120
|
}
|
|
120
121
|
/**
|
|
@@ -122,13 +123,13 @@ var PMXEditor = class {
|
|
|
122
123
|
*/
|
|
123
124
|
deleteTexture(index) {
|
|
124
125
|
if (index < 0 || index >= this.data.textures.length) {
|
|
125
|
-
throw new Error(
|
|
126
|
+
throw new Error("Invalid texture index: " + index);
|
|
126
127
|
}
|
|
127
128
|
const usedByMaterials = this.data.materials.filter(
|
|
128
129
|
(m) => m.textureIndex === index || m.sphereTextureIndex === index || !m.isSharedToon && m.toonTextureIndex === index
|
|
129
130
|
);
|
|
130
131
|
if (usedByMaterials.length > 0) {
|
|
131
|
-
throw new Error(
|
|
132
|
+
throw new Error("\u7EB9\u7406 #" + index + " \u6B63\u5728\u88AB " + usedByMaterials.length + " \u4E2A\u6750\u8D28\u4F7F\u7528\uFF0C\u65E0\u6CD5\u5220\u9664");
|
|
132
133
|
}
|
|
133
134
|
const deletedTexture = this.data.textures.splice(index, 1)[0];
|
|
134
135
|
if (!deletedTexture) return false;
|
|
@@ -148,7 +149,7 @@ var PMXEditor = class {
|
|
|
148
149
|
action: "delete",
|
|
149
150
|
target: index,
|
|
150
151
|
data: { path: deletedTexture.path }
|
|
151
|
-
},
|
|
152
|
+
}, "\u5220\u9664\u7EB9\u7406 #" + index + ": " + deletedTexture.path);
|
|
152
153
|
return true;
|
|
153
154
|
}
|
|
154
155
|
/**
|
|
@@ -156,10 +157,10 @@ var PMXEditor = class {
|
|
|
156
157
|
*/
|
|
157
158
|
setMaterialMainTexture(materialIndex, textureIndex) {
|
|
158
159
|
if (materialIndex < 0 || materialIndex >= this.data.materials.length) {
|
|
159
|
-
throw new Error(
|
|
160
|
+
throw new Error("Invalid material index: " + materialIndex);
|
|
160
161
|
}
|
|
161
162
|
if (textureIndex !== -1 && (textureIndex < 0 || textureIndex >= this.data.textures.length)) {
|
|
162
|
-
throw new Error(
|
|
163
|
+
throw new Error("Invalid texture index: " + textureIndex);
|
|
163
164
|
}
|
|
164
165
|
const material = this.data.materials[materialIndex];
|
|
165
166
|
const oldIndex = material.textureIndex;
|
|
@@ -174,7 +175,7 @@ var PMXEditor = class {
|
|
|
174
175
|
oldIndex,
|
|
175
176
|
newIndex: textureIndex
|
|
176
177
|
}
|
|
177
|
-
},
|
|
178
|
+
}, "\u6750\u8D28 #" + materialIndex + " \u4E3B\u7EB9\u7406: #" + oldIndex + " \u2192 #" + textureIndex);
|
|
178
179
|
return true;
|
|
179
180
|
}
|
|
180
181
|
/**
|
|
@@ -182,10 +183,10 @@ var PMXEditor = class {
|
|
|
182
183
|
*/
|
|
183
184
|
setMaterialSphereTexture(materialIndex, textureIndex, mode = 1) {
|
|
184
185
|
if (materialIndex < 0 || materialIndex >= this.data.materials.length) {
|
|
185
|
-
throw new Error(
|
|
186
|
+
throw new Error("Invalid material index: " + materialIndex);
|
|
186
187
|
}
|
|
187
188
|
if (textureIndex !== -1 && (textureIndex < 0 || textureIndex >= this.data.textures.length)) {
|
|
188
|
-
throw new Error(
|
|
189
|
+
throw new Error("Invalid texture index: " + textureIndex);
|
|
189
190
|
}
|
|
190
191
|
const material = this.data.materials[materialIndex];
|
|
191
192
|
const oldIndex = material.sphereTextureIndex;
|
|
@@ -204,7 +205,7 @@ var PMXEditor = class {
|
|
|
204
205
|
oldMode,
|
|
205
206
|
newMode: mode
|
|
206
207
|
}
|
|
207
|
-
},
|
|
208
|
+
}, "\u6750\u8D28 #" + materialIndex + " Sphere\u7EB9\u7406: #" + oldIndex + " \u2192 #" + textureIndex + " (\u6A21\u5F0F: " + mode + ")");
|
|
208
209
|
return true;
|
|
209
210
|
}
|
|
210
211
|
/**
|
|
@@ -212,10 +213,10 @@ var PMXEditor = class {
|
|
|
212
213
|
*/
|
|
213
214
|
setMaterialToonTexture(materialIndex, textureIndex, isShared = false) {
|
|
214
215
|
if (materialIndex < 0 || materialIndex >= this.data.materials.length) {
|
|
215
|
-
throw new Error(
|
|
216
|
+
throw new Error("Invalid material index: " + materialIndex);
|
|
216
217
|
}
|
|
217
218
|
if (!isShared && textureIndex !== -1 && (textureIndex < 0 || textureIndex >= this.data.textures.length)) {
|
|
218
|
-
throw new Error(
|
|
219
|
+
throw new Error("Invalid texture index: " + textureIndex);
|
|
219
220
|
}
|
|
220
221
|
const material = this.data.materials[materialIndex];
|
|
221
222
|
const oldIndex = material.toonTextureIndex;
|
|
@@ -234,7 +235,7 @@ var PMXEditor = class {
|
|
|
234
235
|
oldShared,
|
|
235
236
|
isShared
|
|
236
237
|
}
|
|
237
|
-
},
|
|
238
|
+
}, "\u6750\u8D28 #" + materialIndex + " Toon\u7EB9\u7406: #" + oldIndex + " \u2192 #" + textureIndex + " (\u5171\u4EAB: " + isShared + ")");
|
|
238
239
|
return true;
|
|
239
240
|
}
|
|
240
241
|
/**
|
|
@@ -242,7 +243,7 @@ var PMXEditor = class {
|
|
|
242
243
|
*/
|
|
243
244
|
updateMaterial(materialIndex, updates) {
|
|
244
245
|
if (materialIndex < 0 || materialIndex >= this.data.materials.length) {
|
|
245
|
-
throw new Error(
|
|
246
|
+
throw new Error("Invalid material index: " + materialIndex);
|
|
246
247
|
}
|
|
247
248
|
const material = this.data.materials[materialIndex];
|
|
248
249
|
const oldData = { ...material };
|
|
@@ -268,7 +269,7 @@ var PMXEditor = class {
|
|
|
268
269
|
action: "update",
|
|
269
270
|
target: materialIndex,
|
|
270
271
|
data: { oldData, updates }
|
|
271
|
-
},
|
|
272
|
+
}, "\u66F4\u65B0\u6750\u8D28 #" + materialIndex + ": " + material.name);
|
|
272
273
|
return true;
|
|
273
274
|
}
|
|
274
275
|
/**
|
|
@@ -299,7 +300,7 @@ var PMXEditor = class {
|
|
|
299
300
|
if (material.isSharedToon) {
|
|
300
301
|
mapping.toonTexture = {
|
|
301
302
|
index: material.toonTextureIndex,
|
|
302
|
-
path:
|
|
303
|
+
path: "toon" + String(material.toonTextureIndex).padStart(2, "0") + ".bmp",
|
|
303
304
|
isShared: true
|
|
304
305
|
};
|
|
305
306
|
} else if (material.toonTextureIndex >= 0 && material.toonTextureIndex < this.data.textures.length) {
|
|
@@ -584,7 +585,7 @@ var PMXExporter = class {
|
|
|
584
585
|
this.view.setInt32(this.offset, value, true);
|
|
585
586
|
break;
|
|
586
587
|
default:
|
|
587
|
-
throw new Error(
|
|
588
|
+
throw new Error("Invalid index size: " + size);
|
|
588
589
|
}
|
|
589
590
|
this.offset += size;
|
|
590
591
|
}
|
|
@@ -608,7 +609,7 @@ var PMXEditor2 = ({
|
|
|
608
609
|
try {
|
|
609
610
|
setLoading(true);
|
|
610
611
|
setError(null);
|
|
611
|
-
const parser = new
|
|
612
|
+
const parser = new chunkUIFFDRTE_js.PMXParser();
|
|
612
613
|
const parseResult = await parser.loadAndParse(modelUrl);
|
|
613
614
|
const editorInstance = new PMXEditor(parseResult);
|
|
614
615
|
setEditor(editorInstance);
|
|
@@ -627,7 +628,7 @@ var PMXEditor2 = ({
|
|
|
627
628
|
if (!editor) return;
|
|
628
629
|
const data2 = editor.getData();
|
|
629
630
|
const exporter = new PMXExporter(data2);
|
|
630
|
-
exporter.exportAndDownload(
|
|
631
|
+
exporter.exportAndDownload((data2.modelInfo.modelName || "model") + "_edited.pmx");
|
|
631
632
|
};
|
|
632
633
|
const handleMaterialTextureChange = (materialIndex, textureType, textureIndex) => {
|
|
633
634
|
if (!editor) return;
|
|
@@ -655,14 +656,14 @@ var PMXEditor2 = ({
|
|
|
655
656
|
try {
|
|
656
657
|
const index = editor.addTexture(path);
|
|
657
658
|
setRefresh((r) => r + 1);
|
|
658
|
-
alert(
|
|
659
|
+
alert("\u6210\u529F\u6DFB\u52A0\u7EB9\u7406 #" + index + ": " + path);
|
|
659
660
|
} catch (err) {
|
|
660
661
|
alert(err instanceof Error ? err.message : "\u6DFB\u52A0\u5931\u8D25");
|
|
661
662
|
}
|
|
662
663
|
};
|
|
663
664
|
const handleDeleteTexture = (index) => {
|
|
664
665
|
if (!editor) return;
|
|
665
|
-
if (!confirm(
|
|
666
|
+
if (!confirm("\u786E\u5B9A\u8981\u5220\u9664\u7EB9\u7406 #" + index + " \u5417\uFF1F")) return;
|
|
666
667
|
try {
|
|
667
668
|
editor.deleteTexture(index);
|
|
668
669
|
setRefresh((r) => r + 1);
|
|
@@ -672,16 +673,16 @@ var PMXEditor2 = ({
|
|
|
672
673
|
}
|
|
673
674
|
};
|
|
674
675
|
if (loading) {
|
|
675
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
676
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("pmx-editor loading", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-center p-8" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-blue-500 border-r-transparent" }), /* @__PURE__ */ React10__default.default.createElement("p", { className: "mt-4 text-gray-600" }, "\u6B63\u5728\u52A0\u8F7D\u6A21\u578B..."))));
|
|
676
677
|
}
|
|
677
678
|
if (error || !editor) {
|
|
678
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
679
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("pmx-editor error", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "rounded-lg bg-red-50 p-6 border border-red-200" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-semibold text-red-800 mb-2" }, "\u274C \u52A0\u8F7D\u9519\u8BEF"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-red-600" }, error || "\u672A\u77E5\u9519\u8BEF")));
|
|
679
680
|
}
|
|
680
681
|
const data = editor.getData();
|
|
681
682
|
const stats = editor.getStats();
|
|
682
683
|
const history = editor.getHistory();
|
|
683
684
|
const unusedTextures = editor.getUnusedTextures();
|
|
684
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
685
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("pmx-editor", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-white border-b border-gray-200 p-4" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("h2", { className: "text-xl font-bold text-gray-900" }, data.modelInfo.modelName), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-600" }, stats.materials, " \u6750\u8D28 | ", stats.textures, " \u7EB9\u7406 | ", stats.editHistory, " \u6B21\u7F16\u8F91")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
685
686
|
"button",
|
|
686
687
|
{
|
|
687
688
|
onClick: handleExport,
|
|
@@ -697,7 +698,7 @@ var PMXEditor2 = ({
|
|
|
697
698
|
{
|
|
698
699
|
key: tab.id,
|
|
699
700
|
onClick: () => setActiveTab(tab.id),
|
|
700
|
-
className:
|
|
701
|
+
className: clsx.clsx("py-3 px-4 font-medium transition-colors", activeTab === tab.id ? "border-b-2 border-blue-500 text-blue-600" : "text-gray-600 hover:text-gray-900")
|
|
701
702
|
},
|
|
702
703
|
tab.label
|
|
703
704
|
)))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6" }, activeTab === "materials" && /* @__PURE__ */ React10__default.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-6" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-white rounded-lg shadow" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-semibold" }, "\u6750\u8D28\u5217\u8868 (", data.materials.length, ")")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "divide-y divide-gray-200 max-h-[600px] overflow-y-auto" }, data.materialTextureMappings.map((mapping) => /* @__PURE__ */ React10__default.default.createElement(
|
|
@@ -705,18 +706,18 @@ var PMXEditor2 = ({
|
|
|
705
706
|
{
|
|
706
707
|
key: mapping.materialIndex,
|
|
707
708
|
onClick: () => setSelectedMaterial(mapping.materialIndex),
|
|
708
|
-
className:
|
|
709
|
+
className: clsx.clsx("p-4 cursor-pointer hover:bg-gray-50", selectedMaterial === mapping.materialIndex ? "bg-blue-50" : "")
|
|
709
710
|
},
|
|
710
711
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
711
712
|
"div",
|
|
712
713
|
{
|
|
713
714
|
className: "w-10 h-10 rounded border",
|
|
714
715
|
style: {
|
|
715
|
-
backgroundColor:
|
|
716
|
+
backgroundColor: "rgba(" + data.materials[mapping.materialIndex]?.diffuse[0] * 255 + ", " + data.materials[mapping.materialIndex]?.diffuse[1] * 255 + ", " + data.materials[mapping.materialIndex]?.diffuse[2] * 255 + ", 1)"
|
|
716
717
|
}
|
|
717
718
|
}
|
|
718
719
|
), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "font-medium" }, "#", mapping.materialIndex, ": ", mapping.materialName), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-xs text-gray-500" }, mapping.mainTexture && "\u{1F5BC}\uFE0F ", mapping.sphereTexture && "\u2728 ", mapping.toonTexture && "\u{1F3A8} ", !mapping.mainTexture && !mapping.sphereTexture && !mapping.toonTexture && "\u26AA \u65E0\u7EB9\u7406")))
|
|
719
|
-
)))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-white rounded-lg shadow" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-semibold" }, selectedMaterial !== null ?
|
|
720
|
+
)))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-white rounded-lg shadow" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-semibold" }, selectedMaterial !== null ? "\u7F16\u8F91\u6750\u8D28 #" + selectedMaterial : "\u8BF7\u9009\u62E9\u6750\u8D28")), selectedMaterial !== null && /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 space-y-4" }, /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("label", { className: "block text-sm font-medium text-gray-700 mb-2" }, "\u{1F5BC}\uFE0F \u4E3B\u7EB9\u7406"), /* @__PURE__ */ React10__default.default.createElement(
|
|
720
721
|
"select",
|
|
721
722
|
{
|
|
722
723
|
value: data.materials[selectedMaterial].textureIndex,
|
|
@@ -779,7 +780,7 @@ var PMXViewer = ({
|
|
|
779
780
|
try {
|
|
780
781
|
setLoading(true);
|
|
781
782
|
setError(null);
|
|
782
|
-
const parser = new
|
|
783
|
+
const parser = new chunkUIFFDRTE_js.PMXParser();
|
|
783
784
|
const parseResult = await parser.loadAndParse(modelUrl);
|
|
784
785
|
setResult(parseResult);
|
|
785
786
|
onParsed?.(parseResult);
|
|
@@ -796,16 +797,16 @@ var PMXViewer = ({
|
|
|
796
797
|
const getTextureUrl = (path) => {
|
|
797
798
|
if (!basePath) return path;
|
|
798
799
|
const normalizedPath = path.replace(/\\/g, "/");
|
|
799
|
-
return
|
|
800
|
+
return basePath + "/" + normalizedPath;
|
|
800
801
|
};
|
|
801
802
|
if (loading) {
|
|
802
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
803
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("pmx-viewer loading", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-center p-8" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "inline-block h-8 w-8 animate-spin rounded-full border-4 border-solid border-blue-500 border-r-transparent" }), /* @__PURE__ */ React10__default.default.createElement("p", { className: "mt-4 text-gray-600" }, "\u6B63\u5728\u89E3\u6790PMX\u6A21\u578B..."))));
|
|
803
804
|
}
|
|
804
805
|
if (error || !result) {
|
|
805
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
806
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("pmx-viewer error", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "rounded-lg bg-red-50 p-6 border border-red-200" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-semibold text-red-800 mb-2" }, "\u274C \u89E3\u6790\u9519\u8BEF"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-red-600" }, error || "\u672A\u77E5\u9519\u8BEF")));
|
|
806
807
|
}
|
|
807
808
|
const { header, modelInfo, textures, materials, materialTextureMappings, vertexCount, faceCount } = result;
|
|
808
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
809
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("pmx-viewer", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "border-b border-gray-200 mb-6" }, /* @__PURE__ */ React10__default.default.createElement("nav", { className: "flex space-x-4" }, [
|
|
809
810
|
{ id: "overview", label: "\u{1F4CA} \u6982\u89C8" },
|
|
810
811
|
{ id: "textures", label: "\u{1F5BC}\uFE0F \u7EB9\u7406\u5217\u8868" },
|
|
811
812
|
{ id: "materials", label: "\u{1F3A8} \u6750\u8D28\u5217\u8868" },
|
|
@@ -815,7 +816,7 @@ var PMXViewer = ({
|
|
|
815
816
|
{
|
|
816
817
|
key: tab.id,
|
|
817
818
|
onClick: () => setActiveTab(tab.id),
|
|
818
|
-
className:
|
|
819
|
+
className: clsx.clsx("py-2 px-4 font-medium transition-colors", activeTab === tab.id ? "border-b-2 border-blue-500 text-blue-600" : "text-gray-600 hover:text-gray-900")
|
|
819
820
|
},
|
|
820
821
|
tab.label
|
|
821
822
|
)))), activeTab === "overview" && /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-white rounded-lg shadow p-6" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-xl font-bold mb-4" }, "\u6A21\u578B\u4FE1\u606F"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u6A21\u578B\u540D\u79F0"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "font-medium" }, modelInfo.modelName || "\u672A\u547D\u540D")), /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u82F1\u6587\u540D\u79F0"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "font-medium" }, modelInfo.modelNameEnglish || "-")), /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-600" }, "PMX\u7248\u672C"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "font-medium" }, header.version)), /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u7F16\u7801\u683C\u5F0F"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "font-medium" }, header.globals.encoding === 0 ? "UTF-16LE" : "UTF-8"))), modelInfo.comment && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-600" }, "\u6CE8\u91CA"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm mt-1 whitespace-pre-wrap" }, modelInfo.comment))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-4 gap-4" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-blue-50 rounded-lg p-4" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-blue-600 mb-1" }, "\u9876\u70B9\u6570"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-2xl font-bold text-blue-900" }, vertexCount.toLocaleString())), /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-green-50 rounded-lg p-4" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-green-600 mb-1" }, "\u9762\u6570"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-2xl font-bold text-green-900" }, faceCount.toLocaleString())), /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-purple-50 rounded-lg p-4" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-purple-600 mb-1" }, "\u7EB9\u7406\u6570"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-2xl font-bold text-purple-900" }, textures.length)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-orange-50 rounded-lg p-4" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-orange-600 mb-1" }, "\u6750\u8D28\u6570"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-2xl font-bold text-orange-900" }, materials.length)))), activeTab === "textures" && /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-white rounded-lg shadow" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-semibold" }, "\u7EB9\u7406\u5217\u8868 (", textures.length, ")")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "divide-y divide-gray-200" }, textures.map((texture) => /* @__PURE__ */ React10__default.default.createElement("div", { key: texture.index, className: "p-4 hover:bg-gray-50" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-start gap-4" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-shrink-0 w-12 h-12 bg-gray-200 rounded flex items-center justify-center text-gray-500 text-xs" }, "#", texture.index), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "font-medium text-gray-900 truncate" }, texture.path), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-500 mt-1" }, "\u5B8C\u6574URL:"), /* @__PURE__ */ React10__default.default.createElement("code", { className: "text-xs bg-gray-100 px-2 py-1 rounded block mt-1 overflow-x-auto" }, getTextureUrl(texture.path)))))))), activeTab === "materials" && /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-white rounded-lg shadow" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-semibold" }, "\u6750\u8D28\u5217\u8868 (", materials.length, ")")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "divide-y divide-gray-200" }, materials.map((material, index) => /* @__PURE__ */ React10__default.default.createElement("div", { key: index, className: "p-4 hover:bg-gray-50" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-start gap-4" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
@@ -823,10 +824,10 @@ var PMXViewer = ({
|
|
|
823
824
|
{
|
|
824
825
|
className: "flex-shrink-0 w-12 h-12 rounded border border-gray-300",
|
|
825
826
|
style: {
|
|
826
|
-
backgroundColor:
|
|
827
|
+
backgroundColor: "rgba(" + material.diffuse[0] * 255 + ", " + material.diffuse[1] * 255 + ", " + material.diffuse[2] * 255 + ", " + material.diffuse[3] + ")"
|
|
827
828
|
}
|
|
828
829
|
}
|
|
829
|
-
), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "font-medium text-gray-900" }, material.name ||
|
|
830
|
+
), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React10__default.default.createElement("p", { className: "font-medium text-gray-900" }, material.name || "\u6750\u8D28 #" + index), material.nameEnglish && /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-600" }, material.nameEnglish), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-2 flex flex-wrap gap-2 text-xs" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "bg-blue-100 text-blue-700 px-2 py-1 rounded" }, "\u9762\u6570: ", material.surfaceCount / 3), material.textureIndex >= 0 && /* @__PURE__ */ React10__default.default.createElement("span", { className: "bg-green-100 text-green-700 px-2 py-1 rounded" }, "\u7EB9\u7406: #", material.textureIndex), material.sphereTextureIndex >= 0 && /* @__PURE__ */ React10__default.default.createElement("span", { className: "bg-purple-100 text-purple-700 px-2 py-1 rounded" }, "Sphere: #", material.sphereTextureIndex), material.toonTextureIndex >= 0 && /* @__PURE__ */ React10__default.default.createElement("span", { className: "bg-orange-100 text-orange-700 px-2 py-1 rounded" }, "Toon: ", material.isSharedToon ? "\u5171\u4EAB#" + material.toonTextureIndex : "#" + material.toonTextureIndex)))))))), activeTab === "mappings" && /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-white rounded-lg shadow" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-semibold" }, "\u6750\u8D28-\u7EB9\u7406\u6620\u5C04\u5173\u7CFB (", materialTextureMappings.length, ")")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "divide-y divide-gray-200" }, materialTextureMappings.map((mapping) => /* @__PURE__ */ React10__default.default.createElement("div", { key: mapping.materialIndex, className: "p-4 hover:bg-gray-50" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-3" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "font-semibold text-gray-900" }, "\u6750\u8D28 #", mapping.materialIndex, ": ", mapping.materialName), mapping.materialNameEnglish && /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-600" }, mapping.materialNameEnglish)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-3 pl-4 border-l-2 border-gray-200" }, mapping.mainTexture && /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-xs font-medium text-gray-700 mb-1" }, "\u{1F5BC}\uFE0F \u4E3B\u7EB9\u7406"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-900" }, mapping.mainTexture.path), /* @__PURE__ */ React10__default.default.createElement("code", { className: "text-xs bg-blue-50 text-blue-700 px-2 py-1 rounded block mt-1" }, getTextureUrl(mapping.mainTexture.path))), mapping.sphereTexture && /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-xs font-medium text-gray-700 mb-1" }, "\u2728 Sphere\u7EB9\u7406 (", mapping.sphereTexture.mode, ")"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-900" }, mapping.sphereTexture.path), /* @__PURE__ */ React10__default.default.createElement("code", { className: "text-xs bg-purple-50 text-purple-700 px-2 py-1 rounded block mt-1" }, getTextureUrl(mapping.sphereTexture.path))), mapping.toonTexture && /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-xs font-medium text-gray-700 mb-1" }, "\u{1F3A8} Toon\u7EB9\u7406 ", mapping.toonTexture.isShared && "(\u5171\u4EAB)"), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-900" }, mapping.toonTexture.path), !mapping.toonTexture.isShared && /* @__PURE__ */ React10__default.default.createElement("code", { className: "text-xs bg-orange-50 text-orange-700 px-2 py-1 rounded block mt-1" }, getTextureUrl(mapping.toonTexture.path))), !mapping.mainTexture && !mapping.sphereTexture && !mapping.toonTexture && /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm text-gray-500 italic" }, "\u65E0\u7EB9\u7406\u7ED1\u5B9A")))))));
|
|
830
831
|
};
|
|
831
832
|
|
|
832
833
|
// src/mmd/utils/ammo-loader.ts
|
|
@@ -863,7 +864,7 @@ var loadAmmo = (path = "/libs/ammo.wasm.js") => {
|
|
|
863
864
|
};
|
|
864
865
|
script.onerror = (err) => {
|
|
865
866
|
console.error("Failed to load Ammo.js script:", err);
|
|
866
|
-
reject(new Error(
|
|
867
|
+
reject(new Error("Failed to load Ammo.js from " + path));
|
|
867
868
|
};
|
|
868
869
|
document.body.appendChild(script);
|
|
869
870
|
});
|
|
@@ -910,7 +911,7 @@ function configureMaterialsForMMD(mesh, config = {}) {
|
|
|
910
911
|
});
|
|
911
912
|
}
|
|
912
913
|
});
|
|
913
|
-
console.log(
|
|
914
|
+
console.log("[MMD Material Config] Processed " + materialCount + " materials (Toon: " + toonMaterialCount + ", Phong: " + phongMaterialCount + ")");
|
|
914
915
|
}
|
|
915
916
|
function createGradientMap() {
|
|
916
917
|
const colors = new Uint8Array(5);
|
|
@@ -978,9 +979,9 @@ function configureRendererForMMD(renderer, options = {}) {
|
|
|
978
979
|
renderer.shadowMap.type = THREE2__namespace.PCFSoftShadowMap;
|
|
979
980
|
}
|
|
980
981
|
console.log("[MMD Renderer] Configured for MMD-style rendering");
|
|
981
|
-
console.log(
|
|
982
|
+
console.log(" - Tone Mapping: " + (toneMapping === THREE2__namespace.LinearToneMapping ? "Linear" : "Custom"));
|
|
982
983
|
console.log(` - Color Space: sRGB`);
|
|
983
|
-
console.log(
|
|
984
|
+
console.log(" - Shadow: " + (enableShadow ? "Enabled (PCF Soft)" : "Disabled"));
|
|
984
985
|
return renderer;
|
|
985
986
|
}
|
|
986
987
|
function generateToonTexture(index) {
|
|
@@ -990,8 +991,8 @@ function generateToonTexture(index) {
|
|
|
990
991
|
const ctx = canvas.getContext("2d");
|
|
991
992
|
const gradient = ctx.createLinearGradient(0, 0, 256, 0);
|
|
992
993
|
const brightness = 1 - (index - 1) / 9;
|
|
993
|
-
gradient.addColorStop(0,
|
|
994
|
-
gradient.addColorStop(1,
|
|
994
|
+
gradient.addColorStop(0, "rgb(" + 255 * brightness + ", " + 255 * brightness + ", " + 255 * brightness + ")");
|
|
995
|
+
gradient.addColorStop(1, "rgb(" + 128 * brightness + ", " + 128 * brightness + ", " + 128 * brightness + ")");
|
|
995
996
|
ctx.fillStyle = gradient;
|
|
996
997
|
ctx.fillRect(0, 0, 256, 1);
|
|
997
998
|
return canvas;
|
|
@@ -1066,7 +1067,7 @@ async function waitForMaterialsReady(object, renderer, scene, camera) {
|
|
|
1066
1067
|
resolve();
|
|
1067
1068
|
};
|
|
1068
1069
|
const onError = (e) => {
|
|
1069
|
-
console.warn(
|
|
1070
|
+
console.warn("[MMDPlayerBase] Texture " + (index + 1) + "/" + textures.length + ": Failed to load", e);
|
|
1070
1071
|
image.removeEventListener("load", onLoad);
|
|
1071
1072
|
image.removeEventListener("error", onError);
|
|
1072
1073
|
resolve();
|
|
@@ -1076,7 +1077,7 @@ async function waitForMaterialsReady(object, renderer, scene, camera) {
|
|
|
1076
1077
|
setTimeout(() => {
|
|
1077
1078
|
image.removeEventListener("load", onLoad);
|
|
1078
1079
|
image.removeEventListener("error", onError);
|
|
1079
|
-
console.warn(
|
|
1080
|
+
console.warn("[MMDPlayerBase] Texture " + (index + 1) + "/" + textures.length + ": Timeout");
|
|
1080
1081
|
resolve();
|
|
1081
1082
|
}, 5e3);
|
|
1082
1083
|
}
|
|
@@ -1538,7 +1539,7 @@ var MMDPlayerBase = React10.forwardRef((props, ref) => {
|
|
|
1538
1539
|
if (mesh.skeleton) {
|
|
1539
1540
|
const boneCount = mesh.skeleton.bones.length;
|
|
1540
1541
|
if (boneCount > MAX_BONES) {
|
|
1541
|
-
console.warn(
|
|
1542
|
+
console.warn("[MMDPlayerBase] \u26A0\uFE0F Model has " + boneCount + " bones (max recommended: " + MAX_BONES + ")");
|
|
1542
1543
|
console.warn(`[MMDPlayerBase] This may cause performance issues on mobile devices`);
|
|
1543
1544
|
}
|
|
1544
1545
|
}
|
|
@@ -1567,14 +1568,14 @@ var MMDPlayerBase = React10.forwardRef((props, ref) => {
|
|
|
1567
1568
|
(xhr) => {
|
|
1568
1569
|
if (xhr.lengthComputable) {
|
|
1569
1570
|
const percent = xhr.loaded / xhr.total * 100;
|
|
1570
|
-
if (Math.round(percent) % 20 === 0) console.log(
|
|
1571
|
+
if (Math.round(percent) % 20 === 0) console.log("[MMDPlayerBase] Stage loading: " + percent.toFixed(1) + "%");
|
|
1571
1572
|
}
|
|
1572
1573
|
},
|
|
1573
1574
|
(err) => reject(err)
|
|
1574
1575
|
);
|
|
1575
1576
|
});
|
|
1576
1577
|
if (checkCancelled()) return;
|
|
1577
|
-
console.log(
|
|
1578
|
+
console.log("[MMDPlayerBase] Stage model loaded: " + stagePath, stageMesh);
|
|
1578
1579
|
console.log("[MMDPlayerBase] \u{1F3A8} Traversing stage mesh to apply FX, multiFX:", !!multiFXAdapterRef.current, "singleFX:", !!fxAdapterRef.current);
|
|
1579
1580
|
let stageMaterialCount = 0;
|
|
1580
1581
|
stageMesh.traverse((child) => {
|
|
@@ -1617,7 +1618,7 @@ var MMDPlayerBase = React10.forwardRef((props, ref) => {
|
|
|
1617
1618
|
try {
|
|
1618
1619
|
await waitForMaterialsReady(stageMesh, renderer, scene, camera);
|
|
1619
1620
|
} catch (e) {
|
|
1620
|
-
console.warn(
|
|
1621
|
+
console.warn("[MMDPlayerBase] Warmup error for stage " + stagePath + ":", e);
|
|
1621
1622
|
}
|
|
1622
1623
|
if (checkCancelled()) return;
|
|
1623
1624
|
scene.add(stageMesh);
|
|
@@ -1634,7 +1635,7 @@ var MMDPlayerBase = React10.forwardRef((props, ref) => {
|
|
|
1634
1635
|
});
|
|
1635
1636
|
}
|
|
1636
1637
|
} catch (err) {
|
|
1637
|
-
console.error(
|
|
1638
|
+
console.error("Failed to load stage " + stagePath + ":", err);
|
|
1638
1639
|
}
|
|
1639
1640
|
}
|
|
1640
1641
|
if (checkCancelled()) return;
|
|
@@ -1657,7 +1658,7 @@ var MMDPlayerBase = React10.forwardRef((props, ref) => {
|
|
|
1657
1658
|
const hours = Math.floor(runningTime / 36e5);
|
|
1658
1659
|
const minutes = Math.floor(runningTime % 36e5 / 6e4);
|
|
1659
1660
|
const seconds = Math.floor(runningTime % 6e4 / 1e3);
|
|
1660
|
-
const timeString = hours > 0 ?
|
|
1661
|
+
const timeString = hours > 0 ? hours + "\u5C0F\u65F6" + minutes + "\u5206" + seconds + "\u79D2" : minutes > 0 ? minutes + "\u5206" + seconds + "\u79D2" : seconds + "\u79D2";
|
|
1661
1662
|
alert(`\u26A0\uFE0F \u5185\u5B58\u6EA2\u51FA\u9519\u8BEF (OOM)
|
|
1662
1663
|
|
|
1663
1664
|
\u{1F4CA} \u7CFB\u7EDF\u8FD0\u884C\u7EDF\u8BA1\uFF1A
|
|
@@ -1740,7 +1741,7 @@ ${errorMessage}
|
|
|
1740
1741
|
physics.world.removeRigidBody(body.body);
|
|
1741
1742
|
}
|
|
1742
1743
|
} catch (e) {
|
|
1743
|
-
console.warn(
|
|
1744
|
+
console.warn("[MMDPlayerBase] Error removing body " + i + ":", e);
|
|
1744
1745
|
}
|
|
1745
1746
|
}
|
|
1746
1747
|
physics.bodies.length = 0;
|
|
@@ -1753,7 +1754,7 @@ ${errorMessage}
|
|
|
1753
1754
|
physics.world.removeConstraint(constraint);
|
|
1754
1755
|
}
|
|
1755
1756
|
} catch (e) {
|
|
1756
|
-
console.warn(
|
|
1757
|
+
console.warn("[MMDPlayerBase] Error removing constraint " + i + ":", e);
|
|
1757
1758
|
}
|
|
1758
1759
|
}
|
|
1759
1760
|
physics.constraints.length = 0;
|
|
@@ -1800,7 +1801,7 @@ ${errorMessage}
|
|
|
1800
1801
|
try {
|
|
1801
1802
|
Ammo2.destroy(components.worlds[i]);
|
|
1802
1803
|
} catch (e) {
|
|
1803
|
-
console.error(
|
|
1804
|
+
console.error("[MMDPlayerBase] \u274C Error destroying world #" + i + ":", e);
|
|
1804
1805
|
}
|
|
1805
1806
|
}
|
|
1806
1807
|
components.worlds.length = 0;
|
|
@@ -1810,7 +1811,7 @@ ${errorMessage}
|
|
|
1810
1811
|
try {
|
|
1811
1812
|
Ammo2.destroy(components.solvers[i]);
|
|
1812
1813
|
} catch (e) {
|
|
1813
|
-
console.error(
|
|
1814
|
+
console.error("[MMDPlayerBase] \u274C Error destroying solver #" + i + ":", e);
|
|
1814
1815
|
}
|
|
1815
1816
|
}
|
|
1816
1817
|
components.solvers.length = 0;
|
|
@@ -1820,7 +1821,7 @@ ${errorMessage}
|
|
|
1820
1821
|
try {
|
|
1821
1822
|
Ammo2.destroy(components.caches[i]);
|
|
1822
1823
|
} catch (e) {
|
|
1823
|
-
console.error(
|
|
1824
|
+
console.error("[MMDPlayerBase] \u274C Error destroying cache #" + i + ":", e);
|
|
1824
1825
|
}
|
|
1825
1826
|
}
|
|
1826
1827
|
components.caches.length = 0;
|
|
@@ -1830,7 +1831,7 @@ ${errorMessage}
|
|
|
1830
1831
|
try {
|
|
1831
1832
|
Ammo2.destroy(components.dispatchers[i]);
|
|
1832
1833
|
} catch (e) {
|
|
1833
|
-
console.error(
|
|
1834
|
+
console.error("[MMDPlayerBase] \u274C Error destroying dispatcher #" + i + ":", e);
|
|
1834
1835
|
}
|
|
1835
1836
|
}
|
|
1836
1837
|
components.dispatchers.length = 0;
|
|
@@ -1840,7 +1841,7 @@ ${errorMessage}
|
|
|
1840
1841
|
try {
|
|
1841
1842
|
Ammo2.destroy(components.configs[i]);
|
|
1842
1843
|
} catch (e) {
|
|
1843
|
-
console.error(
|
|
1844
|
+
console.error("[MMDPlayerBase] \u274C Error destroying config #" + i + ":", e);
|
|
1844
1845
|
}
|
|
1845
1846
|
}
|
|
1846
1847
|
components.configs.length = 0;
|
|
@@ -2237,7 +2238,7 @@ var ControlPanel = ({
|
|
|
2237
2238
|
"button",
|
|
2238
2239
|
{
|
|
2239
2240
|
onClick: onToggleListLoop,
|
|
2240
|
-
className:
|
|
2241
|
+
className: clsx.clsx("rounded-full p-2 transition-colors", isListLooping ? "bg-green-500/30 hover:bg-green-500/50" : "hover:bg-white/20"),
|
|
2241
2242
|
title: isListLooping ? "\u5217\u8868\u5FAA\u73AF\uFF1A\u5F00\u542F" : "\u5217\u8868\u5FAA\u73AF\uFF1A\u5173\u95ED"
|
|
2242
2243
|
},
|
|
2243
2244
|
/* @__PURE__ */ React10__default.default.createElement(lucideReact.Repeat, { size: 20 })
|
|
@@ -2245,7 +2246,7 @@ var ControlPanel = ({
|
|
|
2245
2246
|
"button",
|
|
2246
2247
|
{
|
|
2247
2248
|
onClick: onToggleLoop,
|
|
2248
|
-
className:
|
|
2249
|
+
className: clsx.clsx("rounded-full p-2 transition-colors", isLooping ? "bg-blue-500/30 hover:bg-blue-500/50" : "hover:bg-white/20"),
|
|
2249
2250
|
title: isLooping ? "\u5355\u66F2\u5FAA\u73AF\uFF1A\u5F00\u542F" : "\u5355\u66F2\u5FAA\u73AF\uFF1A\u5173\u95ED"
|
|
2250
2251
|
},
|
|
2251
2252
|
/* @__PURE__ */ React10__default.default.createElement(lucideReact.Repeat1, { size: 20 })
|
|
@@ -2261,7 +2262,7 @@ var ControlPanel = ({
|
|
|
2261
2262
|
"button",
|
|
2262
2263
|
{
|
|
2263
2264
|
onClick: onToggleAxes,
|
|
2264
|
-
className:
|
|
2265
|
+
className: clsx.clsx("rounded-full p-2 transition-colors", showAxes ? "bg-blue-500/30 hover:bg-blue-500/50" : "hover:bg-white/20"),
|
|
2265
2266
|
title: "\u663E\u793A/\u9690\u85CF\u5750\u6807\u8F74"
|
|
2266
2267
|
},
|
|
2267
2268
|
/* @__PURE__ */ React10__default.default.createElement(lucideReact.Grid3x3, { size: 20 })
|
|
@@ -2300,10 +2301,10 @@ var SettingsPanel = ({
|
|
|
2300
2301
|
{
|
|
2301
2302
|
key: item.id,
|
|
2302
2303
|
onClick: () => onSelectId?.(item.id),
|
|
2303
|
-
className:
|
|
2304
|
+
className: clsx.clsx("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")
|
|
2304
2305
|
},
|
|
2305
2306
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex h-12 w-12 flex-shrink-0 items-center justify-center rounded bg-black/20 overflow-hidden" }, item.thumbnail ? /* @__PURE__ */ React10__default.default.createElement("img", { src: item.thumbnail, alt: item.name, className: "h-full w-full object-cover" }) : /* @__PURE__ */ React10__default.default.createElement(lucideReact.Video, { size: 20, className: "opacity-50" })),
|
|
2306
|
-
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1 text-left" }, /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
2307
|
+
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1 text-left" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("font-medium", currentId === item.id ? "text-blue-400" : "text-white") }, item.name), item.description && /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-white/50 truncate" }, item.description)),
|
|
2307
2308
|
currentId === item.id && /* @__PURE__ */ React10__default.default.createElement(lucideReact.Check, { size: 16, className: "text-blue-400" })
|
|
2308
2309
|
)));
|
|
2309
2310
|
};
|
|
@@ -2314,10 +2315,10 @@ var SettingsPanel = ({
|
|
|
2314
2315
|
{
|
|
2315
2316
|
key: opt.id,
|
|
2316
2317
|
onClick: () => onSelectOption?.(type, opt.id),
|
|
2317
|
-
className:
|
|
2318
|
+
className: clsx.clsx("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")
|
|
2318
2319
|
},
|
|
2319
2320
|
opt.thumbnail ? /* @__PURE__ */ React10__default.default.createElement("img", { src: opt.thumbnail, alt: opt.name, className: "h-16 w-full rounded object-cover bg-black/20" }) : /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex h-16 w-full items-center justify-center rounded bg-black/20" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs opacity-30" }, opt.name.slice(0, 2))),
|
|
2320
|
-
/* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
2321
|
+
/* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("w-full truncate text-xs", currentVal === opt.id ? "text-blue-400" : "text-white/80") }, opt.name),
|
|
2321
2322
|
currentVal === opt.id && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute top-1 right-1 rounded-full bg-blue-500 p-0.5" }, /* @__PURE__ */ React10__default.default.createElement(lucideReact.Check, { size: 10, className: "text-white" }))
|
|
2322
2323
|
))));
|
|
2323
2324
|
};
|
|
@@ -2360,9 +2361,9 @@ var MMDPlayerEnhancedDebugInfo = ({
|
|
|
2360
2361
|
return /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AE} MMDPlayerEnhanced Debug"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5FAA\u73AF:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge, { active: isLooping, label: isLooping ? "On" : "Off" })), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u89C6\u56FE\u72B6\u6001"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5168\u5C4F:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge, { active: isFullscreen, label: isFullscreen ? "Yes" : "No" })), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5750\u6807\u8F74:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge, { active: showAxes, label: showAxes ? "Show" : "Hide" })))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u8D44\u6E90\u4FE1\u606F"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u6A21\u5F0F:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-blue-400 uppercase" }, mode)), mode === "list" && /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u603B\u6570:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-green-400" }, totalResources)), currentResourceId && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-gray-400 text-[10px]" }, "\u5F53\u524D\u8D44\u6E90"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-white truncate" }, currentResourceName || currentResourceId), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-gray-500 text-[10px] mt-1 truncate" }, "ID: ", currentResourceId))))), memoryInfo && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5185\u5B58\u76D1\u63A7 (Chrome only)"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5DF2\u7528:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-yellow-400 font-bold" }, memoryInfo.used, " MB")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u603B\u8BA1:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-blue-400" }, memoryInfo.total, " MB")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u9650\u5236:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, memoryInfo.limit, " MB")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-gray-700 rounded-full h-2 overflow-hidden" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
2361
2362
|
"div",
|
|
2362
2363
|
{
|
|
2363
|
-
className:
|
|
2364
|
+
className: clsx.clsx("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"),
|
|
2364
2365
|
style: {
|
|
2365
|
-
width:
|
|
2366
|
+
width: Math.min(100, parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100) + "%"
|
|
2366
2367
|
}
|
|
2367
2368
|
}
|
|
2368
2369
|
)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-[9px] text-gray-500 mt-1 text-center" }, (parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100).toFixed(1), "%")))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-auto pt-4 border-t border-gray-700" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-gray-500 text-[10px]" }, "Last Update: ", (/* @__PURE__ */ new Date()).toLocaleTimeString())));
|
|
@@ -2370,7 +2371,7 @@ var MMDPlayerEnhancedDebugInfo = ({
|
|
|
2370
2371
|
var StatusBadge = ({ active, label }) => /* @__PURE__ */ React10__default.default.createElement(
|
|
2371
2372
|
"span",
|
|
2372
2373
|
{
|
|
2373
|
-
className:
|
|
2374
|
+
className: clsx.clsx("px-2 py-0.5 rounded text-[10px] font-bold", active ? "bg-green-600 text-white" : "bg-gray-700 text-gray-400")
|
|
2374
2375
|
},
|
|
2375
2376
|
label
|
|
2376
2377
|
);
|
|
@@ -2456,7 +2457,7 @@ var MMDPlayerEnhanced = ({
|
|
|
2456
2457
|
if (!containerRef.current) return;
|
|
2457
2458
|
if (!document.fullscreenElement) {
|
|
2458
2459
|
containerRef.current.requestFullscreen().catch((err) => {
|
|
2459
|
-
console.error(
|
|
2460
|
+
console.error("Error attempting to enable fullscreen: " + err.message);
|
|
2460
2461
|
});
|
|
2461
2462
|
setIsFullscreen(true);
|
|
2462
2463
|
} else {
|
|
@@ -2502,7 +2503,7 @@ var MMDPlayerEnhanced = ({
|
|
|
2502
2503
|
"div",
|
|
2503
2504
|
{
|
|
2504
2505
|
ref: containerRef,
|
|
2505
|
-
className:
|
|
2506
|
+
className: clsx.clsx("relative overflow-hidden bg-black group flex", className),
|
|
2506
2507
|
style
|
|
2507
2508
|
},
|
|
2508
2509
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1 relative" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
@@ -2537,7 +2538,7 @@ var MMDPlayerEnhanced = ({
|
|
|
2537
2538
|
},
|
|
2538
2539
|
...rest
|
|
2539
2540
|
}
|
|
2540
|
-
), isLoading && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" })), /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
2541
|
+
), isLoading && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" })), /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("transition-opacity duration-300", isPlaying && !showSettings ? "opacity-0 group-hover:opacity-100" : "opacity-100") }, /* @__PURE__ */ React10__default.default.createElement(
|
|
2541
2542
|
ControlPanel,
|
|
2542
2543
|
{
|
|
2543
2544
|
isPlaying,
|
|
@@ -2607,26 +2608,26 @@ var MMDPlaylistDebugInfo = ({
|
|
|
2607
2608
|
}, 1e3);
|
|
2608
2609
|
return () => clearInterval(timer);
|
|
2609
2610
|
}, []);
|
|
2610
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AD} MMDPlaylist Debug"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u5217\u8868"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-white truncate" }, playlistName), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u8FDB\u5EA6:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-blue-400" }, currentIndex + 1, " / ", totalNodes)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5217\u8868\u5FAA\u73AF:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isListLooping, label: isListLooping ? "On" : "Off" })))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5F53\u524D\u8282\u70B9"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-2 bg-gray-800 rounded space-y-1" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-white font-semibold truncate" }, currentNode.name), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-gray-500 text-[10px] truncate" }, "ID: ", currentNode.id), currentNode.duration && /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u65F6\u957F:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-green-400" }, currentNode.duration, "s")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u8282\u70B9\u5FAA\u73AF:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isNodeLooping, label: isNodeLooping ? "On" : "Off" })))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u9884\u52A0\u8F7D\u7B56\u7565"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u7B56\u7565:"), /* @__PURE__ */ React10__default.default.createElement("span", { className:
|
|
2611
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-white text-xs font-mono" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-sm font-bold mb-3 pb-2 border-b border-gray-700" }, "\u{1F3AD} MMDPlaylist Debug"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u5217\u8868"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-white truncate" }, playlistName), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u8FDB\u5EA6:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-blue-400" }, currentIndex + 1, " / ", totalNodes)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5217\u8868\u5FAA\u73AF:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isListLooping, label: isListLooping ? "On" : "Off" })))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5F53\u524D\u8282\u70B9"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-2 bg-gray-800 rounded space-y-1" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-white font-semibold truncate" }, currentNode.name), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-gray-500 text-[10px] truncate" }, "ID: ", currentNode.id), currentNode.duration && /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u65F6\u957F:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-green-400" }, currentNode.duration, "s")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u8282\u70B9\u5FAA\u73AF:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isNodeLooping, label: isNodeLooping ? "On" : "Off" })))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u64AD\u653E\u72B6\u6001"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u64AD\u653E\u4E2D:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isPlaying, label: isPlaying ? "Playing" : "Paused" })), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u52A0\u8F7D\u4E2D:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isLoading, label: isLoading ? "Loading" : "Ready" })))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u9884\u52A0\u8F7D\u7B56\u7565"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u7B56\u7565:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: clsx.clsx("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__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5DF2\u9884\u52A0\u8F7D:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-purple-400" }, preloadedNodes.length)), preloadedNodes.length > 0 && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-gray-400 text-[10px] mb-1" }, "\u9884\u52A0\u8F7D\u8282\u70B9\u7D22\u5F15"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex flex-wrap gap-1" }, preloadedNodes.map((idx) => /* @__PURE__ */ React10__default.default.createElement(
|
|
2611
2612
|
"span",
|
|
2612
2613
|
{
|
|
2613
2614
|
key: idx,
|
|
2614
|
-
className:
|
|
2615
|
+
className: clsx.clsx("px-1.5 py-0.5 rounded text-[10px]", idx === currentIndex ? "bg-green-600 text-white font-bold" : "bg-gray-700 text-gray-300")
|
|
2615
2616
|
},
|
|
2616
2617
|
idx
|
|
2617
2618
|
)))))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u89C6\u56FE\u72B6\u6001"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 pl-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5168\u5C4F:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: isFullscreen, label: isFullscreen ? "Yes" : "No" })), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5750\u6807\u8F74:"), /* @__PURE__ */ React10__default.default.createElement(StatusBadge2, { active: showAxes, label: showAxes ? "Show" : "Hide" })))), memoryInfo && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u5185\u5B58\u76D1\u63A7 (Chrome only)"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-2 p-2 bg-gray-800 rounded" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u5DF2\u7528:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-yellow-400 font-bold" }, memoryInfo.used, " MB")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u603B\u8BA1:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-blue-400" }, memoryInfo.total, " MB")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between text-[10px]" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, "\u9650\u5236:"), /* @__PURE__ */ React10__default.default.createElement("span", { className: "text-gray-400" }, memoryInfo.limit, " MB")), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "bg-gray-700 rounded-full h-2 overflow-hidden" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
2618
2619
|
"div",
|
|
2619
2620
|
{
|
|
2620
|
-
className:
|
|
2621
|
+
className: clsx.clsx("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"),
|
|
2621
2622
|
style: {
|
|
2622
|
-
width:
|
|
2623
|
+
width: Math.min(100, parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100) + "%"
|
|
2623
2624
|
}
|
|
2624
2625
|
}
|
|
2625
2626
|
)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-[9px] text-gray-500 mt-1 text-center" }, (parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100).toFixed(1), "%")))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "text-gray-400 mb-2" }, "\u8282\u70B9\u5217\u8868"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "space-y-1 max-h-40 overflow-y-auto" }, Array.from({ length: totalNodes }).map((_, idx) => /* @__PURE__ */ React10__default.default.createElement(
|
|
2626
2627
|
"div",
|
|
2627
2628
|
{
|
|
2628
2629
|
key: idx,
|
|
2629
|
-
className:
|
|
2630
|
+
className: clsx.clsx("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")
|
|
2630
2631
|
},
|
|
2631
2632
|
/* @__PURE__ */ React10__default.default.createElement("span", null, "\u8282\u70B9 ", idx),
|
|
2632
2633
|
idx === currentIndex && /* @__PURE__ */ React10__default.default.createElement("span", null, "\u25B6"),
|
|
@@ -2636,12 +2637,10 @@ var MMDPlaylistDebugInfo = ({
|
|
|
2636
2637
|
var StatusBadge2 = ({ active, label }) => /* @__PURE__ */ React10__default.default.createElement(
|
|
2637
2638
|
"span",
|
|
2638
2639
|
{
|
|
2639
|
-
className:
|
|
2640
|
+
className: clsx.clsx("px-2 py-0.5 rounded text-[10px] font-bold", active ? "bg-green-600 text-white" : "bg-gray-700 text-gray-400")
|
|
2640
2641
|
},
|
|
2641
2642
|
label
|
|
2642
2643
|
);
|
|
2643
|
-
|
|
2644
|
-
// src/mmd/components/MMDPlaylist.tsx
|
|
2645
2644
|
var MMDPlaylist = ({
|
|
2646
2645
|
playlist,
|
|
2647
2646
|
stage,
|
|
@@ -2674,14 +2673,14 @@ var MMDPlaylist = ({
|
|
|
2674
2673
|
if (isTransitioning) return;
|
|
2675
2674
|
const node = nodes[index];
|
|
2676
2675
|
if (!node) return;
|
|
2677
|
-
console.log(
|
|
2676
|
+
console.log("[MMDPlaylist] Starting transition to node " + index);
|
|
2678
2677
|
const wasPlaying = isPlaying;
|
|
2679
2678
|
setIsPlaying(false);
|
|
2680
2679
|
setIsTransitioning(true);
|
|
2681
2680
|
requestAnimationFrame(() => {
|
|
2682
2681
|
requestAnimationFrame(() => {
|
|
2683
2682
|
setTimeout(() => {
|
|
2684
|
-
console.log(
|
|
2683
|
+
console.log("[MMDPlaylist] Loading new node " + index);
|
|
2685
2684
|
setCurrentIndex(index);
|
|
2686
2685
|
setIsLoading(true);
|
|
2687
2686
|
onNodeChange?.(node, index);
|
|
@@ -2692,7 +2691,7 @@ var MMDPlaylist = ({
|
|
|
2692
2691
|
if (wasPlaying) {
|
|
2693
2692
|
setIsPlaying(true);
|
|
2694
2693
|
}
|
|
2695
|
-
console.log(
|
|
2694
|
+
console.log("[MMDPlaylist] Transition to node " + index + " completed");
|
|
2696
2695
|
}, 100);
|
|
2697
2696
|
});
|
|
2698
2697
|
});
|
|
@@ -2734,7 +2733,7 @@ var MMDPlaylist = ({
|
|
|
2734
2733
|
if (!containerRef.current) return;
|
|
2735
2734
|
if (!document.fullscreenElement) {
|
|
2736
2735
|
containerRef.current.requestFullscreen().catch((err) => {
|
|
2737
|
-
console.error(
|
|
2736
|
+
console.error("Error attempting to enable fullscreen: " + err.message);
|
|
2738
2737
|
});
|
|
2739
2738
|
setIsFullscreen(true);
|
|
2740
2739
|
} else {
|
|
@@ -2762,7 +2761,7 @@ var MMDPlaylist = ({
|
|
|
2762
2761
|
nodes.forEach((node, idx) => {
|
|
2763
2762
|
if (!preloadedRef.current.has(idx)) {
|
|
2764
2763
|
preloadedRef.current.add(idx);
|
|
2765
|
-
console.log(
|
|
2764
|
+
console.log("[MMDPlaylist] Preload strategy: all - marked node " + idx + " (" + node.name + ")");
|
|
2766
2765
|
}
|
|
2767
2766
|
});
|
|
2768
2767
|
} else if (preload === "next") {
|
|
@@ -2770,7 +2769,7 @@ var MMDPlaylist = ({
|
|
|
2770
2769
|
const nextNode = nodes[nextIndex];
|
|
2771
2770
|
if (nextNode && !preloadedRef.current.has(nextIndex)) {
|
|
2772
2771
|
preloadedRef.current.add(nextIndex);
|
|
2773
|
-
console.log(
|
|
2772
|
+
console.log("[MMDPlaylist] Preload strategy: next - marked node " + nextIndex + " (" + nextNode.name + ")");
|
|
2774
2773
|
}
|
|
2775
2774
|
}
|
|
2776
2775
|
}, [currentIndex, nodes, preload]);
|
|
@@ -2788,7 +2787,7 @@ var MMDPlaylist = ({
|
|
|
2788
2787
|
if (toRemove.length > 0) {
|
|
2789
2788
|
toRemove.forEach((idx) => {
|
|
2790
2789
|
preloadedRef.current.delete(idx);
|
|
2791
|
-
console.log(
|
|
2790
|
+
console.log("[MMDPlaylist] Memory cleanup: removed preload mark for node " + idx);
|
|
2792
2791
|
});
|
|
2793
2792
|
}
|
|
2794
2793
|
}, [currentIndex, nodes.length, preload]);
|
|
@@ -2806,7 +2805,7 @@ var MMDPlaylist = ({
|
|
|
2806
2805
|
"div",
|
|
2807
2806
|
{
|
|
2808
2807
|
ref: containerRef,
|
|
2809
|
-
className:
|
|
2808
|
+
className: clsx.clsx("relative overflow-hidden bg-black group flex h-full", className),
|
|
2810
2809
|
style
|
|
2811
2810
|
},
|
|
2812
2811
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1 relative" }, !isTransitioning && /* @__PURE__ */ React10__default.default.createElement(
|
|
@@ -2832,10 +2831,10 @@ var MMDPlaylist = ({
|
|
|
2832
2831
|
onEnded: handleEnded,
|
|
2833
2832
|
onError
|
|
2834
2833
|
}
|
|
2835
|
-
), (isLoading || isTransitioning) && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex flex-col items-center gap-3" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-sm text-white/80" }, isTransitioning ? "\u5207\u6362\u4E2D..." :
|
|
2834
|
+
), (isLoading || isTransitioning) && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-black/50 backdrop-blur-sm" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex flex-col items-center gap-3" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "h-10 w-10 animate-spin rounded-full border-4 border-white/20 border-t-blue-500" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-sm text-white/80" }, isTransitioning ? "\u5207\u6362\u4E2D..." : "\u6B63\u5728\u52A0\u8F7D " + (currentIndex + 1) + " / " + nodes.length))), /* @__PURE__ */ React10__default.default.createElement(
|
|
2836
2835
|
"div",
|
|
2837
2836
|
{
|
|
2838
|
-
className:
|
|
2837
|
+
className: clsx.clsx("transition-opacity duration-300", isPlaying && !showPlaylist ? "opacity-0 group-hover:opacity-100" : "opacity-100")
|
|
2839
2838
|
},
|
|
2840
2839
|
/* @__PURE__ */ React10__default.default.createElement(
|
|
2841
2840
|
ControlPanel,
|
|
@@ -2849,7 +2848,7 @@ var MMDPlaylist = ({
|
|
|
2849
2848
|
showAxes,
|
|
2850
2849
|
showPrevNext,
|
|
2851
2850
|
title: currentNode.name,
|
|
2852
|
-
subtitle:
|
|
2851
|
+
subtitle: currentIndex + 1 + " / " + nodes.length,
|
|
2853
2852
|
onPlayPause: handlePlayPause,
|
|
2854
2853
|
onPrevious: handlePrevious,
|
|
2855
2854
|
onNext: handleNext,
|
|
@@ -2880,12 +2879,12 @@ var MMDPlaylist = ({
|
|
|
2880
2879
|
goToNode(index);
|
|
2881
2880
|
setShowPlaylist(false);
|
|
2882
2881
|
},
|
|
2883
|
-
className:
|
|
2882
|
+
className: clsx.clsx("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")
|
|
2884
2883
|
},
|
|
2885
2884
|
/* @__PURE__ */ React10__default.default.createElement(
|
|
2886
2885
|
"div",
|
|
2887
2886
|
{
|
|
2888
|
-
className:
|
|
2887
|
+
className: clsx.clsx("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")
|
|
2889
2888
|
},
|
|
2890
2889
|
index + 1
|
|
2891
2890
|
),
|
|
@@ -3067,7 +3066,7 @@ var MMDLightingDebugPanel = ({
|
|
|
3067
3066
|
return /* @__PURE__ */ React10__default.default.createElement(React10__default.default.Fragment, null, /* @__PURE__ */ React10__default.default.createElement(
|
|
3068
3067
|
"div",
|
|
3069
3068
|
{
|
|
3070
|
-
className:
|
|
3069
|
+
className: clsx.clsx("fixed top-0", positionClass, "z-[9999] w-80 h-screen bg-white/95 backdrop-blur-md shadow-2xl overflow-y-auto transition-transform duration-300", translateClass, className)
|
|
3071
3070
|
},
|
|
3072
3071
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between mb-4" }, /* @__PURE__ */ React10__default.default.createElement("h2", { className: "text-lg font-bold text-gray-900" }, "\u{1F3A8} \u5149\u7167\u8C03\u8BD5"), /* @__PURE__ */ React10__default.default.createElement(
|
|
3073
3072
|
"button",
|
|
@@ -3432,7 +3431,7 @@ var MMDLightingDebugPanel = ({
|
|
|
3432
3431
|
"button",
|
|
3433
3432
|
{
|
|
3434
3433
|
onClick: () => setShowPanel(true),
|
|
3435
|
-
className:
|
|
3434
|
+
className: clsx.clsx("fixed top-4", position === "right" ? "right-4" : "left-4", "z-[9999] px-4 py-2 bg-blue-500 text-white rounded-lg shadow-lg hover:bg-blue-600 text-sm transition-colors"),
|
|
3436
3435
|
"aria-label": "\u6253\u5F00\u8C03\u8BD5\u9762\u677F"
|
|
3437
3436
|
},
|
|
3438
3437
|
"\u{1F3A8} \u5149\u7167\u8C03\u8BD5"
|
|
@@ -3510,18 +3509,18 @@ function printDiagnosticReport(report) {
|
|
|
3510
3509
|
console.log("\u{1F50D} MMD\u6E32\u67D3\u8BCA\u65AD\u62A5\u544A");
|
|
3511
3510
|
console.log("=".repeat(60));
|
|
3512
3511
|
console.log("\n\u{1F4CA} \u6750\u8D28\u7EDF\u8BA1:");
|
|
3513
|
-
console.log(
|
|
3514
|
-
console.log(
|
|
3515
|
-
console.log(
|
|
3516
|
-
console.log(
|
|
3512
|
+
console.log(" \u603B\u6750\u8D28\u6570: " + report.totalMaterials);
|
|
3513
|
+
console.log(" MeshToonMaterial: " + report.toonMaterialCount);
|
|
3514
|
+
console.log(" MeshPhongMaterial: " + report.phongMaterialCount);
|
|
3515
|
+
console.log(" MeshStandardMaterial: " + report.standardMaterialCount);
|
|
3517
3516
|
console.log("\n\u{1F3A8} \u7EB9\u7406\u7EDF\u8BA1:");
|
|
3518
|
-
console.log(
|
|
3519
|
-
console.log(
|
|
3520
|
-
console.log(
|
|
3517
|
+
console.log(" \u6709Toon\u7EB9\u7406: " + report.materialsWithToon + " / " + report.totalMaterials + " " + (report.materialsWithToon > 0 ? "\u2705" : "\u274C"));
|
|
3518
|
+
console.log(" \u6709Sphere\u7EB9\u7406: " + report.materialsWithSphere + " / " + report.totalMaterials + " " + (report.materialsWithSphere > 0 ? "\u2705" : "\u274C"));
|
|
3519
|
+
console.log(" \u6709\u4E3B\u7EB9\u7406: " + report.materialsWithMainTexture + " / " + report.totalMaterials);
|
|
3521
3520
|
if (report.issues.length > 0) {
|
|
3522
3521
|
console.log("\n\u26A0\uFE0F \u53D1\u73B0\u7684\u95EE\u9898:");
|
|
3523
3522
|
report.issues.forEach((issue, i) => {
|
|
3524
|
-
console.log(
|
|
3523
|
+
console.log(" " + (i + 1) + ". " + issue);
|
|
3525
3524
|
});
|
|
3526
3525
|
} else {
|
|
3527
3526
|
console.log("\n\u2705 \u672A\u53D1\u73B0\u660E\u663E\u95EE\u9898");
|
|
@@ -3529,7 +3528,7 @@ function printDiagnosticReport(report) {
|
|
|
3529
3528
|
if (report.suggestions.length > 0) {
|
|
3530
3529
|
console.log("\n\u{1F4A1} \u6539\u8FDB\u5EFA\u8BAE:");
|
|
3531
3530
|
report.suggestions.forEach((suggestion, i) => {
|
|
3532
|
-
console.log(
|
|
3531
|
+
console.log(" " + (i + 1) + ". " + suggestion);
|
|
3533
3532
|
});
|
|
3534
3533
|
}
|
|
3535
3534
|
console.log("\n" + "=".repeat(60));
|
|
@@ -3589,8 +3588,7 @@ function listAllMaterials(scene) {
|
|
|
3589
3588
|
if (obj instanceof THREE2__namespace.Mesh || obj instanceof THREE2__namespace.SkinnedMesh) {
|
|
3590
3589
|
const materials = Array.isArray(obj.material) ? obj.material : [obj.material];
|
|
3591
3590
|
materials.forEach((mat) => {
|
|
3592
|
-
console.log(
|
|
3593
|
-
\u6750\u8D28 #${index}:`, obj.name || "unnamed");
|
|
3591
|
+
console.log("\n\u6750\u8D28 #" + index + ":", obj.name || "unnamed");
|
|
3594
3592
|
console.log(inspectMaterial(mat));
|
|
3595
3593
|
index++;
|
|
3596
3594
|
});
|
|
@@ -3643,14 +3641,13 @@ function printSphereDiagnostic(diagnostic) {
|
|
|
3643
3641
|
console.log("=".repeat(60));
|
|
3644
3642
|
console.log(`
|
|
3645
3643
|
\u{1F4CA} \u7EDF\u8BA1:`);
|
|
3646
|
-
console.log(
|
|
3647
|
-
console.log(
|
|
3648
|
-
console.log(
|
|
3644
|
+
console.log(" \u603B\u6750\u8D28\u6570: " + diagnostic.totalMaterials);
|
|
3645
|
+
console.log(" \u9884\u671F\u6709sphere\u7EB9\u7406: " + diagnostic.expectedSphere);
|
|
3646
|
+
console.log(" \u5B9E\u9645\u6709sphere\u7EB9\u7406: " + diagnostic.actualSphere + " " + (diagnostic.actualSphere > 0 ? "\u2705" : "\u274C"));
|
|
3649
3647
|
if (diagnostic.missingSphere.length > 0) {
|
|
3650
|
-
console.log(
|
|
3651
|
-
\u26A0\uFE0F \u7F3A\u5C11sphere\u7EB9\u7406\u7684\u6750\u8D28 (${diagnostic.missingSphere.length}\u4E2A):`);
|
|
3648
|
+
console.log("\n\u26A0\uFE0F \u7F3A\u5C11sphere\u7EB9\u7406\u7684\u6750\u8D28 (" + diagnostic.missingSphere.length + "\u4E2A):");
|
|
3652
3649
|
diagnostic.missingSphere.forEach((item, i) => {
|
|
3653
|
-
console.log(
|
|
3650
|
+
console.log(" " + (i + 1) + ". [" + item.index + "] " + item.name + " (\u5BF9\u8C61: " + item.objectName + ")");
|
|
3654
3651
|
});
|
|
3655
3652
|
} else {
|
|
3656
3653
|
console.log("\n\u2705 \u6240\u6709\u9884\u671F\u7684\u6750\u8D28\u90FD\u6709sphere\u7EB9\u7406");
|
|
@@ -3699,11 +3696,11 @@ function addDefaultSphereTextures(mesh, sphereTextureUrl) {
|
|
|
3699
3696
|
});
|
|
3700
3697
|
}
|
|
3701
3698
|
});
|
|
3702
|
-
console.log(
|
|
3699
|
+
console.log("\u{1F52E} \u6DFB\u52A0\u9ED8\u8BA4Sphere\u7EB9\u7406\u5230 " + appliedCount + " \u4E2A\u6750\u8D28");
|
|
3703
3700
|
}
|
|
3704
3701
|
async function checkModelSphereDefinition(modelUrl) {
|
|
3705
3702
|
try {
|
|
3706
|
-
const { PMXParser: PMXParser2 } = await import('../PMXParser-
|
|
3703
|
+
const { PMXParser: PMXParser2 } = await import('../PMXParser-2VTA737I.js');
|
|
3707
3704
|
const parser = new PMXParser2();
|
|
3708
3705
|
const result = await parser.loadAndParse(modelUrl);
|
|
3709
3706
|
const sphereTextures = [];
|
|
@@ -3730,22 +3727,20 @@ async function checkModelSphereDefinition(modelUrl) {
|
|
|
3730
3727
|
}
|
|
3731
3728
|
async function printModelSphereInfo(modelUrl) {
|
|
3732
3729
|
console.log("\n\u{1F50D} \u68C0\u67E5\u6A21\u578B\u7684Sphere\u7EB9\u7406\u5B9A\u4E49...");
|
|
3733
|
-
console.log(
|
|
3730
|
+
console.log("\u6A21\u578B: " + modelUrl);
|
|
3734
3731
|
console.log("=".repeat(60));
|
|
3735
3732
|
const info = await checkModelSphereDefinition(modelUrl);
|
|
3736
3733
|
if (info.hasSphere) {
|
|
3737
|
-
console.log(
|
|
3738
|
-
\u2705 \u6A21\u578B\u5B9A\u4E49\u4E86 ${info.sphereTextures.length} \u4E2ASphere\u7EB9\u7406:`);
|
|
3734
|
+
console.log("\n\u2705 \u6A21\u578B\u5B9A\u4E49\u4E86 " + info.sphereTextures.length + " \u4E2ASphere\u7EB9\u7406:");
|
|
3739
3735
|
info.sphereTextures.forEach((item, i) => {
|
|
3740
|
-
console.log(
|
|
3741
|
-
|
|
3742
|
-
console.log(
|
|
3743
|
-
console.log(` \u6A21\u5F0F: ${item.mode}`);
|
|
3736
|
+
console.log("\n" + (i + 1) + ". " + item.materialName);
|
|
3737
|
+
console.log(" \u7EB9\u7406: " + item.texturePath);
|
|
3738
|
+
console.log(" \u6A21\u5F0F: " + item.mode);
|
|
3744
3739
|
});
|
|
3745
3740
|
console.log("\n\u{1F4A1} \u5EFA\u8BAE:");
|
|
3746
3741
|
console.log(" 1. \u68C0\u67E5\u4EE5\u4E0B\u6587\u4EF6\u662F\u5426\u5B58\u5728\u4E8E\u6A21\u578B\u76EE\u5F55:");
|
|
3747
3742
|
info.sphereTextures.forEach((item) => {
|
|
3748
|
-
console.log(
|
|
3743
|
+
console.log(" - " + item.texturePath);
|
|
3749
3744
|
});
|
|
3750
3745
|
console.log(" 2. \u786E\u4FDD\u8FD9\u4E9B\u6587\u4EF6\u53EF\u4EE5\u88AB\u8BBF\u95EE\uFF08\u65E0CORS\u9519\u8BEF\uFF09");
|
|
3751
3746
|
console.log(" 3. MMDLoader\u5E94\u8BE5\u4F1A\u81EA\u52A8\u52A0\u8F7D\u8FD9\u4E9B\u7EB9\u7406");
|
|
@@ -3785,7 +3780,7 @@ async function fullSphereDiagnostic(mesh, modelUrl) {
|
|
|
3785
3780
|
}
|
|
3786
3781
|
} else {
|
|
3787
3782
|
console.log("\n\u2705 \u68C0\u6D4B\u5230sphere\u7EB9\u7406\uFF01");
|
|
3788
|
-
console.log(
|
|
3783
|
+
console.log("\u5F53\u524D\u6709 " + runtimeDiag.actualSphere + " \u4E2A\u6750\u8D28\u4F7F\u7528sphere\u7EB9\u7406");
|
|
3789
3784
|
}
|
|
3790
3785
|
console.log("\n" + "=".repeat(60));
|
|
3791
3786
|
}
|
|
@@ -3932,7 +3927,7 @@ var DialogueBox = ({
|
|
|
3932
3927
|
const dialogueContent = /* @__PURE__ */ React10__default.default.createElement(
|
|
3933
3928
|
"div",
|
|
3934
3929
|
{
|
|
3935
|
-
className:
|
|
3930
|
+
className: clsx.clsx(className || ""),
|
|
3936
3931
|
style: {
|
|
3937
3932
|
position: "fixed",
|
|
3938
3933
|
bottom: 0,
|
|
@@ -3952,8 +3947,8 @@ var DialogueBox = ({
|
|
|
3952
3947
|
onClick: handleClick,
|
|
3953
3948
|
style: {
|
|
3954
3949
|
borderColor: theme.borderColor,
|
|
3955
|
-
backdropFilter:
|
|
3956
|
-
WebkitBackdropFilter:
|
|
3950
|
+
backdropFilter: "blur(" + theme.blur + ") saturate(200%)",
|
|
3951
|
+
WebkitBackdropFilter: "blur(" + theme.blur + ") saturate(200%)",
|
|
3957
3952
|
opacity: theme.opacity,
|
|
3958
3953
|
pointerEvents: "auto",
|
|
3959
3954
|
position: "relative",
|
|
@@ -4041,7 +4036,7 @@ var DialogueBox = ({
|
|
|
4041
4036
|
e.stopPropagation();
|
|
4042
4037
|
onToggleAuto?.();
|
|
4043
4038
|
},
|
|
4044
|
-
className:
|
|
4039
|
+
className: clsx.clsx("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"),
|
|
4045
4040
|
style: {
|
|
4046
4041
|
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))",
|
|
4047
4042
|
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)"
|
|
@@ -4156,7 +4151,7 @@ var HistoryPanel = ({
|
|
|
4156
4151
|
const historyContent = /* @__PURE__ */ React10__default.default.createElement(
|
|
4157
4152
|
"div",
|
|
4158
4153
|
{
|
|
4159
|
-
className:
|
|
4154
|
+
className: clsx.clsx("fixed inset-0 flex flex-col", className),
|
|
4160
4155
|
style: {
|
|
4161
4156
|
zIndex: 1,
|
|
4162
4157
|
pointerEvents: "auto",
|
|
@@ -4222,7 +4217,7 @@ var HistoryPanel = ({
|
|
|
4222
4217
|
), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1 overflow-y-auto p-6 space-y-4" }, history.length === 0 ? /* @__PURE__ */ React10__default.default.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__ */ React10__default.default.createElement(
|
|
4223
4218
|
"div",
|
|
4224
4219
|
{
|
|
4225
|
-
key:
|
|
4220
|
+
key: item.nodeIndex + "-" + item.dialogueIndex + "-" + index,
|
|
4226
4221
|
className: "p-6 rounded-2xl transition-all hover:scale-[1.01] relative overflow-hidden cursor-pointer",
|
|
4227
4222
|
style: {
|
|
4228
4223
|
background: "linear-gradient(135deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.1))",
|
|
@@ -4343,7 +4338,7 @@ var LoadingScreen = ({
|
|
|
4343
4338
|
const content = /* @__PURE__ */ React10__default.default.createElement(
|
|
4344
4339
|
"div",
|
|
4345
4340
|
{
|
|
4346
|
-
className:
|
|
4341
|
+
className: clsx.clsx("fixed inset-0 w-screen h-screen flex items-center justify-center", className),
|
|
4347
4342
|
style: {
|
|
4348
4343
|
zIndex: 999998,
|
|
4349
4344
|
pointerEvents: "auto",
|
|
@@ -4487,7 +4482,7 @@ var StartScreen = ({
|
|
|
4487
4482
|
const content = /* @__PURE__ */ React10__default.default.createElement(
|
|
4488
4483
|
"div",
|
|
4489
4484
|
{
|
|
4490
|
-
className:
|
|
4485
|
+
className: clsx.clsx("fixed inset-0 w-screen h-screen flex items-center justify-center overflow-hidden", className),
|
|
4491
4486
|
style: {
|
|
4492
4487
|
zIndex: 999999,
|
|
4493
4488
|
pointerEvents: "auto",
|
|
@@ -4517,8 +4512,8 @@ var StartScreen = ({
|
|
|
4517
4512
|
top: Math.random() * 100 + "%",
|
|
4518
4513
|
left: Math.random() * 100 + "%",
|
|
4519
4514
|
boxShadow: "0 0 10px rgba(148, 163, 184, 0.3)",
|
|
4520
|
-
animation:
|
|
4521
|
-
animationDelay:
|
|
4515
|
+
animation: "floatParticle " + (Math.random() * 10 + 10) + "s linear infinite",
|
|
4516
|
+
animationDelay: "-" + Math.random() * 20 + "s"
|
|
4522
4517
|
}
|
|
4523
4518
|
}
|
|
4524
4519
|
)))),
|
|
@@ -4862,18 +4857,10 @@ var CheerButton = ({
|
|
|
4862
4857
|
"button",
|
|
4863
4858
|
{
|
|
4864
4859
|
onClick,
|
|
4865
|
-
className:
|
|
4866
|
-
fixed bottom-32 right-8
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
hover:from-pink-600 hover:to-purple-600
|
|
4870
|
-
active:scale-95
|
|
4871
|
-
text-white font-bold text-lg
|
|
4872
|
-
shadow-lg hover:shadow-xl
|
|
4873
|
-
transition-all duration-200
|
|
4874
|
-
flex items-center gap-2
|
|
4875
|
-
${className}
|
|
4876
|
-
`,
|
|
4860
|
+
className: clsx.clsx(
|
|
4861
|
+
"fixed bottom-32 right-8 px-6 py-3 rounded-full bg-gradient-to-r from-pink-500 to-purple-500 hover:from-pink-600 hover:to-purple-600 active:scale-95 text-white font-bold text-lg shadow-lg hover:shadow-xl transition-all duration-200 flex items-center gap-2",
|
|
4862
|
+
className
|
|
4863
|
+
),
|
|
4877
4864
|
style: {
|
|
4878
4865
|
animation: "cheer-pulse 2s ease-in-out infinite",
|
|
4879
4866
|
zIndex: 1e6
|
|
@@ -5078,15 +5065,13 @@ var CheerParticles = React10.forwardRef(
|
|
|
5078
5065
|
"div",
|
|
5079
5066
|
{
|
|
5080
5067
|
ref: containerRef,
|
|
5081
|
-
className:
|
|
5068
|
+
className: clsx.clsx("pointer-events-none absolute inset-0", className),
|
|
5082
5069
|
style: { zIndex: 999998 }
|
|
5083
5070
|
}
|
|
5084
5071
|
);
|
|
5085
5072
|
}
|
|
5086
5073
|
);
|
|
5087
5074
|
CheerParticles.displayName = "CheerParticles";
|
|
5088
|
-
|
|
5089
|
-
// src/mmd/visual-novel/MMDVisualNovel.tsx
|
|
5090
5075
|
var MMDVisualNovel = React10.forwardRef(
|
|
5091
5076
|
({
|
|
5092
5077
|
script,
|
|
@@ -5178,7 +5163,7 @@ var MMDVisualNovel = React10.forwardRef(
|
|
|
5178
5163
|
setPendingNodeIndex(nodeIndex);
|
|
5179
5164
|
return;
|
|
5180
5165
|
}
|
|
5181
|
-
console.log(
|
|
5166
|
+
console.log("[MMDVisualNovel] Transitioning to node " + nodeIndex);
|
|
5182
5167
|
setIsTransitioning(true);
|
|
5183
5168
|
setIsLoading(true);
|
|
5184
5169
|
setIsAnimationPlaying(false);
|
|
@@ -5200,7 +5185,7 @@ var MMDVisualNovel = React10.forwardRef(
|
|
|
5200
5185
|
}
|
|
5201
5186
|
setTimeout(() => {
|
|
5202
5187
|
setIsTransitioning(false);
|
|
5203
|
-
console.log(
|
|
5188
|
+
console.log("[MMDVisualNovel] Transition to node " + nodeIndex + " completed, waiting for model load");
|
|
5204
5189
|
}, 100);
|
|
5205
5190
|
}, 300);
|
|
5206
5191
|
},
|
|
@@ -5214,7 +5199,7 @@ var MMDVisualNovel = React10.forwardRef(
|
|
|
5214
5199
|
const val = variables[key];
|
|
5215
5200
|
if (val !== void 0 && map[val] !== void 0) {
|
|
5216
5201
|
nextNodeIndex = map[val];
|
|
5217
|
-
console.log(
|
|
5202
|
+
console.log("[MMDVisualNovel] Branching: " + key + "=" + val + " -> node " + nextNodeIndex);
|
|
5218
5203
|
} else {
|
|
5219
5204
|
nextNodeIndex = defaultIndex;
|
|
5220
5205
|
}
|
|
@@ -5394,7 +5379,7 @@ var MMDVisualNovel = React10.forwardRef(
|
|
|
5394
5379
|
"div",
|
|
5395
5380
|
{
|
|
5396
5381
|
ref: containerRef,
|
|
5397
|
-
className:
|
|
5382
|
+
className: clsx.clsx("relative bg-black", className),
|
|
5398
5383
|
style: { width: "100%", height: "100%", overflow: "hidden", ...style }
|
|
5399
5384
|
},
|
|
5400
5385
|
/* @__PURE__ */ React10__default.default.createElement(
|
|
@@ -5469,7 +5454,7 @@ var MMDVisualNovel = React10.forwardRef(
|
|
|
5469
5454
|
className: "h-full w-full",
|
|
5470
5455
|
style: {
|
|
5471
5456
|
backgroundColor: activeEffect.color || "white",
|
|
5472
|
-
animation:
|
|
5457
|
+
animation: "flash-anim " + (activeEffect.duration || 500) + "ms ease-out forwards"
|
|
5473
5458
|
}
|
|
5474
5459
|
}
|
|
5475
5460
|
),
|
|
@@ -5574,7 +5559,7 @@ var MMDVisualNovel = React10.forwardRef(
|
|
|
5574
5559
|
if (choice.setVariable) {
|
|
5575
5560
|
const { key, value } = choice.setVariable;
|
|
5576
5561
|
setVariables((prev) => ({ ...prev, [key]: value }));
|
|
5577
|
-
console.log(
|
|
5562
|
+
console.log("[MMDVisualNovel] Variable set: " + key + " = " + value);
|
|
5578
5563
|
}
|
|
5579
5564
|
choice.onSelect?.();
|
|
5580
5565
|
if (choice.effect) {
|
|
@@ -5868,19 +5853,19 @@ var MusicControls = ({
|
|
|
5868
5853
|
const formatTime = (seconds) => {
|
|
5869
5854
|
const mins = Math.floor(seconds / 60);
|
|
5870
5855
|
const secs = Math.floor(seconds % 60);
|
|
5871
|
-
return
|
|
5856
|
+
return mins + ":" + secs.toString().padStart(2, "0");
|
|
5872
5857
|
};
|
|
5873
5858
|
const progress = duration > 0 ? currentTime / duration * 100 : 0;
|
|
5874
5859
|
return /* @__PURE__ */ React10__default.default.createElement(
|
|
5875
5860
|
"div",
|
|
5876
5861
|
{
|
|
5877
|
-
className:
|
|
5862
|
+
className: clsx.clsx("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)
|
|
5878
5863
|
},
|
|
5879
5864
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "relative w-full h-1.5 bg-white/20 rounded-full mb-4 cursor-pointer group/progress overflow-hidden" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
5880
5865
|
"div",
|
|
5881
5866
|
{
|
|
5882
5867
|
className: "absolute h-full bg-blue-500 rounded-full transition-all duration-300",
|
|
5883
|
-
style: { width:
|
|
5868
|
+
style: { width: progress + "%" }
|
|
5884
5869
|
}
|
|
5885
5870
|
), /* @__PURE__ */ React10__default.default.createElement(
|
|
5886
5871
|
"input",
|
|
@@ -5962,7 +5947,7 @@ var PlaylistPanel = ({
|
|
|
5962
5947
|
return /* @__PURE__ */ React10__default.default.createElement(
|
|
5963
5948
|
"div",
|
|
5964
5949
|
{
|
|
5965
|
-
className:
|
|
5950
|
+
className: clsx.clsx("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)
|
|
5966
5951
|
},
|
|
5967
5952
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex flex-col p-6 border-b border-white/10 gap-4" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React10__default.default.createElement(lucideReact.Music, { className: "w-5 h-5 text-blue-400" }), /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg font-bold text-white" }, mikuMode ? "Miku \u6B4C\u66F2\u5E93" : "\u64AD\u653E\u5217\u8868")), /* @__PURE__ */ React10__default.default.createElement(
|
|
5968
5953
|
"button",
|
|
@@ -5988,10 +5973,10 @@ var PlaylistPanel = ({
|
|
|
5988
5973
|
{
|
|
5989
5974
|
key: track.id,
|
|
5990
5975
|
onClick: () => onSelectTrack(index),
|
|
5991
|
-
className:
|
|
5976
|
+
className: clsx.clsx("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")
|
|
5992
5977
|
},
|
|
5993
5978
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "relative w-12 h-12 flex-shrink-0 rounded-lg overflow-hidden bg-gray-800" }, track.coverUrl ? /* @__PURE__ */ React10__default.default.createElement("img", { src: track.coverUrl, alt: track.title, className: "w-full h-full object-cover" }) : /* @__PURE__ */ React10__default.default.createElement("div", { className: "w-full h-full flex items-center justify-center text-white/20" }, /* @__PURE__ */ React10__default.default.createElement(lucideReact.Music, { className: "w-6 h-6" })), isActive && /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute inset-0 bg-blue-500/40 flex items-center justify-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex gap-1 items-end h-4" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "w-1 bg-white animate-music-bar-1" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: "w-1 bg-white animate-music-bar-2" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: "w-1 bg-white animate-music-bar-3" })))),
|
|
5994
|
-
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1 text-left min-w-0" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className:
|
|
5979
|
+
/* @__PURE__ */ React10__default.default.createElement("div", { className: "flex-1 text-left min-w-0" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: clsx.clsx("text-sm font-bold truncate", isActive ? "text-blue-400" : "text-white/90") }, track.title), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-xs text-white/40 truncate mt-0.5" }, track.artist || "\u672A\u77E5\u827A\u672F\u5BB6")),
|
|
5995
5980
|
!isActive && /* @__PURE__ */ React10__default.default.createElement("div", { className: "opacity-0 group-hover:opacity-100 transition-opacity" }, /* @__PURE__ */ React10__default.default.createElement(lucideReact.Play, { className: "w-4 h-4 text-white/40 fill-current" }))
|
|
5996
5981
|
);
|
|
5997
5982
|
})),
|
|
@@ -6029,7 +6014,7 @@ var PlaylistPanel = ({
|
|
|
6029
6014
|
);
|
|
6030
6015
|
};
|
|
6031
6016
|
var TrackInfo = ({ track, className = "" }) => {
|
|
6032
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
6017
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("flex flex-col items-center text-center gap-2", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "px-4 py-1.5 bg-black/40 backdrop-blur-md rounded-full border border-white/10 shadow-lg" }, /* @__PURE__ */ React10__default.default.createElement("h2", { className: "text-lg font-bold text-white tracking-wider truncate max-w-md" }, track.title)), /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-sm font-medium text-white/60 drop-shadow-md" }, track.artist || "\u672A\u77E5\u827A\u672F\u5BB6"));
|
|
6033
6018
|
};
|
|
6034
6019
|
|
|
6035
6020
|
// src/mmd/music-player/MMDMusicPlayer.tsx
|
|
@@ -6061,7 +6046,7 @@ var MMDMusicPlayer = React10.forwardRef(
|
|
|
6061
6046
|
const [isUIVisible, setIsUIVisible] = React10.useState(true);
|
|
6062
6047
|
const [isCameraManual, setIsCameraManual] = React10.useState(false);
|
|
6063
6048
|
const [searchKeyword, setSearchKeyword] = React10.useState("");
|
|
6064
|
-
const { search, searchResult, isSearching, getSongUrl } =
|
|
6049
|
+
const { search, searchResult, isSearching, getSongUrl } = chunkTDCDEBGP_js.useMusic();
|
|
6065
6050
|
React10.useEffect(() => {
|
|
6066
6051
|
if (mikuMode && tracks.length === 0) {
|
|
6067
6052
|
search({ keyword: "", miku: true });
|
|
@@ -6237,7 +6222,7 @@ var MMDMusicPlayer = React10.forwardRef(
|
|
|
6237
6222
|
"div",
|
|
6238
6223
|
{
|
|
6239
6224
|
ref: containerRef,
|
|
6240
|
-
className:
|
|
6225
|
+
className: clsx.clsx("relative bg-black group", className),
|
|
6241
6226
|
style: { width: "100%", height: "100%", overflow: "hidden", ...style },
|
|
6242
6227
|
onMouseMove: resetUITimeout,
|
|
6243
6228
|
onClick: resetUITimeout
|
|
@@ -6290,7 +6275,7 @@ var MMDMusicPlayer = React10.forwardRef(
|
|
|
6290
6275
|
/* @__PURE__ */ React10__default.default.createElement(
|
|
6291
6276
|
"div",
|
|
6292
6277
|
{
|
|
6293
|
-
className:
|
|
6278
|
+
className: clsx.clsx("absolute inset-0 z-10 flex flex-col justify-between transition-opacity duration-700 pointer-events-none", isUIVisible ? "opacity-100" : "opacity-0")
|
|
6294
6279
|
},
|
|
6295
6280
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "pt-12 px-8 flex justify-center" }, /* @__PURE__ */ React10__default.default.createElement(TrackInfo, { track: currentTrack })),
|
|
6296
6281
|
/* @__PURE__ */ React10__default.default.createElement("div", { className: "pb-12 px-8" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
@@ -6548,7 +6533,7 @@ var MMDARPlayer = React10.forwardRef(({
|
|
|
6548
6533
|
const url = URL.createObjectURL(blob);
|
|
6549
6534
|
const a = document.createElement("a");
|
|
6550
6535
|
a.href = url;
|
|
6551
|
-
a.download =
|
|
6536
|
+
a.download = "ar-photo-" + Date.now() + ".png";
|
|
6552
6537
|
document.body.appendChild(a);
|
|
6553
6538
|
a.click();
|
|
6554
6539
|
document.body.removeChild(a);
|
|
@@ -6906,7 +6891,7 @@ var MMDARPlayer = React10.forwardRef(({
|
|
|
6906
6891
|
{
|
|
6907
6892
|
onClick: placeModel,
|
|
6908
6893
|
disabled: !state.markerDetected,
|
|
6909
|
-
className:
|
|
6894
|
+
className: clsx.clsx("px-6 py-2 rounded-lg transition-colors", state.markerDetected ? "bg-green-600 hover:bg-green-700 text-white" : "bg-gray-500 text-gray-300 cursor-not-allowed")
|
|
6910
6895
|
},
|
|
6911
6896
|
"\u{1F4CD} \u653E\u7F6E\u6A21\u578B"
|
|
6912
6897
|
), state.modelPlaced && /* @__PURE__ */ React10__default.default.createElement(
|
|
@@ -6916,7 +6901,7 @@ var MMDARPlayer = React10.forwardRef(({
|
|
|
6916
6901
|
className: "px-6 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded-lg transition-colors"
|
|
6917
6902
|
},
|
|
6918
6903
|
"\u{1F4F8} \u62CD\u7167"
|
|
6919
|
-
)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute top-4 right-4 flex space-x-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
6904
|
+
)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "absolute top-4 right-4 flex space-x-2" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("w-3 h-3 rounded-full", state.cameraReady ? "bg-green-400" : "bg-red-400"), title: "\u6444\u50CF\u5934" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("w-3 h-3 rounded-full", state.arReady ? "bg-green-400" : "bg-red-400"), title: "AR" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("w-3 h-3 rounded-full", window.DeviceOrientationEvent ? "bg-purple-400" : "bg-gray-400"), title: "\u9640\u87BA\u4EEA" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("w-3 h-3 rounded-full", state.markerDetected ? "bg-blue-400" : "bg-gray-400"), title: "\u6807\u8BB0\u68C0\u6D4B" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("w-3 h-3 rounded-full", state.modelPlaced && modelRootRef.current?.visible ? "bg-green-400" : "bg-yellow-400"), title: "\u6A21\u578B" }))));
|
|
6920
6905
|
});
|
|
6921
6906
|
MMDARPlayer.displayName = "MMDARPlayer";
|
|
6922
6907
|
|
|
@@ -7074,7 +7059,7 @@ var HLSLToGLSLConverter = class {
|
|
|
7074
7059
|
*/
|
|
7075
7060
|
convertTypes(code) {
|
|
7076
7061
|
for (const [hlslType, glslType] of Object.entries(this.typeMap)) {
|
|
7077
|
-
const regex = new RegExp(
|
|
7062
|
+
const regex = new RegExp("\\b" + hlslType + "\\b", "g");
|
|
7078
7063
|
code = code.replace(regex, glslType);
|
|
7079
7064
|
}
|
|
7080
7065
|
return code;
|
|
@@ -7084,7 +7069,7 @@ var HLSLToGLSLConverter = class {
|
|
|
7084
7069
|
*/
|
|
7085
7070
|
convertFunctions(code) {
|
|
7086
7071
|
for (const [hlslFunc, glslFunc] of Object.entries(this.functionMap)) {
|
|
7087
|
-
const regex = new RegExp(
|
|
7072
|
+
const regex = new RegExp("\\b" + hlslFunc + "\\b", "g");
|
|
7088
7073
|
code = code.replace(regex, glslFunc);
|
|
7089
7074
|
}
|
|
7090
7075
|
code = this.convertMulFunction(code);
|
|
@@ -7107,7 +7092,7 @@ var HLSLToGLSLConverter = class {
|
|
|
7107
7092
|
*/
|
|
7108
7093
|
convertSemantics(code, shaderType) {
|
|
7109
7094
|
for (const [hlslSemantic, glslSemantic] of Object.entries(this.semanticMap)) {
|
|
7110
|
-
const regex = new RegExp(
|
|
7095
|
+
const regex = new RegExp("\\b" + hlslSemantic + "\\b", "g");
|
|
7111
7096
|
code = code.replace(regex, glslSemantic);
|
|
7112
7097
|
}
|
|
7113
7098
|
return code;
|
|
@@ -7189,7 +7174,7 @@ vec4 saturate(vec4 x) { return clamp(x, 0.0, 1.0); }
|
|
|
7189
7174
|
const vsFunc = effect.shaderFunctions?.find((f) => f.name === vertexShaderName);
|
|
7190
7175
|
const fsFunc = effect.shaderFunctions?.find((f) => f.name === fragmentShaderName);
|
|
7191
7176
|
if (!vsFunc || !fsFunc) {
|
|
7192
|
-
this.warnings.push(
|
|
7177
|
+
this.warnings.push("Shader functions not found: " + vertexShaderName + " or " + fragmentShaderName);
|
|
7193
7178
|
return null;
|
|
7194
7179
|
}
|
|
7195
7180
|
const vertexShader = this.convert(vsFunc.body, "vertex");
|
|
@@ -7293,7 +7278,7 @@ var FXParser = class {
|
|
|
7293
7278
|
const vsFunc = effect.shaderFunctions.find((f) => f.name === vertexShaderName);
|
|
7294
7279
|
const fsFunc = effect.shaderFunctions.find((f) => f.name === fragmentShaderName);
|
|
7295
7280
|
if (!vsFunc || !fsFunc) {
|
|
7296
|
-
warnings.push(
|
|
7281
|
+
warnings.push("Shader functions not found: " + vertexShaderName + " or " + fragmentShaderName);
|
|
7297
7282
|
return {
|
|
7298
7283
|
warnings
|
|
7299
7284
|
};
|
|
@@ -7433,8 +7418,8 @@ var FXParser = class {
|
|
|
7433
7418
|
if (match && match[1] && define.value && !define.isCommented) {
|
|
7434
7419
|
const purpose = match[1].toLowerCase();
|
|
7435
7420
|
const path = define.value.replace(/"/g, "");
|
|
7436
|
-
const widthDefine = defines.find((d) => d.name ===
|
|
7437
|
-
const heightDefine = defines.find((d) => d.name ===
|
|
7421
|
+
const widthDefine = defines.find((d) => d.name === define.name + "_X");
|
|
7422
|
+
const heightDefine = defines.find((d) => d.name === define.name + "_Y");
|
|
7438
7423
|
textures.push({
|
|
7439
7424
|
name: define.name,
|
|
7440
7425
|
path,
|
|
@@ -7626,10 +7611,7 @@ var FXParser = class {
|
|
|
7626
7611
|
extractShaderFunction(effect, functionName) {
|
|
7627
7612
|
const func = effect.shaderFunctions.find((f) => f.name === functionName);
|
|
7628
7613
|
if (!func) return null;
|
|
7629
|
-
return
|
|
7630
|
-
{
|
|
7631
|
-
${func.body}
|
|
7632
|
-
}`;
|
|
7614
|
+
return func.returnType + " " + func.name + "(" + func.parameters + ")" + (func.outputSemantic ? " : " + func.outputSemantic : "") + "\n{\n" + func.body + "\n}";
|
|
7633
7615
|
}
|
|
7634
7616
|
/**
|
|
7635
7617
|
* 获取所有启用的功能标志
|
|
@@ -7723,7 +7705,7 @@ var FXToThreeAdapter = class {
|
|
|
7723
7705
|
this.effect.parameters.forEach((param) => {
|
|
7724
7706
|
const name = param.name.toLowerCase();
|
|
7725
7707
|
if (name.startsWith("add")) {
|
|
7726
|
-
console.log(
|
|
7708
|
+
console.log('[FXToThreeAdapter] Skipping additive param "' + param.name + '" (not an absolute value)');
|
|
7727
7709
|
return;
|
|
7728
7710
|
}
|
|
7729
7711
|
if (name.includes("materialrgb") || name.includes("material")) {
|
|
@@ -7734,7 +7716,7 @@ var FXToThreeAdapter = class {
|
|
|
7734
7716
|
colorValue[1],
|
|
7735
7717
|
colorValue[2]
|
|
7736
7718
|
);
|
|
7737
|
-
console.log(
|
|
7719
|
+
console.log('[FXToThreeAdapter] Found color param "' + param.name + '":', colorValue);
|
|
7738
7720
|
}
|
|
7739
7721
|
}
|
|
7740
7722
|
if (name.includes("emissive")) {
|
|
@@ -7745,7 +7727,7 @@ var FXToThreeAdapter = class {
|
|
|
7745
7727
|
emissiveValue[1],
|
|
7746
7728
|
emissiveValue[2]
|
|
7747
7729
|
);
|
|
7748
|
-
console.log(
|
|
7730
|
+
console.log('[FXToThreeAdapter] Found emissive param "' + param.name + '":', emissiveValue);
|
|
7749
7731
|
}
|
|
7750
7732
|
}
|
|
7751
7733
|
if (name.includes("specular")) {
|
|
@@ -7756,14 +7738,14 @@ var FXToThreeAdapter = class {
|
|
|
7756
7738
|
specularValue[1],
|
|
7757
7739
|
specularValue[2]
|
|
7758
7740
|
);
|
|
7759
|
-
console.log(
|
|
7741
|
+
console.log('[FXToThreeAdapter] Found specular param "' + param.name + '":', specularValue);
|
|
7760
7742
|
}
|
|
7761
7743
|
}
|
|
7762
7744
|
if (name.includes("shininess") || name.includes("specularpower")) {
|
|
7763
7745
|
const shininessValue = this.parseFloat(param.defaultValue);
|
|
7764
7746
|
if (shininessValue !== null) {
|
|
7765
7747
|
config.shininess = shininessValue;
|
|
7766
|
-
console.log(
|
|
7748
|
+
console.log('[FXToThreeAdapter] Found shininess param "' + param.name + '":', shininessValue);
|
|
7767
7749
|
}
|
|
7768
7750
|
}
|
|
7769
7751
|
if (config.uniforms && param.defaultValue) {
|
|
@@ -7823,13 +7805,13 @@ var FXToThreeAdapter = class {
|
|
|
7823
7805
|
*/
|
|
7824
7806
|
async loadTextures() {
|
|
7825
7807
|
const promises = this.effect.textures.map(async (fxTexture) => {
|
|
7826
|
-
const path = this.basePath ?
|
|
7808
|
+
const path = this.basePath ? this.basePath + "/" + fxTexture.path : fxTexture.path;
|
|
7827
7809
|
try {
|
|
7828
7810
|
const texture = await this.loadTexture(path);
|
|
7829
7811
|
this.loadedTextures.set(fxTexture.name, texture);
|
|
7830
7812
|
return { name: fxTexture.name, texture };
|
|
7831
7813
|
} catch (error) {
|
|
7832
|
-
console.warn(
|
|
7814
|
+
console.warn("Failed to load texture " + fxTexture.name + ":", error);
|
|
7833
7815
|
return null;
|
|
7834
7816
|
}
|
|
7835
7817
|
});
|
|
@@ -7980,7 +7962,7 @@ var FXToThreeAdapter = class {
|
|
|
7980
7962
|
*/
|
|
7981
7963
|
getSummary() {
|
|
7982
7964
|
return {
|
|
7983
|
-
materialParams: this.effect.parameters.map((p) =>
|
|
7965
|
+
materialParams: this.effect.parameters.map((p) => p.type + " " + p.name),
|
|
7984
7966
|
textures: this.effect.textures.map((t) => t.path),
|
|
7985
7967
|
renderFeatures: this.effect.defines.filter((d) => !d.isCommented && (d.name.startsWith("USE_") || d.name.includes("SHADOW"))).map((d) => d.name)
|
|
7986
7968
|
};
|
|
@@ -8020,13 +8002,13 @@ var MultiFXAdapter = class {
|
|
|
8020
8002
|
try {
|
|
8021
8003
|
const fileType = this.detectFileType(config.path, config.type);
|
|
8022
8004
|
const desc = config.description || config.path;
|
|
8023
|
-
console.log(
|
|
8005
|
+
console.log("[MultiFXAdapter] Loading " + fileType.toUpperCase() + " file:", desc);
|
|
8024
8006
|
const effect = await this.parser.loadAndParse(config.path);
|
|
8025
8007
|
this.effects.set(config.path, effect);
|
|
8026
8008
|
const adapter = new FXToThreeAdapter(effect, config.texturePath || "");
|
|
8027
8009
|
this.adapters.set(config.path, adapter);
|
|
8028
8010
|
if (this.options.autoLoadTextures) {
|
|
8029
|
-
console.log(
|
|
8011
|
+
console.log("[MultiFXAdapter] Loading textures for " + fileType + ":", desc);
|
|
8030
8012
|
await adapter.loadTextures();
|
|
8031
8013
|
}
|
|
8032
8014
|
const defaultPriority = fileType === "x" ? -10 : 0;
|
|
@@ -8040,9 +8022,9 @@ var MultiFXAdapter = class {
|
|
|
8040
8022
|
});
|
|
8041
8023
|
this.configs.sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0));
|
|
8042
8024
|
const lastConfig = this.configs[this.configs.length - 1];
|
|
8043
|
-
console.log(
|
|
8044
|
-
console.log(
|
|
8045
|
-
console.log(
|
|
8025
|
+
console.log("[MultiFXAdapter] " + fileType.toUpperCase() + " loaded successfully:", desc);
|
|
8026
|
+
console.log("[MultiFXAdapter] - Priority: " + (lastConfig?.priority ?? 0));
|
|
8027
|
+
console.log("[MultiFXAdapter] - Target: " + (lastConfig?.target ?? "all"));
|
|
8046
8028
|
} catch (error) {
|
|
8047
8029
|
console.error("[MultiFXAdapter] Failed to load effect file:", config.path, error);
|
|
8048
8030
|
throw error;
|
|
@@ -8089,15 +8071,15 @@ var MultiFXAdapter = class {
|
|
|
8089
8071
|
shouldApply = config.target === target;
|
|
8090
8072
|
}
|
|
8091
8073
|
if (!shouldApply) {
|
|
8092
|
-
console.log(
|
|
8074
|
+
console.log("[MultiFXAdapter] - Skipping " + (config.description || config.path) + " (target mismatch: " + config.target + " !== " + target + ")");
|
|
8093
8075
|
return;
|
|
8094
8076
|
}
|
|
8095
8077
|
const adapter = this.adapters.get(config.path);
|
|
8096
8078
|
if (!adapter) {
|
|
8097
|
-
console.log(
|
|
8079
|
+
console.log("[MultiFXAdapter] - Skipping " + (config.description || config.path) + " (adapter not found)");
|
|
8098
8080
|
return;
|
|
8099
8081
|
}
|
|
8100
|
-
console.log(
|
|
8082
|
+
console.log("[MultiFXAdapter] \u2705 Applying " + (config.description || config.path) + " (priority: " + config.priority + ")");
|
|
8101
8083
|
const materialConfig = adapter.extractMaterialConfig();
|
|
8102
8084
|
switch (this.options.mergeStrategy) {
|
|
8103
8085
|
case "override":
|
|
@@ -8154,7 +8136,7 @@ var MultiFXAdapter = class {
|
|
|
8154
8136
|
const adapter = this.adapters.get(config.path);
|
|
8155
8137
|
if (!adapter) return;
|
|
8156
8138
|
const renderConfig = adapter.extractRenderConfig();
|
|
8157
|
-
console.log(
|
|
8139
|
+
console.log("[MultiFXAdapter] Processing " + (config.description || config.path) + ":");
|
|
8158
8140
|
console.log(" - enableShadow:", renderConfig.enableShadow);
|
|
8159
8141
|
console.log(" - shadowMapSize:", renderConfig.shadowMapSize);
|
|
8160
8142
|
console.log(" - toneMapping:", renderConfig.toneMapping);
|
|
@@ -8253,17 +8235,17 @@ var MultiFXAdapter = class {
|
|
|
8253
8235
|
return config.target === target;
|
|
8254
8236
|
});
|
|
8255
8237
|
if (!shaderConfig) {
|
|
8256
|
-
console.log(
|
|
8238
|
+
console.log("[MultiFXAdapter] No shader material config found for target: " + target);
|
|
8257
8239
|
return null;
|
|
8258
8240
|
}
|
|
8259
8241
|
const adapter = this.adapters.get(shaderConfig.path);
|
|
8260
8242
|
if (!adapter) {
|
|
8261
|
-
console.warn(
|
|
8243
|
+
console.warn("[MultiFXAdapter] Adapter not found for: " + shaderConfig.path);
|
|
8262
8244
|
return null;
|
|
8263
8245
|
}
|
|
8264
8246
|
const material = adapter.createShaderMaterial();
|
|
8265
8247
|
if (material) {
|
|
8266
|
-
console.log(
|
|
8248
|
+
console.log("[MultiFXAdapter] \u2705 Created ShaderMaterial for target: " + target + " from " + (shaderConfig.description || shaderConfig.path));
|
|
8267
8249
|
}
|
|
8268
8250
|
return material;
|
|
8269
8251
|
}
|
|
@@ -8397,11 +8379,11 @@ var MultiFXAdapter = class {
|
|
|
8397
8379
|
applyLayered(scene, renderer, modelMeshes, stageMeshes) {
|
|
8398
8380
|
console.log("[MultiFXAdapter] Applying layered effects...");
|
|
8399
8381
|
const sceneEffects = this.getSceneEffects();
|
|
8400
|
-
console.log(
|
|
8382
|
+
console.log("[MultiFXAdapter] Applying " + sceneEffects.length + " scene-level effects (.x files)");
|
|
8401
8383
|
sceneEffects.forEach((config) => {
|
|
8402
8384
|
const adapter = this.adapters.get(config.path);
|
|
8403
8385
|
if (adapter) {
|
|
8404
|
-
console.log(
|
|
8386
|
+
console.log("[MultiFXAdapter] - Applying: " + (config.description || config.path));
|
|
8405
8387
|
const renderConfig = adapter.extractRenderConfig();
|
|
8406
8388
|
if (renderConfig.toneMapping !== void 0) {
|
|
8407
8389
|
renderer.toneMapping = renderConfig.toneMapping;
|
|
@@ -8420,9 +8402,9 @@ var MultiFXAdapter = class {
|
|
|
8420
8402
|
}
|
|
8421
8403
|
});
|
|
8422
8404
|
const modelEffects = this.getModelEffects();
|
|
8423
|
-
console.log(
|
|
8405
|
+
console.log("[MultiFXAdapter] Applying " + modelEffects.length + " model-level effects (.fx files)");
|
|
8424
8406
|
modelEffects.forEach((config) => {
|
|
8425
|
-
console.log(
|
|
8407
|
+
console.log("[MultiFXAdapter] - Applying: " + (config.description || config.path));
|
|
8426
8408
|
if (modelMeshes) {
|
|
8427
8409
|
modelMeshes.forEach((mesh) => {
|
|
8428
8410
|
if (mesh instanceof THREE2__namespace.Mesh && mesh.material instanceof THREE2__namespace.MeshPhongMaterial) {
|
|
@@ -8455,16 +8437,16 @@ var MultiFXAdapter = class {
|
|
|
8455
8437
|
console.log("\n[MultiFXAdapter] Current Configuration:");
|
|
8456
8438
|
console.log("\u2550".repeat(60));
|
|
8457
8439
|
const summary = this.getSummary();
|
|
8458
|
-
console.log(
|
|
8459
|
-
console.log(
|
|
8460
|
-
console.log(
|
|
8440
|
+
console.log("Total Effects: " + summary.totalFX);
|
|
8441
|
+
console.log(" - Scene-level (.x): " + summary.xFiles);
|
|
8442
|
+
console.log(" - Model-level (.fx): " + summary.fxFiles);
|
|
8461
8443
|
console.log("\nLoad Order (by priority):");
|
|
8462
8444
|
summary.configs.forEach((config, index) => {
|
|
8463
8445
|
const icon = config.type === "x" ? "\u{1F30D}" : "\u{1F3A8}";
|
|
8464
|
-
console.log(
|
|
8465
|
-
console.log(
|
|
8446
|
+
console.log(index + 1 + ". " + icon + " [" + config.type.toUpperCase() + "] " + (config.description || config.path));
|
|
8447
|
+
console.log(" Priority: " + config.priority + ", Target: " + config.target);
|
|
8466
8448
|
if (config.features.length > 0) {
|
|
8467
|
-
console.log(
|
|
8449
|
+
console.log(" Features: " + config.features.join(", "));
|
|
8468
8450
|
}
|
|
8469
8451
|
});
|
|
8470
8452
|
console.log("\u2550".repeat(60) + "\n");
|
|
@@ -8477,7 +8459,7 @@ function exportFXToJSON(effect) {
|
|
|
8477
8459
|
}
|
|
8478
8460
|
function exportFXToMarkdown(effect) {
|
|
8479
8461
|
const lines = [];
|
|
8480
|
-
lines.push(
|
|
8462
|
+
lines.push("# " + effect.fileName);
|
|
8481
8463
|
lines.push("");
|
|
8482
8464
|
if (effect.defines.length > 0) {
|
|
8483
8465
|
lines.push("## \u5B8F\u5B9A\u4E49 (Defines)");
|
|
@@ -8486,7 +8468,7 @@ function exportFXToMarkdown(effect) {
|
|
|
8486
8468
|
lines.push("|------|-----|------|------|");
|
|
8487
8469
|
effect.defines.forEach((d) => {
|
|
8488
8470
|
const status = d.isCommented ? "\u7981\u7528" : "\u542F\u7528";
|
|
8489
|
-
lines.push(
|
|
8471
|
+
lines.push("| " + d.name + " | " + (d.value || "-") + " | " + status + " | " + (d.comment || "-") + " |");
|
|
8490
8472
|
});
|
|
8491
8473
|
lines.push("");
|
|
8492
8474
|
}
|
|
@@ -8496,8 +8478,8 @@ function exportFXToMarkdown(effect) {
|
|
|
8496
8478
|
lines.push("| \u540D\u79F0 | \u8DEF\u5F84 | \u5C3A\u5BF8 | \u7528\u9014 |");
|
|
8497
8479
|
lines.push("|------|------|------|------|");
|
|
8498
8480
|
effect.textures.forEach((t) => {
|
|
8499
|
-
const size = t.width && t.height ?
|
|
8500
|
-
lines.push(
|
|
8481
|
+
const size = t.width && t.height ? t.width + "x" + t.height : "-";
|
|
8482
|
+
lines.push("| " + t.name + " | " + t.path + " | " + size + " | " + (t.purpose || "-") + " |");
|
|
8501
8483
|
});
|
|
8502
8484
|
lines.push("");
|
|
8503
8485
|
}
|
|
@@ -8507,7 +8489,7 @@ function exportFXToMarkdown(effect) {
|
|
|
8507
8489
|
lines.push("| \u540D\u79F0 | \u7C7B\u578B | \u8BED\u4E49 | \u9ED8\u8BA4\u503C |");
|
|
8508
8490
|
lines.push("|------|------|------|--------|");
|
|
8509
8491
|
effect.parameters.forEach((p) => {
|
|
8510
|
-
lines.push(
|
|
8492
|
+
lines.push("| " + p.name + " | " + p.type + " | " + (p.semantic || "-") + " | " + (p.defaultValue || "-") + " |");
|
|
8511
8493
|
});
|
|
8512
8494
|
lines.push("");
|
|
8513
8495
|
}
|
|
@@ -8517,7 +8499,7 @@ function exportFXToMarkdown(effect) {
|
|
|
8517
8499
|
lines.push("| \u53C2\u6570 | \u5BF9\u8C61\u540D | \u63A7\u5236\u9879 |");
|
|
8518
8500
|
lines.push("|------|--------|--------|");
|
|
8519
8501
|
effect.controllers.forEach((c) => {
|
|
8520
|
-
lines.push(
|
|
8502
|
+
lines.push("| " + c.name + " | " + c.objectName + " | " + c.itemName + " |");
|
|
8521
8503
|
});
|
|
8522
8504
|
lines.push("");
|
|
8523
8505
|
}
|
|
@@ -8525,7 +8507,7 @@ function exportFXToMarkdown(effect) {
|
|
|
8525
8507
|
lines.push("## \u5305\u542B\u6587\u4EF6 (Includes)");
|
|
8526
8508
|
lines.push("");
|
|
8527
8509
|
effect.includes.forEach((inc) => {
|
|
8528
|
-
lines.push(
|
|
8510
|
+
lines.push("- " + inc);
|
|
8529
8511
|
});
|
|
8530
8512
|
lines.push("");
|
|
8531
8513
|
}
|
|
@@ -8533,15 +8515,15 @@ function exportFXToMarkdown(effect) {
|
|
|
8533
8515
|
lines.push("## \u6280\u672F (Techniques)");
|
|
8534
8516
|
lines.push("");
|
|
8535
8517
|
effect.techniques.forEach((t) => {
|
|
8536
|
-
lines.push(
|
|
8518
|
+
lines.push("### " + t.name);
|
|
8537
8519
|
lines.push("");
|
|
8538
8520
|
t.passes.forEach((p, idx) => {
|
|
8539
|
-
lines.push(
|
|
8521
|
+
lines.push("#### Pass " + (p.name || idx + 1));
|
|
8540
8522
|
if (p.vertexShader) {
|
|
8541
|
-
lines.push(
|
|
8523
|
+
lines.push("- **\u9876\u70B9\u7740\u8272\u5668**: " + p.vertexShader.function + " (" + p.vertexShader.profile + ")");
|
|
8542
8524
|
}
|
|
8543
8525
|
if (p.pixelShader) {
|
|
8544
|
-
lines.push(
|
|
8526
|
+
lines.push("- **\u50CF\u7D20\u7740\u8272\u5668**: " + p.pixelShader.function + " (" + p.pixelShader.profile + ")");
|
|
8545
8527
|
}
|
|
8546
8528
|
lines.push("");
|
|
8547
8529
|
});
|
|
@@ -8647,7 +8629,7 @@ function getConfigSummaryText(effect) {
|
|
|
8647
8629
|
if (hasFeature(effect, "USE_ROUNDNORMAL")) {
|
|
8648
8630
|
features.push("RoundNormal");
|
|
8649
8631
|
}
|
|
8650
|
-
return features.length > 0 ?
|
|
8632
|
+
return features.length > 0 ? "\u542F\u7528\u529F\u80FD: " + features.join(", ") : "\u65E0\u7279\u6B8A\u529F\u80FD\u542F\u7528";
|
|
8651
8633
|
}
|
|
8652
8634
|
function extractTexturePaths(effect) {
|
|
8653
8635
|
return effect.textures.map((t) => t.path);
|
|
@@ -8660,14 +8642,14 @@ function validateFXEffect(effect) {
|
|
|
8660
8642
|
}
|
|
8661
8643
|
effect.textures.forEach((texture) => {
|
|
8662
8644
|
if (!texture.path || texture.path === "") {
|
|
8663
|
-
errors.push(
|
|
8645
|
+
errors.push("\u7EB9\u7406 " + texture.name + " \u7F3A\u5C11\u8DEF\u5F84");
|
|
8664
8646
|
}
|
|
8665
8647
|
});
|
|
8666
8648
|
effect.parameters.forEach((param) => {
|
|
8667
8649
|
if (param.type.includes("float") && param.defaultValue) {
|
|
8668
8650
|
const floatRegex = /^float[234]?\s*\(/;
|
|
8669
8651
|
if (!floatRegex.test(param.defaultValue) && isNaN(parseFloat(param.defaultValue))) {
|
|
8670
|
-
warnings.push(
|
|
8652
|
+
warnings.push("\u53C2\u6570 " + param.name + " \u7684\u9ED8\u8BA4\u503C\u53EF\u80FD\u4E0D\u5408\u6CD5: " + param.defaultValue);
|
|
8671
8653
|
}
|
|
8672
8654
|
}
|
|
8673
8655
|
});
|
|
@@ -8719,23 +8701,23 @@ var FXViewer = ({
|
|
|
8719
8701
|
parse();
|
|
8720
8702
|
}, [source, isContent, fileName, onParsed, onError]);
|
|
8721
8703
|
if (loading) {
|
|
8722
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
8704
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("font-sans bg-white border border-gray-300 rounded-lg overflow-hidden p-8 text-center", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xl text-gray-600" }, "\u52A0\u8F7D\u4E2D..."));
|
|
8723
8705
|
}
|
|
8724
8706
|
if (error || !effect || !summary) {
|
|
8725
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
8707
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("font-sans bg-white border border-gray-300 rounded-lg overflow-hidden p-8 text-center", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-red-700" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "m-0 mb-4 text-2xl" }, "\u274C \u89E3\u6790\u9519\u8BEF"), /* @__PURE__ */ React10__default.default.createElement("p", null, error || "\u672A\u77E5\u9519\u8BEF")));
|
|
8726
8708
|
}
|
|
8727
8709
|
const validation = validateFXEffect(effect);
|
|
8728
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
8710
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("font-sans bg-white border border-gray-300 rounded-lg overflow-hidden", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 md:p-6 bg-gradient-to-br from-indigo-500 to-purple-600 text-white" }, /* @__PURE__ */ React10__default.default.createElement("h2", { className: "m-0 mb-2 text-xl md:text-2xl font-semibold" }, effect.fileName), /* @__PURE__ */ React10__default.default.createElement("p", { className: "m-0 text-sm opacity-90" }, getConfigSummaryText(effect))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex bg-gray-100 border-b border-gray-300 overflow-x-auto" }, /* @__PURE__ */ React10__default.default.createElement(
|
|
8729
8711
|
"button",
|
|
8730
8712
|
{
|
|
8731
|
-
className:
|
|
8713
|
+
className: clsx.clsx("flex-1 min-w-[80px] md:min-w-[100px] px-3 md:px-4 py-2 md:py-3 border-none bg-transparent text-gray-600 text-xs md:text-sm cursor-pointer transition-all border-b-2", activeTab === "summary" ? "bg-white text-indigo-500 border-b-indigo-500 font-semibold" : "border-b-transparent hover:bg-gray-200 hover:text-gray-800"),
|
|
8732
8714
|
onClick: () => setActiveTab("summary")
|
|
8733
8715
|
},
|
|
8734
8716
|
"\u6458\u8981"
|
|
8735
8717
|
), /* @__PURE__ */ React10__default.default.createElement(
|
|
8736
8718
|
"button",
|
|
8737
8719
|
{
|
|
8738
|
-
className:
|
|
8720
|
+
className: clsx.clsx("flex-1 min-w-[80px] md:min-w-[100px] px-3 md:px-4 py-2 md:py-3 border-none bg-transparent text-gray-600 text-xs md:text-sm cursor-pointer transition-all border-b-2", activeTab === "defines" ? "bg-white text-indigo-500 border-b-indigo-500 font-semibold" : "border-b-transparent hover:bg-gray-200 hover:text-gray-800"),
|
|
8739
8721
|
onClick: () => setActiveTab("defines")
|
|
8740
8722
|
},
|
|
8741
8723
|
"\u5B8F\u5B9A\u4E49 (",
|
|
@@ -8744,7 +8726,7 @@ var FXViewer = ({
|
|
|
8744
8726
|
), /* @__PURE__ */ React10__default.default.createElement(
|
|
8745
8727
|
"button",
|
|
8746
8728
|
{
|
|
8747
|
-
className:
|
|
8729
|
+
className: clsx.clsx("flex-1 min-w-[80px] md:min-w-[100px] px-3 md:px-4 py-2 md:py-3 border-none bg-transparent text-gray-600 text-xs md:text-sm cursor-pointer transition-all border-b-2", activeTab === "textures" ? "bg-white text-indigo-500 border-b-indigo-500 font-semibold" : "border-b-transparent hover:bg-gray-200 hover:text-gray-800"),
|
|
8748
8730
|
onClick: () => setActiveTab("textures")
|
|
8749
8731
|
},
|
|
8750
8732
|
"\u7EB9\u7406 (",
|
|
@@ -8753,7 +8735,7 @@ var FXViewer = ({
|
|
|
8753
8735
|
), /* @__PURE__ */ React10__default.default.createElement(
|
|
8754
8736
|
"button",
|
|
8755
8737
|
{
|
|
8756
|
-
className:
|
|
8738
|
+
className: clsx.clsx("flex-1 min-w-[80px] md:min-w-[100px] px-3 md:px-4 py-2 md:py-3 border-none bg-transparent text-gray-600 text-xs md:text-sm cursor-pointer transition-all border-b-2", activeTab === "parameters" ? "bg-white text-indigo-500 border-b-indigo-500 font-semibold" : "border-b-transparent hover:bg-gray-200 hover:text-gray-800"),
|
|
8757
8739
|
onClick: () => setActiveTab("parameters")
|
|
8758
8740
|
},
|
|
8759
8741
|
"\u53C2\u6570 (",
|
|
@@ -8762,17 +8744,17 @@ var FXViewer = ({
|
|
|
8762
8744
|
), /* @__PURE__ */ React10__default.default.createElement(
|
|
8763
8745
|
"button",
|
|
8764
8746
|
{
|
|
8765
|
-
className:
|
|
8747
|
+
className: clsx.clsx("flex-1 min-w-[80px] md:min-w-[100px] px-3 md:px-4 py-2 md:py-3 border-none bg-transparent text-gray-600 text-xs md:text-sm cursor-pointer transition-all border-b-2", activeTab === "validation" ? "bg-white text-indigo-500 border-b-indigo-500 font-semibold" : "border-b-transparent hover:bg-gray-200 hover:text-gray-800"),
|
|
8766
8748
|
onClick: () => setActiveTab("validation")
|
|
8767
8749
|
},
|
|
8768
8750
|
"\u9A8C\u8BC1"
|
|
8769
8751
|
)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-4 md:p-6 max-h-[500px] md:max-h-[600px] overflow-y-auto" }, activeTab === "summary" && /* @__PURE__ */ React10__default.default.createElement(SummaryTab, { summary, effect }), activeTab === "defines" && /* @__PURE__ */ React10__default.default.createElement(DefinesTab, { effect }), activeTab === "textures" && /* @__PURE__ */ React10__default.default.createElement(TexturesTab, { effect }), activeTab === "parameters" && /* @__PURE__ */ React10__default.default.createElement(ParametersTab, { effect }), activeTab === "validation" && /* @__PURE__ */ React10__default.default.createElement(ValidationTab, { validation })));
|
|
8770
8752
|
};
|
|
8771
|
-
var SummaryTab = ({ summary, effect }) => /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-4 mb-8" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6 bg-gradient-to-br from-gray-100 to-blue-100 rounded-lg text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-gray-600 mb-2 uppercase tracking-wide" }, "\u5B8F\u5B9A\u4E49"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-3xl font-bold text-gray-800" }, summary.defineCount)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6 bg-gradient-to-br from-gray-100 to-blue-100 rounded-lg text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-gray-600 mb-2 uppercase tracking-wide" }, "\u53C2\u6570"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-3xl font-bold text-gray-800" }, summary.parameterCount)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6 bg-gradient-to-br from-gray-100 to-blue-100 rounded-lg text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-gray-600 mb-2 uppercase tracking-wide" }, "\u7EB9\u7406"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-3xl font-bold text-gray-800" }, summary.textureCount)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6 bg-gradient-to-br from-gray-100 to-blue-100 rounded-lg text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-gray-600 mb-2 uppercase tracking-wide" }, "Technique"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-3xl font-bold text-gray-800" }, summary.techniqueCount))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-8" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg m-0 mb-4 text-gray-800 border-b-2 border-indigo-500 pb-2" }, "\u529F\u80FD\u7279\u6027"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex flex-wrap gap-3" }, /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
8772
|
-
var DefinesTab = ({ effect }) => /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("table", { className: "w-full border-collapse text-xs md:text-sm" }, /* @__PURE__ */ React10__default.default.createElement("thead", { className: "bg-gray-100 border-b-2 border-gray-300" }, /* @__PURE__ */ React10__default.default.createElement("tr", null, /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u540D\u79F0"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u503C"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u72B6\u6001"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u884C\u53F7"))), /* @__PURE__ */ React10__default.default.createElement("tbody", null, effect.defines.map((define, idx) => /* @__PURE__ */ React10__default.default.createElement("tr", { key: idx, className:
|
|
8773
|
-
var TexturesTab = ({ effect }) => /* @__PURE__ */ React10__default.default.createElement("div", null, effect.textures.length === 0 ? /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-center text-gray-500 py-8 italic" }, "\u672A\u627E\u5230\u7EB9\u7406\u5B9A\u4E49") : /* @__PURE__ */ React10__default.default.createElement("table", { className: "w-full border-collapse text-xs md:text-sm" }, /* @__PURE__ */ React10__default.default.createElement("thead", { className: "bg-gray-100 border-b-2 border-gray-300" }, /* @__PURE__ */ React10__default.default.createElement("tr", null, /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u540D\u79F0"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u8DEF\u5F84"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u5C3A\u5BF8"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u7528\u9014"))), /* @__PURE__ */ React10__default.default.createElement("tbody", null, effect.textures.map((texture, idx) => /* @__PURE__ */ React10__default.default.createElement("tr", { key: idx, className: "hover:bg-gray-50" }, /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("code", { className: "bg-gray-100 px-2 py-1 rounded text-xs font-mono" }, texture.name)), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, texture.path), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, texture.width && texture.height ?
|
|
8753
|
+
var SummaryTab = ({ summary, effect }) => /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("div", { className: "grid grid-cols-2 md:grid-cols-[repeat(auto-fit,minmax(150px,1fr))] gap-4 mb-8" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6 bg-gradient-to-br from-gray-100 to-blue-100 rounded-lg text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-gray-600 mb-2 uppercase tracking-wide" }, "\u5B8F\u5B9A\u4E49"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-3xl font-bold text-gray-800" }, summary.defineCount)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6 bg-gradient-to-br from-gray-100 to-blue-100 rounded-lg text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-gray-600 mb-2 uppercase tracking-wide" }, "\u53C2\u6570"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-3xl font-bold text-gray-800" }, summary.parameterCount)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6 bg-gradient-to-br from-gray-100 to-blue-100 rounded-lg text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-gray-600 mb-2 uppercase tracking-wide" }, "\u7EB9\u7406"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-3xl font-bold text-gray-800" }, summary.textureCount)), /* @__PURE__ */ React10__default.default.createElement("div", { className: "p-6 bg-gradient-to-br from-gray-100 to-blue-100 rounded-lg text-center" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-xs text-gray-600 mb-2 uppercase tracking-wide" }, "Technique"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "text-3xl font-bold text-gray-800" }, summary.techniqueCount))), /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-8" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg m-0 mb-4 text-gray-800 border-b-2 border-indigo-500 pb-2" }, "\u529F\u80FD\u7279\u6027"), /* @__PURE__ */ React10__default.default.createElement("div", { className: "flex flex-wrap gap-3" }, /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("px-4 py-2 rounded-full text-sm font-medium", summary.hasLocalShadow ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800") }, summary.hasLocalShadow ? "\u2713" : "\u2717", " LocalShadow"), /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("px-4 py-2 rounded-full text-sm font-medium", summary.hasExcellentShadow ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800") }, summary.hasExcellentShadow ? "\u2713" : "\u2717", " ExcellentShadow"), /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("px-4 py-2 rounded-full text-sm font-medium", summary.hasHgShadow ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800") }, summary.hasHgShadow ? "\u2713" : "\u2717", " HgShadow"))), effect.includes.length > 0 && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-8" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg m-0 mb-4 text-gray-800 border-b-2 border-indigo-500 pb-2" }, "\u5305\u542B\u6587\u4EF6"), /* @__PURE__ */ React10__default.default.createElement("ul", { className: "list-none p-0 m-0" }, effect.includes.map((inc, idx) => /* @__PURE__ */ React10__default.default.createElement("li", { key: idx, className: "py-2 border-b border-gray-200 last:border-b-0" }, /* @__PURE__ */ React10__default.default.createElement("code", { className: "bg-gray-100 px-2 py-1 rounded text-xs font-mono" }, inc))))), effect.controllers.length > 0 && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mt-8" }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "text-lg m-0 mb-4 text-gray-800 border-b-2 border-indigo-500 pb-2" }, "\u63A7\u5236\u5668"), /* @__PURE__ */ React10__default.default.createElement("ul", { className: "list-none p-0 m-0" }, effect.controllers.map((ctrl, idx) => /* @__PURE__ */ React10__default.default.createElement("li", { key: idx, className: "py-2 border-b border-gray-200 last:border-b-0" }, /* @__PURE__ */ React10__default.default.createElement("strong", null, ctrl.name), ": ", ctrl.objectName, " / ", ctrl.itemName)))));
|
|
8754
|
+
var DefinesTab = ({ effect }) => /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("table", { className: "w-full border-collapse text-xs md:text-sm" }, /* @__PURE__ */ React10__default.default.createElement("thead", { className: "bg-gray-100 border-b-2 border-gray-300" }, /* @__PURE__ */ React10__default.default.createElement("tr", null, /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u540D\u79F0"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u503C"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u72B6\u6001"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u884C\u53F7"))), /* @__PURE__ */ React10__default.default.createElement("tbody", null, effect.defines.map((define, idx) => /* @__PURE__ */ React10__default.default.createElement("tr", { key: idx, className: clsx.clsx("hover:bg-gray-50", define.isCommented ? "opacity-50" : "") }, /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("code", { className: "bg-gray-100 px-2 py-1 rounded text-xs font-mono" }, define.name)), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, define.value || "-"), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("span", { className: clsx.clsx("inline-block px-3 py-1 rounded-xl text-xs font-medium", define.isCommented ? "bg-red-100 text-red-800" : "bg-green-100 text-green-800") }, define.isCommented ? "\u7981\u7528" : "\u542F\u7528")), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, define.lineNumber))))));
|
|
8755
|
+
var TexturesTab = ({ effect }) => /* @__PURE__ */ React10__default.default.createElement("div", null, effect.textures.length === 0 ? /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-center text-gray-500 py-8 italic" }, "\u672A\u627E\u5230\u7EB9\u7406\u5B9A\u4E49") : /* @__PURE__ */ React10__default.default.createElement("table", { className: "w-full border-collapse text-xs md:text-sm" }, /* @__PURE__ */ React10__default.default.createElement("thead", { className: "bg-gray-100 border-b-2 border-gray-300" }, /* @__PURE__ */ React10__default.default.createElement("tr", null, /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u540D\u79F0"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u8DEF\u5F84"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u5C3A\u5BF8"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u7528\u9014"))), /* @__PURE__ */ React10__default.default.createElement("tbody", null, effect.textures.map((texture, idx) => /* @__PURE__ */ React10__default.default.createElement("tr", { key: idx, className: "hover:bg-gray-50" }, /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("code", { className: "bg-gray-100 px-2 py-1 rounded text-xs font-mono" }, texture.name)), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, texture.path), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, texture.width && texture.height ? texture.width + "\xD7" + texture.height : "-"), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, texture.purpose || "-"))))));
|
|
8774
8756
|
var ParametersTab = ({ effect }) => /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("table", { className: "w-full border-collapse text-xs md:text-sm" }, /* @__PURE__ */ React10__default.default.createElement("thead", { className: "bg-gray-100 border-b-2 border-gray-300" }, /* @__PURE__ */ React10__default.default.createElement("tr", null, /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u540D\u79F0"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u7C7B\u578B"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u8BED\u4E49"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u9ED8\u8BA4\u503C"), /* @__PURE__ */ React10__default.default.createElement("th", { className: "px-2 md:px-3 py-2 md:py-3 text-left font-semibold text-gray-800" }, "\u884C\u53F7"))), /* @__PURE__ */ React10__default.default.createElement("tbody", null, effect.parameters.map((param, idx) => /* @__PURE__ */ React10__default.default.createElement("tr", { key: idx, className: "hover:bg-gray-50" }, /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("code", { className: "bg-gray-100 px-2 py-1 rounded text-xs font-mono" }, param.name)), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, /* @__PURE__ */ React10__default.default.createElement("code", { className: "bg-gray-100 px-2 py-1 rounded text-xs font-mono" }, param.type)), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, param.semantic || "-"), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, param.defaultValue || "-"), /* @__PURE__ */ React10__default.default.createElement("td", { className: "px-2 md:px-3 py-2 md:py-3 border-b border-gray-200" }, param.lineNumber))))));
|
|
8775
|
-
var ValidationTab = ({ validation }) => /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
8757
|
+
var ValidationTab = ({ validation }) => /* @__PURE__ */ React10__default.default.createElement("div", null, /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("p-6 rounded-lg mb-6 text-center", validation.isValid ? "bg-green-100 text-green-800" : "bg-red-100 text-red-800") }, /* @__PURE__ */ React10__default.default.createElement("h3", { className: "m-0 text-xl" }, validation.isValid ? "\u2713 \u9A8C\u8BC1\u901A\u8FC7" : "\u2717 \u9A8C\u8BC1\u5931\u8D25")), validation.errors.length > 0 && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "m-0 mb-3 text-base text-gray-800" }, "\u9519\u8BEF (", validation.errors.length, ")"), /* @__PURE__ */ React10__default.default.createElement("ul", { className: "list-none p-0 m-0" }, validation.errors.map((error, idx) => /* @__PURE__ */ React10__default.default.createElement("li", { key: idx, className: "p-3 mb-2 bg-red-100 text-red-800 rounded border-l-4 border-red-800" }, error)))), validation.warnings.length > 0 && /* @__PURE__ */ React10__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React10__default.default.createElement("h4", { className: "m-0 mb-3 text-base text-gray-800" }, "\u8B66\u544A (", validation.warnings.length, ")"), /* @__PURE__ */ React10__default.default.createElement("ul", { className: "list-none p-0 m-0" }, validation.warnings.map((warning, idx) => /* @__PURE__ */ React10__default.default.createElement("li", { key: idx, className: "p-3 mb-2 bg-orange-100 text-orange-700 rounded border-l-4 border-orange-700" }, warning)))), validation.isValid && validation.warnings.length === 0 && /* @__PURE__ */ React10__default.default.createElement("p", { className: "text-center text-green-800 py-8 text-lg" }, "FX\u6587\u4EF6\u7ED3\u6784\u5B8C\u6574\uFF0C\u6CA1\u6709\u53D1\u73B0\u95EE\u9898\u3002"));
|
|
8776
8758
|
FXViewer.displayName = "FXViewer";
|
|
8777
8759
|
var FXThreePreview = ({
|
|
8778
8760
|
effect,
|
|
@@ -8898,12 +8880,12 @@ var FXThreePreview = ({
|
|
|
8898
8880
|
};
|
|
8899
8881
|
}, [effect, texturePath, objectType]);
|
|
8900
8882
|
if (loading) {
|
|
8901
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
8883
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("fx-three-preview loading", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "preview-loading" }, "\u52A0\u8F7D\u4E2D..."));
|
|
8902
8884
|
}
|
|
8903
8885
|
if (error) {
|
|
8904
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
8886
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("fx-three-preview error", className) }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "preview-error" }, /* @__PURE__ */ React10__default.default.createElement("h3", null, "\u274C \u6E32\u67D3\u5931\u8D25"), /* @__PURE__ */ React10__default.default.createElement("p", null, error)));
|
|
8905
8887
|
}
|
|
8906
|
-
return /* @__PURE__ */ React10__default.default.createElement("div", { className:
|
|
8888
|
+
return /* @__PURE__ */ React10__default.default.createElement("div", { className: clsx.clsx("fx-three-preview", className) }, /* @__PURE__ */ React10__default.default.createElement(
|
|
8907
8889
|
"div",
|
|
8908
8890
|
{
|
|
8909
8891
|
ref: containerRef,
|
|
@@ -9017,7 +8999,7 @@ FXThreePreview.displayName = "FXThreePreview";
|
|
|
9017
8999
|
|
|
9018
9000
|
Object.defineProperty(exports, "PMXParser", {
|
|
9019
9001
|
enumerable: true,
|
|
9020
|
-
get: function () { return
|
|
9002
|
+
get: function () { return chunkUIFFDRTE_js.PMXParser; }
|
|
9021
9003
|
});
|
|
9022
9004
|
exports.ARMode = ARMode;
|
|
9023
9005
|
exports.CheerButton = CheerButton;
|