sa2kit 1.6.30 → 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.
Files changed (237) hide show
  1. package/dist/AliyunOSSProvider-P6TOVKMM.mjs +6 -0
  2. package/dist/{AliyunOSSProvider-KJYRIZES.mjs.map → AliyunOSSProvider-P6TOVKMM.mjs.map} +1 -1
  3. package/dist/AliyunOSSProvider-Z5BRBCG6.js +15 -0
  4. package/dist/{AliyunOSSProvider-FWAKUB2T.js.map → AliyunOSSProvider-Z5BRBCG6.js.map} +1 -1
  5. package/dist/ConfigService-3DIC6C3Q.js +21 -0
  6. package/dist/{ConfigService-7MEZXKJ5.js.map → ConfigService-3DIC6C3Q.js.map} +1 -1
  7. package/dist/ConfigService-V6ZK273Z.mjs +4 -0
  8. package/dist/{ConfigService-BV57YYFW.mjs.map → ConfigService-V6ZK273Z.mjs.map} +1 -1
  9. package/dist/LocalStorageProvider-3RVPCQB3.mjs +6 -0
  10. package/dist/{LocalStorageProvider-RTPMUOZ2.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
  11. package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
  12. package/dist/{LocalStorageProvider-XSRCUXOU.js.map → LocalStorageProvider-PP7MA5OT.js.map} +1 -1
  13. package/dist/PMXParser-2VTA737I.js +13 -0
  14. package/dist/{PMXParser-YBS3B6HM.js.map → PMXParser-2VTA737I.js.map} +1 -1
  15. package/dist/PMXParser-RNVQL76A.mjs +4 -0
  16. package/dist/{PMXParser-L6IWHL4I.mjs.map → PMXParser-RNVQL76A.mjs.map} +1 -1
  17. package/dist/analytics/index.js +46 -45
  18. package/dist/analytics/index.js.map +1 -1
  19. package/dist/analytics/index.mjs +45 -44
  20. package/dist/analytics/index.mjs.map +1 -1
  21. package/dist/analytics/server/index.js +4 -4
  22. package/dist/analytics/server/index.js.map +1 -1
  23. package/dist/analytics/server/index.mjs +4 -4
  24. package/dist/analytics/server/index.mjs.map +1 -1
  25. package/dist/api/index.js +5 -5
  26. package/dist/api/index.js.map +1 -1
  27. package/dist/api/index.mjs +5 -5
  28. package/dist/api/index.mjs.map +1 -1
  29. package/dist/audioDetection/index.js +17 -16
  30. package/dist/audioDetection/index.js.map +1 -1
  31. package/dist/audioDetection/index.mjs +17 -16
  32. package/dist/audioDetection/index.mjs.map +1 -1
  33. package/dist/auth/client/index.js +4 -4
  34. package/dist/auth/client/index.mjs +1 -1
  35. package/dist/auth/components/index.js +3 -3
  36. package/dist/auth/components/index.js.map +1 -1
  37. package/dist/auth/components/index.mjs +3 -3
  38. package/dist/auth/components/index.mjs.map +1 -1
  39. package/dist/auth/index.js +29 -29
  40. package/dist/auth/index.mjs +5 -5
  41. package/dist/auth/middleware/index.js +3 -3
  42. package/dist/auth/middleware/index.mjs +2 -2
  43. package/dist/auth/routes/index.js +14 -14
  44. package/dist/auth/routes/index.mjs +2 -2
  45. package/dist/auth/services/index.js +7 -7
  46. package/dist/auth/services/index.mjs +1 -1
  47. package/dist/calendar/index.js +146 -182
  48. package/dist/calendar/index.js.map +1 -1
  49. package/dist/calendar/index.mjs +139 -175
  50. package/dist/calendar/index.mjs.map +1 -1
  51. package/dist/calendar/routes/index.js +1 -1
  52. package/dist/calendar/routes/index.js.map +1 -1
  53. package/dist/calendar/routes/index.mjs +1 -1
  54. package/dist/calendar/routes/index.mjs.map +1 -1
  55. package/dist/{chunk-5YQ5B7IZ.js → chunk-24HGREE6.js} +5 -5
  56. package/dist/{chunk-5YQ5B7IZ.js.map → chunk-24HGREE6.js.map} +1 -1
  57. package/dist/{chunk-6PRFP5EG.js → chunk-25OFOKNF.js} +6 -6
  58. package/dist/chunk-25OFOKNF.js.map +1 -0
  59. package/dist/{chunk-KQGP6BTS.mjs → chunk-3DXPQ4YV.mjs} +6 -6
  60. package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
  61. package/dist/{chunk-3BGPZN4X.mjs → chunk-3NHAT7D4.mjs} +12 -12
  62. package/dist/chunk-3NHAT7D4.mjs.map +1 -0
  63. package/dist/{chunk-MW4BCIZC.mjs → chunk-4HC6M7FK.mjs} +3 -3
  64. package/dist/chunk-4HC6M7FK.mjs.map +1 -0
  65. package/dist/{chunk-ESRCX5TQ.mjs → chunk-52TN2QSS.mjs} +3 -3
  66. package/dist/{chunk-ESRCX5TQ.mjs.map → chunk-52TN2QSS.mjs.map} +1 -1
  67. package/dist/{chunk-DW2ZTOCV.js → chunk-5A7ERLKK.js} +105 -106
  68. package/dist/chunk-5A7ERLKK.js.map +1 -0
  69. package/dist/{chunk-CNTILN5J.mjs → chunk-5YQ62BKX.mjs} +20 -19
  70. package/dist/chunk-5YQ62BKX.mjs.map +1 -0
  71. package/dist/{chunk-6W5BMXJG.js → chunk-6OWNMJKG.js} +4 -4
  72. package/dist/{chunk-6W5BMXJG.js.map → chunk-6OWNMJKG.js.map} +1 -1
  73. package/dist/{chunk-TV3VKRJK.mjs → chunk-77M5AQG3.mjs} +37 -37
  74. package/dist/chunk-77M5AQG3.mjs.map +1 -0
  75. package/dist/{chunk-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
  76. package/dist/chunk-7VRT55ZD.js.map +1 -0
  77. package/dist/{chunk-LX4XX6W7.js → chunk-C54W2CMK.js} +16 -16
  78. package/dist/chunk-C54W2CMK.js.map +1 -0
  79. package/dist/{chunk-3WOAPLEG.mjs → chunk-EB4NR623.mjs} +27 -26
  80. package/dist/chunk-EB4NR623.mjs.map +1 -0
  81. package/dist/{chunk-CD77U7LZ.js → chunk-GBPLX42J.js} +9 -9
  82. package/dist/chunk-GBPLX42J.js.map +1 -0
  83. package/dist/{chunk-TFQF2HDO.mjs → chunk-HDEOCX2L.mjs} +12 -12
  84. package/dist/chunk-HDEOCX2L.mjs.map +1 -0
  85. package/dist/{chunk-LFG6FPM5.mjs → chunk-KIP2CERU.mjs} +37 -38
  86. package/dist/chunk-KIP2CERU.mjs.map +1 -0
  87. package/dist/{chunk-6YKMCPQI.mjs → chunk-KZKIH4AS.mjs} +4 -4
  88. package/dist/chunk-KZKIH4AS.mjs.map +1 -0
  89. package/dist/{chunk-6MQUBPKB.mjs → chunk-LJ4CCSSY.mjs} +3 -3
  90. package/dist/{chunk-6MQUBPKB.mjs.map → chunk-LJ4CCSSY.mjs.map} +1 -1
  91. package/dist/{chunk-TOC5FSHP.js → chunk-NJ2SNXBJ.js} +12 -12
  92. package/dist/chunk-NJ2SNXBJ.js.map +1 -0
  93. package/dist/{chunk-OCR5DS4C.mjs → chunk-PE5EAHZK.mjs} +3 -3
  94. package/dist/chunk-PE5EAHZK.mjs.map +1 -0
  95. package/dist/{chunk-LZHMNOED.js → chunk-Q5EDCKQA.js} +26 -26
  96. package/dist/chunk-Q5EDCKQA.js.map +1 -0
  97. package/dist/{chunk-CLKKZSPZ.js → chunk-RBKGYWME.js} +20 -19
  98. package/dist/chunk-RBKGYWME.js.map +1 -0
  99. package/dist/{chunk-VRTRSEEH.mjs → chunk-RSJSZ7QH.mjs} +11 -11
  100. package/dist/chunk-RSJSZ7QH.mjs.map +1 -0
  101. package/dist/{chunk-E7RGBAYJ.js → chunk-TDCDEBGP.js} +30 -29
  102. package/dist/chunk-TDCDEBGP.js.map +1 -0
  103. package/dist/{chunk-T5OZHYVM.mjs → chunk-TVROG2Q4.mjs} +15 -15
  104. package/dist/chunk-TVROG2Q4.mjs.map +1 -0
  105. package/dist/{chunk-JZXJQMVE.js → chunk-UIFFDRTE.js} +11 -11
  106. package/dist/chunk-UIFFDRTE.js.map +1 -0
  107. package/dist/{chunk-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
  108. package/dist/chunk-UL6XJGUZ.js.map +1 -0
  109. package/dist/{chunk-A3UP56MS.js → chunk-WA67GZSZ.js} +3 -3
  110. package/dist/chunk-WA67GZSZ.js.map +1 -0
  111. package/dist/{chunk-OLHGZXN3.mjs → chunk-WEEXCPSE.mjs} +5 -5
  112. package/dist/chunk-WEEXCPSE.mjs.map +1 -0
  113. package/dist/{chunk-OPPF3326.js → chunk-X3UU7JHT.js} +38 -38
  114. package/dist/chunk-X3UU7JHT.js.map +1 -0
  115. package/dist/{chunk-QU5OT4DF.js → chunk-XJ7ZAGC5.js} +5 -5
  116. package/dist/chunk-XJ7ZAGC5.js.map +1 -0
  117. package/dist/{chunk-ZI25QCHD.mjs → chunk-YOTQG4NP.mjs} +25 -25
  118. package/dist/chunk-YOTQG4NP.mjs.map +1 -0
  119. package/dist/{chunk-QAT2RWAO.mjs → chunk-Z36R3P62.mjs} +7 -7
  120. package/dist/chunk-Z36R3P62.mjs.map +1 -0
  121. package/dist/{chunk-7Z5LLJ3A.js → chunk-ZWQJSZEY.js} +13 -13
  122. package/dist/chunk-ZWQJSZEY.js.map +1 -0
  123. package/dist/config/index.js +6 -6
  124. package/dist/config/index.js.map +1 -1
  125. package/dist/config/index.mjs +6 -6
  126. package/dist/config/index.mjs.map +1 -1
  127. package/dist/config/server/index.js +37 -37
  128. package/dist/config/server/index.js.map +1 -1
  129. package/dist/config/server/index.mjs +37 -37
  130. package/dist/config/server/index.mjs.map +1 -1
  131. package/dist/i18n/index.d.mts +2 -2
  132. package/dist/i18n/index.d.ts +2 -2
  133. package/dist/i18n/index.js +16 -17
  134. package/dist/i18n/index.js.map +1 -1
  135. package/dist/i18n/index.mjs +16 -17
  136. package/dist/i18n/index.mjs.map +1 -1
  137. package/dist/imageCrop/index.js +11 -10
  138. package/dist/imageCrop/index.js.map +1 -1
  139. package/dist/imageCrop/index.mjs +11 -10
  140. package/dist/imageCrop/index.mjs.map +1 -1
  141. package/dist/index.js +221 -246
  142. package/dist/index.js.map +1 -1
  143. package/dist/index.mjs +79 -104
  144. package/dist/index.mjs.map +1 -1
  145. package/dist/logger/index.js +6 -6
  146. package/dist/logger/index.mjs +1 -1
  147. package/dist/mmd/admin/index.js +11 -10
  148. package/dist/mmd/admin/index.js.map +1 -1
  149. package/dist/mmd/admin/index.mjs +11 -10
  150. package/dist/mmd/admin/index.mjs.map +1 -1
  151. package/dist/mmd/index.js +223 -241
  152. package/dist/mmd/index.js.map +1 -1
  153. package/dist/mmd/index.mjs +220 -238
  154. package/dist/mmd/index.mjs.map +1 -1
  155. package/dist/mmd/server/index.js +6 -6
  156. package/dist/mmd/server/index.js.map +1 -1
  157. package/dist/mmd/server/index.mjs +6 -6
  158. package/dist/mmd/server/index.mjs.map +1 -1
  159. package/dist/music/index.js +16 -16
  160. package/dist/music/index.mjs +2 -2
  161. package/dist/music/server/index.js +8 -8
  162. package/dist/music/server/index.mjs +1 -1
  163. package/dist/request/index.js +2 -2
  164. package/dist/request/index.js.map +1 -1
  165. package/dist/request/index.mjs +2 -2
  166. package/dist/request/index.mjs.map +1 -1
  167. package/dist/storage/index.js +11 -11
  168. package/dist/storage/index.mjs +2 -2
  169. package/dist/testYourself/admin/index.js +3 -3
  170. package/dist/testYourself/admin/index.mjs +1 -1
  171. package/dist/testYourself/index.js +22 -22
  172. package/dist/testYourself/index.js.map +1 -1
  173. package/dist/testYourself/index.mjs +14 -14
  174. package/dist/testYourself/index.mjs.map +1 -1
  175. package/dist/testYourself/server/index.js +4 -4
  176. package/dist/testYourself/server/index.mjs +1 -1
  177. package/dist/universalExport/index.d.mts +3 -3
  178. package/dist/universalExport/index.d.ts +3 -3
  179. package/dist/universalExport/index.js +48 -47
  180. package/dist/universalExport/index.js.map +1 -1
  181. package/dist/universalExport/index.mjs +48 -47
  182. package/dist/universalExport/index.mjs.map +1 -1
  183. package/dist/universalExport/server/index.js +29 -29
  184. package/dist/universalExport/server/index.js.map +1 -1
  185. package/dist/universalExport/server/index.mjs +28 -28
  186. package/dist/universalExport/server/index.mjs.map +1 -1
  187. package/dist/universalFile/index.d.mts +3 -3
  188. package/dist/universalFile/index.d.ts +3 -3
  189. package/dist/universalFile/index.js +73 -72
  190. package/dist/universalFile/index.js.map +1 -1
  191. package/dist/universalFile/index.mjs +73 -72
  192. package/dist/universalFile/index.mjs.map +1 -1
  193. package/dist/universalFile/server/index.js +258 -260
  194. package/dist/universalFile/server/index.js.map +1 -1
  195. package/dist/universalFile/server/index.mjs +244 -246
  196. package/dist/universalFile/server/index.mjs.map +1 -1
  197. package/dist/utils/index.js +11 -11
  198. package/dist/utils/index.mjs +2 -2
  199. package/package.json +1 -1
  200. package/dist/AliyunOSSProvider-FWAKUB2T.js +0 -15
  201. package/dist/AliyunOSSProvider-KJYRIZES.mjs +0 -6
  202. package/dist/ConfigService-7MEZXKJ5.js +0 -21
  203. package/dist/ConfigService-BV57YYFW.mjs +0 -4
  204. package/dist/LocalStorageProvider-RTPMUOZ2.mjs +0 -6
  205. package/dist/LocalStorageProvider-XSRCUXOU.js +0 -15
  206. package/dist/PMXParser-L6IWHL4I.mjs +0 -4
  207. package/dist/PMXParser-YBS3B6HM.js +0 -13
  208. package/dist/chunk-3BGPZN4X.mjs.map +0 -1
  209. package/dist/chunk-3WOAPLEG.mjs.map +0 -1
  210. package/dist/chunk-6PRFP5EG.js.map +0 -1
  211. package/dist/chunk-6YKMCPQI.mjs.map +0 -1
  212. package/dist/chunk-7Z5LLJ3A.js.map +0 -1
  213. package/dist/chunk-A3UP56MS.js.map +0 -1
  214. package/dist/chunk-CD77U7LZ.js.map +0 -1
  215. package/dist/chunk-CLKKZSPZ.js.map +0 -1
  216. package/dist/chunk-CNTILN5J.mjs.map +0 -1
  217. package/dist/chunk-DUHZ7VZP.js.map +0 -1
  218. package/dist/chunk-DW2ZTOCV.js.map +0 -1
  219. package/dist/chunk-E7RGBAYJ.js.map +0 -1
  220. package/dist/chunk-JZXJQMVE.js.map +0 -1
  221. package/dist/chunk-KQGP6BTS.mjs.map +0 -1
  222. package/dist/chunk-LFG6FPM5.mjs.map +0 -1
  223. package/dist/chunk-LX4XX6W7.js.map +0 -1
  224. package/dist/chunk-LZHMNOED.js.map +0 -1
  225. package/dist/chunk-MW4BCIZC.mjs.map +0 -1
  226. package/dist/chunk-OCR5DS4C.mjs.map +0 -1
  227. package/dist/chunk-OLHGZXN3.mjs.map +0 -1
  228. package/dist/chunk-OPPF3326.js.map +0 -1
  229. package/dist/chunk-QAT2RWAO.mjs.map +0 -1
  230. package/dist/chunk-QU5OT4DF.js.map +0 -1
  231. package/dist/chunk-T5OZHYVM.mjs.map +0 -1
  232. package/dist/chunk-TFQF2HDO.mjs.map +0 -1
  233. package/dist/chunk-TOC5FSHP.js.map +0 -1
  234. package/dist/chunk-TV3VKRJK.mjs.map +0 -1
  235. package/dist/chunk-UOFTHYIH.js.map +0 -1
  236. package/dist/chunk-VRTRSEEH.mjs.map +0 -1
  237. package/dist/chunk-ZI25QCHD.mjs.map +0 -1
package/dist/mmd/index.js CHANGED
@@ -1,10 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkE7RGBAYJ_js = require('../chunk-E7RGBAYJ.js');
4
- require('../chunk-A3UP56MS.js');
5
- var chunkJZXJQMVE_js = require('../chunk-JZXJQMVE.js');
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
- }, `\u6DFB\u52A0\u7EB9\u7406: ${path}`);
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(`Invalid texture index: ${index}`);
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
- }, `\u66F4\u65B0\u7EB9\u7406 #${index}: ${oldPath} \u2192 ${newPath}`);
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(`Invalid texture index: ${index}`);
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(`\u7EB9\u7406 #${index} \u6B63\u5728\u88AB ${usedByMaterials.length} \u4E2A\u6750\u8D28\u4F7F\u7528\uFF0C\u65E0\u6CD5\u5220\u9664`);
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
- }, `\u5220\u9664\u7EB9\u7406 #${index}: ${deletedTexture.path}`);
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(`Invalid material index: ${materialIndex}`);
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(`Invalid texture index: ${textureIndex}`);
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
- }, `\u6750\u8D28 #${materialIndex} \u4E3B\u7EB9\u7406: #${oldIndex} \u2192 #${textureIndex}`);
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(`Invalid material index: ${materialIndex}`);
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(`Invalid texture index: ${textureIndex}`);
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
- }, `\u6750\u8D28 #${materialIndex} Sphere\u7EB9\u7406: #${oldIndex} \u2192 #${textureIndex} (\u6A21\u5F0F: ${mode})`);
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(`Invalid material index: ${materialIndex}`);
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(`Invalid texture index: ${textureIndex}`);
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
- }, `\u6750\u8D28 #${materialIndex} Toon\u7EB9\u7406: #${oldIndex} \u2192 #${textureIndex} (\u5171\u4EAB: ${isShared})`);
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(`Invalid material index: ${materialIndex}`);
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
- }, `\u66F4\u65B0\u6750\u8D28 #${materialIndex}: ${material.name}`);
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: `toon${String(material.toonTextureIndex).padStart(2, "0")}.bmp`,
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(`Invalid index size: ${size}`);
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 chunkJZXJQMVE_js.PMXParser();
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(`${data2.modelInfo.modelName || "model"}_edited.pmx`);
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(`\u6210\u529F\u6DFB\u52A0\u7EB9\u7406 #${index}: ${path}`);
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(`\u786E\u5B9A\u8981\u5220\u9664\u7EB9\u7406 #${index} \u5417\uFF1F`)) return;
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: `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
+ 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: `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
+ 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: `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
+ 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: `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
+ 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: `p-4 cursor-pointer hover:bg-gray-50 ${selectedMaterial === mapping.materialIndex ? "bg-blue-50" : ""}`
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: `rgba(${data.materials[mapping.materialIndex]?.diffuse[0] * 255}, ${data.materials[mapping.materialIndex]?.diffuse[1] * 255}, ${data.materials[mapping.materialIndex]?.diffuse[2] * 255}, 1)`
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 ? `\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
+ )))), /* @__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 chunkJZXJQMVE_js.PMXParser();
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 `${basePath}/${normalizedPath}`;
800
+ return basePath + "/" + normalizedPath;
800
801
  };
801
802
  if (loading) {
802
- return /* @__PURE__ */ React10__default.default.createElement("div", { className: `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
+ 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: `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
+ 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: `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
+ 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: `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
+ 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: `rgba(${material.diffuse[0] * 255}, ${material.diffuse[1] * 255}, ${material.diffuse[2] * 255}, ${material.diffuse[3]})`
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 || `\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
+ ), /* @__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(`Failed to load Ammo.js from ${path}`));
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(`[MMD Material Config] Processed ${materialCount} materials (Toon: ${toonMaterialCount}, Phong: ${phongMaterialCount})`);
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(` - Tone Mapping: ${toneMapping === THREE2__namespace.LinearToneMapping ? "Linear" : "Custom"}`);
982
+ console.log(" - Tone Mapping: " + (toneMapping === THREE2__namespace.LinearToneMapping ? "Linear" : "Custom"));
982
983
  console.log(` - Color Space: sRGB`);
983
- console.log(` - Shadow: ${enableShadow ? "Enabled (PCF Soft)" : "Disabled"}`);
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, `rgb(${255 * brightness}, ${255 * brightness}, ${255 * brightness})`);
994
- gradient.addColorStop(1, `rgb(${128 * brightness}, ${128 * brightness}, ${128 * brightness})`);
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(`[MMDPlayerBase] Texture ${index + 1}/${textures.length}: Failed to load`, e);
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(`[MMDPlayerBase] Texture ${index + 1}/${textures.length}: Timeout`);
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(`[MMDPlayerBase] \u26A0\uFE0F Model has ${boneCount} bones (max recommended: ${MAX_BONES})`);
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(`[MMDPlayerBase] Stage loading: ${percent.toFixed(1)}%`);
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(`[MMDPlayerBase] Stage model loaded: ${stagePath}`, stageMesh);
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(`[MMDPlayerBase] Warmup error for stage ${stagePath}:`, e);
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(`Failed to load stage ${stagePath}:`, err);
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 ? `${hours}\u5C0F\u65F6${minutes}\u5206${seconds}\u79D2` : minutes > 0 ? `${minutes}\u5206${seconds}\u79D2` : `${seconds}\u79D2`;
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(`[MMDPlayerBase] Error removing body ${i}:`, e);
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(`[MMDPlayerBase] Error removing constraint ${i}:`, e);
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(`[MMDPlayerBase] \u274C Error destroying world #${i}:`, e);
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(`[MMDPlayerBase] \u274C Error destroying solver #${i}:`, e);
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(`[MMDPlayerBase] \u274C Error destroying cache #${i}:`, e);
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(`[MMDPlayerBase] \u274C Error destroying dispatcher #${i}:`, e);
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(`[MMDPlayerBase] \u274C Error destroying config #${i}:`, e);
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: `rounded-full p-2 transition-colors ${isListLooping ? "bg-green-500/30 hover:bg-green-500/50" : "hover:bg-white/20"}`,
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: `rounded-full p-2 transition-colors ${isLooping ? "bg-blue-500/30 hover:bg-blue-500/50" : "hover:bg-white/20"}`,
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: `rounded-full p-2 transition-colors ${showAxes ? "bg-blue-500/30 hover:bg-blue-500/50" : "hover:bg-white/20"}`,
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: `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
+ 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: `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
+ /* @__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: `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
+ 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: `w-full truncate text-xs ${currentVal === opt.id ? "text-blue-400" : "text-white/80"}` }, opt.name),
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: `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
+ 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: `${Math.min(100, parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100)}%`
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: `px-2 py-0.5 rounded text-[10px] font-bold ${active ? "bg-green-600 text-white" : "bg-gray-700 text-gray-400"}`
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(`Error attempting to enable fullscreen: ${err.message}`);
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: `relative overflow-hidden bg-black group flex ${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: `transition-opacity duration-300 ${isPlaying && !showSettings ? "opacity-0 group-hover:opacity-100" : "opacity-100"}` }, /* @__PURE__ */ React10__default.default.createElement(
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: `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
+ 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: `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
+ 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: `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
+ 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: `${Math.min(100, parseFloat(memoryInfo.used) / parseFloat(memoryInfo.limit) * 100)}%`
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: `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
+ 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: `px-2 py-0.5 rounded text-[10px] font-bold ${active ? "bg-green-600 text-white" : "bg-gray-700 text-gray-400"}`
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(`[MMDPlaylist] Starting transition to node ${index}`);
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(`[MMDPlaylist] Loading new node ${index}`);
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(`[MMDPlaylist] Transition to node ${index} completed`);
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(`Error attempting to enable fullscreen: ${err.message}`);
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(`[MMDPlaylist] Preload strategy: all - marked node ${idx} (${node.name})`);
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(`[MMDPlaylist] Preload strategy: next - marked node ${nextIndex} (${nextNode.name})`);
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(`[MMDPlaylist] Memory cleanup: removed preload mark for node ${idx}`);
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: `relative overflow-hidden bg-black group flex h-full ${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..." : `\u6B63\u5728\u52A0\u8F7D ${currentIndex + 1} / ${nodes.length}`))), /* @__PURE__ */ React10__default.default.createElement(
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: `transition-opacity duration-300 ${isPlaying && !showPlaylist ? "opacity-0 group-hover:opacity-100" : "opacity-100"}`
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: `${currentIndex + 1} / ${nodes.length}`,
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: `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"}`
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: `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"}`
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: `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}`
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: `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`,
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(` \u603B\u6750\u8D28\u6570: ${report.totalMaterials}`);
3514
- console.log(` MeshToonMaterial: ${report.toonMaterialCount}`);
3515
- console.log(` MeshPhongMaterial: ${report.phongMaterialCount}`);
3516
- console.log(` MeshStandardMaterial: ${report.standardMaterialCount}`);
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(` \u6709Toon\u7EB9\u7406: ${report.materialsWithToon} / ${report.totalMaterials} ${report.materialsWithToon > 0 ? "\u2705" : "\u274C"}`);
3519
- console.log(` \u6709Sphere\u7EB9\u7406: ${report.materialsWithSphere} / ${report.totalMaterials} ${report.materialsWithSphere > 0 ? "\u2705" : "\u274C"}`);
3520
- console.log(` \u6709\u4E3B\u7EB9\u7406: ${report.materialsWithMainTexture} / ${report.totalMaterials}`);
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(` ${i + 1}. ${issue}`);
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(` ${i + 1}. ${suggestion}`);
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(` \u603B\u6750\u8D28\u6570: ${diagnostic.totalMaterials}`);
3647
- console.log(` \u9884\u671F\u6709sphere\u7EB9\u7406: ${diagnostic.expectedSphere}`);
3648
- console.log(` \u5B9E\u9645\u6709sphere\u7EB9\u7406: ${diagnostic.actualSphere} ${diagnostic.actualSphere > 0 ? "\u2705" : "\u274C"}`);
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(` ${i + 1}. [${item.index}] ${item.name} (\u5BF9\u8C61: ${item.objectName})`);
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(`\u{1F52E} \u6DFB\u52A0\u9ED8\u8BA4Sphere\u7EB9\u7406\u5230 ${appliedCount} \u4E2A\u6750\u8D28`);
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-YBS3B6HM.js');
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(`\u6A21\u578B: ${modelUrl}`);
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
- ${i + 1}. ${item.materialName}`);
3742
- console.log(` \u7EB9\u7406: ${item.texturePath}`);
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(` - ${item.texturePath}`);
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(`\u5F53\u524D\u6709 ${runtimeDiag.actualSphere} \u4E2A\u6750\u8D28\u4F7F\u7528sphere\u7EB9\u7406`);
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: `${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: `blur(${theme.blur}) saturate(200%)`,
3956
- WebkitBackdropFilter: `blur(${theme.blur}) saturate(200%)`,
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: `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"}`,
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: `fixed inset-0 flex flex-col ${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: `${item.nodeIndex}-${item.dialogueIndex}-${index}`,
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: `fixed inset-0 w-screen h-screen flex items-center justify-center ${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: `fixed inset-0 w-screen h-screen flex items-center justify-center overflow-hidden ${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: `floatParticle ${Math.random() * 10 + 10}s linear infinite`,
4521
- animationDelay: `-${Math.random() * 20}s`
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
- px-6 py-3 rounded-full
4868
- bg-gradient-to-r from-pink-500 to-purple-500
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: `pointer-events-none absolute inset-0 ${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(`[MMDVisualNovel] Transitioning to node ${nodeIndex}`);
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(`[MMDVisualNovel] Transition to node ${nodeIndex} completed, waiting for model load`);
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(`[MMDVisualNovel] Branching: ${key}=${val} -> node ${nextNodeIndex}`);
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: `relative bg-black ${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: `flash-anim ${activeEffect.duration || 500}ms ease-out forwards`
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(`[MMDVisualNovel] Variable set: ${key} = ${value}`);
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 `${mins}:${secs.toString().padStart(2, "0")}`;
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: `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}`
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: `${progress}%` }
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: `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}`
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: `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"}`
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: `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")),
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: `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"));
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 } = chunkE7RGBAYJ_js.useMusic();
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: `relative bg-black group ${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: `absolute inset-0 z-10 flex flex-col justify-between transition-opacity duration-700 pointer-events-none ${isUIVisible ? "opacity-100" : "opacity-0"}`
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 = `ar-photo-${Date.now()}.png`;
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: `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"}`
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: `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: `w-3 h-3 rounded-full ${state.arReady ? "bg-green-400" : "bg-red-400"}`, title: "AR" }), /* @__PURE__ */ React10__default.default.createElement("div", { className: `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: `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: `w-3 h-3 rounded-full ${state.modelPlaced && modelRootRef.current?.visible ? "bg-green-400" : "bg-yellow-400"}`, title: "\u6A21\u578B" }))));
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(`\\b${hlslType}\\b`, "g");
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(`\\b${hlslFunc}\\b`, "g");
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(`\\b${hlslSemantic}\\b`, "g");
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(`Shader functions not found: ${vertexShaderName} or ${fragmentShaderName}`);
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(`Shader functions not found: ${vertexShaderName} or ${fragmentShaderName}`);
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 === `${define.name}_X`);
7437
- const heightDefine = defines.find((d) => d.name === `${define.name}_Y`);
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 `${func.returnType} ${func.name}(${func.parameters})${func.outputSemantic ? " : " + func.outputSemantic : ""}
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(`[FXToThreeAdapter] Skipping additive param "${param.name}" (not an absolute value)`);
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(`[FXToThreeAdapter] Found color param "${param.name}":`, colorValue);
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(`[FXToThreeAdapter] Found emissive param "${param.name}":`, emissiveValue);
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(`[FXToThreeAdapter] Found specular param "${param.name}":`, specularValue);
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(`[FXToThreeAdapter] Found shininess param "${param.name}":`, shininessValue);
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 ? `${this.basePath}/${fxTexture.path}` : fxTexture.path;
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(`Failed to load texture ${fxTexture.name}:`, error);
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) => `${p.type} ${p.name}`),
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(`[MultiFXAdapter] Loading ${fileType.toUpperCase()} file:`, desc);
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(`[MultiFXAdapter] Loading textures for ${fileType}:`, desc);
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(`[MultiFXAdapter] ${fileType.toUpperCase()} loaded successfully:`, desc);
8044
- console.log(`[MultiFXAdapter] - Priority: ${lastConfig?.priority ?? 0}`);
8045
- console.log(`[MultiFXAdapter] - Target: ${lastConfig?.target ?? "all"}`);
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(`[MultiFXAdapter] - Skipping ${config.description || config.path} (target mismatch: ${config.target} !== ${target})`);
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(`[MultiFXAdapter] - Skipping ${config.description || config.path} (adapter not found)`);
8079
+ console.log("[MultiFXAdapter] - Skipping " + (config.description || config.path) + " (adapter not found)");
8098
8080
  return;
8099
8081
  }
8100
- console.log(`[MultiFXAdapter] \u2705 Applying ${config.description || config.path} (priority: ${config.priority})`);
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(`[MultiFXAdapter] Processing ${config.description || config.path}:`);
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(`[MultiFXAdapter] No shader material config found for target: ${target}`);
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(`[MultiFXAdapter] Adapter not found for: ${shaderConfig.path}`);
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(`[MultiFXAdapter] \u2705 Created ShaderMaterial for target: ${target} from ${shaderConfig.description || shaderConfig.path}`);
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(`[MultiFXAdapter] Applying ${sceneEffects.length} scene-level effects (.x files)`);
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(`[MultiFXAdapter] - Applying: ${config.description || config.path}`);
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(`[MultiFXAdapter] Applying ${modelEffects.length} model-level effects (.fx files)`);
8405
+ console.log("[MultiFXAdapter] Applying " + modelEffects.length + " model-level effects (.fx files)");
8424
8406
  modelEffects.forEach((config) => {
8425
- console.log(`[MultiFXAdapter] - Applying: ${config.description || config.path}`);
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(`Total Effects: ${summary.totalFX}`);
8459
- console.log(` - Scene-level (.x): ${summary.xFiles}`);
8460
- console.log(` - Model-level (.fx): ${summary.fxFiles}`);
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(`${index + 1}. ${icon} [${config.type.toUpperCase()}] ${config.description || config.path}`);
8465
- console.log(` Priority: ${config.priority}, Target: ${config.target}`);
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(` Features: ${config.features.join(", ")}`);
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(`# ${effect.fileName}`);
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(`| ${d.name} | ${d.value || "-"} | ${status} | ${d.comment || "-"} |`);
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 ? `${t.width}x${t.height}` : "-";
8500
- lines.push(`| ${t.name} | ${t.path} | ${size} | ${t.purpose || "-"} |`);
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(`| ${p.name} | ${p.type} | ${p.semantic || "-"} | ${p.defaultValue || "-"} |`);
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(`| ${c.name} | ${c.objectName} | ${c.itemName} |`);
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(`- ${inc}`);
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(`### ${t.name}`);
8518
+ lines.push("### " + t.name);
8537
8519
  lines.push("");
8538
8520
  t.passes.forEach((p, idx) => {
8539
- lines.push(`#### Pass ${p.name || idx + 1}`);
8521
+ lines.push("#### Pass " + (p.name || idx + 1));
8540
8522
  if (p.vertexShader) {
8541
- lines.push(`- **\u9876\u70B9\u7740\u8272\u5668**: ${p.vertexShader.function} (${p.vertexShader.profile})`);
8523
+ lines.push("- **\u9876\u70B9\u7740\u8272\u5668**: " + p.vertexShader.function + " (" + p.vertexShader.profile + ")");
8542
8524
  }
8543
8525
  if (p.pixelShader) {
8544
- lines.push(`- **\u50CF\u7D20\u7740\u8272\u5668**: ${p.pixelShader.function} (${p.pixelShader.profile})`);
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 ? `\u542F\u7528\u529F\u80FD: ${features.join(", ")}` : "\u65E0\u7279\u6B8A\u529F\u80FD\u542F\u7528";
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(`\u7EB9\u7406 ${texture.name} \u7F3A\u5C11\u8DEF\u5F84`);
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(`\u53C2\u6570 ${param.name} \u7684\u9ED8\u8BA4\u503C\u53EF\u80FD\u4E0D\u5408\u6CD5: ${param.defaultValue}`);
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: `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..."));
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: `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")));
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: `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(
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: `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"}`,
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: `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"}`,
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: `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"}`,
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: `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"}`,
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: `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"}`,
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: `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: `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: `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)))));
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: `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: `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))))));
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 ? `${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 || "-"))))));
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: `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"));
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: `fx-three-preview loading ${className}` }, /* @__PURE__ */ React10__default.default.createElement("div", { className: "preview-loading" }, "\u52A0\u8F7D\u4E2D..."));
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: `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)));
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: `fx-three-preview ${className}` }, /* @__PURE__ */ React10__default.default.createElement(
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 chunkJZXJQMVE_js.PMXParser; }
9002
+ get: function () { return chunkUIFFDRTE_js.PMXParser; }
9021
9003
  });
9022
9004
  exports.ARMode = ARMode;
9023
9005
  exports.CheerButton = CheerButton;