diff --git a/Document/预设文件维护说明.md b/Document/预设文件维护说明.md new file mode 100644 index 0000000..bdcda51 --- /dev/null +++ b/Document/预设文件维护说明.md @@ -0,0 +1,93 @@ +# 预设文件维护说明 + +## 文件位置 + +预设配置放在: + +```text +public/Preset/ +``` + +预设索引: + +```text +public/Preset/index.json +``` + +## 新增预设 + +1. 把新的预设配置放入 `public/Preset/`。 +2. 重新启动开发服务或执行构建,索引会自动更新。 +3. 部署时一起上传 `index.json`、预设文件和 `dist/`。 + +自动生成示例: + +```json +{ + "file": "8.烟花爆炸.json", + "name": { + "zh-CN": "8.烟花爆炸", + "zh-TW": "8.烟花爆炸", + "en": "8.烟花爆炸", + "ja": "8.烟花爆炸", + "ko": "8.烟花爆炸", + "fr": "8.烟花爆炸", + "de": "8.烟花爆炸", + "pt-BR": "8.烟花爆炸", + "es": "8.烟花爆炸" + } +} +``` + +## 规则 + +- `file` 是实际预设配置文件名,必须与磁盘文件完全一致。 +- `name` 是下拉框显示名称,不参与文件加载。 +- `name` 可以省略;省略时直接显示去掉 `.json` 后缀的文件名。 +- `name` 也兼容旧版字符串格式和多语言对象格式。 +- 文件名建议使用稳定、简洁的名称,可使用 ASCII。 +- 当前生成器会把所有语言字段都填成文件名本身。 +- 自动生成工具可以只输出文件记录: + +```json +{ + "file": "8.fireworks.json" +} +``` + +界面会显示为: + +```text +8.fireworks +``` + +- 旧版字符串格式仍然兼容: + +```json +{ + "file": "8.fireworks.json", + "name": "8.烟花爆炸" +} +``` + +字符串格式会在所有语言中显示同一个名称。 + +## 回退顺序 + +当某种语言的名称缺失时,界面依次使用: + +```text +当前语言 → English → 简体中文 → 文件名 +``` + +验证命令: + +```bash +npm run test:i18n +``` + +该命令会检查: + +- 每个预设文件是否存在; +- 多语言名称字段格式是否有效; +- 语言包键和插值占位符是否一致。 diff --git a/dist/Preset/index.json b/dist/Preset/index.json index 67c0c17..b21fc26 100644 --- a/dist/Preset/index.json +++ b/dist/Preset/index.json @@ -1,30 +1,100 @@ [ { - "name": "1.粒子扫过", - "file": "1.粒子扫过.json" + "file": "1.粒子扫过.json", + "name": { + "zh-CN": "1.粒子扫过", + "zh-TW": "1.粒子扫过", + "en": "1.粒子扫过", + "ja": "1.粒子扫过", + "ko": "1.粒子扫过", + "fr": "1.粒子扫过", + "de": "1.粒子扫过", + "pt-BR": "1.粒子扫过", + "es": "1.粒子扫过" + } }, { - "name": "2.长条方块", - "file": "2.长条方块.json" + "file": "2.长条方块.json", + "name": { + "zh-CN": "2.长条方块", + "zh-TW": "2.长条方块", + "en": "2.长条方块", + "ja": "2.长条方块", + "ko": "2.长条方块", + "fr": "2.长条方块", + "de": "2.长条方块", + "pt-BR": "2.长条方块", + "es": "2.长条方块" + } }, { - "name": "3.力场拖尾", - "file": "3.力场拖尾.json" + "file": "3.力场拖尾.json", + "name": { + "zh-CN": "3.力场拖尾", + "zh-TW": "3.力场拖尾", + "en": "3.力场拖尾", + "ja": "3.力场拖尾", + "ko": "3.力场拖尾", + "fr": "3.力场拖尾", + "de": "3.力场拖尾", + "pt-BR": "3.力场拖尾", + "es": "3.力场拖尾" + } }, { - "name": "4.雷电序列帧", - "file": "4.雷电序列帧.json" + "file": "4.雷电序列帧.json", + "name": { + "zh-CN": "4.雷电序列帧", + "zh-TW": "4.雷电序列帧", + "en": "4.雷电序列帧", + "ja": "4.雷电序列帧", + "ko": "4.雷电序列帧", + "fr": "4.雷电序列帧", + "de": "4.雷电序列帧", + "pt-BR": "4.雷电序列帧", + "es": "4.雷电序列帧" + } }, { - "name": "5.贴图轴点", - "file": "5.贴图轴点.json" + "file": "5.贴图轴点.json", + "name": { + "zh-CN": "5.贴图轴点", + "zh-TW": "5.贴图轴点", + "en": "5.贴图轴点", + "ja": "5.贴图轴点", + "ko": "5.贴图轴点", + "fr": "5.贴图轴点", + "de": "5.贴图轴点", + "pt-BR": "5.贴图轴点", + "es": "5.贴图轴点" + } }, { - "name": "6.子发射器", - "file": "6.子发射器.json" + "file": "6.子发射器.json", + "name": { + "zh-CN": "6.子发射器", + "zh-TW": "6.子发射器", + "en": "6.子发射器", + "ja": "6.子发射器", + "ko": "6.子发射器", + "fr": "6.子发射器", + "de": "6.子发射器", + "pt-BR": "6.子发射器", + "es": "6.子发射器" + } }, { - "name": "7.SpineBoy", - "file": "7.SpineBoy.json" + "file": "7.SpineBoy.json", + "name": { + "zh-CN": "7.SpineBoy", + "zh-TW": "7.SpineBoy", + "en": "7.SpineBoy", + "ja": "7.SpineBoy", + "ko": "7.SpineBoy", + "fr": "7.SpineBoy", + "de": "7.SpineBoy", + "pt-BR": "7.SpineBoy", + "es": "7.SpineBoy" + } } ] diff --git a/dist/assets/index-DxBJZqWf.js b/dist/assets/index-BSAMR7rU.js similarity index 99% rename from dist/assets/index-DxBJZqWf.js rename to dist/assets/index-BSAMR7rU.js index 8380b4a..23265d5 100644 --- a/dist/assets/index-DxBJZqWf.js +++ b/dist/assets/index-BSAMR7rU.js @@ -1,2 +1,2 @@ -var ft=Object.defineProperty;var gt=(W,t,e)=>t in W?ft(W,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):W[t]=e;var T=(W,t,e)=>gt(W,typeof t!="symbol"?t+"":t,e);import{f as ht,R as pt,N as dt,ac as ut,Z as mt,b4 as yt,O as rt,b5 as at,U as D,B as Tt}from"./index-2QgDjwRs.js";import{$ as Rt,a0 as Yt,a1 as Ft,a2 as Et,y as _t,a3 as Ot,a4 as kt,a5 as Xt,a6 as Bt,a7 as Nt,a8 as Dt,a9 as $t,aa as zt,ab as Wt,ad as qt,H as Gt,ae as Jt,af as Ht,ag as Zt,ah as Kt,ai as Qt,aj as jt,ak as te,al as ee,am as se,an as ne,ao as ie,ap as oe,aq as re,ar as ae,as as le,at as ce,au as he,av as pe,aw as de,ax as ue,ay as fe,az as ge,aA as me,aB as ye,aC as Te,aD as be,aE as we,aF as xe,aG as Ae,aH as Pe,aI as Ie,aJ as Ce,aK as Ve,aL as Le,aM as Se,aN as Me,aO as ve,aP as Ue,aQ as Re,aR as Ye,aS as Fe,aT as Ee,x as _e,aU as Oe,aV as ke,aW as Xe,aX as Be,aY as Ne,aZ as De,a_ as $e,a$ as ze,b0 as We,b1 as qe,b2 as Ge,b3 as Je,b6 as He,b7 as Ze,b8 as Ke,b9 as Qe,ba as je,bb as ts,bc as es,bd as ss,be as ns,bf as is,bg as os,bh as rs,bi as as,bj as ls,bk as cs,bl as hs,bm as ps,bn as ds,bo as us,bp as fs,bq as gs,br as ms,bs as ys,bt as Ts,bu as bs,w as ws,X as xs,J as As,Y as Ps,z as Is,bv as Cs,bw as Vs,bx as Ls,by as Ss,bz as Ms,bA as vs,bB as Us,bC as Rs,bD as Ys,bE as Fs,bF as Es,bG as _s,T as Os,bH as ks,bI as Xs,b as Bs,bJ as Ns,c as Ds,bK as $s,bL as zs,bM as Ws,bN as qs,bO as Gs,bP as Js,bQ as Hs,bR as Zs,bS as Ks,bT as Qs,bU as js,bV as tn,bW as en,bX as sn,bY as nn,bZ as on,b_ as rn,V as an,b$ as ln,c0 as cn,c1 as hn,c2 as pn,c3 as dn}from"./index-2QgDjwRs.js";class It{constructor(t){T(this,"skeletonData");T(this,"animationToMixTime",{});T(this,"defaultMix",0);if(!t)throw new Error("skeletonData cannot be null.");this.skeletonData=t}setMix(t,e,n){return typeof t=="string"?this.setMix1(t,e,n):this.setMix2(t,e,n)}setMix1(t,e,n){const s=this.skeletonData.findAnimation(t);if(!s)throw new Error(`Animation not found: ${t}`);const i=this.skeletonData.findAnimation(e);if(!i)throw new Error(`Animation not found: ${e}`);this.setMix2(s,i,n)}setMix2(t,e,n){if(!t)throw new Error("from cannot be null.");if(!e)throw new Error("to cannot be null.");const s=`${t.name}.${e.name}`;this.animationToMixTime[s]=n}getMix(t,e){const n=`${t.name}.${e.name}`,s=this.animationToMixTime[n];return s===void 0?this.defaultMix:s}}class Ct{constructor(t,e="",n=new bt,s=new lt){T(this,"textureLoader");T(this,"pathPrefix");T(this,"downloader");T(this,"cache");T(this,"errors",{});T(this,"toLoad",0);T(this,"loaded",0);T(this,"texturePmaInfo",{});this.textureLoader=t,this.pathPrefix=e,this.downloader=n,this.cache=s}start(t){return this.toLoad++,this.pathPrefix+t}success(t,e,n){this.toLoad--,this.loaded++,this.cache.assets[e]=n,this.cache.assetsRefCount[e]=(this.cache.assetsRefCount[e]||0)+1,t&&t(e,n)}error(t,e,n){this.toLoad--,this.loaded++,this.errors[e]=n,t&&t(e,n)}loadAll(){return new Promise((e,n)=>{const s=()=>{if(this.isLoadingComplete()){this.hasErrors()?n(this.errors):e(this);return}requestAnimationFrame(s)};requestAnimationFrame(s)})}setRawDataURI(t,e){this.downloader.rawDataUris[this.pathPrefix+t]=e}loadBinary(t,e=()=>{},n=()=>{}){t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((s,i)=>{this.downloader.downloadBinary(t,o=>{this.success(e,t,o),s(o)},(o,r)=>{const l=`Couldn't load binary ${t}: status ${o}, ${r}`;this.error(n,t,l),i(l)})}))}loadText(t,e=()=>{},n=()=>{}){t=this.start(t),this.downloader.downloadText(t,s=>{this.success(e,t,s)},(s,i)=>{this.error(n,t,`Couldn't load text ${t}: status ${s}, ${i}`)})}loadJson(t,e=()=>{},n=()=>{}){t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((s,i)=>{this.downloader.downloadJson(t,o=>{this.success(e,t,o),s(o)},(o,r)=>{const l=`Couldn't load JSON ${t}: status ${o}, ${r}`;this.error(n,t,l),i(l)})}))}reuseAssets(t,e=()=>{},n=()=>{}){const s=this.cache.getAsset(t),i=s!==void 0;return i&&(this.cache.assetsLoaded[t]=s.then(o=>(o=o instanceof Image||o instanceof ImageBitmap?this.textureLoader(o):o,this.success(e,t,o),o)).catch(o=>{this.error(n,t,o)})),i}loadTexture(t,e=()=>{},n=()=>{}){if(t=this.start(t),this.reuseAssets(t,e,n))return;const s=this.texturePmaInfo[t];this.cache.assetsLoaded[t]=new Promise((i,o)=>{if(!!!(typeof window<"u"&&typeof navigator<"u"&&window.document))fetch(t,{mode:"cors"}).then(c=>{if(c.ok)return c.blob();const a=`Couldn't load image: ${t}`;this.error(n,t,`Couldn't load image: ${t}`),o(a)}).then(c=>c?createImageBitmap(c,{premultiplyAlpha:"none",colorSpaceConversion:"none"}):null).then(c=>{if(c){const a=this.createTexture(t,s,c);this.success(e,t,a),i(a)}});else{const c=new Image;c.crossOrigin="anonymous",c.onload=()=>{const a=this.createTexture(t,s,c);this.success(e,t,a),i(a)},c.onerror=()=>{const a=`Couldn't load image: ${t}`;this.error(n,t,a),o(a)},this.downloader.rawDataUris[t]&&(t=this.downloader.rawDataUris[t]),c.src=t}})}loadTextureAtlas(t,e=()=>{},n=()=>{},s){const i=t.lastIndexOf("/"),o=i>=0?t.substring(0,i+1):"";t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((r,l)=>{this.downloader.downloadText(t,c=>{try{const a=this.createTextureAtlas(c,o,t,s);let h=a.pages.length,m=!1;if(h===0){this.success(e,t,a),r(a);return}for(const y of a.pages)this.loadTexture(this.texturePath(o,y.name,s),(A,u)=>{m||(y.setTexture(u),--h===0&&(this.success(e,t,a),r(a)))},(A,u)=>{if(!m){const g=`Couldn't load texture ${t} page image: ${A}`;this.error(n,t,g),l(g)}m=!0})}catch(a){const h=`Couldn't parse texture atlas ${t}: ${a.message}`;this.error(n,t,h),l(h)}},(c,a)=>{const h=`Couldn't load texture atlas ${t}: status ${c}, ${a}`;this.error(n,t,h),l(h)})}))}loadTextureAtlasButNoTextures(t,e=()=>{},n=()=>{}){const s=t.lastIndexOf("/"),i=s>=0?t.substring(0,s+1):"";t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((o,r)=>{this.downloader.downloadText(t,l=>{try{const c=this.createTextureAtlas(l,i,t);this.success(e,t,c),o(c)}catch(c){const a=`Couldn't parse texture atlas ${t}: ${c.message}`;this.error(n,t,a),r(a)}},(l,c)=>{const a=`Couldn't load texture atlas ${t}: status ${l}, ${c}`;this.error(n,t,a),r(a)})}))}async loadBinaryAsync(t){return new Promise((e,n)=>{this.loadBinary(t,(s,i)=>e(i),(s,i)=>n(i))})}async loadJsonAsync(t){return new Promise((e,n)=>{this.loadJson(t,(s,i)=>e(i),(s,i)=>n(i))})}async loadTextureAsync(t){return new Promise((e,n)=>{this.loadTexture(t,(s,i)=>e(i),(s,i)=>n(i))})}async loadTextureAtlasAsync(t){return new Promise((e,n)=>{this.loadTextureAtlas(t,(s,i)=>e(i),(s,i)=>n(i))})}async loadTextureAtlasButNoTexturesAsync(t){return new Promise((e,n)=>{this.loadTextureAtlasButNoTextures(t,(s,i)=>e(i),(s,i)=>n(i))})}setCache(t){this.cache=t}get(t){return this.cache.assets[this.pathPrefix+t]}require(t){t=this.pathPrefix+t;const e=this.cache.assets[t];if(e)return e;const n=this.errors[t];throw Error(`Asset not found: ${t}${n?` +var ft=Object.defineProperty;var gt=(W,t,e)=>t in W?ft(W,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):W[t]=e;var T=(W,t,e)=>gt(W,typeof t!="symbol"?t+"":t,e);import{f as ht,R as pt,N as dt,ac as ut,Z as mt,b4 as yt,O as rt,b5 as at,U as D,B as Tt}from"./index-DnfvUUAC.js";import{$ as Rt,a0 as Yt,a1 as Ft,a2 as Et,y as _t,a3 as Ot,a4 as kt,a5 as Xt,a6 as Bt,a7 as Nt,a8 as Dt,a9 as $t,aa as zt,ab as Wt,ad as qt,H as Gt,ae as Jt,af as Ht,ag as Zt,ah as Kt,ai as Qt,aj as jt,ak as te,al as ee,am as se,an as ne,ao as ie,ap as oe,aq as re,ar as ae,as as le,at as ce,au as he,av as pe,aw as de,ax as ue,ay as fe,az as ge,aA as me,aB as ye,aC as Te,aD as be,aE as we,aF as xe,aG as Ae,aH as Pe,aI as Ie,aJ as Ce,aK as Ve,aL as Le,aM as Se,aN as Me,aO as ve,aP as Ue,aQ as Re,aR as Ye,aS as Fe,aT as Ee,x as _e,aU as Oe,aV as ke,aW as Xe,aX as Be,aY as Ne,aZ as De,a_ as $e,a$ as ze,b0 as We,b1 as qe,b2 as Ge,b3 as Je,b6 as He,b7 as Ze,b8 as Ke,b9 as Qe,ba as je,bb as ts,bc as es,bd as ss,be as ns,bf as is,bg as os,bh as rs,bi as as,bj as ls,bk as cs,bl as hs,bm as ps,bn as ds,bo as us,bp as fs,bq as gs,br as ms,bs as ys,bt as Ts,bu as bs,w as ws,X as xs,J as As,Y as Ps,z as Is,bv as Cs,bw as Vs,bx as Ls,by as Ss,bz as Ms,bA as vs,bB as Us,bC as Rs,bD as Ys,bE as Fs,bF as Es,bG as _s,T as Os,bH as ks,bI as Xs,b as Bs,bJ as Ns,c as Ds,bK as $s,bL as zs,bM as Ws,bN as qs,bO as Gs,bP as Js,bQ as Hs,bR as Zs,bS as Ks,bT as Qs,bU as js,bV as tn,bW as en,bX as sn,bY as nn,bZ as on,b_ as rn,V as an,b$ as ln,c0 as cn,c1 as hn,c2 as pn,c3 as dn}from"./index-DnfvUUAC.js";class It{constructor(t){T(this,"skeletonData");T(this,"animationToMixTime",{});T(this,"defaultMix",0);if(!t)throw new Error("skeletonData cannot be null.");this.skeletonData=t}setMix(t,e,n){return typeof t=="string"?this.setMix1(t,e,n):this.setMix2(t,e,n)}setMix1(t,e,n){const s=this.skeletonData.findAnimation(t);if(!s)throw new Error(`Animation not found: ${t}`);const i=this.skeletonData.findAnimation(e);if(!i)throw new Error(`Animation not found: ${e}`);this.setMix2(s,i,n)}setMix2(t,e,n){if(!t)throw new Error("from cannot be null.");if(!e)throw new Error("to cannot be null.");const s=`${t.name}.${e.name}`;this.animationToMixTime[s]=n}getMix(t,e){const n=`${t.name}.${e.name}`,s=this.animationToMixTime[n];return s===void 0?this.defaultMix:s}}class Ct{constructor(t,e="",n=new bt,s=new lt){T(this,"textureLoader");T(this,"pathPrefix");T(this,"downloader");T(this,"cache");T(this,"errors",{});T(this,"toLoad",0);T(this,"loaded",0);T(this,"texturePmaInfo",{});this.textureLoader=t,this.pathPrefix=e,this.downloader=n,this.cache=s}start(t){return this.toLoad++,this.pathPrefix+t}success(t,e,n){this.toLoad--,this.loaded++,this.cache.assets[e]=n,this.cache.assetsRefCount[e]=(this.cache.assetsRefCount[e]||0)+1,t&&t(e,n)}error(t,e,n){this.toLoad--,this.loaded++,this.errors[e]=n,t&&t(e,n)}loadAll(){return new Promise((e,n)=>{const s=()=>{if(this.isLoadingComplete()){this.hasErrors()?n(this.errors):e(this);return}requestAnimationFrame(s)};requestAnimationFrame(s)})}setRawDataURI(t,e){this.downloader.rawDataUris[this.pathPrefix+t]=e}loadBinary(t,e=()=>{},n=()=>{}){t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((s,i)=>{this.downloader.downloadBinary(t,o=>{this.success(e,t,o),s(o)},(o,r)=>{const l=`Couldn't load binary ${t}: status ${o}, ${r}`;this.error(n,t,l),i(l)})}))}loadText(t,e=()=>{},n=()=>{}){t=this.start(t),this.downloader.downloadText(t,s=>{this.success(e,t,s)},(s,i)=>{this.error(n,t,`Couldn't load text ${t}: status ${s}, ${i}`)})}loadJson(t,e=()=>{},n=()=>{}){t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((s,i)=>{this.downloader.downloadJson(t,o=>{this.success(e,t,o),s(o)},(o,r)=>{const l=`Couldn't load JSON ${t}: status ${o}, ${r}`;this.error(n,t,l),i(l)})}))}reuseAssets(t,e=()=>{},n=()=>{}){const s=this.cache.getAsset(t),i=s!==void 0;return i&&(this.cache.assetsLoaded[t]=s.then(o=>(o=o instanceof Image||o instanceof ImageBitmap?this.textureLoader(o):o,this.success(e,t,o),o)).catch(o=>{this.error(n,t,o)})),i}loadTexture(t,e=()=>{},n=()=>{}){if(t=this.start(t),this.reuseAssets(t,e,n))return;const s=this.texturePmaInfo[t];this.cache.assetsLoaded[t]=new Promise((i,o)=>{if(!!!(typeof window<"u"&&typeof navigator<"u"&&window.document))fetch(t,{mode:"cors"}).then(c=>{if(c.ok)return c.blob();const a=`Couldn't load image: ${t}`;this.error(n,t,`Couldn't load image: ${t}`),o(a)}).then(c=>c?createImageBitmap(c,{premultiplyAlpha:"none",colorSpaceConversion:"none"}):null).then(c=>{if(c){const a=this.createTexture(t,s,c);this.success(e,t,a),i(a)}});else{const c=new Image;c.crossOrigin="anonymous",c.onload=()=>{const a=this.createTexture(t,s,c);this.success(e,t,a),i(a)},c.onerror=()=>{const a=`Couldn't load image: ${t}`;this.error(n,t,a),o(a)},this.downloader.rawDataUris[t]&&(t=this.downloader.rawDataUris[t]),c.src=t}})}loadTextureAtlas(t,e=()=>{},n=()=>{},s){const i=t.lastIndexOf("/"),o=i>=0?t.substring(0,i+1):"";t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((r,l)=>{this.downloader.downloadText(t,c=>{try{const a=this.createTextureAtlas(c,o,t,s);let h=a.pages.length,m=!1;if(h===0){this.success(e,t,a),r(a);return}for(const y of a.pages)this.loadTexture(this.texturePath(o,y.name,s),(A,u)=>{m||(y.setTexture(u),--h===0&&(this.success(e,t,a),r(a)))},(A,u)=>{if(!m){const g=`Couldn't load texture ${t} page image: ${A}`;this.error(n,t,g),l(g)}m=!0})}catch(a){const h=`Couldn't parse texture atlas ${t}: ${a.message}`;this.error(n,t,h),l(h)}},(c,a)=>{const h=`Couldn't load texture atlas ${t}: status ${c}, ${a}`;this.error(n,t,h),l(h)})}))}loadTextureAtlasButNoTextures(t,e=()=>{},n=()=>{}){const s=t.lastIndexOf("/"),i=s>=0?t.substring(0,s+1):"";t=this.start(t),!this.reuseAssets(t,e,n)&&(this.cache.assetsLoaded[t]=new Promise((o,r)=>{this.downloader.downloadText(t,l=>{try{const c=this.createTextureAtlas(l,i,t);this.success(e,t,c),o(c)}catch(c){const a=`Couldn't parse texture atlas ${t}: ${c.message}`;this.error(n,t,a),r(a)}},(l,c)=>{const a=`Couldn't load texture atlas ${t}: status ${l}, ${c}`;this.error(n,t,a),r(a)})}))}async loadBinaryAsync(t){return new Promise((e,n)=>{this.loadBinary(t,(s,i)=>e(i),(s,i)=>n(i))})}async loadJsonAsync(t){return new Promise((e,n)=>{this.loadJson(t,(s,i)=>e(i),(s,i)=>n(i))})}async loadTextureAsync(t){return new Promise((e,n)=>{this.loadTexture(t,(s,i)=>e(i),(s,i)=>n(i))})}async loadTextureAtlasAsync(t){return new Promise((e,n)=>{this.loadTextureAtlas(t,(s,i)=>e(i),(s,i)=>n(i))})}async loadTextureAtlasButNoTexturesAsync(t){return new Promise((e,n)=>{this.loadTextureAtlasButNoTextures(t,(s,i)=>e(i),(s,i)=>n(i))})}setCache(t){this.cache=t}get(t){return this.cache.assets[this.pathPrefix+t]}require(t){t=this.pathPrefix+t;const e=this.cache.assets[t];if(e)return e;const n=this.errors[t];throw Error(`Asset not found: ${t}${n?` ${n}`:""}`)}remove(t){t=this.pathPrefix+t;const e=this.cache.assets[t];return e.dispose&&e.dispose(),delete this.cache.assets[t],delete this.cache.assetsRefCount[t],delete this.cache.assetsLoaded[t],e}removeAll(){for(const t in this.cache.assets){const e=this.cache.assets[t];e.dispose&&e.dispose()}this.cache.assets={},this.cache.assetsLoaded={},this.cache.assetsRefCount={}}isLoadingComplete(){return this.toLoad===0}getToLoad(){return this.toLoad}getLoaded(){return this.loaded}dispose(){this.removeAll()}disposeAsset(t){const e=this.cache.assets[t];if(e instanceof ht){e.dispose();return}this.disposeAssetInternal(t)}hasErrors(){return Object.keys(this.errors).length>0}getErrors(){return this.errors}disposeAssetInternal(t){if(this.cache.assetsRefCount[t]>0&&--this.cache.assetsRefCount[t]===0)return this.remove(t)}createTextureAtlas(t,e,n,s){const i=new ht(t);i.dispose=()=>{var o;if(!(this.cache.assetsRefCount[n]<=0)){this.disposeAssetInternal(n);for(const r of i.pages)(o=r.texture)==null||o.dispose()}};for(const o of i.pages){const r=this.texturePath(e,o.name,s);this.texturePmaInfo[this.pathPrefix+r]=o.pma}return i}createTexture(t,e,n){const s=this.textureLoader(n,e),i=s.dispose.bind(s);return s.dispose=()=>{this.disposeAssetInternal(t)&&i()},s}texturePath(t,e,n){return n?n[e]:t+e}}const nt=class nt{constructor(){T(this,"assets",{});T(this,"assetsRefCount",{});T(this,"assetsLoaded",{})}static getCache(t){const e=nt.AVAILABLE_CACHES.get(t);if(e)return e;const n=new nt;return nt.AVAILABLE_CACHES.set(t,n),n}async addAsset(t,e){return this.assetsLoaded[t]=Promise.resolve(e),this.assets[t]=e,e}getAsset(t){return this.assetsLoaded[t]}};T(nt,"AVAILABLE_CACHES",new Map);let lt=nt;class bt{constructor(){T(this,"callbacks",{});T(this,"rawDataUris",{})}dataUriToString(t){if(!t.startsWith("data:"))throw new Error("Not a data URI.");let e=t.indexOf("base64,");return e!==-1?(e+=7,atob(t.substr(e))):t.substr(t.indexOf(",")+1)}base64ToUint8Array(t){var e=window.atob(t),n=e.length,s=new Uint8Array(n);for(let i=0;i{this.finish(t,i.status,i.responseText)};i.onload=o,i.onerror=o,i.send()}downloadJson(t,e,n){this.downloadText(t,s=>{e(JSON.parse(s))},n)}downloadBinary(t,e,n){if(this.start(t,e,n))return;const s=this.rawDataUris[t];if(s&&!s.includes(".")){try{this.finish(t,200,this.dataUriToUint8Array(s))}catch(r){this.finish(t,400,JSON.stringify(r))}return}const i=new XMLHttpRequest;i.open("GET",s||t,!0),i.responseType="arraybuffer";const o=()=>{this.finish(t,i.status,i.response)};i.onload=()=>{i.status===200||i.status===0?this.finish(t,200,new Uint8Array(i.response)):o()},i.onerror=o,i.send()}start(t,e,n){let s=this.callbacks[t];try{if(s)return!0;this.callbacks[t]=s=[]}finally{s.push(e,n)}}finish(t,e,n){const s=this.callbacks[t];if(delete this.callbacks[t],e===200||e===0)for(let i=0,o=s.length;iD.newFloatArray(16)))}update(t,e){if(!t)throw new Error("skeleton cannot be null.");const n=this.boundingBoxes,s=this.polygons,i=this.polygonPool,o=t.slots,r=o.length;n.length=0,i.freeAll(s),s.length=0;for(let l=0;l=this.minX&&t<=this.maxX&&e>=this.minY&&e<=this.maxY}aabbIntersectsSegment(t,e,n,s){const i=this.minX,o=this.minY,r=this.maxX,l=this.maxY;if(t<=i&&n<=i||e<=o&&s<=o||t>=r&&n>=r||e>=l&&s>=l)return!1;const c=(s-e)/(n-t);let a=c*(i-t)+e;if(a>o&&ao&&ai&&hi&&ht.minX&&this.minYt.minY}containsPoint(t,e){const n=this.polygons;for(let s=0,i=n.length;s=n||a=n){const h=s[l];h+(n-c)/(a-c)*(s[o]-h)=h&&f<=A||f>=A&&f<=h)&&(f>=e&&f<=s||f>=s&&f<=e)){const x=(a*L-c*g)/C;if((x>=m&&x<=u||x>=u&&x<=m)&&(x>=n&&x<=i||x>=i&&x<=n))return!0}h=A,m=u}return!1}getPolygon(t){if(!t)throw new Error("boundingBox cannot be null.");const e=this.boundingBoxes.indexOf(t);return e===-1?null:this.polygons[e]}getWidth(){return this.maxX-this.minX}getHeight(){return this.maxY-this.minY}}class z{constructor(){T(this,"convexPolygons",[]);T(this,"convexPolygonsIndices",[]);T(this,"indicesArray",[]);T(this,"isConcaveArray",[]);T(this,"triangles",[]);T(this,"polygonPool",new at(()=>[]));T(this,"polygonIndicesPool",new at(()=>[]))}triangulate(t){const e=t;let n=t.length>>1;const s=this.indicesArray;s.length=0;for(let r=0;r3;){let r=n-1,l=0,c=1;for(;;){t:if(!i[l]){const m=s[r]<<1,y=s[l]<<1,A=s[c]<<1,u=e[m],g=e[m+1],b=e[y],L=e[y+1],C=e[A],f=e[A+1];for(let x=c+10);r=l>0?l-1:n-1,c=l+10?l-1:n-1,h=l0&&(s.push(r),i.push(o),r=this.polygonPool.obtain(),o=this.polygonIndicesPool.obtain()),r.length=0,r.push(u,g,b,L),r.push(C,f),o.length=0,o.push(m,y,A),c=z.winding(u,g,b,L,C,f),l=m}r.length>0&&(s.push(r),i.push(o));for(let a=0,h=s.length;a=0;a--)r=s[a],r.length===0?(s.splice(a,1),this.polygonPool.free(r),o=i[a],i.splice(a,1),this.polygonIndicesPool.free(o)):r.push(r[0],r[1]);return s}static isConcave(t,e,n,s){const i=s[t>0?t-1:e-1]<<1,o=s[t]<<1,r=s[t+1=0}static winding(t,e,n,s,i,o){return t*(o-s)+n*(e-o)+i*(s-e)>=0?1:-1}}class wt{constructor(){T(this,"triangulator",null);T(this,"clippingPolygon",[]);T(this,"clippingPolygons",[]);T(this,"clipOutput",[]);T(this,"clippedVertices",[]);T(this,"clippedUVs",[]);T(this,"clippedTriangles",[]);T(this,"inverseVertices",[]);T(this,"_clippedVerticesTyped",new Float32Array(1024));T(this,"_clippedUVsTyped",new Float32Array(1024));T(this,"_clippedTrianglesTyped",new Uint16Array(1024));T(this,"clippedVerticesTyped",new Float32Array(0));T(this,"clippedUVsTyped",new Float32Array(0));T(this,"clippedTrianglesTyped",new Uint16Array(0));T(this,"clippedVerticesLength",0);T(this,"clippedUVsLength",0);T(this,"clippedTrianglesLength",0);T(this,"scratch",[]);T(this,"inverse",!1);T(this,"clipAttachment",null)}clipStart(t,e,n){if(this.clipAttachment)return;const s=n.worldVerticesLength;this.clipAttachment=n,this.inverse=n.inverse;const i=D.setArraySize(this.clippingPolygon,s);n.computeWorldVertices(t,e,0,s,i,0,2);const o=this.clippingPolygon,r=this.makeClockwise(o);r||this.inverse||n.convex?(r||this.makeConvex(o),this.clippingPolygon.push(o[0],o[1]),this.clippingPolygons.push(o)):(this.triangulator===null&&(this.triangulator=new z),this.clippingPolygons.push(...this.triangulator.decompose(o,this.triangulator.triangulate(o))))}clipEnd(t){this.clipAttachment&&(t&&this.clipAttachment.endSlot!==t.data||(this.clipAttachment=null,this.clippingPolygons.length=0))}isClipping(){return this.clipAttachment!=null}clipTriangles(t,e,n,s,i,o,r,l){return s&&i&&o&&typeof r=="boolean"&&typeof l=="number"?this.clipTrianglesRender(t,e,n,s,i,o,r,l):this.clipTrianglesNoRender(t,e,n)}clipTrianglesNoRender(t,e,n){const s=this.clippedVertices;s.length=0;const i=this.clippedTriangles;i.length=0;let o=0;if(this.inverse){const h=this.clippingPolygons[0];for(let m=0;m>1,I=s.length;const R=D.setArraySize(s,I+P);D.arrayCopy(f,x,R,I,P),I=i.length;const v=D.setArraySize(i,I+3*(M-2));for(let V=1;V>1;const P=D.setArraySize(s,f+x);D.arrayCopy(a,0,P,f,x),f=i.length;const M=D.setArraySize(i,f+3*(S-2));S--;for(let I=1;I>1;let F=c.length;const N=D.setArraySize(c,F+G*l);for(let X=0;X>1;q===0&&(U=P-v,O=R-S,B=L-R,K=v-C,q=1/(U*B-O*K));const E=D.setArraySize(c,d+_*l);for(let Y=0;Y>1;let Y=this.clippedVerticesLength;const G=Y+k*o,F=this.clippedUVsLength+k*2;r.length>1;J===0&&(O=M-V,B=v-P,K=L-v,q=V-C,J=1/(O*K-B*q));const k=p+E*o;r.length=2?(a=this.clipOutput,h=this.scratch):(a=this.scratch,h=this.clipOutput);const m=r;a.length=8;const y=a;y[0]=t,y[1]=e,y[2]=n,y[3]=s,y[4]=i,y[5]=o,y[6]=t,y[7]=e,h.length=0;const A=r.length-4;for(let u=0;;u+=2){const g=m[u],b=m[u+1],L=g-m[u+2],C=b-m[u+3],f=h.length,x=a;t=x[0],e=x[1];let S=C*(g-t)-L*(b-e);for(let M=2,I=a.length-2;M<=I;M+=2){n=x[M],s=x[M+1];const R=C*(g-n)-L*(b-s);if(S>0)if(R>0)h.push(n,s);else{const v=n-t,V=s-e,w=S/(v*C-V*L);w>=0&&w<=1?(h.push(t+v*w,e+V*w),c=!0):h.push(n,s)}else if(R>0){const v=n-t,V=s-e,w=S/(v*C-V*L);w>=0&&w<=1?(h.push(t+v*w,e+V*w,n,s),c=!0):h.push(n,s)}else c=!0;t=n,e=s,S=R}if(f===h.length)return l.length=0,!0;if(h.push(h[0],h[1]),u===A)break;const P=h;h=a,h.length=0,a=P}if(l!==h){l.length=0;for(let u=0,g=h.length-2;u=2?(c=this.clipOutput,a=this.scratch):(c=this.scratch,a=this.clipOutput),c.length=8;let h=r,m=c;m[0]=t,m[1]=e,m[2]=n,m[3]=s,m[4]=i,m[5]=o,m[6]=t,m[7]=e,a.length=0;for(let y=0;;y+=2){const A=h[y],u=h[y+1],g=A-h[y+2],b=u-h[y+3],L=a.length,C=this.inverseVertices.length;this.inverseVertices.push(0),m=c,t=m[0],e=m[1];let f=b*(A-t)-g*(u-e);for(let P=2,M=c.length-2;P<=M;P+=2){n=m[P],s=m[P+1];const I=b*(A-n)-g*(u-s);if(f>0)if(I>0)a.push(n,s);else{const R=n-t,v=s-e,V=f/(R*b-v*g);if(V>=0&&V<=1){const w=t+R*V,U=e+v*V;a.push(w,U),this.inverseVertices.push(w,U,n,s)}else a.push(n,s)}else if(I>0){const R=n-t,v=s-e,V=f/(R*b-v*g);if(V>=0&&V<=1){const w=t+R*V,U=e+v*V;this.inverseVertices.push(w,U),a.push(w,U,n,s)}else a.push(n,s)}else this.inverseVertices.push(n,s);t=n,e=s,f=I}const x=this.inverseVertices.length-C-1;if(x>=6?this.inverseVertices[C]=x:this.inverseVertices.length=C,L===a.length||(a.push(a[0],a[1]),y===l))break;const S=a;a=c,a.length=0,c=S}}makeClockwise(t){const e=t,n=t.length;let s=!0,i=!0,o=0,r=e[n-2],l=e[n-1],c=e[0],a=e[1];for(let m=2;m=0,r=c,l=a,c=y,a=A}o+=c*e[1]-e[0]*a;const h=(c-r)*(e[1]-a)-(a-l)*(e[0]-c);if(i=i&&h<=0,s=s&&h>=0,o>=0){for(let m=0,y=n-2,A=n>>1;m=0&&(s[a]>l||s[a]===l&&s[a+1]>c);a-=2)s[a+2]=s[a],s[a+3]=s[a+1];s[a+2]=l,s[a+3]=c}n[0]=s[0],n[1]=s[1],n[2]=s[2],n[3]=s[3];let i=4;for(let r=4;r=0&&(i-=2,i!==2););n[i]=l,n[i+1]=c}n[i]=s[e-4],n[i+1]=s[e-3];const o=i;i+=2;for(let r=e-6;r>=0;r-=2,i+=2){const l=s[r],c=s[r+1];for(;(n[i-2]-n[i-4])*(c-n[i-3])-(n[i-1]-n[i-3])*(l-n[i-4])>=0&&(i-=2,i!==o););n[i]=l,n[i+1]=c}t.length=i-2}}class St{constructor(t,e,n={}){T(this,"skeleton");T(this,"adapter");T(this,"positionInheritanceFactorX",0);T(this,"positionInheritanceFactorY",0);T(this,"rotationInheritanceFactor",0);T(this,"hasLastTransform",!1);T(this,"lastX",0);T(this,"lastY",0);T(this,"lastZ",0);T(this,"lastRotation",0);T(this,"currentTransform",{x:0,y:0,z:0,rotation:0});T(this,"currentPosition",{x:0,y:0,z:0});T(this,"lastPosition",{x:0,y:0,z:0});this.skeleton=t,this.adapter=e,this.positionInheritanceFactorX=n.positionInheritanceX??0,this.positionInheritanceFactorY=n.positionInheritanceY??0,this.rotationInheritanceFactor=n.rotationInheritance??0}get positionInheritanceX(){return this.positionInheritanceFactorX}get positionInheritanceY(){return this.positionInheritanceFactorY}setPositionInheritance(t,e){const n=this.positionInheritanceFactorX===0&&this.positionInheritanceFactorY===0,s=t!==0||e!==0;this.positionInheritanceFactorX=t,this.positionInheritanceFactorY=e,n&&s&&this.resetPosition()}get rotationInheritance(){return this.rotationInheritanceFactor}set rotationInheritance(t){const e=this.rotationInheritanceFactor===0;this.rotationInheritanceFactor=t,e&&t!==0&&this.resetRotation()}resetPosition(){const t=this.currentTransform,e=!this.hasLastTransform&&this.rotationInheritanceFactor!==0;this.adapter.readTransform(t,e),this.lastX=t.x,this.lastY=t.y,this.lastZ=t.z,e&&(this.lastRotation=t.rotation),this.hasLastTransform=!0}resetRotation(){const t=this.currentTransform;this.adapter.readTransform(t,!0),this.lastRotation=t.rotation,this.hasLastTransform||(this.lastX=t.x,this.lastY=t.y,this.lastZ=t.z),this.hasLastTransform=!0}resetTransform(){const t=this.currentTransform;this.adapter.readTransform(t,!0),this.setLastTransform(t.x,t.y,t.z,t.rotation)}applyTransformMovement(){const t=this.positionInheritanceFactorX!==0||this.positionInheritanceFactorY!==0,e=this.rotationInheritanceFactor!==0;if(!t&&!e)return;const n=this.currentTransform;this.adapter.readTransform(n,e);const{x:s,y:i,z:o}=n,r=e?n.rotation:this.lastRotation,l=s!==this.lastX||i!==this.lastY||o!==this.lastZ;if(this.hasLastTransform){if(!l&&r===this.lastRotation)return;t&&l&&this.applyPositionMovement(s,i,o),e&&r!==this.lastRotation&&this.applyRotationMovement(r)}this.setLastTransform(s,i,o,r)}applyPositionMovement(t,e,n){const s=this.currentPosition;s.x=t,s.y=e,s.z=n,this.adapter.worldToSkeleton(s);const i=this.lastPosition;i.x=this.lastX,i.y=this.lastY,i.z=this.lastZ,this.adapter.worldToSkeleton(i),this.skeleton.physicsTranslate((s.x-i.x)*this.positionInheritanceFactorX,(s.y-i.y)*this.positionInheritanceFactorY)}applyRotationMovement(t){const e=this.rotationInheritanceFactor;e!==0&&this.skeleton.physicsRotate(0,0,this.getRotationDelta(t,this.lastRotation)*e)}setLastTransform(t,e,n,s){this.lastX=t,this.lastY=e,this.lastZ=n,this.lastRotation=s,this.hasLastTransform=!0}getRotationDelta(t,e){let n=t-e;return n=(n+180)%360-180,n<-180?n+360:n}}class Mt{constructor(){T(this,"commandPool",new xt);T(this,"worldVertices",new Float32Array(12*1024));T(this,"quadIndices",new Uint16Array([0,1,2,2,3,0]));T(this,"clipping",new wt);T(this,"renderCommands",[])}render(t,e=!1,n,s=2,i=0){var c,a;this.commandPool.reset(),this.renderCommands.length=0;const o=this.clipping;let r=0;const l=t.drawOrder.appliedPose;for(let h=0,m=l.length;h>1;const w=u.sequence,U=w.resolveIndex(A);f=w.getUVs(U),x=u.triangles,S=x.length,M=(a=w.regions[U])==null?void 0:a.texture}else if(u instanceof rt){o.clipEnd(y),o.clipStart(t,y,u);continue}else{o.clipEnd(y);continue}if(!M){o.clipEnd(y);continue}const I=t.color;let R,v;if(e){let w;if(n){w=Math.floor(n[3]*I.a*g.a*P.a*255);const U=Math.floor(w*n[0]*I.r*g.r*P.r),O=Math.floor(w*n[1]*I.g*g.g*P.g),B=Math.floor(w*n[2]*I.b*g.b*P.b);R=w<<24|U<<16|O<<8|B}else{w=Math.floor(I.a*g.a*P.a*255);const U=Math.floor(w*I.r*g.r*P.r),O=Math.floor(w*I.g*g.g*P.g),B=Math.floor(w*I.b*g.b*P.b);R=w<<24|U<<16|O<<8|B}if(v=4278190080,A.darkColor){const{r:U,g:O,b:B}=A.darkColor;v=4278190080|Math.floor(U*w)<<16|Math.floor(O*w)<<8|Math.floor(B*w)}}else{if(n){const w=Math.floor(n[3]*I.a*g.a*P.a*255),U=Math.floor(n[0]*I.r*g.r*P.r*255),O=Math.floor(n[1]*I.g*g.g*P.g*255),B=Math.floor(n[2]*I.b*g.b*P.b*255);R=w<<24|U<<16|O<<8|B}else{const w=Math.floor(I.a*g.a*P.a*255),U=Math.floor(I.r*g.r*P.r*255),O=Math.floor(I.g*g.g*P.g*255),B=Math.floor(I.b*g.b*P.b*255);R=w<<24|U<<16|O<<8|B}if(v=0,A.darkColor){const{r:w,g:U,b:O}=A.darkColor;v=Math.floor(w*255)<<16|Math.floor(U*255)<<8|Math.floor(O*255)}}o.isClipping()&&(o.clipTrianglesUnpacked(L,0,x,S,f,s),L=o.clippedVerticesTyped,C=o.clippedVerticesLength/s,f=o.clippedUVsTyped,x=o.clippedTrianglesTyped,S=o.clippedTrianglesLength);const V=this.commandPool.getCommand(C,S,s);if(V.blendMode=y.data.blendMode,V.texture=M,V.positions.set(L.subarray(0,C*s)),s>=3)for(let w=2,U=C*s;w=t*n&&i._indices.length>=e){s=i;break}if(s)this.pool.splice(this.pool.indexOf(s),1),s.next=void 0,s.numVertices=t,s.numIndices=e,s.positions=s._positions.subarray(0,t*n),s.uvs=s._uvs.subarray(0,t<<1),s.colors=s._colors.subarray(0,t),s.darkColors=s._darkColors.subarray(0,t),s.indices=s._indices.subarray(0,e);else{const i=new Float32Array(t*n),o=new Float32Array(t<<1),r=new Uint32Array(t),l=new Uint32Array(t),c=new Uint16Array(e);s={positions:i,uvs:o,colors:r,darkColors:l,indices:c,_positions:i,_uvs:o,_colors:r,_darkColors:l,_indices:c,numVertices:t,numIndices:e,blendMode:Tt.Normal,texture:null}}return this.inUse.push(s),s}reset(){this.pool.push(...this.inUse),this.inUse.length=0}}export{Rt as ATTACH_RETAIN,Yt as ATTACH_SETUP,Ft as AlphaTimeline,Et as Animation,_t as AnimationState,Ot as AnimationStateAdapter,It as AnimationStateData,lt as AssetCache,Ct as AssetManagerBase,Vt as AtlasAttachmentLoader,kt as Attachment,Xt as AttachmentTimeline,Bt as BinaryInput,Tt as BlendMode,Nt as Bone,Dt as BoneData,$t as BonePose,zt as BoneTimeline1,Wt as BoneTimeline2,ut as BoundingBoxAttachment,qt as CURRENT,rt as ClippingAttachment,Gt as Color,Jt as Constraint,Ht as ConstraintData,Zt as ConstraintTimeline1,Kt as CurveTimeline,Qt as CurveTimeline1,jt as DebugUtils,te as DeformTimeline,bt as Downloader,ee as DrawOrder,se as DrawOrderFolderTimeline,ne as DrawOrderTimeline,ie as Event,oe as EventData,re as EventQueue,ae as EventTimeline,le as EventType,ce as FIRST,he as FakeTexture,pe as FromProperty,de as FromRotate,ue as FromScaleX,fe as FromScaleY,ge as FromShearY,me as FromX,ye as FromY,Te as HOLD,be as IkConstraint,we as IkConstraintData,xe as IkConstraintPose,Ae as IkConstraintTimeline,Pe as Inherit,Ie as InheritTimeline,Ce as IntSet,Ve as Interpolation,Le as MODE,Se as MathUtils,dt as MeshAttachment,Me as MixFrom,mt as PathAttachment,ve as PathConstraint,Ue as PathConstraintData,Re as PathConstraintMixTimeline,Ye as PathConstraintPose,Fe as PathConstraintPositionTimeline,Ee as PathConstraintSpacingTimeline,_e as Physics,Oe as PhysicsConstraint,ke as PhysicsConstraintDampingTimeline,Xe as PhysicsConstraintData,Be as PhysicsConstraintGravityTimeline,Ne as PhysicsConstraintInertiaTimeline,De as PhysicsConstraintMassTimeline,$e as PhysicsConstraintMixTimeline,ze as PhysicsConstraintPose,We as PhysicsConstraintResetTimeline,qe as PhysicsConstraintStrengthTimeline,Ge as PhysicsConstraintTimeline,Je as PhysicsConstraintWindTimeline,yt as PointAttachment,at as Pool,He as Posed,Ze as PosedActive,Ke as PosedData,Qe as PositionMode,je as Pow,ts as PowOut,es as Property,ss as RGB2Timeline,ns as RGBA2Timeline,is as RGBATimeline,os as RGBTimeline,pt as RegionAttachment,rs as RotateMode,as as RotateTimeline,ls as SETUP,cs as ScaleTimeline,hs as ScaleXTimeline,ps as ScaleYMode,ds as ScaleYTimeline,us as Sequence,fs as SequenceMode,gs as SequenceModeValues,ms as SequenceTimeline,ys as ShearTimeline,Ts as ShearXTimeline,bs as ShearYTimeline,ws as Skeleton,xs as SkeletonBinary,Lt as SkeletonBounds,wt as SkeletonClipping,As as SkeletonData,Ps as SkeletonJson,St as SkeletonPhysicsMovement,Mt as SkeletonRendererCore,Is as Skin,Cs as SkinEntry,Vs as Slider,Ls as SliderData,Ss as SliderMixTimeline,Ms as SliderPose,vs as SliderTimeline,Us as Slot,Rs as SlotCurveTimeline,Ys as SlotData,Fs as SlotPose,Es as SpacingMode,_s as StringSet,Os as Texture,ht as TextureAtlas,ks as TextureAtlasPage,Xs as TextureAtlasRegion,Bs as TextureFilter,Ns as TextureRegion,Ds as TextureWrap,$s as TimeKeeper,zs as Timeline,Ws as ToProperty,qs as ToRotate,Gs as ToScaleX,Js as ToScaleY,Hs as ToShearY,Zs as ToX,Ks as ToY,Qs as TrackEntry,js as TransformConstraint,tn as TransformConstraintData,en as TransformConstraintPose,sn as TransformConstraintTimeline,nn as TranslateTimeline,on as TranslateXTimeline,rn as TranslateYTimeline,z as Triangulator,D as Utils,an as Vector2,ln as VertexAttachment,cn as WindowedMean,hn as isBoneTimeline,pn as isConstraintTimeline,dn as isSlotTimeline}; diff --git a/dist/assets/index-2QgDjwRs.js b/dist/assets/index-DnfvUUAC.js similarity index 58% rename from dist/assets/index-2QgDjwRs.js rename to dist/assets/index-DnfvUUAC.js index e5cbb5f..cc29236 100644 --- a/dist/assets/index-2QgDjwRs.js +++ b/dist/assets/index-DnfvUUAC.js @@ -1,4 +1,4 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-Cxn3bPhQ.js","assets/index-DxBJZqWf.js"])))=>i.map(i=>d[i]); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-hgwT4zDg.js","assets/index-BSAMR7rU.js"])))=>i.map(i=>d[i]); var YT=Object.defineProperty;var zT=(n,e,t)=>e in n?YT(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var A=(n,e,t)=>zT(n,typeof e!="symbol"?e+"":e,t);(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(s){if(s.ep)return;s.ep=!0;const r=t(s);fetch(s.href,r)}})();/** * @vue/shared v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors @@ -7,31 +7,31 @@ var YT=Object.defineProperty;var zT=(n,e,t)=>e in n?YT(n,e,{enumerable:!0,config * @vue/reactivity v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Ci;class Bx{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!e&&Ci&&(Ci.active?(this.parent=Ci,this.index=(Ci.scopes||(Ci.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,t;if(this.scopes){const i=this.scopes.slice();for(e=0,t=i.length;e0&&--this._on===0){if(Ci===this)Ci=this.prevScope;else{let e=Ci;for(;e;){if(e.prevScope===this){e.prevScope=this.prevScope;break}e=e.prevScope}}this.prevScope=void 0}}stop(e){if(this._active){this._active=!1;let t,i;for(t=0,i=this.effects.length;t0)return;if(Pl){let e=Pl;for(Pl=void 0;e;){const t=e.next;e.next=void 0,e.flags&=-9,e=t}}let n;for(;Ml;){let e=Ml;for(Ml=void 0;e;){const t=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(i){n||(n=i)}e=t}}if(n)throw n}function zx(n){for(let e=n.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function jx(n){let e,t=n.depsTail,i=t;for(;i;){const s=i.prevDep;i.version===-1?(i===t&&(t=s),ug(i),nE(i)):e=i,i.dep.activeLink=i.prevActiveLink,i.prevActiveLink=void 0,i=s}n.deps=e,n.depsTail=t}function Sp(n){for(let e=n.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(Hx(e.dep.computed)||e.dep.version!==e.version))return!0;return!!n._dirty}function Hx(n){if(n.flags&4&&!(n.flags&16)||(n.flags&=-17,n.globalVersion===Vl)||(n.globalVersion=Vl,!n.isSSR&&n.flags&128&&(!n.deps&&!n._dirty||!Sp(n))))return;n.flags|=2;const e=n.dep,t=Gt,i=Kn;Gt=n,Kn=!0;try{zx(n);const s=n.fn(n._value);(e.version===0||xs(s,n._value))&&(n.flags|=128,n._value=s,e.version++)}catch(s){throw e.version++,s}finally{Gt=t,Kn=i,jx(n),n.flags&=-3}}function ug(n,e=!1){const{dep:t,prevSub:i,nextSub:s}=n;if(i&&(i.nextSub=s,n.prevSub=void 0),s&&(s.prevSub=i,n.nextSub=void 0),t.subs===n&&(t.subs=i,!i&&t.computed)){t.computed.flags&=-5;for(let r=t.computed.deps;r;r=r.nextDep)ug(r,!0)}!e&&!--t.sc&&t.map&&t.map.delete(t.key)}function nE(n){const{prevDep:e,nextDep:t}=n;e&&(e.nextDep=t,n.prevDep=void 0),t&&(t.prevDep=e,n.nextDep=void 0)}let Kn=!0;const Gx=[];function dr(){Gx.push(Kn),Kn=!1}function ur(){const n=Gx.pop();Kn=n===void 0?!0:n}function uv(n){const{cleanup:e}=n;if(n.cleanup=void 0,e){const t=Gt;Gt=void 0;try{e()}finally{Gt=t}}}let Vl=0;class sE{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class hg{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!Gt||!Kn||Gt===this.computed)return;let t=this.activeLink;if(t===void 0||t.sub!==Gt)t=this.activeLink=new sE(Gt,this),Gt.deps?(t.prevDep=Gt.depsTail,Gt.depsTail.nextDep=t,Gt.depsTail=t):Gt.deps=Gt.depsTail=t,Wx(t);else if(t.version===-1&&(t.version=this.version,t.nextDep)){const i=t.nextDep;i.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=i),t.prevDep=Gt.depsTail,t.nextDep=void 0,Gt.depsTail.nextDep=t,Gt.depsTail=t,Gt.deps===t&&(Gt.deps=i)}return t}trigger(e){this.version++,Vl++,this.notify(e)}notify(e){cg();try{for(let t=this.subs;t;t=t.prevSub)t.sub.notify()&&t.sub.dep.notify()}finally{dg()}}}function Wx(n){if(n.dep.sc++,n.sub.flags&4){const e=n.dep.computed;if(e&&!n.dep.subs){e.flags|=20;for(let i=e.deps;i;i=i.nextDep)Wx(i)}const t=n.dep.subs;t!==n&&(n.prevSub=t,t&&(t.nextSub=n)),n.dep.subs=n}}const Ld=new WeakMap,ko=Symbol(""),Cp=Symbol(""),Xl=Symbol("");function zi(n,e,t){if(Kn&&Gt){let i=Ld.get(n);i||Ld.set(n,i=new Map);let s=i.get(t);s||(i.set(t,s=new hg),s.map=i,s.key=t),s.track()}}function Gs(n,e,t,i,s,r){const o=Ld.get(n);if(!o){Vl++;return}const a=c=>{c&&c.trigger()};if(cg(),e==="clear")o.forEach(a);else{const c=et(n),l=c&&Nu(t);if(c&&t==="length"){const d=Number(i);o.forEach((u,h)=>{(h==="length"||h===Xl||!wn(h)&&h>=d)&&a(u)})}else switch((t!==void 0||o.has(void 0))&&a(o.get(t)),l&&a(o.get(Xl)),e){case"add":c?l&&a(o.get("length")):(a(o.get(ko)),Ea(n)&&a(o.get(Cp)));break;case"delete":c||(a(o.get(ko)),Ea(n)&&a(o.get(Cp)));break;case"set":Ea(n)&&a(o.get(ko));break}}dg()}function rE(n,e){const t=Ld.get(n);return t&&t.get(e)}function ta(n){const e=_t(n);return e===n?e:(zi(e,"iterate",Xl),xn(n)?e:e.map(ts))}function Vu(n){return zi(n=_t(n),"iterate",Xl),n}function gs(n,e){return hr(n)?Ba(or(n)?ts(e):e):ts(e)}const oE={__proto__:null,[Symbol.iterator](){return Th(this,Symbol.iterator,n=>gs(this,n))},concat(...n){return ta(this).concat(...n.map(e=>et(e)?ta(e):e))},entries(){return Th(this,"entries",n=>(n[1]=gs(this,n[1]),n))},every(n,e){return Ds(this,"every",n,e,void 0,arguments)},filter(n,e){return Ds(this,"filter",n,e,t=>t.map(i=>gs(this,i)),arguments)},find(n,e){return Ds(this,"find",n,e,t=>gs(this,t),arguments)},findIndex(n,e){return Ds(this,"findIndex",n,e,void 0,arguments)},findLast(n,e){return Ds(this,"findLast",n,e,t=>gs(this,t),arguments)},findLastIndex(n,e){return Ds(this,"findLastIndex",n,e,void 0,arguments)},forEach(n,e){return Ds(this,"forEach",n,e,void 0,arguments)},includes(...n){return Eh(this,"includes",n)},indexOf(...n){return Eh(this,"indexOf",n)},join(n){return ta(this).join(n)},lastIndexOf(...n){return Eh(this,"lastIndexOf",n)},map(n,e){return Ds(this,"map",n,e,void 0,arguments)},pop(){return ol(this,"pop")},push(...n){return ol(this,"push",n)},reduce(n,...e){return hv(this,"reduce",n,e)},reduceRight(n,...e){return hv(this,"reduceRight",n,e)},shift(){return ol(this,"shift")},some(n,e){return Ds(this,"some",n,e,void 0,arguments)},splice(...n){return ol(this,"splice",n)},toReversed(){return ta(this).toReversed()},toSorted(n){return ta(this).toSorted(n)},toSpliced(...n){return ta(this).toSpliced(...n)},unshift(...n){return ol(this,"unshift",n)},values(){return Th(this,"values",n=>gs(this,n))}};function Th(n,e,t){const i=Vu(n),s=i[e]();return i!==n&&!xn(n)&&(s._next=s.next,s.next=()=>{const r=s._next();return r.done||(r.value=t(r.value)),r}),s}const aE=Array.prototype;function Ds(n,e,t,i,s,r){const o=Vu(n),a=o!==n&&!xn(n),c=o[e];if(c!==aE[e]){const u=c.apply(n,r);return a?ts(u):u}let l=t;o!==n&&(a?l=function(u,h){return t.call(this,gs(n,u),h,n)}:t.length>2&&(l=function(u,h){return t.call(this,u,h,n)}));const d=c.call(o,l,i);return a&&s?s(d):d}function hv(n,e,t,i){const s=Vu(n),r=s!==n&&!xn(n);let o=t,a=!1;s!==n&&(r?(a=i.length===0,o=function(l,d,u){return a&&(a=!1,l=gs(n,l)),t.call(this,l,gs(n,d),u,n)}):t.length>3&&(o=function(l,d,u){return t.call(this,l,d,u,n)}));const c=s[e](o,...i);return a?gs(n,c):c}function Eh(n,e,t){const i=_t(n);zi(i,"iterate",Xl);const s=i[e](...t);return(s===-1||s===!1)&&Xu(t[0])?(t[0]=_t(t[0]),i[e](...t)):s}function ol(n,e,t=[]){dr(),cg();const i=_t(n)[e].apply(n,t);return dg(),ur(),i}const lE=sg("__proto__,__v_isRef,__isVue"),qx=new Set(Object.getOwnPropertyNames(Symbol).filter(n=>n!=="arguments"&&n!=="caller").map(n=>Symbol[n]).filter(wn));function cE(n){wn(n)||(n=String(n));const e=_t(this);return zi(e,"has",n),e.hasOwnProperty(n)}class Kx{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,i){if(t==="__v_skip")return e.__v_skip;const s=this._isReadonly,r=this._isShallow;if(t==="__v_isReactive")return!s;if(t==="__v_isReadonly")return s;if(t==="__v_isShallow")return r;if(t==="__v_raw")return i===(s?r?yE:e1:r?Qx:Zx).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(i)?e:void 0;const o=et(e);if(!s){let c;if(o&&(c=oE[t]))return c;if(t==="hasOwnProperty")return cE}const a=Reflect.get(e,t,Qt(e)?e:i);if((wn(t)?qx.has(t):lE(t))||(s||zi(e,"get",t),r))return a;if(Qt(a)){const c=o&&Nu(t)?a:a.value;return s&&Ot(c)?Tp(c):c}return Ot(a)?s?Tp(a):zo(a):a}}class Jx extends Kx{constructor(e=!1){super(!1,e)}set(e,t,i,s){let r=e[t];const o=et(e)&&Nu(t);if(!this._isShallow){const l=hr(r);if(!xn(i)&&!hr(i)&&(r=_t(r),i=_t(i)),!o&&Qt(r)&&!Qt(i))return l||(r.value=i),!0}const a=o?Number(t)n,Mc=n=>Reflect.getPrototypeOf(n);function pE(n,e,t){return function(...i){const s=this.__v_raw,r=_t(s),o=Ea(r),a=n==="entries"||n===Symbol.iterator&&o,c=n==="keys"&&o,l=s[n](...i),d=t?Ap:e?Ba:ts;return!e&&zi(r,"iterate",c?Cp:ko),Ei(Object.create(l),{next(){const{value:u,done:h}=l.next();return h?{value:u,done:h}:{value:a?[d(u[0]),d(u[1])]:d(u),done:h}}})}}function Pc(n){return function(...e){return n==="delete"?!1:n==="clear"?void 0:this}}function mE(n,e){const t={get(s){const r=this.__v_raw,o=_t(r),a=_t(s);n||(xs(s,a)&&zi(o,"get",s),zi(o,"get",a));const{has:c}=Mc(o),l=e?Ap:n?Ba:ts;if(c.call(o,s))return l(r.get(s));if(c.call(o,a))return l(r.get(a));r!==o&&r.get(s)},get size(){const s=this.__v_raw;return!n&&zi(_t(s),"iterate",ko),s.size},has(s){const r=this.__v_raw,o=_t(r),a=_t(s);return n||(xs(s,a)&&zi(o,"has",s),zi(o,"has",a)),s===a?r.has(s):r.has(s)||r.has(a)},forEach(s,r){const o=this,a=o.__v_raw,c=_t(a),l=e?Ap:n?Ba:ts;return!n&&zi(c,"iterate",ko),a.forEach((d,u)=>s.call(r,l(d),l(u),o))}};return Ei(t,n?{add:Pc("add"),set:Pc("set"),delete:Pc("delete"),clear:Pc("clear")}:{add(s){const r=_t(this),o=Mc(r),a=_t(s),c=!e&&!xn(s)&&!hr(s)?a:s;return o.has.call(r,c)||xs(s,c)&&o.has.call(r,s)||xs(a,c)&&o.has.call(r,a)||(r.add(c),Gs(r,"add",c,c)),this},set(s,r){!e&&!xn(r)&&!hr(r)&&(r=_t(r));const o=_t(this),{has:a,get:c}=Mc(o);let l=a.call(o,s);l||(s=_t(s),l=a.call(o,s));const d=c.call(o,s);return o.set(s,r),l?xs(r,d)&&Gs(o,"set",s,r):Gs(o,"add",s,r),this},delete(s){const r=_t(this),{has:o,get:a}=Mc(r);let c=o.call(r,s);c||(s=_t(s),c=o.call(r,s)),a&&a.call(r,s);const l=r.delete(s);return c&&Gs(r,"delete",s,void 0),l},clear(){const s=_t(this),r=s.size!==0,o=s.clear();return r&&Gs(s,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(s=>{t[s]=pE(s,n,e)}),t}function fg(n,e){const t=mE(n,e);return(i,s,r)=>s==="__v_isReactive"?!n:s==="__v_isReadonly"?n:s==="__v_raw"?i:Reflect.get(Dt(t,s)&&s in i?t:i,s,r)}const gE={get:fg(!1,!1)},vE={get:fg(!1,!0)},bE={get:fg(!0,!1)};const Zx=new WeakMap,Qx=new WeakMap,e1=new WeakMap,yE=new WeakMap;function xE(n){switch(n){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function zo(n){return hr(n)?n:pg(n,!1,uE,gE,Zx)}function wE(n){return pg(n,!1,fE,vE,Qx)}function Tp(n){return pg(n,!0,hE,bE,e1)}function pg(n,e,t,i,s){if(!Ot(n)||n.__v_raw&&!(e&&n.__v_isReactive)||n.__v_skip||!Object.isExtensible(n))return n;const r=s.get(n);if(r)return r;const o=xE(HT(n));if(o===0)return n;const a=new Proxy(n,o===2?i:t);return s.set(n,a),a}function or(n){return hr(n)?or(n.__v_raw):!!(n&&n.__v_isReactive)}function hr(n){return!!(n&&n.__v_isReadonly)}function xn(n){return!!(n&&n.__v_isShallow)}function Xu(n){return n?!!n.__v_raw:!1}function _t(n){const e=n&&n.__v_raw;return e?_t(e):n}function Ur(n){return!Dt(n,"__v_skip")&&Object.isExtensible(n)&&Dx(n,"__v_skip",!0),n}const ts=n=>Ot(n)?zo(n):n,Ba=n=>Ot(n)?Tp(n):n;function Qt(n){return n?n.__v_isRef===!0:!1}function $e(n){return t1(n,!1)}function SE(n){return t1(n,!0)}function t1(n,e){return Qt(n)?n:new CE(n,e)}class CE{constructor(e,t){this.dep=new hg,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:_t(e),this._value=t?e:ts(e),this.__v_isShallow=t}get value(){return this.dep.track(),this._value}set value(e){const t=this._rawValue,i=this.__v_isShallow||xn(e)||hr(e);e=i?e:_t(e),xs(e,t)&&(this._rawValue=e,this._value=i?e:ts(e),this.dep.trigger())}}function P(n){return Qt(n)?n.value:n}const AE={get:(n,e,t)=>e==="__v_raw"?n:P(Reflect.get(n,e,t)),set:(n,e,t,i)=>{const s=n[e];return Qt(s)&&!Qt(t)?(s.value=t,!0):Reflect.set(n,e,t,i)}};function i1(n){return or(n)?n:new Proxy(n,AE)}function TE(n){const e=et(n)?new Array(n.length):{};for(const t in n)e[t]=_E(n,t);return e}class EE{constructor(e,t,i){this._object=e,this._defaultValue=i,this.__v_isRef=!0,this._value=void 0,this._key=wn(t)?t:String(t),this._raw=_t(e);let s=!0,r=e;if(!et(e)||wn(this._key)||!Nu(this._key))do s=!Xu(r)||xn(r);while(s&&(r=r.__v_raw));this._shallow=s}get value(){let e=this._object[this._key];return this._shallow&&(e=P(e)),this._value=e===void 0?this._defaultValue:e}set value(e){if(this._shallow&&Qt(this._raw[this._key])){const t=this._object[this._key];if(Qt(t)){t.value=e;return}}this._object[this._key]=e}get dep(){return rE(this._raw,this._key)}}function _E(n,e,t){return new EE(n,e,t)}class ME{constructor(e,t,i){this.fn=e,this.setter=t,this._value=void 0,this.dep=new hg(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Vl-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=i}notify(){if(this.flags|=16,!(this.flags&8)&&Gt!==this)return Yx(this,!0),!0}get value(){const e=this.dep.track();return Hx(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}function PE(n,e,t=!1){let i,s;return dt(n)?i=n:(i=n.get,s=n.set),new ME(i,s,t)}const Ic={},Dd=new WeakMap;let mo;function IE(n,e=!1,t=mo){if(t){let i=Dd.get(t);i||Dd.set(t,i=[]),i.push(n)}}function kE(n,e,t=Xt){const{immediate:i,deep:s,once:r,scheduler:o,augmentJob:a,call:c}=t,l=x=>s?x:xn(x)||s===!1||s===0?Ws(x,1):Ws(x);let d,u,h,f,p=!1,m=!1;if(Qt(n)?(u=()=>n.value,p=xn(n)):or(n)?(u=()=>l(n),p=!0):et(n)?(m=!0,p=n.some(x=>or(x)||xn(x)),u=()=>n.map(x=>{if(Qt(x))return x.value;if(or(x))return l(x);if(dt(x))return c?c(x,2):x()})):dt(n)?e?u=c?()=>c(n,2):n:u=()=>{if(h){dr();try{h()}finally{ur()}}const x=mo;mo=d;try{return c?c(n,3,[f]):n(f)}finally{mo=x}}:u=Es,e&&s){const x=u,C=s===!0?1/0:s;u=()=>Ws(x(),C)}const g=lg(),v=()=>{d.stop(),g&&g.active&&rg(g.effects,d)};if(r&&e){const x=e;e=(...C)=>{const T=x(...C);return v(),T}}let y=m?new Array(n.length).fill(Ic):Ic;const b=x=>{if(!(!(d.flags&1)||!d.dirty&&!x))if(e){const C=d.run();if(x||s||p||(m?C.some((T,S)=>xs(T,y[S])):xs(C,y))){h&&h();const T=mo;mo=d;try{const S=[C,y===Ic?void 0:m&&y[0]===Ic?[]:y,f];y=C,c?c(e,3,S):e(...S)}finally{mo=T}}}else d.run()};return a&&a(b),d=new Vx(u),d.scheduler=o?()=>o(b,!1):b,f=x=>IE(x,!1,d),h=d.onStop=()=>{const x=Dd.get(d);if(x){if(c)c(x,4);else for(const C of x)C();Dd.delete(d)}},e?i?b(!0):y=d.run():o?o(b.bind(null,!0),!0):d.run(),v.pause=d.pause.bind(d),v.resume=d.resume.bind(d),v.stop=v,v}function Ws(n,e=1/0,t){if(e<=0||!Ot(n)||n.__v_skip||(t=t||new Map,(t.get(n)||0)>=e))return n;if(t.set(n,e),e--,Qt(n))Ws(n.value,e,t);else if(et(n))for(let i=0;i{Ws(i,e,t)});else if(Fx(n)){for(const i in n)Ws(n[i],e,t);for(const i of Object.getOwnPropertySymbols(n))Object.prototype.propertyIsEnumerable.call(n,i)&&Ws(n[i],e,t)}return n}/** +**/let Ci;class Bx{constructor(e=!1){this.detached=e,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this._warnOnRun=!0,this.__v_skip=!0,!e&&Ci&&(Ci.active?(this.parent=Ci,this.index=(Ci.scopes||(Ci.scopes=[])).push(this)-1):(this._active=!1,this._warnOnRun=!1))}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let e,t;if(this.scopes){const i=this.scopes.slice();for(e=0,t=i.length;e0&&--this._on===0){if(Ci===this)Ci=this.prevScope;else{let e=Ci;for(;e;){if(e.prevScope===this){e.prevScope=this.prevScope;break}e=e.prevScope}}this.prevScope=void 0}}stop(e){if(this._active){this._active=!1;let t,i;for(t=0,i=this.effects.length;t0)return;if(Pl){let e=Pl;for(Pl=void 0;e;){const t=e.next;e.next=void 0,e.flags&=-9,e=t}}let n;for(;Ml;){let e=Ml;for(Ml=void 0;e;){const t=e.next;if(e.next=void 0,e.flags&=-9,e.flags&1)try{e.trigger()}catch(i){n||(n=i)}e=t}}if(n)throw n}function zx(n){for(let e=n.deps;e;e=e.nextDep)e.version=-1,e.prevActiveLink=e.dep.activeLink,e.dep.activeLink=e}function jx(n){let e,t=n.depsTail,i=t;for(;i;){const s=i.prevDep;i.version===-1?(i===t&&(t=s),ug(i),nE(i)):e=i,i.dep.activeLink=i.prevActiveLink,i.prevActiveLink=void 0,i=s}n.deps=e,n.depsTail=t}function Sp(n){for(let e=n.deps;e;e=e.nextDep)if(e.dep.version!==e.version||e.dep.computed&&(Hx(e.dep.computed)||e.dep.version!==e.version))return!0;return!!n._dirty}function Hx(n){if(n.flags&4&&!(n.flags&16)||(n.flags&=-17,n.globalVersion===Vl)||(n.globalVersion=Vl,!n.isSSR&&n.flags&128&&(!n.deps&&!n._dirty||!Sp(n))))return;n.flags|=2;const e=n.dep,t=Gt,i=Kn;Gt=n,Kn=!0;try{zx(n);const s=n.fn(n._value);(e.version===0||xs(s,n._value))&&(n.flags|=128,n._value=s,e.version++)}catch(s){throw e.version++,s}finally{Gt=t,Kn=i,jx(n),n.flags&=-3}}function ug(n,e=!1){const{dep:t,prevSub:i,nextSub:s}=n;if(i&&(i.nextSub=s,n.prevSub=void 0),s&&(s.prevSub=i,n.nextSub=void 0),t.subs===n&&(t.subs=i,!i&&t.computed)){t.computed.flags&=-5;for(let r=t.computed.deps;r;r=r.nextDep)ug(r,!0)}!e&&!--t.sc&&t.map&&t.map.delete(t.key)}function nE(n){const{prevDep:e,nextDep:t}=n;e&&(e.nextDep=t,n.prevDep=void 0),t&&(t.prevDep=e,n.nextDep=void 0)}let Kn=!0;const Gx=[];function dr(){Gx.push(Kn),Kn=!1}function ur(){const n=Gx.pop();Kn=n===void 0?!0:n}function uv(n){const{cleanup:e}=n;if(n.cleanup=void 0,e){const t=Gt;Gt=void 0;try{e()}finally{Gt=t}}}let Vl=0;class sE{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class hg{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(e){if(!Gt||!Kn||Gt===this.computed)return;let t=this.activeLink;if(t===void 0||t.sub!==Gt)t=this.activeLink=new sE(Gt,this),Gt.deps?(t.prevDep=Gt.depsTail,Gt.depsTail.nextDep=t,Gt.depsTail=t):Gt.deps=Gt.depsTail=t,Wx(t);else if(t.version===-1&&(t.version=this.version,t.nextDep)){const i=t.nextDep;i.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=i),t.prevDep=Gt.depsTail,t.nextDep=void 0,Gt.depsTail.nextDep=t,Gt.depsTail=t,Gt.deps===t&&(Gt.deps=i)}return t}trigger(e){this.version++,Vl++,this.notify(e)}notify(e){cg();try{for(let t=this.subs;t;t=t.prevSub)t.sub.notify()&&t.sub.dep.notify()}finally{dg()}}}function Wx(n){if(n.dep.sc++,n.sub.flags&4){const e=n.dep.computed;if(e&&!n.dep.subs){e.flags|=20;for(let i=e.deps;i;i=i.nextDep)Wx(i)}const t=n.dep.subs;t!==n&&(n.prevSub=t,t&&(t.nextSub=n)),n.dep.subs=n}}const Ld=new WeakMap,ko=Symbol(""),Cp=Symbol(""),Xl=Symbol("");function zi(n,e,t){if(Kn&&Gt){let i=Ld.get(n);i||Ld.set(n,i=new Map);let s=i.get(t);s||(i.set(t,s=new hg),s.map=i,s.key=t),s.track()}}function Gs(n,e,t,i,s,r){const o=Ld.get(n);if(!o){Vl++;return}const a=c=>{c&&c.trigger()};if(cg(),e==="clear")o.forEach(a);else{const c=et(n),l=c&&Nu(t);if(c&&t==="length"){const d=Number(i);o.forEach((u,h)=>{(h==="length"||h===Xl||!wn(h)&&h>=d)&&a(u)})}else switch((t!==void 0||o.has(void 0))&&a(o.get(t)),l&&a(o.get(Xl)),e){case"add":c?l&&a(o.get("length")):(a(o.get(ko)),Ea(n)&&a(o.get(Cp)));break;case"delete":c||(a(o.get(ko)),Ea(n)&&a(o.get(Cp)));break;case"set":Ea(n)&&a(o.get(ko));break}}dg()}function rE(n,e){const t=Ld.get(n);return t&&t.get(e)}function ta(n){const e=_t(n);return e===n?e:(zi(e,"iterate",Xl),xn(n)?e:e.map(ts))}function Vu(n){return zi(n=_t(n),"iterate",Xl),n}function gs(n,e){return hr(n)?Ba(or(n)?ts(e):e):ts(e)}const oE={__proto__:null,[Symbol.iterator](){return Th(this,Symbol.iterator,n=>gs(this,n))},concat(...n){return ta(this).concat(...n.map(e=>et(e)?ta(e):e))},entries(){return Th(this,"entries",n=>(n[1]=gs(this,n[1]),n))},every(n,e){return Ds(this,"every",n,e,void 0,arguments)},filter(n,e){return Ds(this,"filter",n,e,t=>t.map(i=>gs(this,i)),arguments)},find(n,e){return Ds(this,"find",n,e,t=>gs(this,t),arguments)},findIndex(n,e){return Ds(this,"findIndex",n,e,void 0,arguments)},findLast(n,e){return Ds(this,"findLast",n,e,t=>gs(this,t),arguments)},findLastIndex(n,e){return Ds(this,"findLastIndex",n,e,void 0,arguments)},forEach(n,e){return Ds(this,"forEach",n,e,void 0,arguments)},includes(...n){return Eh(this,"includes",n)},indexOf(...n){return Eh(this,"indexOf",n)},join(n){return ta(this).join(n)},lastIndexOf(...n){return Eh(this,"lastIndexOf",n)},map(n,e){return Ds(this,"map",n,e,void 0,arguments)},pop(){return ol(this,"pop")},push(...n){return ol(this,"push",n)},reduce(n,...e){return hv(this,"reduce",n,e)},reduceRight(n,...e){return hv(this,"reduceRight",n,e)},shift(){return ol(this,"shift")},some(n,e){return Ds(this,"some",n,e,void 0,arguments)},splice(...n){return ol(this,"splice",n)},toReversed(){return ta(this).toReversed()},toSorted(n){return ta(this).toSorted(n)},toSpliced(...n){return ta(this).toSpliced(...n)},unshift(...n){return ol(this,"unshift",n)},values(){return Th(this,"values",n=>gs(this,n))}};function Th(n,e,t){const i=Vu(n),s=i[e]();return i!==n&&!xn(n)&&(s._next=s.next,s.next=()=>{const r=s._next();return r.done||(r.value=t(r.value)),r}),s}const aE=Array.prototype;function Ds(n,e,t,i,s,r){const o=Vu(n),a=o!==n&&!xn(n),c=o[e];if(c!==aE[e]){const u=c.apply(n,r);return a?ts(u):u}let l=t;o!==n&&(a?l=function(u,h){return t.call(this,gs(n,u),h,n)}:t.length>2&&(l=function(u,h){return t.call(this,u,h,n)}));const d=c.call(o,l,i);return a&&s?s(d):d}function hv(n,e,t,i){const s=Vu(n),r=s!==n&&!xn(n);let o=t,a=!1;s!==n&&(r?(a=i.length===0,o=function(l,d,u){return a&&(a=!1,l=gs(n,l)),t.call(this,l,gs(n,d),u,n)}):t.length>3&&(o=function(l,d,u){return t.call(this,l,d,u,n)}));const c=s[e](o,...i);return a?gs(n,c):c}function Eh(n,e,t){const i=_t(n);zi(i,"iterate",Xl);const s=i[e](...t);return(s===-1||s===!1)&&Xu(t[0])?(t[0]=_t(t[0]),i[e](...t)):s}function ol(n,e,t=[]){dr(),cg();const i=_t(n)[e].apply(n,t);return dg(),ur(),i}const lE=sg("__proto__,__v_isRef,__isVue"),qx=new Set(Object.getOwnPropertyNames(Symbol).filter(n=>n!=="arguments"&&n!=="caller").map(n=>Symbol[n]).filter(wn));function cE(n){wn(n)||(n=String(n));const e=_t(this);return zi(e,"has",n),e.hasOwnProperty(n)}class Kx{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,i){if(t==="__v_skip")return e.__v_skip;const s=this._isReadonly,r=this._isShallow;if(t==="__v_isReactive")return!s;if(t==="__v_isReadonly")return s;if(t==="__v_isShallow")return r;if(t==="__v_raw")return i===(s?r?yE:e1:r?Qx:Zx).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(i)?e:void 0;const o=et(e);if(!s){let c;if(o&&(c=oE[t]))return c;if(t==="hasOwnProperty")return cE}const a=Reflect.get(e,t,Qt(e)?e:i);if((wn(t)?qx.has(t):lE(t))||(s||zi(e,"get",t),r))return a;if(Qt(a)){const c=o&&Nu(t)?a:a.value;return s&&Ot(c)?Tp(c):c}return Ot(a)?s?Tp(a):zo(a):a}}class Jx extends Kx{constructor(e=!1){super(!1,e)}set(e,t,i,s){let r=e[t];const o=et(e)&&Nu(t);if(!this._isShallow){const l=hr(r);if(!xn(i)&&!hr(i)&&(r=_t(r),i=_t(i)),!o&&Qt(r)&&!Qt(i))return l||(r.value=i),!0}const a=o?Number(t)n,Mc=n=>Reflect.getPrototypeOf(n);function pE(n,e,t){return function(...i){const s=this.__v_raw,r=_t(s),o=Ea(r),a=n==="entries"||n===Symbol.iterator&&o,c=n==="keys"&&o,l=s[n](...i),d=t?Ap:e?Ba:ts;return!e&&zi(r,"iterate",c?Cp:ko),Ei(Object.create(l),{next(){const{value:u,done:h}=l.next();return h?{value:u,done:h}:{value:a?[d(u[0]),d(u[1])]:d(u),done:h}}})}}function Pc(n){return function(...e){return n==="delete"?!1:n==="clear"?void 0:this}}function mE(n,e){const t={get(s){const r=this.__v_raw,o=_t(r),a=_t(s);n||(xs(s,a)&&zi(o,"get",s),zi(o,"get",a));const{has:c}=Mc(o),l=e?Ap:n?Ba:ts;if(c.call(o,s))return l(r.get(s));if(c.call(o,a))return l(r.get(a));r!==o&&r.get(s)},get size(){const s=this.__v_raw;return!n&&zi(_t(s),"iterate",ko),s.size},has(s){const r=this.__v_raw,o=_t(r),a=_t(s);return n||(xs(s,a)&&zi(o,"has",s),zi(o,"has",a)),s===a?r.has(s):r.has(s)||r.has(a)},forEach(s,r){const o=this,a=o.__v_raw,c=_t(a),l=e?Ap:n?Ba:ts;return!n&&zi(c,"iterate",ko),a.forEach((d,u)=>s.call(r,l(d),l(u),o))}};return Ei(t,n?{add:Pc("add"),set:Pc("set"),delete:Pc("delete"),clear:Pc("clear")}:{add(s){const r=_t(this),o=Mc(r),a=_t(s),c=!e&&!xn(s)&&!hr(s)?a:s;return o.has.call(r,c)||xs(s,c)&&o.has.call(r,s)||xs(a,c)&&o.has.call(r,a)||(r.add(c),Gs(r,"add",c,c)),this},set(s,r){!e&&!xn(r)&&!hr(r)&&(r=_t(r));const o=_t(this),{has:a,get:c}=Mc(o);let l=a.call(o,s);l||(s=_t(s),l=a.call(o,s));const d=c.call(o,s);return o.set(s,r),l?xs(r,d)&&Gs(o,"set",s,r):Gs(o,"add",s,r),this},delete(s){const r=_t(this),{has:o,get:a}=Mc(r);let c=o.call(r,s);c||(s=_t(s),c=o.call(r,s)),a&&a.call(r,s);const l=r.delete(s);return c&&Gs(r,"delete",s,void 0),l},clear(){const s=_t(this),r=s.size!==0,o=s.clear();return r&&Gs(s,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(s=>{t[s]=pE(s,n,e)}),t}function fg(n,e){const t=mE(n,e);return(i,s,r)=>s==="__v_isReactive"?!n:s==="__v_isReadonly"?n:s==="__v_raw"?i:Reflect.get(Dt(t,s)&&s in i?t:i,s,r)}const gE={get:fg(!1,!1)},vE={get:fg(!1,!0)},bE={get:fg(!0,!1)};const Zx=new WeakMap,Qx=new WeakMap,e1=new WeakMap,yE=new WeakMap;function xE(n){switch(n){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function zo(n){return hr(n)?n:pg(n,!1,uE,gE,Zx)}function wE(n){return pg(n,!1,fE,vE,Qx)}function Tp(n){return pg(n,!0,hE,bE,e1)}function pg(n,e,t,i,s){if(!Ot(n)||n.__v_raw&&!(e&&n.__v_isReactive)||n.__v_skip||!Object.isExtensible(n))return n;const r=s.get(n);if(r)return r;const o=xE(HT(n));if(o===0)return n;const a=new Proxy(n,o===2?i:t);return s.set(n,a),a}function or(n){return hr(n)?or(n.__v_raw):!!(n&&n.__v_isReactive)}function hr(n){return!!(n&&n.__v_isReadonly)}function xn(n){return!!(n&&n.__v_isShallow)}function Xu(n){return n?!!n.__v_raw:!1}function _t(n){const e=n&&n.__v_raw;return e?_t(e):n}function Ur(n){return!Dt(n,"__v_skip")&&Object.isExtensible(n)&&Dx(n,"__v_skip",!0),n}const ts=n=>Ot(n)?zo(n):n,Ba=n=>Ot(n)?Tp(n):n;function Qt(n){return n?n.__v_isRef===!0:!1}function $e(n){return t1(n,!1)}function SE(n){return t1(n,!0)}function t1(n,e){return Qt(n)?n:new CE(n,e)}class CE{constructor(e,t){this.dep=new hg,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:_t(e),this._value=t?e:ts(e),this.__v_isShallow=t}get value(){return this.dep.track(),this._value}set value(e){const t=this._rawValue,i=this.__v_isShallow||xn(e)||hr(e);e=i?e:_t(e),xs(e,t)&&(this._rawValue=e,this._value=i?e:ts(e),this.dep.trigger())}}function P(n){return Qt(n)?n.value:n}const AE={get:(n,e,t)=>e==="__v_raw"?n:P(Reflect.get(n,e,t)),set:(n,e,t,i)=>{const s=n[e];return Qt(s)&&!Qt(t)?(s.value=t,!0):Reflect.set(n,e,t,i)}};function i1(n){return or(n)?n:new Proxy(n,AE)}function TE(n){const e=et(n)?new Array(n.length):{};for(const t in n)e[t]=_E(n,t);return e}class EE{constructor(e,t,i){this._object=e,this._defaultValue=i,this.__v_isRef=!0,this._value=void 0,this._key=wn(t)?t:String(t),this._raw=_t(e);let s=!0,r=e;if(!et(e)||wn(this._key)||!Nu(this._key))do s=!Xu(r)||xn(r);while(s&&(r=r.__v_raw));this._shallow=s}get value(){let e=this._object[this._key];return this._shallow&&(e=P(e)),this._value=e===void 0?this._defaultValue:e}set value(e){if(this._shallow&&Qt(this._raw[this._key])){const t=this._object[this._key];if(Qt(t)){t.value=e;return}}this._object[this._key]=e}get dep(){return rE(this._raw,this._key)}}function _E(n,e,t){return new EE(n,e,t)}class ME{constructor(e,t,i){this.fn=e,this.setter=t,this._value=void 0,this.dep=new hg(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Vl-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=i}notify(){if(this.flags|=16,!(this.flags&8)&&Gt!==this)return Yx(this,!0),!0}get value(){const e=this.dep.track();return Hx(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}function PE(n,e,t=!1){let i,s;return dt(n)?i=n:(i=n.get,s=n.set),new ME(i,s,t)}const Ic={},Dd=new WeakMap;let mo;function IE(n,e=!1,t=mo){if(t){let i=Dd.get(t);i||Dd.set(t,i=[]),i.push(n)}}function kE(n,e,t=Xt){const{immediate:i,deep:s,once:r,scheduler:o,augmentJob:a,call:c}=t,l=w=>s?w:xn(w)||s===!1||s===0?Ws(w,1):Ws(w);let d,u,h,f,p=!1,m=!1;if(Qt(n)?(u=()=>n.value,p=xn(n)):or(n)?(u=()=>l(n),p=!0):et(n)?(m=!0,p=n.some(w=>or(w)||xn(w)),u=()=>n.map(w=>{if(Qt(w))return w.value;if(or(w))return l(w);if(dt(w))return c?c(w,2):w()})):dt(n)?e?u=c?()=>c(n,2):n:u=()=>{if(h){dr();try{h()}finally{ur()}}const w=mo;mo=d;try{return c?c(n,3,[f]):n(f)}finally{mo=w}}:u=Es,e&&s){const w=u,C=s===!0?1/0:s;u=()=>Ws(w(),C)}const g=lg(),v=()=>{d.stop(),g&&g.active&&rg(g.effects,d)};if(r&&e){const w=e;e=(...C)=>{const T=w(...C);return v(),T}}let y=m?new Array(n.length).fill(Ic):Ic;const b=w=>{if(!(!(d.flags&1)||!d.dirty&&!w))if(e){const C=d.run();if(w||s||p||(m?C.some((T,S)=>xs(T,y[S])):xs(C,y))){h&&h();const T=mo;mo=d;try{const S=[C,y===Ic?void 0:m&&y[0]===Ic?[]:y,f];y=C,c?c(e,3,S):e(...S)}finally{mo=T}}}else d.run()};return a&&a(b),d=new Vx(u),d.scheduler=o?()=>o(b,!1):b,f=w=>IE(w,!1,d),h=d.onStop=()=>{const w=Dd.get(d);if(w){if(c)c(w,4);else for(const C of w)C();Dd.delete(d)}},e?i?b(!0):y=d.run():o?o(b.bind(null,!0),!0):d.run(),v.pause=d.pause.bind(d),v.resume=d.resume.bind(d),v.stop=v,v}function Ws(n,e=1/0,t){if(e<=0||!Ot(n)||n.__v_skip||(t=t||new Map,(t.get(n)||0)>=e))return n;if(t.set(n,e),e--,Qt(n))Ws(n.value,e,t);else if(et(n))for(let i=0;i{Ws(i,e,t)});else if(Fx(n)){for(const i in n)Ws(n[i],e,t);for(const i of Object.getOwnPropertySymbols(n))Object.prototype.propertyIsEnumerable.call(n,i)&&Ws(n[i],e,t)}return n}/** * @vue/runtime-core v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function hc(n,e,t,i){try{return i?n(...i):n()}catch(s){Yu(s,e,t)}}function Dn(n,e,t,i){if(dt(n)){const s=hc(n,e,t,i);return s&&kx(s)&&s.catch(r=>{Yu(r,e,t)}),s}if(et(n)){const s=[];for(let r=0;r>>1,s=Zi[i],r=Yl(s);r=Yl(t)?Zi.push(n):Zi.splice(FE(e),0,n),n.flags|=1,s1()}}function s1(){Od||(Od=n1.then(o1))}function LE(n){if(!et(n))Ir&&n.id===-1?Ir.splice(ua+1,0,n):n.flags&1||(_a.push(n),n.flags|=1);else for(let e=0;eYl(t)-Yl(i));if(_a.length=0,Ir){for(let t=0;tn.id==null?n.flags&2?-1:1/0:n.id;function o1(n){try{for(us=0;us{i._d&&Vd(-1);const r=Nd(e),o=ar.length;let a;try{a=n(...s)}finally{for(let c=ar.length;c>o;c--)xg();Nd(r),i._d&&Vd(1)}return a};return i._n=!0,i._c=!0,i._d=!0,i}function me(n,e){if(Gi===null)return n;const t=Ju(Gi),i=n.dirs||(n.dirs=[]);for(let s=0;s1)return t&&dt(e)?e.call(i&&i.proxy):e}}function DE(){return!!(Ku()||Fo)}const OE=Symbol.for("v-scx"),NE=()=>Ro(OE);function ha(n,e){return gg(n,null,e)}function ei(n,e,t){return gg(n,e,t)}function gg(n,e,t=Xt){const{immediate:i,deep:s,flush:r,once:o}=t,a=Ei({},t),c=e&&i||!e&&r!=="post";let l;if(Wl){if(r==="sync"){const f=NE();l=f.__watcherHandles||(f.__watcherHandles=[])}else if(!c){const f=()=>{};return f.stop=Es,f.resume=Es,f.pause=Es,f}}const d=Qi;a.call=(f,p,m)=>Dn(f,d,p,m);let u=!1;r==="post"?a.scheduler=f=>{qi(f,d&&d.suspense)}:r!=="sync"&&(u=!0,a.scheduler=(f,p)=>{p?f():mg(f)}),a.augmentJob=f=>{e&&(f.flags|=4),u&&(f.flags|=2,d&&(f.id=d.uid,f.i=d))};const h=kE(n,e,a);return Wl&&(l?l.push(h):c&&h()),h}function $E(n,e,t){const i=this.proxy,s=ii(n)?n.includes(".")?c1(i,n):()=>i[n]:n.bind(i,i);let r;dt(e)?r=e:(r=e.handler,t=e);const o=pc(this),a=gg(s,r.bind(i),t);return o(),a}function c1(n,e){const t=e.split(".");return()=>{let i=n;for(let s=0;sn.__isTeleport,wo=n=>n&&(n.disabled||n.disabled===""),BE=n=>n&&(n.defer||n.defer===""),pv=n=>typeof SVGElement<"u"&&n instanceof SVGElement,mv=n=>typeof MathMLElement=="function"&&n instanceof MathMLElement,Ep=(n,e)=>{const t=n&&n.to;return ii(t)?e?e(t):null:t},UE={name:"Teleport",__isTeleport:!0,process(n,e,t,i,s,r,o,a,c,l){const{mc:d,pc:u,pbc:h,o:{insert:f,querySelector:p,createText:m,createComment:g,parentNode:v}}=l,y=wo(e.props);let{dynamicChildren:b}=e;const x=(S,E,_)=>{S.shapeFlag&16&&d(S.children,E,_,s,r,o,a,c)},C=(S=e)=>{const E=wo(S.props),_=S.target=Ep(S.props,p),I=_p(_,S,m,f);_&&(o!=="svg"&&pv(_)?o="svg":o!=="mathml"&&mv(_)&&(o="mathml"),s&&s.isCE&&(s.ce._teleportTargets||(s.ce._teleportTargets=new Set)).add(_),E||(x(S,_,I),gl(S,!1)))},T=S=>{const E=()=>{if(Tr.get(S)===E){if(Tr.delete(S),wo(S.props)){const _=v(S.el)||t;x(S,_,S.anchor),gl(S,!0)}C(S)}};Tr.set(S,E),qi(E,r)};if(n==null){const S=e.el=m(""),E=e.anchor=m("");if(f(S,t,i),f(E,t,i),BE(e.props)||r&&r.pendingBranch){T(e);return}y&&(x(e,t,E),gl(e,!0)),C()}else{e.el=n.el;const S=e.anchor=n.anchor,E=Tr.get(n);if(E){E.flags|=8,Tr.delete(n),T(e);return}e.targetStart=n.targetStart;const _=e.target=n.target,I=e.targetAnchor=n.targetAnchor,M=wo(n.props),k=M?t:_,B=M?S:I;if(o==="svg"||pv(_)?o="svg":(o==="mathml"||mv(_))&&(o="mathml"),b?(h(n.dynamicChildren,b,k,s,r,o,a),yg(n,e,!0)):c||u(n,e,k,B,s,r,o,a,!1),y)M?e.props&&n.props&&e.props.to!==n.props.to&&(e.props.to=n.props.to):kc(e,t,S,l,1);else if((e.props&&e.props.to)!==(n.props&&n.props.to)){const D=Ep(e.props,p);D&&(e.target=D,kc(e,D,null,l,0))}else M&&kc(e,_,I,l,1);gl(e,y)}},remove(n,e,t,{um:i,o:{remove:s}},r){const{shapeFlag:o,children:a,anchor:c,targetStart:l,targetAnchor:d,target:u,props:h}=n,f=wo(h),p=r||!f,m=Tr.get(n);if(m&&(m.flags|=8,Tr.delete(n)),u&&(s(l),s(d)),r&&s(c),!m&&(f||u)&&o&16)for(let g=0;g{n.isMounted=!0}),eo(()=>{n.isUnmounting=!0}),n}const Tn=[Function,Array],h1={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Tn,onEnter:Tn,onAfterEnter:Tn,onEnterCancelled:Tn,onBeforeLeave:Tn,onLeave:Tn,onAfterLeave:Tn,onLeaveCancelled:Tn,onBeforeAppear:Tn,onAppear:Tn,onAfterAppear:Tn,onAppearCancelled:Tn},f1=n=>{const e=n.subTree;return e.component?f1(e.component):e},YE={name:"BaseTransition",props:h1,setup(n,{slots:e}){const t=Ku(),i=XE();return()=>{const s=e.default&&g1(e.default(),!0),r=s&&s.length?p1(s):t.subTree?Ce():void 0;if(!r)return;const o=_t(n),{mode:a}=o;if(i.isLeaving)return _h(r);const c=$d(r);if(!c)return _h(r);let l=Mp(c,o,i,t,u=>l=u);c.type!==Hi&&zl(c,l);let d=t.subTree&&$d(t.subTree);if(d&&d.type!==Hi&&!So(d,c)&&f1(t).type!==Hi){let u=Mp(d,o,i,t);if(zl(d,u),a==="out-in"&&c.type!==Hi)return i.isLeaving=!0,u.afterLeave=()=>{i.isLeaving=!1,t.job.flags&8||t.update(),delete u.afterLeave,d=void 0},_h(r);a==="in-out"&&c.type!==Hi?u.delayLeave=(h,f,p)=>{const m=m1(i,d);m[String(d.key)]=d,h[Pn]=()=>{f(),h[Pn]=void 0,delete l.delayedLeave,d=void 0},l.delayedLeave=()=>{p(),delete l.delayedLeave,d=void 0}}:d=void 0}else d&&(d=void 0);return r}}};function p1(n){let e=n[0];if(n.length>1){for(const t of n)if(t.type!==Hi){e=t;break}}return e}const zE=YE;function m1(n,e){const{leavingVNodes:t}=n;let i=t.get(e.type);return i||(i=Object.create(null),t.set(e.type,i)),i}function Mp(n,e,t,i,s){const{appear:r,mode:o,persisted:a=!1,onBeforeEnter:c,onEnter:l,onAfterEnter:d,onEnterCancelled:u,onBeforeLeave:h,onLeave:f,onAfterLeave:p,onLeaveCancelled:m,onBeforeAppear:g,onAppear:v,onAfterAppear:y,onAppearCancelled:b}=e,x=String(n.key),C=m1(t,n),T=(_,I)=>{_&&Dn(_,i,9,I)},S=(_,I)=>{const M=I[1];T(_,I),et(_)?_.every(k=>k.length<=1)&&M():_.length<=1&&M()},E={mode:o,persisted:a,beforeEnter(_){let I=c;if(!t.isMounted)if(r)I=g||c;else return;_[Pn]&&_[Pn](!0);const M=C[x];M&&So(n,M)&&M.el[Pn]&&M.el[Pn](),T(I,[_])},enter(_){if(C[x]===n)return;let I=l,M=d,k=u;if(!t.isMounted)if(r)I=v||l,M=y||d,k=b||u;else return;let B=!1;_[al]=G=>{B||(B=!0,G?T(k,[_]):T(M,[_]),E.delayedLeave&&E.delayedLeave(),_[al]=void 0)};const D=_[al].bind(null,!1);I?S(I,[_,D]):D()},leave(_,I){const M=String(n.key);if(_[al]&&_[al](!0),t.isUnmounting)return I();T(h,[_]);let k=!1;_[Pn]=D=>{k||(k=!0,I(),D?T(m,[_]):T(p,[_]),_[Pn]=void 0,C[M]===n&&delete C[M])};const B=_[Pn].bind(null,!1);C[M]=n,f?S(f,[_,B]):B()},clone(_){const I=Mp(_,e,t,i,s);return s&&s(I),I}};return E}function _h(n){if(Gu(n))return n=Kr(n),n.children=null,n}function $d(n){if(!Gu(n))return Hu(n.type)&&n.children?p1(n.children):n;if(n.component)return n.component.subTree;const{shapeFlag:e,children:t}=n;if(t){if(e&16)return t[0];if(e&32&&dt(t.default))return t.default()}}function zl(n,e){if(n.shapeFlag&6&&n.component){n.transition=e;const t=n.component.subTree;zl(Hu(t.type)&&$d(t)||t,e)}else n.shapeFlag&128?(n.ssContent.transition=e.clone(n.ssContent),n.ssFallback.transition=e.clone(n.ssFallback)):n.transition=e}function g1(n,e=!1,t){let i=[],s=0;for(let r=0;r1)for(let r=0;rIl(m,e&&(et(e)?e[g]:e),t,i,s));return}if(Ma(i)&&!s){i.shapeFlag&512&&i.type.__asyncResolved&&i.component.subTree.component&&Il(n,e,t,i.component.subTree);return}const r=i.shapeFlag&4?Ju(i.component):i.el,o=s?null:r,{i:a,r:c}=n,l=e&&e.r,d=a.refs===Xt?a.refs={}:a.refs,u=a.setupState,h=_t(u),f=u===Xt?Ix:m=>gv(d,m)?!1:Dt(h,m),p=(m,g)=>!(g&&gv(d,g));if(l!=null&&l!==c){if(vv(e),ii(l))d[l]=null,f(l)&&(u[l]=null);else if(Qt(l)){const m=e;p(l,m.k)&&(l.value=null),m.k&&(d[m.k]=null)}}if(dt(c))hc(c,a,12,[o,d]);else{const m=ii(c),g=Qt(c);if(m||g){const v=()=>{if(n.f){const y=m?f(c)?u[c]:d[c]:p()||!n.k?c.value:d[n.k];if(s)et(y)&&rg(y,r);else if(et(y))y.includes(r)||y.push(r);else if(m)d[c]=[r],f(c)&&(u[c]=d[c]);else{const b=[r];p(c,n.k)&&(c.value=b),n.k&&(d[n.k]=b)}}else m?(d[c]=o,f(c)&&(u[c]=o)):g&&(p(c,n.k)&&(c.value=o),n.k&&(d[n.k]=o))};if(o){const y=()=>{v(),Bd.delete(n)};y.id=-1,Bd.set(n,y),qi(y,t)}else vv(n),v()}}}function vv(n){const e=Bd.get(n);e&&(e.flags|=8,Bd.delete(n))}Uu().requestIdleCallback;Uu().cancelIdleCallback;const Ma=n=>!!n.type.__asyncLoader,Gu=n=>n.type.__isKeepAlive;function jE(n,e){b1(n,"a",e)}function HE(n,e){b1(n,"da",e)}function b1(n,e,t=Qi){const i=n.__wdc||(n.__wdc=()=>{let s=t;for(;s;){if(s.isDeactivated)return;s=s.parent}return n()});if(Wu(e,i,t),t){let s=t.parent;for(;s&&s.parent;)Gu(s.parent.vnode)&&GE(i,e,t,s),s=s.parent}}function GE(n,e,t,i){const s=Wu(e,n,i,!0);Za(()=>{rg(i[e],s)},t)}function Wu(n,e,t=Qi,i=!1){if(t){const s=t[n]||(t[n]=[]),r=e.__weh||(e.__weh=(...o)=>{dr();const a=pc(t),c=Dn(e,t,n,o);return a(),ur(),c});return i?s.unshift(r):s.push(r),r}}const vr=n=>(e,t=Qi)=>{(!Wl||n==="sp")&&Wu(n,(...i)=>e(...i),t)},WE=vr("bm"),Sn=vr("m"),qE=vr("bu"),KE=vr("u"),eo=vr("bum"),Za=vr("um"),JE=vr("sp"),ZE=vr("rtg"),QE=vr("rtc");function e_(n,e=Qi){Wu("ec",n,e)}const t_=Symbol.for("v-ndc");function Pt(n,e,t,i){let s;const r=t,o=et(n);if(o||ii(n)){const a=o&&or(n);let c=!1,l=!1;a&&(c=!xn(n),l=hr(n),n=Vu(n)),s=new Array(n.length);for(let d=0,u=n.length;de(a,c,void 0,r));else{const a=Object.keys(n);s=new Array(a.length);for(let c=0,l=a.length;c0;return Q(),It(_e,null,[Ae("slot",l,i)],d?-2:64)}let o=n[e];o&&o._c&&(o._d=!1);const a=ar.length;Q();let c;try{const l=o&&y1(o(t)),d=t.key||r||l&&l.key;c=It(_e,{key:(d&&!wn(d)?d:`_${e}`)+(!l&&i?"_fb":"")},l||(i?i():[]),l&&n._===1?64:-2)}catch(l){for(let d=ar.length;d>a;d--)xg();throw l}finally{o&&o._c&&(o._d=!0)}return c}function y1(n){return n.some(e=>Hl(e)?!(e.type===Hi||e.type===_e&&!y1(e.children)):!0)?n:null}const Pp=n=>n?$1(n)?Ju(n):Pp(n.parent):null,kl=Ei(Object.create(null),{$:n=>n,$el:n=>n.vnode.el,$data:n=>n.data,$props:n=>n.props,$attrs:n=>n.attrs,$slots:n=>n.slots,$refs:n=>n.refs,$parent:n=>Pp(n.parent),$root:n=>Pp(n.root),$host:n=>n.ce,$emit:n=>n.emit,$options:n=>w1(n),$forceUpdate:n=>n.f||(n.f=()=>{mg(n.update)}),$nextTick:n=>n.n||(n.n=zu.bind(n.proxy)),$watch:n=>$E.bind(n)}),Mh=(n,e)=>n!==Xt&&!n.__isScriptSetup&&Dt(n,e),n_={get({_:n},e){if(e==="__v_skip")return!0;const{ctx:t,setupState:i,data:s,props:r,accessCache:o,type:a,appContext:c}=n;if(e[0]!=="$"){const h=o[e];if(h!==void 0)switch(h){case 1:return i[e];case 2:return s[e];case 4:return t[e];case 3:return r[e]}else{if(Mh(i,e))return o[e]=1,i[e];if(s!==Xt&&Dt(s,e))return o[e]=2,s[e];if(Dt(r,e))return o[e]=3,r[e];if(t!==Xt&&Dt(t,e))return o[e]=4,t[e];Ip&&(o[e]=0)}}const l=kl[e];let d,u;if(l)return e==="$attrs"&&zi(n.attrs,"get",""),l(n);if((d=a.__cssModules)&&(d=d[e]))return d;if(t!==Xt&&Dt(t,e))return o[e]=4,t[e];if(u=c.config.globalProperties,Dt(u,e))return u[e]},set({_:n},e,t){const{data:i,setupState:s,ctx:r}=n;return Mh(s,e)?(s[e]=t,!0):i!==Xt&&Dt(i,e)?(i[e]=t,!0):Dt(n.props,e)||e[0]==="$"&&e.slice(1)in n?!1:(r[e]=t,!0)},has({_:{data:n,setupState:e,accessCache:t,ctx:i,appContext:s,props:r,type:o}},a){let c;return!!(t[a]||n!==Xt&&a[0]!=="$"&&Dt(n,a)||Mh(e,a)||Dt(r,a)||Dt(i,a)||Dt(kl,a)||Dt(s.config.globalProperties,a)||(c=o.__cssModules)&&c[a])},defineProperty(n,e,t){return t.get!=null?n._.accessCache[e]=0:Dt(t,"value")&&this.set(n,e,t.value,null),Reflect.defineProperty(n,e,t)}};function bv(n){return et(n)?n.reduce((e,t)=>(e[t]=null,e),{}):n}let Ip=!0;function s_(n){const e=w1(n),t=n.proxy,i=n.ctx;Ip=!1,e.beforeCreate&&yv(e.beforeCreate,n,"bc");const{data:s,computed:r,methods:o,watch:a,provide:c,inject:l,created:d,beforeMount:u,mounted:h,beforeUpdate:f,updated:p,activated:m,deactivated:g,beforeDestroy:v,beforeUnmount:y,destroyed:b,unmounted:x,render:C,renderTracked:T,renderTriggered:S,errorCaptured:E,serverPrefetch:_,expose:I,inheritAttrs:M,components:k,directives:B,filters:D}=e;if(l&&r_(l,i,null),o)for(const Y in o){const L=o[Y];dt(L)&&(i[Y]=L.bind(t))}if(s){const Y=s.call(t,t);Ot(Y)&&(n.data=zo(Y))}if(Ip=!0,r)for(const Y in r){const L=r[Y],N=dt(L)?L.bind(t,t):dt(L.get)?L.get.bind(t,t):Es,F=!dt(L)&&dt(L.set)?L.set.bind(t):Es,$=Fe({get:N,set:F});Object.defineProperty(i,Y,{enumerable:!0,configurable:!0,get:()=>$.value,set:X=>$.value=X})}if(a)for(const Y in a)x1(a[Y],i,t,Y);if(c){const Y=dt(c)?c.call(t):c;Reflect.ownKeys(Y).forEach(L=>{l1(L,Y[L])})}d&&yv(d,n,"c");function V(Y,L){et(L)?L.forEach(N=>Y(N.bind(t))):L&&Y(L.bind(t))}if(V(WE,u),V(Sn,h),V(qE,f),V(KE,p),V(jE,m),V(HE,g),V(e_,E),V(QE,T),V(ZE,S),V(eo,y),V(Za,x),V(JE,_),et(I))if(I.length){const Y=n.exposed||(n.exposed={});I.forEach(L=>{Object.defineProperty(Y,L,{get:()=>t[L],set:N=>t[L]=N,enumerable:!0})})}else n.exposed||(n.exposed={});C&&n.render===Es&&(n.render=C),M!=null&&(n.inheritAttrs=M),k&&(n.components=k),B&&(n.directives=B),_&&v1(n)}function r_(n,e,t=Es){et(n)&&(n=kp(n));for(const i in n){const s=n[i];let r;Ot(s)?"default"in s?r=Ro(s.from||i,s.default,!0):r=Ro(s.from||i):r=Ro(s),Qt(r)?Object.defineProperty(e,i,{enumerable:!0,configurable:!0,get:()=>r.value,set:o=>r.value=o}):e[i]=r}}function yv(n,e,t){Dn(et(n)?n.map(i=>i.bind(e.proxy)):n.bind(e.proxy),e,t)}function x1(n,e,t,i){let s=i.includes(".")?c1(t,i):()=>t[i];if(ii(n)){const r=e[n];dt(r)&&ei(s,r)}else if(dt(n))ei(s,n.bind(t));else if(Ot(n))if(et(n))n.forEach(r=>x1(r,e,t,i));else{const r=dt(n.handler)?n.handler.bind(t):e[n.handler];dt(r)&&ei(s,r,n)}}function w1(n){const e=n.type,{mixins:t,extends:i}=e,{mixins:s,optionsCache:r,config:{optionMergeStrategies:o}}=n.appContext,a=r.get(e);let c;return a?c=a:!s.length&&!t&&!i?c=e:(c={},s.length&&s.forEach(l=>Ud(c,l,o,!0)),Ud(c,e,o)),Ot(e)&&r.set(e,c),c}function Ud(n,e,t,i=!1){const{mixins:s,extends:r}=e;r&&Ud(n,r,t,!0),s&&s.forEach(o=>Ud(n,o,t,!0));for(const o in e)if(!(i&&o==="expose")){const a=o_[o]||t&&t[o];n[o]=a?a(n[o],e[o]):e[o]}return n}const o_={data:xv,props:wv,emits:wv,methods:vl,computed:vl,beforeCreate:Wi,created:Wi,beforeMount:Wi,mounted:Wi,beforeUpdate:Wi,updated:Wi,beforeDestroy:Wi,beforeUnmount:Wi,destroyed:Wi,unmounted:Wi,activated:Wi,deactivated:Wi,errorCaptured:Wi,serverPrefetch:Wi,components:vl,directives:vl,watch:l_,provide:xv,inject:a_};function xv(n,e){return e?n?function(){return Ei(dt(n)?n.call(this,this):n,dt(e)?e.call(this,this):e)}:e:n}function a_(n,e){return vl(kp(n),kp(e))}function kp(n){if(et(n)){const e={};for(let t=0;te==="modelValue"||e==="model-value"?n.modelModifiers:n[`${e}Modifiers`]||n[`${qn(e)}Modifiers`]||n[`${Qr(e)}Modifiers`];function h_(n,e,...t){if(n.isUnmounted)return;const i=n.vnode.props||Xt;let s=t;const r=e.startsWith("update:"),o=r&&u_(i,e.slice(7));o&&(o.trim&&(s=t.map(d=>ii(d)?d.trim():d)),o.number&&(s=t.map(Bu)));let a,c=i[a=Sh(e)]||i[a=Sh(qn(e))];!c&&r&&(c=i[a=Sh(Qr(e))]),c&&Dn(c,n,6,s);const l=i[a+"Once"];if(l){if(!n.emitted)n.emitted={};else if(n.emitted[a])return;n.emitted[a]=!0,Dn(l,n,6,s)}}const f_=new WeakMap;function C1(n,e,t=!1){const i=t?f_:e.emitsCache,s=i.get(n);if(s!==void 0)return s;const r=n.emits;let o={},a=!1;if(!dt(n)){const c=l=>{const d=C1(l,e,!0);d&&(a=!0,Ei(o,d))};!t&&e.mixins.length&&e.mixins.forEach(c),n.extends&&c(n.extends),n.mixins&&n.mixins.forEach(c)}return!r&&!a?(Ot(n)&&i.set(n,null),null):(et(r)?r.forEach(c=>o[c]=null):Ei(o,r),Ot(n)&&i.set(n,o),o)}function qu(n,e){return!n||!Du(e)?!1:(e=e.slice(2),e=e==="Once"?e:e.replace(/Once$/,""),Dt(n,e[0].toLowerCase()+e.slice(1))||Dt(n,Qr(e))||Dt(n,e))}function Sv(n){const{type:e,vnode:t,proxy:i,withProxy:s,propsOptions:[r],slots:o,attrs:a,emit:c,render:l,renderCache:d,props:u,data:h,setupState:f,ctx:p,inheritAttrs:m}=n,g=Nd(n);let v,y;try{if(t.shapeFlag&4){const x=s||i,C=x;v=vs(l.call(C,x,d,u,f,h,p)),y=a}else{const x=e;v=vs(x.length>1?x(u,{attrs:a,slots:o,emit:c}):x(u,null)),y=e.props?a:p_(a)}}catch(x){ar.length=0,Yu(x,n,1),v=Ae(Hi)}let b=v;if(y&&m!==!1){const x=Object.keys(y),{shapeFlag:C}=b;x.length&&C&7&&(r&&x.some(Ou)&&(y=m_(y,r)),b=Kr(b,y,!1,!0))}if(t.dirs&&(b=Kr(b,null,!1,!0),b.dirs=b.dirs?b.dirs.concat(t.dirs):t.dirs),t.transition){const x=Hu(b.type)&&$d(b)||b;zl(x,t.transition)}return v=b,Nd(g),v}const p_=n=>{let e;for(const t in n)(t==="class"||t==="style"||Du(t))&&((e||(e={}))[t]=n[t]);return e},m_=(n,e)=>{const t={};for(const i in n)(!Ou(i)||!(i.slice(9)in e))&&(t[i]=n[i]);return t};function g_(n,e,t){const{props:i,children:s,component:r}=n,{props:o,children:a,patchFlag:c}=e,l=r.emitsOptions;if(e.dirs||e.transition)return!0;if(t&&c>=0){if(c&1024)return!0;if(c&16)return i?Cv(i,o,l):!!o;if(c&8){const d=e.dynamicProps;for(let u=0;uObject.create(T1),_1=n=>Object.getPrototypeOf(n)===T1;function b_(n,e,t,i=!1){const s={},r=E1();n.propsDefaults=Object.create(null),M1(n,e,s,r);for(const o in n.propsOptions[0])o in s||(s[o]=void 0);t?n.props=i?s:wE(s):n.type.props?n.props=s:n.props=r,n.attrs=r}function y_(n,e,t,i){const{props:s,attrs:r,vnode:{patchFlag:o}}=n,a=_t(s),[c]=n.propsOptions;let l=!1;if((i||o>0)&&!(o&16)){if(o&8){const d=n.vnode.dynamicProps;for(let u=0;u{c=!0;const[h,f]=P1(u,e,!0);Ei(o,h),f&&a.push(...f)};!t&&e.mixins.length&&e.mixins.forEach(d),n.extends&&d(n.extends),n.mixins&&n.mixins.forEach(d)}if(!r&&!c)return Ot(n)&&i.set(n,Ta),Ta;if(et(r))for(let d=0;dn==="_"||n==="_ctx"||n==="$stable",bg=n=>et(n)?n.map(vs):[vs(n)],w_=(n,e,t)=>{if(e._n)return e;const i=ju((...s)=>bg(e(...s)),t);return i._c=!1,i},I1=(n,e,t)=>{const i=n._ctx;for(const s in n){if(vg(s))continue;const r=n[s];if(dt(r))e[s]=w_(s,r,i);else if(r!=null){const o=bg(r);e[s]=()=>o}}},k1=(n,e)=>{const t=bg(e);n.slots.default=()=>t},R1=(n,e,t)=>{for(const i in e)(t||!vg(i))&&(n[i]=e[i])},S_=(n,e,t)=>{const i=n.slots=E1();if(n.vnode.shapeFlag&32){const s=e._;s?(R1(i,e,t),t&&Dx(i,"_",s,!0)):I1(e,i)}else e&&k1(n,e)},C_=(n,e,t)=>{const{vnode:i,slots:s}=n;let r=!0,o=Xt;if(i.shapeFlag&32){const a=e._;a?t&&a===1?r=!1:R1(s,e,t):(r=!e.$stable,I1(e,s)),o=e}else e&&(k1(n,e),o={default:1});if(r)for(const a in s)!vg(a)&&o[a]==null&&delete s[a]},qi=M_;function A_(n){return T_(n)}function T_(n,e){const t=Uu();t.__VUE__=!0;const{insert:i,remove:s,patchProp:r,createElement:o,createText:a,createComment:c,setText:l,setElementText:d,parentNode:u,nextSibling:h,setScopeId:f=Es,insertStaticContent:p}=n,m=(q,Z,se,j=null,H=null,O=null,U=void 0,W=null,ee=!!Z.dynamicChildren)=>{if(q===Z)return;q&&!So(q,Z)&&(j=le(q),X(q,H,O,!0),q=null),Z.patchFlag===-2&&(ee=!1,Z.dynamicChildren=null);const{type:ne,ref:ue,shapeFlag:xe}=Z;switch(ne){case fc:g(q,Z,se,j);break;case Hi:v(q,Z,se,j);break;case vd:q==null&&y(Z,se,j,U);break;case _e:k(q,Z,se,j,H,O,U,W,ee);break;default:xe&1?C(q,Z,se,j,H,O,U,W,ee):xe&6?B(q,Z,se,j,H,O,U,W,ee):(xe&64||xe&128)&&ne.process(q,Z,se,j,H,O,U,W,ee,fe)}ue!=null&&H?Il(ue,q&&q.ref,O,Z||q,!Z):ue==null&&q&&q.ref!=null&&Il(q.ref,null,O,q,!0)},g=(q,Z,se,j)=>{if(q==null)i(Z.el=a(Z.children),se,j);else{const H=Z.el=q.el;Z.children!==q.children&&l(H,Z.children)}},v=(q,Z,se,j)=>{q==null?i(Z.el=c(Z.children||""),se,j):Z.el=q.el},y=(q,Z,se,j)=>{[q.el,q.anchor]=p(q.children,Z,se,j,q.el,q.anchor)},b=({el:q,anchor:Z},se,j)=>{let H;for(;q&&q!==Z;)H=h(q),i(q,se,j),q=H;i(Z,se,j)},x=({el:q,anchor:Z})=>{let se;for(;q&&q!==Z;)se=h(q),s(q),q=se;s(Z)},C=(q,Z,se,j,H,O,U,W,ee)=>{if(Z.type==="svg"?U="svg":Z.type==="math"&&(U="mathml"),q==null)T(Z,se,j,H,O,U,W,ee);else{const ne=q.el&&q.el._isVueCE?q.el:null;try{ne&&ne._beginPatch(),_(q,Z,H,O,U,W,ee)}finally{ne&&ne._endPatch()}}},T=(q,Z,se,j,H,O,U,W)=>{let ee,ne;const{props:ue,shapeFlag:xe,transition:ye,dirs:Ne}=q;if(ee=q.el=o(q.type,O,ue&&ue.is,ue),xe&8?d(ee,q.children):xe&16&&E(q.children,ee,null,j,H,Ph(q,O),U,W),Ne&&ao(q,null,j,"created"),S(ee,q,q.scopeId,U,j),ue){for(const de in ue)de!=="value"&&!_l(de)&&r(ee,de,null,ue[de],O,j);"value"in ue&&r(ee,"value",null,ue.value,O),(ne=ue.onVnodeBeforeMount)&&ns(ne,j,q)}Ne&&ao(q,null,j,"beforeMount");const Be=E_(H,ye);Be&&ye.beforeEnter(ee),i(ee,Z,se),((ne=ue&&ue.onVnodeMounted)||Be||Ne)&&qi(()=>{try{ne&&ns(ne,j,q),Be&&ye.enter(ee),Ne&&ao(q,null,j,"mounted")}finally{}},H)},S=(q,Z,se,j,H)=>{if(se&&f(q,se),j)for(let O=0;O{for(let ne=ee;ne{const W=Z.el=q.el;let{patchFlag:ee,dynamicChildren:ne,dirs:ue}=Z;ee|=q.patchFlag&16;const xe=q.props||Xt,ye=Z.props||Xt;let Ne;if(se&&lo(se,!1),(Ne=ye.onVnodeBeforeUpdate)&&ns(Ne,se,Z,q),ue&&ao(Z,q,se,"beforeUpdate"),se&&lo(se,!0),ne&&(!q.dynamicChildren||q.dynamicChildren.length!==ne.length)&&(ee=0,U=!1,ne=null),(xe.innerHTML&&ye.innerHTML==null||xe.textContent&&ye.textContent==null)&&d(W,""),ne?I(q.dynamicChildren,ne,W,se,j,Ph(Z,H),O):U||L(q,Z,W,null,se,j,Ph(Z,H),O,!1),ee>0){if(ee&16)M(W,xe,ye,se,H);else if(ee&2&&xe.class!==ye.class&&r(W,"class",null,ye.class,H),ee&4&&r(W,"style",xe.style,ye.style,H),ee&8){const Be=Z.dynamicProps;for(let de=0;de{Ne&&ns(Ne,se,Z,q),ue&&ao(Z,q,se,"updated")},j)},I=(q,Z,se,j,H,O,U)=>{for(let W=0;W{if(Z!==se){if(Z!==Xt)for(const O in Z)!_l(O)&&!(O in se)&&r(q,O,Z[O],null,H,j);for(const O in se){if(_l(O))continue;const U=se[O],W=Z[O];U!==W&&O!=="value"&&r(q,O,W,U,H,j)}"value"in se&&r(q,"value",Z.value,se.value,H)}},k=(q,Z,se,j,H,O,U,W,ee)=>{const ne=Z.el=q?q.el:a(""),ue=Z.anchor=q?q.anchor:a("");let{patchFlag:xe,dynamicChildren:ye,slotScopeIds:Ne}=Z;Ne&&(W=W?W.concat(Ne):Ne),q==null?(i(ne,se,j),i(ue,se,j),E(Z.children||[],se,ue,H,O,U,W,ee)):xe>0&&xe&64&&ye&&q.dynamicChildren&&q.dynamicChildren.length===ye.length?(I(q.dynamicChildren,ye,se,H,O,U,W),(Z.key!=null||H&&Z===H.subTree)&&yg(q,Z,!0)):L(q,Z,se,ue,H,O,U,W,ee)},B=(q,Z,se,j,H,O,U,W,ee)=>{Z.slotScopeIds=W,q==null?Z.shapeFlag&512?H.ctx.activate(Z,se,j,U,ee):D(Z,se,j,H,O,U,ee):G(q,Z,ee)},D=(q,Z,se,j,H,O,U)=>{const W=q.component=D_(q,j,H);if(Gu(q)&&(W.ctx.renderer=fe),O_(W,!1,U),W.asyncDep){if(H&&H.registerDep(W,V,U),!q.el){const ee=W.subTree=Ae(Hi);v(null,ee,Z,se),q.placeholder=ee.el}}else V(W,q,Z,se,H,O,U)},G=(q,Z,se)=>{const j=Z.component=q.component;if(g_(q,Z,se))if(j.asyncDep&&!j.asyncResolved){Y(j,Z,se);return}else j.next=Z,j.update();else Z.el=q.el,j.vnode=Z},V=(q,Z,se,j,H,O,U)=>{const W=()=>{if(q.isMounted){let{next:xe,bu:ye,u:Ne,parent:Be,vnode:de}=q;{const Ze=F1(q);if(Ze){xe&&(xe.el=de.el,Y(q,xe,U)),Ze.asyncDep.then(()=>{qi(()=>{q.isUnmounted||ne()},H)});return}}let ge=xe,Ge;lo(q,!1),xe?(xe.el=de.el,Y(q,xe,U)):xe=de,ye&&gd(ye),(Ge=xe.props&&xe.props.onVnodeBeforeUpdate)&&ns(Ge,Be,xe,de),lo(q,!0);const Le=Sv(q),Ee=q.subTree;q.subTree=Le,m(Ee,Le,u(Ee.el),le(Ee),q,H,O),xe.el=Le.el,ge===null&&v_(q,Le.el),Ne&&qi(Ne,H),(Ge=xe.props&&xe.props.onVnodeUpdated)&&qi(()=>ns(Ge,Be,xe,de),H)}else{let xe;const{el:ye,props:Ne}=Z,{bm:Be,m:de,parent:ge,root:Ge,type:Le}=q,Ee=Ma(Z);lo(q,!1),Be&&gd(Be),!Ee&&(xe=Ne&&Ne.onVnodeBeforeMount)&&ns(xe,ge,Z),lo(q,!0);{Ge.ce&&Ge.ce._hasShadowRoot()&&Ge.ce._injectChildStyle(Le,q.parent?q.parent.type:void 0);const Ze=q.subTree=Sv(q);m(null,Ze,se,j,q,H,O),Z.el=Ze.el}if(de&&qi(de,H),!Ee&&(xe=Ne&&Ne.onVnodeMounted)){const Ze=Z;qi(()=>ns(xe,ge,Ze),H)}(Z.shapeFlag&256||ge&&Ma(ge.vnode)&&ge.vnode.shapeFlag&256)&&q.a&&qi(q.a,H),q.isMounted=!0,Z=se=j=null}};q.scope.on();const ee=q.effect=new Vx(W);q.scope.off();const ne=q.update=ee.run.bind(ee),ue=q.job=ee.runIfDirty.bind(ee);ue.i=q,ue.id=q.uid,ee.scheduler=()=>mg(ue),lo(q,!0),ne()},Y=(q,Z,se)=>{Z.component=q;const j=q.vnode.props;q.vnode=Z,q.next=null,y_(q,Z.props,j,se),C_(q,Z.children,se),dr(),fv(q),ur()},L=(q,Z,se,j,H,O,U,W,ee=!1)=>{const ne=q&&q.children,ue=q?q.shapeFlag:0,xe=Z.children,{patchFlag:ye,shapeFlag:Ne}=Z;if(ye>0){if(ye&128){F(ne,xe,se,j,H,O,U,W,ee);return}else if(ye&256){N(ne,xe,se,j,H,O,U,W,ee);return}}Ne&8?(ue&16&&oe(ne,H,O),xe!==ne&&d(se,xe)):ue&16?Ne&16?F(ne,xe,se,j,H,O,U,W,ee):oe(ne,H,O,!0):(ue&8&&d(se,""),Ne&16&&E(xe,se,j,H,O,U,W,ee))},N=(q,Z,se,j,H,O,U,W,ee)=>{q=q||Ta,Z=Z||Ta;const ne=q.length,ue=Z.length,xe=Math.min(ne,ue);let ye;for(ye=0;yeue?oe(q,H,O,!0,!1,xe):E(Z,se,j,H,O,U,W,ee,xe)},F=(q,Z,se,j,H,O,U,W,ee)=>{let ne=0;const ue=Z.length;let xe=q.length-1,ye=ue-1;for(;ne<=xe&&ne<=ye;){const Ne=q[ne],Be=Z[ne]=ee?Hs(Z[ne]):vs(Z[ne]);if(So(Ne,Be))m(Ne,Be,se,null,H,O,U,W,ee);else break;ne++}for(;ne<=xe&&ne<=ye;){const Ne=q[xe],Be=Z[ye]=ee?Hs(Z[ye]):vs(Z[ye]);if(So(Ne,Be))m(Ne,Be,se,null,H,O,U,W,ee);else break;xe--,ye--}if(ne>xe){if(ne<=ye){const Ne=ye+1,Be=Neye)for(;ne<=xe;)X(q[ne],H,O,!0),ne++;else{const Ne=ne,Be=ne,de=new Map;for(ne=Be;ne<=ye;ne++){const lt=Z[ne]=ee?Hs(Z[ne]):vs(Z[ne]);lt.key!=null&&de.set(lt.key,ne)}let ge,Ge=0;const Le=ye-Be+1;let Ee=!1,Ze=0;const Te=new Array(Le);for(ne=0;ne=Le){X(lt,H,O,!0);continue}let ce;if(lt.key!=null)ce=de.get(lt.key);else for(ge=Be;ge<=ye;ge++)if(Te[ge-Be]===0&&So(lt,Z[ge])){ce=ge;break}ce===void 0?X(lt,H,O,!0):(Te[ce-Be]=ne+1,ce>=Ze?Ze=ce:Ee=!0,m(lt,Z[ce],se,null,H,O,U,W,ee),Ge++)}const vi=Ee?__(Te):Ta;for(ge=vi.length-1,ne=Le-1;ne>=0;ne--){const lt=Be+ne,ce=Z[lt],he=Z[lt+1],nt=lt+1{const{el:O,type:U,transition:W,children:ee,shapeFlag:ne}=q;if(ne&6){$(q.component.subTree,Z,se,j);return}if(ne&128){q.suspense.move(Z,se,j);return}if(ne&64){U.move(q,Z,se,fe);return}if(U===_e){i(O,Z,se);for(let xe=0;xeW.enter(O),H));else{const{leave:xe,delayLeave:ye,afterLeave:Ne}=W,Be=()=>{q.ctx.isUnmounted?s(O):i(O,Z,se)},de=()=>{const ge=O._isLeaving||!!O[Pn];O._isLeaving&&O[Pn](!0),W.persisted&&!ge?Be():xe(O,()=>{Be(),Ne&&Ne()})};ye?ye(O,Be,de):de()}else i(O,Z,se)},X=(q,Z,se,j=!1,H=!1)=>{const{type:O,props:U,ref:W,children:ee,dynamicChildren:ne,shapeFlag:ue,patchFlag:xe,dirs:ye,cacheIndex:Ne,memo:Be}=q;if(xe===-2&&(H=!1),W!=null&&(dr(),Il(W,null,se,q,!0),ur()),Ne!=null&&(Z.renderCache[Ne]=void 0),ue&256){Z.ctx.deactivate(q);return}const de=ue&1&&ye,ge=!Ma(q);let Ge;if(ge&&(Ge=U&&U.onVnodeBeforeUnmount)&&ns(Ge,Z,q),ue&6)J(q.component,se,j);else{if(ue&128){q.suspense.unmount(se,j);return}de&&ao(q,null,Z,"beforeUnmount"),ue&64?q.type.remove(q,Z,se,fe,j):ne&&!ne.hasOnce&&(O!==_e||xe>0&&xe&64)?oe(ne,Z,se,!1,!0):(O===_e&&xe&384||!H&&ue&16)&&oe(ee,Z,se),j&&z(q)}const Le=Be!=null&&Ne==null;(ge&&(Ge=U&&U.onVnodeUnmounted)||de||Le)&&qi(()=>{Ge&&ns(Ge,Z,q),de&&ao(q,null,Z,"unmounted"),Le&&(q.el=null)},se)},z=q=>{const{type:Z,el:se,anchor:j,transition:H}=q;if(Z===_e){K(se,j);return}if(Z===vd){x(q);return}const O=()=>{s(se),H&&!H.persisted&&H.afterLeave&&H.afterLeave()};if(q.shapeFlag&1&&H&&!H.persisted){const{leave:U,delayLeave:W}=H,ee=()=>U(se,O);W?W(q.el,O,ee):ee()}else O()},K=(q,Z)=>{let se;for(;q!==Z;)se=h(q),s(q),q=se;s(Z)},J=(q,Z,se)=>{const{bum:j,scope:H,job:O,subTree:U,um:W,m:ee,a:ne}=q;Tv(ee),Tv(ne),j&&gd(j),H.stop(),O&&(O.flags|=8,X(U,q,Z,se)),W&&qi(W,Z),qi(()=>{q.isUnmounted=!0},Z)},oe=(q,Z,se,j=!1,H=!1,O=0)=>{for(let U=O;U{if(q.shapeFlag&6)return le(q.component.subTree);if(q.shapeFlag&128)return q.suspense.next();const Z=h(q.anchor||q.el),se=Z&&Z[d1];return se?h(se):Z};let ve=!1;const Se=(q,Z,se)=>{let j;q==null?Z._vnode&&(X(Z._vnode,null,null,!0),j=Z._vnode.component):m(Z._vnode||null,q,Z,null,null,null,se),Z._vnode=q,ve||(ve=!0,fv(j),r1(),ve=!1)},fe={p:m,um:X,m:$,r:z,mt:D,mc:E,pc:L,pbc:I,n:le,o:n};return{render:Se,hydrate:void 0,createApp:d_(Se)}}function Ph({type:n,props:e},t){return t==="svg"&&n==="foreignObject"||t==="mathml"&&n==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:t}function lo({effect:n,job:e},t){t?(n.flags|=32,e.flags|=4):(n.flags&=-33,e.flags&=-5)}function E_(n,e){return(!n||n&&!n.pendingBranch)&&e&&!e.persisted}function yg(n,e,t=!1){const i=n.children,s=e.children;if(et(i)&&et(s))for(let r=0;r>1,n[t[a]]0&&(e[i]=t[r-1]),t[r]=i)}}for(r=t.length,o=t[r-1];r-- >0;)t[r]=o,o=e[o];return t}function F1(n){const e=n.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:F1(e)}function Tv(n){if(n)for(let e=0;en.__isSuspense;function M_(n,e){e&&e.pendingBranch?et(n)?e.effects.push(...n):e.effects.push(n):LE(n)}const _e=Symbol.for("v-fgt"),fc=Symbol.for("v-txt"),Hi=Symbol.for("v-cmt"),vd=Symbol.for("v-stc"),ar=[];let yn=null;function Q(n=!1){ar.push(yn=n?null:[])}function xg(){ar.pop(),yn=ar[ar.length-1]||null}let jl=1;function Vd(n,e=!1){jl+=n,n<0&&yn&&e&&(yn.hasOnce=!0)}function O1(n){return n.dynamicChildren=jl>0?yn||Ta:null,xg(),jl>0&&yn&&yn.push(n),n}function te(n,e,t,i,s,r){return O1(w(n,e,t,i,s,r,!0))}function It(n,e,t,i,s){return O1(Ae(n,e,t,i,s,!0))}function Hl(n){return n?n.__v_isVNode===!0:!1}function So(n,e){return n.type===e.type&&n.key===e.key}const N1=({key:n})=>n??null,bd=({ref:n,ref_key:e,ref_for:t})=>(typeof n=="number"&&(n=""+n),n!=null?ii(n)||Qt(n)||dt(n)?{i:Gi,r:n,k:e,f:!!t}:n:null);function w(n,e=null,t=null,i=0,s=null,r=n===_e?0:1,o=!1,a=!1){const c={__v_isVNode:!0,__v_skip:!0,type:n,props:e,key:e&&N1(e),ref:e&&bd(e),scopeId:a1,slotScopeIds:null,children:t,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:i,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:Gi};return a?(Xd(c,t),r&128&&n.normalize(c)):t&&(c.shapeFlag|=ii(t)?8:16),jl>0&&!o&&yn&&(c.patchFlag>0||r&6)&&c.patchFlag!==32&&yn.push(c),c}const Ae=P_;function P_(n,e=null,t=null,i=0,s=null,r=!1){if((!n||n===t_)&&(n=Hi),Hl(n)){const a=Kr(n,e,!0);return t&&Xd(a,t),jl>0&&!r&&yn&&(a.shapeFlag&6?yn[yn.indexOf(n)]=a:yn.push(a)),a.patchFlag=-2,a}if(U_(n)&&(n=n.__vccOpts),e){e=I_(e);let{class:a,style:c}=e;a&&!ii(a)&&(e.class=Ie(a)),Ot(c)&&(Xu(c)&&!et(c)&&(c=Ei({},c)),e.style=Vt(c))}const o=ii(n)?1:D1(n)?128:Hu(n)?64:Ot(n)?4:dt(n)?2:0;return w(n,e,t,i,s,o,r,!0)}function I_(n){return n?Xu(n)||_1(n)?Ei({},n):n:null}function Kr(n,e,t=!1,i=!1){const{props:s,ref:r,patchFlag:o,children:a,transition:c}=n,l=e?R_(s||{},e):s,d={__v_isVNode:!0,__v_skip:!0,type:n.type,props:l,key:l&&N1(l),ref:e&&e.ref?t&&r?et(r)?r.concat(bd(e)):[r,bd(e)]:bd(e):r,scopeId:n.scopeId,slotScopeIds:n.slotScopeIds,children:a,target:n.target,targetStart:n.targetStart,targetAnchor:n.targetAnchor,staticCount:n.staticCount,shapeFlag:n.shapeFlag,patchFlag:e&&n.type!==_e?o===-1?16:o|16:o,dynamicProps:n.dynamicProps,dynamicChildren:n.dynamicChildren,appContext:n.appContext,dirs:n.dirs,transition:c,component:n.component,suspense:n.suspense,ssContent:n.ssContent&&Kr(n.ssContent),ssFallback:n.ssFallback&&Kr(n.ssFallback),placeholder:n.placeholder,el:n.el,anchor:n.anchor,ctx:n.ctx,ce:n.ce};return c&&i&&zl(d,c.clone(d)),d}function bt(n=" ",e=0){return Ae(fc,null,n,e)}function k_(n,e){const t=Ae(vd,null,n);return t.staticCount=e,t}function Ce(n="",e=!1){return e?(Q(),It(Hi,null,n)):Ae(Hi,null,n)}function vs(n){return n==null||typeof n=="boolean"?Ae(Hi):et(n)?Ae(_e,null,n.slice()):Hl(n)?Hs(n):Ae(fc,null,String(n))}function Hs(n){return n.el===null&&n.patchFlag!==-1||n.memo?n:Kr(n)}function Xd(n,e){let t=0;const{shapeFlag:i}=n;if(e==null)e=null;else if(et(e))t=16;else if(typeof e=="object")if(i&65){const s=e.default;s&&(s._c&&(s._d=!1),Xd(n,s()),s._c&&(s._d=!0));return}else{t=32;const s=e._;!s&&!_1(e)?e._ctx=Gi:s===3&&Gi&&(Gi.slots._===1?e._=1:(e._=2,n.patchFlag|=1024))}else if(dt(e)){if(i&65){Xd(n,{default:e});return}e={default:e,_ctx:Gi},t=32}else e=String(e),i&64?(t=16,e=[bt(e)]):t=8;n.children=e,n.shapeFlag|=t}function R_(...n){const e={};for(let t=0;tQi||Gi;let Yd,Gl;{const n=Uu(),e=(t,i)=>{let s;return(s=n[t])||(s=n[t]=[]),s.push(i),r=>{s.length>1?s.forEach(o=>o(r)):s[0](r)}};Yd=e("__VUE_INSTANCE_SETTERS__",t=>Qi=t),Gl=e("__VUE_SSR_SETTERS__",t=>Wl=t)}const pc=n=>{const e=Qi;return Yd(n),n.scope.on(),()=>{n.scope.off(),Yd(e)}},Ev=()=>{Qi&&Qi.scope.off(),Yd(null)};function $1(n){return n.vnode.shapeFlag&4}let Wl=!1;function O_(n,e=!1,t=!1){e&&Gl(e);const{props:i,children:s}=n.vnode,r=$1(n);b_(n,i,r,e),S_(n,s,t||e);const o=r?N_(n,e):void 0;return e&&Gl(!1),o}function N_(n,e){const t=n.type;n.accessCache=Object.create(null),n.proxy=new Proxy(n.ctx,n_);const{setup:i}=t;if(i){dr();const s=n.setupContext=i.length>1?B_(n):null,r=pc(n),o=hc(i,n,0,[n.props,s]),a=kx(o);if(ur(),r(),(a||n.sp)&&!Ma(n)&&v1(n),a){if(o.then(Ev,Ev),e)return o.then(c=>{Gl(!0);try{_v(n,c,e)}finally{Gl(!1)}}).catch(c=>{Yu(c,n,0)});n.asyncDep=o}else _v(n,o)}else B1(n)}function _v(n,e,t){dt(e)?n.type.__ssrInlineRender?n.ssrRender=e:n.render=e:Ot(e)&&(n.setupState=i1(e)),B1(n)}function B1(n,e,t){const i=n.type;n.render||(n.render=i.render||Es);{const s=pc(n);dr();try{s_(n)}finally{ur(),s()}}}const $_={get(n,e){return zi(n,"get",""),n[e]}};function B_(n){const e=t=>{n.exposed=t||{}};return{attrs:new Proxy(n.attrs,$_),slots:n.slots,emit:n.emit,expose:e}}function Ju(n){return n.exposed?n.exposeProxy||(n.exposeProxy=new Proxy(i1(Ur(n.exposed)),{get(e,t){if(t in e)return e[t];if(t in kl)return kl[t](n)},has(e,t){return t in e||t in kl}})):n.proxy}function U_(n){return dt(n)&&"__vccOpts"in n}const Fe=(n,e)=>PE(n,e,Wl);function ql(n,e,t){try{Vd(-1);const i=arguments.length;return i===2?Ot(e)&&!et(e)?Hl(e)?Ae(n,null,[e]):Ae(n,e):Ae(n,null,e):(i>3?t=Array.prototype.slice.call(arguments,2):i===3&&Hl(t)&&(t=[t]),Ae(n,e,t))}finally{Vd(1)}}const V_="3.5.41";/** +**/function hc(n,e,t,i){try{return i?n(...i):n()}catch(s){Yu(s,e,t)}}function Dn(n,e,t,i){if(dt(n)){const s=hc(n,e,t,i);return s&&kx(s)&&s.catch(r=>{Yu(r,e,t)}),s}if(et(n)){const s=[];for(let r=0;r>>1,s=Zi[i],r=Yl(s);r=Yl(t)?Zi.push(n):Zi.splice(FE(e),0,n),n.flags|=1,s1()}}function s1(){Od||(Od=n1.then(o1))}function LE(n){if(!et(n))Ir&&n.id===-1?Ir.splice(ua+1,0,n):n.flags&1||(_a.push(n),n.flags|=1);else for(let e=0;eYl(t)-Yl(i));if(_a.length=0,Ir){for(let t=0;tn.id==null?n.flags&2?-1:1/0:n.id;function o1(n){try{for(us=0;us{i._d&&Vd(-1);const r=Nd(e),o=ar.length;let a;try{a=n(...s)}finally{for(let c=ar.length;c>o;c--)xg();Nd(r),i._d&&Vd(1)}return a};return i._n=!0,i._c=!0,i._d=!0,i}function me(n,e){if(Gi===null)return n;const t=Ju(Gi),i=n.dirs||(n.dirs=[]);for(let s=0;s1)return t&&dt(e)?e.call(i&&i.proxy):e}}function DE(){return!!(Ku()||Fo)}const OE=Symbol.for("v-scx"),NE=()=>Ro(OE);function ha(n,e){return gg(n,null,e)}function ei(n,e,t){return gg(n,e,t)}function gg(n,e,t=Xt){const{immediate:i,deep:s,flush:r,once:o}=t,a=Ei({},t),c=e&&i||!e&&r!=="post";let l;if(Wl){if(r==="sync"){const f=NE();l=f.__watcherHandles||(f.__watcherHandles=[])}else if(!c){const f=()=>{};return f.stop=Es,f.resume=Es,f.pause=Es,f}}const d=Qi;a.call=(f,p,m)=>Dn(f,d,p,m);let u=!1;r==="post"?a.scheduler=f=>{qi(f,d&&d.suspense)}:r!=="sync"&&(u=!0,a.scheduler=(f,p)=>{p?f():mg(f)}),a.augmentJob=f=>{e&&(f.flags|=4),u&&(f.flags|=2,d&&(f.id=d.uid,f.i=d))};const h=kE(n,e,a);return Wl&&(l?l.push(h):c&&h()),h}function $E(n,e,t){const i=this.proxy,s=ii(n)?n.includes(".")?c1(i,n):()=>i[n]:n.bind(i,i);let r;dt(e)?r=e:(r=e.handler,t=e);const o=pc(this),a=gg(s,r.bind(i),t);return o(),a}function c1(n,e){const t=e.split(".");return()=>{let i=n;for(let s=0;sn.__isTeleport,wo=n=>n&&(n.disabled||n.disabled===""),BE=n=>n&&(n.defer||n.defer===""),pv=n=>typeof SVGElement<"u"&&n instanceof SVGElement,mv=n=>typeof MathMLElement=="function"&&n instanceof MathMLElement,Ep=(n,e)=>{const t=n&&n.to;return ii(t)?e?e(t):null:t},UE={name:"Teleport",__isTeleport:!0,process(n,e,t,i,s,r,o,a,c,l){const{mc:d,pc:u,pbc:h,o:{insert:f,querySelector:p,createText:m,createComment:g,parentNode:v}}=l,y=wo(e.props);let{dynamicChildren:b}=e;const w=(S,E,_)=>{S.shapeFlag&16&&d(S.children,E,_,s,r,o,a,c)},C=(S=e)=>{const E=wo(S.props),_=S.target=Ep(S.props,p),I=_p(_,S,m,f);_&&(o!=="svg"&&pv(_)?o="svg":o!=="mathml"&&mv(_)&&(o="mathml"),s&&s.isCE&&(s.ce._teleportTargets||(s.ce._teleportTargets=new Set)).add(_),E||(w(S,_,I),gl(S,!1)))},T=S=>{const E=()=>{if(Tr.get(S)===E){if(Tr.delete(S),wo(S.props)){const _=v(S.el)||t;w(S,_,S.anchor),gl(S,!0)}C(S)}};Tr.set(S,E),qi(E,r)};if(n==null){const S=e.el=m(""),E=e.anchor=m("");if(f(S,t,i),f(E,t,i),BE(e.props)||r&&r.pendingBranch){T(e);return}y&&(w(e,t,E),gl(e,!0)),C()}else{e.el=n.el;const S=e.anchor=n.anchor,E=Tr.get(n);if(E){E.flags|=8,Tr.delete(n),T(e);return}e.targetStart=n.targetStart;const _=e.target=n.target,I=e.targetAnchor=n.targetAnchor,M=wo(n.props),k=M?t:_,B=M?S:I;if(o==="svg"||pv(_)?o="svg":(o==="mathml"||mv(_))&&(o="mathml"),b?(h(n.dynamicChildren,b,k,s,r,o,a),yg(n,e,!0)):c||u(n,e,k,B,s,r,o,a,!1),y)M?e.props&&n.props&&e.props.to!==n.props.to&&(e.props.to=n.props.to):kc(e,t,S,l,1);else if((e.props&&e.props.to)!==(n.props&&n.props.to)){const D=Ep(e.props,p);D&&(e.target=D,kc(e,D,null,l,0))}else M&&kc(e,_,I,l,1);gl(e,y)}},remove(n,e,t,{um:i,o:{remove:s}},r){const{shapeFlag:o,children:a,anchor:c,targetStart:l,targetAnchor:d,target:u,props:h}=n,f=wo(h),p=r||!f,m=Tr.get(n);if(m&&(m.flags|=8,Tr.delete(n)),u&&(s(l),s(d)),r&&s(c),!m&&(f||u)&&o&16)for(let g=0;g{n.isMounted=!0}),eo(()=>{n.isUnmounting=!0}),n}const Tn=[Function,Array],h1={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Tn,onEnter:Tn,onAfterEnter:Tn,onEnterCancelled:Tn,onBeforeLeave:Tn,onLeave:Tn,onAfterLeave:Tn,onLeaveCancelled:Tn,onBeforeAppear:Tn,onAppear:Tn,onAfterAppear:Tn,onAppearCancelled:Tn},f1=n=>{const e=n.subTree;return e.component?f1(e.component):e},YE={name:"BaseTransition",props:h1,setup(n,{slots:e}){const t=Ku(),i=XE();return()=>{const s=e.default&&g1(e.default(),!0),r=s&&s.length?p1(s):t.subTree?Ce():void 0;if(!r)return;const o=_t(n),{mode:a}=o;if(i.isLeaving)return _h(r);const c=$d(r);if(!c)return _h(r);let l=Mp(c,o,i,t,u=>l=u);c.type!==Hi&&zl(c,l);let d=t.subTree&&$d(t.subTree);if(d&&d.type!==Hi&&!So(d,c)&&f1(t).type!==Hi){let u=Mp(d,o,i,t);if(zl(d,u),a==="out-in"&&c.type!==Hi)return i.isLeaving=!0,u.afterLeave=()=>{i.isLeaving=!1,t.job.flags&8||t.update(),delete u.afterLeave,d=void 0},_h(r);a==="in-out"&&c.type!==Hi?u.delayLeave=(h,f,p)=>{const m=m1(i,d);m[String(d.key)]=d,h[Pn]=()=>{f(),h[Pn]=void 0,delete l.delayedLeave,d=void 0},l.delayedLeave=()=>{p(),delete l.delayedLeave,d=void 0}}:d=void 0}else d&&(d=void 0);return r}}};function p1(n){let e=n[0];if(n.length>1){for(const t of n)if(t.type!==Hi){e=t;break}}return e}const zE=YE;function m1(n,e){const{leavingVNodes:t}=n;let i=t.get(e.type);return i||(i=Object.create(null),t.set(e.type,i)),i}function Mp(n,e,t,i,s){const{appear:r,mode:o,persisted:a=!1,onBeforeEnter:c,onEnter:l,onAfterEnter:d,onEnterCancelled:u,onBeforeLeave:h,onLeave:f,onAfterLeave:p,onLeaveCancelled:m,onBeforeAppear:g,onAppear:v,onAfterAppear:y,onAppearCancelled:b}=e,w=String(n.key),C=m1(t,n),T=(_,I)=>{_&&Dn(_,i,9,I)},S=(_,I)=>{const M=I[1];T(_,I),et(_)?_.every(k=>k.length<=1)&&M():_.length<=1&&M()},E={mode:o,persisted:a,beforeEnter(_){let I=c;if(!t.isMounted)if(r)I=g||c;else return;_[Pn]&&_[Pn](!0);const M=C[w];M&&So(n,M)&&M.el[Pn]&&M.el[Pn](),T(I,[_])},enter(_){if(C[w]===n)return;let I=l,M=d,k=u;if(!t.isMounted)if(r)I=v||l,M=y||d,k=b||u;else return;let B=!1;_[al]=G=>{B||(B=!0,G?T(k,[_]):T(M,[_]),E.delayedLeave&&E.delayedLeave(),_[al]=void 0)};const D=_[al].bind(null,!1);I?S(I,[_,D]):D()},leave(_,I){const M=String(n.key);if(_[al]&&_[al](!0),t.isUnmounting)return I();T(h,[_]);let k=!1;_[Pn]=D=>{k||(k=!0,I(),D?T(m,[_]):T(p,[_]),_[Pn]=void 0,C[M]===n&&delete C[M])};const B=_[Pn].bind(null,!1);C[M]=n,f?S(f,[_,B]):B()},clone(_){const I=Mp(_,e,t,i,s);return s&&s(I),I}};return E}function _h(n){if(Gu(n))return n=Kr(n),n.children=null,n}function $d(n){if(!Gu(n))return Hu(n.type)&&n.children?p1(n.children):n;if(n.component)return n.component.subTree;const{shapeFlag:e,children:t}=n;if(t){if(e&16)return t[0];if(e&32&&dt(t.default))return t.default()}}function zl(n,e){if(n.shapeFlag&6&&n.component){n.transition=e;const t=n.component.subTree;zl(Hu(t.type)&&$d(t)||t,e)}else n.shapeFlag&128?(n.ssContent.transition=e.clone(n.ssContent),n.ssFallback.transition=e.clone(n.ssFallback)):n.transition=e}function g1(n,e=!1,t){let i=[],s=0;for(let r=0;r1)for(let r=0;rIl(m,e&&(et(e)?e[g]:e),t,i,s));return}if(Ma(i)&&!s){i.shapeFlag&512&&i.type.__asyncResolved&&i.component.subTree.component&&Il(n,e,t,i.component.subTree);return}const r=i.shapeFlag&4?Ju(i.component):i.el,o=s?null:r,{i:a,r:c}=n,l=e&&e.r,d=a.refs===Xt?a.refs={}:a.refs,u=a.setupState,h=_t(u),f=u===Xt?Ix:m=>gv(d,m)?!1:Dt(h,m),p=(m,g)=>!(g&&gv(d,g));if(l!=null&&l!==c){if(vv(e),ii(l))d[l]=null,f(l)&&(u[l]=null);else if(Qt(l)){const m=e;p(l,m.k)&&(l.value=null),m.k&&(d[m.k]=null)}}if(dt(c))hc(c,a,12,[o,d]);else{const m=ii(c),g=Qt(c);if(m||g){const v=()=>{if(n.f){const y=m?f(c)?u[c]:d[c]:p()||!n.k?c.value:d[n.k];if(s)et(y)&&rg(y,r);else if(et(y))y.includes(r)||y.push(r);else if(m)d[c]=[r],f(c)&&(u[c]=d[c]);else{const b=[r];p(c,n.k)&&(c.value=b),n.k&&(d[n.k]=b)}}else m?(d[c]=o,f(c)&&(u[c]=o)):g&&(p(c,n.k)&&(c.value=o),n.k&&(d[n.k]=o))};if(o){const y=()=>{v(),Bd.delete(n)};y.id=-1,Bd.set(n,y),qi(y,t)}else vv(n),v()}}}function vv(n){const e=Bd.get(n);e&&(e.flags|=8,Bd.delete(n))}Uu().requestIdleCallback;Uu().cancelIdleCallback;const Ma=n=>!!n.type.__asyncLoader,Gu=n=>n.type.__isKeepAlive;function jE(n,e){b1(n,"a",e)}function HE(n,e){b1(n,"da",e)}function b1(n,e,t=Qi){const i=n.__wdc||(n.__wdc=()=>{let s=t;for(;s;){if(s.isDeactivated)return;s=s.parent}return n()});if(Wu(e,i,t),t){let s=t.parent;for(;s&&s.parent;)Gu(s.parent.vnode)&&GE(i,e,t,s),s=s.parent}}function GE(n,e,t,i){const s=Wu(e,n,i,!0);Za(()=>{rg(i[e],s)},t)}function Wu(n,e,t=Qi,i=!1){if(t){const s=t[n]||(t[n]=[]),r=e.__weh||(e.__weh=(...o)=>{dr();const a=pc(t),c=Dn(e,t,n,o);return a(),ur(),c});return i?s.unshift(r):s.push(r),r}}const vr=n=>(e,t=Qi)=>{(!Wl||n==="sp")&&Wu(n,(...i)=>e(...i),t)},WE=vr("bm"),Sn=vr("m"),qE=vr("bu"),KE=vr("u"),eo=vr("bum"),Za=vr("um"),JE=vr("sp"),ZE=vr("rtg"),QE=vr("rtc");function e_(n,e=Qi){Wu("ec",n,e)}const t_=Symbol.for("v-ndc");function Pt(n,e,t,i){let s;const r=t,o=et(n);if(o||ii(n)){const a=o&&or(n);let c=!1,l=!1;a&&(c=!xn(n),l=hr(n),n=Vu(n)),s=new Array(n.length);for(let d=0,u=n.length;de(a,c,void 0,r));else{const a=Object.keys(n);s=new Array(a.length);for(let c=0,l=a.length;c0;return Q(),It(_e,null,[Ae("slot",l,i)],d?-2:64)}let o=n[e];o&&o._c&&(o._d=!1);const a=ar.length;Q();let c;try{const l=o&&y1(o(t)),d=t.key||r||l&&l.key;c=It(_e,{key:(d&&!wn(d)?d:`_${e}`)+(!l&&i?"_fb":"")},l||(i?i():[]),l&&n._===1?64:-2)}catch(l){for(let d=ar.length;d>a;d--)xg();throw l}finally{o&&o._c&&(o._d=!0)}return c}function y1(n){return n.some(e=>Hl(e)?!(e.type===Hi||e.type===_e&&!y1(e.children)):!0)?n:null}const Pp=n=>n?$1(n)?Ju(n):Pp(n.parent):null,kl=Ei(Object.create(null),{$:n=>n,$el:n=>n.vnode.el,$data:n=>n.data,$props:n=>n.props,$attrs:n=>n.attrs,$slots:n=>n.slots,$refs:n=>n.refs,$parent:n=>Pp(n.parent),$root:n=>Pp(n.root),$host:n=>n.ce,$emit:n=>n.emit,$options:n=>w1(n),$forceUpdate:n=>n.f||(n.f=()=>{mg(n.update)}),$nextTick:n=>n.n||(n.n=zu.bind(n.proxy)),$watch:n=>$E.bind(n)}),Mh=(n,e)=>n!==Xt&&!n.__isScriptSetup&&Dt(n,e),n_={get({_:n},e){if(e==="__v_skip")return!0;const{ctx:t,setupState:i,data:s,props:r,accessCache:o,type:a,appContext:c}=n;if(e[0]!=="$"){const h=o[e];if(h!==void 0)switch(h){case 1:return i[e];case 2:return s[e];case 4:return t[e];case 3:return r[e]}else{if(Mh(i,e))return o[e]=1,i[e];if(s!==Xt&&Dt(s,e))return o[e]=2,s[e];if(Dt(r,e))return o[e]=3,r[e];if(t!==Xt&&Dt(t,e))return o[e]=4,t[e];Ip&&(o[e]=0)}}const l=kl[e];let d,u;if(l)return e==="$attrs"&&zi(n.attrs,"get",""),l(n);if((d=a.__cssModules)&&(d=d[e]))return d;if(t!==Xt&&Dt(t,e))return o[e]=4,t[e];if(u=c.config.globalProperties,Dt(u,e))return u[e]},set({_:n},e,t){const{data:i,setupState:s,ctx:r}=n;return Mh(s,e)?(s[e]=t,!0):i!==Xt&&Dt(i,e)?(i[e]=t,!0):Dt(n.props,e)||e[0]==="$"&&e.slice(1)in n?!1:(r[e]=t,!0)},has({_:{data:n,setupState:e,accessCache:t,ctx:i,appContext:s,props:r,type:o}},a){let c;return!!(t[a]||n!==Xt&&a[0]!=="$"&&Dt(n,a)||Mh(e,a)||Dt(r,a)||Dt(i,a)||Dt(kl,a)||Dt(s.config.globalProperties,a)||(c=o.__cssModules)&&c[a])},defineProperty(n,e,t){return t.get!=null?n._.accessCache[e]=0:Dt(t,"value")&&this.set(n,e,t.value,null),Reflect.defineProperty(n,e,t)}};function bv(n){return et(n)?n.reduce((e,t)=>(e[t]=null,e),{}):n}let Ip=!0;function s_(n){const e=w1(n),t=n.proxy,i=n.ctx;Ip=!1,e.beforeCreate&&yv(e.beforeCreate,n,"bc");const{data:s,computed:r,methods:o,watch:a,provide:c,inject:l,created:d,beforeMount:u,mounted:h,beforeUpdate:f,updated:p,activated:m,deactivated:g,beforeDestroy:v,beforeUnmount:y,destroyed:b,unmounted:w,render:C,renderTracked:T,renderTriggered:S,errorCaptured:E,serverPrefetch:_,expose:I,inheritAttrs:M,components:k,directives:B,filters:D}=e;if(l&&r_(l,i,null),o)for(const Y in o){const L=o[Y];dt(L)&&(i[Y]=L.bind(t))}if(s){const Y=s.call(t,t);Ot(Y)&&(n.data=zo(Y))}if(Ip=!0,r)for(const Y in r){const L=r[Y],N=dt(L)?L.bind(t,t):dt(L.get)?L.get.bind(t,t):Es,F=!dt(L)&&dt(L.set)?L.set.bind(t):Es,$=Fe({get:N,set:F});Object.defineProperty(i,Y,{enumerable:!0,configurable:!0,get:()=>$.value,set:X=>$.value=X})}if(a)for(const Y in a)x1(a[Y],i,t,Y);if(c){const Y=dt(c)?c.call(t):c;Reflect.ownKeys(Y).forEach(L=>{l1(L,Y[L])})}d&&yv(d,n,"c");function V(Y,L){et(L)?L.forEach(N=>Y(N.bind(t))):L&&Y(L.bind(t))}if(V(WE,u),V(Sn,h),V(qE,f),V(KE,p),V(jE,m),V(HE,g),V(e_,E),V(QE,T),V(ZE,S),V(eo,y),V(Za,w),V(JE,_),et(I))if(I.length){const Y=n.exposed||(n.exposed={});I.forEach(L=>{Object.defineProperty(Y,L,{get:()=>t[L],set:N=>t[L]=N,enumerable:!0})})}else n.exposed||(n.exposed={});C&&n.render===Es&&(n.render=C),M!=null&&(n.inheritAttrs=M),k&&(n.components=k),B&&(n.directives=B),_&&v1(n)}function r_(n,e,t=Es){et(n)&&(n=kp(n));for(const i in n){const s=n[i];let r;Ot(s)?"default"in s?r=Ro(s.from||i,s.default,!0):r=Ro(s.from||i):r=Ro(s),Qt(r)?Object.defineProperty(e,i,{enumerable:!0,configurable:!0,get:()=>r.value,set:o=>r.value=o}):e[i]=r}}function yv(n,e,t){Dn(et(n)?n.map(i=>i.bind(e.proxy)):n.bind(e.proxy),e,t)}function x1(n,e,t,i){let s=i.includes(".")?c1(t,i):()=>t[i];if(ii(n)){const r=e[n];dt(r)&&ei(s,r)}else if(dt(n))ei(s,n.bind(t));else if(Ot(n))if(et(n))n.forEach(r=>x1(r,e,t,i));else{const r=dt(n.handler)?n.handler.bind(t):e[n.handler];dt(r)&&ei(s,r,n)}}function w1(n){const e=n.type,{mixins:t,extends:i}=e,{mixins:s,optionsCache:r,config:{optionMergeStrategies:o}}=n.appContext,a=r.get(e);let c;return a?c=a:!s.length&&!t&&!i?c=e:(c={},s.length&&s.forEach(l=>Ud(c,l,o,!0)),Ud(c,e,o)),Ot(e)&&r.set(e,c),c}function Ud(n,e,t,i=!1){const{mixins:s,extends:r}=e;r&&Ud(n,r,t,!0),s&&s.forEach(o=>Ud(n,o,t,!0));for(const o in e)if(!(i&&o==="expose")){const a=o_[o]||t&&t[o];n[o]=a?a(n[o],e[o]):e[o]}return n}const o_={data:xv,props:wv,emits:wv,methods:vl,computed:vl,beforeCreate:Wi,created:Wi,beforeMount:Wi,mounted:Wi,beforeUpdate:Wi,updated:Wi,beforeDestroy:Wi,beforeUnmount:Wi,destroyed:Wi,unmounted:Wi,activated:Wi,deactivated:Wi,errorCaptured:Wi,serverPrefetch:Wi,components:vl,directives:vl,watch:l_,provide:xv,inject:a_};function xv(n,e){return e?n?function(){return Ei(dt(n)?n.call(this,this):n,dt(e)?e.call(this,this):e)}:e:n}function a_(n,e){return vl(kp(n),kp(e))}function kp(n){if(et(n)){const e={};for(let t=0;te==="modelValue"||e==="model-value"?n.modelModifiers:n[`${e}Modifiers`]||n[`${qn(e)}Modifiers`]||n[`${Qr(e)}Modifiers`];function h_(n,e,...t){if(n.isUnmounted)return;const i=n.vnode.props||Xt;let s=t;const r=e.startsWith("update:"),o=r&&u_(i,e.slice(7));o&&(o.trim&&(s=t.map(d=>ii(d)?d.trim():d)),o.number&&(s=t.map(Bu)));let a,c=i[a=Sh(e)]||i[a=Sh(qn(e))];!c&&r&&(c=i[a=Sh(Qr(e))]),c&&Dn(c,n,6,s);const l=i[a+"Once"];if(l){if(!n.emitted)n.emitted={};else if(n.emitted[a])return;n.emitted[a]=!0,Dn(l,n,6,s)}}const f_=new WeakMap;function C1(n,e,t=!1){const i=t?f_:e.emitsCache,s=i.get(n);if(s!==void 0)return s;const r=n.emits;let o={},a=!1;if(!dt(n)){const c=l=>{const d=C1(l,e,!0);d&&(a=!0,Ei(o,d))};!t&&e.mixins.length&&e.mixins.forEach(c),n.extends&&c(n.extends),n.mixins&&n.mixins.forEach(c)}return!r&&!a?(Ot(n)&&i.set(n,null),null):(et(r)?r.forEach(c=>o[c]=null):Ei(o,r),Ot(n)&&i.set(n,o),o)}function qu(n,e){return!n||!Du(e)?!1:(e=e.slice(2),e=e==="Once"?e:e.replace(/Once$/,""),Dt(n,e[0].toLowerCase()+e.slice(1))||Dt(n,Qr(e))||Dt(n,e))}function Sv(n){const{type:e,vnode:t,proxy:i,withProxy:s,propsOptions:[r],slots:o,attrs:a,emit:c,render:l,renderCache:d,props:u,data:h,setupState:f,ctx:p,inheritAttrs:m}=n,g=Nd(n);let v,y;try{if(t.shapeFlag&4){const w=s||i,C=w;v=vs(l.call(C,w,d,u,f,h,p)),y=a}else{const w=e;v=vs(w.length>1?w(u,{attrs:a,slots:o,emit:c}):w(u,null)),y=e.props?a:p_(a)}}catch(w){ar.length=0,Yu(w,n,1),v=Ae(Hi)}let b=v;if(y&&m!==!1){const w=Object.keys(y),{shapeFlag:C}=b;w.length&&C&7&&(r&&w.some(Ou)&&(y=m_(y,r)),b=Kr(b,y,!1,!0))}if(t.dirs&&(b=Kr(b,null,!1,!0),b.dirs=b.dirs?b.dirs.concat(t.dirs):t.dirs),t.transition){const w=Hu(b.type)&&$d(b)||b;zl(w,t.transition)}return v=b,Nd(g),v}const p_=n=>{let e;for(const t in n)(t==="class"||t==="style"||Du(t))&&((e||(e={}))[t]=n[t]);return e},m_=(n,e)=>{const t={};for(const i in n)(!Ou(i)||!(i.slice(9)in e))&&(t[i]=n[i]);return t};function g_(n,e,t){const{props:i,children:s,component:r}=n,{props:o,children:a,patchFlag:c}=e,l=r.emitsOptions;if(e.dirs||e.transition)return!0;if(t&&c>=0){if(c&1024)return!0;if(c&16)return i?Cv(i,o,l):!!o;if(c&8){const d=e.dynamicProps;for(let u=0;uObject.create(T1),_1=n=>Object.getPrototypeOf(n)===T1;function b_(n,e,t,i=!1){const s={},r=E1();n.propsDefaults=Object.create(null),M1(n,e,s,r);for(const o in n.propsOptions[0])o in s||(s[o]=void 0);t?n.props=i?s:wE(s):n.type.props?n.props=s:n.props=r,n.attrs=r}function y_(n,e,t,i){const{props:s,attrs:r,vnode:{patchFlag:o}}=n,a=_t(s),[c]=n.propsOptions;let l=!1;if((i||o>0)&&!(o&16)){if(o&8){const d=n.vnode.dynamicProps;for(let u=0;u{c=!0;const[h,f]=P1(u,e,!0);Ei(o,h),f&&a.push(...f)};!t&&e.mixins.length&&e.mixins.forEach(d),n.extends&&d(n.extends),n.mixins&&n.mixins.forEach(d)}if(!r&&!c)return Ot(n)&&i.set(n,Ta),Ta;if(et(r))for(let d=0;dn==="_"||n==="_ctx"||n==="$stable",bg=n=>et(n)?n.map(vs):[vs(n)],w_=(n,e,t)=>{if(e._n)return e;const i=ju((...s)=>bg(e(...s)),t);return i._c=!1,i},I1=(n,e,t)=>{const i=n._ctx;for(const s in n){if(vg(s))continue;const r=n[s];if(dt(r))e[s]=w_(s,r,i);else if(r!=null){const o=bg(r);e[s]=()=>o}}},k1=(n,e)=>{const t=bg(e);n.slots.default=()=>t},R1=(n,e,t)=>{for(const i in e)(t||!vg(i))&&(n[i]=e[i])},S_=(n,e,t)=>{const i=n.slots=E1();if(n.vnode.shapeFlag&32){const s=e._;s?(R1(i,e,t),t&&Dx(i,"_",s,!0)):I1(e,i)}else e&&k1(n,e)},C_=(n,e,t)=>{const{vnode:i,slots:s}=n;let r=!0,o=Xt;if(i.shapeFlag&32){const a=e._;a?t&&a===1?r=!1:R1(s,e,t):(r=!e.$stable,I1(e,s)),o=e}else e&&(k1(n,e),o={default:1});if(r)for(const a in s)!vg(a)&&o[a]==null&&delete s[a]},qi=M_;function A_(n){return T_(n)}function T_(n,e){const t=Uu();t.__VUE__=!0;const{insert:i,remove:s,patchProp:r,createElement:o,createText:a,createComment:c,setText:l,setElementText:d,parentNode:u,nextSibling:h,setScopeId:f=Es,insertStaticContent:p}=n,m=(q,Z,se,j=null,H=null,O=null,U=void 0,W=null,ee=!!Z.dynamicChildren)=>{if(q===Z)return;q&&!So(q,Z)&&(j=le(q),X(q,H,O,!0),q=null),Z.patchFlag===-2&&(ee=!1,Z.dynamicChildren=null);const{type:ne,ref:ue,shapeFlag:xe}=Z;switch(ne){case fc:g(q,Z,se,j);break;case Hi:v(q,Z,se,j);break;case vd:q==null&&y(Z,se,j,U);break;case _e:k(q,Z,se,j,H,O,U,W,ee);break;default:xe&1?C(q,Z,se,j,H,O,U,W,ee):xe&6?B(q,Z,se,j,H,O,U,W,ee):(xe&64||xe&128)&&ne.process(q,Z,se,j,H,O,U,W,ee,fe)}ue!=null&&H?Il(ue,q&&q.ref,O,Z||q,!Z):ue==null&&q&&q.ref!=null&&Il(q.ref,null,O,q,!0)},g=(q,Z,se,j)=>{if(q==null)i(Z.el=a(Z.children),se,j);else{const H=Z.el=q.el;Z.children!==q.children&&l(H,Z.children)}},v=(q,Z,se,j)=>{q==null?i(Z.el=c(Z.children||""),se,j):Z.el=q.el},y=(q,Z,se,j)=>{[q.el,q.anchor]=p(q.children,Z,se,j,q.el,q.anchor)},b=({el:q,anchor:Z},se,j)=>{let H;for(;q&&q!==Z;)H=h(q),i(q,se,j),q=H;i(Z,se,j)},w=({el:q,anchor:Z})=>{let se;for(;q&&q!==Z;)se=h(q),s(q),q=se;s(Z)},C=(q,Z,se,j,H,O,U,W,ee)=>{if(Z.type==="svg"?U="svg":Z.type==="math"&&(U="mathml"),q==null)T(Z,se,j,H,O,U,W,ee);else{const ne=q.el&&q.el._isVueCE?q.el:null;try{ne&&ne._beginPatch(),_(q,Z,H,O,U,W,ee)}finally{ne&&ne._endPatch()}}},T=(q,Z,se,j,H,O,U,W)=>{let ee,ne;const{props:ue,shapeFlag:xe,transition:ye,dirs:Ne}=q;if(ee=q.el=o(q.type,O,ue&&ue.is,ue),xe&8?d(ee,q.children):xe&16&&E(q.children,ee,null,j,H,Ph(q,O),U,W),Ne&&ao(q,null,j,"created"),S(ee,q,q.scopeId,U,j),ue){for(const de in ue)de!=="value"&&!_l(de)&&r(ee,de,null,ue[de],O,j);"value"in ue&&r(ee,"value",null,ue.value,O),(ne=ue.onVnodeBeforeMount)&&ns(ne,j,q)}Ne&&ao(q,null,j,"beforeMount");const Be=E_(H,ye);Be&&ye.beforeEnter(ee),i(ee,Z,se),((ne=ue&&ue.onVnodeMounted)||Be||Ne)&&qi(()=>{try{ne&&ns(ne,j,q),Be&&ye.enter(ee),Ne&&ao(q,null,j,"mounted")}finally{}},H)},S=(q,Z,se,j,H)=>{if(se&&f(q,se),j)for(let O=0;O{for(let ne=ee;ne{const W=Z.el=q.el;let{patchFlag:ee,dynamicChildren:ne,dirs:ue}=Z;ee|=q.patchFlag&16;const xe=q.props||Xt,ye=Z.props||Xt;let Ne;if(se&&lo(se,!1),(Ne=ye.onVnodeBeforeUpdate)&&ns(Ne,se,Z,q),ue&&ao(Z,q,se,"beforeUpdate"),se&&lo(se,!0),ne&&(!q.dynamicChildren||q.dynamicChildren.length!==ne.length)&&(ee=0,U=!1,ne=null),(xe.innerHTML&&ye.innerHTML==null||xe.textContent&&ye.textContent==null)&&d(W,""),ne?I(q.dynamicChildren,ne,W,se,j,Ph(Z,H),O):U||L(q,Z,W,null,se,j,Ph(Z,H),O,!1),ee>0){if(ee&16)M(W,xe,ye,se,H);else if(ee&2&&xe.class!==ye.class&&r(W,"class",null,ye.class,H),ee&4&&r(W,"style",xe.style,ye.style,H),ee&8){const Be=Z.dynamicProps;for(let de=0;de{Ne&&ns(Ne,se,Z,q),ue&&ao(Z,q,se,"updated")},j)},I=(q,Z,se,j,H,O,U)=>{for(let W=0;W{if(Z!==se){if(Z!==Xt)for(const O in Z)!_l(O)&&!(O in se)&&r(q,O,Z[O],null,H,j);for(const O in se){if(_l(O))continue;const U=se[O],W=Z[O];U!==W&&O!=="value"&&r(q,O,W,U,H,j)}"value"in se&&r(q,"value",Z.value,se.value,H)}},k=(q,Z,se,j,H,O,U,W,ee)=>{const ne=Z.el=q?q.el:a(""),ue=Z.anchor=q?q.anchor:a("");let{patchFlag:xe,dynamicChildren:ye,slotScopeIds:Ne}=Z;Ne&&(W=W?W.concat(Ne):Ne),q==null?(i(ne,se,j),i(ue,se,j),E(Z.children||[],se,ue,H,O,U,W,ee)):xe>0&&xe&64&&ye&&q.dynamicChildren&&q.dynamicChildren.length===ye.length?(I(q.dynamicChildren,ye,se,H,O,U,W),(Z.key!=null||H&&Z===H.subTree)&&yg(q,Z,!0)):L(q,Z,se,ue,H,O,U,W,ee)},B=(q,Z,se,j,H,O,U,W,ee)=>{Z.slotScopeIds=W,q==null?Z.shapeFlag&512?H.ctx.activate(Z,se,j,U,ee):D(Z,se,j,H,O,U,ee):G(q,Z,ee)},D=(q,Z,se,j,H,O,U)=>{const W=q.component=D_(q,j,H);if(Gu(q)&&(W.ctx.renderer=fe),O_(W,!1,U),W.asyncDep){if(H&&H.registerDep(W,V,U),!q.el){const ee=W.subTree=Ae(Hi);v(null,ee,Z,se),q.placeholder=ee.el}}else V(W,q,Z,se,H,O,U)},G=(q,Z,se)=>{const j=Z.component=q.component;if(g_(q,Z,se))if(j.asyncDep&&!j.asyncResolved){Y(j,Z,se);return}else j.next=Z,j.update();else Z.el=q.el,j.vnode=Z},V=(q,Z,se,j,H,O,U)=>{const W=()=>{if(q.isMounted){let{next:xe,bu:ye,u:Ne,parent:Be,vnode:de}=q;{const Ze=F1(q);if(Ze){xe&&(xe.el=de.el,Y(q,xe,U)),Ze.asyncDep.then(()=>{qi(()=>{q.isUnmounted||ne()},H)});return}}let ge=xe,Ge;lo(q,!1),xe?(xe.el=de.el,Y(q,xe,U)):xe=de,ye&&gd(ye),(Ge=xe.props&&xe.props.onVnodeBeforeUpdate)&&ns(Ge,Be,xe,de),lo(q,!0);const Le=Sv(q),Ee=q.subTree;q.subTree=Le,m(Ee,Le,u(Ee.el),le(Ee),q,H,O),xe.el=Le.el,ge===null&&v_(q,Le.el),Ne&&qi(Ne,H),(Ge=xe.props&&xe.props.onVnodeUpdated)&&qi(()=>ns(Ge,Be,xe,de),H)}else{let xe;const{el:ye,props:Ne}=Z,{bm:Be,m:de,parent:ge,root:Ge,type:Le}=q,Ee=Ma(Z);lo(q,!1),Be&&gd(Be),!Ee&&(xe=Ne&&Ne.onVnodeBeforeMount)&&ns(xe,ge,Z),lo(q,!0);{Ge.ce&&Ge.ce._hasShadowRoot()&&Ge.ce._injectChildStyle(Le,q.parent?q.parent.type:void 0);const Ze=q.subTree=Sv(q);m(null,Ze,se,j,q,H,O),Z.el=Ze.el}if(de&&qi(de,H),!Ee&&(xe=Ne&&Ne.onVnodeMounted)){const Ze=Z;qi(()=>ns(xe,ge,Ze),H)}(Z.shapeFlag&256||ge&&Ma(ge.vnode)&&ge.vnode.shapeFlag&256)&&q.a&&qi(q.a,H),q.isMounted=!0,Z=se=j=null}};q.scope.on();const ee=q.effect=new Vx(W);q.scope.off();const ne=q.update=ee.run.bind(ee),ue=q.job=ee.runIfDirty.bind(ee);ue.i=q,ue.id=q.uid,ee.scheduler=()=>mg(ue),lo(q,!0),ne()},Y=(q,Z,se)=>{Z.component=q;const j=q.vnode.props;q.vnode=Z,q.next=null,y_(q,Z.props,j,se),C_(q,Z.children,se),dr(),fv(q),ur()},L=(q,Z,se,j,H,O,U,W,ee=!1)=>{const ne=q&&q.children,ue=q?q.shapeFlag:0,xe=Z.children,{patchFlag:ye,shapeFlag:Ne}=Z;if(ye>0){if(ye&128){F(ne,xe,se,j,H,O,U,W,ee);return}else if(ye&256){N(ne,xe,se,j,H,O,U,W,ee);return}}Ne&8?(ue&16&&oe(ne,H,O),xe!==ne&&d(se,xe)):ue&16?Ne&16?F(ne,xe,se,j,H,O,U,W,ee):oe(ne,H,O,!0):(ue&8&&d(se,""),Ne&16&&E(xe,se,j,H,O,U,W,ee))},N=(q,Z,se,j,H,O,U,W,ee)=>{q=q||Ta,Z=Z||Ta;const ne=q.length,ue=Z.length,xe=Math.min(ne,ue);let ye;for(ye=0;yeue?oe(q,H,O,!0,!1,xe):E(Z,se,j,H,O,U,W,ee,xe)},F=(q,Z,se,j,H,O,U,W,ee)=>{let ne=0;const ue=Z.length;let xe=q.length-1,ye=ue-1;for(;ne<=xe&&ne<=ye;){const Ne=q[ne],Be=Z[ne]=ee?Hs(Z[ne]):vs(Z[ne]);if(So(Ne,Be))m(Ne,Be,se,null,H,O,U,W,ee);else break;ne++}for(;ne<=xe&&ne<=ye;){const Ne=q[xe],Be=Z[ye]=ee?Hs(Z[ye]):vs(Z[ye]);if(So(Ne,Be))m(Ne,Be,se,null,H,O,U,W,ee);else break;xe--,ye--}if(ne>xe){if(ne<=ye){const Ne=ye+1,Be=Neye)for(;ne<=xe;)X(q[ne],H,O,!0),ne++;else{const Ne=ne,Be=ne,de=new Map;for(ne=Be;ne<=ye;ne++){const lt=Z[ne]=ee?Hs(Z[ne]):vs(Z[ne]);lt.key!=null&&de.set(lt.key,ne)}let ge,Ge=0;const Le=ye-Be+1;let Ee=!1,Ze=0;const Te=new Array(Le);for(ne=0;ne=Le){X(lt,H,O,!0);continue}let ce;if(lt.key!=null)ce=de.get(lt.key);else for(ge=Be;ge<=ye;ge++)if(Te[ge-Be]===0&&So(lt,Z[ge])){ce=ge;break}ce===void 0?X(lt,H,O,!0):(Te[ce-Be]=ne+1,ce>=Ze?Ze=ce:Ee=!0,m(lt,Z[ce],se,null,H,O,U,W,ee),Ge++)}const vi=Ee?__(Te):Ta;for(ge=vi.length-1,ne=Le-1;ne>=0;ne--){const lt=Be+ne,ce=Z[lt],he=Z[lt+1],nt=lt+1{const{el:O,type:U,transition:W,children:ee,shapeFlag:ne}=q;if(ne&6){$(q.component.subTree,Z,se,j);return}if(ne&128){q.suspense.move(Z,se,j);return}if(ne&64){U.move(q,Z,se,fe);return}if(U===_e){i(O,Z,se);for(let xe=0;xeW.enter(O),H));else{const{leave:xe,delayLeave:ye,afterLeave:Ne}=W,Be=()=>{q.ctx.isUnmounted?s(O):i(O,Z,se)},de=()=>{const ge=O._isLeaving||!!O[Pn];O._isLeaving&&O[Pn](!0),W.persisted&&!ge?Be():xe(O,()=>{Be(),Ne&&Ne()})};ye?ye(O,Be,de):de()}else i(O,Z,se)},X=(q,Z,se,j=!1,H=!1)=>{const{type:O,props:U,ref:W,children:ee,dynamicChildren:ne,shapeFlag:ue,patchFlag:xe,dirs:ye,cacheIndex:Ne,memo:Be}=q;if(xe===-2&&(H=!1),W!=null&&(dr(),Il(W,null,se,q,!0),ur()),Ne!=null&&(Z.renderCache[Ne]=void 0),ue&256){Z.ctx.deactivate(q);return}const de=ue&1&&ye,ge=!Ma(q);let Ge;if(ge&&(Ge=U&&U.onVnodeBeforeUnmount)&&ns(Ge,Z,q),ue&6)J(q.component,se,j);else{if(ue&128){q.suspense.unmount(se,j);return}de&&ao(q,null,Z,"beforeUnmount"),ue&64?q.type.remove(q,Z,se,fe,j):ne&&!ne.hasOnce&&(O!==_e||xe>0&&xe&64)?oe(ne,Z,se,!1,!0):(O===_e&&xe&384||!H&&ue&16)&&oe(ee,Z,se),j&&z(q)}const Le=Be!=null&&Ne==null;(ge&&(Ge=U&&U.onVnodeUnmounted)||de||Le)&&qi(()=>{Ge&&ns(Ge,Z,q),de&&ao(q,null,Z,"unmounted"),Le&&(q.el=null)},se)},z=q=>{const{type:Z,el:se,anchor:j,transition:H}=q;if(Z===_e){K(se,j);return}if(Z===vd){w(q);return}const O=()=>{s(se),H&&!H.persisted&&H.afterLeave&&H.afterLeave()};if(q.shapeFlag&1&&H&&!H.persisted){const{leave:U,delayLeave:W}=H,ee=()=>U(se,O);W?W(q.el,O,ee):ee()}else O()},K=(q,Z)=>{let se;for(;q!==Z;)se=h(q),s(q),q=se;s(Z)},J=(q,Z,se)=>{const{bum:j,scope:H,job:O,subTree:U,um:W,m:ee,a:ne}=q;Tv(ee),Tv(ne),j&&gd(j),H.stop(),O&&(O.flags|=8,X(U,q,Z,se)),W&&qi(W,Z),qi(()=>{q.isUnmounted=!0},Z)},oe=(q,Z,se,j=!1,H=!1,O=0)=>{for(let U=O;U{if(q.shapeFlag&6)return le(q.component.subTree);if(q.shapeFlag&128)return q.suspense.next();const Z=h(q.anchor||q.el),se=Z&&Z[d1];return se?h(se):Z};let ve=!1;const Se=(q,Z,se)=>{let j;q==null?Z._vnode&&(X(Z._vnode,null,null,!0),j=Z._vnode.component):m(Z._vnode||null,q,Z,null,null,null,se),Z._vnode=q,ve||(ve=!0,fv(j),r1(),ve=!1)},fe={p:m,um:X,m:$,r:z,mt:D,mc:E,pc:L,pbc:I,n:le,o:n};return{render:Se,hydrate:void 0,createApp:d_(Se)}}function Ph({type:n,props:e},t){return t==="svg"&&n==="foreignObject"||t==="mathml"&&n==="annotation-xml"&&e&&e.encoding&&e.encoding.includes("html")?void 0:t}function lo({effect:n,job:e},t){t?(n.flags|=32,e.flags|=4):(n.flags&=-33,e.flags&=-5)}function E_(n,e){return(!n||n&&!n.pendingBranch)&&e&&!e.persisted}function yg(n,e,t=!1){const i=n.children,s=e.children;if(et(i)&&et(s))for(let r=0;r>1,n[t[a]]0&&(e[i]=t[r-1]),t[r]=i)}}for(r=t.length,o=t[r-1];r-- >0;)t[r]=o,o=e[o];return t}function F1(n){const e=n.subTree.component;if(e)return e.asyncDep&&!e.asyncResolved?e:F1(e)}function Tv(n){if(n)for(let e=0;en.__isSuspense;function M_(n,e){e&&e.pendingBranch?et(n)?e.effects.push(...n):e.effects.push(n):LE(n)}const _e=Symbol.for("v-fgt"),fc=Symbol.for("v-txt"),Hi=Symbol.for("v-cmt"),vd=Symbol.for("v-stc"),ar=[];let yn=null;function Q(n=!1){ar.push(yn=n?null:[])}function xg(){ar.pop(),yn=ar[ar.length-1]||null}let jl=1;function Vd(n,e=!1){jl+=n,n<0&&yn&&e&&(yn.hasOnce=!0)}function O1(n){return n.dynamicChildren=jl>0?yn||Ta:null,xg(),jl>0&&yn&&yn.push(n),n}function te(n,e,t,i,s,r){return O1(x(n,e,t,i,s,r,!0))}function It(n,e,t,i,s){return O1(Ae(n,e,t,i,s,!0))}function Hl(n){return n?n.__v_isVNode===!0:!1}function So(n,e){return n.type===e.type&&n.key===e.key}const N1=({key:n})=>n??null,bd=({ref:n,ref_key:e,ref_for:t})=>(typeof n=="number"&&(n=""+n),n!=null?ii(n)||Qt(n)||dt(n)?{i:Gi,r:n,k:e,f:!!t}:n:null);function x(n,e=null,t=null,i=0,s=null,r=n===_e?0:1,o=!1,a=!1){const c={__v_isVNode:!0,__v_skip:!0,type:n,props:e,key:e&&N1(e),ref:e&&bd(e),scopeId:a1,slotScopeIds:null,children:t,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:r,patchFlag:i,dynamicProps:s,dynamicChildren:null,appContext:null,ctx:Gi};return a?(Xd(c,t),r&128&&n.normalize(c)):t&&(c.shapeFlag|=ii(t)?8:16),jl>0&&!o&&yn&&(c.patchFlag>0||r&6)&&c.patchFlag!==32&&yn.push(c),c}const Ae=P_;function P_(n,e=null,t=null,i=0,s=null,r=!1){if((!n||n===t_)&&(n=Hi),Hl(n)){const a=Kr(n,e,!0);return t&&Xd(a,t),jl>0&&!r&&yn&&(a.shapeFlag&6?yn[yn.indexOf(n)]=a:yn.push(a)),a.patchFlag=-2,a}if(U_(n)&&(n=n.__vccOpts),e){e=I_(e);let{class:a,style:c}=e;a&&!ii(a)&&(e.class=Ie(a)),Ot(c)&&(Xu(c)&&!et(c)&&(c=Ei({},c)),e.style=Vt(c))}const o=ii(n)?1:D1(n)?128:Hu(n)?64:Ot(n)?4:dt(n)?2:0;return x(n,e,t,i,s,o,r,!0)}function I_(n){return n?Xu(n)||_1(n)?Ei({},n):n:null}function Kr(n,e,t=!1,i=!1){const{props:s,ref:r,patchFlag:o,children:a,transition:c}=n,l=e?R_(s||{},e):s,d={__v_isVNode:!0,__v_skip:!0,type:n.type,props:l,key:l&&N1(l),ref:e&&e.ref?t&&r?et(r)?r.concat(bd(e)):[r,bd(e)]:bd(e):r,scopeId:n.scopeId,slotScopeIds:n.slotScopeIds,children:a,target:n.target,targetStart:n.targetStart,targetAnchor:n.targetAnchor,staticCount:n.staticCount,shapeFlag:n.shapeFlag,patchFlag:e&&n.type!==_e?o===-1?16:o|16:o,dynamicProps:n.dynamicProps,dynamicChildren:n.dynamicChildren,appContext:n.appContext,dirs:n.dirs,transition:c,component:n.component,suspense:n.suspense,ssContent:n.ssContent&&Kr(n.ssContent),ssFallback:n.ssFallback&&Kr(n.ssFallback),placeholder:n.placeholder,el:n.el,anchor:n.anchor,ctx:n.ctx,ce:n.ce};return c&&i&&zl(d,c.clone(d)),d}function bt(n=" ",e=0){return Ae(fc,null,n,e)}function k_(n,e){const t=Ae(vd,null,n);return t.staticCount=e,t}function Ce(n="",e=!1){return e?(Q(),It(Hi,null,n)):Ae(Hi,null,n)}function vs(n){return n==null||typeof n=="boolean"?Ae(Hi):et(n)?Ae(_e,null,n.slice()):Hl(n)?Hs(n):Ae(fc,null,String(n))}function Hs(n){return n.el===null&&n.patchFlag!==-1||n.memo?n:Kr(n)}function Xd(n,e){let t=0;const{shapeFlag:i}=n;if(e==null)e=null;else if(et(e))t=16;else if(typeof e=="object")if(i&65){const s=e.default;s&&(s._c&&(s._d=!1),Xd(n,s()),s._c&&(s._d=!0));return}else{t=32;const s=e._;!s&&!_1(e)?e._ctx=Gi:s===3&&Gi&&(Gi.slots._===1?e._=1:(e._=2,n.patchFlag|=1024))}else if(dt(e)){if(i&65){Xd(n,{default:e});return}e={default:e,_ctx:Gi},t=32}else e=String(e),i&64?(t=16,e=[bt(e)]):t=8;n.children=e,n.shapeFlag|=t}function R_(...n){const e={};for(let t=0;tQi||Gi;let Yd,Gl;{const n=Uu(),e=(t,i)=>{let s;return(s=n[t])||(s=n[t]=[]),s.push(i),r=>{s.length>1?s.forEach(o=>o(r)):s[0](r)}};Yd=e("__VUE_INSTANCE_SETTERS__",t=>Qi=t),Gl=e("__VUE_SSR_SETTERS__",t=>Wl=t)}const pc=n=>{const e=Qi;return Yd(n),n.scope.on(),()=>{n.scope.off(),Yd(e)}},Ev=()=>{Qi&&Qi.scope.off(),Yd(null)};function $1(n){return n.vnode.shapeFlag&4}let Wl=!1;function O_(n,e=!1,t=!1){e&&Gl(e);const{props:i,children:s}=n.vnode,r=$1(n);b_(n,i,r,e),S_(n,s,t||e);const o=r?N_(n,e):void 0;return e&&Gl(!1),o}function N_(n,e){const t=n.type;n.accessCache=Object.create(null),n.proxy=new Proxy(n.ctx,n_);const{setup:i}=t;if(i){dr();const s=n.setupContext=i.length>1?B_(n):null,r=pc(n),o=hc(i,n,0,[n.props,s]),a=kx(o);if(ur(),r(),(a||n.sp)&&!Ma(n)&&v1(n),a){if(o.then(Ev,Ev),e)return o.then(c=>{Gl(!0);try{_v(n,c,e)}finally{Gl(!1)}}).catch(c=>{Yu(c,n,0)});n.asyncDep=o}else _v(n,o)}else B1(n)}function _v(n,e,t){dt(e)?n.type.__ssrInlineRender?n.ssrRender=e:n.render=e:Ot(e)&&(n.setupState=i1(e)),B1(n)}function B1(n,e,t){const i=n.type;n.render||(n.render=i.render||Es);{const s=pc(n);dr();try{s_(n)}finally{ur(),s()}}}const $_={get(n,e){return zi(n,"get",""),n[e]}};function B_(n){const e=t=>{n.exposed=t||{}};return{attrs:new Proxy(n.attrs,$_),slots:n.slots,emit:n.emit,expose:e}}function Ju(n){return n.exposed?n.exposeProxy||(n.exposeProxy=new Proxy(i1(Ur(n.exposed)),{get(e,t){if(t in e)return e[t];if(t in kl)return kl[t](n)},has(e,t){return t in e||t in kl}})):n.proxy}function U_(n){return dt(n)&&"__vccOpts"in n}const Fe=(n,e)=>PE(n,e,Wl);function ql(n,e,t){try{Vd(-1);const i=arguments.length;return i===2?Ot(e)&&!et(e)?Hl(e)?Ae(n,null,[e]):Ae(n,e):Ae(n,null,e):(i>3?t=Array.prototype.slice.call(arguments,2):i===3&&Hl(t)&&(t=[t]),Ae(n,e,t))}finally{Vd(1)}}const V_="3.5.41";/** * @vue/runtime-dom v3.5.41 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Fp;const Mv=typeof window<"u"&&window.trustedTypes;if(Mv)try{Fp=Mv.createPolicy("vue",{createHTML:n=>n})}catch{}const U1=Fp?n=>Fp.createHTML(n):n=>n,X_="http://www.w3.org/2000/svg",Y_="http://www.w3.org/1998/Math/MathML",Vs=typeof document<"u"?document:null,Pv=Vs&&Vs.createElement("template"),z_={insert:(n,e,t)=>{e.insertBefore(n,t||null)},remove:n=>{const e=n.parentNode;e&&e.removeChild(n)},createElement:(n,e,t,i)=>{const s=e==="svg"?Vs.createElementNS(X_,n):e==="mathml"?Vs.createElementNS(Y_,n):t?Vs.createElement(n,{is:t}):Vs.createElement(n);return n==="select"&&i&&i.multiple!=null&&s.setAttribute("multiple",i.multiple),s},createText:n=>Vs.createTextNode(n),createComment:n=>Vs.createComment(n),setText:(n,e)=>{n.nodeValue=e},setElementText:(n,e)=>{n.textContent=e},parentNode:n=>n.parentNode,nextSibling:n=>n.nextSibling,querySelector:n=>Vs.querySelector(n),setScopeId(n,e){n.setAttribute(e,"")},insertStaticContent(n,e,t,i,s,r){const o=t?t.previousSibling:e.lastChild;if(s&&(s===r||s.nextSibling))for(;e.insertBefore(s.cloneNode(!0),t),!(s===r||!(s=s.nextSibling)););else{Pv.innerHTML=U1(i==="svg"?`${n}`:i==="mathml"?`${n}`:n);const a=Pv.content;if(i==="svg"||i==="mathml"){const c=a.firstChild;for(;c.firstChild;)a.appendChild(c.firstChild);a.removeChild(c)}e.insertBefore(a,t)}return[o?o.nextSibling:e.firstChild,t?t.previousSibling:e.lastChild]}},wr="transition",ll="animation",Kl=Symbol("_vtc"),V1={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},j_=Ei({},h1,V1),H_=n=>(n.displayName="Transition",n.props=j_,n),G_=H_((n,{slots:e})=>ql(zE,W_(n),e)),co=(n,e=[])=>{et(n)?n.forEach(t=>t(...e)):n&&n(...e)},Iv=n=>n?et(n)?n.some(e=>e.length>1):n.length>1:!1;function W_(n){const e={};for(const k in n)k in V1||(e[k]=n[k]);if(n.css===!1)return e;const{name:t="v",type:i,duration:s,enterFromClass:r=`${t}-enter-from`,enterActiveClass:o=`${t}-enter-active`,enterToClass:a=`${t}-enter-to`,appearFromClass:c=r,appearActiveClass:l=o,appearToClass:d=a,leaveFromClass:u=`${t}-leave-from`,leaveActiveClass:h=`${t}-leave-active`,leaveToClass:f=`${t}-leave-to`}=n,p=q_(s),m=p&&p[0],g=p&&p[1],{onBeforeEnter:v,onEnter:y,onEnterCancelled:b,onLeave:x,onLeaveCancelled:C,onBeforeAppear:T=v,onAppear:S=y,onAppearCancelled:E=b}=e,_=(k,B,D,G)=>{k._enterCancelled=G,uo(k,B?d:a),uo(k,B?l:o),D&&D()},I=(k,B)=>{k._isLeaving=!1,uo(k,u),uo(k,f),uo(k,h),B&&B()},M=k=>(B,D)=>{const G=k?S:y,V=()=>_(B,k,D);co(G,[B,V]),kv(()=>{uo(B,k?c:r),Os(B,k?d:a),Iv(G)||Rv(B,i,m,V)})};return Ei(e,{onBeforeEnter(k){co(v,[k]),Os(k,r),Os(k,o)},onBeforeAppear(k){co(T,[k]),Os(k,c),Os(k,l)},onEnter:M(!1),onAppear:M(!0),onLeave(k,B){k._isLeaving=!0;const D=()=>I(k,B);Os(k,u),k._enterCancelled?(Os(k,h),Dv(k)):(Dv(k),Os(k,h)),kv(()=>{k._isLeaving&&(uo(k,u),Os(k,f),Iv(x)||Rv(k,i,g,D))}),co(x,[k,D])},onEnterCancelled(k){_(k,!1,void 0,!0),co(b,[k])},onAppearCancelled(k){_(k,!0,void 0,!0),co(E,[k])},onLeaveCancelled(k){I(k),co(C,[k])}})}function q_(n){if(n==null)return null;if(Ot(n))return[Ih(n.enter),Ih(n.leave)];{const e=Ih(n);return[e,e]}}function Ih(n){return qT(n)}function Os(n,e){e.split(/\s+/).forEach(t=>t&&n.classList.add(t)),(n[Kl]||(n[Kl]=new Set)).add(e)}function uo(n,e){e.split(/\s+/).forEach(i=>i&&n.classList.remove(i));const t=n[Kl];t&&(t.delete(e),t.size||(n[Kl]=void 0))}function kv(n){requestAnimationFrame(()=>{requestAnimationFrame(n)})}let K_=0;function Rv(n,e,t,i){const s=n._endId=++K_,r=()=>{s===n._endId&&i()};if(t!=null)return setTimeout(r,t);const{type:o,timeout:a,propCount:c}=J_(n,e);if(!o)return i();const l=o+"end";let d=0;const u=()=>{n.removeEventListener(l,h),r()},h=f=>{f.target===n&&++d>=c&&u()};setTimeout(()=>{d(t[p]||"").split(", "),s=i(`${wr}Delay`),r=i(`${wr}Duration`),o=Fv(s,r),a=i(`${ll}Delay`),c=i(`${ll}Duration`),l=Fv(a,c);let d=null,u=0,h=0;e===wr?o>0&&(d=wr,u=o,h=r.length):e===ll?l>0&&(d=ll,u=l,h=c.length):(u=Math.max(o,l),d=u>0?o>l?wr:ll:null,h=d?d===wr?r.length:c.length:0);const f=d===wr&&/\b(?:transform|all)(?:,|$)/.test(i(`${wr}Property`).toString());return{type:d,timeout:u,propCount:h,hasTransform:f}}function Fv(n,e){for(;n.lengthLv(t)+Lv(n[i])))}function Lv(n){return n==="auto"?0:Number(n.slice(0,-1).replace(",","."))*1e3}function Dv(n){return(n?n.ownerDocument:document).body.offsetHeight}function Z_(n,e,t){const i=n[Kl];i&&(e=(e?[e,...i]:[...i]).join(" ")),e==null?n.removeAttribute("class"):t?n.setAttribute("class",e):n.className=e}const zd=Symbol("_vod"),X1=Symbol("_vsh"),Fi={name:"show",beforeMount(n,{value:e},{transition:t}){n[zd]=n.style.display==="none"?"":n.style.display,t&&e?t.beforeEnter(n):cl(n,e)},mounted(n,{value:e},{transition:t}){t&&e&&t.enter(n)},updated(n,{value:e,oldValue:t},{transition:i}){!e!=!t&&(i?e?(i.beforeEnter(n),cl(n,!0),i.enter(n)):i.leave(n,()=>{cl(n,!1)}):cl(n,e))},beforeUnmount(n,{value:e}){cl(n,e)}};function cl(n,e){n.style.display=e?n[zd]:"none",n[X1]=!e}const Q_=Symbol(""),eM=/(?:^|;)\s*display\s*:/;function tM(n,e,t){const i=n.style,s=ii(t);let r=!1;if(t&&!s){if(e)if(ii(e))for(const o of e.split(";")){const a=o.slice(0,o.indexOf(":")).trim();t[a]==null&&bl(i,a,"")}else for(const o in e)t[o]==null&&bl(i,o,"");for(const o in t){o==="display"&&(r=!0);const a=t[o];a!=null?nM(n,o,!ii(e)&&e?e[o]:void 0,a)||bl(i,o,a):bl(i,o,"")}}else if(s){if(e!==t){const o=i[Q_];o&&(t+=";"+o),i.cssText=t,r=eM.test(t)}}else e&&n.removeAttribute("style");zd in n&&(n[zd]=r?i.display:"",n[X1]&&(i.display="none"))}const Ov=/\s*!important$/;function bl(n,e,t){if(et(t))t.forEach(i=>bl(n,e,i));else if(t==null&&(t=""),e.startsWith("--"))n.setProperty(e,t);else{const i=iM(n,e);Ov.test(t)?n.setProperty(Qr(i),t.replace(Ov,""),"important"):n[i]=t}}const Nv=["Webkit","Moz","ms"],kh={};function iM(n,e){const t=kh[e];if(t)return t;let i=qn(e);if(i!=="filter"&&i in n)return kh[e]=i;i=Lx(i);for(let s=0;sRh||(cM.then(()=>Rh=0),Rh=Date.now());function uM(n,e){const t=i=>{if(!i._vts)i._vts=Date.now();else if(i._vts<=t.attached)return;const s=t.value;if(et(s)){const r=i.stopImmediatePropagation;i.stopImmediatePropagation=()=>{r.call(i),i._stopped=!0};const o=s.slice(),a=[i];for(let c=0;cn.charCodeAt(0)===111&&n.charCodeAt(1)===110&&n.charCodeAt(2)>96&&n.charCodeAt(2)<123,hM=(n,e,t,i,s,r)=>{const o=s==="svg";e==="class"?Z_(n,i,o):e==="style"?tM(n,t,i):Du(e)?Ou(e)||rM(n,e,t,i,r):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):fM(n,e,i,o))?(Uv(n,e,i),!n.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&Bv(n,e,i,o,r,e!=="value")):n._isVueCE&&(pM(n,e)||n._def.__asyncLoader&&(/[A-Z]/.test(e)||!ii(i)))?Uv(n,qn(e),i,r,e):(e==="true-value"?n._trueValue=i:e==="false-value"&&(n._falseValue=i),Bv(n,e,i,o))};function fM(n,e,t,i){if(i)return!!(e==="innerHTML"||e==="textContent"||e in n&&Xv(e)&&dt(t));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&n.tagName==="IFRAME"||e==="form"||e==="list"&&n.tagName==="INPUT"||e==="type"&&n.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const s=n.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Xv(e)&&ii(t)?!1:e in n}function pM(n,e){const t=n._def.props;if(!t)return!1;const i=qn(e);return Array.isArray(t)?t.some(s=>qn(s)===i):Object.keys(t).some(s=>qn(s)===i)}const Ua=n=>{const e=n.props["onUpdate:modelValue"]||!1;return et(e)?t=>gd(e,t):e};function mM(n){n.target.composing=!0}function Yv(n){const e=n.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const Ss=Symbol("_assign"),Rc=Symbol("_initialValue");function Fh(n,e,t){return e&&(n=n.trim()),t&&(n=Bu(n)),n}const Je={created(n,{modifiers:{lazy:e,trim:t,number:i}},s){n.parentNode&&(n.type==="text"?n[Rc]=n.defaultValue.replace(/[\r\n]/g,""):n.type==="textarea"&&(n[Rc]=n.defaultValue.replace(/\r\n?/g,` +**/let Fp;const Mv=typeof window<"u"&&window.trustedTypes;if(Mv)try{Fp=Mv.createPolicy("vue",{createHTML:n=>n})}catch{}const U1=Fp?n=>Fp.createHTML(n):n=>n,X_="http://www.w3.org/2000/svg",Y_="http://www.w3.org/1998/Math/MathML",Vs=typeof document<"u"?document:null,Pv=Vs&&Vs.createElement("template"),z_={insert:(n,e,t)=>{e.insertBefore(n,t||null)},remove:n=>{const e=n.parentNode;e&&e.removeChild(n)},createElement:(n,e,t,i)=>{const s=e==="svg"?Vs.createElementNS(X_,n):e==="mathml"?Vs.createElementNS(Y_,n):t?Vs.createElement(n,{is:t}):Vs.createElement(n);return n==="select"&&i&&i.multiple!=null&&s.setAttribute("multiple",i.multiple),s},createText:n=>Vs.createTextNode(n),createComment:n=>Vs.createComment(n),setText:(n,e)=>{n.nodeValue=e},setElementText:(n,e)=>{n.textContent=e},parentNode:n=>n.parentNode,nextSibling:n=>n.nextSibling,querySelector:n=>Vs.querySelector(n),setScopeId(n,e){n.setAttribute(e,"")},insertStaticContent(n,e,t,i,s,r){const o=t?t.previousSibling:e.lastChild;if(s&&(s===r||s.nextSibling))for(;e.insertBefore(s.cloneNode(!0),t),!(s===r||!(s=s.nextSibling)););else{Pv.innerHTML=U1(i==="svg"?`${n}`:i==="mathml"?`${n}`:n);const a=Pv.content;if(i==="svg"||i==="mathml"){const c=a.firstChild;for(;c.firstChild;)a.appendChild(c.firstChild);a.removeChild(c)}e.insertBefore(a,t)}return[o?o.nextSibling:e.firstChild,t?t.previousSibling:e.lastChild]}},wr="transition",ll="animation",Kl=Symbol("_vtc"),V1={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},j_=Ei({},h1,V1),H_=n=>(n.displayName="Transition",n.props=j_,n),G_=H_((n,{slots:e})=>ql(zE,W_(n),e)),co=(n,e=[])=>{et(n)?n.forEach(t=>t(...e)):n&&n(...e)},Iv=n=>n?et(n)?n.some(e=>e.length>1):n.length>1:!1;function W_(n){const e={};for(const k in n)k in V1||(e[k]=n[k]);if(n.css===!1)return e;const{name:t="v",type:i,duration:s,enterFromClass:r=`${t}-enter-from`,enterActiveClass:o=`${t}-enter-active`,enterToClass:a=`${t}-enter-to`,appearFromClass:c=r,appearActiveClass:l=o,appearToClass:d=a,leaveFromClass:u=`${t}-leave-from`,leaveActiveClass:h=`${t}-leave-active`,leaveToClass:f=`${t}-leave-to`}=n,p=q_(s),m=p&&p[0],g=p&&p[1],{onBeforeEnter:v,onEnter:y,onEnterCancelled:b,onLeave:w,onLeaveCancelled:C,onBeforeAppear:T=v,onAppear:S=y,onAppearCancelled:E=b}=e,_=(k,B,D,G)=>{k._enterCancelled=G,uo(k,B?d:a),uo(k,B?l:o),D&&D()},I=(k,B)=>{k._isLeaving=!1,uo(k,u),uo(k,f),uo(k,h),B&&B()},M=k=>(B,D)=>{const G=k?S:y,V=()=>_(B,k,D);co(G,[B,V]),kv(()=>{uo(B,k?c:r),Os(B,k?d:a),Iv(G)||Rv(B,i,m,V)})};return Ei(e,{onBeforeEnter(k){co(v,[k]),Os(k,r),Os(k,o)},onBeforeAppear(k){co(T,[k]),Os(k,c),Os(k,l)},onEnter:M(!1),onAppear:M(!0),onLeave(k,B){k._isLeaving=!0;const D=()=>I(k,B);Os(k,u),k._enterCancelled?(Os(k,h),Dv(k)):(Dv(k),Os(k,h)),kv(()=>{k._isLeaving&&(uo(k,u),Os(k,f),Iv(w)||Rv(k,i,g,D))}),co(w,[k,D])},onEnterCancelled(k){_(k,!1,void 0,!0),co(b,[k])},onAppearCancelled(k){_(k,!0,void 0,!0),co(E,[k])},onLeaveCancelled(k){I(k),co(C,[k])}})}function q_(n){if(n==null)return null;if(Ot(n))return[Ih(n.enter),Ih(n.leave)];{const e=Ih(n);return[e,e]}}function Ih(n){return qT(n)}function Os(n,e){e.split(/\s+/).forEach(t=>t&&n.classList.add(t)),(n[Kl]||(n[Kl]=new Set)).add(e)}function uo(n,e){e.split(/\s+/).forEach(i=>i&&n.classList.remove(i));const t=n[Kl];t&&(t.delete(e),t.size||(n[Kl]=void 0))}function kv(n){requestAnimationFrame(()=>{requestAnimationFrame(n)})}let K_=0;function Rv(n,e,t,i){const s=n._endId=++K_,r=()=>{s===n._endId&&i()};if(t!=null)return setTimeout(r,t);const{type:o,timeout:a,propCount:c}=J_(n,e);if(!o)return i();const l=o+"end";let d=0;const u=()=>{n.removeEventListener(l,h),r()},h=f=>{f.target===n&&++d>=c&&u()};setTimeout(()=>{d(t[p]||"").split(", "),s=i(`${wr}Delay`),r=i(`${wr}Duration`),o=Fv(s,r),a=i(`${ll}Delay`),c=i(`${ll}Duration`),l=Fv(a,c);let d=null,u=0,h=0;e===wr?o>0&&(d=wr,u=o,h=r.length):e===ll?l>0&&(d=ll,u=l,h=c.length):(u=Math.max(o,l),d=u>0?o>l?wr:ll:null,h=d?d===wr?r.length:c.length:0);const f=d===wr&&/\b(?:transform|all)(?:,|$)/.test(i(`${wr}Property`).toString());return{type:d,timeout:u,propCount:h,hasTransform:f}}function Fv(n,e){for(;n.lengthLv(t)+Lv(n[i])))}function Lv(n){return n==="auto"?0:Number(n.slice(0,-1).replace(",","."))*1e3}function Dv(n){return(n?n.ownerDocument:document).body.offsetHeight}function Z_(n,e,t){const i=n[Kl];i&&(e=(e?[e,...i]:[...i]).join(" ")),e==null?n.removeAttribute("class"):t?n.setAttribute("class",e):n.className=e}const zd=Symbol("_vod"),X1=Symbol("_vsh"),Fi={name:"show",beforeMount(n,{value:e},{transition:t}){n[zd]=n.style.display==="none"?"":n.style.display,t&&e?t.beforeEnter(n):cl(n,e)},mounted(n,{value:e},{transition:t}){t&&e&&t.enter(n)},updated(n,{value:e,oldValue:t},{transition:i}){!e!=!t&&(i?e?(i.beforeEnter(n),cl(n,!0),i.enter(n)):i.leave(n,()=>{cl(n,!1)}):cl(n,e))},beforeUnmount(n,{value:e}){cl(n,e)}};function cl(n,e){n.style.display=e?n[zd]:"none",n[X1]=!e}const Q_=Symbol(""),eM=/(?:^|;)\s*display\s*:/;function tM(n,e,t){const i=n.style,s=ii(t);let r=!1;if(t&&!s){if(e)if(ii(e))for(const o of e.split(";")){const a=o.slice(0,o.indexOf(":")).trim();t[a]==null&&bl(i,a,"")}else for(const o in e)t[o]==null&&bl(i,o,"");for(const o in t){o==="display"&&(r=!0);const a=t[o];a!=null?nM(n,o,!ii(e)&&e?e[o]:void 0,a)||bl(i,o,a):bl(i,o,"")}}else if(s){if(e!==t){const o=i[Q_];o&&(t+=";"+o),i.cssText=t,r=eM.test(t)}}else e&&n.removeAttribute("style");zd in n&&(n[zd]=r?i.display:"",n[X1]&&(i.display="none"))}const Ov=/\s*!important$/;function bl(n,e,t){if(et(t))t.forEach(i=>bl(n,e,i));else if(t==null&&(t=""),e.startsWith("--"))n.setProperty(e,t);else{const i=iM(n,e);Ov.test(t)?n.setProperty(Qr(i),t.replace(Ov,""),"important"):n[i]=t}}const Nv=["Webkit","Moz","ms"],kh={};function iM(n,e){const t=kh[e];if(t)return t;let i=qn(e);if(i!=="filter"&&i in n)return kh[e]=i;i=Lx(i);for(let s=0;sRh||(cM.then(()=>Rh=0),Rh=Date.now());function uM(n,e){const t=i=>{if(!i._vts)i._vts=Date.now();else if(i._vts<=t.attached)return;const s=t.value;if(et(s)){const r=i.stopImmediatePropagation;i.stopImmediatePropagation=()=>{r.call(i),i._stopped=!0};const o=s.slice(),a=[i];for(let c=0;cn.charCodeAt(0)===111&&n.charCodeAt(1)===110&&n.charCodeAt(2)>96&&n.charCodeAt(2)<123,hM=(n,e,t,i,s,r)=>{const o=s==="svg";e==="class"?Z_(n,i,o):e==="style"?tM(n,t,i):Du(e)?Ou(e)||rM(n,e,t,i,r):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):fM(n,e,i,o))?(Uv(n,e,i),!n.tagName.includes("-")&&(e==="value"||e==="checked"||e==="selected")&&Bv(n,e,i,o,r,e!=="value")):n._isVueCE&&(pM(n,e)||n._def.__asyncLoader&&(/[A-Z]/.test(e)||!ii(i)))?Uv(n,qn(e),i,r,e):(e==="true-value"?n._trueValue=i:e==="false-value"&&(n._falseValue=i),Bv(n,e,i,o))};function fM(n,e,t,i){if(i)return!!(e==="innerHTML"||e==="textContent"||e in n&&Xv(e)&&dt(t));if(e==="spellcheck"||e==="draggable"||e==="translate"||e==="autocorrect"||e==="sandbox"&&n.tagName==="IFRAME"||e==="form"||e==="list"&&n.tagName==="INPUT"||e==="type"&&n.tagName==="TEXTAREA")return!1;if(e==="width"||e==="height"){const s=n.tagName;if(s==="IMG"||s==="VIDEO"||s==="CANVAS"||s==="SOURCE")return!1}return Xv(e)&&ii(t)?!1:e in n}function pM(n,e){const t=n._def.props;if(!t)return!1;const i=qn(e);return Array.isArray(t)?t.some(s=>qn(s)===i):Object.keys(t).some(s=>qn(s)===i)}const Ua=n=>{const e=n.props["onUpdate:modelValue"]||!1;return et(e)?t=>gd(e,t):e};function mM(n){n.target.composing=!0}function Yv(n){const e=n.target;e.composing&&(e.composing=!1,e.dispatchEvent(new Event("input")))}const Ss=Symbol("_assign"),Rc=Symbol("_initialValue");function Fh(n,e,t){return e&&(n=n.trim()),t&&(n=Bu(n)),n}const Je={created(n,{modifiers:{lazy:e,trim:t,number:i}},s){n.parentNode&&(n.type==="text"?n[Rc]=n.defaultValue.replace(/[\r\n]/g,""):n.type==="textarea"&&(n[Rc]=n.defaultValue.replace(/\r\n?/g,` `))),n[Ss]=Ua(s);const r=i||s.props&&s.props.type==="number";Or(n,e?"change":"input",o=>{o.target.composing||n[Ss](Fh(n.value,t,r))}),(t||r)&&Or(n,"change",()=>{n.value=Fh(n.value,t,r)}),e||(Or(n,"compositionstart",mM),Or(n,"compositionend",Yv),Or(n,"change",Yv))},mounted(n,{value:e,modifiers:{trim:t,number:i}}){const s=e??"",r=n[Rc];delete n[Rc],r!==void 0&&(n.type==="text"||n.type==="textarea")&&n.value!==r?n[Ss](Fh(n.value,t,i)):n.value=s},beforeUpdate(n,{value:e,oldValue:t,modifiers:{lazy:i,trim:s,number:r}},o){if(n[Ss]=Ua(o),n.composing)return;const a=(r||n.type==="number")&&!/^0\d/.test(n.value)?Bu(n.value):n.value,c=e??"";if(a===c)return;const l=n.getRootNode();(l instanceof Document||l instanceof ShadowRoot)&&l.activeElement===n&&n.type!=="range"&&(i&&e===t||s&&n.value.trim()===c)||(n.value=c)}},Ct={deep:!0,created(n,e,t){n[Ss]=Ua(t),Or(n,"change",()=>{const i=n._modelValue,s=Jl(n),r=n.checked,o=n[Ss];if(et(i)){const a=og(i,s),c=a!==-1;if(r&&!c)o(i.concat(s));else if(!r&&c){const l=[...i];l.splice(a,1),o(l)}}else if(Ka(i)){const a=new Set(i);r?a.add(s):a.delete(s),o(a)}else o(Y1(n,r))})},mounted:zv,beforeUpdate(n,e,t){n[Ss]=Ua(t),zv(n,e,t)}};function zv(n,{value:e,oldValue:t},i){n._modelValue=e;let s;if(et(e))s=og(e,i.props.value)>-1;else if(Ka(e))s=e.has(i.props.value);else{if(e===t)return;s=Ja(e,Y1(n,!0))}n.checked!==s&&(n.checked=s)}const St={deep:!0,created(n,{value:e,modifiers:{number:t}},i){n._modelValue=e,Or(n,"change",()=>{const s=Array.prototype.filter.call(n.options,r=>r.selected).map(r=>t?Bu(Jl(r)):Jl(r));n[Ss](n.multiple?Ka(n._modelValue)?new Set(s):s:s[0]),n._assigning=!0,zu(()=>{n._assigning=!1})}),n[Ss]=Ua(i)},mounted(n,{value:e}){jv(n,e)},beforeUpdate(n,{value:e},t){n._modelValue=e,n[Ss]=Ua(t)},updated(n,{value:e}){n._assigning||jv(n,e)}};function jv(n,e){const t=n.multiple,i=et(e);if(!(t&&!i&&!Ka(e))){for(let s=0,r=n.options.length;sString(l)===String(a)):o.selected=og(e,a)>-1}else o.selected=e.has(a);else if(Ja(Jl(o),e)){n.selectedIndex!==s&&(n.selectedIndex=s);return}}!t&&n.selectedIndex!==-1&&(n.selectedIndex=-1)}}function Jl(n){return"_value"in n?n._value:n.value}function Y1(n,e){const t=e?"_trueValue":"_falseValue";return t in n?n[t]:e}const gM=["ctrl","shift","alt","meta"],vM={stop:n=>n.stopPropagation(),prevent:n=>n.preventDefault(),self:n=>n.target!==n.currentTarget,ctrl:n=>!n.ctrlKey,shift:n=>!n.shiftKey,alt:n=>!n.altKey,meta:n=>!n.metaKey,left:n=>"button"in n&&n.button!==0,middle:n=>"button"in n&&n.button!==1,right:n=>"button"in n&&n.button!==2,exact:(n,e)=>gM.some(t=>n[`${t}Key`]&&!e.includes(t))},tt=(n,e)=>{if(!n)return n;const t=n._withMods||(n._withMods={}),i=e.join(".");return t[i]||(t[i]=((s,...r)=>{for(let o=0;o{const t=n._withKeys||(n._withKeys={}),i=e.join(".");return t[i]||(t[i]=(s=>{if(!("key"in s))return;const r=Qr(s.key);if(e.some(o=>o===r||bM[o]===r))return n(s)}))},yM=Ei({patchProp:hM},z_);let Hv;function xM(){return Hv||(Hv=A_(yM))}const wM=((...n)=>{const e=xM().createApp(...n),{mount:t}=e;return e.mount=i=>{const s=CM(i);if(!s)return;const r=e._component;!dt(r)&&!r.render&&!r.template&&(r.template=s.innerHTML),s.nodeType===1&&(s.textContent="");const o=t(s,!1,SM(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),o},e});function SM(n){if(n instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&n instanceof MathMLElement)return"mathml"}function CM(n){return ii(n)?document.querySelector(n):n}/*! * pinia v4.0.3 * (c) 2026 Eduardo San Martin Morote * @license MIT - */let z1;const Zu=n=>z1=n,j1=Symbol();function Gv(n){return n&&typeof n=="object"&&Object.prototype.toString.call(n)==="[object Object]"&&typeof n.toJSON!="function"}function AM(){const n=ag(!0),e=n.run(()=>$e({}));let t=[],i=[];const s=Ur({install(r){Zu(s),s._a=r,r.provide(j1,s),r.config.globalProperties.$pinia=s,i.forEach(o=>t.push(o)),i=[]},use(r){return this._a?t.push(r):i.push(r),this},_p:t,_a:null,_e:n,_s:new Map,state:e});return s}const Lp=()=>{};function Wv(n,e,t,i=Lp){n.add(e);const s=()=>{n.delete(e)&&i()};return!t&&lg()&&Ux(s),s}function ia(n,...e){n.forEach(t=>{t(...e)})}const TM=n=>n(),qv=Symbol(),Lh=Symbol();function Dp(n,e){n instanceof Map&&e instanceof Map?e.forEach((t,i)=>n.set(i,t)):n instanceof Set&&e instanceof Set&&e.forEach(n.add,n);for(const t in e){if(!Object.hasOwn(e,t))continue;const i=e[t],s=n[t];Gv(s)&&Gv(i)&&Object.hasOwn(n,t)&&!Qt(i)&&!or(i)?n[t]=Dp(s,i):n[t]=i}return n}const EM=Symbol();function _M(n){return!n||typeof n!="object"||!Object.hasOwn(n,EM)}const{assign:Er}=Object;function MM(n){return!!(Qt(n)&&n.effect)}function PM(n,e,t,i){const{state:s,actions:r,getters:o}=e,a=t.state.value[n];let c;function l(){a||(t.state.value[n]=s?s():{});const d=TE(t.state.value[n]);return Er(d,r,Object.keys(o||{}).reduce((u,h)=>(u[h]=Ur(Fe(()=>{Zu(t);const f=t._s.get(n);return o[h].call(f,f)})),u),{}))}return c=H1(n,l,e,t,i,!0),c}function H1(n,e,t={},i,s,r){let o;const a=Er({actions:{}},t),c={deep:!0};let l,d,u=new Set,h=new Set,f;const p=i.state.value[n];!r&&!p&&(i.state.value[n]={});let m;function g(S){let E;l=d=!1,typeof S=="function"?(S(i.state.value[n]),E={type:"patch function",storeId:n,events:f}):(Dp(i.state.value[n],S),E={type:"patch object",payload:S,storeId:n,events:f});const _=m=Symbol();zu().then(()=>{m===_&&(l=!0)}),d=!0,ia(u,E,i.state.value[n])}const v=r?function(){const{state:E}=t,_=E?E():{};this.$patch(I=>{Er(I,_)})}:Lp;function y(){o.stop(),u.clear(),h.clear(),i._s.delete(n)}const b=(S,E="")=>{if(qv in S)return S[Lh]=E,S;const _=function(){Zu(i);const I=Array.from(arguments),M=new Set,k=new Set;function B(V){M.add(V)}function D(V){k.add(V)}ia(h,{args:I,name:_[Lh],store:C,after:B,onError:D});let G;try{G=S.apply(this&&this.$id===n?this:C,I)}catch(V){throw ia(k,V),V}return G instanceof Promise?G.then(V=>(ia(M,V),V)).catch(V=>(ia(k,V),Promise.reject(V))):(ia(M,G),G)};return _[qv]=!0,_[Lh]=E,_},x={_p:i,$id:n,$onAction:Wv.bind(null,h),$patch:g,$reset:v,$subscribe(S,E={}){if(u.has(S))return Lp;const _=Wv(u,S,E.detached,()=>I()),I=o.run(()=>ei(()=>i.state.value[n],M=>{(E.flush==="sync"?d:l)&&S({storeId:n,type:"direct",events:f},M)},Er({},c,E)));return _},$dispose:y},C=zo(x);i._s.set(n,C);const T=(i._a&&i._a.runWithContext||TM)(()=>i._e.run(()=>(o=ag()).run(()=>e({action:b}))));for(const S in T){const E=T[S];Qt(E)&&!MM(E)||or(E)?r||(p&&_M(E)&&(Qt(E)?E.value=p[S]:((E instanceof Set||E instanceof Map)&&E.clear(),Dp(E,p[S]))),i.state.value[n][S]=E):typeof E=="function"&&(T[S]=b(E,S),a.actions[S]=E)}return Er(C,T),Er(_t(C),T),Object.defineProperty(C,"$state",{get:()=>i.state.value[n],set:S=>{g(E=>{Er(E,S)})}}),i._p.forEach(S=>{const E=o.run(()=>S({store:C,app:i._a,pinia:i,options:a}));Er(C,E)}),p&&r&&t.hydrate&&t.hydrate(C.$state,p),l=!0,d=!0,C}/*! #__NO_SIDE_EFFECTS__ */function IM(n,e,t){let i;const s=typeof e=="function";i=s?t:e;function r(o,a){const c=DE();return o=o||(c?Ro(j1,null):null),o&&Zu(o),o=z1,o._s.has(n)||(s?H1(n,e,i,o):PM(n,i,o)),o._s.get(n)}return r.$id=n,r}var jo=(n=>(n[n.WEBGL_LEGACY=0]="WEBGL_LEGACY",n[n.WEBGL=1]="WEBGL",n[n.WEBGL2=2]="WEBGL2",n))(jo||{}),G1=(n=>(n[n.UNKNOWN=0]="UNKNOWN",n[n.WEBGL=1]="WEBGL",n[n.CANVAS=2]="CANVAS",n))(G1||{}),Op=(n=>(n[n.COLOR=16384]="COLOR",n[n.DEPTH=256]="DEPTH",n[n.STENCIL=1024]="STENCIL",n))(Op||{}),Qe=(n=>(n[n.NORMAL=0]="NORMAL",n[n.ADD=1]="ADD",n[n.MULTIPLY=2]="MULTIPLY",n[n.SCREEN=3]="SCREEN",n[n.OVERLAY=4]="OVERLAY",n[n.DARKEN=5]="DARKEN",n[n.LIGHTEN=6]="LIGHTEN",n[n.COLOR_DODGE=7]="COLOR_DODGE",n[n.COLOR_BURN=8]="COLOR_BURN",n[n.HARD_LIGHT=9]="HARD_LIGHT",n[n.SOFT_LIGHT=10]="SOFT_LIGHT",n[n.DIFFERENCE=11]="DIFFERENCE",n[n.EXCLUSION=12]="EXCLUSION",n[n.HUE=13]="HUE",n[n.SATURATION=14]="SATURATION",n[n.COLOR=15]="COLOR",n[n.LUMINOSITY=16]="LUMINOSITY",n[n.NORMAL_NPM=17]="NORMAL_NPM",n[n.ADD_NPM=18]="ADD_NPM",n[n.SCREEN_NPM=19]="SCREEN_NPM",n[n.NONE=20]="NONE",n[n.SRC_OVER=0]="SRC_OVER",n[n.SRC_IN=21]="SRC_IN",n[n.SRC_OUT=22]="SRC_OUT",n[n.SRC_ATOP=23]="SRC_ATOP",n[n.DST_OVER=24]="DST_OVER",n[n.DST_IN=25]="DST_IN",n[n.DST_OUT=26]="DST_OUT",n[n.DST_ATOP=27]="DST_ATOP",n[n.ERASE=26]="ERASE",n[n.SUBTRACT=28]="SUBTRACT",n[n.XOR=29]="XOR",n))(Qe||{}),Cs=(n=>(n[n.POINTS=0]="POINTS",n[n.LINES=1]="LINES",n[n.LINE_LOOP=2]="LINE_LOOP",n[n.LINE_STRIP=3]="LINE_STRIP",n[n.TRIANGLES=4]="TRIANGLES",n[n.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",n[n.TRIANGLE_FAN=6]="TRIANGLE_FAN",n))(Cs||{}),Pe=(n=>(n[n.RGBA=6408]="RGBA",n[n.RGB=6407]="RGB",n[n.RG=33319]="RG",n[n.RED=6403]="RED",n[n.RGBA_INTEGER=36249]="RGBA_INTEGER",n[n.RGB_INTEGER=36248]="RGB_INTEGER",n[n.RG_INTEGER=33320]="RG_INTEGER",n[n.RED_INTEGER=36244]="RED_INTEGER",n[n.ALPHA=6406]="ALPHA",n[n.LUMINANCE=6409]="LUMINANCE",n[n.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",n[n.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",n[n.DEPTH_STENCIL=34041]="DEPTH_STENCIL",n))(Pe||{}),Pa=(n=>(n[n.TEXTURE_2D=3553]="TEXTURE_2D",n[n.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",n[n.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",n[n.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",n[n.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",n[n.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",n[n.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",n[n.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",n[n.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z",n))(Pa||{}),je=(n=>(n[n.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",n[n.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",n[n.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",n[n.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",n[n.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",n[n.UNSIGNED_INT=5125]="UNSIGNED_INT",n[n.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",n[n.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",n[n.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",n[n.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",n[n.BYTE=5120]="BYTE",n[n.SHORT=5122]="SHORT",n[n.INT=5124]="INT",n[n.FLOAT=5126]="FLOAT",n[n.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",n[n.HALF_FLOAT=36193]="HALF_FLOAT",n))(je||{}),Xe=(n=>(n[n.FLOAT=0]="FLOAT",n[n.INT=1]="INT",n[n.UINT=2]="UINT",n))(Xe||{}),Gn=(n=>(n[n.NEAREST=0]="NEAREST",n[n.LINEAR=1]="LINEAR",n))(Gn||{}),Jn=(n=>(n[n.CLAMP=33071]="CLAMP",n[n.REPEAT=10497]="REPEAT",n[n.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",n))(Jn||{}),On=(n=>(n[n.OFF=0]="OFF",n[n.POW2=1]="POW2",n[n.ON=2]="ON",n[n.ON_MANUAL=3]="ON_MANUAL",n))(On||{}),ki=(n=>(n[n.NPM=0]="NPM",n[n.UNPACK=1]="UNPACK",n[n.PMA=2]="PMA",n[n.NO_PREMULTIPLIED_ALPHA=0]="NO_PREMULTIPLIED_ALPHA",n[n.PREMULTIPLY_ON_UPLOAD=1]="PREMULTIPLY_ON_UPLOAD",n[n.PREMULTIPLIED_ALPHA=2]="PREMULTIPLIED_ALPHA",n))(ki||{}),bs=(n=>(n[n.NO=0]="NO",n[n.YES=1]="YES",n[n.AUTO=2]="AUTO",n[n.BLEND=0]="BLEND",n[n.CLEAR=1]="CLEAR",n[n.BLIT=2]="BLIT",n))(bs||{}),wg=(n=>(n[n.AUTO=0]="AUTO",n[n.MANUAL=1]="MANUAL",n))(wg||{}),Rn=(n=>(n.LOW="lowp",n.MEDIUM="mediump",n.HIGH="highp",n))(Rn||{}),Si=(n=>(n[n.NONE=0]="NONE",n[n.SCISSOR=1]="SCISSOR",n[n.STENCIL=2]="STENCIL",n[n.SPRITE=3]="SPRITE",n[n.COLOR=4]="COLOR",n))(Si||{}),yi=(n=>(n[n.NONE=0]="NONE",n[n.LOW=2]="LOW",n[n.MEDIUM=4]="MEDIUM",n[n.HIGH=8]="HIGH",n))(yi||{}),_s=(n=>(n[n.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",n[n.ARRAY_BUFFER=34962]="ARRAY_BUFFER",n[n.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER",n))(_s||{});const kM={createCanvas:(n,e)=>{const t=document.createElement("canvas");return t.width=n,t.height=e,t},getCanvasRenderingContext2D:()=>CanvasRenderingContext2D,getWebGLRenderingContext:()=>WebGLRenderingContext,getNavigator:()=>navigator,getBaseUrl:()=>document.baseURI??window.location.href,getFontFaceSet:()=>document.fonts,fetch:(n,e)=>fetch(n,e),parseXML:n=>new DOMParser().parseFromString(n,"text/xml")},Ve={ADAPTER:kM,RESOLUTION:1,CREATE_IMAGE_BITMAP:!1,ROUND_PIXELS:!1};var Dh=/iPhone/i,Kv=/iPod/i,Jv=/iPad/i,Zv=/\biOS-universal(?:.+)Mac\b/i,Oh=/\bAndroid(?:.+)Mobile\b/i,Qv=/Android/i,na=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,Fc=/Silk/i,Ns=/Windows Phone/i,eb=/\bWindows(?:.+)ARM\b/i,tb=/BlackBerry/i,ib=/BB10/i,nb=/Opera Mini/i,sb=/\b(CriOS|Chrome)(?:.+)Mobile/i,rb=/Mobile(?:.+)Firefox\b/i,ob=function(n){return typeof n<"u"&&n.platform==="MacIntel"&&typeof n.maxTouchPoints=="number"&&n.maxTouchPoints>1&&typeof MSStream>"u"};function RM(n){return function(e){return e.test(n)}}function ab(n){var e={userAgent:"",platform:"",maxTouchPoints:0};!n&&typeof navigator<"u"?e={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0}:typeof n=="string"?e.userAgent=n:n&&n.userAgent&&(e={userAgent:n.userAgent,platform:n.platform,maxTouchPoints:n.maxTouchPoints||0});var t=e.userAgent,i=t.split("[FBAN");typeof i[1]<"u"&&(t=i[0]),i=t.split("Twitter"),typeof i[1]<"u"&&(t=i[0]);var s=RM(t),r={apple:{phone:s(Dh)&&!s(Ns),ipod:s(Kv),tablet:!s(Dh)&&(s(Jv)||ob(e))&&!s(Ns),universal:s(Zv),device:(s(Dh)||s(Kv)||s(Jv)||s(Zv)||ob(e))&&!s(Ns)},amazon:{phone:s(na),tablet:!s(na)&&s(Fc),device:s(na)||s(Fc)},android:{phone:!s(Ns)&&s(na)||!s(Ns)&&s(Oh),tablet:!s(Ns)&&!s(na)&&!s(Oh)&&(s(Fc)||s(Qv)),device:!s(Ns)&&(s(na)||s(Fc)||s(Oh)||s(Qv))||s(/\bokhttp\b/i)},windows:{phone:s(Ns),tablet:s(eb),device:s(Ns)||s(eb)},other:{blackberry:s(tb),blackberry10:s(ib),opera:s(nb),firefox:s(rb),chrome:s(sb),device:s(tb)||s(ib)||s(nb)||s(rb)||s(sb)},any:!1,phone:!1,tablet:!1};return r.any=r.apple.device||r.android.device||r.windows.device||r.other.device,r.phone=r.apple.phone||r.android.phone||r.windows.phone,r.tablet=r.apple.tablet||r.android.tablet||r.windows.tablet,r}const FM=ab.default??ab,Ks=FM(globalThis.navigator);Ve.RETINA_PREFIX=/@([0-9\.]+)x/;Ve.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT=!1;var jd=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function W1(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}function LM(n){if(Object.prototype.hasOwnProperty.call(n,"__esModule"))return n;var e=n.default;if(typeof e=="function"){var t=function i(){return this instanceof i?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(n).forEach(function(i){var s=Object.getOwnPropertyDescriptor(n,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:function(){return n[i]}})}),t}var Nh={exports:{}},lb;function DM(){return lb||(lb=1,(function(n){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function s(c,l,d){this.fn=c,this.context=l,this.once=d||!1}function r(c,l,d,u,h){if(typeof d!="function")throw new TypeError("The listener must be a function");var f=new s(d,u||c,h),p=t?t+l:l;return c._events[p]?c._events[p].fn?c._events[p]=[c._events[p],f]:c._events[p].push(f):(c._events[p]=f,c._eventsCount++),c}function o(c,l){--c._eventsCount===0?c._events=new i:delete c._events[l]}function a(){this._events=new i,this._eventsCount=0}a.prototype.eventNames=function(){var l=[],d,u;if(this._eventsCount===0)return l;for(u in d=this._events)e.call(d,u)&&l.push(t?u.slice(1):u);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(d)):l},a.prototype.listeners=function(l){var d=t?t+l:l,u=this._events[d];if(!u)return[];if(u.fn)return[u.fn];for(var h=0,f=u.length,p=new Array(f);h80*L){z=J=V[0],K=oe=V[1];for(var fe=L;feJ&&(J=le),ve>oe&&(oe=ve);Se=Math.max(J-z,oe-K),Se=Se!==0?32767/Se:0}return i($,X,L,z,K,Se,0),X}function e(V,Y,L,N,F){var $,X;if(F===G(V,Y,L,N)>0)for($=Y;$=Y;$-=N)X=k($,V[$],V[$+1],X);return X&&x(X,X.next)&&(B(X),X=X.next),X}function t(V,Y){if(!V)return V;Y||(Y=V);var L=V,N;do if(N=!1,!L.steiner&&(x(L,L.next)||b(L.prev,L,L.next)===0)){if(B(L),L=Y=L.prev,L===L.next)break;N=!0}else L=L.next;while(N||L!==Y);return Y}function i(V,Y,L,N,F,$,X){if(V){!X&&$&&f(V,N,F,$);for(var z=V,K,J;V.prev!==V.next;){if(K=V.prev,J=V.next,$?r(V,N,F,$):s(V)){Y.push(K.i/L|0),Y.push(V.i/L|0),Y.push(J.i/L|0),B(V),V=J.next,z=J.next;continue}if(V=J,V===z){X?X===1?(V=o(t(V),Y,L),i(V,Y,L,N,F,$,2)):X===2&&a(V,Y,L,N,F,$):i(t(V),Y,L,N,F,$,1);break}}}}function s(V){var Y=V.prev,L=V,N=V.next;if(b(Y,L,N)>=0)return!1;for(var F=Y.x,$=L.x,X=N.x,z=Y.y,K=L.y,J=N.y,oe=F<$?F$?F>X?F:X:$>X?$:X,Se=z>K?z>J?z:J:K>J?K:J,fe=N.next;fe!==Y;){if(fe.x>=oe&&fe.x<=ve&&fe.y>=le&&fe.y<=Se&&v(F,z,$,K,X,J,fe.x,fe.y)&&b(fe.prev,fe,fe.next)>=0)return!1;fe=fe.next}return!0}function r(V,Y,L,N){var F=V.prev,$=V,X=V.next;if(b(F,$,X)>=0)return!1;for(var z=F.x,K=$.x,J=X.x,oe=F.y,le=$.y,ve=X.y,Se=zK?z>J?z:J:K>J?K:J,q=oe>le?oe>ve?oe:ve:le>ve?le:ve,Z=m(Se,fe,Y,L,N),se=m(be,q,Y,L,N),j=V.prevZ,H=V.nextZ;j&&j.z>=Z&&H&&H.z<=se;){if(j.x>=Se&&j.x<=be&&j.y>=fe&&j.y<=q&&j!==F&&j!==X&&v(z,oe,K,le,J,ve,j.x,j.y)&&b(j.prev,j,j.next)>=0||(j=j.prevZ,H.x>=Se&&H.x<=be&&H.y>=fe&&H.y<=q&&H!==F&&H!==X&&v(z,oe,K,le,J,ve,H.x,H.y)&&b(H.prev,H,H.next)>=0))return!1;H=H.nextZ}for(;j&&j.z>=Z;){if(j.x>=Se&&j.x<=be&&j.y>=fe&&j.y<=q&&j!==F&&j!==X&&v(z,oe,K,le,J,ve,j.x,j.y)&&b(j.prev,j,j.next)>=0)return!1;j=j.prevZ}for(;H&&H.z<=se;){if(H.x>=Se&&H.x<=be&&H.y>=fe&&H.y<=q&&H!==F&&H!==X&&v(z,oe,K,le,J,ve,H.x,H.y)&&b(H.prev,H,H.next)>=0)return!1;H=H.nextZ}return!0}function o(V,Y,L){var N=V;do{var F=N.prev,$=N.next.next;!x(F,$)&&C(F,N,N.next,$)&&_(F,$)&&_($,F)&&(Y.push(F.i/L|0),Y.push(N.i/L|0),Y.push($.i/L|0),B(N),B(N.next),N=V=$),N=N.next}while(N!==V);return t(N)}function a(V,Y,L,N,F,$){var X=V;do{for(var z=X.next.next;z!==X.prev;){if(X.i!==z.i&&y(X,z)){var K=M(X,z);X=t(X,X.next),K=t(K,K.next),i(X,Y,L,N,F,$,0),i(K,Y,L,N,F,$,0);return}z=z.next}X=X.next}while(X!==V)}function c(V,Y,L,N){var F=[],$,X,z,K,J;for($=0,X=Y.length;$=L.next.y&&L.next.y!==L.y){var z=L.x+(F-L.y)*(L.next.x-L.x)/(L.next.y-L.y);if(z<=N&&z>$&&($=z,X=L.x=L.x&&L.x>=J&&N!==L.x&&v(FX.x||L.x===X.x&&h(X,L)))&&(X=L,le=ve)),L=L.next;while(L!==K);return X}function h(V,Y){return b(V.prev,V,Y.prev)<0&&b(Y.next,V,V.next)<0}function f(V,Y,L,N){var F=V;do F.z===0&&(F.z=m(F.x,F.y,Y,L,N)),F.prevZ=F.prev,F.nextZ=F.next,F=F.next;while(F!==V);F.prevZ.nextZ=null,F.prevZ=null,p(F)}function p(V){var Y,L,N,F,$,X,z,K,J=1;do{for(L=V,V=null,$=null,X=0;L;){for(X++,N=L,z=0,Y=0;Y0||K>0&&N;)z!==0&&(K===0||!N||L.z<=N.z)?(F=L,L=L.nextZ,z--):(F=N,N=N.nextZ,K--),$?$.nextZ=F:V=F,F.prevZ=$,$=F;L=N}$.nextZ=null,J*=2}while(X>1);return V}function m(V,Y,L,N,F){return V=(V-L)*F|0,Y=(Y-N)*F|0,V=(V|V<<8)&16711935,V=(V|V<<4)&252645135,V=(V|V<<2)&858993459,V=(V|V<<1)&1431655765,Y=(Y|Y<<8)&16711935,Y=(Y|Y<<4)&252645135,Y=(Y|Y<<2)&858993459,Y=(Y|Y<<1)&1431655765,V|Y<<1}function g(V){var Y=V,L=V;do(Y.x=(V-X)*($-z)&&(V-X)*(N-z)>=(L-X)*(Y-z)&&(L-X)*($-z)>=(F-X)*(N-z)}function y(V,Y){return V.next.i!==Y.i&&V.prev.i!==Y.i&&!E(V,Y)&&(_(V,Y)&&_(Y,V)&&I(V,Y)&&(b(V.prev,V,Y.prev)||b(V,Y.prev,Y))||x(V,Y)&&b(V.prev,V,V.next)>0&&b(Y.prev,Y,Y.next)>0)}function b(V,Y,L){return(Y.y-V.y)*(L.x-Y.x)-(Y.x-V.x)*(L.y-Y.y)}function x(V,Y){return V.x===Y.x&&V.y===Y.y}function C(V,Y,L,N){var F=S(b(V,Y,L)),$=S(b(V,Y,N)),X=S(b(L,N,V)),z=S(b(L,N,Y));return!!(F!==$&&X!==z||F===0&&T(V,L,Y)||$===0&&T(V,N,Y)||X===0&&T(L,V,N)||z===0&&T(L,Y,N))}function T(V,Y,L){return Y.x<=Math.max(V.x,L.x)&&Y.x>=Math.min(V.x,L.x)&&Y.y<=Math.max(V.y,L.y)&&Y.y>=Math.min(V.y,L.y)}function S(V){return V>0?1:V<0?-1:0}function E(V,Y){var L=V;do{if(L.i!==V.i&&L.next.i!==V.i&&L.i!==Y.i&&L.next.i!==Y.i&&C(L,L.next,V,Y))return!0;L=L.next}while(L!==V);return!1}function _(V,Y){return b(V.prev,V,V.next)<0?b(V,Y,V.next)>=0&&b(V,V.prev,Y)>=0:b(V,Y,V.prev)<0||b(V,V.next,Y)<0}function I(V,Y){var L=V,N=!1,F=(V.x+Y.x)/2,$=(V.y+Y.y)/2;do L.y>$!=L.next.y>$&&L.next.y!==L.y&&F<(L.next.x-L.x)*($-L.y)/(L.next.y-L.y)+L.x&&(N=!N),L=L.next;while(L!==V);return N}function M(V,Y){var L=new D(V.i,V.x,V.y),N=new D(Y.i,Y.x,Y.y),F=V.next,$=Y.prev;return V.next=Y,Y.prev=V,L.next=F,F.prev=L,N.next=L,L.prev=N,$.next=N,N.prev=$,N}function k(V,Y,L,N){var F=new D(V,Y,L);return N?(F.next=N.next,F.prev=N,N.next.prev=F,N.next=F):(F.prev=F,F.next=F),F}function B(V){V.next.prev=V.prev,V.prev.next=V.next,V.prevZ&&(V.prevZ.nextZ=V.nextZ),V.nextZ&&(V.nextZ.prevZ=V.prevZ)}function D(V,Y,L){this.i=V,this.x=Y,this.y=L,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}n.deviation=function(V,Y,L,N){var F=Y&&Y.length,$=F?Y[0]*L:V.length,X=Math.abs(G(V,0,$,L));if(F)for(var z=0,K=Y.length;z0&&(N+=V[F-1].length,L.holes.push(N))}return L},Lc.exports}var $M=NM();const BM=W1($M);var ho={},yl={exports:{}};/*! https://mths.be/punycode v1.4.1 by @mathias */var UM=yl.exports,db;function VM(){return db||(db=1,(function(n,e){(function(t){var i=e&&!e.nodeType&&e,s=n&&!n.nodeType&&n,r=typeof jd=="object"&&jd;(r.global===r||r.window===r||r.self===r)&&(t=r);var o,a=2147483647,c=36,l=1,d=26,u=38,h=700,f=72,p=128,m="-",g=/^xn--/,v=/[^\x20-\x7E]/,y=/[\x2E\u3002\uFF0E\uFF61]/g,b={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},x=c-l,C=Math.floor,T=String.fromCharCode,S;function E(F){throw new RangeError(b[F])}function _(F,$){for(var X=F.length,z=[];X--;)z[X]=$(F[X]);return z}function I(F,$){var X=F.split("@"),z="";X.length>1&&(z=X[0]+"@",F=X[1]),F=F.replace(y,".");var K=F.split("."),J=_(K,$).join(".");return z+J}function M(F){for(var $=[],X=0,z=F.length,K,J;X=55296&&K<=56319&&X65535&&($-=65536,X+=T($>>>10&1023|55296),$=56320|$&1023),X+=T($),X}).join("")}function B(F){return F-48<10?F-22:F-65<26?F-65:F-97<26?F-97:c}function D(F,$){return F+22+75*(F<26)-(($!=0)<<5)}function G(F,$,X){var z=0;for(F=X?C(F/h):F>>1,F+=C(F/$);F>x*d>>1;z+=c)F=C(F/x);return C(z+(x+1)*F/(F+u))}function V(F){var $=[],X=F.length,z,K=0,J=p,oe=f,le,ve,Se,fe,be,q,Z,se,j;for(le=F.lastIndexOf(m),le<0&&(le=0),ve=0;ve=128&&E("not-basic"),$.push(F.charCodeAt(ve));for(Se=le>0?le+1:0;Se=X&&E("invalid-input"),Z=B(F.charCodeAt(Se++)),(Z>=c||Z>C((a-K)/be))&&E("overflow"),K+=Z*be,se=q<=oe?l:q>=oe+d?d:q-oe,!(ZC(a/j)&&E("overflow"),be*=j;z=$.length+1,oe=G(K-fe,z,fe==0),C(K/z)>a-J&&E("overflow"),J+=C(K/z),K%=z,$.splice(K++,0,J)}return k($)}function Y(F){var $,X,z,K,J,oe,le,ve,Se,fe,be,q=[],Z,se,j,H;for(F=M(F),Z=F.length,$=p,X=0,J=f,oe=0;oe=$&&beC((a-X)/se)&&E("overflow"),X+=(le-$)*se,$=le,oe=0;oea&&E("overflow"),be==$){for(ve=X,Se=c;fe=Se<=J?l:Se>=J+d?d:Se-J,!(ve-1e3&&ce<1e3||T.call(/e/,he))return he;var nt=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof ce=="number"){var Ft=ce<0?-I(-ce):I(ce);if(Ft!==ce){var Nt=String(Ft),ct=y.call(he,Nt.length+1);return b.call(Nt,nt,"$&_")+"."+b.call(b.call(ct,/([0-9]{3})/g,"$&_"),/_$/,"")}}return b.call(he,nt,"$&_")}var N=zM,F=N.custom,$=se(F)?F:null,X={__proto__:null,double:'"',single:"'"},z={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};Bh=function ce(he,nt,Ft,Nt){var ct=nt||{};if(O(ct,"quoteStyle")&&!O(X,ct.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(O(ct,"maxStringLength")&&(typeof ct.maxStringLength=="number"?ct.maxStringLength<0&&ct.maxStringLength!==1/0:ct.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var rn=O(ct,"customInspect")?ct.customInspect:!0;if(typeof rn!="boolean"&&rn!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(O(ct,"indent")&&ct.indent!==null&&ct.indent!==" "&&!(parseInt(ct.indent,10)===ct.indent&&ct.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(O(ct,"numericSeparator")&&typeof ct.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var Nn=ct.numericSeparator;if(typeof he>"u")return"undefined";if(he===null)return"null";if(typeof he=="boolean")return he?"true":"false";if(typeof he=="string")return de(he,ct);if(typeof he=="number"){if(he===0)return 1/0/he>0?"0":"-0";var jt=String(he);return Nn?L(he,jt):jt}if(typeof he=="bigint"){var $i=String(he)+"n";return Nn?L(he,$i):$i}var Ut=typeof ct.depth>"u"?5:ct.depth;if(typeof Ft>"u"&&(Ft=0),Ft>=Ut&&Ut>0&&typeof he=="object")return le(he)?"[Array]":"[Object]";var on=Te(ct,Ft);if(typeof Nt>"u")Nt=[];else if(ee(Nt,he)>=0)return"[Circular]";function fi(xr,Qo,xh){if(Qo&&(Nt=_.call(Nt),Nt.push(Qo)),xh){var _c={depth:ct.depth};return O(ct,"quoteStyle")&&(_c.quoteStyle=ct.quoteStyle),ce(xr,_c,Ft+1,Nt)}return ce(xr,ct,Ft+1,Nt)}if(typeof he=="function"&&!Se(he)){var $n=W(he),Fs=lt(he,fi);return"[Function"+($n?": "+$n:" (anonymous)")+"]"+(Fs.length>0?" { "+E.call(Fs,", ")+" }":"")}if(se(he)){var An=D?b.call(String(he),/^(Symbol\(.*\))_[^)]*$/,"$1"):B.call(he);return typeof he=="object"&&!D?Ge(An):An}if(Be(he)){for(var pn="<"+C.call(String(he.nodeName)),br=he.attributes||[],yr=0;yr",pn}if(le(he)){if(he.length===0)return"[]";var Jo=lt(he,fi);return on&&!Ze(Jo)?"["+vi(Jo,on)+"]":"[ "+E.call(Jo,", ")+" ]"}if(fe(he)){var nl=lt(he,fi);return!("cause"in Error.prototype)&&"cause"in he&&!V.call(he,"cause")?"{ ["+String(he)+"] "+E.call(S.call("[cause]: "+fi(he.cause),nl),", ")+" }":nl.length===0?"["+String(he)+"]":"{ ["+String(he)+"] "+E.call(nl,", ")+" }"}if(typeof he=="object"&&rn){if($&&typeof he[$]=="function"&&N)return N(he,{depth:Ut-Ft});if(rn!=="symbol"&&typeof he.inspect=="function")return he.inspect()}if(ne(he)){var Cc=[];return i&&i.call(he,function(xr,Qo){Cc.push(fi(Qo,he,!0)+" => "+fi(xr,he))}),Ee("Map",t.call(he),Cc,on)}if(ye(he)){var Ac=[];return a&&a.call(he,function(xr){Ac.push(fi(xr,he))}),Ee("Set",o.call(he),Ac,on)}if(ue(he))return Le("WeakMap");if(Ne(he))return Le("WeakSet");if(xe(he))return Le("WeakRef");if(q(he))return Ge(fi(Number(he)));if(j(he))return Ge(fi(M.call(he)));if(Z(he))return Ge(p.call(he));if(be(he))return Ge(fi(String(he)));if(typeof window<"u"&&he===window)return"{ [object Window] }";if(typeof globalThis<"u"&&he===globalThis||typeof jd<"u"&&he===jd)return"{ [object globalThis] }";if(!ve(he)&&!Se(he)){var sl=lt(he,fi),Tc=Y?Y(he)===Object.prototype:he instanceof Object||he.constructor===Object,Zo=he instanceof Object?"":"null prototype",Ec=!Tc&&G&&Object(he)===he&&G in he?y.call(U(he),8,-1):Zo?"Object":"",yh=Tc||typeof he.constructor!="function"?"":he.constructor.name?he.constructor.name+" ":"",rl=yh+(Ec||Zo?"["+E.call(S.call([],Ec||[],Zo||[]),": ")+"] ":"");return sl.length===0?rl+"{}":on?rl+"{"+vi(sl,on)+"}":rl+"{ "+E.call(sl,", ")+" }"}return String(he)};function K(ce,he,nt){var Ft=nt.quoteStyle||he,Nt=X[Ft];return Nt+ce+Nt}function J(ce){return b.call(String(ce),/"/g,""")}function oe(ce){return!G||!(typeof ce=="object"&&(G in ce||typeof ce[G]<"u"))}function le(ce){return U(ce)==="[object Array]"&&oe(ce)}function ve(ce){return U(ce)==="[object Date]"&&oe(ce)}function Se(ce){return U(ce)==="[object RegExp]"&&oe(ce)}function fe(ce){return U(ce)==="[object Error]"&&oe(ce)}function be(ce){return U(ce)==="[object String]"&&oe(ce)}function q(ce){return U(ce)==="[object Number]"&&oe(ce)}function Z(ce){return U(ce)==="[object Boolean]"&&oe(ce)}function se(ce){if(D)return ce&&typeof ce=="object"&&ce instanceof Symbol;if(typeof ce=="symbol")return!0;if(!ce||typeof ce!="object"||!B)return!1;try{return B.call(ce),!0}catch{}return!1}function j(ce){if(!ce||typeof ce!="object"||!M)return!1;try{return M.call(ce),!0}catch{}return!1}var H=Object.prototype.hasOwnProperty||function(ce){return ce in this};function O(ce,he){return H.call(ce,he)}function U(ce){return m.call(ce)}function W(ce){if(ce.name)return ce.name;var he=v.call(g.call(ce),/^function\s*([\w$]+)/);return he?he[1]:null}function ee(ce,he){if(ce.indexOf)return ce.indexOf(he);for(var nt=0,Ft=ce.length;nthe.maxStringLength){var nt=ce.length-he.maxStringLength,Ft="... "+nt+" more character"+(nt>1?"s":"");return de(y.call(ce,0,he.maxStringLength),he)+Ft}var Nt=z[he.quoteStyle||"single"];Nt.lastIndex=0;var ct=b.call(b.call(ce,Nt,"\\$1"),/[\x00-\x1f]/g,ge);return K(ct,"single",he)}function ge(ce){var he=ce.charCodeAt(0),nt={8:"b",9:"t",10:"n",12:"f",13:"r"}[he];return nt?"\\"+nt:"\\x"+(he<16?"0":"")+x.call(he.toString(16))}function Ge(ce){return"Object("+ce+")"}function Le(ce){return ce+" { ? }"}function Ee(ce,he,nt,Ft){var Nt=Ft?vi(nt,Ft):E.call(nt,", ");return ce+" ("+he+") {"+Nt+"}"}function Ze(ce){for(var he=0;hez1=n,j1=Symbol();function Gv(n){return n&&typeof n=="object"&&Object.prototype.toString.call(n)==="[object Object]"&&typeof n.toJSON!="function"}function AM(){const n=ag(!0),e=n.run(()=>$e({}));let t=[],i=[];const s=Ur({install(r){Zu(s),s._a=r,r.provide(j1,s),r.config.globalProperties.$pinia=s,i.forEach(o=>t.push(o)),i=[]},use(r){return this._a?t.push(r):i.push(r),this},_p:t,_a:null,_e:n,_s:new Map,state:e});return s}const Lp=()=>{};function Wv(n,e,t,i=Lp){n.add(e);const s=()=>{n.delete(e)&&i()};return!t&&lg()&&Ux(s),s}function ia(n,...e){n.forEach(t=>{t(...e)})}const TM=n=>n(),qv=Symbol(),Lh=Symbol();function Dp(n,e){n instanceof Map&&e instanceof Map?e.forEach((t,i)=>n.set(i,t)):n instanceof Set&&e instanceof Set&&e.forEach(n.add,n);for(const t in e){if(!Object.hasOwn(e,t))continue;const i=e[t],s=n[t];Gv(s)&&Gv(i)&&Object.hasOwn(n,t)&&!Qt(i)&&!or(i)?n[t]=Dp(s,i):n[t]=i}return n}const EM=Symbol();function _M(n){return!n||typeof n!="object"||!Object.hasOwn(n,EM)}const{assign:Er}=Object;function MM(n){return!!(Qt(n)&&n.effect)}function PM(n,e,t,i){const{state:s,actions:r,getters:o}=e,a=t.state.value[n];let c;function l(){a||(t.state.value[n]=s?s():{});const d=TE(t.state.value[n]);return Er(d,r,Object.keys(o||{}).reduce((u,h)=>(u[h]=Ur(Fe(()=>{Zu(t);const f=t._s.get(n);return o[h].call(f,f)})),u),{}))}return c=H1(n,l,e,t,i,!0),c}function H1(n,e,t={},i,s,r){let o;const a=Er({actions:{}},t),c={deep:!0};let l,d,u=new Set,h=new Set,f;const p=i.state.value[n];!r&&!p&&(i.state.value[n]={});let m;function g(S){let E;l=d=!1,typeof S=="function"?(S(i.state.value[n]),E={type:"patch function",storeId:n,events:f}):(Dp(i.state.value[n],S),E={type:"patch object",payload:S,storeId:n,events:f});const _=m=Symbol();zu().then(()=>{m===_&&(l=!0)}),d=!0,ia(u,E,i.state.value[n])}const v=r?function(){const{state:E}=t,_=E?E():{};this.$patch(I=>{Er(I,_)})}:Lp;function y(){o.stop(),u.clear(),h.clear(),i._s.delete(n)}const b=(S,E="")=>{if(qv in S)return S[Lh]=E,S;const _=function(){Zu(i);const I=Array.from(arguments),M=new Set,k=new Set;function B(V){M.add(V)}function D(V){k.add(V)}ia(h,{args:I,name:_[Lh],store:C,after:B,onError:D});let G;try{G=S.apply(this&&this.$id===n?this:C,I)}catch(V){throw ia(k,V),V}return G instanceof Promise?G.then(V=>(ia(M,V),V)).catch(V=>(ia(k,V),Promise.reject(V))):(ia(M,G),G)};return _[qv]=!0,_[Lh]=E,_},w={_p:i,$id:n,$onAction:Wv.bind(null,h),$patch:g,$reset:v,$subscribe(S,E={}){if(u.has(S))return Lp;const _=Wv(u,S,E.detached,()=>I()),I=o.run(()=>ei(()=>i.state.value[n],M=>{(E.flush==="sync"?d:l)&&S({storeId:n,type:"direct",events:f},M)},Er({},c,E)));return _},$dispose:y},C=zo(w);i._s.set(n,C);const T=(i._a&&i._a.runWithContext||TM)(()=>i._e.run(()=>(o=ag()).run(()=>e({action:b}))));for(const S in T){const E=T[S];Qt(E)&&!MM(E)||or(E)?r||(p&&_M(E)&&(Qt(E)?E.value=p[S]:((E instanceof Set||E instanceof Map)&&E.clear(),Dp(E,p[S]))),i.state.value[n][S]=E):typeof E=="function"&&(T[S]=b(E,S),a.actions[S]=E)}return Er(C,T),Er(_t(C),T),Object.defineProperty(C,"$state",{get:()=>i.state.value[n],set:S=>{g(E=>{Er(E,S)})}}),i._p.forEach(S=>{const E=o.run(()=>S({store:C,app:i._a,pinia:i,options:a}));Er(C,E)}),p&&r&&t.hydrate&&t.hydrate(C.$state,p),l=!0,d=!0,C}/*! #__NO_SIDE_EFFECTS__ */function IM(n,e,t){let i;const s=typeof e=="function";i=s?t:e;function r(o,a){const c=DE();return o=o||(c?Ro(j1,null):null),o&&Zu(o),o=z1,o._s.has(n)||(s?H1(n,e,i,o):PM(n,i,o)),o._s.get(n)}return r.$id=n,r}var jo=(n=>(n[n.WEBGL_LEGACY=0]="WEBGL_LEGACY",n[n.WEBGL=1]="WEBGL",n[n.WEBGL2=2]="WEBGL2",n))(jo||{}),G1=(n=>(n[n.UNKNOWN=0]="UNKNOWN",n[n.WEBGL=1]="WEBGL",n[n.CANVAS=2]="CANVAS",n))(G1||{}),Op=(n=>(n[n.COLOR=16384]="COLOR",n[n.DEPTH=256]="DEPTH",n[n.STENCIL=1024]="STENCIL",n))(Op||{}),Qe=(n=>(n[n.NORMAL=0]="NORMAL",n[n.ADD=1]="ADD",n[n.MULTIPLY=2]="MULTIPLY",n[n.SCREEN=3]="SCREEN",n[n.OVERLAY=4]="OVERLAY",n[n.DARKEN=5]="DARKEN",n[n.LIGHTEN=6]="LIGHTEN",n[n.COLOR_DODGE=7]="COLOR_DODGE",n[n.COLOR_BURN=8]="COLOR_BURN",n[n.HARD_LIGHT=9]="HARD_LIGHT",n[n.SOFT_LIGHT=10]="SOFT_LIGHT",n[n.DIFFERENCE=11]="DIFFERENCE",n[n.EXCLUSION=12]="EXCLUSION",n[n.HUE=13]="HUE",n[n.SATURATION=14]="SATURATION",n[n.COLOR=15]="COLOR",n[n.LUMINOSITY=16]="LUMINOSITY",n[n.NORMAL_NPM=17]="NORMAL_NPM",n[n.ADD_NPM=18]="ADD_NPM",n[n.SCREEN_NPM=19]="SCREEN_NPM",n[n.NONE=20]="NONE",n[n.SRC_OVER=0]="SRC_OVER",n[n.SRC_IN=21]="SRC_IN",n[n.SRC_OUT=22]="SRC_OUT",n[n.SRC_ATOP=23]="SRC_ATOP",n[n.DST_OVER=24]="DST_OVER",n[n.DST_IN=25]="DST_IN",n[n.DST_OUT=26]="DST_OUT",n[n.DST_ATOP=27]="DST_ATOP",n[n.ERASE=26]="ERASE",n[n.SUBTRACT=28]="SUBTRACT",n[n.XOR=29]="XOR",n))(Qe||{}),Cs=(n=>(n[n.POINTS=0]="POINTS",n[n.LINES=1]="LINES",n[n.LINE_LOOP=2]="LINE_LOOP",n[n.LINE_STRIP=3]="LINE_STRIP",n[n.TRIANGLES=4]="TRIANGLES",n[n.TRIANGLE_STRIP=5]="TRIANGLE_STRIP",n[n.TRIANGLE_FAN=6]="TRIANGLE_FAN",n))(Cs||{}),Pe=(n=>(n[n.RGBA=6408]="RGBA",n[n.RGB=6407]="RGB",n[n.RG=33319]="RG",n[n.RED=6403]="RED",n[n.RGBA_INTEGER=36249]="RGBA_INTEGER",n[n.RGB_INTEGER=36248]="RGB_INTEGER",n[n.RG_INTEGER=33320]="RG_INTEGER",n[n.RED_INTEGER=36244]="RED_INTEGER",n[n.ALPHA=6406]="ALPHA",n[n.LUMINANCE=6409]="LUMINANCE",n[n.LUMINANCE_ALPHA=6410]="LUMINANCE_ALPHA",n[n.DEPTH_COMPONENT=6402]="DEPTH_COMPONENT",n[n.DEPTH_STENCIL=34041]="DEPTH_STENCIL",n))(Pe||{}),Pa=(n=>(n[n.TEXTURE_2D=3553]="TEXTURE_2D",n[n.TEXTURE_CUBE_MAP=34067]="TEXTURE_CUBE_MAP",n[n.TEXTURE_2D_ARRAY=35866]="TEXTURE_2D_ARRAY",n[n.TEXTURE_CUBE_MAP_POSITIVE_X=34069]="TEXTURE_CUBE_MAP_POSITIVE_X",n[n.TEXTURE_CUBE_MAP_NEGATIVE_X=34070]="TEXTURE_CUBE_MAP_NEGATIVE_X",n[n.TEXTURE_CUBE_MAP_POSITIVE_Y=34071]="TEXTURE_CUBE_MAP_POSITIVE_Y",n[n.TEXTURE_CUBE_MAP_NEGATIVE_Y=34072]="TEXTURE_CUBE_MAP_NEGATIVE_Y",n[n.TEXTURE_CUBE_MAP_POSITIVE_Z=34073]="TEXTURE_CUBE_MAP_POSITIVE_Z",n[n.TEXTURE_CUBE_MAP_NEGATIVE_Z=34074]="TEXTURE_CUBE_MAP_NEGATIVE_Z",n))(Pa||{}),je=(n=>(n[n.UNSIGNED_BYTE=5121]="UNSIGNED_BYTE",n[n.UNSIGNED_SHORT=5123]="UNSIGNED_SHORT",n[n.UNSIGNED_SHORT_5_6_5=33635]="UNSIGNED_SHORT_5_6_5",n[n.UNSIGNED_SHORT_4_4_4_4=32819]="UNSIGNED_SHORT_4_4_4_4",n[n.UNSIGNED_SHORT_5_5_5_1=32820]="UNSIGNED_SHORT_5_5_5_1",n[n.UNSIGNED_INT=5125]="UNSIGNED_INT",n[n.UNSIGNED_INT_10F_11F_11F_REV=35899]="UNSIGNED_INT_10F_11F_11F_REV",n[n.UNSIGNED_INT_2_10_10_10_REV=33640]="UNSIGNED_INT_2_10_10_10_REV",n[n.UNSIGNED_INT_24_8=34042]="UNSIGNED_INT_24_8",n[n.UNSIGNED_INT_5_9_9_9_REV=35902]="UNSIGNED_INT_5_9_9_9_REV",n[n.BYTE=5120]="BYTE",n[n.SHORT=5122]="SHORT",n[n.INT=5124]="INT",n[n.FLOAT=5126]="FLOAT",n[n.FLOAT_32_UNSIGNED_INT_24_8_REV=36269]="FLOAT_32_UNSIGNED_INT_24_8_REV",n[n.HALF_FLOAT=36193]="HALF_FLOAT",n))(je||{}),Xe=(n=>(n[n.FLOAT=0]="FLOAT",n[n.INT=1]="INT",n[n.UINT=2]="UINT",n))(Xe||{}),Gn=(n=>(n[n.NEAREST=0]="NEAREST",n[n.LINEAR=1]="LINEAR",n))(Gn||{}),Jn=(n=>(n[n.CLAMP=33071]="CLAMP",n[n.REPEAT=10497]="REPEAT",n[n.MIRRORED_REPEAT=33648]="MIRRORED_REPEAT",n))(Jn||{}),On=(n=>(n[n.OFF=0]="OFF",n[n.POW2=1]="POW2",n[n.ON=2]="ON",n[n.ON_MANUAL=3]="ON_MANUAL",n))(On||{}),ki=(n=>(n[n.NPM=0]="NPM",n[n.UNPACK=1]="UNPACK",n[n.PMA=2]="PMA",n[n.NO_PREMULTIPLIED_ALPHA=0]="NO_PREMULTIPLIED_ALPHA",n[n.PREMULTIPLY_ON_UPLOAD=1]="PREMULTIPLY_ON_UPLOAD",n[n.PREMULTIPLIED_ALPHA=2]="PREMULTIPLIED_ALPHA",n))(ki||{}),bs=(n=>(n[n.NO=0]="NO",n[n.YES=1]="YES",n[n.AUTO=2]="AUTO",n[n.BLEND=0]="BLEND",n[n.CLEAR=1]="CLEAR",n[n.BLIT=2]="BLIT",n))(bs||{}),wg=(n=>(n[n.AUTO=0]="AUTO",n[n.MANUAL=1]="MANUAL",n))(wg||{}),Rn=(n=>(n.LOW="lowp",n.MEDIUM="mediump",n.HIGH="highp",n))(Rn||{}),Si=(n=>(n[n.NONE=0]="NONE",n[n.SCISSOR=1]="SCISSOR",n[n.STENCIL=2]="STENCIL",n[n.SPRITE=3]="SPRITE",n[n.COLOR=4]="COLOR",n))(Si||{}),yi=(n=>(n[n.NONE=0]="NONE",n[n.LOW=2]="LOW",n[n.MEDIUM=4]="MEDIUM",n[n.HIGH=8]="HIGH",n))(yi||{}),_s=(n=>(n[n.ELEMENT_ARRAY_BUFFER=34963]="ELEMENT_ARRAY_BUFFER",n[n.ARRAY_BUFFER=34962]="ARRAY_BUFFER",n[n.UNIFORM_BUFFER=35345]="UNIFORM_BUFFER",n))(_s||{});const kM={createCanvas:(n,e)=>{const t=document.createElement("canvas");return t.width=n,t.height=e,t},getCanvasRenderingContext2D:()=>CanvasRenderingContext2D,getWebGLRenderingContext:()=>WebGLRenderingContext,getNavigator:()=>navigator,getBaseUrl:()=>document.baseURI??window.location.href,getFontFaceSet:()=>document.fonts,fetch:(n,e)=>fetch(n,e),parseXML:n=>new DOMParser().parseFromString(n,"text/xml")},Ve={ADAPTER:kM,RESOLUTION:1,CREATE_IMAGE_BITMAP:!1,ROUND_PIXELS:!1};var Dh=/iPhone/i,Kv=/iPod/i,Jv=/iPad/i,Zv=/\biOS-universal(?:.+)Mac\b/i,Oh=/\bAndroid(?:.+)Mobile\b/i,Qv=/Android/i,na=/(?:SD4930UR|\bSilk(?:.+)Mobile\b)/i,Fc=/Silk/i,Ns=/Windows Phone/i,eb=/\bWindows(?:.+)ARM\b/i,tb=/BlackBerry/i,ib=/BB10/i,nb=/Opera Mini/i,sb=/\b(CriOS|Chrome)(?:.+)Mobile/i,rb=/Mobile(?:.+)Firefox\b/i,ob=function(n){return typeof n<"u"&&n.platform==="MacIntel"&&typeof n.maxTouchPoints=="number"&&n.maxTouchPoints>1&&typeof MSStream>"u"};function RM(n){return function(e){return e.test(n)}}function ab(n){var e={userAgent:"",platform:"",maxTouchPoints:0};!n&&typeof navigator<"u"?e={userAgent:navigator.userAgent,platform:navigator.platform,maxTouchPoints:navigator.maxTouchPoints||0}:typeof n=="string"?e.userAgent=n:n&&n.userAgent&&(e={userAgent:n.userAgent,platform:n.platform,maxTouchPoints:n.maxTouchPoints||0});var t=e.userAgent,i=t.split("[FBAN");typeof i[1]<"u"&&(t=i[0]),i=t.split("Twitter"),typeof i[1]<"u"&&(t=i[0]);var s=RM(t),r={apple:{phone:s(Dh)&&!s(Ns),ipod:s(Kv),tablet:!s(Dh)&&(s(Jv)||ob(e))&&!s(Ns),universal:s(Zv),device:(s(Dh)||s(Kv)||s(Jv)||s(Zv)||ob(e))&&!s(Ns)},amazon:{phone:s(na),tablet:!s(na)&&s(Fc),device:s(na)||s(Fc)},android:{phone:!s(Ns)&&s(na)||!s(Ns)&&s(Oh),tablet:!s(Ns)&&!s(na)&&!s(Oh)&&(s(Fc)||s(Qv)),device:!s(Ns)&&(s(na)||s(Fc)||s(Oh)||s(Qv))||s(/\bokhttp\b/i)},windows:{phone:s(Ns),tablet:s(eb),device:s(Ns)||s(eb)},other:{blackberry:s(tb),blackberry10:s(ib),opera:s(nb),firefox:s(rb),chrome:s(sb),device:s(tb)||s(ib)||s(nb)||s(rb)||s(sb)},any:!1,phone:!1,tablet:!1};return r.any=r.apple.device||r.android.device||r.windows.device||r.other.device,r.phone=r.apple.phone||r.android.phone||r.windows.phone,r.tablet=r.apple.tablet||r.android.tablet||r.windows.tablet,r}const FM=ab.default??ab,Ks=FM(globalThis.navigator);Ve.RETINA_PREFIX=/@([0-9\.]+)x/;Ve.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT=!1;var jd=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function W1(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}function LM(n){if(Object.prototype.hasOwnProperty.call(n,"__esModule"))return n;var e=n.default;if(typeof e=="function"){var t=function i(){return this instanceof i?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(n).forEach(function(i){var s=Object.getOwnPropertyDescriptor(n,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:function(){return n[i]}})}),t}var Nh={exports:{}},lb;function DM(){return lb||(lb=1,(function(n){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function s(c,l,d){this.fn=c,this.context=l,this.once=d||!1}function r(c,l,d,u,h){if(typeof d!="function")throw new TypeError("The listener must be a function");var f=new s(d,u||c,h),p=t?t+l:l;return c._events[p]?c._events[p].fn?c._events[p]=[c._events[p],f]:c._events[p].push(f):(c._events[p]=f,c._eventsCount++),c}function o(c,l){--c._eventsCount===0?c._events=new i:delete c._events[l]}function a(){this._events=new i,this._eventsCount=0}a.prototype.eventNames=function(){var l=[],d,u;if(this._eventsCount===0)return l;for(u in d=this._events)e.call(d,u)&&l.push(t?u.slice(1):u);return Object.getOwnPropertySymbols?l.concat(Object.getOwnPropertySymbols(d)):l},a.prototype.listeners=function(l){var d=t?t+l:l,u=this._events[d];if(!u)return[];if(u.fn)return[u.fn];for(var h=0,f=u.length,p=new Array(f);h80*L){z=J=V[0],K=oe=V[1];for(var fe=L;feJ&&(J=le),ve>oe&&(oe=ve);Se=Math.max(J-z,oe-K),Se=Se!==0?32767/Se:0}return i($,X,L,z,K,Se,0),X}function e(V,Y,L,N,F){var $,X;if(F===G(V,Y,L,N)>0)for($=Y;$=Y;$-=N)X=k($,V[$],V[$+1],X);return X&&w(X,X.next)&&(B(X),X=X.next),X}function t(V,Y){if(!V)return V;Y||(Y=V);var L=V,N;do if(N=!1,!L.steiner&&(w(L,L.next)||b(L.prev,L,L.next)===0)){if(B(L),L=Y=L.prev,L===L.next)break;N=!0}else L=L.next;while(N||L!==Y);return Y}function i(V,Y,L,N,F,$,X){if(V){!X&&$&&f(V,N,F,$);for(var z=V,K,J;V.prev!==V.next;){if(K=V.prev,J=V.next,$?r(V,N,F,$):s(V)){Y.push(K.i/L|0),Y.push(V.i/L|0),Y.push(J.i/L|0),B(V),V=J.next,z=J.next;continue}if(V=J,V===z){X?X===1?(V=o(t(V),Y,L),i(V,Y,L,N,F,$,2)):X===2&&a(V,Y,L,N,F,$):i(t(V),Y,L,N,F,$,1);break}}}}function s(V){var Y=V.prev,L=V,N=V.next;if(b(Y,L,N)>=0)return!1;for(var F=Y.x,$=L.x,X=N.x,z=Y.y,K=L.y,J=N.y,oe=F<$?F$?F>X?F:X:$>X?$:X,Se=z>K?z>J?z:J:K>J?K:J,fe=N.next;fe!==Y;){if(fe.x>=oe&&fe.x<=ve&&fe.y>=le&&fe.y<=Se&&v(F,z,$,K,X,J,fe.x,fe.y)&&b(fe.prev,fe,fe.next)>=0)return!1;fe=fe.next}return!0}function r(V,Y,L,N){var F=V.prev,$=V,X=V.next;if(b(F,$,X)>=0)return!1;for(var z=F.x,K=$.x,J=X.x,oe=F.y,le=$.y,ve=X.y,Se=zK?z>J?z:J:K>J?K:J,q=oe>le?oe>ve?oe:ve:le>ve?le:ve,Z=m(Se,fe,Y,L,N),se=m(be,q,Y,L,N),j=V.prevZ,H=V.nextZ;j&&j.z>=Z&&H&&H.z<=se;){if(j.x>=Se&&j.x<=be&&j.y>=fe&&j.y<=q&&j!==F&&j!==X&&v(z,oe,K,le,J,ve,j.x,j.y)&&b(j.prev,j,j.next)>=0||(j=j.prevZ,H.x>=Se&&H.x<=be&&H.y>=fe&&H.y<=q&&H!==F&&H!==X&&v(z,oe,K,le,J,ve,H.x,H.y)&&b(H.prev,H,H.next)>=0))return!1;H=H.nextZ}for(;j&&j.z>=Z;){if(j.x>=Se&&j.x<=be&&j.y>=fe&&j.y<=q&&j!==F&&j!==X&&v(z,oe,K,le,J,ve,j.x,j.y)&&b(j.prev,j,j.next)>=0)return!1;j=j.prevZ}for(;H&&H.z<=se;){if(H.x>=Se&&H.x<=be&&H.y>=fe&&H.y<=q&&H!==F&&H!==X&&v(z,oe,K,le,J,ve,H.x,H.y)&&b(H.prev,H,H.next)>=0)return!1;H=H.nextZ}return!0}function o(V,Y,L){var N=V;do{var F=N.prev,$=N.next.next;!w(F,$)&&C(F,N,N.next,$)&&_(F,$)&&_($,F)&&(Y.push(F.i/L|0),Y.push(N.i/L|0),Y.push($.i/L|0),B(N),B(N.next),N=V=$),N=N.next}while(N!==V);return t(N)}function a(V,Y,L,N,F,$){var X=V;do{for(var z=X.next.next;z!==X.prev;){if(X.i!==z.i&&y(X,z)){var K=M(X,z);X=t(X,X.next),K=t(K,K.next),i(X,Y,L,N,F,$,0),i(K,Y,L,N,F,$,0);return}z=z.next}X=X.next}while(X!==V)}function c(V,Y,L,N){var F=[],$,X,z,K,J;for($=0,X=Y.length;$=L.next.y&&L.next.y!==L.y){var z=L.x+(F-L.y)*(L.next.x-L.x)/(L.next.y-L.y);if(z<=N&&z>$&&($=z,X=L.x=L.x&&L.x>=J&&N!==L.x&&v(FX.x||L.x===X.x&&h(X,L)))&&(X=L,le=ve)),L=L.next;while(L!==K);return X}function h(V,Y){return b(V.prev,V,Y.prev)<0&&b(Y.next,V,V.next)<0}function f(V,Y,L,N){var F=V;do F.z===0&&(F.z=m(F.x,F.y,Y,L,N)),F.prevZ=F.prev,F.nextZ=F.next,F=F.next;while(F!==V);F.prevZ.nextZ=null,F.prevZ=null,p(F)}function p(V){var Y,L,N,F,$,X,z,K,J=1;do{for(L=V,V=null,$=null,X=0;L;){for(X++,N=L,z=0,Y=0;Y0||K>0&&N;)z!==0&&(K===0||!N||L.z<=N.z)?(F=L,L=L.nextZ,z--):(F=N,N=N.nextZ,K--),$?$.nextZ=F:V=F,F.prevZ=$,$=F;L=N}$.nextZ=null,J*=2}while(X>1);return V}function m(V,Y,L,N,F){return V=(V-L)*F|0,Y=(Y-N)*F|0,V=(V|V<<8)&16711935,V=(V|V<<4)&252645135,V=(V|V<<2)&858993459,V=(V|V<<1)&1431655765,Y=(Y|Y<<8)&16711935,Y=(Y|Y<<4)&252645135,Y=(Y|Y<<2)&858993459,Y=(Y|Y<<1)&1431655765,V|Y<<1}function g(V){var Y=V,L=V;do(Y.x=(V-X)*($-z)&&(V-X)*(N-z)>=(L-X)*(Y-z)&&(L-X)*($-z)>=(F-X)*(N-z)}function y(V,Y){return V.next.i!==Y.i&&V.prev.i!==Y.i&&!E(V,Y)&&(_(V,Y)&&_(Y,V)&&I(V,Y)&&(b(V.prev,V,Y.prev)||b(V,Y.prev,Y))||w(V,Y)&&b(V.prev,V,V.next)>0&&b(Y.prev,Y,Y.next)>0)}function b(V,Y,L){return(Y.y-V.y)*(L.x-Y.x)-(Y.x-V.x)*(L.y-Y.y)}function w(V,Y){return V.x===Y.x&&V.y===Y.y}function C(V,Y,L,N){var F=S(b(V,Y,L)),$=S(b(V,Y,N)),X=S(b(L,N,V)),z=S(b(L,N,Y));return!!(F!==$&&X!==z||F===0&&T(V,L,Y)||$===0&&T(V,N,Y)||X===0&&T(L,V,N)||z===0&&T(L,Y,N))}function T(V,Y,L){return Y.x<=Math.max(V.x,L.x)&&Y.x>=Math.min(V.x,L.x)&&Y.y<=Math.max(V.y,L.y)&&Y.y>=Math.min(V.y,L.y)}function S(V){return V>0?1:V<0?-1:0}function E(V,Y){var L=V;do{if(L.i!==V.i&&L.next.i!==V.i&&L.i!==Y.i&&L.next.i!==Y.i&&C(L,L.next,V,Y))return!0;L=L.next}while(L!==V);return!1}function _(V,Y){return b(V.prev,V,V.next)<0?b(V,Y,V.next)>=0&&b(V,V.prev,Y)>=0:b(V,Y,V.prev)<0||b(V,V.next,Y)<0}function I(V,Y){var L=V,N=!1,F=(V.x+Y.x)/2,$=(V.y+Y.y)/2;do L.y>$!=L.next.y>$&&L.next.y!==L.y&&F<(L.next.x-L.x)*($-L.y)/(L.next.y-L.y)+L.x&&(N=!N),L=L.next;while(L!==V);return N}function M(V,Y){var L=new D(V.i,V.x,V.y),N=new D(Y.i,Y.x,Y.y),F=V.next,$=Y.prev;return V.next=Y,Y.prev=V,L.next=F,F.prev=L,N.next=L,L.prev=N,$.next=N,N.prev=$,N}function k(V,Y,L,N){var F=new D(V,Y,L);return N?(F.next=N.next,F.prev=N,N.next.prev=F,N.next=F):(F.prev=F,F.next=F),F}function B(V){V.next.prev=V.prev,V.prev.next=V.next,V.prevZ&&(V.prevZ.nextZ=V.nextZ),V.nextZ&&(V.nextZ.prevZ=V.prevZ)}function D(V,Y,L){this.i=V,this.x=Y,this.y=L,this.prev=null,this.next=null,this.z=0,this.prevZ=null,this.nextZ=null,this.steiner=!1}n.deviation=function(V,Y,L,N){var F=Y&&Y.length,$=F?Y[0]*L:V.length,X=Math.abs(G(V,0,$,L));if(F)for(var z=0,K=Y.length;z0&&(N+=V[F-1].length,L.holes.push(N))}return L},Lc.exports}var $M=NM();const BM=W1($M);var ho={},yl={exports:{}};/*! https://mths.be/punycode v1.4.1 by @mathias */var UM=yl.exports,db;function VM(){return db||(db=1,(function(n,e){(function(t){var i=e&&!e.nodeType&&e,s=n&&!n.nodeType&&n,r=typeof jd=="object"&&jd;(r.global===r||r.window===r||r.self===r)&&(t=r);var o,a=2147483647,c=36,l=1,d=26,u=38,h=700,f=72,p=128,m="-",g=/^xn--/,v=/[^\x20-\x7E]/,y=/[\x2E\u3002\uFF0E\uFF61]/g,b={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},w=c-l,C=Math.floor,T=String.fromCharCode,S;function E(F){throw new RangeError(b[F])}function _(F,$){for(var X=F.length,z=[];X--;)z[X]=$(F[X]);return z}function I(F,$){var X=F.split("@"),z="";X.length>1&&(z=X[0]+"@",F=X[1]),F=F.replace(y,".");var K=F.split("."),J=_(K,$).join(".");return z+J}function M(F){for(var $=[],X=0,z=F.length,K,J;X=55296&&K<=56319&&X65535&&($-=65536,X+=T($>>>10&1023|55296),$=56320|$&1023),X+=T($),X}).join("")}function B(F){return F-48<10?F-22:F-65<26?F-65:F-97<26?F-97:c}function D(F,$){return F+22+75*(F<26)-(($!=0)<<5)}function G(F,$,X){var z=0;for(F=X?C(F/h):F>>1,F+=C(F/$);F>w*d>>1;z+=c)F=C(F/w);return C(z+(w+1)*F/(F+u))}function V(F){var $=[],X=F.length,z,K=0,J=p,oe=f,le,ve,Se,fe,be,q,Z,se,j;for(le=F.lastIndexOf(m),le<0&&(le=0),ve=0;ve=128&&E("not-basic"),$.push(F.charCodeAt(ve));for(Se=le>0?le+1:0;Se=X&&E("invalid-input"),Z=B(F.charCodeAt(Se++)),(Z>=c||Z>C((a-K)/be))&&E("overflow"),K+=Z*be,se=q<=oe?l:q>=oe+d?d:q-oe,!(ZC(a/j)&&E("overflow"),be*=j;z=$.length+1,oe=G(K-fe,z,fe==0),C(K/z)>a-J&&E("overflow"),J+=C(K/z),K%=z,$.splice(K++,0,J)}return k($)}function Y(F){var $,X,z,K,J,oe,le,ve,Se,fe,be,q=[],Z,se,j,H;for(F=M(F),Z=F.length,$=p,X=0,J=f,oe=0;oe=$&&beC((a-X)/se)&&E("overflow"),X+=(le-$)*se,$=le,oe=0;oea&&E("overflow"),be==$){for(ve=X,Se=c;fe=Se<=J?l:Se>=J+d?d:Se-J,!(ve-1e3&&ce<1e3||T.call(/e/,he))return he;var nt=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof ce=="number"){var Ft=ce<0?-I(-ce):I(ce);if(Ft!==ce){var Nt=String(Ft),ct=y.call(he,Nt.length+1);return b.call(Nt,nt,"$&_")+"."+b.call(b.call(ct,/([0-9]{3})/g,"$&_"),/_$/,"")}}return b.call(he,nt,"$&_")}var N=zM,F=N.custom,$=se(F)?F:null,X={__proto__:null,double:'"',single:"'"},z={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};Bh=function ce(he,nt,Ft,Nt){var ct=nt||{};if(O(ct,"quoteStyle")&&!O(X,ct.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(O(ct,"maxStringLength")&&(typeof ct.maxStringLength=="number"?ct.maxStringLength<0&&ct.maxStringLength!==1/0:ct.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var rn=O(ct,"customInspect")?ct.customInspect:!0;if(typeof rn!="boolean"&&rn!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(O(ct,"indent")&&ct.indent!==null&&ct.indent!==" "&&!(parseInt(ct.indent,10)===ct.indent&&ct.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(O(ct,"numericSeparator")&&typeof ct.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var Nn=ct.numericSeparator;if(typeof he>"u")return"undefined";if(he===null)return"null";if(typeof he=="boolean")return he?"true":"false";if(typeof he=="string")return de(he,ct);if(typeof he=="number"){if(he===0)return 1/0/he>0?"0":"-0";var jt=String(he);return Nn?L(he,jt):jt}if(typeof he=="bigint"){var $i=String(he)+"n";return Nn?L(he,$i):$i}var Ut=typeof ct.depth>"u"?5:ct.depth;if(typeof Ft>"u"&&(Ft=0),Ft>=Ut&&Ut>0&&typeof he=="object")return le(he)?"[Array]":"[Object]";var on=Te(ct,Ft);if(typeof Nt>"u")Nt=[];else if(ee(Nt,he)>=0)return"[Circular]";function fi(xr,Qo,xh){if(Qo&&(Nt=_.call(Nt),Nt.push(Qo)),xh){var _c={depth:ct.depth};return O(ct,"quoteStyle")&&(_c.quoteStyle=ct.quoteStyle),ce(xr,_c,Ft+1,Nt)}return ce(xr,ct,Ft+1,Nt)}if(typeof he=="function"&&!Se(he)){var $n=W(he),Fs=lt(he,fi);return"[Function"+($n?": "+$n:" (anonymous)")+"]"+(Fs.length>0?" { "+E.call(Fs,", ")+" }":"")}if(se(he)){var An=D?b.call(String(he),/^(Symbol\(.*\))_[^)]*$/,"$1"):B.call(he);return typeof he=="object"&&!D?Ge(An):An}if(Be(he)){for(var pn="<"+C.call(String(he.nodeName)),br=he.attributes||[],yr=0;yr",pn}if(le(he)){if(he.length===0)return"[]";var Jo=lt(he,fi);return on&&!Ze(Jo)?"["+vi(Jo,on)+"]":"[ "+E.call(Jo,", ")+" ]"}if(fe(he)){var nl=lt(he,fi);return!("cause"in Error.prototype)&&"cause"in he&&!V.call(he,"cause")?"{ ["+String(he)+"] "+E.call(S.call("[cause]: "+fi(he.cause),nl),", ")+" }":nl.length===0?"["+String(he)+"]":"{ ["+String(he)+"] "+E.call(nl,", ")+" }"}if(typeof he=="object"&&rn){if($&&typeof he[$]=="function"&&N)return N(he,{depth:Ut-Ft});if(rn!=="symbol"&&typeof he.inspect=="function")return he.inspect()}if(ne(he)){var Cc=[];return i&&i.call(he,function(xr,Qo){Cc.push(fi(Qo,he,!0)+" => "+fi(xr,he))}),Ee("Map",t.call(he),Cc,on)}if(ye(he)){var Ac=[];return a&&a.call(he,function(xr){Ac.push(fi(xr,he))}),Ee("Set",o.call(he),Ac,on)}if(ue(he))return Le("WeakMap");if(Ne(he))return Le("WeakSet");if(xe(he))return Le("WeakRef");if(q(he))return Ge(fi(Number(he)));if(j(he))return Ge(fi(M.call(he)));if(Z(he))return Ge(p.call(he));if(be(he))return Ge(fi(String(he)));if(typeof window<"u"&&he===window)return"{ [object Window] }";if(typeof globalThis<"u"&&he===globalThis||typeof jd<"u"&&he===jd)return"{ [object globalThis] }";if(!ve(he)&&!Se(he)){var sl=lt(he,fi),Tc=Y?Y(he)===Object.prototype:he instanceof Object||he.constructor===Object,Zo=he instanceof Object?"":"null prototype",Ec=!Tc&&G&&Object(he)===he&&G in he?y.call(U(he),8,-1):Zo?"Object":"",yh=Tc||typeof he.constructor!="function"?"":he.constructor.name?he.constructor.name+" ":"",rl=yh+(Ec||Zo?"["+E.call(S.call([],Ec||[],Zo||[]),": ")+"] ":"");return sl.length===0?rl+"{}":on?rl+"{"+vi(sl,on)+"}":rl+"{ "+E.call(sl,", ")+" }"}return String(he)};function K(ce,he,nt){var Ft=nt.quoteStyle||he,Nt=X[Ft];return Nt+ce+Nt}function J(ce){return b.call(String(ce),/"/g,""")}function oe(ce){return!G||!(typeof ce=="object"&&(G in ce||typeof ce[G]<"u"))}function le(ce){return U(ce)==="[object Array]"&&oe(ce)}function ve(ce){return U(ce)==="[object Date]"&&oe(ce)}function Se(ce){return U(ce)==="[object RegExp]"&&oe(ce)}function fe(ce){return U(ce)==="[object Error]"&&oe(ce)}function be(ce){return U(ce)==="[object String]"&&oe(ce)}function q(ce){return U(ce)==="[object Number]"&&oe(ce)}function Z(ce){return U(ce)==="[object Boolean]"&&oe(ce)}function se(ce){if(D)return ce&&typeof ce=="object"&&ce instanceof Symbol;if(typeof ce=="symbol")return!0;if(!ce||typeof ce!="object"||!B)return!1;try{return B.call(ce),!0}catch{}return!1}function j(ce){if(!ce||typeof ce!="object"||!M)return!1;try{return M.call(ce),!0}catch{}return!1}var H=Object.prototype.hasOwnProperty||function(ce){return ce in this};function O(ce,he){return H.call(ce,he)}function U(ce){return m.call(ce)}function W(ce){if(ce.name)return ce.name;var he=v.call(g.call(ce),/^function\s*([\w$]+)/);return he?he[1]:null}function ee(ce,he){if(ce.indexOf)return ce.indexOf(he);for(var nt=0,Ft=ce.length;nthe.maxStringLength){var nt=ce.length-he.maxStringLength,Ft="... "+nt+" more character"+(nt>1?"s":"");return de(y.call(ce,0,he.maxStringLength),he)+Ft}var Nt=z[he.quoteStyle||"single"];Nt.lastIndex=0;var ct=b.call(b.call(ce,Nt,"\\$1"),/[\x00-\x1f]/g,ge);return K(ct,"single",he)}function ge(ce){var he=ce.charCodeAt(0),nt={8:"b",9:"t",10:"n",12:"f",13:"r"}[he];return nt?"\\"+nt:"\\x"+(he<16?"0":"")+w.call(he.toString(16))}function Ge(ce){return"Object("+ce+")"}function Le(ce){return ce+" { ? }"}function Ee(ce,he,nt,Ft){var Nt=Ft?vi(nt,Ft):E.call(nt,", ");return ce+" ("+he+") {"+Nt+"}"}function Ze(ce){for(var he=0;he=0)return!1;return!0}function Te(ce,he){var nt;if(ce.indent===" ")nt=" ";else if(typeof ce.indent=="number"&&ce.indent>0)nt=E.call(Array(ce.indent+1)," ");else return null;return{base:nt,prev:E.call(Array(he+1),nt)}}function vi(ce,he){if(ce.length===0)return"";var nt=` `+he.prev+he.base;return nt+E.call(ce,","+nt)+` -`+he.prev}function lt(ce,he){var nt=le(ce),Ft=[];if(nt){Ft.length=ce.length;for(var Nt=0;Nt"u"||!S?n:S(Uint8Array),D={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?n:ArrayBuffer,"%ArrayIteratorPrototype%":T&&S?S([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":k,"%AsyncGenerator%":k,"%AsyncGeneratorFunction%":k,"%AsyncIteratorPrototype%":k,"%Atomics%":typeof Atomics>"u"?n:Atomics,"%BigInt%":typeof BigInt>"u"?n:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?n:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":t,"%eval%":eval,"%EvalError%":i,"%Float16Array%":typeof Float16Array>"u"?n:Float16Array,"%Float32Array%":typeof Float32Array>"u"?n:Float32Array,"%Float64Array%":typeof Float64Array>"u"?n:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?n:FinalizationRegistry,"%Function%":g,"%GeneratorFunction%":k,"%Int8Array%":typeof Int8Array>"u"?n:Int8Array,"%Int16Array%":typeof Int16Array>"u"?n:Int16Array,"%Int32Array%":typeof Int32Array>"u"?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":T&&S?S(S([][Symbol.iterator]())):n,"%JSON%":typeof JSON=="object"?JSON:n,"%Map%":typeof Map>"u"?n:Map,"%MapIteratorPrototype%":typeof Map>"u"||!T||!S?n:S(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":e,"%Object.getOwnPropertyDescriptor%":y,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?n:Promise,"%Proxy%":typeof Proxy>"u"?n:Proxy,"%RangeError%":s,"%ReferenceError%":r,"%Reflect%":typeof Reflect>"u"?n:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?n:Set,"%SetIteratorPrototype%":typeof Set>"u"||!T||!S?n:S(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":T&&S?S(""[Symbol.iterator]()):n,"%Symbol%":T?Symbol:n,"%SyntaxError%":o,"%ThrowTypeError%":C,"%TypedArray%":B,"%TypeError%":a,"%Uint8Array%":typeof Uint8Array>"u"?n:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?n:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?n:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?n:Uint32Array,"%URIError%":c,"%WeakMap%":typeof WeakMap>"u"?n:WeakMap,"%WeakRef%":typeof WeakRef>"u"?n:WeakRef,"%WeakSet%":typeof WeakSet>"u"?n:WeakSet,"%Function.prototype.call%":M,"%Function.prototype.apply%":I,"%Object.defineProperty%":b,"%Object.getPrototypeOf%":E,"%Math.abs%":l,"%Math.floor%":d,"%Math.max%":u,"%Math.min%":h,"%Math.pow%":f,"%Math.round%":p,"%Math.sign%":m,"%Reflect.getPrototypeOf%":_};if(S)try{null.error}catch(Se){var G=S(S(Se));D["%Error.prototype%"]=G}var V=function Se(fe){var be;if(fe==="%AsyncFunction%")be=v("async function () {}");else if(fe==="%GeneratorFunction%")be=v("function* () {}");else if(fe==="%AsyncGeneratorFunction%")be=v("async function* () {}");else if(fe==="%AsyncGenerator%"){var q=Se("%AsyncGeneratorFunction%");q&&(be=q.prototype)}else if(fe==="%AsyncIteratorPrototype%"){var Z=Se("%AsyncGenerator%");Z&&S&&(be=S(Z.prototype))}return D[fe]=be,be},Y={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},L=eh(),N=pP(),F=L.call(M,Array.prototype.concat),$=L.call(I,Array.prototype.splice),X=L.call(M,String.prototype.replace),z=L.call(M,String.prototype.slice),K=L.call(M,RegExp.prototype.exec),J=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,oe=/\\(\\)?/g,le=function(fe){var be=z(fe,0,1),q=z(fe,-1);if(be==="%"&&q!=="%")throw new o("invalid intrinsic syntax, expected closing `%`");if(q==="%"&&be!=="%")throw new o("invalid intrinsic syntax, expected opening `%`");var Z=[];return X(fe,J,function(se,j,H,O){Z[Z.length]=H?X(O,oe,"$1"):j||se}),Z},ve=function(fe,be){var q=fe,Z;if(N(Y,q)&&(Z=Y[q],q="%"+Z[0]+"%"),N(D,q)){var se=D[q];if(se===k&&(se=V(q)),typeof se>"u"&&!be)throw new a("intrinsic "+fe+" exists, but is not available. Please file an issue!");return{alias:Z,name:q,value:se}}throw new o("intrinsic "+fe+" does not exist!")};return xf=function(fe,be){if(typeof fe!="string"||fe.length===0)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof be!="boolean")throw new a('"allowMissing" argument must be a boolean');if(K(/^%?[^%]*%?$/,fe)===null)throw new o("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var q=le(fe),Z=q.length>0?q[0]:"",se=ve("%"+Z+"%",be),j=se.name,H=se.value,O=!1,U=se.alias;U&&(Z=U[0],$(q,F([0,1],U)));for(var W=1,ee=!0;W=q.length){var ye=y(H,ne);ee=!!ye,ee&&"get"in ye&&!("originalValue"in ye.get)?H=ye.get:H=H[ne]}else ee=N(H,ne),H=H[ne];ee&&!O&&(D[j]=H)}}return H},xf}var wf,Gb;function iw(){if(Gb)return wf;Gb=1;var n=Cg(),e=tw(),t=e([n("%String.prototype.indexOf%")]);return wf=function(s,r){var o=n(s,!!r);return typeof o=="function"&&t(s,".prototype.")>-1?e([o]):o},wf}var Sf,Wb;function nw(){if(Wb)return Sf;Wb=1;var n=Cg(),e=iw(),t=Qu(),i=Qa(),s=n("%Map%",!0),r=e("Map.prototype.get",!0),o=e("Map.prototype.set",!0),a=e("Map.prototype.has",!0),c=e("Map.prototype.delete",!0),l=e("Map.prototype.size",!0);return Sf=!!s&&function(){var u,h={assert:function(f){if(!h.has(f))throw new i("Side channel does not contain "+t(f))},delete:function(f){if(u){var p=c(u,f);return l(u)===0&&(u=void 0),p}return!1},get:function(f){if(u)return r(u,f)},has:function(f){return u?a(u,f):!1},set:function(f,p){u||(u=new s),o(u,f,p)}};return h},Sf}var Cf,qb;function mP(){if(qb)return Cf;qb=1;var n=Cg(),e=iw(),t=Qu(),i=nw(),s=Qa(),r=n("%WeakMap%",!0),o=e("WeakMap.prototype.get",!0),a=e("WeakMap.prototype.set",!0),c=e("WeakMap.prototype.has",!0),l=e("WeakMap.prototype.delete",!0);return Cf=r?function(){var u,h,f={assert:function(p){if(!f.has(p))throw new s("Side channel does not contain "+t(p))},delete:function(p){if(r&&p&&(typeof p=="object"||typeof p=="function")){if(u)return l(u,p)}else if(i&&h)return h.delete(p);return!1},get:function(p){return r&&p&&(typeof p=="object"||typeof p=="function")&&u?o(u,p):h&&h.get(p)},has:function(p){return r&&p&&(typeof p=="object"||typeof p=="function")&&u?c(u,p):!!h&&h.has(p)},set:function(p,m){r&&p&&(typeof p=="object"||typeof p=="function")?(u||(u=new r),a(u,p,m)):i&&(h||(h=i()),h.set(p,m))}};return f}:i,Cf}var Af,Kb;function sw(){if(Kb)return Af;Kb=1;var n=Qa(),e=Qu(),t=jM(),i=nw(),s=mP(),r=s||i||t;return Af=function(){var a,c={assert:function(l){if(!c.has(l)){var d=l&&Object(l)===l?"the given object key":e(l);throw new n("Side channel does not contain "+d)}},delete:function(l){return!!a&&a.delete(l)},get:function(l){return a&&a.get(l)},has:function(l){return!!a&&a.has(l)},set:function(l,d){a||(a=r()),a.set(l,d)}};return c},Af}var Tf,Jb;function Ag(){if(Jb)return Tf;Jb=1;var n=String.prototype.replace,e=/%20/g,t={RFC1738:"RFC1738",RFC3986:"RFC3986"};return Tf={default:t.RFC3986,formatters:{RFC1738:function(i){return n.call(i,e,"+")},RFC3986:function(i){return String(i)}},RFC1738:t.RFC1738,RFC3986:t.RFC3986},Tf}var Ef,Zb;function rw(){if(Zb)return Ef;Zb=1;var n=Ag(),e=sw(),t=J1(),i=Object.prototype.hasOwnProperty,s=Array.isArray,r=e(),o=function(_,I){return r.set(_,I),_},a=function(_){return r.has(_)},c=function(_){return r.get(_)},l=function(_,I){r.set(_,I)},d=(function(){for(var E=[],_=0;_<256;++_)E[E.length]="%"+((_<16?"0":"")+_.toString(16)).toUpperCase();return E})(),u=function(_){for(;_.length>1;){var I=_.pop(),M=I.obj[I.prop];if(s(M)){for(var k=[],B=0;B=M.arrayLimit){if(M.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+M.arrayLimit+" element"+(M.arrayLimit===1?"":"s")+" allowed in an array.");return o(h(_.concat(I),M),k)}_[k]=I}else if(_&&typeof _=="object")if(a(_)){var B=c(_)+1;_[B]=I,l(_,B)}else{if(M&&M.strictMerge)return[_,I];(M&&(M.plainObjects||M.allowPrototypes)||!i.call(Object.prototype,I))&&(_[I]=!0)}else return[_,I];return _}if(!_||typeof _!="object"){if(a(I)){for(var D=Object.keys(I),G=M&&M.plainObjects?{__proto__:null,0:_}:{0:_},V=0;VM.arrayLimit){if(M.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+M.arrayLimit+" element"+(M.arrayLimit===1?"":"s")+" allowed in an array.");return o(h(L,M),L.length-1)}return L}var N=_;if(s(_)&&!s(I)&&(N=h(_,M)),s(_)&&s(I)){if(I.forEach(function(F,$){if(i.call(_,$)){var X=_[$];X&&typeof X=="object"&&F&&typeof F=="object"?_[$]=E(X,F,M):_[_.length]=F}else _[$]=F}),M&&typeof M.arrayLimit=="number"&&_.length>M.arrayLimit){if(M.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+M.arrayLimit+" element"+(M.arrayLimit===1?"":"s")+" allowed in an array.");return o(h(_,M),_.length-1)}return _}return Object.keys(I).reduce(function(F,$){var X=I[$];if(i.call(F,$)?f(F,$,E(F[$],X,M)):f(F,$,X),a(I)&&!a(F)&&o(F,c(I)),a(F)){var z=parseInt($,10);String(z)===$&&z>=0&&z>c(F)&&l(F,z)}return F},N)},m=function(_,I){return Object.keys(I).reduce(function(M,k){return f(M,k,I[k]),M},_)},g=function(E,_,I){var M=E.replace(/\+/g," ");if(I==="iso-8859-1")return M.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(M)}catch{return M}},v=1024,y=function(_,I,M,k,B){if(_.length===0)return _;var D=_;if(typeof _=="symbol"?D=Symbol.prototype.toString.call(_):typeof _!="string"&&(D=String(_)),M==="iso-8859-1")return escape(D).replace(/%u[0-9a-f]{4}/gi,function(X){return"%26%23"+parseInt(X.slice(2),16)+"%3B"});for(var G="",V=0;V=v?D.slice(V,V+v):D;if(V+v=55296&&L<=56319&&(Y=Y.slice(0,-1),V-=1)}for(var N=[],F=0;F=48&&$<=57||$>=65&&$<=90||$>=97&&$<=122||B===n.RFC1738&&($===40||$===41)){N[N.length]=Y.charAt(F);continue}if($<128){N[N.length]=d[$];continue}if($<2048){N[N.length]=d[192|$>>6]+d[128|$&63];continue}if($<55296||$>=57344){N[N.length]=d[224|$>>12]+d[128|$>>6&63]+d[128|$&63];continue}F+=1,$=65536+(($&1023)<<10|Y.charCodeAt(F)&1023),N[N.length]=d[240|$>>18]+d[128|$>>12&63]+d[128|$>>6&63]+d[128|$&63]}G+=N.join("")}return G},b=function(_){for(var I=[{obj:{o:_},prop:"o"}],M=e(),k=0;kM){if(B)throw new RangeError("Array limit exceeded. Only "+M+" element"+(M===1?"":"s")+" allowed in an array.");return o(h(G,{plainObjects:k}),G.length-1)}return G},S=function(_,I){if(s(_)){for(var M=[],k=0;k<_.length;k+=1)M[M.length]=I(_[k]);return M}return I(_)};return Ef={arrayToObject:h,assign:m,combine:T,compact:b,decode:g,encode:y,isBuffer:C,isOverflow:a,isRegExp:x,markOverflow:o,maybeMap:S,merge:p},Ef}var _f,Qb;function gP(){if(Qb)return _f;Qb=1;var n=sw(),e=rw(),t=Ag(),i=Object.prototype.hasOwnProperty,s={brackets:function(g){return g+"[]"},comma:"comma",indices:function(g,v){return g+"["+v+"]"},repeat:function(g){return g}},r=Array.isArray,o=Array.prototype.push,a=function(m,g){o.apply(m,r(g)?g:[g])},c=Date.prototype.toISOString,l=t.default,d={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,commaRoundTrip:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:e.encode,encodeValuesOnly:!1,filter:void 0,format:l,formatter:t.formatters[l],indices:!1,serializeDate:function(g){return c.call(g)},skipNulls:!1,strictNullHandling:!1},u=function(g){return typeof g=="string"||typeof g=="number"||typeof g=="boolean"||typeof g=="symbol"||typeof g=="bigint"},h={},f=function m(g,v,y,b,x,C,T,S,E,_,I,M,k,B,D,G,V,Y){for(var L=g,N=Y,F=0,$=!1;(N=N.get(h))!==void 0&&!$;){var X=N.get(g);if(F+=1,typeof X<"u"){if(X===F)throw new RangeError("Cyclic object value");$=!0}typeof N.get(h)>"u"&&(F=0)}if(typeof _=="function"?L=_(v,L):L instanceof Date?L=k(L):y==="comma"&&r(L)&&(L=e.maybeMap(L,function(j){return j instanceof Date?k(j):j})),L===null){if(C)return D(E&&!G?E(v,d.encoder,V,"key",B):v);L=""}if(u(L)||e.isBuffer(L)){if(E){var z=G?v:E(v,d.encoder,V,"key",B);return[D(z)+"="+D(E(L,d.encoder,V,"value",B))]}return[D(v)+"="+D(String(L))]}var K=[];if(typeof L>"u")return K;var J;if(y==="comma"&&r(L))G&&E&&(L=e.maybeMap(L,function(j){return j==null?j:E(j)})),J=[{value:L.length>0?L.join(",")||null:void 0}];else if(r(_))J=_;else{var oe=Object.keys(L);J=I?oe.sort(I):oe}var le=S?String(v).replace(/\./g,"%2E"):String(v),ve=b&&r(L)&&L.length===1?le+"[]":le;if(x&&r(L)&&L.length===0)return ve+"[]";for(var Se=0;Se"u"?g.encodeDotInKeys===!0?!0:d.allowDots:!!g.allowDots;return{addQueryPrefix:typeof g.addQueryPrefix=="boolean"?g.addQueryPrefix:d.addQueryPrefix,allowDots:T,allowEmptyArrays:typeof g.allowEmptyArrays=="boolean"?!!g.allowEmptyArrays:d.allowEmptyArrays,arrayFormat:C,charset:v,charsetSentinel:typeof g.charsetSentinel=="boolean"?g.charsetSentinel:d.charsetSentinel,commaRoundTrip:!!g.commaRoundTrip,delimiter:typeof g.delimiter>"u"?d.delimiter:g.delimiter,encode:typeof g.encode=="boolean"?g.encode:d.encode,encodeDotInKeys:typeof g.encodeDotInKeys=="boolean"?g.encodeDotInKeys:d.encodeDotInKeys,encoder:typeof g.encoder=="function"?g.encoder:d.encoder,encodeValuesOnly:typeof g.encodeValuesOnly=="boolean"?g.encodeValuesOnly:d.encodeValuesOnly,filter:x,format:y,formatter:b,serializeDate:typeof g.serializeDate=="function"?g.serializeDate:d.serializeDate,skipNulls:typeof g.skipNulls=="boolean"?g.skipNulls:d.skipNulls,sort:typeof g.sort=="function"?g.sort:null,strictNullHandling:typeof g.strictNullHandling=="boolean"?g.strictNullHandling:d.strictNullHandling}};return _f=function(m,g){var v=m,y=p(g),b,x;typeof y.filter=="function"?(x=y.filter,v=x("",v)):r(y.filter)&&(x=y.filter,b=x);var C=[];if(typeof v!="object"||v===null)return"";var T=s[y.arrayFormat],S=T==="comma"&&y.commaRoundTrip;b||(b=Object.keys(v)),y.sort&&b.sort(y.sort);for(var E=n(),_=0;_"u"||I===null)){var M=v[I];y.skipNulls&&M===null||a(C,f(M,I,T,S,y.allowEmptyArrays,y.strictNullHandling,y.skipNulls,y.encodeDotInKeys,y.encode?y.encoder:null,y.filter,y.sort,y.allowDots,y.serializeDate,y.format,y.formatter,y.encodeValuesOnly,y.charset,E))}}var k=C.join(y.delimiter),B=y.addQueryPrefix===!0?"?":"";return y.charsetSentinel&&(y.charset==="iso-8859-1"?B+="utf8=%26%2310003%3B"+y.delimiter:B+="utf8=%E2%9C%93"+y.delimiter),k.length>0?B+k:""},_f}var Mf,e0;function vP(){if(e0)return Mf;e0=1;var n=rw(),e=Object.prototype.hasOwnProperty,t=Array.isArray,i={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:n.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictMerge:!0,strictNullHandling:!1,throwOnLimitExceeded:!1},s=function(f){return f.replace(/&#(\d+);/g,function(p,m){return String.fromCharCode(parseInt(m,10))})},r=function(f,p,m,g){if(f&&typeof f=="string"&&p.comma&&f.indexOf(",")>-1){if(g&&p.throwOnLimitExceeded)for(var v=0,y=f.indexOf(",");y>-1;){if(v+=1,v>=p.arrayLimit)throw new RangeError("Array limit exceeded. Only "+p.arrayLimit+" element"+(p.arrayLimit===1?"":"s")+" allowed in an array.");y=f.indexOf(",",y+1)}return f.split(",")}if(p.throwOnLimitExceeded&&m>=p.arrayLimit)throw new RangeError("Array limit exceeded. Only "+p.arrayLimit+" element"+(p.arrayLimit===1?"":"s")+" allowed in an array.");return f},o="utf8=%26%2310003%3B",a="utf8=%E2%9C%93",c=function(p,m){var g={__proto__:null},v=m.ignoreQueryPrefix?p.replace(/^\?/,""):p;v=v.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var y=m.parameterLimit===1/0?void 0:m.parameterLimit,b=v.split(m.delimiter,m.throwOnLimitExceeded&&typeof y<"u"?y+1:y);if(m.throwOnLimitExceeded&&typeof y<"u"&&b.length>y)throw new RangeError("Parameter limit exceeded. Only "+y+" parameter"+(y===1?"":"s")+" allowed.");var x=-1,C,T=m.charset;if(m.charsetSentinel)for(C=0;C-1&&(M=t(M)?[M]:M),m.comma&&t(M)&&M.length>m.arrayLimit&&(M=n.combine([],M,m.arrayLimit,m.plainObjects,m.throwOnLimitExceeded)),I!==null){var k=e.call(g,I);k&&(m.duplicates==="combine"||S.indexOf("[]=")>-1)?g[I]=n.combine(g[I],M,m.arrayLimit,m.plainObjects,m.throwOnLimitExceeded):(!k||m.duplicates==="last")&&(g[I]=M)}}return g},l=function(f,p,m,g){var v=0;if(f.length>0&&f[f.length-1]==="[]"){var y=f.slice(0,-1).join("");v=Array.isArray(p)&&p[y]?p[y].length:0}for(var b=g?p:r(p,m,v),x=f.length-1;x>=0;--x){var C,T=f[x];if(T==="[]"&&m.parseArrays)n.isOverflow(b)?C=b:C=m.allowEmptyArrays&&(b===""||m.strictNullHandling&&b===null)?[]:n.combine([],b,m.arrayLimit,m.plainObjects,m.throwOnLimitExceeded);else{C=m.plainObjects?{__proto__:null}:{};var S=T.charAt(0)==="["&&T.charAt(T.length-1)==="]"?T.slice(1,-1):T,E=m.decodeDotInKeys?S.replace(/%2E/g,"."):S,_=parseInt(E,10),I=!isNaN(_)&&T!==E&&String(_)===E&&_>=0&&m.parseArrays;if(!m.parseArrays&&E==="")C={0:b};else if(I&&_=0?g.slice(0,y):g;if(b){if(!m.plainObjects&&e.call(Object.prototype,b)&&!m.allowPrototypes)return;v[v.length]=b}for(var x=g.length,C=y,T=0;C>=0&&T=0){if(m.strictDepth===!0)throw new RangeError("Input depth exceeded depth option of "+m.depth+" and strictDepth is true");v[v.length]="["+g.slice(C)+"]"}return v},u=function(p,m,g,v){if(p){var y=d(p,g);if(y)return l(y,m,g,v)}},h=function(p){if(!p)return i;if(typeof p.allowEmptyArrays<"u"&&typeof p.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof p.decodeDotInKeys<"u"&&typeof p.decodeDotInKeys!="boolean")throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(p.decoder!==null&&typeof p.decoder<"u"&&typeof p.decoder!="function")throw new TypeError("Decoder has to be a function.");if(typeof p.charset<"u"&&p.charset!=="utf-8"&&p.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");if(typeof p.throwOnLimitExceeded<"u"&&typeof p.throwOnLimitExceeded!="boolean")throw new TypeError("`throwOnLimitExceeded` option must be a boolean");var m=typeof p.charset>"u"?i.charset:p.charset,g=typeof p.duplicates>"u"?i.duplicates:p.duplicates;if(g!=="combine"&&g!=="first"&&g!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var v=typeof p.allowDots>"u"?p.decodeDotInKeys===!0?!0:i.allowDots:!!p.allowDots;return{allowDots:v,allowEmptyArrays:typeof p.allowEmptyArrays=="boolean"?!!p.allowEmptyArrays:i.allowEmptyArrays,allowPrototypes:typeof p.allowPrototypes=="boolean"?p.allowPrototypes:i.allowPrototypes,allowSparse:typeof p.allowSparse=="boolean"?p.allowSparse:i.allowSparse,arrayLimit:typeof p.arrayLimit=="number"?p.arrayLimit:i.arrayLimit,charset:m,charsetSentinel:typeof p.charsetSentinel=="boolean"?p.charsetSentinel:i.charsetSentinel,comma:typeof p.comma=="boolean"?p.comma:i.comma,decodeDotInKeys:typeof p.decodeDotInKeys=="boolean"?p.decodeDotInKeys:i.decodeDotInKeys,decoder:typeof p.decoder=="function"?p.decoder:i.decoder,delimiter:typeof p.delimiter=="string"||n.isRegExp(p.delimiter)?p.delimiter:i.delimiter,depth:typeof p.depth=="number"||p.depth===!1?+p.depth:i.depth,duplicates:g,ignoreQueryPrefix:p.ignoreQueryPrefix===!0,interpretNumericEntities:typeof p.interpretNumericEntities=="boolean"?p.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:typeof p.parameterLimit=="number"?p.parameterLimit:i.parameterLimit,parseArrays:p.parseArrays!==!1,plainObjects:typeof p.plainObjects=="boolean"?p.plainObjects:i.plainObjects,strictDepth:typeof p.strictDepth=="boolean"?!!p.strictDepth:i.strictDepth,strictMerge:typeof p.strictMerge=="boolean"?!!p.strictMerge:i.strictMerge,strictNullHandling:typeof p.strictNullHandling=="boolean"?p.strictNullHandling:i.strictNullHandling,throwOnLimitExceeded:typeof p.throwOnLimitExceeded=="boolean"?p.throwOnLimitExceeded:!1}};return Mf=function(f,p){var m=h(p);if(f===""||f===null||typeof f>"u")return m.plainObjects?{__proto__:null}:{};for(var g=typeof f=="string"?c(f,m):f,v=m.plainObjects?{__proto__:null}:{},y=Object.keys(g),b=0;b",'"',"`"," ","\r",` -`," "],o=["{","}","|","\\","^","`"].concat(r),a=["'"].concat(o),c=["%","/","?",";","#"].concat(a),l=["/","?","#"],d=255,u=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,f={javascript:!0,"javascript:":!0},p={javascript:!0,"javascript:":!0},m={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},g=bP();function v(C,T,S){if(C&&typeof C=="object"&&C instanceof e)return C;var E=new e;return E.parse(C,T,S),E}e.prototype.parse=function(C,T,S){if(typeof C!="string")throw new TypeError("Parameter 'url' must be a string, not "+typeof C);var E=C.indexOf("?"),_=E!==-1&&E127?oe+="x":oe+=J[le];if(!oe.match(u)){var Se=z.slice(0,L),fe=z.slice(L+1),be=J.match(h);be&&(Se.push(be[1]),fe.unshift(be[2])),fe.length&&(k="/"+fe.join(".")+k),this.hostname=Se.join(".");break}}}this.hostname.length>d?this.hostname="":this.hostname=this.hostname.toLowerCase(),X||(this.hostname=n.toASCII(this.hostname));var q=this.port?":"+this.port:"",Z=this.hostname||"";this.host=Z+q,this.href+=this.host,X&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),k[0]!=="/"&&(k="/"+k))}if(!f[G])for(var L=0,K=a.length;L0?S.host.split("@"):!1;oe&&(S.auth=oe.shift(),S.hostname=oe.shift(),S.host=S.hostname)}return S.search=C.search,S.query=C.query,(S.pathname!==null||S.search!==null)&&(S.path=(S.pathname?S.pathname:"")+(S.search?S.search:"")),S.href=S.format(),S}if(!z.length)return S.pathname=null,S.search?S.path="/"+S.search:S.path=null,S.href=S.format(),S;for(var le=z.slice(-1)[0],ve=(S.host||C.host||z.length>1)&&(le==="."||le==="..")||le==="",Se=0,fe=z.length;fe>=0;fe--)le=z[fe],le==="."?z.splice(fe,1):le===".."?(z.splice(fe,1),Se++):Se&&(z.splice(fe,1),Se--);if(!$&&!X)for(;Se--;Se)z.unshift("..");$&&z[0]!==""&&(!z[0]||z[0].charAt(0)!=="/")&&z.unshift(""),ve&&z.join("/").substr(-1)!=="/"&&z.push("");var be=z[0]===""||z[0]&&z[0].charAt(0)==="/";if(J){S.hostname=be?"":z.length?z.shift():"",S.host=S.hostname;var oe=S.host&&S.host.indexOf("@")>0?S.host.split("@"):!1;oe&&(S.auth=oe.shift(),S.hostname=oe.shift(),S.host=S.hostname)}return $=$||S.host&&z.length,$&&!be&&z.unshift(""),z.length>0?S.pathname=z.join("/"):(S.pathname=null,S.path=null),(S.pathname!==null||S.search!==null)&&(S.path=(S.pathname?S.pathname:"")+(S.search?S.search:"")),S.auth=C.auth||S.auth,S.slashes=S.slashes||C.slashes,S.href=S.format(),S},e.prototype.parseHost=function(){var C=this.host,T=i.exec(C);T&&(T=T[0],T!==":"&&(this.port=T.substr(1)),C=C.substr(0,C.length-T.length)),C&&(this.hostname=C)},ho.parse=v,ho.resolve=b,ho.resolveObject=x,ho.format=y,ho.Url=e,ho}yP();const n0={};function mt(n,e,t=3){if(n0[e])return;let i=new Error().stack;typeof i>"u"?console.warn("PixiJS Deprecation Warning: ",`${e} +`+he.prev}function lt(ce,he){var nt=le(ce),Ft=[];if(nt){Ft.length=ce.length;for(var Nt=0;Nt"u"||!S?n:S(Uint8Array),D={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?n:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?n:ArrayBuffer,"%ArrayIteratorPrototype%":T&&S?S([][Symbol.iterator]()):n,"%AsyncFromSyncIteratorPrototype%":n,"%AsyncFunction%":k,"%AsyncGenerator%":k,"%AsyncGeneratorFunction%":k,"%AsyncIteratorPrototype%":k,"%Atomics%":typeof Atomics>"u"?n:Atomics,"%BigInt%":typeof BigInt>"u"?n:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?n:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?n:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?n:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":t,"%eval%":eval,"%EvalError%":i,"%Float16Array%":typeof Float16Array>"u"?n:Float16Array,"%Float32Array%":typeof Float32Array>"u"?n:Float32Array,"%Float64Array%":typeof Float64Array>"u"?n:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?n:FinalizationRegistry,"%Function%":g,"%GeneratorFunction%":k,"%Int8Array%":typeof Int8Array>"u"?n:Int8Array,"%Int16Array%":typeof Int16Array>"u"?n:Int16Array,"%Int32Array%":typeof Int32Array>"u"?n:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":T&&S?S(S([][Symbol.iterator]())):n,"%JSON%":typeof JSON=="object"?JSON:n,"%Map%":typeof Map>"u"?n:Map,"%MapIteratorPrototype%":typeof Map>"u"||!T||!S?n:S(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":e,"%Object.getOwnPropertyDescriptor%":y,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?n:Promise,"%Proxy%":typeof Proxy>"u"?n:Proxy,"%RangeError%":s,"%ReferenceError%":r,"%Reflect%":typeof Reflect>"u"?n:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?n:Set,"%SetIteratorPrototype%":typeof Set>"u"||!T||!S?n:S(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?n:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":T&&S?S(""[Symbol.iterator]()):n,"%Symbol%":T?Symbol:n,"%SyntaxError%":o,"%ThrowTypeError%":C,"%TypedArray%":B,"%TypeError%":a,"%Uint8Array%":typeof Uint8Array>"u"?n:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?n:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?n:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?n:Uint32Array,"%URIError%":c,"%WeakMap%":typeof WeakMap>"u"?n:WeakMap,"%WeakRef%":typeof WeakRef>"u"?n:WeakRef,"%WeakSet%":typeof WeakSet>"u"?n:WeakSet,"%Function.prototype.call%":M,"%Function.prototype.apply%":I,"%Object.defineProperty%":b,"%Object.getPrototypeOf%":E,"%Math.abs%":l,"%Math.floor%":d,"%Math.max%":u,"%Math.min%":h,"%Math.pow%":f,"%Math.round%":p,"%Math.sign%":m,"%Reflect.getPrototypeOf%":_};if(S)try{null.error}catch(Se){var G=S(S(Se));D["%Error.prototype%"]=G}var V=function Se(fe){var be;if(fe==="%AsyncFunction%")be=v("async function () {}");else if(fe==="%GeneratorFunction%")be=v("function* () {}");else if(fe==="%AsyncGeneratorFunction%")be=v("async function* () {}");else if(fe==="%AsyncGenerator%"){var q=Se("%AsyncGeneratorFunction%");q&&(be=q.prototype)}else if(fe==="%AsyncIteratorPrototype%"){var Z=Se("%AsyncGenerator%");Z&&S&&(be=S(Z.prototype))}return D[fe]=be,be},Y={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},L=eh(),N=pP(),F=L.call(M,Array.prototype.concat),$=L.call(I,Array.prototype.splice),X=L.call(M,String.prototype.replace),z=L.call(M,String.prototype.slice),K=L.call(M,RegExp.prototype.exec),J=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,oe=/\\(\\)?/g,le=function(fe){var be=z(fe,0,1),q=z(fe,-1);if(be==="%"&&q!=="%")throw new o("invalid intrinsic syntax, expected closing `%`");if(q==="%"&&be!=="%")throw new o("invalid intrinsic syntax, expected opening `%`");var Z=[];return X(fe,J,function(se,j,H,O){Z[Z.length]=H?X(O,oe,"$1"):j||se}),Z},ve=function(fe,be){var q=fe,Z;if(N(Y,q)&&(Z=Y[q],q="%"+Z[0]+"%"),N(D,q)){var se=D[q];if(se===k&&(se=V(q)),typeof se>"u"&&!be)throw new a("intrinsic "+fe+" exists, but is not available. Please file an issue!");return{alias:Z,name:q,value:se}}throw new o("intrinsic "+fe+" does not exist!")};return xf=function(fe,be){if(typeof fe!="string"||fe.length===0)throw new a("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof be!="boolean")throw new a('"allowMissing" argument must be a boolean');if(K(/^%?[^%]*%?$/,fe)===null)throw new o("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var q=le(fe),Z=q.length>0?q[0]:"",se=ve("%"+Z+"%",be),j=se.name,H=se.value,O=!1,U=se.alias;U&&(Z=U[0],$(q,F([0,1],U)));for(var W=1,ee=!0;W=q.length){var ye=y(H,ne);ee=!!ye,ee&&"get"in ye&&!("originalValue"in ye.get)?H=ye.get:H=H[ne]}else ee=N(H,ne),H=H[ne];ee&&!O&&(D[j]=H)}}return H},xf}var wf,Gb;function iw(){if(Gb)return wf;Gb=1;var n=Cg(),e=tw(),t=e([n("%String.prototype.indexOf%")]);return wf=function(s,r){var o=n(s,!!r);return typeof o=="function"&&t(s,".prototype.")>-1?e([o]):o},wf}var Sf,Wb;function nw(){if(Wb)return Sf;Wb=1;var n=Cg(),e=iw(),t=Qu(),i=Qa(),s=n("%Map%",!0),r=e("Map.prototype.get",!0),o=e("Map.prototype.set",!0),a=e("Map.prototype.has",!0),c=e("Map.prototype.delete",!0),l=e("Map.prototype.size",!0);return Sf=!!s&&function(){var u,h={assert:function(f){if(!h.has(f))throw new i("Side channel does not contain "+t(f))},delete:function(f){if(u){var p=c(u,f);return l(u)===0&&(u=void 0),p}return!1},get:function(f){if(u)return r(u,f)},has:function(f){return u?a(u,f):!1},set:function(f,p){u||(u=new s),o(u,f,p)}};return h},Sf}var Cf,qb;function mP(){if(qb)return Cf;qb=1;var n=Cg(),e=iw(),t=Qu(),i=nw(),s=Qa(),r=n("%WeakMap%",!0),o=e("WeakMap.prototype.get",!0),a=e("WeakMap.prototype.set",!0),c=e("WeakMap.prototype.has",!0),l=e("WeakMap.prototype.delete",!0);return Cf=r?function(){var u,h,f={assert:function(p){if(!f.has(p))throw new s("Side channel does not contain "+t(p))},delete:function(p){if(r&&p&&(typeof p=="object"||typeof p=="function")){if(u)return l(u,p)}else if(i&&h)return h.delete(p);return!1},get:function(p){return r&&p&&(typeof p=="object"||typeof p=="function")&&u?o(u,p):h&&h.get(p)},has:function(p){return r&&p&&(typeof p=="object"||typeof p=="function")&&u?c(u,p):!!h&&h.has(p)},set:function(p,m){r&&p&&(typeof p=="object"||typeof p=="function")?(u||(u=new r),a(u,p,m)):i&&(h||(h=i()),h.set(p,m))}};return f}:i,Cf}var Af,Kb;function sw(){if(Kb)return Af;Kb=1;var n=Qa(),e=Qu(),t=jM(),i=nw(),s=mP(),r=s||i||t;return Af=function(){var a,c={assert:function(l){if(!c.has(l)){var d=l&&Object(l)===l?"the given object key":e(l);throw new n("Side channel does not contain "+d)}},delete:function(l){return!!a&&a.delete(l)},get:function(l){return a&&a.get(l)},has:function(l){return!!a&&a.has(l)},set:function(l,d){a||(a=r()),a.set(l,d)}};return c},Af}var Tf,Jb;function Ag(){if(Jb)return Tf;Jb=1;var n=String.prototype.replace,e=/%20/g,t={RFC1738:"RFC1738",RFC3986:"RFC3986"};return Tf={default:t.RFC3986,formatters:{RFC1738:function(i){return n.call(i,e,"+")},RFC3986:function(i){return String(i)}},RFC1738:t.RFC1738,RFC3986:t.RFC3986},Tf}var Ef,Zb;function rw(){if(Zb)return Ef;Zb=1;var n=Ag(),e=sw(),t=J1(),i=Object.prototype.hasOwnProperty,s=Array.isArray,r=e(),o=function(_,I){return r.set(_,I),_},a=function(_){return r.has(_)},c=function(_){return r.get(_)},l=function(_,I){r.set(_,I)},d=(function(){for(var E=[],_=0;_<256;++_)E[E.length]="%"+((_<16?"0":"")+_.toString(16)).toUpperCase();return E})(),u=function(_){for(;_.length>1;){var I=_.pop(),M=I.obj[I.prop];if(s(M)){for(var k=[],B=0;B=M.arrayLimit){if(M.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+M.arrayLimit+" element"+(M.arrayLimit===1?"":"s")+" allowed in an array.");return o(h(_.concat(I),M),k)}_[k]=I}else if(_&&typeof _=="object")if(a(_)){var B=c(_)+1;_[B]=I,l(_,B)}else{if(M&&M.strictMerge)return[_,I];(M&&(M.plainObjects||M.allowPrototypes)||!i.call(Object.prototype,I))&&(_[I]=!0)}else return[_,I];return _}if(!_||typeof _!="object"){if(a(I)){for(var D=Object.keys(I),G=M&&M.plainObjects?{__proto__:null,0:_}:{0:_},V=0;VM.arrayLimit){if(M.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+M.arrayLimit+" element"+(M.arrayLimit===1?"":"s")+" allowed in an array.");return o(h(L,M),L.length-1)}return L}var N=_;if(s(_)&&!s(I)&&(N=h(_,M)),s(_)&&s(I)){if(I.forEach(function(F,$){if(i.call(_,$)){var X=_[$];X&&typeof X=="object"&&F&&typeof F=="object"?_[$]=E(X,F,M):_[_.length]=F}else _[$]=F}),M&&typeof M.arrayLimit=="number"&&_.length>M.arrayLimit){if(M.throwOnLimitExceeded)throw new RangeError("Array limit exceeded. Only "+M.arrayLimit+" element"+(M.arrayLimit===1?"":"s")+" allowed in an array.");return o(h(_,M),_.length-1)}return _}return Object.keys(I).reduce(function(F,$){var X=I[$];if(i.call(F,$)?f(F,$,E(F[$],X,M)):f(F,$,X),a(I)&&!a(F)&&o(F,c(I)),a(F)){var z=parseInt($,10);String(z)===$&&z>=0&&z>c(F)&&l(F,z)}return F},N)},m=function(_,I){return Object.keys(I).reduce(function(M,k){return f(M,k,I[k]),M},_)},g=function(E,_,I){var M=E.replace(/\+/g," ");if(I==="iso-8859-1")return M.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(M)}catch{return M}},v=1024,y=function(_,I,M,k,B){if(_.length===0)return _;var D=_;if(typeof _=="symbol"?D=Symbol.prototype.toString.call(_):typeof _!="string"&&(D=String(_)),M==="iso-8859-1")return escape(D).replace(/%u[0-9a-f]{4}/gi,function(X){return"%26%23"+parseInt(X.slice(2),16)+"%3B"});for(var G="",V=0;V=v?D.slice(V,V+v):D;if(V+v=55296&&L<=56319&&(Y=Y.slice(0,-1),V-=1)}for(var N=[],F=0;F=48&&$<=57||$>=65&&$<=90||$>=97&&$<=122||B===n.RFC1738&&($===40||$===41)){N[N.length]=Y.charAt(F);continue}if($<128){N[N.length]=d[$];continue}if($<2048){N[N.length]=d[192|$>>6]+d[128|$&63];continue}if($<55296||$>=57344){N[N.length]=d[224|$>>12]+d[128|$>>6&63]+d[128|$&63];continue}F+=1,$=65536+(($&1023)<<10|Y.charCodeAt(F)&1023),N[N.length]=d[240|$>>18]+d[128|$>>12&63]+d[128|$>>6&63]+d[128|$&63]}G+=N.join("")}return G},b=function(_){for(var I=[{obj:{o:_},prop:"o"}],M=e(),k=0;kM){if(B)throw new RangeError("Array limit exceeded. Only "+M+" element"+(M===1?"":"s")+" allowed in an array.");return o(h(G,{plainObjects:k}),G.length-1)}return G},S=function(_,I){if(s(_)){for(var M=[],k=0;k<_.length;k+=1)M[M.length]=I(_[k]);return M}return I(_)};return Ef={arrayToObject:h,assign:m,combine:T,compact:b,decode:g,encode:y,isBuffer:C,isOverflow:a,isRegExp:w,markOverflow:o,maybeMap:S,merge:p},Ef}var _f,Qb;function gP(){if(Qb)return _f;Qb=1;var n=sw(),e=rw(),t=Ag(),i=Object.prototype.hasOwnProperty,s={brackets:function(g){return g+"[]"},comma:"comma",indices:function(g,v){return g+"["+v+"]"},repeat:function(g){return g}},r=Array.isArray,o=Array.prototype.push,a=function(m,g){o.apply(m,r(g)?g:[g])},c=Date.prototype.toISOString,l=t.default,d={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,commaRoundTrip:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:e.encode,encodeValuesOnly:!1,filter:void 0,format:l,formatter:t.formatters[l],indices:!1,serializeDate:function(g){return c.call(g)},skipNulls:!1,strictNullHandling:!1},u=function(g){return typeof g=="string"||typeof g=="number"||typeof g=="boolean"||typeof g=="symbol"||typeof g=="bigint"},h={},f=function m(g,v,y,b,w,C,T,S,E,_,I,M,k,B,D,G,V,Y){for(var L=g,N=Y,F=0,$=!1;(N=N.get(h))!==void 0&&!$;){var X=N.get(g);if(F+=1,typeof X<"u"){if(X===F)throw new RangeError("Cyclic object value");$=!0}typeof N.get(h)>"u"&&(F=0)}if(typeof _=="function"?L=_(v,L):L instanceof Date?L=k(L):y==="comma"&&r(L)&&(L=e.maybeMap(L,function(j){return j instanceof Date?k(j):j})),L===null){if(C)return D(E&&!G?E(v,d.encoder,V,"key",B):v);L=""}if(u(L)||e.isBuffer(L)){if(E){var z=G?v:E(v,d.encoder,V,"key",B);return[D(z)+"="+D(E(L,d.encoder,V,"value",B))]}return[D(v)+"="+D(String(L))]}var K=[];if(typeof L>"u")return K;var J;if(y==="comma"&&r(L))G&&E&&(L=e.maybeMap(L,function(j){return j==null?j:E(j)})),J=[{value:L.length>0?L.join(",")||null:void 0}];else if(r(_))J=_;else{var oe=Object.keys(L);J=I?oe.sort(I):oe}var le=S?String(v).replace(/\./g,"%2E"):String(v),ve=b&&r(L)&&L.length===1?le+"[]":le;if(w&&r(L)&&L.length===0)return ve+"[]";for(var Se=0;Se"u"?g.encodeDotInKeys===!0?!0:d.allowDots:!!g.allowDots;return{addQueryPrefix:typeof g.addQueryPrefix=="boolean"?g.addQueryPrefix:d.addQueryPrefix,allowDots:T,allowEmptyArrays:typeof g.allowEmptyArrays=="boolean"?!!g.allowEmptyArrays:d.allowEmptyArrays,arrayFormat:C,charset:v,charsetSentinel:typeof g.charsetSentinel=="boolean"?g.charsetSentinel:d.charsetSentinel,commaRoundTrip:!!g.commaRoundTrip,delimiter:typeof g.delimiter>"u"?d.delimiter:g.delimiter,encode:typeof g.encode=="boolean"?g.encode:d.encode,encodeDotInKeys:typeof g.encodeDotInKeys=="boolean"?g.encodeDotInKeys:d.encodeDotInKeys,encoder:typeof g.encoder=="function"?g.encoder:d.encoder,encodeValuesOnly:typeof g.encodeValuesOnly=="boolean"?g.encodeValuesOnly:d.encodeValuesOnly,filter:w,format:y,formatter:b,serializeDate:typeof g.serializeDate=="function"?g.serializeDate:d.serializeDate,skipNulls:typeof g.skipNulls=="boolean"?g.skipNulls:d.skipNulls,sort:typeof g.sort=="function"?g.sort:null,strictNullHandling:typeof g.strictNullHandling=="boolean"?g.strictNullHandling:d.strictNullHandling}};return _f=function(m,g){var v=m,y=p(g),b,w;typeof y.filter=="function"?(w=y.filter,v=w("",v)):r(y.filter)&&(w=y.filter,b=w);var C=[];if(typeof v!="object"||v===null)return"";var T=s[y.arrayFormat],S=T==="comma"&&y.commaRoundTrip;b||(b=Object.keys(v)),y.sort&&b.sort(y.sort);for(var E=n(),_=0;_"u"||I===null)){var M=v[I];y.skipNulls&&M===null||a(C,f(M,I,T,S,y.allowEmptyArrays,y.strictNullHandling,y.skipNulls,y.encodeDotInKeys,y.encode?y.encoder:null,y.filter,y.sort,y.allowDots,y.serializeDate,y.format,y.formatter,y.encodeValuesOnly,y.charset,E))}}var k=C.join(y.delimiter),B=y.addQueryPrefix===!0?"?":"";return y.charsetSentinel&&(y.charset==="iso-8859-1"?B+="utf8=%26%2310003%3B"+y.delimiter:B+="utf8=%E2%9C%93"+y.delimiter),k.length>0?B+k:""},_f}var Mf,e0;function vP(){if(e0)return Mf;e0=1;var n=rw(),e=Object.prototype.hasOwnProperty,t=Array.isArray,i={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:n.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictDepth:!1,strictMerge:!0,strictNullHandling:!1,throwOnLimitExceeded:!1},s=function(f){return f.replace(/&#(\d+);/g,function(p,m){return String.fromCharCode(parseInt(m,10))})},r=function(f,p,m,g){if(f&&typeof f=="string"&&p.comma&&f.indexOf(",")>-1){if(g&&p.throwOnLimitExceeded)for(var v=0,y=f.indexOf(",");y>-1;){if(v+=1,v>=p.arrayLimit)throw new RangeError("Array limit exceeded. Only "+p.arrayLimit+" element"+(p.arrayLimit===1?"":"s")+" allowed in an array.");y=f.indexOf(",",y+1)}return f.split(",")}if(p.throwOnLimitExceeded&&m>=p.arrayLimit)throw new RangeError("Array limit exceeded. Only "+p.arrayLimit+" element"+(p.arrayLimit===1?"":"s")+" allowed in an array.");return f},o="utf8=%26%2310003%3B",a="utf8=%E2%9C%93",c=function(p,m){var g={__proto__:null},v=m.ignoreQueryPrefix?p.replace(/^\?/,""):p;v=v.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var y=m.parameterLimit===1/0?void 0:m.parameterLimit,b=v.split(m.delimiter,m.throwOnLimitExceeded&&typeof y<"u"?y+1:y);if(m.throwOnLimitExceeded&&typeof y<"u"&&b.length>y)throw new RangeError("Parameter limit exceeded. Only "+y+" parameter"+(y===1?"":"s")+" allowed.");var w=-1,C,T=m.charset;if(m.charsetSentinel)for(C=0;C-1&&(M=t(M)?[M]:M),m.comma&&t(M)&&M.length>m.arrayLimit&&(M=n.combine([],M,m.arrayLimit,m.plainObjects,m.throwOnLimitExceeded)),I!==null){var k=e.call(g,I);k&&(m.duplicates==="combine"||S.indexOf("[]=")>-1)?g[I]=n.combine(g[I],M,m.arrayLimit,m.plainObjects,m.throwOnLimitExceeded):(!k||m.duplicates==="last")&&(g[I]=M)}}return g},l=function(f,p,m,g){var v=0;if(f.length>0&&f[f.length-1]==="[]"){var y=f.slice(0,-1).join("");v=Array.isArray(p)&&p[y]?p[y].length:0}for(var b=g?p:r(p,m,v),w=f.length-1;w>=0;--w){var C,T=f[w];if(T==="[]"&&m.parseArrays)n.isOverflow(b)?C=b:C=m.allowEmptyArrays&&(b===""||m.strictNullHandling&&b===null)?[]:n.combine([],b,m.arrayLimit,m.plainObjects,m.throwOnLimitExceeded);else{C=m.plainObjects?{__proto__:null}:{};var S=T.charAt(0)==="["&&T.charAt(T.length-1)==="]"?T.slice(1,-1):T,E=m.decodeDotInKeys?S.replace(/%2E/g,"."):S,_=parseInt(E,10),I=!isNaN(_)&&T!==E&&String(_)===E&&_>=0&&m.parseArrays;if(!m.parseArrays&&E==="")C={0:b};else if(I&&_=0?g.slice(0,y):g;if(b){if(!m.plainObjects&&e.call(Object.prototype,b)&&!m.allowPrototypes)return;v[v.length]=b}for(var w=g.length,C=y,T=0;C>=0&&T=0){if(m.strictDepth===!0)throw new RangeError("Input depth exceeded depth option of "+m.depth+" and strictDepth is true");v[v.length]="["+g.slice(C)+"]"}return v},u=function(p,m,g,v){if(p){var y=d(p,g);if(y)return l(y,m,g,v)}},h=function(p){if(!p)return i;if(typeof p.allowEmptyArrays<"u"&&typeof p.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof p.decodeDotInKeys<"u"&&typeof p.decodeDotInKeys!="boolean")throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(p.decoder!==null&&typeof p.decoder<"u"&&typeof p.decoder!="function")throw new TypeError("Decoder has to be a function.");if(typeof p.charset<"u"&&p.charset!=="utf-8"&&p.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");if(typeof p.throwOnLimitExceeded<"u"&&typeof p.throwOnLimitExceeded!="boolean")throw new TypeError("`throwOnLimitExceeded` option must be a boolean");var m=typeof p.charset>"u"?i.charset:p.charset,g=typeof p.duplicates>"u"?i.duplicates:p.duplicates;if(g!=="combine"&&g!=="first"&&g!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var v=typeof p.allowDots>"u"?p.decodeDotInKeys===!0?!0:i.allowDots:!!p.allowDots;return{allowDots:v,allowEmptyArrays:typeof p.allowEmptyArrays=="boolean"?!!p.allowEmptyArrays:i.allowEmptyArrays,allowPrototypes:typeof p.allowPrototypes=="boolean"?p.allowPrototypes:i.allowPrototypes,allowSparse:typeof p.allowSparse=="boolean"?p.allowSparse:i.allowSparse,arrayLimit:typeof p.arrayLimit=="number"?p.arrayLimit:i.arrayLimit,charset:m,charsetSentinel:typeof p.charsetSentinel=="boolean"?p.charsetSentinel:i.charsetSentinel,comma:typeof p.comma=="boolean"?p.comma:i.comma,decodeDotInKeys:typeof p.decodeDotInKeys=="boolean"?p.decodeDotInKeys:i.decodeDotInKeys,decoder:typeof p.decoder=="function"?p.decoder:i.decoder,delimiter:typeof p.delimiter=="string"||n.isRegExp(p.delimiter)?p.delimiter:i.delimiter,depth:typeof p.depth=="number"||p.depth===!1?+p.depth:i.depth,duplicates:g,ignoreQueryPrefix:p.ignoreQueryPrefix===!0,interpretNumericEntities:typeof p.interpretNumericEntities=="boolean"?p.interpretNumericEntities:i.interpretNumericEntities,parameterLimit:typeof p.parameterLimit=="number"?p.parameterLimit:i.parameterLimit,parseArrays:p.parseArrays!==!1,plainObjects:typeof p.plainObjects=="boolean"?p.plainObjects:i.plainObjects,strictDepth:typeof p.strictDepth=="boolean"?!!p.strictDepth:i.strictDepth,strictMerge:typeof p.strictMerge=="boolean"?!!p.strictMerge:i.strictMerge,strictNullHandling:typeof p.strictNullHandling=="boolean"?p.strictNullHandling:i.strictNullHandling,throwOnLimitExceeded:typeof p.throwOnLimitExceeded=="boolean"?p.throwOnLimitExceeded:!1}};return Mf=function(f,p){var m=h(p);if(f===""||f===null||typeof f>"u")return m.plainObjects?{__proto__:null}:{};for(var g=typeof f=="string"?c(f,m):f,v=m.plainObjects?{__proto__:null}:{},y=Object.keys(g),b=0;b",'"',"`"," ","\r",` +`," "],o=["{","}","|","\\","^","`"].concat(r),a=["'"].concat(o),c=["%","/","?",";","#"].concat(a),l=["/","?","#"],d=255,u=/^[+a-z0-9A-Z_-]{0,63}$/,h=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,f={javascript:!0,"javascript:":!0},p={javascript:!0,"javascript:":!0},m={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},g=bP();function v(C,T,S){if(C&&typeof C=="object"&&C instanceof e)return C;var E=new e;return E.parse(C,T,S),E}e.prototype.parse=function(C,T,S){if(typeof C!="string")throw new TypeError("Parameter 'url' must be a string, not "+typeof C);var E=C.indexOf("?"),_=E!==-1&&E127?oe+="x":oe+=J[le];if(!oe.match(u)){var Se=z.slice(0,L),fe=z.slice(L+1),be=J.match(h);be&&(Se.push(be[1]),fe.unshift(be[2])),fe.length&&(k="/"+fe.join(".")+k),this.hostname=Se.join(".");break}}}this.hostname.length>d?this.hostname="":this.hostname=this.hostname.toLowerCase(),X||(this.hostname=n.toASCII(this.hostname));var q=this.port?":"+this.port:"",Z=this.hostname||"";this.host=Z+q,this.href+=this.host,X&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),k[0]!=="/"&&(k="/"+k))}if(!f[G])for(var L=0,K=a.length;L0?S.host.split("@"):!1;oe&&(S.auth=oe.shift(),S.hostname=oe.shift(),S.host=S.hostname)}return S.search=C.search,S.query=C.query,(S.pathname!==null||S.search!==null)&&(S.path=(S.pathname?S.pathname:"")+(S.search?S.search:"")),S.href=S.format(),S}if(!z.length)return S.pathname=null,S.search?S.path="/"+S.search:S.path=null,S.href=S.format(),S;for(var le=z.slice(-1)[0],ve=(S.host||C.host||z.length>1)&&(le==="."||le==="..")||le==="",Se=0,fe=z.length;fe>=0;fe--)le=z[fe],le==="."?z.splice(fe,1):le===".."?(z.splice(fe,1),Se++):Se&&(z.splice(fe,1),Se--);if(!$&&!X)for(;Se--;Se)z.unshift("..");$&&z[0]!==""&&(!z[0]||z[0].charAt(0)!=="/")&&z.unshift(""),ve&&z.join("/").substr(-1)!=="/"&&z.push("");var be=z[0]===""||z[0]&&z[0].charAt(0)==="/";if(J){S.hostname=be?"":z.length?z.shift():"",S.host=S.hostname;var oe=S.host&&S.host.indexOf("@")>0?S.host.split("@"):!1;oe&&(S.auth=oe.shift(),S.hostname=oe.shift(),S.host=S.hostname)}return $=$||S.host&&z.length,$&&!be&&z.unshift(""),z.length>0?S.pathname=z.join("/"):(S.pathname=null,S.path=null),(S.pathname!==null||S.search!==null)&&(S.path=(S.pathname?S.pathname:"")+(S.search?S.search:"")),S.auth=C.auth||S.auth,S.slashes=S.slashes||C.slashes,S.href=S.format(),S},e.prototype.parseHost=function(){var C=this.host,T=i.exec(C);T&&(T=T[0],T!==":"&&(this.port=T.substr(1)),C=C.substr(0,C.length-T.length)),C&&(this.hostname=C)},ho.parse=v,ho.resolve=b,ho.resolveObject=w,ho.format=y,ho.Url=e,ho}yP();const n0={};function mt(n,e,t=3){if(n0[e])return;let i=new Error().stack;typeof i>"u"?console.warn("PixiJS Deprecation Warning: ",`${e} Deprecated since v${n}`):(i=i.split(` `).splice(t).join(` `),console.groupCollapsed?(console.groupCollapsed("%cPixiJS Deprecation Warning: %c%s","color:#614108;background:#fffbe6","font-weight:normal;color:#614108;background:#fffbe6",`${e} Deprecated since v${n}`),console.warn(i),console.groupEnd()):(console.warn("PixiJS Deprecation Warning: ",`${e} Deprecated since v${n}`),console.warn(i))),n0[e]=!0}function Bn(n){if(typeof n!="string")throw new TypeError(`Path must be a string. Received ${JSON.stringify(n)}`)}function dl(n){return n.split("?")[0].split("#")[0]}function xP(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function wP(n,e,t){return n.replace(new RegExp(xP(e),"g"),t)}function SP(n,e){let t="",i=0,s=-1,r=0,o=-1;for(let a=0;a<=n.length;++a){if(a2){const c=t.lastIndexOf("/");if(c!==t.length-1){c===-1?(t="",i=0):(t=t.slice(0,c),i=t.length-1-t.lastIndexOf("/")),s=a,r=0;continue}}else if(t.length===2||t.length===1){t="",i=0,s=a,r=0;continue}}}else t.length>0?t+=`/${n.slice(s+1,a)}`:t=n.slice(s+1,a),i=a-s-1;s=a,r=0}else o===46&&r!==-1?++r:r=-1}return t}const hi={toPosix(n){return wP(n,"\\","/")},isUrl(n){return/^https?:/.test(this.toPosix(n))},isDataUrl(n){return/^data:([a-z]+\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s<>]*?)$/i.test(n)},isBlobUrl(n){return n.startsWith("blob:")},hasProtocol(n){return/^[^/:]+:/.test(this.toPosix(n))},getProtocol(n){Bn(n),n=this.toPosix(n);const e=/^file:\/\/\//.exec(n);if(e)return e[0];const t=/^[^/:]+:\/{0,2}/.exec(n);return t?t[0]:""},toAbsolute(n,e,t){if(Bn(n),this.isDataUrl(n)||this.isBlobUrl(n))return n;const i=dl(this.toPosix(e??Ve.ADAPTER.getBaseUrl())),s=dl(this.toPosix(t??this.rootname(i)));return n=this.toPosix(n),n.startsWith("/")?hi.join(s,n.slice(1)):this.isAbsolute(n)?n:this.join(i,n)},normalize(n){if(Bn(n),n.length===0)return".";if(this.isDataUrl(n)||this.isBlobUrl(n))return n;n=this.toPosix(n);let e="";const t=n.startsWith("/");this.hasProtocol(n)&&(e=this.rootname(n),n=n.slice(e.length));const i=n.endsWith("/");return n=SP(n),n.length>0&&i&&(n+="/"),t?`/${n}`:e+n},isAbsolute(n){return Bn(n),n=this.toPosix(n),this.hasProtocol(n)?!0:n.startsWith("/")},join(...n){if(n.length===0)return".";let e;for(let t=0;t0)if(e===void 0)e=i;else{const s=n[t-1]??"";this.joinExtensions.includes(this.extname(s).toLowerCase())?e+=`/../${i}`:e+=`/${i}`}}return e===void 0?".":this.normalize(e)},dirname(n){if(Bn(n),n.length===0)return".";n=this.toPosix(n);let e=n.charCodeAt(0);const t=e===47;let i=-1,s=!0;const r=this.getProtocol(n),o=n;n=n.slice(r.length);for(let a=n.length-1;a>=1;--a)if(e=n.charCodeAt(a),e===47){if(!s){i=a;break}}else s=!1;return i===-1?t?"/":this.isUrl(o)?r+n:r:t&&i===1?"//":r+n.slice(0,i)},rootname(n){Bn(n),n=this.toPosix(n);let e="";if(n.startsWith("/")?e="/":e=this.getProtocol(n),this.isUrl(n)){const t=n.indexOf("/",e.length);t!==-1?e=n.slice(0,t):e=n,e.endsWith("/")||(e+="/")}return e},basename(n,e){Bn(n),e&&Bn(e),n=dl(this.toPosix(n));let t=0,i=-1,s=!0,r;if(e!==void 0&&e.length>0&&e.length<=n.length){if(e.length===n.length&&e===n)return"";let o=e.length-1,a=-1;for(r=n.length-1;r>=0;--r){const c=n.charCodeAt(r);if(c===47){if(!s){t=r+1;break}}else a===-1&&(s=!1,a=r+1),o>=0&&(c===e.charCodeAt(o)?--o===-1&&(i=r):(o=-1,i=a))}return t===i?i=a:i===-1&&(i=n.length),n.slice(t,i)}for(r=n.length-1;r>=0;--r)if(n.charCodeAt(r)===47){if(!s){t=r+1;break}}else i===-1&&(s=!1,i=r+1);return i===-1?"":n.slice(t,i)},extname(n){Bn(n),n=dl(this.toPosix(n));let e=-1,t=0,i=-1,s=!0,r=0;for(let o=n.length-1;o>=0;--o){const a=n.charCodeAt(o);if(a===47){if(!s){t=o+1;break}continue}i===-1&&(s=!1,i=o+1),a===46?e===-1?e=o:r!==1&&(r=1):e!==-1&&(r=-1)}return e===-1||i===-1||r===0||r===1&&e===i-1&&e===t+1?"":n.slice(e,i)},parse(n){Bn(n);const e={root:"",dir:"",base:"",ext:"",name:""};if(n.length===0)return e;n=dl(this.toPosix(n));let t=n.charCodeAt(0);const i=this.isAbsolute(n);let s;e.root=this.rootname(n),i||this.hasProtocol(n)?s=1:s=0;let r=-1,o=0,a=-1,c=!0,l=n.length-1,d=0;for(;l>=s;--l){if(t=n.charCodeAt(l),t===47){if(!c){o=l+1;break}continue}a===-1&&(c=!1,a=l+1),t===46?r===-1?r=l:d!==1&&(d=1):r!==-1&&(d=-1)}return r===-1||a===-1||d===0||d===1&&r===a-1&&r===o+1?a!==-1&&(o===0&&i?e.base=e.name=n.slice(1,a):e.base=e.name=n.slice(o,a)):(o===0&&i?(e.name=n.slice(1,r),e.base=n.slice(1,a)):(e.name=n.slice(o,r),e.base=n.slice(o,a)),e.ext=n.slice(r,a)),e.dir=this.dirname(n),e},sep:"/",delimiter:":",joinExtensions:[".html"]};let If;async function CP(){return If??(If=(async()=>{var r;const n=document.createElement("canvas").getContext("webgl");if(!n)return ki.UNPACK;const e=await new Promise(o=>{const a=document.createElement("video");a.onloadeddata=()=>o(a),a.onerror=()=>o(null),a.autoplay=!1,a.crossOrigin="anonymous",a.preload="auto",a.src="data:video/webm;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2VibUKHgQJChYECGFOAZwEAAAAAAAHTEU2bdLpNu4tTq4QVSalmU6yBoU27i1OrhBZUrmtTrIHGTbuMU6uEElTDZ1OsggEXTbuMU6uEHFO7a1OsggG97AEAAAAAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmoCrXsYMPQkBNgIRMYXZmV0GETGF2ZkSJiEBEAAAAAAAAFlSua8yuAQAAAAAAAEPXgQFzxYgAAAAAAAAAAZyBACK1nIN1bmSIgQCGhVZfVlA5g4EBI+ODhAJiWgDglLCBArqBApqBAlPAgQFVsIRVuYEBElTDZ9Vzc9JjwItjxYgAAAAAAAAAAWfInEWjh0VOQ09ERVJEh49MYXZjIGxpYnZweC12cDlnyKJFo4hEVVJBVElPTkSHlDAwOjAwOjAwLjA0MDAwMDAwMAAAH0O2dcfngQCgwqGggQAAAIJJg0IAABAAFgA4JBwYSgAAICAAEb///4r+AAB1oZ2mm+6BAaWWgkmDQgAAEAAWADgkHBhKAAAgIABIQBxTu2uRu4+zgQC3iveBAfGCAXHwgQM=",a.load()});if(!e)return ki.UNPACK;const t=n.createTexture();n.bindTexture(n.TEXTURE_2D,t);const i=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,i),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,t,0),n.pixelStorei(n.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,n.NONE),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,e);const s=new Uint8Array(4);return n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,s),n.deleteFramebuffer(i),n.deleteTexture(t),(r=n.getExtension("WEBGL_lose_context"))==null||r.loseContext(),s[0]<=s[3]?ki.PMA:ki.UNPACK})()),If}let kf;function AP(){return typeof kf>"u"&&(kf=(function(){var e;const n={stencil:!0,failIfMajorPerformanceCaveat:Ve.FAIL_IF_MAJOR_PERFORMANCE_CAVEAT};try{if(!Ve.ADAPTER.getWebGLRenderingContext())return!1;const t=Ve.ADAPTER.createCanvas();let i=t.getContext("webgl",n)||t.getContext("experimental-webgl",n);const s=!!((e=i==null?void 0:i.getContextAttributes())!=null&&e.stencil);if(i){const r=i.getExtension("WEBGL_lose_context");r&&r.loseContext()}return i=null,s}catch{return!1}})()),kf}var TP={grad:.9,turn:360,rad:360/(2*Math.PI)},$s=function(n){return typeof n=="string"?n.length>0:typeof n=="number"},Pi=function(n,e,t){return e===void 0&&(e=0),t===void 0&&(t=Math.pow(10,e)),Math.round(t*n)/t+0},Fn=function(n,e,t){return e===void 0&&(e=0),t===void 0&&(t=1),n>t?t:n>e?n:e},ow=function(n){return(n=isFinite(n)?n%360:0)>0?n:n+360},s0=function(n){return{r:Fn(n.r,0,255),g:Fn(n.g,0,255),b:Fn(n.b,0,255),a:Fn(n.a)}},Rf=function(n){return{r:Pi(n.r),g:Pi(n.g),b:Pi(n.b),a:Pi(n.a,3)}},EP=/^#([0-9a-f]{3,8})$/i,Dc=function(n){var e=n.toString(16);return e.length<2?"0"+e:e},aw=function(n){var e=n.r,t=n.g,i=n.b,s=n.a,r=Math.max(e,t,i),o=r-Math.min(e,t,i),a=o?r===e?(t-i)/o:r===t?2+(i-e)/o:4+(e-t)/o:0;return{h:60*(a<0?a+6:a),s:r?o/r*100:0,v:r/255*100,a:s}},lw=function(n){var e=n.h,t=n.s,i=n.v,s=n.a;e=e/360*6,t/=100,i/=100;var r=Math.floor(e),o=i*(1-t),a=i*(1-(e-r)*t),c=i*(1-(1-e+r)*t),l=r%6;return{r:255*[i,a,o,o,c,i][l],g:255*[c,i,i,a,o,o][l],b:255*[o,o,c,i,i,a][l],a:s}},r0=function(n){return{h:ow(n.h),s:Fn(n.s,0,100),l:Fn(n.l,0,100),a:Fn(n.a)}},o0=function(n){return{h:Pi(n.h),s:Pi(n.s),l:Pi(n.l),a:Pi(n.a,3)}},a0=function(n){return lw((t=(e=n).s,{h:e.h,s:(t*=((i=e.l)<50?i:100-i)/100)>0?2*t/(i+t)*100:0,v:i+t,a:e.a}));var e,t,i},Rl=function(n){return{h:(e=aw(n)).h,s:(s=(200-(t=e.s))*(i=e.v)/100)>0&&s<200?t*i/100/(s<=100?s:200-s)*100:0,l:s/2,a:e.a};var e,t,i,s},_P=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s*,\s*([+-]?\d*\.?\d+)%\s*,\s*([+-]?\d*\.?\d+)%\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,MP=/^hsla?\(\s*([+-]?\d*\.?\d+)(deg|rad|grad|turn)?\s+([+-]?\d*\.?\d+)%\s+([+-]?\d*\.?\d+)%\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,PP=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*,\s*([+-]?\d*\.?\d+)(%)?\s*(?:,\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,IP=/^rgba?\(\s*([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s+([+-]?\d*\.?\d+)(%)?\s*(?:\/\s*([+-]?\d*\.?\d+)(%)?\s*)?\)$/i,Np={string:[[function(n){var e=EP.exec(n);return e?(n=e[1]).length<=4?{r:parseInt(n[0]+n[0],16),g:parseInt(n[1]+n[1],16),b:parseInt(n[2]+n[2],16),a:n.length===4?Pi(parseInt(n[3]+n[3],16)/255,2):1}:n.length===6||n.length===8?{r:parseInt(n.substr(0,2),16),g:parseInt(n.substr(2,2),16),b:parseInt(n.substr(4,2),16),a:n.length===8?Pi(parseInt(n.substr(6,2),16)/255,2):1}:null:null},"hex"],[function(n){var e=PP.exec(n)||IP.exec(n);return e?e[2]!==e[4]||e[4]!==e[6]?null:s0({r:Number(e[1])/(e[2]?100/255:1),g:Number(e[3])/(e[4]?100/255:1),b:Number(e[5])/(e[6]?100/255:1),a:e[7]===void 0?1:Number(e[7])/(e[8]?100:1)}):null},"rgb"],[function(n){var e=_P.exec(n)||MP.exec(n);if(!e)return null;var t,i,s=r0({h:(t=e[1],i=e[2],i===void 0&&(i="deg"),Number(t)*(TP[i]||1)),s:Number(e[3]),l:Number(e[4]),a:e[5]===void 0?1:Number(e[5])/(e[6]?100:1)});return a0(s)},"hsl"]],object:[[function(n){var e=n.r,t=n.g,i=n.b,s=n.a,r=s===void 0?1:s;return $s(e)&&$s(t)&&$s(i)?s0({r:Number(e),g:Number(t),b:Number(i),a:Number(r)}):null},"rgb"],[function(n){var e=n.h,t=n.s,i=n.l,s=n.a,r=s===void 0?1:s;if(!$s(e)||!$s(t)||!$s(i))return null;var o=r0({h:Number(e),s:Number(t),l:Number(i),a:Number(r)});return a0(o)},"hsl"],[function(n){var e=n.h,t=n.s,i=n.v,s=n.a,r=s===void 0?1:s;if(!$s(e)||!$s(t)||!$s(i))return null;var o=(function(a){return{h:ow(a.h),s:Fn(a.s,0,100),v:Fn(a.v,0,100),a:Fn(a.a)}})({h:Number(e),s:Number(t),v:Number(i),a:Number(r)});return lw(o)},"hsv"]]},l0=function(n,e){for(var t=0;t=.5},n.prototype.toHex=function(){return e=Rf(this.rgba),t=e.r,i=e.g,s=e.b,o=(r=e.a)<1?Dc(Pi(255*r)):"","#"+Dc(t)+Dc(i)+Dc(s)+o;var e,t,i,s,r,o},n.prototype.toRgb=function(){return Rf(this.rgba)},n.prototype.toRgbString=function(){return e=Rf(this.rgba),t=e.r,i=e.g,s=e.b,(r=e.a)<1?"rgba("+t+", "+i+", "+s+", "+r+")":"rgb("+t+", "+i+", "+s+")";var e,t,i,s,r},n.prototype.toHsl=function(){return o0(Rl(this.rgba))},n.prototype.toHslString=function(){return e=o0(Rl(this.rgba)),t=e.h,i=e.s,s=e.l,(r=e.a)<1?"hsla("+t+", "+i+"%, "+s+"%, "+r+")":"hsl("+t+", "+i+"%, "+s+"%)";var e,t,i,s,r},n.prototype.toHsv=function(){return e=aw(this.rgba),{h:Pi(e.h),s:Pi(e.s),v:Pi(e.v),a:Pi(e.a,3)};var e},n.prototype.invert=function(){return os({r:255-(e=this.rgba).r,g:255-e.g,b:255-e.b,a:e.a});var e},n.prototype.saturate=function(e){return e===void 0&&(e=.1),os(Ff(this.rgba,e))},n.prototype.desaturate=function(e){return e===void 0&&(e=.1),os(Ff(this.rgba,-e))},n.prototype.grayscale=function(){return os(Ff(this.rgba,-1))},n.prototype.lighten=function(e){return e===void 0&&(e=.1),os(c0(this.rgba,e))},n.prototype.darken=function(e){return e===void 0&&(e=.1),os(c0(this.rgba,-e))},n.prototype.rotate=function(e){return e===void 0&&(e=15),this.hue(this.hue()+e)},n.prototype.alpha=function(e){return typeof e=="number"?os({r:(t=this.rgba).r,g:t.g,b:t.b,a:e}):Pi(this.rgba.a,3);var t},n.prototype.hue=function(e){var t=Rl(this.rgba);return typeof e=="number"?os({h:e,s:t.s,l:t.l,a:t.a}):Pi(t.h)},n.prototype.isEqual=function(e){return this.toHex()===os(e).toHex()},n})(),os=function(n){return n instanceof $p?n:new $p(n)},d0=[],RP=function(n){n.forEach(function(e){d0.indexOf(e)<0&&(e($p,Np),d0.push(e))})};function FP(n,e){var t={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},i={};for(var s in t)i[t[s]]=s;var r={};n.prototype.toName=function(o){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var a,c,l=i[this.toHex()];if(l)return l;if(o!=null&&o.closest){var d=this.toRgb(),u=1/0,h="black";if(!r.length)for(var f in t)r[f]=new n(t[f]).toRgb();for(var p in t){var m=(a=d,c=r[p],Math.pow(a.r-c.r,2)+Math.pow(a.g-c.g,2)+Math.pow(a.b-c.b,2));ms===t[r]);if(e!==null&&t!==null){const s=Object.keys(e),r=Object.keys(t);return s.length!==r.length?!1:s.every(o=>e[o]===t[o])}return e===t}toRgba(){const[e,t,i,s]=this._components;return{r:e,g:t,b:i,a:s}}toRgb(){const[e,t,i]=this._components;return{r:e,g:t,b:i}}toRgbaString(){const[e,t,i]=this.toUint8RgbArray();return`rgba(${e},${t},${i},${this.alpha})`}toUint8RgbArray(e){const[t,i,s]=this._components;return e=e??[],e[0]=Math.round(t*255),e[1]=Math.round(i*255),e[2]=Math.round(s*255),e}toRgbArray(e){e=e??[];const[t,i,s]=this._components;return e[0]=t,e[1]=i,e[2]=s,e}toNumber(){return this._int}toLittleEndianNumber(){const e=this._int;return(e>>16)+(e&65280)+((e&255)<<16)}multiply(e){const[t,i,s,r]=yd.temp.setValue(e)._components;return this._components[0]*=t,this._components[1]*=i,this._components[2]*=s,this._components[3]*=r,this.refreshInt(),this._value=null,this}premultiply(e,t=!0){return t&&(this._components[0]*=e,this._components[1]*=e,this._components[2]*=e),this._components[3]=e,this.refreshInt(),this._value=null,this}toPremultiplied(e,t=!0){if(e===1)return(255<<24)+this._int;if(e===0)return t?0:this._int;let i=this._int>>16&255,s=this._int>>8&255,r=this._int&255;return t&&(i=i*e+.5|0,s=s*e+.5|0,r=r*e+.5|0),(e*255<<24)+(i<<16)+(s<<8)+r}toHex(){const e=this._int.toString(16);return`#${"000000".substring(0,6-e.length)+e}`}toHexa(){const e=Math.round(this._components[3]*255).toString(16);return this.toHex()+"00".substring(0,2-e.length)+e}setAlpha(e){return this._components[3]=this._clamp(e),this}round(e){const[t,i,s]=this._components;return this._components[0]=Math.round(t*e)/e,this._components[1]=Math.round(i*e)/e,this._components[2]=Math.round(s*e)/e,this.refreshInt(),this._value=null,this}toArray(e){e=e??[];const[t,i,s,r]=this._components;return e[0]=t,e[1]=i,e[2]=s,e[3]=r,e}normalize(e){let t,i,s,r;if((typeof e=="number"||e instanceof Number)&&e>=0&&e<=16777215){const o=e;t=(o>>16&255)/255,i=(o>>8&255)/255,s=(o&255)/255,r=1}else if((Array.isArray(e)||e instanceof Float32Array)&&e.length>=3&&e.length<=4)e=this._clamp(e),[t,i,s,r=1]=e;else if((e instanceof Uint8Array||e instanceof Uint8ClampedArray)&&e.length>=3&&e.length<=4)e=this._clamp(e,0,255),[t,i,s,r=255]=e,t/=255,i/=255,s/=255,r/=255;else if(typeof e=="string"||typeof e=="object"){if(typeof e=="string"){const a=yd.HEX_PATTERN.exec(e);a&&(e=`#${a[2]}`)}const o=os(e);o.isValid()&&({r:t,g:i,b:s,a:r}=o.rgba,t/=255,i/=255,s/=255)}if(t!==void 0)this._components[0]=t,this._components[1]=i,this._components[2]=s,this._components[3]=r,this.refreshInt();else throw new Error(`Unable to convert color ${e}`)}refreshInt(){this._clamp(this._components);const[e,t,i]=this._components;this._int=(e*255<<16)+(t*255<<8)+(i*255|0)}_clamp(e,t=0,i=1){return typeof e=="number"?Math.min(Math.max(e,t),i):(e.forEach((s,r)=>{e[r]=Math.min(Math.max(s,t),i)}),e)}};fa.shared=new fa,fa.temp=new fa,fa.HEX_PATTERN=/^(#|0x)?(([a-f0-9]{3}){1,2}([a-f0-9]{2})?)$/i;let Rt=fa;function LP(n){return mt("7.2.0","utils.hex2string is deprecated, use Color#toHex instead"),Rt.shared.setValue(n).toHex()}function DP(n){return mt("7.2.0","utils.rgb2hex is deprecated, use Color#toNumber instead"),Rt.shared.setValue(n).toNumber()}function OP(){const n=[],e=[];for(let i=0;i<32;i++)n[i]=i,e[i]=i;n[Qe.NORMAL_NPM]=Qe.NORMAL,n[Qe.ADD_NPM]=Qe.ADD,n[Qe.SCREEN_NPM]=Qe.SCREEN,e[Qe.NORMAL]=Qe.NORMAL_NPM,e[Qe.ADD]=Qe.ADD_NPM,e[Qe.SCREEN]=Qe.SCREEN_NPM;const t=[];return t.push(e),t.push(n),t}const cw=OP();function dw(n,e){return cw[e?1:0][n]}function NP(n,e=null){const t=n*6;if(e=e||new Uint16Array(t),e.length!==t)throw new Error(`Out buffer length is incorrect, got ${e.length} and expected ${t}`);for(let i=0,s=0;i>>1,n|=n>>>2,n|=n>>>4,n|=n>>>8,n|=n>>>16,n+1}function u0(n){return!(n&n-1)&&!!n}function h0(n){let e=(n>65535?1:0)<<4;n>>>=e;let t=(n>255?1:0)<<3;return n>>>=t,e|=t,t=(n>15?1:0)<<2,n>>>=t,e|=t,t=(n>3?1:0)<<1,n>>>=t,e|=t,e|n>>1}function Ia(n,e,t){const i=n.length;let s;if(e>=i||t===0)return;t=e+t>i?i-e:t;const r=i-t;for(s=e;s(n.Renderer="renderer",n.Application="application",n.RendererSystem="renderer-webgl-system",n.RendererPlugin="renderer-webgl-plugin",n.CanvasRendererSystem="renderer-canvas-system",n.CanvasRendererPlugin="renderer-canvas-plugin",n.Asset="asset",n.LoadParser="load-parser",n.ResolveParser="resolve-parser",n.CacheParser="cache-parser",n.DetectionParser="detection-parser",n))(Oe||{});const Up=n=>{if(typeof n=="function"||typeof n=="object"&&n.extension){if(!n.extension)throw new Error("Extension class must have an extension object");n={...typeof n.extension!="object"?{type:n.extension}:n.extension,ref:n}}if(typeof n=="object")n={...n};else throw new Error("Invalid extension type");return typeof n.type=="string"&&(n.type=[n.type]),n},v0=(n,e)=>Up(n).priority??e,He={_addHandlers:{},_removeHandlers:{},_queue:{},remove(...n){return n.map(Up).forEach(e=>{e.type.forEach(t=>{var i,s;return(s=(i=this._removeHandlers)[t])==null?void 0:s.call(i,e)})}),this},add(...n){return n.map(Up).forEach(e=>{e.type.forEach(t=>{var r,o;const i=this._addHandlers,s=this._queue;i[t]?(r=i[t])==null||r.call(i,e):(s[t]=s[t]||[],(o=s[t])==null||o.push(e))})}),this},handle(n,e,t){var o;const i=this._addHandlers,s=this._removeHandlers;if(i[n]||s[n])throw new Error(`Extension type ${n} already has a handler`);i[n]=e,s[n]=t;const r=this._queue;return r[n]&&((o=r[n])==null||o.forEach(a=>e(a)),delete r[n]),this},handleByMap(n,e){return this.handle(n,t=>{t.name&&(e[t.name]=t.ref)},t=>{t.name&&delete e[t.name]})},handleByList(n,e,t=-1){return this.handle(n,i=>{e.includes(i.ref)||(e.push(i.ref),e.sort((s,r)=>v0(r,t)-v0(s,t)))},i=>{const s=e.indexOf(i.ref);s!==-1&&e.splice(s,1)})}};class Vp{constructor(e){typeof e=="number"?this.rawBinaryData=new ArrayBuffer(e):e instanceof Uint8Array?this.rawBinaryData=e.buffer:this.rawBinaryData=e,this.uint32View=new Uint32Array(this.rawBinaryData),this.float32View=new Float32Array(this.rawBinaryData)}get int8View(){return this._int8View||(this._int8View=new Int8Array(this.rawBinaryData)),this._int8View}get uint8View(){return this._uint8View||(this._uint8View=new Uint8Array(this.rawBinaryData)),this._uint8View}get int16View(){return this._int16View||(this._int16View=new Int16Array(this.rawBinaryData)),this._int16View}get uint16View(){return this._uint16View||(this._uint16View=new Uint16Array(this.rawBinaryData)),this._uint16View}get int32View(){return this._int32View||(this._int32View=new Int32Array(this.rawBinaryData)),this._int32View}view(e){return this[`${e}View`]}destroy(){this.rawBinaryData=null,this._int8View=null,this._uint8View=null,this._int16View=null,this._uint16View=null,this._int32View=null,this.uint32View=null,this.float32View=null}static sizeOf(e){switch(e){case"int8":case"uint8":return 1;case"int16":case"uint16":return 2;case"int32":case"uint32":case"float32":return 4;default:throw new Error(`${e} isn't a valid view type`)}}}const YP=["precision mediump float;","void main(void){","float test = 0.1;","%forloop%","gl_FragColor = vec4(0.0);","}"].join(` `);function zP(n){let e="";for(let t=0;t0&&(e+=` -else `),t=0;--i){const s=Xp[i];if(s.test&&s.test(n,t))return new s(n,e)}throw new Error("Unrecognized source type to auto-detect Resource")}class Zn{constructor(e){this.items=[],this._name=e,this._aliasCount=0}emit(e,t,i,s,r,o,a,c){if(arguments.length>8)throw new Error("max arguments reached");const{name:l,items:d}=this;this._aliasCount++;for(let u=0,h=d.length;u0&&this.items.length>1&&(this._aliasCount=0,this.items=this.items.slice(0))}add(e){return e[this._name]&&(this.ensureNonAliasedItems(),this.remove(e),this.items.push(e)),this}remove(e){const t=this.items.indexOf(e);return t!==-1&&(this.ensureNonAliasedItems(),this.items.splice(t,1)),this}contains(e){return this.items.includes(e)}removeAll(){return this.ensureNonAliasedItems(),this.items.length=0,this}destroy(){this.removeAll(),this.items.length=0,this._name=""}get empty(){return this.items.length===0}get name(){return this._name}}Object.defineProperties(Zn.prototype,{dispatch:{value:Zn.prototype.emit},run:{value:Zn.prototype.emit}});class Zl{constructor(e=0,t=0){this._width=e,this._height=t,this.destroyed=!1,this.internal=!1,this.onResize=new Zn("setRealSize"),this.onUpdate=new Zn("update"),this.onError=new Zn("onError")}bind(e){this.onResize.add(e),this.onUpdate.add(e),this.onError.add(e),(this._width||this._height)&&this.onResize.emit(this._width,this._height)}unbind(e){this.onResize.remove(e),this.onUpdate.remove(e),this.onError.remove(e)}resize(e,t){(e!==this._width||t!==this._height)&&(this._width=e,this._height=t,this.onResize.emit(e,t))}get valid(){return!!this._width&&!!this._height}update(){this.destroyed||this.onUpdate.emit()}load(){return Promise.resolve(this)}get width(){return this._width}get height(){return this._height}style(e,t,i){return!1}dispose(){}destroy(){this.destroyed||(this.destroyed=!0,this.dispose(),this.onError.removeAll(),this.onError=null,this.onResize.removeAll(),this.onResize=null,this.onUpdate.removeAll(),this.onUpdate=null)}static test(e,t){return!1}}class th extends Zl{constructor(e,t){const{width:i,height:s}=t||{};if(!i||!s)throw new Error("BufferResource width or height invalid");super(i,s),this.data=e,this.unpackAlignment=t.unpackAlignment??4}upload(e,t,i){const s=e.gl;s.pixelStorei(s.UNPACK_ALIGNMENT,this.unpackAlignment),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.alphaMode===ki.UNPACK);const r=t.realWidth,o=t.realHeight;return i.width===r&&i.height===o?s.texSubImage2D(t.target,0,0,0,r,o,t.format,i.type,this.data):(i.width=r,i.height=o,s.texImage2D(t.target,0,i.internalFormat,r,o,0,t.format,i.type,this.data)),!0}dispose(){this.data=null}static test(e){return e===null||e instanceof Int8Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array}}const HP={scaleMode:Gn.NEAREST,alphaMode:ki.NPM},Yp=class pa extends mc{constructor(e=null,t=null){super(),t=Object.assign({},pa.defaultOptions,t);const{alphaMode:i,mipmap:s,anisotropicLevel:r,scaleMode:o,width:a,height:c,wrapMode:l,format:d,type:u,target:h,resolution:f,resourceOptions:p}=t;e&&!(e instanceof Zl)&&(e=hw(e,p),e.internal=!0),this.resolution=f||Ve.RESOLUTION,this.width=Math.round((a||0)*this.resolution)/this.resolution,this.height=Math.round((c||0)*this.resolution)/this.resolution,this._mipmap=s,this.anisotropicLevel=r,this._wrapMode=l,this._scaleMode=o,this.format=d,this.type=u,this.target=h,this.alphaMode=i,this.uid=Bo(),this.touched=0,this.isPowerOfTwo=!1,this._refreshPOT(),this._glTextures={},this.dirtyId=0,this.dirtyStyleId=0,this.cacheId=null,this.valid=a>0&&c>0,this.textureCacheIds=[],this.destroyed=!1,this.resource=null,this._batchEnabled=0,this._batchLocation=0,this.parentTextureArray=null,this.setResource(e)}get realWidth(){return Math.round(this.width*this.resolution)}get realHeight(){return Math.round(this.height*this.resolution)}get mipmap(){return this._mipmap}set mipmap(e){this._mipmap!==e&&(this._mipmap=e,this.dirtyStyleId++)}get scaleMode(){return this._scaleMode}set scaleMode(e){this._scaleMode!==e&&(this._scaleMode=e,this.dirtyStyleId++)}get wrapMode(){return this._wrapMode}set wrapMode(e){this._wrapMode!==e&&(this._wrapMode=e,this.dirtyStyleId++)}setStyle(e,t){let i;return e!==void 0&&e!==this.scaleMode&&(this.scaleMode=e,i=!0),t!==void 0&&t!==this.mipmap&&(this.mipmap=t,i=!0),i&&this.dirtyStyleId++,this}setSize(e,t,i){return i=i||this.resolution,this.setRealSize(e*i,t*i,i)}setRealSize(e,t,i){return this.resolution=i||this.resolution,this.width=Math.round(e)/this.resolution,this.height=Math.round(t)/this.resolution,this._refreshPOT(),this.update(),this}_refreshPOT(){this.isPowerOfTwo=u0(this.realWidth)&&u0(this.realHeight)}setResolution(e){const t=this.resolution;return t===e?this:(this.resolution=e,this.valid&&(this.width=Math.round(this.width*t)/e,this.height=Math.round(this.height*t)/e,this.emit("update",this)),this._refreshPOT(),this)}setResource(e){if(this.resource===e)return this;if(this.resource)throw new Error("Resource can be set only once");return e.bind(this),this.resource=e,this}update(){this.valid?(this.dirtyId++,this.dirtyStyleId++,this.emit("update",this)):this.width>0&&this.height>0&&(this.valid=!0,this.emit("loaded",this),this.emit("update",this))}onError(e){this.emit("error",this,e)}destroy(){this.resource&&(this.resource.unbind(this),this.resource.internal&&this.resource.destroy(),this.resource=null),this.cacheId&&(delete Sr[this.cacheId],delete as[this.cacheId],this.cacheId=null),this.valid=!1,this.dispose(),pa.removeFromCache(this),this.textureCacheIds=null,this.destroyed=!0,this.emit("destroyed",this),this.removeAllListeners()}dispose(){this.emit("dispose",this)}castToBaseTexture(){return this}static from(e,t,i=Ve.STRICT_TEXTURE_CACHE){const s=typeof e=="string";let r=null;if(s)r=e;else{if(!e._pixiId){const a=(t==null?void 0:t.pixiIdPrefix)||"pixiid";e._pixiId=`${a}_${Bo()}`}r=e._pixiId}let o=Sr[r];if(s&&i&&!o)throw new Error(`The cacheId "${r}" does not exist in BaseTextureCache.`);return o||(o=new pa(e,t),o.cacheId=r,pa.addToCache(o,r)),o}static fromBuffer(e,t,i,s){e=e||new Float32Array(t*i*4);const r=new th(e,{width:t,height:i,...s==null?void 0:s.resourceOptions});let o,a;return e instanceof Float32Array?(o=Pe.RGBA,a=je.FLOAT):e instanceof Int32Array?(o=Pe.RGBA_INTEGER,a=je.INT):e instanceof Uint32Array?(o=Pe.RGBA_INTEGER,a=je.UNSIGNED_INT):e instanceof Int16Array?(o=Pe.RGBA_INTEGER,a=je.SHORT):e instanceof Uint16Array?(o=Pe.RGBA_INTEGER,a=je.UNSIGNED_SHORT):e instanceof Int8Array?(o=Pe.RGBA,a=je.BYTE):(o=Pe.RGBA,a=je.UNSIGNED_BYTE),r.internal=!0,new pa(r,Object.assign({},HP,{type:a,format:o},s))}static addToCache(e,t){t&&(e.textureCacheIds.includes(t)||e.textureCacheIds.push(t),Sr[t]&&Sr[t]!==e&&console.warn(`BaseTexture added to the cache with an id [${t}] that already had an entry`),Sr[t]=e)}static removeFromCache(e){if(typeof e=="string"){const t=Sr[e];if(t){const i=t.textureCacheIds.indexOf(e);return i>-1&&t.textureCacheIds.splice(i,1),delete Sr[e],t}}else if(e!=null&&e.textureCacheIds){for(let t=0;t1){for(let u=0;u(n[n.POLY=0]="POLY",n[n.RECT=1]="RECT",n[n.CIRC=2]="CIRC",n[n.ELIP=3]="ELIP",n[n.RREC=4]="RREC",n))(Ni||{});class At{constructor(e=0,t=0){this.x=0,this.y=0,this.x=e,this.y=t}clone(){return new At(this.x,this.y)}copyFrom(e){return this.set(e.x,e.y),this}copyTo(e){return e.set(this.x,this.y),e}equals(e){return e.x===this.x&&e.y===this.y}set(e=0,t=e){return this.x=e,this.y=t,this}}At.prototype.toString=function(){return`[@pixi/math:Point x=${this.x} y=${this.y}]`};const Oc=[new At,new At,new At,new At];class ht{constructor(e=0,t=0,i=0,s=0){this.x=Number(e),this.y=Number(t),this.width=Number(i),this.height=Number(s),this.type=Ni.RECT}get left(){return this.x}get right(){return this.x+this.width}get top(){return this.y}get bottom(){return this.y+this.height}static get EMPTY(){return new ht(0,0,0,0)}clone(){return new ht(this.x,this.y,this.width,this.height)}copyFrom(e){return this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height,this}copyTo(e){return e.x=this.x,e.y=this.y,e.width=this.width,e.height=this.height,e}contains(e,t){return this.width<=0||this.height<=0?!1:e>=this.x&&e=this.y&&te.right?e.right:this.right)<=E)return!1;const _=this.ye.bottom?e.bottom:this.bottom)>_}const i=this.left,s=this.right,r=this.top,o=this.bottom;if(s<=i||o<=r)return!1;const a=Oc[0].set(e.left,e.top),c=Oc[1].set(e.left,e.bottom),l=Oc[2].set(e.right,e.top),d=Oc[3].set(e.right,e.bottom);if(l.x<=a.x||c.y<=a.y)return!1;const u=Math.sign(t.a*t.d-t.b*t.c);if(u===0||(t.apply(a,a),t.apply(c,c),t.apply(l,l),t.apply(d,d),Math.max(a.x,c.x,l.x,d.x)<=i||Math.min(a.x,c.x,l.x,d.x)>=s||Math.max(a.y,c.y,l.y,d.y)<=r||Math.min(a.y,c.y,l.y,d.y)>=o))return!1;const h=u*(c.y-a.y),f=u*(a.x-c.x),p=h*i+f*r,m=h*s+f*r,g=h*i+f*o,v=h*s+f*o;if(Math.max(p,m,g,v)<=h*a.x+f*a.y||Math.min(p,m,g,v)>=h*d.x+f*d.y)return!1;const y=u*(a.y-l.y),b=u*(l.x-a.x),x=y*i+b*r,C=y*s+b*r,T=y*i+b*o,S=y*s+b*o;return!(Math.max(x,C,T,S)<=y*a.x+b*a.y||Math.min(x,C,T,S)>=y*d.x+b*d.y)}pad(e=0,t=e){return this.x-=e,this.y-=t,this.width+=e*2,this.height+=t*2,this}fit(e){const t=Math.max(this.x,e.x),i=Math.min(this.x+this.width,e.x+e.width),s=Math.max(this.y,e.y),r=Math.min(this.y+this.height,e.y+e.height);return this.x=t,this.width=Math.max(i-t,0),this.y=s,this.height=Math.max(r-s,0),this}ceil(e=1,t=.001){const i=Math.ceil((this.x+this.width-t)*e)/e,s=Math.ceil((this.y+this.height-t)*e)/e;return this.x=Math.floor((this.x+t)*e)/e,this.y=Math.floor((this.y+t)*e)/e,this.width=i-this.x,this.height=s-this.y,this}enlarge(e){const t=Math.min(this.x,e.x),i=Math.max(this.x+this.width,e.x+e.width),s=Math.min(this.y,e.y),r=Math.max(this.y+this.height,e.y+e.height);return this.x=t,this.width=i-t,this.y=s,this.height=r-s,this}}ht.prototype.toString=function(){return`[@pixi/math:Rectangle x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`};class ih{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.radius=i,this.type=Ni.CIRC}clone(){return new ih(this.x,this.y,this.radius)}contains(e,t){if(this.radius<=0)return!1;const i=this.radius*this.radius;let s=this.x-e,r=this.y-t;return s*=s,r*=r,s+r<=i}getBounds(){return new ht(this.x-this.radius,this.y-this.radius,this.radius*2,this.radius*2)}}ih.prototype.toString=function(){return`[@pixi/math:Circle x=${this.x} y=${this.y} radius=${this.radius}]`};class nh{constructor(e=0,t=0,i=0,s=0){this.x=e,this.y=t,this.width=i,this.height=s,this.type=Ni.ELIP}clone(){return new nh(this.x,this.y,this.width,this.height)}contains(e,t){if(this.width<=0||this.height<=0)return!1;let i=(e-this.x)/this.width,s=(t-this.y)/this.height;return i*=i,s*=s,i+s<=1}getBounds(){return new ht(this.x-this.width,this.y-this.height,this.width,this.height)}}nh.prototype.toString=function(){return`[@pixi/math:Ellipse x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`};class Lo{constructor(...e){let t=Array.isArray(e[0])?e[0]:e;if(typeof t[0]!="number"){const i=[];for(let s=0,r=t.length;st!=d>t&&e<(l-a)*((t-c)/(d-c))+a&&(i=!i)}return i}}Lo.prototype.toString=function(){return`[@pixi/math:PolygoncloseStroke=${this.closeStroke}points=${this.points.reduce((n,e)=>`${n}, ${e}`,"")}]`};class sh{constructor(e=0,t=0,i=0,s=0,r=20){this.x=e,this.y=t,this.width=i,this.height=s,this.radius=r,this.type=Ni.RREC}clone(){return new sh(this.x,this.y,this.width,this.height,this.radius)}contains(e,t){if(this.width<=0||this.height<=0)return!1;if(e>=this.x&&e<=this.x+this.width&&t>=this.y&&t<=this.y+this.height){const i=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(t>=this.y+i&&t<=this.y+this.height-i||e>=this.x+i&&e<=this.x+this.width-i)return!0;let s=e-(this.x+i),r=t-(this.y+i);const o=i*i;if(s*s+r*r<=o||(s=e-(this.x+this.width-i),s*s+r*r<=o)||(r=t-(this.y+this.height-i),s*s+r*r<=o)||(s=e-(this.x+i),s*s+r*r<=o))return!0}return!1}}sh.prototype.toString=function(){return`[@pixi/math:RoundedRectangle x=${this.x} y=${this.y}width=${this.width} height=${this.height} radius=${this.radius}]`};class Bt{constructor(e=1,t=0,i=0,s=1,r=0,o=0){this.array=null,this.a=e,this.b=t,this.c=i,this.d=s,this.tx=r,this.ty=o}fromArray(e){this.a=e[0],this.b=e[1],this.c=e[3],this.d=e[4],this.tx=e[2],this.ty=e[5]}set(e,t,i,s,r,o){return this.a=e,this.b=t,this.c=i,this.d=s,this.tx=r,this.ty=o,this}toArray(e,t){this.array||(this.array=new Float32Array(9));const i=t||this.array;return e?(i[0]=this.a,i[1]=this.b,i[2]=0,i[3]=this.c,i[4]=this.d,i[5]=0,i[6]=this.tx,i[7]=this.ty,i[8]=1):(i[0]=this.a,i[1]=this.c,i[2]=this.tx,i[3]=this.b,i[4]=this.d,i[5]=this.ty,i[6]=0,i[7]=0,i[8]=1),i}apply(e,t){t=t||new At;const i=e.x,s=e.y;return t.x=this.a*i+this.c*s+this.tx,t.y=this.b*i+this.d*s+this.ty,t}applyInverse(e,t){t=t||new At;const i=1/(this.a*this.d+this.c*-this.b),s=e.x,r=e.y;return t.x=this.d*i*s+-this.c*i*r+(this.ty*this.c-this.tx*this.d)*i,t.y=this.a*i*r+-this.b*i*s+(-this.ty*this.a+this.tx*this.b)*i,t}translate(e,t){return this.tx+=e,this.ty+=t,this}scale(e,t){return this.a*=e,this.d*=t,this.c*=e,this.b*=t,this.tx*=e,this.ty*=t,this}rotate(e){const t=Math.cos(e),i=Math.sin(e),s=this.a,r=this.c,o=this.tx;return this.a=s*t-this.b*i,this.b=s*i+this.b*t,this.c=r*t-this.d*i,this.d=r*i+this.d*t,this.tx=o*t-this.ty*i,this.ty=o*i+this.ty*t,this}append(e){const t=this.a,i=this.b,s=this.c,r=this.d;return this.a=e.a*t+e.b*s,this.b=e.a*i+e.b*r,this.c=e.c*t+e.d*s,this.d=e.c*i+e.d*r,this.tx=e.tx*t+e.ty*s+this.tx,this.ty=e.tx*i+e.ty*r+this.ty,this}setTransform(e,t,i,s,r,o,a,c,l){return this.a=Math.cos(a+l)*r,this.b=Math.sin(a+l)*r,this.c=-Math.sin(a-c)*o,this.d=Math.cos(a-c)*o,this.tx=e-(i*this.a+s*this.c),this.ty=t-(i*this.b+s*this.d),this}prepend(e){const t=this.tx;if(e.a!==1||e.b!==0||e.c!==0||e.d!==1){const i=this.a,s=this.c;this.a=i*e.a+this.b*e.c,this.b=i*e.b+this.b*e.d,this.c=s*e.a+this.d*e.c,this.d=s*e.b+this.d*e.d}return this.tx=t*e.a+this.ty*e.c+e.tx,this.ty=t*e.b+this.ty*e.d+e.ty,this}decompose(e){const t=this.a,i=this.b,s=this.c,r=this.d,o=e.pivot,a=-Math.atan2(-s,r),c=Math.atan2(i,t),l=Math.abs(a+c);return l<1e-5||Math.abs(Wd-l)<1e-5?(e.rotation=c,e.skew.x=e.skew.y=0):(e.rotation=0,e.skew.x=a,e.skew.y=c),e.scale.x=Math.sqrt(t*t+i*i),e.scale.y=Math.sqrt(s*s+r*r),e.position.x=this.tx+(o.x*t+o.y*s),e.position.y=this.ty+(o.x*i+o.y*r),e}invert(){const e=this.a,t=this.b,i=this.c,s=this.d,r=this.tx,o=e*s-t*i;return this.a=s/o,this.b=-t/o,this.c=-i/o,this.d=e/o,this.tx=(i*this.ty-s*r)/o,this.ty=-(e*this.ty-t*r)/o,this}identity(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this}clone(){const e=new Bt;return e.a=this.a,e.b=this.b,e.c=this.c,e.d=this.d,e.tx=this.tx,e.ty=this.ty,e}copyTo(e){return e.a=this.a,e.b=this.b,e.c=this.c,e.d=this.d,e.tx=this.tx,e.ty=this.ty,e}copyFrom(e){return this.a=e.a,this.b=e.b,this.c=e.c,this.d=e.d,this.tx=e.tx,this.ty=e.ty,this}static get IDENTITY(){return new Bt}static get TEMP_MATRIX(){return new Bt}}Bt.prototype.toString=function(){return`[@pixi/math:Matrix a=${this.a} b=${this.b} c=${this.c} d=${this.d} tx=${this.tx} ty=${this.ty}]`};const go=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],vo=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],bo=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],yo=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],jp=[],pw=[],Nc=Math.sign;function eI(){for(let n=0;n<16;n++){const e=[];jp.push(e);for(let t=0;t<16;t++){const i=Nc(go[n]*go[t]+bo[n]*vo[t]),s=Nc(vo[n]*go[t]+yo[n]*vo[t]),r=Nc(go[n]*bo[t]+bo[n]*yo[t]),o=Nc(vo[n]*bo[t]+yo[n]*yo[t]);for(let a=0;a<16;a++)if(go[a]===i&&vo[a]===s&&bo[a]===r&&yo[a]===o){e.push(a);break}}}for(let n=0;n<16;n++){const e=new Bt;e.set(go[n],vo[n],bo[n],yo[n],0,0),pw.push(e)}}eI();const si={E:0,SE:1,S:2,SW:3,W:4,NW:5,N:6,NE:7,MIRROR_VERTICAL:8,MAIN_DIAGONAL:10,MIRROR_HORIZONTAL:12,REVERSE_DIAGONAL:14,uX:n=>go[n],uY:n=>vo[n],vX:n=>bo[n],vY:n=>yo[n],inv:n=>n&8?n&15:-n&7,add:(n,e)=>jp[n][e],sub:(n,e)=>jp[n][si.inv(e)],rotate180:n=>n^4,isVertical:n=>(n&3)===2,byDirection:(n,e)=>Math.abs(n)*2<=Math.abs(e)?e>=0?si.S:si.N:Math.abs(e)*2<=Math.abs(n)?n>0?si.E:si.W:e>0?n>0?si.SE:si.SW:n>0?si.NE:si.NW,matrixAppendRotationInv:(n,e,t=0,i=0)=>{const s=pw[si.inv(e)];s.tx=t,s.ty=i,n.append(s)}};class Js{constructor(e,t,i=0,s=0){this._x=i,this._y=s,this.cb=e,this.scope=t}clone(e=this.cb,t=this.scope){return new Js(e,t,this._x,this._y)}set(e=0,t=e){return(this._x!==e||this._y!==t)&&(this._x=e,this._y=t,this.cb.call(this.scope)),this}copyFrom(e){return(this._x!==e.x||this._y!==e.y)&&(this._x=e.x,this._y=e.y,this.cb.call(this.scope)),this}copyTo(e){return e.set(this._x,this._y),e}equals(e){return e.x===this._x&&e.y===this._y}get x(){return this._x}set x(e){this._x!==e&&(this._x=e,this.cb.call(this.scope))}get y(){return this._y}set y(e){this._y!==e&&(this._y=e,this.cb.call(this.scope))}}Js.prototype.toString=function(){return`[@pixi/math:ObservablePoint x=${this.x} y=${this.y} scope=${this.scope}]`};const Hp=class{constructor(){this.worldTransform=new Bt,this.localTransform=new Bt,this.position=new Js(this.onChange,this,0,0),this.scale=new Js(this.onChange,this,1,1),this.pivot=new Js(this.onChange,this,0,0),this.skew=new Js(this.updateSkew,this,0,0),this._rotation=0,this._cx=1,this._sx=0,this._cy=0,this._sy=1,this._localID=0,this._currentLocalID=0,this._worldID=0,this._parentID=0}onChange(){this._localID++}updateSkew(){this._cx=Math.cos(this._rotation+this.skew.y),this._sx=Math.sin(this._rotation+this.skew.y),this._cy=-Math.sin(this._rotation-this.skew.x),this._sy=Math.cos(this._rotation-this.skew.x),this._localID++}updateLocalTransform(){const n=this.localTransform;this._localID!==this._currentLocalID&&(n.a=this._cx*this.scale.x,n.b=this._sx*this.scale.x,n.c=this._cy*this.scale.y,n.d=this._sy*this.scale.y,n.tx=this.position.x-(this.pivot.x*n.a+this.pivot.y*n.c),n.ty=this.position.y-(this.pivot.x*n.b+this.pivot.y*n.d),this._currentLocalID=this._localID,this._parentID=-1)}updateTransform(n){const e=this.localTransform;if(this._localID!==this._currentLocalID&&(e.a=this._cx*this.scale.x,e.b=this._sx*this.scale.x,e.c=this._cy*this.scale.y,e.d=this._sy*this.scale.y,e.tx=this.position.x-(this.pivot.x*e.a+this.pivot.y*e.c),e.ty=this.position.y-(this.pivot.x*e.b+this.pivot.y*e.d),this._currentLocalID=this._localID,this._parentID=-1),this._parentID!==n._worldID){const t=n.worldTransform,i=this.worldTransform;i.a=e.a*t.a+e.b*t.c,i.b=e.a*t.b+e.b*t.d,i.c=e.c*t.a+e.d*t.c,i.d=e.c*t.b+e.d*t.d,i.tx=e.tx*t.a+e.ty*t.c+t.tx,i.ty=e.tx*t.b+e.ty*t.d+t.ty,this._parentID=n._worldID,this._worldID++}}setFromMatrix(n){n.decompose(this),this._localID++}get rotation(){return this._rotation}set rotation(n){this._rotation!==n&&(this._rotation=n,this.updateSkew())}};Hp.IDENTITY=new Hp;let Tg=Hp;Tg.prototype.toString=function(){return`[@pixi/math:Transform position=(${this.position.x}, ${this.position.y}) rotation=${this.rotation} scale=(${this.scale.x}, ${this.scale.y}) skew=(${this.skew.x}, ${this.skew.y}) ]`};var tI=`varying vec2 vTextureCoord; +else `),t=0;--i){const s=Xp[i];if(s.test&&s.test(n,t))return new s(n,e)}throw new Error("Unrecognized source type to auto-detect Resource")}class Zn{constructor(e){this.items=[],this._name=e,this._aliasCount=0}emit(e,t,i,s,r,o,a,c){if(arguments.length>8)throw new Error("max arguments reached");const{name:l,items:d}=this;this._aliasCount++;for(let u=0,h=d.length;u0&&this.items.length>1&&(this._aliasCount=0,this.items=this.items.slice(0))}add(e){return e[this._name]&&(this.ensureNonAliasedItems(),this.remove(e),this.items.push(e)),this}remove(e){const t=this.items.indexOf(e);return t!==-1&&(this.ensureNonAliasedItems(),this.items.splice(t,1)),this}contains(e){return this.items.includes(e)}removeAll(){return this.ensureNonAliasedItems(),this.items.length=0,this}destroy(){this.removeAll(),this.items.length=0,this._name=""}get empty(){return this.items.length===0}get name(){return this._name}}Object.defineProperties(Zn.prototype,{dispatch:{value:Zn.prototype.emit},run:{value:Zn.prototype.emit}});class Zl{constructor(e=0,t=0){this._width=e,this._height=t,this.destroyed=!1,this.internal=!1,this.onResize=new Zn("setRealSize"),this.onUpdate=new Zn("update"),this.onError=new Zn("onError")}bind(e){this.onResize.add(e),this.onUpdate.add(e),this.onError.add(e),(this._width||this._height)&&this.onResize.emit(this._width,this._height)}unbind(e){this.onResize.remove(e),this.onUpdate.remove(e),this.onError.remove(e)}resize(e,t){(e!==this._width||t!==this._height)&&(this._width=e,this._height=t,this.onResize.emit(e,t))}get valid(){return!!this._width&&!!this._height}update(){this.destroyed||this.onUpdate.emit()}load(){return Promise.resolve(this)}get width(){return this._width}get height(){return this._height}style(e,t,i){return!1}dispose(){}destroy(){this.destroyed||(this.destroyed=!0,this.dispose(),this.onError.removeAll(),this.onError=null,this.onResize.removeAll(),this.onResize=null,this.onUpdate.removeAll(),this.onUpdate=null)}static test(e,t){return!1}}class th extends Zl{constructor(e,t){const{width:i,height:s}=t||{};if(!i||!s)throw new Error("BufferResource width or height invalid");super(i,s),this.data=e,this.unpackAlignment=t.unpackAlignment??4}upload(e,t,i){const s=e.gl;s.pixelStorei(s.UNPACK_ALIGNMENT,this.unpackAlignment),s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.alphaMode===ki.UNPACK);const r=t.realWidth,o=t.realHeight;return i.width===r&&i.height===o?s.texSubImage2D(t.target,0,0,0,r,o,t.format,i.type,this.data):(i.width=r,i.height=o,s.texImage2D(t.target,0,i.internalFormat,r,o,0,t.format,i.type,this.data)),!0}dispose(){this.data=null}static test(e){return e===null||e instanceof Int8Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array}}const HP={scaleMode:Gn.NEAREST,alphaMode:ki.NPM},Yp=class pa extends mc{constructor(e=null,t=null){super(),t=Object.assign({},pa.defaultOptions,t);const{alphaMode:i,mipmap:s,anisotropicLevel:r,scaleMode:o,width:a,height:c,wrapMode:l,format:d,type:u,target:h,resolution:f,resourceOptions:p}=t;e&&!(e instanceof Zl)&&(e=hw(e,p),e.internal=!0),this.resolution=f||Ve.RESOLUTION,this.width=Math.round((a||0)*this.resolution)/this.resolution,this.height=Math.round((c||0)*this.resolution)/this.resolution,this._mipmap=s,this.anisotropicLevel=r,this._wrapMode=l,this._scaleMode=o,this.format=d,this.type=u,this.target=h,this.alphaMode=i,this.uid=Bo(),this.touched=0,this.isPowerOfTwo=!1,this._refreshPOT(),this._glTextures={},this.dirtyId=0,this.dirtyStyleId=0,this.cacheId=null,this.valid=a>0&&c>0,this.textureCacheIds=[],this.destroyed=!1,this.resource=null,this._batchEnabled=0,this._batchLocation=0,this.parentTextureArray=null,this.setResource(e)}get realWidth(){return Math.round(this.width*this.resolution)}get realHeight(){return Math.round(this.height*this.resolution)}get mipmap(){return this._mipmap}set mipmap(e){this._mipmap!==e&&(this._mipmap=e,this.dirtyStyleId++)}get scaleMode(){return this._scaleMode}set scaleMode(e){this._scaleMode!==e&&(this._scaleMode=e,this.dirtyStyleId++)}get wrapMode(){return this._wrapMode}set wrapMode(e){this._wrapMode!==e&&(this._wrapMode=e,this.dirtyStyleId++)}setStyle(e,t){let i;return e!==void 0&&e!==this.scaleMode&&(this.scaleMode=e,i=!0),t!==void 0&&t!==this.mipmap&&(this.mipmap=t,i=!0),i&&this.dirtyStyleId++,this}setSize(e,t,i){return i=i||this.resolution,this.setRealSize(e*i,t*i,i)}setRealSize(e,t,i){return this.resolution=i||this.resolution,this.width=Math.round(e)/this.resolution,this.height=Math.round(t)/this.resolution,this._refreshPOT(),this.update(),this}_refreshPOT(){this.isPowerOfTwo=u0(this.realWidth)&&u0(this.realHeight)}setResolution(e){const t=this.resolution;return t===e?this:(this.resolution=e,this.valid&&(this.width=Math.round(this.width*t)/e,this.height=Math.round(this.height*t)/e,this.emit("update",this)),this._refreshPOT(),this)}setResource(e){if(this.resource===e)return this;if(this.resource)throw new Error("Resource can be set only once");return e.bind(this),this.resource=e,this}update(){this.valid?(this.dirtyId++,this.dirtyStyleId++,this.emit("update",this)):this.width>0&&this.height>0&&(this.valid=!0,this.emit("loaded",this),this.emit("update",this))}onError(e){this.emit("error",this,e)}destroy(){this.resource&&(this.resource.unbind(this),this.resource.internal&&this.resource.destroy(),this.resource=null),this.cacheId&&(delete Sr[this.cacheId],delete as[this.cacheId],this.cacheId=null),this.valid=!1,this.dispose(),pa.removeFromCache(this),this.textureCacheIds=null,this.destroyed=!0,this.emit("destroyed",this),this.removeAllListeners()}dispose(){this.emit("dispose",this)}castToBaseTexture(){return this}static from(e,t,i=Ve.STRICT_TEXTURE_CACHE){const s=typeof e=="string";let r=null;if(s)r=e;else{if(!e._pixiId){const a=(t==null?void 0:t.pixiIdPrefix)||"pixiid";e._pixiId=`${a}_${Bo()}`}r=e._pixiId}let o=Sr[r];if(s&&i&&!o)throw new Error(`The cacheId "${r}" does not exist in BaseTextureCache.`);return o||(o=new pa(e,t),o.cacheId=r,pa.addToCache(o,r)),o}static fromBuffer(e,t,i,s){e=e||new Float32Array(t*i*4);const r=new th(e,{width:t,height:i,...s==null?void 0:s.resourceOptions});let o,a;return e instanceof Float32Array?(o=Pe.RGBA,a=je.FLOAT):e instanceof Int32Array?(o=Pe.RGBA_INTEGER,a=je.INT):e instanceof Uint32Array?(o=Pe.RGBA_INTEGER,a=je.UNSIGNED_INT):e instanceof Int16Array?(o=Pe.RGBA_INTEGER,a=je.SHORT):e instanceof Uint16Array?(o=Pe.RGBA_INTEGER,a=je.UNSIGNED_SHORT):e instanceof Int8Array?(o=Pe.RGBA,a=je.BYTE):(o=Pe.RGBA,a=je.UNSIGNED_BYTE),r.internal=!0,new pa(r,Object.assign({},HP,{type:a,format:o},s))}static addToCache(e,t){t&&(e.textureCacheIds.includes(t)||e.textureCacheIds.push(t),Sr[t]&&Sr[t]!==e&&console.warn(`BaseTexture added to the cache with an id [${t}] that already had an entry`),Sr[t]=e)}static removeFromCache(e){if(typeof e=="string"){const t=Sr[e];if(t){const i=t.textureCacheIds.indexOf(e);return i>-1&&t.textureCacheIds.splice(i,1),delete Sr[e],t}}else if(e!=null&&e.textureCacheIds){for(let t=0;t1){for(let u=0;u(n[n.POLY=0]="POLY",n[n.RECT=1]="RECT",n[n.CIRC=2]="CIRC",n[n.ELIP=3]="ELIP",n[n.RREC=4]="RREC",n))(Ni||{});class At{constructor(e=0,t=0){this.x=0,this.y=0,this.x=e,this.y=t}clone(){return new At(this.x,this.y)}copyFrom(e){return this.set(e.x,e.y),this}copyTo(e){return e.set(this.x,this.y),e}equals(e){return e.x===this.x&&e.y===this.y}set(e=0,t=e){return this.x=e,this.y=t,this}}At.prototype.toString=function(){return`[@pixi/math:Point x=${this.x} y=${this.y}]`};const Oc=[new At,new At,new At,new At];class ht{constructor(e=0,t=0,i=0,s=0){this.x=Number(e),this.y=Number(t),this.width=Number(i),this.height=Number(s),this.type=Ni.RECT}get left(){return this.x}get right(){return this.x+this.width}get top(){return this.y}get bottom(){return this.y+this.height}static get EMPTY(){return new ht(0,0,0,0)}clone(){return new ht(this.x,this.y,this.width,this.height)}copyFrom(e){return this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height,this}copyTo(e){return e.x=this.x,e.y=this.y,e.width=this.width,e.height=this.height,e}contains(e,t){return this.width<=0||this.height<=0?!1:e>=this.x&&e=this.y&&te.right?e.right:this.right)<=E)return!1;const _=this.ye.bottom?e.bottom:this.bottom)>_}const i=this.left,s=this.right,r=this.top,o=this.bottom;if(s<=i||o<=r)return!1;const a=Oc[0].set(e.left,e.top),c=Oc[1].set(e.left,e.bottom),l=Oc[2].set(e.right,e.top),d=Oc[3].set(e.right,e.bottom);if(l.x<=a.x||c.y<=a.y)return!1;const u=Math.sign(t.a*t.d-t.b*t.c);if(u===0||(t.apply(a,a),t.apply(c,c),t.apply(l,l),t.apply(d,d),Math.max(a.x,c.x,l.x,d.x)<=i||Math.min(a.x,c.x,l.x,d.x)>=s||Math.max(a.y,c.y,l.y,d.y)<=r||Math.min(a.y,c.y,l.y,d.y)>=o))return!1;const h=u*(c.y-a.y),f=u*(a.x-c.x),p=h*i+f*r,m=h*s+f*r,g=h*i+f*o,v=h*s+f*o;if(Math.max(p,m,g,v)<=h*a.x+f*a.y||Math.min(p,m,g,v)>=h*d.x+f*d.y)return!1;const y=u*(a.y-l.y),b=u*(l.x-a.x),w=y*i+b*r,C=y*s+b*r,T=y*i+b*o,S=y*s+b*o;return!(Math.max(w,C,T,S)<=y*a.x+b*a.y||Math.min(w,C,T,S)>=y*d.x+b*d.y)}pad(e=0,t=e){return this.x-=e,this.y-=t,this.width+=e*2,this.height+=t*2,this}fit(e){const t=Math.max(this.x,e.x),i=Math.min(this.x+this.width,e.x+e.width),s=Math.max(this.y,e.y),r=Math.min(this.y+this.height,e.y+e.height);return this.x=t,this.width=Math.max(i-t,0),this.y=s,this.height=Math.max(r-s,0),this}ceil(e=1,t=.001){const i=Math.ceil((this.x+this.width-t)*e)/e,s=Math.ceil((this.y+this.height-t)*e)/e;return this.x=Math.floor((this.x+t)*e)/e,this.y=Math.floor((this.y+t)*e)/e,this.width=i-this.x,this.height=s-this.y,this}enlarge(e){const t=Math.min(this.x,e.x),i=Math.max(this.x+this.width,e.x+e.width),s=Math.min(this.y,e.y),r=Math.max(this.y+this.height,e.y+e.height);return this.x=t,this.width=i-t,this.y=s,this.height=r-s,this}}ht.prototype.toString=function(){return`[@pixi/math:Rectangle x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`};class ih{constructor(e=0,t=0,i=0){this.x=e,this.y=t,this.radius=i,this.type=Ni.CIRC}clone(){return new ih(this.x,this.y,this.radius)}contains(e,t){if(this.radius<=0)return!1;const i=this.radius*this.radius;let s=this.x-e,r=this.y-t;return s*=s,r*=r,s+r<=i}getBounds(){return new ht(this.x-this.radius,this.y-this.radius,this.radius*2,this.radius*2)}}ih.prototype.toString=function(){return`[@pixi/math:Circle x=${this.x} y=${this.y} radius=${this.radius}]`};class nh{constructor(e=0,t=0,i=0,s=0){this.x=e,this.y=t,this.width=i,this.height=s,this.type=Ni.ELIP}clone(){return new nh(this.x,this.y,this.width,this.height)}contains(e,t){if(this.width<=0||this.height<=0)return!1;let i=(e-this.x)/this.width,s=(t-this.y)/this.height;return i*=i,s*=s,i+s<=1}getBounds(){return new ht(this.x-this.width,this.y-this.height,this.width,this.height)}}nh.prototype.toString=function(){return`[@pixi/math:Ellipse x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`};class Lo{constructor(...e){let t=Array.isArray(e[0])?e[0]:e;if(typeof t[0]!="number"){const i=[];for(let s=0,r=t.length;st!=d>t&&e<(l-a)*((t-c)/(d-c))+a&&(i=!i)}return i}}Lo.prototype.toString=function(){return`[@pixi/math:PolygoncloseStroke=${this.closeStroke}points=${this.points.reduce((n,e)=>`${n}, ${e}`,"")}]`};class sh{constructor(e=0,t=0,i=0,s=0,r=20){this.x=e,this.y=t,this.width=i,this.height=s,this.radius=r,this.type=Ni.RREC}clone(){return new sh(this.x,this.y,this.width,this.height,this.radius)}contains(e,t){if(this.width<=0||this.height<=0)return!1;if(e>=this.x&&e<=this.x+this.width&&t>=this.y&&t<=this.y+this.height){const i=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(t>=this.y+i&&t<=this.y+this.height-i||e>=this.x+i&&e<=this.x+this.width-i)return!0;let s=e-(this.x+i),r=t-(this.y+i);const o=i*i;if(s*s+r*r<=o||(s=e-(this.x+this.width-i),s*s+r*r<=o)||(r=t-(this.y+this.height-i),s*s+r*r<=o)||(s=e-(this.x+i),s*s+r*r<=o))return!0}return!1}}sh.prototype.toString=function(){return`[@pixi/math:RoundedRectangle x=${this.x} y=${this.y}width=${this.width} height=${this.height} radius=${this.radius}]`};class Bt{constructor(e=1,t=0,i=0,s=1,r=0,o=0){this.array=null,this.a=e,this.b=t,this.c=i,this.d=s,this.tx=r,this.ty=o}fromArray(e){this.a=e[0],this.b=e[1],this.c=e[3],this.d=e[4],this.tx=e[2],this.ty=e[5]}set(e,t,i,s,r,o){return this.a=e,this.b=t,this.c=i,this.d=s,this.tx=r,this.ty=o,this}toArray(e,t){this.array||(this.array=new Float32Array(9));const i=t||this.array;return e?(i[0]=this.a,i[1]=this.b,i[2]=0,i[3]=this.c,i[4]=this.d,i[5]=0,i[6]=this.tx,i[7]=this.ty,i[8]=1):(i[0]=this.a,i[1]=this.c,i[2]=this.tx,i[3]=this.b,i[4]=this.d,i[5]=this.ty,i[6]=0,i[7]=0,i[8]=1),i}apply(e,t){t=t||new At;const i=e.x,s=e.y;return t.x=this.a*i+this.c*s+this.tx,t.y=this.b*i+this.d*s+this.ty,t}applyInverse(e,t){t=t||new At;const i=1/(this.a*this.d+this.c*-this.b),s=e.x,r=e.y;return t.x=this.d*i*s+-this.c*i*r+(this.ty*this.c-this.tx*this.d)*i,t.y=this.a*i*r+-this.b*i*s+(-this.ty*this.a+this.tx*this.b)*i,t}translate(e,t){return this.tx+=e,this.ty+=t,this}scale(e,t){return this.a*=e,this.d*=t,this.c*=e,this.b*=t,this.tx*=e,this.ty*=t,this}rotate(e){const t=Math.cos(e),i=Math.sin(e),s=this.a,r=this.c,o=this.tx;return this.a=s*t-this.b*i,this.b=s*i+this.b*t,this.c=r*t-this.d*i,this.d=r*i+this.d*t,this.tx=o*t-this.ty*i,this.ty=o*i+this.ty*t,this}append(e){const t=this.a,i=this.b,s=this.c,r=this.d;return this.a=e.a*t+e.b*s,this.b=e.a*i+e.b*r,this.c=e.c*t+e.d*s,this.d=e.c*i+e.d*r,this.tx=e.tx*t+e.ty*s+this.tx,this.ty=e.tx*i+e.ty*r+this.ty,this}setTransform(e,t,i,s,r,o,a,c,l){return this.a=Math.cos(a+l)*r,this.b=Math.sin(a+l)*r,this.c=-Math.sin(a-c)*o,this.d=Math.cos(a-c)*o,this.tx=e-(i*this.a+s*this.c),this.ty=t-(i*this.b+s*this.d),this}prepend(e){const t=this.tx;if(e.a!==1||e.b!==0||e.c!==0||e.d!==1){const i=this.a,s=this.c;this.a=i*e.a+this.b*e.c,this.b=i*e.b+this.b*e.d,this.c=s*e.a+this.d*e.c,this.d=s*e.b+this.d*e.d}return this.tx=t*e.a+this.ty*e.c+e.tx,this.ty=t*e.b+this.ty*e.d+e.ty,this}decompose(e){const t=this.a,i=this.b,s=this.c,r=this.d,o=e.pivot,a=-Math.atan2(-s,r),c=Math.atan2(i,t),l=Math.abs(a+c);return l<1e-5||Math.abs(Wd-l)<1e-5?(e.rotation=c,e.skew.x=e.skew.y=0):(e.rotation=0,e.skew.x=a,e.skew.y=c),e.scale.x=Math.sqrt(t*t+i*i),e.scale.y=Math.sqrt(s*s+r*r),e.position.x=this.tx+(o.x*t+o.y*s),e.position.y=this.ty+(o.x*i+o.y*r),e}invert(){const e=this.a,t=this.b,i=this.c,s=this.d,r=this.tx,o=e*s-t*i;return this.a=s/o,this.b=-t/o,this.c=-i/o,this.d=e/o,this.tx=(i*this.ty-s*r)/o,this.ty=-(e*this.ty-t*r)/o,this}identity(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this}clone(){const e=new Bt;return e.a=this.a,e.b=this.b,e.c=this.c,e.d=this.d,e.tx=this.tx,e.ty=this.ty,e}copyTo(e){return e.a=this.a,e.b=this.b,e.c=this.c,e.d=this.d,e.tx=this.tx,e.ty=this.ty,e}copyFrom(e){return this.a=e.a,this.b=e.b,this.c=e.c,this.d=e.d,this.tx=e.tx,this.ty=e.ty,this}static get IDENTITY(){return new Bt}static get TEMP_MATRIX(){return new Bt}}Bt.prototype.toString=function(){return`[@pixi/math:Matrix a=${this.a} b=${this.b} c=${this.c} d=${this.d} tx=${this.tx} ty=${this.ty}]`};const go=[1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1,0,1],vo=[0,1,1,1,0,-1,-1,-1,0,1,1,1,0,-1,-1,-1],bo=[0,-1,-1,-1,0,1,1,1,0,1,1,1,0,-1,-1,-1],yo=[1,1,0,-1,-1,-1,0,1,-1,-1,0,1,1,1,0,-1],jp=[],pw=[],Nc=Math.sign;function eI(){for(let n=0;n<16;n++){const e=[];jp.push(e);for(let t=0;t<16;t++){const i=Nc(go[n]*go[t]+bo[n]*vo[t]),s=Nc(vo[n]*go[t]+yo[n]*vo[t]),r=Nc(go[n]*bo[t]+bo[n]*yo[t]),o=Nc(vo[n]*bo[t]+yo[n]*yo[t]);for(let a=0;a<16;a++)if(go[a]===i&&vo[a]===s&&bo[a]===r&&yo[a]===o){e.push(a);break}}}for(let n=0;n<16;n++){const e=new Bt;e.set(go[n],vo[n],bo[n],yo[n],0,0),pw.push(e)}}eI();const si={E:0,SE:1,S:2,SW:3,W:4,NW:5,N:6,NE:7,MIRROR_VERTICAL:8,MAIN_DIAGONAL:10,MIRROR_HORIZONTAL:12,REVERSE_DIAGONAL:14,uX:n=>go[n],uY:n=>vo[n],vX:n=>bo[n],vY:n=>yo[n],inv:n=>n&8?n&15:-n&7,add:(n,e)=>jp[n][e],sub:(n,e)=>jp[n][si.inv(e)],rotate180:n=>n^4,isVertical:n=>(n&3)===2,byDirection:(n,e)=>Math.abs(n)*2<=Math.abs(e)?e>=0?si.S:si.N:Math.abs(e)*2<=Math.abs(n)?n>0?si.E:si.W:e>0?n>0?si.SE:si.SW:n>0?si.NE:si.NW,matrixAppendRotationInv:(n,e,t=0,i=0)=>{const s=pw[si.inv(e)];s.tx=t,s.ty=i,n.append(s)}};class Js{constructor(e,t,i=0,s=0){this._x=i,this._y=s,this.cb=e,this.scope=t}clone(e=this.cb,t=this.scope){return new Js(e,t,this._x,this._y)}set(e=0,t=e){return(this._x!==e||this._y!==t)&&(this._x=e,this._y=t,this.cb.call(this.scope)),this}copyFrom(e){return(this._x!==e.x||this._y!==e.y)&&(this._x=e.x,this._y=e.y,this.cb.call(this.scope)),this}copyTo(e){return e.set(this._x,this._y),e}equals(e){return e.x===this._x&&e.y===this._y}get x(){return this._x}set x(e){this._x!==e&&(this._x=e,this.cb.call(this.scope))}get y(){return this._y}set y(e){this._y!==e&&(this._y=e,this.cb.call(this.scope))}}Js.prototype.toString=function(){return`[@pixi/math:ObservablePoint x=${this.x} y=${this.y} scope=${this.scope}]`};const Hp=class{constructor(){this.worldTransform=new Bt,this.localTransform=new Bt,this.position=new Js(this.onChange,this,0,0),this.scale=new Js(this.onChange,this,1,1),this.pivot=new Js(this.onChange,this,0,0),this.skew=new Js(this.updateSkew,this,0,0),this._rotation=0,this._cx=1,this._sx=0,this._cy=0,this._sy=1,this._localID=0,this._currentLocalID=0,this._worldID=0,this._parentID=0}onChange(){this._localID++}updateSkew(){this._cx=Math.cos(this._rotation+this.skew.y),this._sx=Math.sin(this._rotation+this.skew.y),this._cy=-Math.sin(this._rotation-this.skew.x),this._sy=Math.cos(this._rotation-this.skew.x),this._localID++}updateLocalTransform(){const n=this.localTransform;this._localID!==this._currentLocalID&&(n.a=this._cx*this.scale.x,n.b=this._sx*this.scale.x,n.c=this._cy*this.scale.y,n.d=this._sy*this.scale.y,n.tx=this.position.x-(this.pivot.x*n.a+this.pivot.y*n.c),n.ty=this.position.y-(this.pivot.x*n.b+this.pivot.y*n.d),this._currentLocalID=this._localID,this._parentID=-1)}updateTransform(n){const e=this.localTransform;if(this._localID!==this._currentLocalID&&(e.a=this._cx*this.scale.x,e.b=this._sx*this.scale.x,e.c=this._cy*this.scale.y,e.d=this._sy*this.scale.y,e.tx=this.position.x-(this.pivot.x*e.a+this.pivot.y*e.c),e.ty=this.position.y-(this.pivot.x*e.b+this.pivot.y*e.d),this._currentLocalID=this._localID,this._parentID=-1),this._parentID!==n._worldID){const t=n.worldTransform,i=this.worldTransform;i.a=e.a*t.a+e.b*t.c,i.b=e.a*t.b+e.b*t.d,i.c=e.c*t.a+e.d*t.c,i.d=e.c*t.b+e.d*t.d,i.tx=e.tx*t.a+e.ty*t.c+t.tx,i.ty=e.tx*t.b+e.ty*t.d+t.ty,this._parentID=n._worldID,this._worldID++}}setFromMatrix(n){n.decompose(this),this._localID++}get rotation(){return this._rotation}set rotation(n){this._rotation!==n&&(this._rotation=n,this.updateSkew())}};Hp.IDENTITY=new Hp;let Tg=Hp;Tg.prototype.toString=function(){return`[@pixi/math:Transform position=(${this.position.x}, ${this.position.y}) rotation=${this.rotation} scale=(${this.scale.x}, ${this.scale.y}) skew=(${this.skew.x}, ${this.skew.y}) ]`};var tI=`varying vec2 vTextureCoord; uniform sampler2D uSampler; @@ -545,7 +545,7 @@ void main(void) gl_Position = filterVertexPosition(); vTextureCoord = filterTextureCoord(); } -`;const QI=JI,zw=ZI;class jw{constructor(e){this.renderer=e}contextChange(e){let t;if(this.renderer.context.webGLVersion===1){const i=e.getParameter(e.FRAMEBUFFER_BINDING);e.bindFramebuffer(e.FRAMEBUFFER,null),t=e.getParameter(e.SAMPLES),e.bindFramebuffer(e.FRAMEBUFFER,i)}else{const i=e.getParameter(e.DRAW_FRAMEBUFFER_BINDING);e.bindFramebuffer(e.DRAW_FRAMEBUFFER,null),t=e.getParameter(e.SAMPLES),e.bindFramebuffer(e.DRAW_FRAMEBUFFER,i)}t>=yi.HIGH?this.multisample=yi.HIGH:t>=yi.MEDIUM?this.multisample=yi.MEDIUM:t>=yi.LOW?this.multisample=yi.LOW:this.multisample=yi.NONE}destroy(){}}jw.extension={type:Oe.RendererSystem,name:"_multisample"};He.add(jw);class ek{constructor(e){this.buffer=e||null,this.updateID=-1,this.byteLength=-1,this.refCount=0}}class Hw{constructor(e){this.renderer=e,this.managedBuffers={},this.boundBufferBases={}}destroy(){this.renderer=null}contextChange(){this.disposeAll(!0),this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID}bind(e){const{gl:t,CONTEXT_UID:i}=this,s=e._glBuffers[i]||this.createGLBuffer(e);t.bindBuffer(e.type,s.buffer)}unbind(e){const{gl:t}=this;t.bindBuffer(e,null)}bindBufferBase(e,t){const{gl:i,CONTEXT_UID:s}=this;if(this.boundBufferBases[t]!==e){const r=e._glBuffers[s]||this.createGLBuffer(e);this.boundBufferBases[t]=e,i.bindBufferBase(i.UNIFORM_BUFFER,t,r.buffer)}}bindBufferRange(e,t,i){const{gl:s,CONTEXT_UID:r}=this;i=i||0;const o=e._glBuffers[r]||this.createGLBuffer(e);s.bindBufferRange(s.UNIFORM_BUFFER,t||0,o.buffer,i*256,256)}update(e){const{gl:t,CONTEXT_UID:i}=this,s=e._glBuffers[i]||this.createGLBuffer(e);if(e._updateID!==s.updateID)if(s.updateID=e._updateID,t.bindBuffer(e.type,s.buffer),s.byteLength>=e.data.byteLength)t.bufferSubData(e.type,0,e.data);else{const r=e.static?t.STATIC_DRAW:t.DYNAMIC_DRAW;s.byteLength=e.data.byteLength,t.bufferData(e.type,e.data,r)}}dispose(e,t){if(!this.managedBuffers[e.id])return;delete this.managedBuffers[e.id];const i=e._glBuffers[this.CONTEXT_UID],s=this.gl;e.disposeRunner.remove(this),i&&(t||s.deleteBuffer(i.buffer),delete e._glBuffers[this.CONTEXT_UID])}disposeAll(e){const t=Object.keys(this.managedBuffers);for(let i=0;it.resource).filter(t=>t).map(t=>t.load());return this._load=Promise.all(e).then(()=>{const{realWidth:t,realHeight:i}=this.items[0];return this.resize(t,i),this.update(),Promise.resolve(this)}),this._load}}class tk extends Ww{constructor(e,t){const{width:i,height:s}=t||{};let r,o;Array.isArray(e)?(r=e,o=e.length):o=e,super(o,{width:i,height:s}),r&&this.initFromArray(r,t)}addBaseTextureAt(e,t){if(e.resource)this.addResourceAt(e.resource,t);else throw new Error("ArrayResource does not support RenderTexture");return this}bind(e){super.bind(e),e.target=Pa.TEXTURE_2D_ARRAY}upload(e,t,i){const{length:s,itemDirtyIds:r,items:o}=this,{gl:a}=e;i.dirtyId<0&&a.texImage3D(a.TEXTURE_2D_ARRAY,0,i.internalFormat,this._width,this._height,s,0,t.format,i.type,null);for(let c=0;c0)if(e.resource)this.addResourceAt(e.resource,t);else throw new Error("CubeResource does not support copying of renderTexture.");else e.target=Pa.TEXTURE_CUBE_MAP_POSITIVE_X+t,e.parentTextureArray=this.baseTexture,this.items[t]=e;return e.valid&&!this.valid&&this.resize(e.realWidth,e.realHeight),this.items[t]=e,this}upload(e,t,i){const s=this.itemDirtyIds;for(let r=0;r{if(this.url===null){e(this);return}try{const i=await Ve.ADAPTER.fetch(this.url,{mode:this.crossOrigin?"cors":"no-cors"});if(this.destroyed)return;const s=await i.blob();if(this.destroyed)return;const r=await createImageBitmap(s,{premultiplyAlpha:this.alphaMode===null||this.alphaMode===ki.UNPACK?"premultiply":"none"});if(this.destroyed){r.close();return}this.source=r,this.update(),e(this)}catch(i){if(this.destroyed)return;t(i),this.onError.emit(i)}}),this._load)}upload(e,t,i){return this.source instanceof ImageBitmap?(typeof this.alphaMode=="number"&&(t.alphaMode=this.alphaMode),super.upload(e,t,i)):(this.load(),!1)}dispose(){this.ownsImageBitmap&&this.source instanceof ImageBitmap&&this.source.close(),super.dispose(),this._load=null}static test(e){return!!globalThis.createImageBitmap&&typeof ImageBitmap<"u"&&(typeof e=="string"||e instanceof ImageBitmap)}static get EMPTY(){return xa._EMPTY=xa._EMPTY??Ve.ADAPTER.createCanvas(0,0),xa._EMPTY}}const Qp=class Cd extends pr{constructor(e,t){t=t||{},super(Ve.ADAPTER.createCanvas()),this._width=0,this._height=0,this.svg=e,this.scale=t.scale||1,this._overrideWidth=t.width,this._overrideHeight=t.height,this._resolve=null,this._crossorigin=t.crossorigin,this._load=null,t.autoLoad!==!1&&this.load()}load(){return this._load?this._load:(this._load=new Promise(e=>{if(this._resolve=()=>{this.update(),e(this)},Cd.SVG_XML.test(this.svg.trim())){if(!btoa)throw new Error("Your browser doesn't support base64 conversions.");this.svg=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(this.svg)))}`}this._loadSvg()}),this._load)}_loadSvg(){const e=new Image;pr.crossOrigin(e,this.svg,this._crossorigin),e.src=this.svg,e.onerror=t=>{this._resolve&&(e.onerror=null,this.onError.emit(t))},e.onload=()=>{if(!this._resolve)return;const t=e.width,i=e.height;if(!t||!i)throw new Error("The SVG image must have width and height defined (in pixels), canvas API needs them.");let s=t*this.scale,r=i*this.scale;(this._overrideWidth||this._overrideHeight)&&(s=this._overrideWidth||this._overrideHeight/i*t,r=this._overrideHeight||this._overrideWidth/t*i),s=Math.round(s),r=Math.round(r);const o=this.source;o.width=s,o.height=r,o._pixiId=`canvas_${Bo()}`,o.getContext("2d").drawImage(e,0,0,t,i,0,0,s,r),this._resolve(),this._resolve=null}}static getSize(e){const t=Cd.SVG_SIZE.exec(e),i={};return t&&(i[t[1]]=Math.round(parseFloat(t[3])),i[t[5]]=Math.round(parseFloat(t[7]))),i}dispose(){super.dispose(),this._resolve=null,this._crossorigin=null}static test(e,t){return t==="svg"||typeof e=="string"&&e.startsWith("data:image/svg+xml")||typeof e=="string"&&Cd.SVG_XML.test(e)}};Qp.SVG_XML=/^(<\?xml[^?]+\?>)?\s*()]*-->)?\s*\]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i;let em=Qp;class sk extends pr{constructor(e){super(e)}static test(e){return!!globalThis.VideoFrame&&e instanceof globalThis.VideoFrame}}const tm=class im extends pr{constructor(e,t){if(t=t||{},!(e instanceof HTMLVideoElement)){const i=document.createElement("video");t.autoLoad!==!1&&i.setAttribute("preload","auto"),t.playsinline!==!1&&(i.setAttribute("webkit-playsinline",""),i.setAttribute("playsinline","")),t.muted===!0&&(i.setAttribute("muted",""),i.muted=!0),t.loop===!0&&i.setAttribute("loop",""),t.autoPlay!==!1&&i.setAttribute("autoplay",""),typeof e=="string"&&(e=[e]);const s=e[0].src||e[0];pr.crossOrigin(i,s,t.crossorigin);for(let r=0;r{this.valid?t(this):(this._resolve=t,this._reject=i,e.load())}),this._load}_onError(e){this.source.removeEventListener("error",this._onError,!0),this.onError.emit(e),this._reject&&(this._reject(e),this._reject=null,this._resolve=null)}_isSourcePlaying(){const e=this.source;return!e.paused&&!e.ended}_isSourceReady(){return this.source.readyState>2}_onPlayStart(){this.valid||this._onCanPlay(),this._configureAutoUpdate()}_onPlayStop(){this._configureAutoUpdate()}_onSeeked(){this._autoUpdate&&!this._isSourcePlaying()&&(this._msToNextUpdate=0,this.update(),this._msToNextUpdate=0)}_onCanPlay(){const e=this.source;e.removeEventListener("canplay",this._onCanPlay),e.removeEventListener("canplaythrough",this._onCanPlay);const t=this.valid;this._msToNextUpdate=0,this.update(),this._msToNextUpdate=0,!t&&this._resolve&&(this._resolve(this),this._resolve=null,this._reject=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&e.play()}dispose(){this._configureAutoUpdate();const e=this.source;e&&(e.removeEventListener("play",this._onPlayStart),e.removeEventListener("pause",this._onPlayStop),e.removeEventListener("seeked",this._onSeeked),e.removeEventListener("canplay",this._onCanPlay),e.removeEventListener("canplaythrough",this._onCanPlay),e.removeEventListener("error",this._onError,!0),e.pause(),e.src="",e.load()),super.dispose()}get autoUpdate(){return this._autoUpdate}set autoUpdate(e){e!==this._autoUpdate&&(this._autoUpdate=e,this._configureAutoUpdate())}get updateFPS(){return this._updateFPS}set updateFPS(e){e!==this._updateFPS&&(this._updateFPS=e,this._configureAutoUpdate())}_configureAutoUpdate(){this._autoUpdate&&this._isSourcePlaying()?!this._updateFPS&&this.source.requestVideoFrameCallback?(this._isConnectedToTicker&&(nn.shared.remove(this.update,this),this._isConnectedToTicker=!1,this._msToNextUpdate=0),this._videoFrameRequestCallbackHandle===null&&(this._videoFrameRequestCallbackHandle=this.source.requestVideoFrameCallback(this._videoFrameRequestCallback))):(this._videoFrameRequestCallbackHandle!==null&&(this.source.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),this._videoFrameRequestCallbackHandle=null),this._isConnectedToTicker||(nn.shared.add(this.update,this),this._isConnectedToTicker=!0,this._msToNextUpdate=0)):(this._videoFrameRequestCallbackHandle!==null&&(this.source.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),this._videoFrameRequestCallbackHandle=null),this._isConnectedToTicker&&(nn.shared.remove(this.update,this),this._isConnectedToTicker=!1,this._msToNextUpdate=0))}static test(e,t){return globalThis.HTMLVideoElement&&e instanceof HTMLVideoElement||im.TYPES.includes(t)}};tm.TYPES=["mp4","m4v","webm","ogg","ogv","h264","avi","mov"],tm.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"};let Kw=tm;Xp.push(xa,Sw,ik,Kw,sk,em,th,nk,tk);class Ql{constructor(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.rect=null,this.updateID=-1}isEmpty(){return this.minX>this.maxX||this.minY>this.maxY}clear(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0}getRectangle(e){return this.minX>this.maxX||this.minY>this.maxY?ht.EMPTY:(e=e||new ht(0,0,1,1),e.x=this.minX,e.y=this.minY,e.width=this.maxX-this.minX,e.height=this.maxY-this.minY,e)}addPoint(e){this.minX=Math.min(this.minX,e.x),this.maxX=Math.max(this.maxX,e.x),this.minY=Math.min(this.minY,e.y),this.maxY=Math.max(this.maxY,e.y)}addPointMatrix(e,t){const{a:i,b:s,c:r,d:o,tx:a,ty:c}=e,l=i*t.x+r*t.y+a,d=s*t.x+o*t.y+c;this.minX=Math.min(this.minX,l),this.maxX=Math.max(this.maxX,l),this.minY=Math.min(this.minY,d),this.maxY=Math.max(this.maxY,d)}addQuad(e){let t=this.minX,i=this.minY,s=this.maxX,r=this.maxY,o=e[0],a=e[1];t=os?o:s,r=a>r?a:r,o=e[2],a=e[3],t=os?o:s,r=a>r?a:r,o=e[4],a=e[5],t=os?o:s,r=a>r?a:r,o=e[6],a=e[7],t=os?o:s,r=a>r?a:r,this.minX=t,this.minY=i,this.maxX=s,this.maxY=r}addFrame(e,t,i,s,r){this.addFrameMatrix(e.worldTransform,t,i,s,r)}addFrameMatrix(e,t,i,s,r){const o=e.a,a=e.b,c=e.c,l=e.d,d=e.tx,u=e.ty;let h=this.minX,f=this.minY,p=this.maxX,m=this.maxY,g=o*t+c*i+d,v=a*t+l*i+u;h=gp?g:p,m=v>m?v:m,g=o*s+c*i+d,v=a*s+l*i+u,h=gp?g:p,m=v>m?v:m,g=o*t+c*r+d,v=a*t+l*r+u,h=gp?g:p,m=v>m?v:m,g=o*s+c*r+d,v=a*s+l*r+u,h=gp?g:p,m=v>m?v:m,this.minX=h,this.minY=f,this.maxX=p,this.maxY=m}addVertexData(e,t,i){let s=this.minX,r=this.minY,o=this.maxX,a=this.maxY;for(let c=t;co?l:o,a=d>a?d:a}this.minX=s,this.minY=r,this.maxX=o,this.maxY=a}addVertices(e,t,i,s){this.addVerticesMatrix(e.worldTransform,t,i,s)}addVerticesMatrix(e,t,i,s,r=0,o=r){const a=e.a,c=e.b,l=e.c,d=e.d,u=e.tx,h=e.ty;let f=this.minX,p=this.minY,m=this.maxX,g=this.maxY;for(let v=i;vs?e.maxX:s,this.maxY=e.maxY>r?e.maxY:r}addBoundsMask(e,t){const i=e.minX>t.minX?e.minX:t.minX,s=e.minY>t.minY?e.minY:t.minY,r=e.maxXl?r:l,this.maxY=o>d?o:d}}addBoundsMatrix(e,t){this.addFrameMatrix(t,e.minX,e.minY,e.maxX,e.maxY)}addBoundsArea(e,t){const i=e.minX>t.x?e.minX:t.x,s=e.minY>t.y?e.minY:t.y,r=e.maxXl?r:l,this.maxY=o>d?o:d}}pad(e=0,t=e){this.isEmpty()||(this.minX-=e,this.maxX+=e,this.minY-=t,this.maxY+=t)}addFramePad(e,t,i,s,r,o){e-=r,t-=o,i+=r,s+=o,this.minX=this.minXi?this.maxX:i,this.minY=this.minYs?this.maxY:s}}class ai extends mc{constructor(){super(),this.tempDisplayObjectParent=null,this.transform=new Tg,this.alpha=1,this.visible=!0,this.renderable=!0,this.cullable=!1,this.cullArea=null,this.parent=null,this.worldAlpha=1,this._lastSortedIndex=0,this._zIndex=0,this.filterArea=null,this.filters=null,this._enabledFilters=null,this._bounds=new Ql,this._localBounds=null,this._boundsID=0,this._boundsRect=null,this._localBoundsRect=null,this._mask=null,this._maskRefCount=0,this._destroyed=!1,this.isSprite=!1,this.isMask=!1}static mixin(e){const t=Object.keys(e);for(let i=0;i1)for(let t=0;tthis.children.length)throw new Error(`${e}addChildAt: The index ${t} supplied is out of bounds ${this.children.length}`);return e.parent&&e.parent.removeChild(e),e.parent=this,this.sortDirty=!0,e.transform._parentID=-1,this.children.splice(t,0,e),this._boundsID++,this.onChildrenChange(t),e.emit("added",this),this.emit("childAdded",e,this,t),e}swapChildren(e,t){if(e===t)return;const i=this.getChildIndex(e),s=this.getChildIndex(t);this.children[i]=t,this.children[s]=e,this.onChildrenChange(i=this.children.length)throw new Error(`The index ${t} supplied is out of bounds ${this.children.length}`);const i=this.getChildIndex(e);Ia(this.children,i,1),this.children.splice(t,0,e),this.onChildrenChange(t)}getChildAt(e){if(e<0||e>=this.children.length)throw new Error(`getChildAt: Index (${e}) does not exist.`);return this.children[e]}removeChild(...e){if(e.length>1)for(let t=0;t0&&r<=s){o=this.children.splice(i,r);for(let a=0;a1&&this.children.sort(ak),this.sortDirty=!1}updateTransform(){this.sortableChildren&&this.sortDirty&&this.sortChildren(),this._boundsID++,this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha;for(let e=0,t=this.children.length;e0&&t.height>0))return;let i,s;this.cullArea?(i=this.cullArea,s=this.worldTransform):this._render!==nm.prototype._render&&(i=this.getBounds(!0));const r=e.projection.transform;if(r&&(s?(s=ok.copyFrom(s),s.prepend(r)):s=r),i&&t.intersects(i,s))this._render(e);else if(this.cullArea)return;for(let o=0,a=this.children.length;o=s&&fl.x=r&&fl.y=yi.HIGH?this.multisample=yi.HIGH:t>=yi.MEDIUM?this.multisample=yi.MEDIUM:t>=yi.LOW?this.multisample=yi.LOW:this.multisample=yi.NONE}destroy(){}}jw.extension={type:Oe.RendererSystem,name:"_multisample"};He.add(jw);class ek{constructor(e){this.buffer=e||null,this.updateID=-1,this.byteLength=-1,this.refCount=0}}class Hw{constructor(e){this.renderer=e,this.managedBuffers={},this.boundBufferBases={}}destroy(){this.renderer=null}contextChange(){this.disposeAll(!0),this.gl=this.renderer.gl,this.CONTEXT_UID=this.renderer.CONTEXT_UID}bind(e){const{gl:t,CONTEXT_UID:i}=this,s=e._glBuffers[i]||this.createGLBuffer(e);t.bindBuffer(e.type,s.buffer)}unbind(e){const{gl:t}=this;t.bindBuffer(e,null)}bindBufferBase(e,t){const{gl:i,CONTEXT_UID:s}=this;if(this.boundBufferBases[t]!==e){const r=e._glBuffers[s]||this.createGLBuffer(e);this.boundBufferBases[t]=e,i.bindBufferBase(i.UNIFORM_BUFFER,t,r.buffer)}}bindBufferRange(e,t,i){const{gl:s,CONTEXT_UID:r}=this;i=i||0;const o=e._glBuffers[r]||this.createGLBuffer(e);s.bindBufferRange(s.UNIFORM_BUFFER,t||0,o.buffer,i*256,256)}update(e){const{gl:t,CONTEXT_UID:i}=this,s=e._glBuffers[i]||this.createGLBuffer(e);if(e._updateID!==s.updateID)if(s.updateID=e._updateID,t.bindBuffer(e.type,s.buffer),s.byteLength>=e.data.byteLength)t.bufferSubData(e.type,0,e.data);else{const r=e.static?t.STATIC_DRAW:t.DYNAMIC_DRAW;s.byteLength=e.data.byteLength,t.bufferData(e.type,e.data,r)}}dispose(e,t){if(!this.managedBuffers[e.id])return;delete this.managedBuffers[e.id];const i=e._glBuffers[this.CONTEXT_UID],s=this.gl;e.disposeRunner.remove(this),i&&(t||s.deleteBuffer(i.buffer),delete e._glBuffers[this.CONTEXT_UID])}disposeAll(e){const t=Object.keys(this.managedBuffers);for(let i=0;it.resource).filter(t=>t).map(t=>t.load());return this._load=Promise.all(e).then(()=>{const{realWidth:t,realHeight:i}=this.items[0];return this.resize(t,i),this.update(),Promise.resolve(this)}),this._load}}class tk extends Ww{constructor(e,t){const{width:i,height:s}=t||{};let r,o;Array.isArray(e)?(r=e,o=e.length):o=e,super(o,{width:i,height:s}),r&&this.initFromArray(r,t)}addBaseTextureAt(e,t){if(e.resource)this.addResourceAt(e.resource,t);else throw new Error("ArrayResource does not support RenderTexture");return this}bind(e){super.bind(e),e.target=Pa.TEXTURE_2D_ARRAY}upload(e,t,i){const{length:s,itemDirtyIds:r,items:o}=this,{gl:a}=e;i.dirtyId<0&&a.texImage3D(a.TEXTURE_2D_ARRAY,0,i.internalFormat,this._width,this._height,s,0,t.format,i.type,null);for(let c=0;c0)if(e.resource)this.addResourceAt(e.resource,t);else throw new Error("CubeResource does not support copying of renderTexture.");else e.target=Pa.TEXTURE_CUBE_MAP_POSITIVE_X+t,e.parentTextureArray=this.baseTexture,this.items[t]=e;return e.valid&&!this.valid&&this.resize(e.realWidth,e.realHeight),this.items[t]=e,this}upload(e,t,i){const s=this.itemDirtyIds;for(let r=0;r{if(this.url===null){e(this);return}try{const i=await Ve.ADAPTER.fetch(this.url,{mode:this.crossOrigin?"cors":"no-cors"});if(this.destroyed)return;const s=await i.blob();if(this.destroyed)return;const r=await createImageBitmap(s,{premultiplyAlpha:this.alphaMode===null||this.alphaMode===ki.UNPACK?"premultiply":"none"});if(this.destroyed){r.close();return}this.source=r,this.update(),e(this)}catch(i){if(this.destroyed)return;t(i),this.onError.emit(i)}}),this._load)}upload(e,t,i){return this.source instanceof ImageBitmap?(typeof this.alphaMode=="number"&&(t.alphaMode=this.alphaMode),super.upload(e,t,i)):(this.load(),!1)}dispose(){this.ownsImageBitmap&&this.source instanceof ImageBitmap&&this.source.close(),super.dispose(),this._load=null}static test(e){return!!globalThis.createImageBitmap&&typeof ImageBitmap<"u"&&(typeof e=="string"||e instanceof ImageBitmap)}static get EMPTY(){return xa._EMPTY=xa._EMPTY??Ve.ADAPTER.createCanvas(0,0),xa._EMPTY}}const Qp=class Cd extends pr{constructor(e,t){t=t||{},super(Ve.ADAPTER.createCanvas()),this._width=0,this._height=0,this.svg=e,this.scale=t.scale||1,this._overrideWidth=t.width,this._overrideHeight=t.height,this._resolve=null,this._crossorigin=t.crossorigin,this._load=null,t.autoLoad!==!1&&this.load()}load(){return this._load?this._load:(this._load=new Promise(e=>{if(this._resolve=()=>{this.update(),e(this)},Cd.SVG_XML.test(this.svg.trim())){if(!btoa)throw new Error("Your browser doesn't support base64 conversions.");this.svg=`data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(this.svg)))}`}this._loadSvg()}),this._load)}_loadSvg(){const e=new Image;pr.crossOrigin(e,this.svg,this._crossorigin),e.src=this.svg,e.onerror=t=>{this._resolve&&(e.onerror=null,this.onError.emit(t))},e.onload=()=>{if(!this._resolve)return;const t=e.width,i=e.height;if(!t||!i)throw new Error("The SVG image must have width and height defined (in pixels), canvas API needs them.");let s=t*this.scale,r=i*this.scale;(this._overrideWidth||this._overrideHeight)&&(s=this._overrideWidth||this._overrideHeight/i*t,r=this._overrideHeight||this._overrideWidth/t*i),s=Math.round(s),r=Math.round(r);const o=this.source;o.width=s,o.height=r,o._pixiId=`canvas_${Bo()}`,o.getContext("2d").drawImage(e,0,0,t,i,0,0,s,r),this._resolve(),this._resolve=null}}static getSize(e){const t=Cd.SVG_SIZE.exec(e),i={};return t&&(i[t[1]]=Math.round(parseFloat(t[3])),i[t[5]]=Math.round(parseFloat(t[7]))),i}dispose(){super.dispose(),this._resolve=null,this._crossorigin=null}static test(e,t){return t==="svg"||typeof e=="string"&&e.startsWith("data:image/svg+xml")||typeof e=="string"&&Cd.SVG_XML.test(e)}};Qp.SVG_XML=/^(<\?xml[^?]+\?>)?\s*()]*-->)?\s*\]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*(?:\s(width|height)=('|")(\d*(?:\.\d+)?)(?:px)?('|"))[^>]*>/i;let em=Qp;class sk extends pr{constructor(e){super(e)}static test(e){return!!globalThis.VideoFrame&&e instanceof globalThis.VideoFrame}}const tm=class im extends pr{constructor(e,t){if(t=t||{},!(e instanceof HTMLVideoElement)){const i=document.createElement("video");t.autoLoad!==!1&&i.setAttribute("preload","auto"),t.playsinline!==!1&&(i.setAttribute("webkit-playsinline",""),i.setAttribute("playsinline","")),t.muted===!0&&(i.setAttribute("muted",""),i.muted=!0),t.loop===!0&&i.setAttribute("loop",""),t.autoPlay!==!1&&i.setAttribute("autoplay",""),typeof e=="string"&&(e=[e]);const s=e[0].src||e[0];pr.crossOrigin(i,s,t.crossorigin);for(let r=0;r{this.valid?t(this):(this._resolve=t,this._reject=i,e.load())}),this._load}_onError(e){this.source.removeEventListener("error",this._onError,!0),this.onError.emit(e),this._reject&&(this._reject(e),this._reject=null,this._resolve=null)}_isSourcePlaying(){const e=this.source;return!e.paused&&!e.ended}_isSourceReady(){return this.source.readyState>2}_onPlayStart(){this.valid||this._onCanPlay(),this._configureAutoUpdate()}_onPlayStop(){this._configureAutoUpdate()}_onSeeked(){this._autoUpdate&&!this._isSourcePlaying()&&(this._msToNextUpdate=0,this.update(),this._msToNextUpdate=0)}_onCanPlay(){const e=this.source;e.removeEventListener("canplay",this._onCanPlay),e.removeEventListener("canplaythrough",this._onCanPlay);const t=this.valid;this._msToNextUpdate=0,this.update(),this._msToNextUpdate=0,!t&&this._resolve&&(this._resolve(this),this._resolve=null,this._reject=null),this._isSourcePlaying()?this._onPlayStart():this.autoPlay&&e.play()}dispose(){this._configureAutoUpdate();const e=this.source;e&&(e.removeEventListener("play",this._onPlayStart),e.removeEventListener("pause",this._onPlayStop),e.removeEventListener("seeked",this._onSeeked),e.removeEventListener("canplay",this._onCanPlay),e.removeEventListener("canplaythrough",this._onCanPlay),e.removeEventListener("error",this._onError,!0),e.pause(),e.src="",e.load()),super.dispose()}get autoUpdate(){return this._autoUpdate}set autoUpdate(e){e!==this._autoUpdate&&(this._autoUpdate=e,this._configureAutoUpdate())}get updateFPS(){return this._updateFPS}set updateFPS(e){e!==this._updateFPS&&(this._updateFPS=e,this._configureAutoUpdate())}_configureAutoUpdate(){this._autoUpdate&&this._isSourcePlaying()?!this._updateFPS&&this.source.requestVideoFrameCallback?(this._isConnectedToTicker&&(nn.shared.remove(this.update,this),this._isConnectedToTicker=!1,this._msToNextUpdate=0),this._videoFrameRequestCallbackHandle===null&&(this._videoFrameRequestCallbackHandle=this.source.requestVideoFrameCallback(this._videoFrameRequestCallback))):(this._videoFrameRequestCallbackHandle!==null&&(this.source.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),this._videoFrameRequestCallbackHandle=null),this._isConnectedToTicker||(nn.shared.add(this.update,this),this._isConnectedToTicker=!0,this._msToNextUpdate=0)):(this._videoFrameRequestCallbackHandle!==null&&(this.source.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),this._videoFrameRequestCallbackHandle=null),this._isConnectedToTicker&&(nn.shared.remove(this.update,this),this._isConnectedToTicker=!1,this._msToNextUpdate=0))}static test(e,t){return globalThis.HTMLVideoElement&&e instanceof HTMLVideoElement||im.TYPES.includes(t)}};tm.TYPES=["mp4","m4v","webm","ogg","ogv","h264","avi","mov"],tm.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"};let Kw=tm;Xp.push(xa,Sw,ik,Kw,sk,em,th,nk,tk);class Ql{constructor(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.rect=null,this.updateID=-1}isEmpty(){return this.minX>this.maxX||this.minY>this.maxY}clear(){this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0}getRectangle(e){return this.minX>this.maxX||this.minY>this.maxY?ht.EMPTY:(e=e||new ht(0,0,1,1),e.x=this.minX,e.y=this.minY,e.width=this.maxX-this.minX,e.height=this.maxY-this.minY,e)}addPoint(e){this.minX=Math.min(this.minX,e.x),this.maxX=Math.max(this.maxX,e.x),this.minY=Math.min(this.minY,e.y),this.maxY=Math.max(this.maxY,e.y)}addPointMatrix(e,t){const{a:i,b:s,c:r,d:o,tx:a,ty:c}=e,l=i*t.x+r*t.y+a,d=s*t.x+o*t.y+c;this.minX=Math.min(this.minX,l),this.maxX=Math.max(this.maxX,l),this.minY=Math.min(this.minY,d),this.maxY=Math.max(this.maxY,d)}addQuad(e){let t=this.minX,i=this.minY,s=this.maxX,r=this.maxY,o=e[0],a=e[1];t=os?o:s,r=a>r?a:r,o=e[2],a=e[3],t=os?o:s,r=a>r?a:r,o=e[4],a=e[5],t=os?o:s,r=a>r?a:r,o=e[6],a=e[7],t=os?o:s,r=a>r?a:r,this.minX=t,this.minY=i,this.maxX=s,this.maxY=r}addFrame(e,t,i,s,r){this.addFrameMatrix(e.worldTransform,t,i,s,r)}addFrameMatrix(e,t,i,s,r){const o=e.a,a=e.b,c=e.c,l=e.d,d=e.tx,u=e.ty;let h=this.minX,f=this.minY,p=this.maxX,m=this.maxY,g=o*t+c*i+d,v=a*t+l*i+u;h=gp?g:p,m=v>m?v:m,g=o*s+c*i+d,v=a*s+l*i+u,h=gp?g:p,m=v>m?v:m,g=o*t+c*r+d,v=a*t+l*r+u,h=gp?g:p,m=v>m?v:m,g=o*s+c*r+d,v=a*s+l*r+u,h=gp?g:p,m=v>m?v:m,this.minX=h,this.minY=f,this.maxX=p,this.maxY=m}addVertexData(e,t,i){let s=this.minX,r=this.minY,o=this.maxX,a=this.maxY;for(let c=t;co?l:o,a=d>a?d:a}this.minX=s,this.minY=r,this.maxX=o,this.maxY=a}addVertices(e,t,i,s){this.addVerticesMatrix(e.worldTransform,t,i,s)}addVerticesMatrix(e,t,i,s,r=0,o=r){const a=e.a,c=e.b,l=e.c,d=e.d,u=e.tx,h=e.ty;let f=this.minX,p=this.minY,m=this.maxX,g=this.maxY;for(let v=i;vs?e.maxX:s,this.maxY=e.maxY>r?e.maxY:r}addBoundsMask(e,t){const i=e.minX>t.minX?e.minX:t.minX,s=e.minY>t.minY?e.minY:t.minY,r=e.maxXl?r:l,this.maxY=o>d?o:d}}addBoundsMatrix(e,t){this.addFrameMatrix(t,e.minX,e.minY,e.maxX,e.maxY)}addBoundsArea(e,t){const i=e.minX>t.x?e.minX:t.x,s=e.minY>t.y?e.minY:t.y,r=e.maxXl?r:l,this.maxY=o>d?o:d}}pad(e=0,t=e){this.isEmpty()||(this.minX-=e,this.maxX+=e,this.minY-=t,this.maxY+=t)}addFramePad(e,t,i,s,r,o){e-=r,t-=o,i+=r,s+=o,this.minX=this.minXi?this.maxX:i,this.minY=this.minYs?this.maxY:s}}class ai extends mc{constructor(){super(),this.tempDisplayObjectParent=null,this.transform=new Tg,this.alpha=1,this.visible=!0,this.renderable=!0,this.cullable=!1,this.cullArea=null,this.parent=null,this.worldAlpha=1,this._lastSortedIndex=0,this._zIndex=0,this.filterArea=null,this.filters=null,this._enabledFilters=null,this._bounds=new Ql,this._localBounds=null,this._boundsID=0,this._boundsRect=null,this._localBoundsRect=null,this._mask=null,this._maskRefCount=0,this._destroyed=!1,this.isSprite=!1,this.isMask=!1}static mixin(e){const t=Object.keys(e);for(let i=0;i1)for(let t=0;tthis.children.length)throw new Error(`${e}addChildAt: The index ${t} supplied is out of bounds ${this.children.length}`);return e.parent&&e.parent.removeChild(e),e.parent=this,this.sortDirty=!0,e.transform._parentID=-1,this.children.splice(t,0,e),this._boundsID++,this.onChildrenChange(t),e.emit("added",this),this.emit("childAdded",e,this,t),e}swapChildren(e,t){if(e===t)return;const i=this.getChildIndex(e),s=this.getChildIndex(t);this.children[i]=t,this.children[s]=e,this.onChildrenChange(i=this.children.length)throw new Error(`The index ${t} supplied is out of bounds ${this.children.length}`);const i=this.getChildIndex(e);Ia(this.children,i,1),this.children.splice(t,0,e),this.onChildrenChange(t)}getChildAt(e){if(e<0||e>=this.children.length)throw new Error(`getChildAt: Index (${e}) does not exist.`);return this.children[e]}removeChild(...e){if(e.length>1)for(let t=0;t0&&r<=s){o=this.children.splice(i,r);for(let a=0;a1&&this.children.sort(ak),this.sortDirty=!1}updateTransform(){this.sortableChildren&&this.sortDirty&&this.sortChildren(),this._boundsID++,this.transform.updateTransform(this.parent.transform),this.worldAlpha=this.alpha*this.parent.worldAlpha;for(let e=0,t=this.children.length;e0&&t.height>0))return;let i,s;this.cullArea?(i=this.cullArea,s=this.worldTransform):this._render!==nm.prototype._render&&(i=this.getBounds(!0));const r=e.projection.transform;if(r&&(s?(s=ok.copyFrom(s),s.prepend(r)):s=r),i&&t.intersects(i,s))this._render(e);else if(this.cullArea)return;for(let o=0,a=this.children.length;o=s&&fl.x=r&&fl.y{const{worker:t}=new dm;t.addEventListener("message",i=>{t.terminate(),dm.revokeObjectURL(),e(i.data)})}),this._isImageBitmapSupported)}loadImageBitmap(e){return this._run("loadImageBitmap",[e])}async _initWorkers(){this._initialized||(this._initialized=!0)}getWorker(){Gf===void 0&&(Gf=navigator.hardwareConcurrency||4);let e=this.workerPool.pop();return!e&&this._createdWorkers{this.complete(t.data),this.returnWorker(t.target),this.next()})),e}returnWorker(e){this.workerPool.push(e)}complete(e){e.error!==void 0?this.resolveHash[e.uuid].reject(e.error):this.resolveHash[e.uuid].resolve(e.data),this.resolveHash[e.uuid]=null}async _run(e,t){await this._initWorkers();const i=new Promise((s,r)=>{this.queue.push({id:e,arguments:t,resolve:s,reject:r})});return this.next(),i}next(){if(!this.queue.length)return;const e=this.getWorker();if(!e)return;const t=this.queue.pop(),i=t.id;this.resolveHash[L0]={resolve:t.resolve,reject:t.reject},e.postMessage({data:t.arguments,uuid:L0++,id:i})}}const D0=new aR;function vc(n,e,t){n.resource.internal=!0;const i=new it(n),s=()=>{delete e.promiseCache[t],Co.has(t)&&Co.remove(t)};return i.baseTexture.once("destroyed",()=>{t in e.promiseCache&&(console.warn("[Assets] A BaseTexture managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the BaseTexture."),s())}),i.once("destroyed",()=>{n.destroyed||(console.warn("[Assets] A Texture managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the Texture."),s())}),i}const lR=[".jpeg",".jpg",".png",".webp",".avif"],cR=["image/jpeg","image/png","image/webp","image/avif"];async function dR(n){const e=await Ve.ADAPTER.fetch(n);if(!e.ok)throw new Error(`[loadImageBitmap] Failed to fetch ${n}: ${e.status} ${e.statusText}`);const t=await e.blob();return await createImageBitmap(t)}const oh={name:"loadTextures",extension:{type:Oe.LoadParser,priority:Cn.High},config:{preferWorkers:!0,preferCreateImageBitmap:!0,crossOrigin:"anonymous"},test(n){return el(n,cR)||un(n,lR)},async load(n,e,t){var a;const i=globalThis.createImageBitmap&&this.config.preferCreateImageBitmap;let s;i?this.config.preferWorkers&&await D0.isImageBitmapSupported()?s=await D0.loadImageBitmap(n):s=await dR(n):s=await new Promise((c,l)=>{const d=new Image;d.crossOrigin=this.config.crossOrigin,d.src=n,d.complete?c(d):(d.onload=()=>c(d),d.onerror=u=>l(u))});const r={...e.data};r.resolution??(r.resolution=fr(n)),i&&((a=r.resourceOptions)==null?void 0:a.ownsImageBitmap)===void 0&&(r.resourceOptions={...r.resourceOptions},r.resourceOptions.ownsImageBitmap=!0);const o=new rt(s,r);return o.resource.src=n,vc(o,t,n)},unload(n){n.destroy(!0)}};He.add(oh);const uR=".svg",hR="image/svg+xml",fR={extension:{type:Oe.LoadParser,priority:Cn.High},name:"loadSVG",test(n){return el(n,hR)||un(n,uR)},async testParse(n){return em.test(n)},async parse(n,e,t){var r;const i=new em(n,(r=e==null?void 0:e.data)==null?void 0:r.resourceOptions);await i.load();const s=new rt(i,{resolution:fr(n),...e==null?void 0:e.data});return s.resource.src=e.src,vc(s,t,e.src)},async load(n,e){return(await Ve.ADAPTER.fetch(n)).text()},unload:oh.unload};He.add(fR);const pR=[".mp4",".m4v",".webm",".ogv"],mR=["video/mp4","video/webm","video/ogg"],gR={name:"loadVideo",extension:{type:Oe.LoadParser,priority:Cn.High},config:{defaultAutoPlay:!0,defaultUpdateFPS:0,defaultLoop:!1,defaultMuted:!1,defaultPlaysinline:!0},test(n){return el(n,mR)||un(n,pR)},async load(n,e,t){var o;let i;const s=await(await Ve.ADAPTER.fetch(n)).blob(),r=URL.createObjectURL(s);try{const a={autoPlay:this.config.defaultAutoPlay,updateFPS:this.config.defaultUpdateFPS,loop:this.config.defaultLoop,muted:this.config.defaultMuted,playsinline:this.config.defaultPlaysinline,...(o=e==null?void 0:e.data)==null?void 0:o.resourceOptions,autoLoad:!0},c=new Kw(r,a);await c.load();const l=new rt(c,{alphaMode:await CP(),resolution:fr(n),...e==null?void 0:e.data});l.resource.src=n,i=vc(l,t,n),i.baseTexture.once("destroyed",()=>{URL.revokeObjectURL(r)})}catch(a){throw URL.revokeObjectURL(r),a}return i},unload(n){n.destroy(!0)}};He.add(gR);class vR{constructor(){this._defaultBundleIdentifierOptions={connector:"-",createBundleAssetId:(e,t)=>`${e}${this._bundleIdConnector}${t}`,extractAssetIdFromBundle:(e,t)=>t.replace(`${e}${this._bundleIdConnector}`,"")},this._bundleIdConnector=this._defaultBundleIdentifierOptions.connector,this._createBundleAssetId=this._defaultBundleIdentifierOptions.createBundleAssetId,this._extractAssetIdFromBundle=this._defaultBundleIdentifierOptions.extractAssetIdFromBundle,this._assetMap={},this._preferredOrder=[],this._parsers=[],this._resolverHash={},this._bundles={}}setBundleIdentifier(e){if(this._bundleIdConnector=e.connector??this._bundleIdConnector,this._createBundleAssetId=e.createBundleAssetId??this._createBundleAssetId,this._extractAssetIdFromBundle=e.extractAssetIdFromBundle??this._extractAssetIdFromBundle,this._extractAssetIdFromBundle("foo",this._createBundleAssetId("foo","bar"))!=="bar")throw new Error("[Resolver] GenerateBundleAssetId are not working correctly")}prefer(...e){e.forEach(t=>{this._preferredOrder.push(t),t.priority||(t.priority=Object.keys(t.params))}),this._resolverHash={}}set basePath(e){this._basePath=e}get basePath(){return this._basePath}set rootPath(e){this._rootPath=e}get rootPath(){return this._rootPath}get parsers(){return this._parsers}reset(){this.setBundleIdentifier(this._defaultBundleIdentifierOptions),this._assetMap={},this._preferredOrder=[],this._resolverHash={},this._rootPath=null,this._basePath=null,this._manifest=null,this._bundles={},this._defaultSearchParams=null}setDefaultSearchParams(e){if(typeof e=="string")this._defaultSearchParams=e;else{const t=e;this._defaultSearchParams=Object.keys(t).map(i=>`${encodeURIComponent(i)}=${encodeURIComponent(t[i])}`).join("&")}}getAlias(e){const{alias:t,name:i,src:s,srcs:r}=e;return jn(t||i||s||r,o=>typeof o=="string"?o:Array.isArray(o)?o.map(a=>(a==null?void 0:a.src)??(a==null?void 0:a.srcs)??a):o!=null&&o.src||o!=null&&o.srcs?o.src??o.srcs:o,!0)}addManifest(e){this._manifest&&console.warn("[Resolver] Manifest already exists, this will be overwritten"),this._manifest=e,e.bundles.forEach(t=>{this.addBundle(t.name,t.assets)})}addBundle(e,t){const i=[];Array.isArray(t)?t.forEach(s=>{const r=s.src??s.srcs,o=s.alias??s.name;let a;if(typeof o=="string"){const c=this._createBundleAssetId(e,o);i.push(c),a=[o,c]}else{const c=o.map(l=>this._createBundleAssetId(e,l));i.push(...c),a=[...o,...c]}this.add({...s,alias:a,src:r})}):Object.keys(t).forEach(s=>{const r=[s,this._createBundleAssetId(e,s)];if(typeof t[s]=="string")this.add({alias:r,src:t[s]});else if(Array.isArray(t[s]))this.add({alias:r,src:t[s]});else{const o=t[s],a=o.src??o.srcs;this.add({...o,alias:r,src:Array.isArray(a)?a:[a]})}i.push(...r)}),this._bundles[e]=i}add(e,t,i,s,r){const o=[];typeof e=="string"||Array.isArray(e)&&typeof e[0]=="string"?(mt("7.2.0",`Assets.add now uses an object instead of individual parameters. -Please use Assets.add({ alias, src, data, format, loadParser }) instead.`),o.push({alias:e,src:t,data:i,format:s,loadParser:r})):Array.isArray(e)?o.push(...e):o.push(e);let a;a=c=>{this.hasKey(c)&&console.warn(`[Resolver] already has key: ${c} overwriting`)},jn(o).forEach(c=>{const{src:l,srcs:d}=c;let{data:u,format:h,loadParser:f}=c;const p=jn(l||d).map(v=>typeof v=="string"?Xk(v):Array.isArray(v)?v:[v]),m=this.getAlias(c);Array.isArray(m)?m.forEach(a):a(m);const g=[];p.forEach(v=>{v.forEach(y=>{let b={};if(typeof y!="object"){b.src=y;for(let x=0;x{this._assetMap[v]=g})})}resolveBundle(e){const t=tu(e);e=jn(e);const i={};return e.forEach(s=>{const r=this._bundles[s];if(r){const o=this.resolve(r),a={};for(const c in o){const l=o[c];a[this._extractAssetIdFromBundle(s,c)]=l}i[s]=a}}),t?i[e[0]]:i}resolveUrl(e){const t=this.resolve(e);if(typeof e!="string"){const i={};for(const s in t)i[s]=t[s].src;return i}return t.src}resolve(e){const t=tu(e);e=jn(e);const i={};return e.forEach(s=>{if(!this._resolverHash[s])if(this._assetMap[s]){let r=this._assetMap[s];const o=r[0],a=this._getPreferredOrder(r);a==null||a.priority.forEach(c=>{a.params[c].forEach(l=>{const d=r.filter(u=>u[c]?u[c]===l:!1);d.length&&(r=d)})}),this._resolverHash[s]=r[0]??o}else this._resolverHash[s]=this.buildResolvedAsset({alias:[s],src:s},{});i[s]=this._resolverHash[s]}),t?i[e[0]]:i}hasKey(e){return!!this._assetMap[e]}hasBundle(e){return!!this._bundles[e]}_getPreferredOrder(e){for(let t=0;tr.params.format.includes(i.format));if(s)return s}return this._preferredOrder[0]}_appendDefaultSearchParams(e){if(!this._defaultSearchParams)return e;const t=/\?/.test(e)?"&":"?";return`${e}${t}${this._defaultSearchParams}`}buildResolvedAsset(e,t){const{aliases:i,data:s,loadParser:r,format:o}=t;return(this._basePath||this._rootPath)&&(e.src=hi.toAbsolute(e.src,this._basePath,this._rootPath)),e.alias=i??e.alias??[e.src],e.src=this._appendDefaultSearchParams(e.src),e.data={...s||{},...e.data},e.loadParser=r??e.loadParser,e.format=o??e.format??hi.extname(e.src).slice(1),e.srcs=e.src,e.name=e.alias,e}}class bR{constructor(){this._detections=[],this._initialized=!1,this.resolver=new vR,this.loader=new zk,this.cache=Co,this._backgroundLoader=new Vk(this.loader),this._backgroundLoader.active=!0,this.reset()}async init(e={}){var r,o;if(this._initialized){console.warn("[Assets]AssetManager already initialized, did you load before calling this Assets.init()?");return}if(this._initialized=!0,e.defaultSearchParams&&this.resolver.setDefaultSearchParams(e.defaultSearchParams),e.basePath&&(this.resolver.basePath=e.basePath),e.bundleIdentifier&&this.resolver.setBundleIdentifier(e.bundleIdentifier),e.manifest){let a=e.manifest;typeof a=="string"&&(a=await this.load(a)),this.resolver.addManifest(a)}const t=((r=e.texturePreference)==null?void 0:r.resolution)??1,i=typeof t=="number"?[t]:t,s=await this._detectFormats({preferredFormats:(o=e.texturePreference)==null?void 0:o.format,skipDetections:e.skipDetections,detections:this._detections});this.resolver.prefer({params:{format:s,resolution:i}}),e.preferences&&this.setPreferences(e.preferences)}add(e,t,i,s,r){this.resolver.add(e,t,i,s,r)}async load(e,t){this._initialized||await this.init();const i=tu(e),s=jn(e).map(a=>{if(typeof a!="string"){const c=this.resolver.getAlias(a);return c.some(l=>!this.resolver.hasKey(l))&&this.add(a),Array.isArray(c)?c[0]:c}return this.resolver.hasKey(a)||this.add({alias:a,src:a}),a}),r=this.resolver.resolve(s),o=await this._mapLoadToResolve(r,t);return i?o[s[0]]:o}addBundle(e,t){this.resolver.addBundle(e,t)}async loadBundle(e,t){this._initialized||await this.init();let i=!1;typeof e=="string"&&(i=!0,e=[e]);const s=this.resolver.resolveBundle(e),r={},o=Object.keys(s);let a=0,c=0;const l=()=>{t==null||t(++a/c)},d=o.map(u=>{const h=s[u];return c+=Object.keys(h).length,this._mapLoadToResolve(h,l).then(f=>{r[u]=f})});return await Promise.all(d),i?r[e[0]]:r}async backgroundLoad(e){this._initialized||await this.init(),typeof e=="string"&&(e=[e]);const t=this.resolver.resolve(e);this._backgroundLoader.add(Object.values(t))}async backgroundLoadBundle(e){this._initialized||await this.init(),typeof e=="string"&&(e=[e]);const t=this.resolver.resolveBundle(e);Object.values(t).forEach(i=>{this._backgroundLoader.add(Object.values(i))})}reset(){this.resolver.reset(),this.loader.reset(),this.cache.reset(),this._initialized=!1}get(e){if(typeof e=="string")return Co.get(e);const t={};for(let i=0;i{const l=r[a.src],d=[a.src];a.alias&&d.push(...a.alias),o[s[c]]=l,Co.set(d,l)}),o}async unload(e){this._initialized||await this.init();const t=jn(e).map(s=>typeof s!="string"?s.src:s),i=this.resolver.resolve(t);await this._unloadFromResolved(i)}async unloadBundle(e){this._initialized||await this.init(),e=jn(e);const t=this.resolver.resolveBundle(e),i=Object.keys(t).map(s=>this._unloadFromResolved(t[s]));await Promise.all(i)}async _unloadFromResolved(e){const t=Object.values(e);t.forEach(i=>{Co.remove(i.src)}),await this.loader.unload(t)}async _detectFormats(e){let t=[];e.preferredFormats&&(t=Array.isArray(e.preferredFormats)?e.preferredFormats:[e.preferredFormats]);for(const i of e.detections)e.skipDetections||await i.test()?t=await i.add(t):e.skipDetections||(t=await i.remove(t));return t=t.filter((i,s)=>t.indexOf(i)===s),t}get detections(){return this._detections}get preferWorkers(){return oh.config.preferWorkers}set preferWorkers(e){mt("7.2.0","Assets.prefersWorkers is deprecated, use Assets.setPreferences({ preferWorkers: true }) instead."),this.setPreferences({preferWorkers:e})}setPreferences(e){this.loader.parsers.forEach(t=>{t.config&&Object.keys(t.config).filter(i=>i in e).forEach(i=>{t.config[i]=e[i]})})}}const Ts=new bR;He.handleByList(Oe.LoadParser,Ts.loader.parsers).handleByList(Oe.ResolveParser,Ts.resolver.parsers).handleByList(Oe.CacheParser,Ts.cache.parsers).handleByList(Oe.DetectionParser,Ts.detections);const yR={extension:Oe.CacheParser,test:n=>Array.isArray(n)&&n.every(e=>e instanceof it),getCacheableAssets:(n,e)=>{const t={};return n.forEach(i=>{e.forEach((s,r)=>{t[i+(r===0?"":r+1)]=s})}),t}};He.add(yR);async function rS(n){if("Image"in globalThis)return new Promise(e=>{const t=new Image;t.onload=()=>{e(!0)},t.onerror=()=>{e(!1)},t.src=n});if("createImageBitmap"in globalThis&&"fetch"in globalThis){try{const e=await(await fetch(n)).blob();await createImageBitmap(e)}catch{return!1}return!0}return!1}const xR={extension:{type:Oe.DetectionParser,priority:1},test:async()=>rS("data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A="),add:async n=>[...n,"avif"],remove:async n=>n.filter(e=>e!=="avif")};He.add(xR);const wR={extension:{type:Oe.DetectionParser,priority:0},test:async()=>rS("data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA="),add:async n=>[...n,"webp"],remove:async n=>n.filter(e=>e!=="webp")};He.add(wR);const O0=["png","jpg","jpeg"],SR={extension:{type:Oe.DetectionParser,priority:-1},test:()=>Promise.resolve(!0),add:async n=>[...n,...O0],remove:async n=>n.filter(e=>!O0.includes(e))};He.add(SR);const CR="WorkerGlobalScope"in globalThis&&globalThis instanceof globalThis.WorkerGlobalScope;function Pg(n){return CR?!1:document.createElement("video").canPlayType(n)!==""}const AR={extension:{type:Oe.DetectionParser,priority:0},test:async()=>Pg("video/webm"),add:async n=>[...n,"webm"],remove:async n=>n.filter(e=>e!=="webm")};He.add(AR);const TR={extension:{type:Oe.DetectionParser,priority:0},test:async()=>Pg("video/mp4"),add:async n=>[...n,"mp4","m4v"],remove:async n=>n.filter(e=>e!=="mp4"&&e!=="m4v")};He.add(TR);const ER={extension:{type:Oe.DetectionParser,priority:0},test:async()=>Pg("video/ogg"),add:async n=>[...n,"ogv"],remove:async n=>n.filter(e=>e!=="ogv")};He.add(ER);const _R={extension:Oe.ResolveParser,test:oh.test,parse:n=>{var e;return{resolution:parseFloat(((e=Ve.RETINA_PREFIX.exec(n))==null?void 0:e[1])??"1"),format:hi.extname(n).slice(1),src:n}}};He.add(_R);var Ri=(n=>(n[n.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",n[n.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777]="COMPRESSED_RGBA_S3TC_DXT1_EXT",n[n.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778]="COMPRESSED_RGBA_S3TC_DXT3_EXT",n[n.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",n[n.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917]="COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",n[n.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918]="COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",n[n.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919]="COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",n[n.COMPRESSED_SRGB_S3TC_DXT1_EXT=35916]="COMPRESSED_SRGB_S3TC_DXT1_EXT",n[n.COMPRESSED_R11_EAC=37488]="COMPRESSED_R11_EAC",n[n.COMPRESSED_SIGNED_R11_EAC=37489]="COMPRESSED_SIGNED_R11_EAC",n[n.COMPRESSED_RG11_EAC=37490]="COMPRESSED_RG11_EAC",n[n.COMPRESSED_SIGNED_RG11_EAC=37491]="COMPRESSED_SIGNED_RG11_EAC",n[n.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",n[n.COMPRESSED_RGBA8_ETC2_EAC=37496]="COMPRESSED_RGBA8_ETC2_EAC",n[n.COMPRESSED_SRGB8_ETC2=37493]="COMPRESSED_SRGB8_ETC2",n[n.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37497]="COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",n[n.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37494]="COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",n[n.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37495]="COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",n[n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",n[n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",n[n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG=35841]="COMPRESSED_RGB_PVRTC_2BPPV1_IMG",n[n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG=35843]="COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",n[n.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",n[n.COMPRESSED_RGB_ATC_WEBGL=35986]="COMPRESSED_RGB_ATC_WEBGL",n[n.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL=35987]="COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",n[n.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL=34798]="COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",n[n.COMPRESSED_RGBA_ASTC_4x4_KHR=37808]="COMPRESSED_RGBA_ASTC_4x4_KHR",n[n.COMPRESSED_RGBA_BPTC_UNORM_EXT=36492]="COMPRESSED_RGBA_BPTC_UNORM_EXT",n[n.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT=36493]="COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT",n[n.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT=36494]="COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT",n[n.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT=36495]="COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT",n))(Ri||{});const iu={33776:.5,33777:.5,33778:1,33779:1,35916:.5,35917:.5,35918:1,35919:1,37488:.5,37489:.5,37490:1,37491:1,37492:.5,37496:1,37493:.5,37497:1,37494:.5,37495:.5,35840:.5,35842:.5,35841:.25,35843:.25,36196:.5,35986:.5,35987:1,34798:1,37808:1,36492:1,36493:1,36494:1,36495:1};let ls,ga;function N0(){ga={bptc:ls.getExtension("EXT_texture_compression_bptc"),astc:ls.getExtension("WEBGL_compressed_texture_astc"),etc:ls.getExtension("WEBGL_compressed_texture_etc"),s3tc:ls.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:ls.getExtension("WEBGL_compressed_texture_s3tc_srgb"),pvrtc:ls.getExtension("WEBGL_compressed_texture_pvrtc")||ls.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),etc1:ls.getExtension("WEBGL_compressed_texture_etc1"),atc:ls.getExtension("WEBGL_compressed_texture_atc")}}const MR={extension:{type:Oe.DetectionParser,priority:2},test:async()=>{const n=Ve.ADAPTER.createCanvas().getContext("webgl");return n?(ls=n,!0):(console.warn("WebGL not available for compressed textures."),!1)},add:async n=>{ga||N0();const e=[];for(const t in ga)ga[t]&&e.push(t);return[...e,...n]},remove:async n=>(ga||N0(),n.filter(e=>!(e in ga)))};He.add(MR);class PR extends th{constructor(e,t={width:1,height:1,autoLoad:!0}){let i,s;typeof e=="string"?(i=e,s=new Uint8Array):(i=null,s=e),super(s,t),this.origin=i,this.buffer=s?new Vp(s):null,this._load=null,this.loaded=!1,this.origin!==null&&t.autoLoad!==!1&&this.load(),this.origin===null&&this.buffer&&(this._load=Promise.resolve(this),this.loaded=!0,this.onBlobLoaded(this.buffer.rawBinaryData))}onBlobLoaded(e){}load(){return this._load?this._load:(this._load=fetch(this.origin).then(e=>e.blob()).then(e=>e.arrayBuffer()).then(e=>(this.data=new Uint32Array(e),this.buffer=new Vp(e),this.loaded=!0,this.onBlobLoaded(e),this.update(),this)),this._load)}}class Do extends PR{constructor(e,t){super(e,t),this.format=t.format,this.levels=t.levels||1,this._width=t.width,this._height=t.height,this._extension=Do._formatToExtension(this.format),(t.levelBuffers||this.buffer)&&(this._levelBuffers=t.levelBuffers||Do._createLevelBuffers(e instanceof Uint8Array?e:this.buffer.uint8View,this.format,this.levels,4,4,this.width,this.height))}upload(e,t,i){const s=e.gl;if(!e.context.extensions[this._extension])throw new Error(`${this._extension} textures are not supported on the current machine`);if(!this._levelBuffers)return!1;s.pixelStorei(s.UNPACK_ALIGNMENT,4);for(let r=0,o=this.levels;r=33776&&e<=33779)return"s3tc";if(e>=35916&&e<=35919)return"s3tc_sRGB";if(e>=37488&&e<=37497)return"etc";if(e>=35840&&e<=35843)return"pvrtc";if(e===36196)return"etc1";if(e===35986||e===35987||e===34798)return"atc";if(e>=36492&&e<=36495)return"bptc";if(e===37808)return"astc";throw new Error(`Invalid (compressed) texture format given: ${e}`)}static _createLevelBuffers(e,t,i,s,r,o,a){const c=new Array(i);let l=e.byteOffset,d=o,u=a,h=d+s-1&~(s-1),f=u+r-1&~(r-1),p=h*f*iu[t];for(let m=0;m1?d:h,levelHeight:i>1?u:f,levelBuffer:new Uint8Array(e.buffer,l,p)},l+=p,d=d>>1||1,u=u>>1||1,h=d+s-1&~(s-1),f=u+r-1&~(r-1),p=h*f*iu[t];return c}}const Wf=4,jc=124,IR=32,$0=20,kR=542327876,Hc={HEIGHT:3,WIDTH:4,MIPMAP_COUNT:7,PIXEL_FORMAT:19},RR={FOURCC:2},Gc={DXGI_FORMAT:0,RESOURCE_DIMENSION:1,MISC_FLAG:2,ARRAY_SIZE:3},FR=1,LR=2,DR=4,OR=64,NR=512,$R=131072,BR=827611204,UR=861165636,VR=894720068,XR=808540228,YR=4,zR={[BR]:Ri.COMPRESSED_RGBA_S3TC_DXT1_EXT,[UR]:Ri.COMPRESSED_RGBA_S3TC_DXT3_EXT,[VR]:Ri.COMPRESSED_RGBA_S3TC_DXT5_EXT},jR={70:Ri.COMPRESSED_RGBA_S3TC_DXT1_EXT,71:Ri.COMPRESSED_RGBA_S3TC_DXT1_EXT,73:Ri.COMPRESSED_RGBA_S3TC_DXT3_EXT,74:Ri.COMPRESSED_RGBA_S3TC_DXT3_EXT,76:Ri.COMPRESSED_RGBA_S3TC_DXT5_EXT,77:Ri.COMPRESSED_RGBA_S3TC_DXT5_EXT,72:Ri.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,75:Ri.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,78:Ri.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,96:Ri.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,95:Ri.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,98:Ri.COMPRESSED_RGBA_BPTC_UNORM_EXT,99:Ri.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT};function HR(n){const e=new Uint32Array(n);if(e[0]!==kR)throw new Error("Invalid DDS file magic word");const t=new Uint32Array(n,0,jc/Uint32Array.BYTES_PER_ELEMENT),i=t[Hc.HEIGHT],s=t[Hc.WIDTH],r=t[Hc.MIPMAP_COUNT],o=new Uint32Array(n,Hc.PIXEL_FORMAT*Uint32Array.BYTES_PER_ELEMENT,IR/Uint32Array.BYTES_PER_ELEMENT),a=o[FR];if(a&DR){const c=o[RR.FOURCC];if(c!==XR){const y=zR[c],b=Wf+jc,x=new Uint8Array(n,b);return[new Do(x,{format:y,width:s,height:i,levels:r})]}const l=Wf+jc,d=new Uint32Array(e.buffer,l,$0/Uint32Array.BYTES_PER_ELEMENT),u=d[Gc.DXGI_FORMAT],h=d[Gc.RESOURCE_DIMENSION],f=d[Gc.MISC_FLAG],p=d[Gc.ARRAY_SIZE],m=jR[u];if(m===void 0)throw new Error(`DDSParser cannot parse texture data with DXGI format ${u}`);if(f===YR)throw new Error("DDSParser does not support cubemap textures");if(h===6)throw new Error("DDSParser does not supported 3D texture data");const g=new Array,v=Wf+jc+$0;if(p===1)g.push(new Uint8Array(n,v));else{const y=iu[m];let b=0,x=s,C=i;for(let S=0;S>>1,C=C>>>1}let T=v;for(let S=0;Snew Do(y,{format:m,width:s,height:i,levels:r}))}throw a&OR?new Error("DDSParser does not support uncompressed texture data."):a&NR?new Error("DDSParser does not supported YUV uncompressed texture data."):a&$R?new Error("DDSParser does not support single-channel (lumninance) texture data!"):a&LR?new Error("DDSParser does not support single-channel (alpha) texture data!"):new Error("DDSParser failed to load a texture file due to an unknown reason!")}const B0=[171,75,84,88,32,49,49,187,13,10,26,10],GR=67305985,Un={ENDIANNESS:12,GL_TYPE:16,GL_FORMAT:24,GL_INTERNAL_FORMAT:28,PIXEL_WIDTH:36,PIXEL_HEIGHT:40,PIXEL_DEPTH:44,NUMBER_OF_ARRAY_ELEMENTS:48,NUMBER_OF_FACES:52,NUMBER_OF_MIPMAP_LEVELS:56,BYTES_OF_KEY_VALUE_DATA:60},um=64,U0={[je.UNSIGNED_BYTE]:1,[je.UNSIGNED_SHORT]:2,[je.INT]:4,[je.UNSIGNED_INT]:4,[je.FLOAT]:4,[je.HALF_FLOAT]:8},WR={[Pe.RGBA]:4,[Pe.RGB]:3,[Pe.RG]:2,[Pe.RED]:1,[Pe.LUMINANCE]:1,[Pe.LUMINANCE_ALPHA]:2,[Pe.ALPHA]:1},qR={[je.UNSIGNED_SHORT_4_4_4_4]:2,[je.UNSIGNED_SHORT_5_5_5_1]:2,[je.UNSIGNED_SHORT_5_6_5]:2};function KR(n,e,t=!1){const i=new DataView(e);if(!JR(n,i))return null;const s=i.getUint32(Un.ENDIANNESS,!0)===GR,r=i.getUint32(Un.GL_TYPE,s),o=i.getUint32(Un.GL_FORMAT,s),a=i.getUint32(Un.GL_INTERNAL_FORMAT,s),c=i.getUint32(Un.PIXEL_WIDTH,s),l=i.getUint32(Un.PIXEL_HEIGHT,s)||1,d=i.getUint32(Un.PIXEL_DEPTH,s)||1,u=i.getUint32(Un.NUMBER_OF_ARRAY_ELEMENTS,s)||1,h=i.getUint32(Un.NUMBER_OF_FACES,s),f=i.getUint32(Un.NUMBER_OF_MIPMAP_LEVELS,s),p=i.getUint32(Un.BYTES_OF_KEY_VALUE_DATA,s);if(l===0||d!==1)throw new Error("Only 2D textures are supported");if(h!==1)throw new Error("CubeTextures are not supported by KTXLoader yet!");if(u!==1)throw new Error("WebGL does not support array textures");const m=4,g=4,v=c+3&-4,y=l+3&-4,b=new Array(u);let x=c*l;r===0&&(x=v*y);let C;if(r!==0?U0[r]?C=U0[r]*WR[o]:C=qR[r]:C=iu[a],C===void 0)throw new Error("Unable to resolve the pixel format stored in the *.ktx file!");const T=t?QR(i,p,s):null;let S=x*C,E=c,_=l,I=v,M=y,k=um+p;for(let B=0;B1||r!==0?E:I,levelHeight:f>1||r!==0?_:M,levelBuffer:new Uint8Array(e,G,S)},G+=S}k+=D+4,k=k%4!==0?k+4-k%4:k,E=E>>1||1,_=_>>1||1,I=E+m-1&-4,M=_+g-1&-4,S=I*M*C}return r!==0?{uncompressed:b.map(B=>{let D=B[0].levelBuffer,G=!1;return r===je.FLOAT?D=new Float32Array(B[0].levelBuffer.buffer,B[0].levelBuffer.byteOffset,B[0].levelBuffer.byteLength/4):r===je.UNSIGNED_INT?(G=!0,D=new Uint32Array(B[0].levelBuffer.buffer,B[0].levelBuffer.byteOffset,B[0].levelBuffer.byteLength/4)):r===je.INT&&(G=!0,D=new Int32Array(B[0].levelBuffer.buffer,B[0].levelBuffer.byteOffset,B[0].levelBuffer.byteLength/4)),{resource:new th(D,{width:B[0].levelWidth,height:B[0].levelHeight}),type:r,format:G?ZR(o):o}}),kvData:T}:{compressed:b.map(B=>new Do(null,{format:a,width:c,height:l,levels:f,levelBuffers:B})),kvData:T}}function JR(n,e){for(let t=0;te-s){console.error("KTXLoader: keyAndValueByteSize out of bounds");break}let c=0;for(;c{const o=new rt(r,{mipmap:On.OFF,alphaMode:ki.NO_PREMULTIPLIED_ALPHA,resolution:fr(n),...e.data});return vc(o,t,n)});return s.length===1?s[0]:s},unload(n){Array.isArray(n)?n.forEach(e=>e.destroy(!0)):n.destroy(!0)}};He.add(e2);const t2={extension:{type:Oe.LoadParser,priority:Cn.High},name:"loadKTX",test(n){return un(n,".ktx")},async load(n,e,t){const i=await(await Ve.ADAPTER.fetch(n)).arrayBuffer(),{compressed:s,uncompressed:r,kvData:o}=KR(n,i),a=s??r,c={mipmap:On.OFF,alphaMode:ki.NO_PREMULTIPLIED_ALPHA,resolution:fr(n),...e.data},l=a.map(d=>{a===r&&Object.assign(c,{type:d.type,format:d.format});const u=d.resource??d,h=new rt(u,c);return h.ktxKeyValueData=o,vc(h,t,n)});return l.length===1?l[0]:l},unload(n){Array.isArray(n)?n.forEach(e=>e.destroy(!0)):n.destroy(!0)}};He.add(t2);const i2=["s3tc","s3tc_sRGB","etc","etc1","pvrtc","atc","astc","bptc"],n2={extension:Oe.ResolveParser,test:n=>{const e=hi.extname(n).slice(1);return["basis","ktx","dds"].includes(e)},parse:n=>{var i,s;const e=n.split("."),t=e.pop();if(["ktx","dds"].includes(t)){const r=e.pop();if(i2.includes(r))return{resolution:parseFloat(((i=Ve.RETINA_PREFIX.exec(n))==null?void 0:i[1])??"1"),format:r,src:n}}return{resolution:parseFloat(((s=Ve.RETINA_PREFIX.exec(n))==null?void 0:s[1])??"1"),format:t,src:n}}};He.add(n2);const Wc=new ht,s2=4,oS=class Al{constructor(e){this.renderer=e,this._rendererPremultipliedAlpha=!1}contextChange(){var t;const e=(t=this.renderer)==null?void 0:t.gl.getContextAttributes();this._rendererPremultipliedAlpha=!!(e&&e.alpha&&e.premultipliedAlpha)}async image(e,t,i,s){const r=new Image;return r.src=await this.base64(e,t,i,s),r}async base64(e,t,i,s){const r=this.canvas(e,s);if(r.toBlob!==void 0)return new Promise((o,a)=>{r.toBlob(c=>{if(!c){a(new Error("ICanvas.toBlob failed!"));return}const l=new FileReader;l.onload=()=>o(l.result),l.onerror=a,l.readAsDataURL(c)},t,i)});if(r.toDataURL!==void 0)return r.toDataURL(t,i);if(r.convertToBlob!==void 0){const o=await r.convertToBlob({type:t,quality:i});return new Promise((a,c)=>{const l=new FileReader;l.onload=()=>a(l.result),l.onerror=c,l.readAsDataURL(o)})}throw new Error("Extract.base64() requires ICanvas.toDataURL, ICanvas.toBlob, or ICanvas.convertToBlob to be implemented")}canvas(e,t){const{pixels:i,width:s,height:r,flipY:o,premultipliedAlpha:a}=this._rawPixels(e,t);o&&Al._flipY(i,s,r),a&&Al._unpremultiplyAlpha(i);const c=new BP(s,r,1),l=new ImageData(new Uint8ClampedArray(i.buffer),s,r);return c.context.putImageData(l,0,0),c.canvas}pixels(e,t){const{pixels:i,width:s,height:r,flipY:o,premultipliedAlpha:a}=this._rawPixels(e,t);return o&&Al._flipY(i,s,r),a&&Al._unpremultiplyAlpha(i),i}_rawPixels(e,t){const i=this.renderer;if(!i)throw new Error("The Extract has already been destroyed");let s,r=!1,o=!1,a,c=!1;e&&(e instanceof Ho?a=e:(a=i.generateTexture(e,{region:t,resolution:i.resolution,multisample:i.multisample}),c=!0,t&&(Wc.width=t.width,Wc.height=t.height,t=Wc)));const l=i.gl;if(a){if(s=a.baseTexture.resolution,t=t??a.frame,r=!1,o=a.baseTexture.alphaMode>0&&a.baseTexture.format===Pe.RGBA,!c){i.renderTexture.bind(a);const f=a.framebuffer.glFramebuffers[i.CONTEXT_UID];f.blitFramebuffer&&i.framebuffer.bind(f.blitFramebuffer)}}else s=i.resolution,t||(t=Wc,t.width=i.width/s,t.height=i.height/s),r=!0,o=this._rendererPremultipliedAlpha,i.renderTexture.bind();const d=Math.max(Math.round(t.width*s),1),u=Math.max(Math.round(t.height*s),1),h=new Uint8Array(s2*d*u);return l.readPixels(Math.round(t.x*s),Math.round(t.y*s),d,u,l.RGBA,l.UNSIGNED_BYTE,h),c&&(a==null||a.destroy(!0)),{pixels:h,width:d,height:u,flipY:r,premultipliedAlpha:o}}destroy(){this.renderer=null}static _flipY(e,t,i){const s=t<<2,r=i>>1,o=new Uint8Array(s);for(let a=0;a=0&&a>=0&&s>=0&&r>=0)){e.length=0;return}const c=Math.ceil(2.3*Math.sqrt(o+a)),l=c*8+(s?4:0)+(r?4:0);if(e.length=l,l===0)return;if(c===0){e.length=8,e[0]=e[6]=t+s,e[1]=e[3]=i+r,e[2]=e[4]=t-s,e[5]=e[7]=i-r;return}let d=0,u=c*4+(s?2:0)+2,h=u,f=l;{const p=s+o,m=r,g=t+p,v=t-p,y=i+m;if(e[d++]=g,e[d++]=y,e[--u]=y,e[--u]=v,r){const b=i-m;e[h++]=v,e[h++]=b,e[--f]=b,e[--f]=g}}for(let p=1;p0||e&&i<=0){const s=t/2;for(let r=s+s%2;r=6){V0(t,!1);const o=[];for(let l=0;l=0&&r>=0&&o.push(t,i,t+s,i,t+s,i+r,t,i+r)},triangulate(n,e){const t=n.points,i=e.points;if(t.length===0)return;const s=i.length/2;i.push(t[0],t[1],t[2],t[3],t[6],t[7],t[4],t[5]),e.indices.push(s,s+1,s+2,s+1,s+2,s+3)}},a2={build(n){nu.build(n)},triangulate(n,e){nu.triangulate(n,e)}};var Mn=(n=>(n.MITER="miter",n.BEVEL="bevel",n.ROUND="round",n))(Mn||{}),Xr=(n=>(n.BUTT="butt",n.ROUND="round",n.SQUARE="square",n))(Xr||{});const Va={adaptive:!0,maxLength:10,minSegments:8,maxSegments:2048,epsilon:1e-4,_segmentsCount(n,e=20){if(!this.adaptive||!n||isNaN(n))return e;let t=Math.ceil(n/this.maxLength);return tthis.maxSegments&&(t=this.maxSegments),t}};class X0{static curveTo(e,t,i,s,r,o){const a=o[o.length-2],c=o[o.length-1]-t,l=a-e,d=s-t,u=i-e,h=Math.abs(c*u-l*d);if(h<1e-8||r===0)return(o[o.length-2]!==e||o[o.length-1]!==t)&&o.push(e,t),null;const f=c*c+l*l,p=d*d+u*u,m=c*d+l*u,g=r*Math.sqrt(f)/h,v=r*Math.sqrt(p)/h,y=g*m/f,b=v*m/p,x=g*u+v*l,C=g*d+v*c,T=l*(v+y),S=c*(v+y),E=u*(g+b),_=d*(g+b),I=Math.atan2(S-C,T-x),M=Math.atan2(_-C,E-x);return{cx:x+e,cy:C+t,radius:r,startAngle:I,endAngle:M,anticlockwise:l*d>u*c}}static arc(e,t,i,s,r,o,a,c,l){const d=a-o,u=Va._segmentsCount(Math.abs(d)*r,Math.ceil(Math.abs(d)/Wd)*40),h=d/(u*2),f=h*2,p=Math.cos(h),m=Math.sin(h),g=u-1,v=g%1/g;for(let y=0;y<=g;++y){const b=y+v*y,x=h+o+f*b,C=Math.cos(x),T=-Math.sin(x);l.push((p*C+m*T)*r+i,(p*-T+m*C)*r+s)}}}class l2{constructor(){this.reset()}begin(e,t,i){this.reset(),this.style=e,this.start=t,this.attribStart=i}end(e,t){this.attribSize=t-this.attribStart,this.size=e-this.start}reset(){this.style=null,this.size=0,this.start=0,this.attribStart=0,this.attribSize=0}}class Ig{static curveLength(e,t,i,s,r,o,a,c){let l=0,d=0,u=0,h=0,f=0,p=0,m=0,g=0,v=0,y=0,b=0,x=e,C=t;for(let T=1;T<=10;++T)d=T/10,u=d*d,h=u*d,f=1-d,p=f*f,m=p*f,g=m*e+3*p*d*i+3*f*u*r+h*a,v=m*t+3*p*d*s+3*f*u*o+h*c,y=x-g,b=C-v,x=g,C=v,l+=Math.sqrt(y*y+b*b);return l}static curveTo(e,t,i,s,r,o,a){const c=a[a.length-2],l=a[a.length-1];a.length-=2;const d=Va._segmentsCount(Ig.curveLength(c,l,e,t,i,s,r,o));let u=0,h=0,f=0,p=0,m=0;a.push(c,l);for(let g=1,v=0;g<=d;++g)v=g/d,u=1-v,h=u*u,f=h*u,p=v*v,m=p*v,a.push(f*c+3*h*v*e+3*u*p*i+m*r,f*l+3*h*v*t+3*u*p*s+m*o)}}function Y0(n,e,t,i,s,r,o,a){const c=n-t*s,l=e-i*s,d=n+t*r,u=e+i*r;let h,f;o?(h=i,f=-t):(h=-i,f=t);const p=c+h,m=l+f,g=d+h,v=u+f;return a.push(p,m,g,v),2}function po(n,e,t,i,s,r,o,a){const c=t-n,l=i-e;let d=Math.atan2(c,l),u=Math.atan2(s-n,r-e);a&&du&&(u+=Math.PI*2);let h=d;const f=u-d,p=Math.abs(f),m=Math.sqrt(c*c+l*l),g=(15*p*Math.sqrt(m)/Math.PI>>0)+1,v=f/g;if(h+=v,a){o.push(n,e,t,i);for(let y=1,b=h;y=0&&(r.join===Mn.ROUND?h+=po(b,x,b-S*B,x-E*B,b-_*B,x-I*B,d,!1)+4:h+=2,d.push(b-_*D,x-I*D,b+_*B,x+I*B));continue}const J=(-S+v)*(-E+x)-(-S+b)*(-E+y),oe=(-_+C)*(-I+x)-(-_+b)*(-I+T),le=(L*oe-F*J)/z,ve=($*J-N*oe)/z,Se=(le-b)*(le-b)+(ve-x)*(ve-x),fe=b+(le-b)*B,be=x+(ve-x)*B,q=b-(le-b)*D,Z=x-(ve-x)*D,se=Math.min(L*L+N*N,F*F+$*$),j=K?B:D,H=se+j*j*m,O=Se<=H;let U=r.join;if(U===Mn.MITER&&Se/m>g&&(U=Mn.BEVEL),O)switch(U){case Mn.MITER:{d.push(fe,be,q,Z);break}case Mn.BEVEL:{K?d.push(fe,be,b+S*D,x+E*D,fe,be,b+_*D,x+I*D):d.push(b-S*B,x-E*B,q,Z,b-_*B,x-I*B,q,Z),h+=2;break}case Mn.ROUND:{K?(d.push(fe,be,b+S*D,x+E*D),h+=po(b,x,b+S*D,x+E*D,b+_*D,x+I*D,d,!0)+4,d.push(fe,be,b+_*D,x+I*D)):(d.push(b-S*B,x-E*B,q,Z),h+=po(b,x,b-S*B,x-E*B,b-_*B,x-I*B,d,!1)+4,d.push(b-_*B,x-I*B,q,Z));break}}else{switch(d.push(b-S*B,x-E*B,b+S*D,x+E*D),U){case Mn.MITER:{K?d.push(q,Z,q,Z):d.push(fe,be,fe,be),h+=2;break}case Mn.ROUND:{K?h+=po(b,x,b+S*D,x+E*D,b+_*D,x+I*D,d,!0)+2:h+=po(b,x,b-S*B,x-E*B,b-_*B,x-I*B,d,!1)+2;break}}d.push(b-_*B,x-I*B,b+_*D,x+I*D),h+=2}}v=i[(u-2)*2],y=i[(u-2)*2+1],b=i[(u-1)*2],x=i[(u-1)*2+1],S=-(y-x),E=v-b,M=Math.sqrt(S*S+E*E),S/=M,E/=M,S*=p,E*=p,d.push(b-S*B,x-E*B,b+S*D,x+E*D),c||(r.cap===Xr.ROUND?h+=po(b-S*(B-D)*.5,x-E*(B-D)*.5,b-S*B,x-E*B,b+S*D,x+E*D,d,!1)+2:r.cap===Xr.SQUARE&&(h+=Y0(b,x,S,E,B,D,!1,d)));const G=e.indices,V=Va.epsilon*Va.epsilon;for(let Y=f;Y0&&(this.invalidate(),this.clearDirty++,this.graphicsData.length=0),this}drawShape(e,t=null,i=null,s=null){const r=new su(e,t,i,s);return this.graphicsData.push(r),this.dirty++,this}drawHole(e,t=null){if(!this.graphicsData.length)return null;const i=new su(e,null,null,t),s=this.graphicsData[this.graphicsData.length-1];return i.lineStyle=s.lineStyle,s.holes.push(i),this.dirty++,this}destroy(){super.destroy();for(let e=0;e0&&(i=this.batches[this.batches.length-1],s=i.style);for(let c=this.shapeIndex;c65535;this.indicesUint16&&this.indices.length===this.indicesUint16.length&&a===this.indicesUint16.BYTES_PER_ELEMENT>2?this.indicesUint16.set(this.indices):this.indicesUint16=a?new Uint32Array(this.indices):new Uint16Array(this.indices),this.batchable=this.isBatchable(),this.batchable?this.packBatches():this.buildDrawCalls()}_compareStyles(e,t){return!(!e||!t||e.texture.baseTexture!==t.texture.baseTexture||e.color+e.alpha!==t.color+t.alpha||!!e.native!=!!t.native)}validateBatching(){if(this.dirty===this.cacheDirty||!this.graphicsData.length)return!1;for(let e=0,t=this.graphicsData.length;e65535*2)return!1;const e=this.batches;for(let t=0;t0&&(s=qc.pop(),s||(s=new zp,s.texArray=new Wp),this.drawCalls.push(s)),s.start=d,s.size=0,s.texArray.count=0,s.type=l),m.touched=1,m._batchEnabled=e,m._batchLocation=r,m.wrapMode=Jn.REPEAT,s.texArray.elements[s.texArray.count++]=m,r++)),s.size+=h.size,d+=h.size,a=m._batchLocation,this.addColors(t,p.color,p.alpha,h.attribSize,h.attribStart),this.addTextureIds(i,a,h.attribSize,h.attribStart)}rt._globalBatch=e,this.packAttributes()}packAttributes(){const e=this.points,t=this.uvs,i=this.colors,s=this.textureIds,r=new ArrayBuffer(e.length*3*4),o=new Float32Array(r),a=new Uint32Array(r);let c=0;for(let l=0;l0&&e.alpha>0;return i?(e.matrix&&(e.matrix=e.matrix.clone(),e.matrix.invert()),Object.assign(this._lineStyle,{visible:i},e)):this._lineStyle.reset(),this}startPoly(){if(this.currentPath){const e=this.currentPath.points,t=this.currentPath.points.length;t>2&&(this.drawShape(this.currentPath),this.currentPath=new Lo,this.currentPath.closeStroke=!1,this.currentPath.points.push(e[t-2],e[t-1]))}else this.currentPath=new Lo,this.currentPath.closeStroke=!1}finishPoly(){this.currentPath&&(this.currentPath.points.length>2?(this.drawShape(this.currentPath),this.currentPath=null):this.currentPath.points.length=0)}moveTo(e,t){return this.startPoly(),this.currentPath.points[0]=e,this.currentPath.points[1]=t,this}lineTo(e,t){this.currentPath||this.moveTo(0,0);const i=this.currentPath.points,s=i[i.length-2],r=i[i.length-1];return(s!==e||r!==t)&&i.push(e,t),this}_initCurve(e=0,t=0){this.currentPath?this.currentPath.points.length===0&&(this.currentPath.points=[e,t]):this.moveTo(e,t)}quadraticCurveTo(e,t,i,s){this._initCurve();const r=this.currentPath.points;return r.length===0&&this.moveTo(0,0),kg.curveTo(e,t,i,s,r),this}bezierCurveTo(e,t,i,s,r,o){return this._initCurve(),Ig.curveTo(e,t,i,s,r,o,this.currentPath.points),this}arcTo(e,t,i,s,r){this._initCurve(e,t);const o=this.currentPath.points,a=X0.curveTo(e,t,i,s,r,o);if(a){const{cx:c,cy:l,radius:d,startAngle:u,endAngle:h,anticlockwise:f}=a;this.arc(c,l,d,u,h,f)}return this}arc(e,t,i,s,r,o=!1){if(s===r)return this;if(!o&&r<=s?r+=Wd:o&&s<=r&&(s+=Wd),r-s===0)return this;const a=e+Math.cos(s)*i,c=t+Math.sin(s)*i,l=this._geometry.closePointEps;let d=this.currentPath?this.currentPath.points:null;if(d){const u=Math.abs(d[d.length-2]-a),h=Math.abs(d[d.length-1]-c);u0;return i?(e.matrix&&(e.matrix=e.matrix.clone(),e.matrix.invert()),Object.assign(this._fillStyle,{visible:i},e)):this._fillStyle.reset(),this}endFill(){return this.finishPoly(),this._fillStyle.reset(),this}drawRect(e,t,i,s){return this.drawShape(new ht(e,t,i,s))}drawRoundedRect(e,t,i,s,r){return this.drawShape(new sh(e,t,i,s,r))}drawCircle(e,t,i){return this.drawShape(new ih(e,t,i))}drawEllipse(e,t,i,s){return this.drawShape(new nh(e,t,i,s))}drawPolygon(...e){let t,i=!0;const s=e[0];s.points?(i=s.closeStroke,t=s.points):Array.isArray(e[0])?t=e[0]:t=e;const r=new Lo(t);return r.closeStroke=i,this.drawShape(r),this}drawShape(e){return this._holeMode?this._geometry.drawHole(e,this._matrix):this._geometry.drawShape(e,this._fillStyle.clone(),this._lineStyle.clone(),this._matrix),this}clear(){return this._geometry.clear(),this._lineStyle.reset(),this._fillStyle.reset(),this._boundsID++,this._matrix=null,this._holeMode=!1,this.currentPath=null,this}isFastRect(){const e=this._geometry.graphicsData;return e.length===1&&e[0].shape.type===Ni.RECT&&!e[0].matrix&&!e[0].holes.length&&!(e[0].lineStyle.visible&&e[0].lineStyle.width)}_render(e){this.finishPoly();const t=this._geometry;t.updateBatches(),t.batchable?(this.batchDirty!==t.batchDirty&&this._populateBatches(),this._renderBatched(e)):(e.batch.flush(),this._renderDirect(e))}_populateBatches(){const e=this._geometry,t=this.blendMode,i=e.batches.length;this.batchTint=-1,this._transformID=-1,this.batchDirty=e.batchDirty,this.batches.length=i,this.vertexData=new Float32Array(e.points);for(let s=0;s{this.hasKey(c)&&console.warn(`[Resolver] already has key: ${c} overwriting`)},jn(o).forEach(c=>{const{src:l,srcs:d}=c;let{data:u,format:h,loadParser:f}=c;const p=jn(l||d).map(v=>typeof v=="string"?Xk(v):Array.isArray(v)?v:[v]),m=this.getAlias(c);Array.isArray(m)?m.forEach(a):a(m);const g=[];p.forEach(v=>{v.forEach(y=>{let b={};if(typeof y!="object"){b.src=y;for(let w=0;w{this._assetMap[v]=g})})}resolveBundle(e){const t=tu(e);e=jn(e);const i={};return e.forEach(s=>{const r=this._bundles[s];if(r){const o=this.resolve(r),a={};for(const c in o){const l=o[c];a[this._extractAssetIdFromBundle(s,c)]=l}i[s]=a}}),t?i[e[0]]:i}resolveUrl(e){const t=this.resolve(e);if(typeof e!="string"){const i={};for(const s in t)i[s]=t[s].src;return i}return t.src}resolve(e){const t=tu(e);e=jn(e);const i={};return e.forEach(s=>{if(!this._resolverHash[s])if(this._assetMap[s]){let r=this._assetMap[s];const o=r[0],a=this._getPreferredOrder(r);a==null||a.priority.forEach(c=>{a.params[c].forEach(l=>{const d=r.filter(u=>u[c]?u[c]===l:!1);d.length&&(r=d)})}),this._resolverHash[s]=r[0]??o}else this._resolverHash[s]=this.buildResolvedAsset({alias:[s],src:s},{});i[s]=this._resolverHash[s]}),t?i[e[0]]:i}hasKey(e){return!!this._assetMap[e]}hasBundle(e){return!!this._bundles[e]}_getPreferredOrder(e){for(let t=0;tr.params.format.includes(i.format));if(s)return s}return this._preferredOrder[0]}_appendDefaultSearchParams(e){if(!this._defaultSearchParams)return e;const t=/\?/.test(e)?"&":"?";return`${e}${t}${this._defaultSearchParams}`}buildResolvedAsset(e,t){const{aliases:i,data:s,loadParser:r,format:o}=t;return(this._basePath||this._rootPath)&&(e.src=hi.toAbsolute(e.src,this._basePath,this._rootPath)),e.alias=i??e.alias??[e.src],e.src=this._appendDefaultSearchParams(e.src),e.data={...s||{},...e.data},e.loadParser=r??e.loadParser,e.format=o??e.format??hi.extname(e.src).slice(1),e.srcs=e.src,e.name=e.alias,e}}class bR{constructor(){this._detections=[],this._initialized=!1,this.resolver=new vR,this.loader=new zk,this.cache=Co,this._backgroundLoader=new Vk(this.loader),this._backgroundLoader.active=!0,this.reset()}async init(e={}){var r,o;if(this._initialized){console.warn("[Assets]AssetManager already initialized, did you load before calling this Assets.init()?");return}if(this._initialized=!0,e.defaultSearchParams&&this.resolver.setDefaultSearchParams(e.defaultSearchParams),e.basePath&&(this.resolver.basePath=e.basePath),e.bundleIdentifier&&this.resolver.setBundleIdentifier(e.bundleIdentifier),e.manifest){let a=e.manifest;typeof a=="string"&&(a=await this.load(a)),this.resolver.addManifest(a)}const t=((r=e.texturePreference)==null?void 0:r.resolution)??1,i=typeof t=="number"?[t]:t,s=await this._detectFormats({preferredFormats:(o=e.texturePreference)==null?void 0:o.format,skipDetections:e.skipDetections,detections:this._detections});this.resolver.prefer({params:{format:s,resolution:i}}),e.preferences&&this.setPreferences(e.preferences)}add(e,t,i,s,r){this.resolver.add(e,t,i,s,r)}async load(e,t){this._initialized||await this.init();const i=tu(e),s=jn(e).map(a=>{if(typeof a!="string"){const c=this.resolver.getAlias(a);return c.some(l=>!this.resolver.hasKey(l))&&this.add(a),Array.isArray(c)?c[0]:c}return this.resolver.hasKey(a)||this.add({alias:a,src:a}),a}),r=this.resolver.resolve(s),o=await this._mapLoadToResolve(r,t);return i?o[s[0]]:o}addBundle(e,t){this.resolver.addBundle(e,t)}async loadBundle(e,t){this._initialized||await this.init();let i=!1;typeof e=="string"&&(i=!0,e=[e]);const s=this.resolver.resolveBundle(e),r={},o=Object.keys(s);let a=0,c=0;const l=()=>{t==null||t(++a/c)},d=o.map(u=>{const h=s[u];return c+=Object.keys(h).length,this._mapLoadToResolve(h,l).then(f=>{r[u]=f})});return await Promise.all(d),i?r[e[0]]:r}async backgroundLoad(e){this._initialized||await this.init(),typeof e=="string"&&(e=[e]);const t=this.resolver.resolve(e);this._backgroundLoader.add(Object.values(t))}async backgroundLoadBundle(e){this._initialized||await this.init(),typeof e=="string"&&(e=[e]);const t=this.resolver.resolveBundle(e);Object.values(t).forEach(i=>{this._backgroundLoader.add(Object.values(i))})}reset(){this.resolver.reset(),this.loader.reset(),this.cache.reset(),this._initialized=!1}get(e){if(typeof e=="string")return Co.get(e);const t={};for(let i=0;i{const l=r[a.src],d=[a.src];a.alias&&d.push(...a.alias),o[s[c]]=l,Co.set(d,l)}),o}async unload(e){this._initialized||await this.init();const t=jn(e).map(s=>typeof s!="string"?s.src:s),i=this.resolver.resolve(t);await this._unloadFromResolved(i)}async unloadBundle(e){this._initialized||await this.init(),e=jn(e);const t=this.resolver.resolveBundle(e),i=Object.keys(t).map(s=>this._unloadFromResolved(t[s]));await Promise.all(i)}async _unloadFromResolved(e){const t=Object.values(e);t.forEach(i=>{Co.remove(i.src)}),await this.loader.unload(t)}async _detectFormats(e){let t=[];e.preferredFormats&&(t=Array.isArray(e.preferredFormats)?e.preferredFormats:[e.preferredFormats]);for(const i of e.detections)e.skipDetections||await i.test()?t=await i.add(t):e.skipDetections||(t=await i.remove(t));return t=t.filter((i,s)=>t.indexOf(i)===s),t}get detections(){return this._detections}get preferWorkers(){return oh.config.preferWorkers}set preferWorkers(e){mt("7.2.0","Assets.prefersWorkers is deprecated, use Assets.setPreferences({ preferWorkers: true }) instead."),this.setPreferences({preferWorkers:e})}setPreferences(e){this.loader.parsers.forEach(t=>{t.config&&Object.keys(t.config).filter(i=>i in e).forEach(i=>{t.config[i]=e[i]})})}}const Ts=new bR;He.handleByList(Oe.LoadParser,Ts.loader.parsers).handleByList(Oe.ResolveParser,Ts.resolver.parsers).handleByList(Oe.CacheParser,Ts.cache.parsers).handleByList(Oe.DetectionParser,Ts.detections);const yR={extension:Oe.CacheParser,test:n=>Array.isArray(n)&&n.every(e=>e instanceof it),getCacheableAssets:(n,e)=>{const t={};return n.forEach(i=>{e.forEach((s,r)=>{t[i+(r===0?"":r+1)]=s})}),t}};He.add(yR);async function rS(n){if("Image"in globalThis)return new Promise(e=>{const t=new Image;t.onload=()=>{e(!0)},t.onerror=()=>{e(!1)},t.src=n});if("createImageBitmap"in globalThis&&"fetch"in globalThis){try{const e=await(await fetch(n)).blob();await createImageBitmap(e)}catch{return!1}return!0}return!1}const xR={extension:{type:Oe.DetectionParser,priority:1},test:async()=>rS("data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A="),add:async n=>[...n,"avif"],remove:async n=>n.filter(e=>e!=="avif")};He.add(xR);const wR={extension:{type:Oe.DetectionParser,priority:0},test:async()=>rS("data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA="),add:async n=>[...n,"webp"],remove:async n=>n.filter(e=>e!=="webp")};He.add(wR);const O0=["png","jpg","jpeg"],SR={extension:{type:Oe.DetectionParser,priority:-1},test:()=>Promise.resolve(!0),add:async n=>[...n,...O0],remove:async n=>n.filter(e=>!O0.includes(e))};He.add(SR);const CR="WorkerGlobalScope"in globalThis&&globalThis instanceof globalThis.WorkerGlobalScope;function Pg(n){return CR?!1:document.createElement("video").canPlayType(n)!==""}const AR={extension:{type:Oe.DetectionParser,priority:0},test:async()=>Pg("video/webm"),add:async n=>[...n,"webm"],remove:async n=>n.filter(e=>e!=="webm")};He.add(AR);const TR={extension:{type:Oe.DetectionParser,priority:0},test:async()=>Pg("video/mp4"),add:async n=>[...n,"mp4","m4v"],remove:async n=>n.filter(e=>e!=="mp4"&&e!=="m4v")};He.add(TR);const ER={extension:{type:Oe.DetectionParser,priority:0},test:async()=>Pg("video/ogg"),add:async n=>[...n,"ogv"],remove:async n=>n.filter(e=>e!=="ogv")};He.add(ER);const _R={extension:Oe.ResolveParser,test:oh.test,parse:n=>{var e;return{resolution:parseFloat(((e=Ve.RETINA_PREFIX.exec(n))==null?void 0:e[1])??"1"),format:hi.extname(n).slice(1),src:n}}};He.add(_R);var Ri=(n=>(n[n.COMPRESSED_RGB_S3TC_DXT1_EXT=33776]="COMPRESSED_RGB_S3TC_DXT1_EXT",n[n.COMPRESSED_RGBA_S3TC_DXT1_EXT=33777]="COMPRESSED_RGBA_S3TC_DXT1_EXT",n[n.COMPRESSED_RGBA_S3TC_DXT3_EXT=33778]="COMPRESSED_RGBA_S3TC_DXT3_EXT",n[n.COMPRESSED_RGBA_S3TC_DXT5_EXT=33779]="COMPRESSED_RGBA_S3TC_DXT5_EXT",n[n.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT=35917]="COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT",n[n.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT=35918]="COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT",n[n.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT=35919]="COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT",n[n.COMPRESSED_SRGB_S3TC_DXT1_EXT=35916]="COMPRESSED_SRGB_S3TC_DXT1_EXT",n[n.COMPRESSED_R11_EAC=37488]="COMPRESSED_R11_EAC",n[n.COMPRESSED_SIGNED_R11_EAC=37489]="COMPRESSED_SIGNED_R11_EAC",n[n.COMPRESSED_RG11_EAC=37490]="COMPRESSED_RG11_EAC",n[n.COMPRESSED_SIGNED_RG11_EAC=37491]="COMPRESSED_SIGNED_RG11_EAC",n[n.COMPRESSED_RGB8_ETC2=37492]="COMPRESSED_RGB8_ETC2",n[n.COMPRESSED_RGBA8_ETC2_EAC=37496]="COMPRESSED_RGBA8_ETC2_EAC",n[n.COMPRESSED_SRGB8_ETC2=37493]="COMPRESSED_SRGB8_ETC2",n[n.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC=37497]="COMPRESSED_SRGB8_ALPHA8_ETC2_EAC",n[n.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2=37494]="COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2",n[n.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2=37495]="COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2",n[n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG=35840]="COMPRESSED_RGB_PVRTC_4BPPV1_IMG",n[n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG=35842]="COMPRESSED_RGBA_PVRTC_4BPPV1_IMG",n[n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG=35841]="COMPRESSED_RGB_PVRTC_2BPPV1_IMG",n[n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG=35843]="COMPRESSED_RGBA_PVRTC_2BPPV1_IMG",n[n.COMPRESSED_RGB_ETC1_WEBGL=36196]="COMPRESSED_RGB_ETC1_WEBGL",n[n.COMPRESSED_RGB_ATC_WEBGL=35986]="COMPRESSED_RGB_ATC_WEBGL",n[n.COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL=35987]="COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL",n[n.COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL=34798]="COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL",n[n.COMPRESSED_RGBA_ASTC_4x4_KHR=37808]="COMPRESSED_RGBA_ASTC_4x4_KHR",n[n.COMPRESSED_RGBA_BPTC_UNORM_EXT=36492]="COMPRESSED_RGBA_BPTC_UNORM_EXT",n[n.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT=36493]="COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT",n[n.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT=36494]="COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT",n[n.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT=36495]="COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT",n))(Ri||{});const iu={33776:.5,33777:.5,33778:1,33779:1,35916:.5,35917:.5,35918:1,35919:1,37488:.5,37489:.5,37490:1,37491:1,37492:.5,37496:1,37493:.5,37497:1,37494:.5,37495:.5,35840:.5,35842:.5,35841:.25,35843:.25,36196:.5,35986:.5,35987:1,34798:1,37808:1,36492:1,36493:1,36494:1,36495:1};let ls,ga;function N0(){ga={bptc:ls.getExtension("EXT_texture_compression_bptc"),astc:ls.getExtension("WEBGL_compressed_texture_astc"),etc:ls.getExtension("WEBGL_compressed_texture_etc"),s3tc:ls.getExtension("WEBGL_compressed_texture_s3tc"),s3tc_sRGB:ls.getExtension("WEBGL_compressed_texture_s3tc_srgb"),pvrtc:ls.getExtension("WEBGL_compressed_texture_pvrtc")||ls.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc"),etc1:ls.getExtension("WEBGL_compressed_texture_etc1"),atc:ls.getExtension("WEBGL_compressed_texture_atc")}}const MR={extension:{type:Oe.DetectionParser,priority:2},test:async()=>{const n=Ve.ADAPTER.createCanvas().getContext("webgl");return n?(ls=n,!0):(console.warn("WebGL not available for compressed textures."),!1)},add:async n=>{ga||N0();const e=[];for(const t in ga)ga[t]&&e.push(t);return[...e,...n]},remove:async n=>(ga||N0(),n.filter(e=>!(e in ga)))};He.add(MR);class PR extends th{constructor(e,t={width:1,height:1,autoLoad:!0}){let i,s;typeof e=="string"?(i=e,s=new Uint8Array):(i=null,s=e),super(s,t),this.origin=i,this.buffer=s?new Vp(s):null,this._load=null,this.loaded=!1,this.origin!==null&&t.autoLoad!==!1&&this.load(),this.origin===null&&this.buffer&&(this._load=Promise.resolve(this),this.loaded=!0,this.onBlobLoaded(this.buffer.rawBinaryData))}onBlobLoaded(e){}load(){return this._load?this._load:(this._load=fetch(this.origin).then(e=>e.blob()).then(e=>e.arrayBuffer()).then(e=>(this.data=new Uint32Array(e),this.buffer=new Vp(e),this.loaded=!0,this.onBlobLoaded(e),this.update(),this)),this._load)}}class Do extends PR{constructor(e,t){super(e,t),this.format=t.format,this.levels=t.levels||1,this._width=t.width,this._height=t.height,this._extension=Do._formatToExtension(this.format),(t.levelBuffers||this.buffer)&&(this._levelBuffers=t.levelBuffers||Do._createLevelBuffers(e instanceof Uint8Array?e:this.buffer.uint8View,this.format,this.levels,4,4,this.width,this.height))}upload(e,t,i){const s=e.gl;if(!e.context.extensions[this._extension])throw new Error(`${this._extension} textures are not supported on the current machine`);if(!this._levelBuffers)return!1;s.pixelStorei(s.UNPACK_ALIGNMENT,4);for(let r=0,o=this.levels;r=33776&&e<=33779)return"s3tc";if(e>=35916&&e<=35919)return"s3tc_sRGB";if(e>=37488&&e<=37497)return"etc";if(e>=35840&&e<=35843)return"pvrtc";if(e===36196)return"etc1";if(e===35986||e===35987||e===34798)return"atc";if(e>=36492&&e<=36495)return"bptc";if(e===37808)return"astc";throw new Error(`Invalid (compressed) texture format given: ${e}`)}static _createLevelBuffers(e,t,i,s,r,o,a){const c=new Array(i);let l=e.byteOffset,d=o,u=a,h=d+s-1&~(s-1),f=u+r-1&~(r-1),p=h*f*iu[t];for(let m=0;m1?d:h,levelHeight:i>1?u:f,levelBuffer:new Uint8Array(e.buffer,l,p)},l+=p,d=d>>1||1,u=u>>1||1,h=d+s-1&~(s-1),f=u+r-1&~(r-1),p=h*f*iu[t];return c}}const Wf=4,jc=124,IR=32,$0=20,kR=542327876,Hc={HEIGHT:3,WIDTH:4,MIPMAP_COUNT:7,PIXEL_FORMAT:19},RR={FOURCC:2},Gc={DXGI_FORMAT:0,RESOURCE_DIMENSION:1,MISC_FLAG:2,ARRAY_SIZE:3},FR=1,LR=2,DR=4,OR=64,NR=512,$R=131072,BR=827611204,UR=861165636,VR=894720068,XR=808540228,YR=4,zR={[BR]:Ri.COMPRESSED_RGBA_S3TC_DXT1_EXT,[UR]:Ri.COMPRESSED_RGBA_S3TC_DXT3_EXT,[VR]:Ri.COMPRESSED_RGBA_S3TC_DXT5_EXT},jR={70:Ri.COMPRESSED_RGBA_S3TC_DXT1_EXT,71:Ri.COMPRESSED_RGBA_S3TC_DXT1_EXT,73:Ri.COMPRESSED_RGBA_S3TC_DXT3_EXT,74:Ri.COMPRESSED_RGBA_S3TC_DXT3_EXT,76:Ri.COMPRESSED_RGBA_S3TC_DXT5_EXT,77:Ri.COMPRESSED_RGBA_S3TC_DXT5_EXT,72:Ri.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT,75:Ri.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT,78:Ri.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT,96:Ri.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT,95:Ri.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT,98:Ri.COMPRESSED_RGBA_BPTC_UNORM_EXT,99:Ri.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT};function HR(n){const e=new Uint32Array(n);if(e[0]!==kR)throw new Error("Invalid DDS file magic word");const t=new Uint32Array(n,0,jc/Uint32Array.BYTES_PER_ELEMENT),i=t[Hc.HEIGHT],s=t[Hc.WIDTH],r=t[Hc.MIPMAP_COUNT],o=new Uint32Array(n,Hc.PIXEL_FORMAT*Uint32Array.BYTES_PER_ELEMENT,IR/Uint32Array.BYTES_PER_ELEMENT),a=o[FR];if(a&DR){const c=o[RR.FOURCC];if(c!==XR){const y=zR[c],b=Wf+jc,w=new Uint8Array(n,b);return[new Do(w,{format:y,width:s,height:i,levels:r})]}const l=Wf+jc,d=new Uint32Array(e.buffer,l,$0/Uint32Array.BYTES_PER_ELEMENT),u=d[Gc.DXGI_FORMAT],h=d[Gc.RESOURCE_DIMENSION],f=d[Gc.MISC_FLAG],p=d[Gc.ARRAY_SIZE],m=jR[u];if(m===void 0)throw new Error(`DDSParser cannot parse texture data with DXGI format ${u}`);if(f===YR)throw new Error("DDSParser does not support cubemap textures");if(h===6)throw new Error("DDSParser does not supported 3D texture data");const g=new Array,v=Wf+jc+$0;if(p===1)g.push(new Uint8Array(n,v));else{const y=iu[m];let b=0,w=s,C=i;for(let S=0;S>>1,C=C>>>1}let T=v;for(let S=0;Snew Do(y,{format:m,width:s,height:i,levels:r}))}throw a&OR?new Error("DDSParser does not support uncompressed texture data."):a&NR?new Error("DDSParser does not supported YUV uncompressed texture data."):a&$R?new Error("DDSParser does not support single-channel (lumninance) texture data!"):a&LR?new Error("DDSParser does not support single-channel (alpha) texture data!"):new Error("DDSParser failed to load a texture file due to an unknown reason!")}const B0=[171,75,84,88,32,49,49,187,13,10,26,10],GR=67305985,Un={ENDIANNESS:12,GL_TYPE:16,GL_FORMAT:24,GL_INTERNAL_FORMAT:28,PIXEL_WIDTH:36,PIXEL_HEIGHT:40,PIXEL_DEPTH:44,NUMBER_OF_ARRAY_ELEMENTS:48,NUMBER_OF_FACES:52,NUMBER_OF_MIPMAP_LEVELS:56,BYTES_OF_KEY_VALUE_DATA:60},um=64,U0={[je.UNSIGNED_BYTE]:1,[je.UNSIGNED_SHORT]:2,[je.INT]:4,[je.UNSIGNED_INT]:4,[je.FLOAT]:4,[je.HALF_FLOAT]:8},WR={[Pe.RGBA]:4,[Pe.RGB]:3,[Pe.RG]:2,[Pe.RED]:1,[Pe.LUMINANCE]:1,[Pe.LUMINANCE_ALPHA]:2,[Pe.ALPHA]:1},qR={[je.UNSIGNED_SHORT_4_4_4_4]:2,[je.UNSIGNED_SHORT_5_5_5_1]:2,[je.UNSIGNED_SHORT_5_6_5]:2};function KR(n,e,t=!1){const i=new DataView(e);if(!JR(n,i))return null;const s=i.getUint32(Un.ENDIANNESS,!0)===GR,r=i.getUint32(Un.GL_TYPE,s),o=i.getUint32(Un.GL_FORMAT,s),a=i.getUint32(Un.GL_INTERNAL_FORMAT,s),c=i.getUint32(Un.PIXEL_WIDTH,s),l=i.getUint32(Un.PIXEL_HEIGHT,s)||1,d=i.getUint32(Un.PIXEL_DEPTH,s)||1,u=i.getUint32(Un.NUMBER_OF_ARRAY_ELEMENTS,s)||1,h=i.getUint32(Un.NUMBER_OF_FACES,s),f=i.getUint32(Un.NUMBER_OF_MIPMAP_LEVELS,s),p=i.getUint32(Un.BYTES_OF_KEY_VALUE_DATA,s);if(l===0||d!==1)throw new Error("Only 2D textures are supported");if(h!==1)throw new Error("CubeTextures are not supported by KTXLoader yet!");if(u!==1)throw new Error("WebGL does not support array textures");const m=4,g=4,v=c+3&-4,y=l+3&-4,b=new Array(u);let w=c*l;r===0&&(w=v*y);let C;if(r!==0?U0[r]?C=U0[r]*WR[o]:C=qR[r]:C=iu[a],C===void 0)throw new Error("Unable to resolve the pixel format stored in the *.ktx file!");const T=t?QR(i,p,s):null;let S=w*C,E=c,_=l,I=v,M=y,k=um+p;for(let B=0;B1||r!==0?E:I,levelHeight:f>1||r!==0?_:M,levelBuffer:new Uint8Array(e,G,S)},G+=S}k+=D+4,k=k%4!==0?k+4-k%4:k,E=E>>1||1,_=_>>1||1,I=E+m-1&-4,M=_+g-1&-4,S=I*M*C}return r!==0?{uncompressed:b.map(B=>{let D=B[0].levelBuffer,G=!1;return r===je.FLOAT?D=new Float32Array(B[0].levelBuffer.buffer,B[0].levelBuffer.byteOffset,B[0].levelBuffer.byteLength/4):r===je.UNSIGNED_INT?(G=!0,D=new Uint32Array(B[0].levelBuffer.buffer,B[0].levelBuffer.byteOffset,B[0].levelBuffer.byteLength/4)):r===je.INT&&(G=!0,D=new Int32Array(B[0].levelBuffer.buffer,B[0].levelBuffer.byteOffset,B[0].levelBuffer.byteLength/4)),{resource:new th(D,{width:B[0].levelWidth,height:B[0].levelHeight}),type:r,format:G?ZR(o):o}}),kvData:T}:{compressed:b.map(B=>new Do(null,{format:a,width:c,height:l,levels:f,levelBuffers:B})),kvData:T}}function JR(n,e){for(let t=0;te-s){console.error("KTXLoader: keyAndValueByteSize out of bounds");break}let c=0;for(;c{const o=new rt(r,{mipmap:On.OFF,alphaMode:ki.NO_PREMULTIPLIED_ALPHA,resolution:fr(n),...e.data});return vc(o,t,n)});return s.length===1?s[0]:s},unload(n){Array.isArray(n)?n.forEach(e=>e.destroy(!0)):n.destroy(!0)}};He.add(e2);const t2={extension:{type:Oe.LoadParser,priority:Cn.High},name:"loadKTX",test(n){return un(n,".ktx")},async load(n,e,t){const i=await(await Ve.ADAPTER.fetch(n)).arrayBuffer(),{compressed:s,uncompressed:r,kvData:o}=KR(n,i),a=s??r,c={mipmap:On.OFF,alphaMode:ki.NO_PREMULTIPLIED_ALPHA,resolution:fr(n),...e.data},l=a.map(d=>{a===r&&Object.assign(c,{type:d.type,format:d.format});const u=d.resource??d,h=new rt(u,c);return h.ktxKeyValueData=o,vc(h,t,n)});return l.length===1?l[0]:l},unload(n){Array.isArray(n)?n.forEach(e=>e.destroy(!0)):n.destroy(!0)}};He.add(t2);const i2=["s3tc","s3tc_sRGB","etc","etc1","pvrtc","atc","astc","bptc"],n2={extension:Oe.ResolveParser,test:n=>{const e=hi.extname(n).slice(1);return["basis","ktx","dds"].includes(e)},parse:n=>{var i,s;const e=n.split("."),t=e.pop();if(["ktx","dds"].includes(t)){const r=e.pop();if(i2.includes(r))return{resolution:parseFloat(((i=Ve.RETINA_PREFIX.exec(n))==null?void 0:i[1])??"1"),format:r,src:n}}return{resolution:parseFloat(((s=Ve.RETINA_PREFIX.exec(n))==null?void 0:s[1])??"1"),format:t,src:n}}};He.add(n2);const Wc=new ht,s2=4,oS=class Al{constructor(e){this.renderer=e,this._rendererPremultipliedAlpha=!1}contextChange(){var t;const e=(t=this.renderer)==null?void 0:t.gl.getContextAttributes();this._rendererPremultipliedAlpha=!!(e&&e.alpha&&e.premultipliedAlpha)}async image(e,t,i,s){const r=new Image;return r.src=await this.base64(e,t,i,s),r}async base64(e,t,i,s){const r=this.canvas(e,s);if(r.toBlob!==void 0)return new Promise((o,a)=>{r.toBlob(c=>{if(!c){a(new Error("ICanvas.toBlob failed!"));return}const l=new FileReader;l.onload=()=>o(l.result),l.onerror=a,l.readAsDataURL(c)},t,i)});if(r.toDataURL!==void 0)return r.toDataURL(t,i);if(r.convertToBlob!==void 0){const o=await r.convertToBlob({type:t,quality:i});return new Promise((a,c)=>{const l=new FileReader;l.onload=()=>a(l.result),l.onerror=c,l.readAsDataURL(o)})}throw new Error("Extract.base64() requires ICanvas.toDataURL, ICanvas.toBlob, or ICanvas.convertToBlob to be implemented")}canvas(e,t){const{pixels:i,width:s,height:r,flipY:o,premultipliedAlpha:a}=this._rawPixels(e,t);o&&Al._flipY(i,s,r),a&&Al._unpremultiplyAlpha(i);const c=new BP(s,r,1),l=new ImageData(new Uint8ClampedArray(i.buffer),s,r);return c.context.putImageData(l,0,0),c.canvas}pixels(e,t){const{pixels:i,width:s,height:r,flipY:o,premultipliedAlpha:a}=this._rawPixels(e,t);return o&&Al._flipY(i,s,r),a&&Al._unpremultiplyAlpha(i),i}_rawPixels(e,t){const i=this.renderer;if(!i)throw new Error("The Extract has already been destroyed");let s,r=!1,o=!1,a,c=!1;e&&(e instanceof Ho?a=e:(a=i.generateTexture(e,{region:t,resolution:i.resolution,multisample:i.multisample}),c=!0,t&&(Wc.width=t.width,Wc.height=t.height,t=Wc)));const l=i.gl;if(a){if(s=a.baseTexture.resolution,t=t??a.frame,r=!1,o=a.baseTexture.alphaMode>0&&a.baseTexture.format===Pe.RGBA,!c){i.renderTexture.bind(a);const f=a.framebuffer.glFramebuffers[i.CONTEXT_UID];f.blitFramebuffer&&i.framebuffer.bind(f.blitFramebuffer)}}else s=i.resolution,t||(t=Wc,t.width=i.width/s,t.height=i.height/s),r=!0,o=this._rendererPremultipliedAlpha,i.renderTexture.bind();const d=Math.max(Math.round(t.width*s),1),u=Math.max(Math.round(t.height*s),1),h=new Uint8Array(s2*d*u);return l.readPixels(Math.round(t.x*s),Math.round(t.y*s),d,u,l.RGBA,l.UNSIGNED_BYTE,h),c&&(a==null||a.destroy(!0)),{pixels:h,width:d,height:u,flipY:r,premultipliedAlpha:o}}destroy(){this.renderer=null}static _flipY(e,t,i){const s=t<<2,r=i>>1,o=new Uint8Array(s);for(let a=0;a=0&&a>=0&&s>=0&&r>=0)){e.length=0;return}const c=Math.ceil(2.3*Math.sqrt(o+a)),l=c*8+(s?4:0)+(r?4:0);if(e.length=l,l===0)return;if(c===0){e.length=8,e[0]=e[6]=t+s,e[1]=e[3]=i+r,e[2]=e[4]=t-s,e[5]=e[7]=i-r;return}let d=0,u=c*4+(s?2:0)+2,h=u,f=l;{const p=s+o,m=r,g=t+p,v=t-p,y=i+m;if(e[d++]=g,e[d++]=y,e[--u]=y,e[--u]=v,r){const b=i-m;e[h++]=v,e[h++]=b,e[--f]=b,e[--f]=g}}for(let p=1;p0||e&&i<=0){const s=t/2;for(let r=s+s%2;r=6){V0(t,!1);const o=[];for(let l=0;l=0&&r>=0&&o.push(t,i,t+s,i,t+s,i+r,t,i+r)},triangulate(n,e){const t=n.points,i=e.points;if(t.length===0)return;const s=i.length/2;i.push(t[0],t[1],t[2],t[3],t[6],t[7],t[4],t[5]),e.indices.push(s,s+1,s+2,s+1,s+2,s+3)}},a2={build(n){nu.build(n)},triangulate(n,e){nu.triangulate(n,e)}};var Mn=(n=>(n.MITER="miter",n.BEVEL="bevel",n.ROUND="round",n))(Mn||{}),Xr=(n=>(n.BUTT="butt",n.ROUND="round",n.SQUARE="square",n))(Xr||{});const Va={adaptive:!0,maxLength:10,minSegments:8,maxSegments:2048,epsilon:1e-4,_segmentsCount(n,e=20){if(!this.adaptive||!n||isNaN(n))return e;let t=Math.ceil(n/this.maxLength);return tthis.maxSegments&&(t=this.maxSegments),t}};class X0{static curveTo(e,t,i,s,r,o){const a=o[o.length-2],c=o[o.length-1]-t,l=a-e,d=s-t,u=i-e,h=Math.abs(c*u-l*d);if(h<1e-8||r===0)return(o[o.length-2]!==e||o[o.length-1]!==t)&&o.push(e,t),null;const f=c*c+l*l,p=d*d+u*u,m=c*d+l*u,g=r*Math.sqrt(f)/h,v=r*Math.sqrt(p)/h,y=g*m/f,b=v*m/p,w=g*u+v*l,C=g*d+v*c,T=l*(v+y),S=c*(v+y),E=u*(g+b),_=d*(g+b),I=Math.atan2(S-C,T-w),M=Math.atan2(_-C,E-w);return{cx:w+e,cy:C+t,radius:r,startAngle:I,endAngle:M,anticlockwise:l*d>u*c}}static arc(e,t,i,s,r,o,a,c,l){const d=a-o,u=Va._segmentsCount(Math.abs(d)*r,Math.ceil(Math.abs(d)/Wd)*40),h=d/(u*2),f=h*2,p=Math.cos(h),m=Math.sin(h),g=u-1,v=g%1/g;for(let y=0;y<=g;++y){const b=y+v*y,w=h+o+f*b,C=Math.cos(w),T=-Math.sin(w);l.push((p*C+m*T)*r+i,(p*-T+m*C)*r+s)}}}class l2{constructor(){this.reset()}begin(e,t,i){this.reset(),this.style=e,this.start=t,this.attribStart=i}end(e,t){this.attribSize=t-this.attribStart,this.size=e-this.start}reset(){this.style=null,this.size=0,this.start=0,this.attribStart=0,this.attribSize=0}}class Ig{static curveLength(e,t,i,s,r,o,a,c){let l=0,d=0,u=0,h=0,f=0,p=0,m=0,g=0,v=0,y=0,b=0,w=e,C=t;for(let T=1;T<=10;++T)d=T/10,u=d*d,h=u*d,f=1-d,p=f*f,m=p*f,g=m*e+3*p*d*i+3*f*u*r+h*a,v=m*t+3*p*d*s+3*f*u*o+h*c,y=w-g,b=C-v,w=g,C=v,l+=Math.sqrt(y*y+b*b);return l}static curveTo(e,t,i,s,r,o,a){const c=a[a.length-2],l=a[a.length-1];a.length-=2;const d=Va._segmentsCount(Ig.curveLength(c,l,e,t,i,s,r,o));let u=0,h=0,f=0,p=0,m=0;a.push(c,l);for(let g=1,v=0;g<=d;++g)v=g/d,u=1-v,h=u*u,f=h*u,p=v*v,m=p*v,a.push(f*c+3*h*v*e+3*u*p*i+m*r,f*l+3*h*v*t+3*u*p*s+m*o)}}function Y0(n,e,t,i,s,r,o,a){const c=n-t*s,l=e-i*s,d=n+t*r,u=e+i*r;let h,f;o?(h=i,f=-t):(h=-i,f=t);const p=c+h,m=l+f,g=d+h,v=u+f;return a.push(p,m,g,v),2}function po(n,e,t,i,s,r,o,a){const c=t-n,l=i-e;let d=Math.atan2(c,l),u=Math.atan2(s-n,r-e);a&&du&&(u+=Math.PI*2);let h=d;const f=u-d,p=Math.abs(f),m=Math.sqrt(c*c+l*l),g=(15*p*Math.sqrt(m)/Math.PI>>0)+1,v=f/g;if(h+=v,a){o.push(n,e,t,i);for(let y=1,b=h;y=0&&(r.join===Mn.ROUND?h+=po(b,w,b-S*B,w-E*B,b-_*B,w-I*B,d,!1)+4:h+=2,d.push(b-_*D,w-I*D,b+_*B,w+I*B));continue}const J=(-S+v)*(-E+w)-(-S+b)*(-E+y),oe=(-_+C)*(-I+w)-(-_+b)*(-I+T),le=(L*oe-F*J)/z,ve=($*J-N*oe)/z,Se=(le-b)*(le-b)+(ve-w)*(ve-w),fe=b+(le-b)*B,be=w+(ve-w)*B,q=b-(le-b)*D,Z=w-(ve-w)*D,se=Math.min(L*L+N*N,F*F+$*$),j=K?B:D,H=se+j*j*m,O=Se<=H;let U=r.join;if(U===Mn.MITER&&Se/m>g&&(U=Mn.BEVEL),O)switch(U){case Mn.MITER:{d.push(fe,be,q,Z);break}case Mn.BEVEL:{K?d.push(fe,be,b+S*D,w+E*D,fe,be,b+_*D,w+I*D):d.push(b-S*B,w-E*B,q,Z,b-_*B,w-I*B,q,Z),h+=2;break}case Mn.ROUND:{K?(d.push(fe,be,b+S*D,w+E*D),h+=po(b,w,b+S*D,w+E*D,b+_*D,w+I*D,d,!0)+4,d.push(fe,be,b+_*D,w+I*D)):(d.push(b-S*B,w-E*B,q,Z),h+=po(b,w,b-S*B,w-E*B,b-_*B,w-I*B,d,!1)+4,d.push(b-_*B,w-I*B,q,Z));break}}else{switch(d.push(b-S*B,w-E*B,b+S*D,w+E*D),U){case Mn.MITER:{K?d.push(q,Z,q,Z):d.push(fe,be,fe,be),h+=2;break}case Mn.ROUND:{K?h+=po(b,w,b+S*D,w+E*D,b+_*D,w+I*D,d,!0)+2:h+=po(b,w,b-S*B,w-E*B,b-_*B,w-I*B,d,!1)+2;break}}d.push(b-_*B,w-I*B,b+_*D,w+I*D),h+=2}}v=i[(u-2)*2],y=i[(u-2)*2+1],b=i[(u-1)*2],w=i[(u-1)*2+1],S=-(y-w),E=v-b,M=Math.sqrt(S*S+E*E),S/=M,E/=M,S*=p,E*=p,d.push(b-S*B,w-E*B,b+S*D,w+E*D),c||(r.cap===Xr.ROUND?h+=po(b-S*(B-D)*.5,w-E*(B-D)*.5,b-S*B,w-E*B,b+S*D,w+E*D,d,!1)+2:r.cap===Xr.SQUARE&&(h+=Y0(b,w,S,E,B,D,!1,d)));const G=e.indices,V=Va.epsilon*Va.epsilon;for(let Y=f;Y0&&(this.invalidate(),this.clearDirty++,this.graphicsData.length=0),this}drawShape(e,t=null,i=null,s=null){const r=new su(e,t,i,s);return this.graphicsData.push(r),this.dirty++,this}drawHole(e,t=null){if(!this.graphicsData.length)return null;const i=new su(e,null,null,t),s=this.graphicsData[this.graphicsData.length-1];return i.lineStyle=s.lineStyle,s.holes.push(i),this.dirty++,this}destroy(){super.destroy();for(let e=0;e0&&(i=this.batches[this.batches.length-1],s=i.style);for(let c=this.shapeIndex;c65535;this.indicesUint16&&this.indices.length===this.indicesUint16.length&&a===this.indicesUint16.BYTES_PER_ELEMENT>2?this.indicesUint16.set(this.indices):this.indicesUint16=a?new Uint32Array(this.indices):new Uint16Array(this.indices),this.batchable=this.isBatchable(),this.batchable?this.packBatches():this.buildDrawCalls()}_compareStyles(e,t){return!(!e||!t||e.texture.baseTexture!==t.texture.baseTexture||e.color+e.alpha!==t.color+t.alpha||!!e.native!=!!t.native)}validateBatching(){if(this.dirty===this.cacheDirty||!this.graphicsData.length)return!1;for(let e=0,t=this.graphicsData.length;e65535*2)return!1;const e=this.batches;for(let t=0;t0&&(s=qc.pop(),s||(s=new zp,s.texArray=new Wp),this.drawCalls.push(s)),s.start=d,s.size=0,s.texArray.count=0,s.type=l),m.touched=1,m._batchEnabled=e,m._batchLocation=r,m.wrapMode=Jn.REPEAT,s.texArray.elements[s.texArray.count++]=m,r++)),s.size+=h.size,d+=h.size,a=m._batchLocation,this.addColors(t,p.color,p.alpha,h.attribSize,h.attribStart),this.addTextureIds(i,a,h.attribSize,h.attribStart)}rt._globalBatch=e,this.packAttributes()}packAttributes(){const e=this.points,t=this.uvs,i=this.colors,s=this.textureIds,r=new ArrayBuffer(e.length*3*4),o=new Float32Array(r),a=new Uint32Array(r);let c=0;for(let l=0;l0&&e.alpha>0;return i?(e.matrix&&(e.matrix=e.matrix.clone(),e.matrix.invert()),Object.assign(this._lineStyle,{visible:i},e)):this._lineStyle.reset(),this}startPoly(){if(this.currentPath){const e=this.currentPath.points,t=this.currentPath.points.length;t>2&&(this.drawShape(this.currentPath),this.currentPath=new Lo,this.currentPath.closeStroke=!1,this.currentPath.points.push(e[t-2],e[t-1]))}else this.currentPath=new Lo,this.currentPath.closeStroke=!1}finishPoly(){this.currentPath&&(this.currentPath.points.length>2?(this.drawShape(this.currentPath),this.currentPath=null):this.currentPath.points.length=0)}moveTo(e,t){return this.startPoly(),this.currentPath.points[0]=e,this.currentPath.points[1]=t,this}lineTo(e,t){this.currentPath||this.moveTo(0,0);const i=this.currentPath.points,s=i[i.length-2],r=i[i.length-1];return(s!==e||r!==t)&&i.push(e,t),this}_initCurve(e=0,t=0){this.currentPath?this.currentPath.points.length===0&&(this.currentPath.points=[e,t]):this.moveTo(e,t)}quadraticCurveTo(e,t,i,s){this._initCurve();const r=this.currentPath.points;return r.length===0&&this.moveTo(0,0),kg.curveTo(e,t,i,s,r),this}bezierCurveTo(e,t,i,s,r,o){return this._initCurve(),Ig.curveTo(e,t,i,s,r,o,this.currentPath.points),this}arcTo(e,t,i,s,r){this._initCurve(e,t);const o=this.currentPath.points,a=X0.curveTo(e,t,i,s,r,o);if(a){const{cx:c,cy:l,radius:d,startAngle:u,endAngle:h,anticlockwise:f}=a;this.arc(c,l,d,u,h,f)}return this}arc(e,t,i,s,r,o=!1){if(s===r)return this;if(!o&&r<=s?r+=Wd:o&&s<=r&&(s+=Wd),r-s===0)return this;const a=e+Math.cos(s)*i,c=t+Math.sin(s)*i,l=this._geometry.closePointEps;let d=this.currentPath?this.currentPath.points:null;if(d){const u=Math.abs(d[d.length-2]-a),h=Math.abs(d[d.length-1]-c);u0;return i?(e.matrix&&(e.matrix=e.matrix.clone(),e.matrix.invert()),Object.assign(this._fillStyle,{visible:i},e)):this._fillStyle.reset(),this}endFill(){return this.finishPoly(),this._fillStyle.reset(),this}drawRect(e,t,i,s){return this.drawShape(new ht(e,t,i,s))}drawRoundedRect(e,t,i,s,r){return this.drawShape(new sh(e,t,i,s,r))}drawCircle(e,t,i){return this.drawShape(new ih(e,t,i))}drawEllipse(e,t,i,s){return this.drawShape(new nh(e,t,i,s))}drawPolygon(...e){let t,i=!0;const s=e[0];s.points?(i=s.closeStroke,t=s.points):Array.isArray(e[0])?t=e[0]:t=e;const r=new Lo(t);return r.closeStroke=i,this.drawShape(r),this}drawShape(e){return this._holeMode?this._geometry.drawHole(e,this._matrix):this._geometry.drawShape(e,this._fillStyle.clone(),this._lineStyle.clone(),this._matrix),this}clear(){return this._geometry.clear(),this._lineStyle.reset(),this._fillStyle.reset(),this._boundsID++,this._matrix=null,this._holeMode=!1,this.currentPath=null,this}isFastRect(){const e=this._geometry.graphicsData;return e.length===1&&e[0].shape.type===Ni.RECT&&!e[0].matrix&&!e[0].holes.length&&!(e[0].lineStyle.visible&&e[0].lineStyle.width)}_render(e){this.finishPoly();const t=this._geometry;t.updateBatches(),t.batchable?(this.batchDirty!==t.batchDirty&&this._populateBatches(),this._renderBatched(e)):(e.batch.flush(),this._renderDirect(e))}_populateBatches(){const e=this._geometry,t=this.blendMode,i=e.batches.length;this.batchTint=-1,this._transformID=-1,this.batchDirty=e.batchDirty,this.batches.length=i,this.vertexData=new Float32Array(e.points);for(let s=0;si&&!e.autoResize&&(o=i);let a=e._buffers;a||(a=e._buffers=this.generateBuffers(e));const c=t[0]._texture.baseTexture,l=c.alphaMode>0;this.state.blendMode=dw(e.blendMode,l),r.state.set(this.state);const d=r.gl,u=e.worldTransform.copyTo(this.tempMatrix);u.prepend(r.globalUniforms.uniforms.projectionMatrix),this.shader.uniforms.translationMatrix=u.toArray(!0),this.shader.uniforms.uColor=Rt.shared.setValue(e.tintRgb).premultiply(e.worldAlpha,l).toArray(this.shader.uniforms.uColor),this.shader.uniforms.uSampler=c,this.renderer.shader.bind(this.shader);let h=!1;for(let f=0,p=0;fs&&(m=s),p>=a.length&&a.push(this._generateOneMoreBuffer(e));const g=a[p];g.uploadDynamic(t,f,m);const v=e._bufferUpdateIDs[p]||0;h=h||g._updateID0);s[o]=l,s[o+r]=l,s[o+r*2]=l,s[o+r*3]=l,o+=r*4}}destroy(){super.destroy(),this.shader&&(this.shader.destroy(),this.shader=null),this.tempMatrix=null}}hS.extension={name:"particle",type:Oe.RendererPlugin};He.add(hS);var lh=(n=>(n[n.LINEAR_VERTICAL=0]="LINEAR_VERTICAL",n[n.LINEAR_HORIZONTAL=1]="LINEAR_HORIZONTAL",n))(lh||{});const Kc={willReadFrequently:!0},cs=class qe{static get experimentalLetterSpacingSupported(){let e=qe._experimentalLetterSpacingSupported;if(e!==void 0){const t=Ve.ADAPTER.getCanvasRenderingContext2D().prototype;e=qe._experimentalLetterSpacingSupported="letterSpacing"in t||"textLetterSpacing"in t}return e}constructor(e,t,i,s,r,o,a,c,l){this.text=e,this.style=t,this.width=i,this.height=s,this.lines=r,this.lineWidths=o,this.lineHeight=a,this.maxLineWidth=c,this.fontProperties=l}static measureText(e,t,i,s=qe._canvas){i=i??t.wordWrap;const r=t.toFontString(),o=qe.measureFont(r);o.fontSize===0&&(o.fontSize=t.fontSize,o.ascent=t.fontSize);const a=s.getContext("2d",Kc);a.font=r;const c=(i?qe.wordWrap(e,t,s):e).split(/(?:\r\n|\r|\n)/),l=new Array(c.length);let d=0;for(let p=0;p0&&(s?r-=t:r+=(qe.graphemeSegmenter(e).length-1)*t),r}static wordWrap(e,t,i=qe._canvas){const s=i.getContext("2d",Kc);let r=0,o="",a="";const c=Object.create(null),{letterSpacing:l,whiteSpace:d}=t,u=qe.collapseSpaces(d),h=qe.collapseNewlines(d);let f=!u;const p=t.wordWrapWidth+l,m=qe.tokenize(e);for(let g=0;gp)if(o!==""&&(a+=qe.addLine(o),o="",r=0),qe.canBreakWords(v,t.breakWords)){const b=qe.wordWrapSplit(v);for(let x=0;xp&&(a+=qe.addLine(o),f=!1,o="",r=0),o+=C,r+=E}}else{o.length>0&&(a+=qe.addLine(o),o="",r=0);const b=g===m.length-1;a+=qe.addLine(v,!b),f=!1,o="",r=0}else y+r>p&&(f=!1,a+=qe.addLine(o),o="",r=0),(o.length>0||!qe.isBreakingSpace(v)||f)&&(o+=v,r+=y)}return a+=qe.addLine(o,!1),a}static addLine(e,t=!0){return e=qe.trimRight(e),e=t?`${e} -`:e,e}static getFromCache(e,t,i,s){let r=i[e];return typeof r!="number"&&(r=qe._measureText(e,t,s)+t,i[e]=r),r}static collapseSpaces(e){return e==="normal"||e==="pre-line"}static collapseNewlines(e){return e==="normal"}static trimRight(e){if(typeof e!="string")return"";for(let t=e.length-1;t>=0;t--){const i=e[t];if(!qe.isBreakingSpace(i))break;e=e.slice(0,-1)}return e}static isNewline(e){return typeof e!="string"?!1:qe._newlines.includes(e.charCodeAt(0))}static isBreakingSpace(e,t){return typeof e!="string"?!1:qe._breakingSpaces.includes(e.charCodeAt(0))}static tokenize(e){const t=[];let i="";if(typeof e!="string")return t;for(let s=0;sa;--h){for(let m=0;m{if(typeof(Intl==null?void 0:Intl.Segmenter)=="function"){const n=new Intl.Segmenter;return e=>[...n.segment(e)].map(t=>t.segment)}return n=>[...n]})(),cs.experimentalLetterSpacing=!1,cs._fonts={},cs._newlines=[10,13],cs._breakingSpaces=[9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288];let Rr=cs;const b2=["serif","sans-serif","monospace","cursive","fantasy","system-ui"],fS=class Tl{constructor(e){this.styleID=0,this.reset(),Qf(this,e,e)}clone(){const e={};return Qf(e,this,Tl.defaultStyle),new Tl(e)}reset(){Qf(this,Tl.defaultStyle,Tl.defaultStyle)}get align(){return this._align}set align(e){this._align!==e&&(this._align=e,this.styleID++)}get breakWords(){return this._breakWords}set breakWords(e){this._breakWords!==e&&(this._breakWords=e,this.styleID++)}get dropShadow(){return this._dropShadow}set dropShadow(e){this._dropShadow!==e&&(this._dropShadow=e,this.styleID++)}get dropShadowAlpha(){return this._dropShadowAlpha}set dropShadowAlpha(e){this._dropShadowAlpha!==e&&(this._dropShadowAlpha=e,this.styleID++)}get dropShadowAngle(){return this._dropShadowAngle}set dropShadowAngle(e){this._dropShadowAngle!==e&&(this._dropShadowAngle=e,this.styleID++)}get dropShadowBlur(){return this._dropShadowBlur}set dropShadowBlur(e){this._dropShadowBlur!==e&&(this._dropShadowBlur=e,this.styleID++)}get dropShadowColor(){return this._dropShadowColor}set dropShadowColor(e){const t=Zf(e);this._dropShadowColor!==t&&(this._dropShadowColor=t,this.styleID++)}get dropShadowDistance(){return this._dropShadowDistance}set dropShadowDistance(e){this._dropShadowDistance!==e&&(this._dropShadowDistance=e,this.styleID++)}get fill(){return this._fill}set fill(e){const t=Zf(e);this._fill!==t&&(this._fill=t,this.styleID++)}get fillGradientType(){return this._fillGradientType}set fillGradientType(e){this._fillGradientType!==e&&(this._fillGradientType=e,this.styleID++)}get fillGradientStops(){return this._fillGradientStops}set fillGradientStops(e){y2(this._fillGradientStops,e)||(this._fillGradientStops=e,this.styleID++)}get fontFamily(){return this._fontFamily}set fontFamily(e){this.fontFamily!==e&&(this._fontFamily=e,this.styleID++)}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize!==e&&(this._fontSize=e,this.styleID++)}get fontStyle(){return this._fontStyle}set fontStyle(e){this._fontStyle!==e&&(this._fontStyle=e,this.styleID++)}get fontVariant(){return this._fontVariant}set fontVariant(e){this._fontVariant!==e&&(this._fontVariant=e,this.styleID++)}get fontWeight(){return this._fontWeight}set fontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.styleID++)}get letterSpacing(){return this._letterSpacing}set letterSpacing(e){this._letterSpacing!==e&&(this._letterSpacing=e,this.styleID++)}get lineHeight(){return this._lineHeight}set lineHeight(e){this._lineHeight!==e&&(this._lineHeight=e,this.styleID++)}get leading(){return this._leading}set leading(e){this._leading!==e&&(this._leading=e,this.styleID++)}get lineJoin(){return this._lineJoin}set lineJoin(e){this._lineJoin!==e&&(this._lineJoin=e,this.styleID++)}get miterLimit(){return this._miterLimit}set miterLimit(e){this._miterLimit!==e&&(this._miterLimit=e,this.styleID++)}get padding(){return this._padding}set padding(e){this._padding!==e&&(this._padding=e,this.styleID++)}get stroke(){return this._stroke}set stroke(e){const t=Zf(e);this._stroke!==t&&(this._stroke=t,this.styleID++)}get strokeThickness(){return this._strokeThickness}set strokeThickness(e){this._strokeThickness!==e&&(this._strokeThickness=e,this.styleID++)}get textBaseline(){return this._textBaseline}set textBaseline(e){this._textBaseline!==e&&(this._textBaseline=e,this.styleID++)}get trim(){return this._trim}set trim(e){this._trim!==e&&(this._trim=e,this.styleID++)}get whiteSpace(){return this._whiteSpace}set whiteSpace(e){this._whiteSpace!==e&&(this._whiteSpace=e,this.styleID++)}get wordWrap(){return this._wordWrap}set wordWrap(e){this._wordWrap!==e&&(this._wordWrap=e,this.styleID++)}get wordWrapWidth(){return this._wordWrapWidth}set wordWrapWidth(e){this._wordWrapWidth!==e&&(this._wordWrapWidth=e,this.styleID++)}toFontString(){const e=typeof this.fontSize=="number"?`${this.fontSize}px`:this.fontSize;let t=this.fontFamily;Array.isArray(this.fontFamily)||(t=this.fontFamily.split(","));for(let i=t.length-1;i>=0;i--){let s=t[i].trim();!/([\"\'])[^\'\"]+\1/.test(s)&&!b2.includes(s)&&(s=`"${s}"`),t[i]=s}return`${this.fontStyle} ${this.fontVariant} ${this.fontWeight} ${e} ${t.join(",")}`}};fS.defaultStyle={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fillGradientType:lh.LINEAR_VERTICAL,fillGradientStops:[],fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",leading:0,letterSpacing:0,lineHeight:0,lineJoin:"miter",miterLimit:10,padding:0,stroke:"black",strokeThickness:0,textBaseline:"alphabetic",trim:!1,whiteSpace:"pre",wordWrap:!1,wordWrapWidth:100};let Jr=fS;function Zf(n){const e=Rt.shared,t=i=>{const s=e.setValue(i);return s.alpha===1?s.toHex():s.toRgbaString()};return Array.isArray(n)?n.map(t):t(n)}function y2(n,e){if(!Array.isArray(n)||!Array.isArray(e)||n.length!==e.length)return!1;for(let t=0;t0&&p>m&&(g=(m+p)/2);const v=m+h,y=i.lineHeight*(f+1);let b=v;f+10}}function S2(n,e){var i;let t=!1;if((i=n==null?void 0:n._textures)!=null&&i.length){for(let s=0;s{this.queue&&this.prepareItems()},this.registerFindHook(_2),this.registerFindHook(M2),this.registerFindHook(S2),this.registerFindHook(C2),this.registerFindHook(A2),this.registerUploadHook(T2),this.registerUploadHook(E2)}upload(e){return new Promise(t=>{e&&this.add(e),this.queue.length?(this.completes.push(t),this.ticking||(this.ticking=!0,nn.system.addOnce(this.tick,this,Uo.UTILITY))):t()})}tick(){setTimeout(this.delayedTick,0)}prepareItems(){for(this.limiter.beginFrame();this.queue.length&&this.limiter.allowedToUpload();){const e=this.queue[0];let t=!1;if(e&&!e._destroyed){for(let i=0,s=this.uploadHooks.length;i=0;t--)this.add(e.children[t]);return this}destroy(){this.ticking&&nn.system.remove(this.tick,this),this.ticking=!1,this.addHooks=null,this.uploadHooks=null,this.renderer=null,this.completes=null,this.queue=null,this.limiter=null,this.uploadHookHelper=null}};mS.uploadsPerFrame=4;let pm=mS;Object.defineProperties(Ve,{UPLOADS_PER_FRAME:{get(){return pm.uploadsPerFrame},set(n){mt("7.1.0","settings.UPLOADS_PER_FRAME is deprecated, use prepare.BasePrepare.uploadsPerFrame"),pm.uploadsPerFrame=n}}});function vS(n,e){return e instanceof rt?(e._glTextures[n.CONTEXT_UID]||n.texture.bind(e),!0):!1}function P2(n,e){if(!(e instanceof Ki))return!1;const{geometry:t}=e;e.finishPoly(),t.updateBatches();const{batches:i}=t;for(let s=0;si&&!e.autoResize&&(o=i);let a=e._buffers;a||(a=e._buffers=this.generateBuffers(e));const c=t[0]._texture.baseTexture,l=c.alphaMode>0;this.state.blendMode=dw(e.blendMode,l),r.state.set(this.state);const d=r.gl,u=e.worldTransform.copyTo(this.tempMatrix);u.prepend(r.globalUniforms.uniforms.projectionMatrix),this.shader.uniforms.translationMatrix=u.toArray(!0),this.shader.uniforms.uColor=Rt.shared.setValue(e.tintRgb).premultiply(e.worldAlpha,l).toArray(this.shader.uniforms.uColor),this.shader.uniforms.uSampler=c,this.renderer.shader.bind(this.shader);let h=!1;for(let f=0,p=0;fs&&(m=s),p>=a.length&&a.push(this._generateOneMoreBuffer(e));const g=a[p];g.uploadDynamic(t,f,m);const v=e._bufferUpdateIDs[p]||0;h=h||g._updateID0);s[o]=l,s[o+r]=l,s[o+r*2]=l,s[o+r*3]=l,o+=r*4}}destroy(){super.destroy(),this.shader&&(this.shader.destroy(),this.shader=null),this.tempMatrix=null}}hS.extension={name:"particle",type:Oe.RendererPlugin};He.add(hS);var lh=(n=>(n[n.LINEAR_VERTICAL=0]="LINEAR_VERTICAL",n[n.LINEAR_HORIZONTAL=1]="LINEAR_HORIZONTAL",n))(lh||{});const Kc={willReadFrequently:!0},cs=class qe{static get experimentalLetterSpacingSupported(){let e=qe._experimentalLetterSpacingSupported;if(e!==void 0){const t=Ve.ADAPTER.getCanvasRenderingContext2D().prototype;e=qe._experimentalLetterSpacingSupported="letterSpacing"in t||"textLetterSpacing"in t}return e}constructor(e,t,i,s,r,o,a,c,l){this.text=e,this.style=t,this.width=i,this.height=s,this.lines=r,this.lineWidths=o,this.lineHeight=a,this.maxLineWidth=c,this.fontProperties=l}static measureText(e,t,i,s=qe._canvas){i=i??t.wordWrap;const r=t.toFontString(),o=qe.measureFont(r);o.fontSize===0&&(o.fontSize=t.fontSize,o.ascent=t.fontSize);const a=s.getContext("2d",Kc);a.font=r;const c=(i?qe.wordWrap(e,t,s):e).split(/(?:\r\n|\r|\n)/),l=new Array(c.length);let d=0;for(let p=0;p0&&(s?r-=t:r+=(qe.graphemeSegmenter(e).length-1)*t),r}static wordWrap(e,t,i=qe._canvas){const s=i.getContext("2d",Kc);let r=0,o="",a="";const c=Object.create(null),{letterSpacing:l,whiteSpace:d}=t,u=qe.collapseSpaces(d),h=qe.collapseNewlines(d);let f=!u;const p=t.wordWrapWidth+l,m=qe.tokenize(e);for(let g=0;gp)if(o!==""&&(a+=qe.addLine(o),o="",r=0),qe.canBreakWords(v,t.breakWords)){const b=qe.wordWrapSplit(v);for(let w=0;wp&&(a+=qe.addLine(o),f=!1,o="",r=0),o+=C,r+=E}}else{o.length>0&&(a+=qe.addLine(o),o="",r=0);const b=g===m.length-1;a+=qe.addLine(v,!b),f=!1,o="",r=0}else y+r>p&&(f=!1,a+=qe.addLine(o),o="",r=0),(o.length>0||!qe.isBreakingSpace(v)||f)&&(o+=v,r+=y)}return a+=qe.addLine(o,!1),a}static addLine(e,t=!0){return e=qe.trimRight(e),e=t?`${e} +`:e,e}static getFromCache(e,t,i,s){let r=i[e];return typeof r!="number"&&(r=qe._measureText(e,t,s)+t,i[e]=r),r}static collapseSpaces(e){return e==="normal"||e==="pre-line"}static collapseNewlines(e){return e==="normal"}static trimRight(e){if(typeof e!="string")return"";for(let t=e.length-1;t>=0;t--){const i=e[t];if(!qe.isBreakingSpace(i))break;e=e.slice(0,-1)}return e}static isNewline(e){return typeof e!="string"?!1:qe._newlines.includes(e.charCodeAt(0))}static isBreakingSpace(e,t){return typeof e!="string"?!1:qe._breakingSpaces.includes(e.charCodeAt(0))}static tokenize(e){const t=[];let i="";if(typeof e!="string")return t;for(let s=0;sa;--h){for(let m=0;m{if(typeof(Intl==null?void 0:Intl.Segmenter)=="function"){const n=new Intl.Segmenter;return e=>[...n.segment(e)].map(t=>t.segment)}return n=>[...n]})(),cs.experimentalLetterSpacing=!1,cs._fonts={},cs._newlines=[10,13],cs._breakingSpaces=[9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288];let Rr=cs;const b2=["serif","sans-serif","monospace","cursive","fantasy","system-ui"],fS=class Tl{constructor(e){this.styleID=0,this.reset(),Qf(this,e,e)}clone(){const e={};return Qf(e,this,Tl.defaultStyle),new Tl(e)}reset(){Qf(this,Tl.defaultStyle,Tl.defaultStyle)}get align(){return this._align}set align(e){this._align!==e&&(this._align=e,this.styleID++)}get breakWords(){return this._breakWords}set breakWords(e){this._breakWords!==e&&(this._breakWords=e,this.styleID++)}get dropShadow(){return this._dropShadow}set dropShadow(e){this._dropShadow!==e&&(this._dropShadow=e,this.styleID++)}get dropShadowAlpha(){return this._dropShadowAlpha}set dropShadowAlpha(e){this._dropShadowAlpha!==e&&(this._dropShadowAlpha=e,this.styleID++)}get dropShadowAngle(){return this._dropShadowAngle}set dropShadowAngle(e){this._dropShadowAngle!==e&&(this._dropShadowAngle=e,this.styleID++)}get dropShadowBlur(){return this._dropShadowBlur}set dropShadowBlur(e){this._dropShadowBlur!==e&&(this._dropShadowBlur=e,this.styleID++)}get dropShadowColor(){return this._dropShadowColor}set dropShadowColor(e){const t=Zf(e);this._dropShadowColor!==t&&(this._dropShadowColor=t,this.styleID++)}get dropShadowDistance(){return this._dropShadowDistance}set dropShadowDistance(e){this._dropShadowDistance!==e&&(this._dropShadowDistance=e,this.styleID++)}get fill(){return this._fill}set fill(e){const t=Zf(e);this._fill!==t&&(this._fill=t,this.styleID++)}get fillGradientType(){return this._fillGradientType}set fillGradientType(e){this._fillGradientType!==e&&(this._fillGradientType=e,this.styleID++)}get fillGradientStops(){return this._fillGradientStops}set fillGradientStops(e){y2(this._fillGradientStops,e)||(this._fillGradientStops=e,this.styleID++)}get fontFamily(){return this._fontFamily}set fontFamily(e){this.fontFamily!==e&&(this._fontFamily=e,this.styleID++)}get fontSize(){return this._fontSize}set fontSize(e){this._fontSize!==e&&(this._fontSize=e,this.styleID++)}get fontStyle(){return this._fontStyle}set fontStyle(e){this._fontStyle!==e&&(this._fontStyle=e,this.styleID++)}get fontVariant(){return this._fontVariant}set fontVariant(e){this._fontVariant!==e&&(this._fontVariant=e,this.styleID++)}get fontWeight(){return this._fontWeight}set fontWeight(e){this._fontWeight!==e&&(this._fontWeight=e,this.styleID++)}get letterSpacing(){return this._letterSpacing}set letterSpacing(e){this._letterSpacing!==e&&(this._letterSpacing=e,this.styleID++)}get lineHeight(){return this._lineHeight}set lineHeight(e){this._lineHeight!==e&&(this._lineHeight=e,this.styleID++)}get leading(){return this._leading}set leading(e){this._leading!==e&&(this._leading=e,this.styleID++)}get lineJoin(){return this._lineJoin}set lineJoin(e){this._lineJoin!==e&&(this._lineJoin=e,this.styleID++)}get miterLimit(){return this._miterLimit}set miterLimit(e){this._miterLimit!==e&&(this._miterLimit=e,this.styleID++)}get padding(){return this._padding}set padding(e){this._padding!==e&&(this._padding=e,this.styleID++)}get stroke(){return this._stroke}set stroke(e){const t=Zf(e);this._stroke!==t&&(this._stroke=t,this.styleID++)}get strokeThickness(){return this._strokeThickness}set strokeThickness(e){this._strokeThickness!==e&&(this._strokeThickness=e,this.styleID++)}get textBaseline(){return this._textBaseline}set textBaseline(e){this._textBaseline!==e&&(this._textBaseline=e,this.styleID++)}get trim(){return this._trim}set trim(e){this._trim!==e&&(this._trim=e,this.styleID++)}get whiteSpace(){return this._whiteSpace}set whiteSpace(e){this._whiteSpace!==e&&(this._whiteSpace=e,this.styleID++)}get wordWrap(){return this._wordWrap}set wordWrap(e){this._wordWrap!==e&&(this._wordWrap=e,this.styleID++)}get wordWrapWidth(){return this._wordWrapWidth}set wordWrapWidth(e){this._wordWrapWidth!==e&&(this._wordWrapWidth=e,this.styleID++)}toFontString(){const e=typeof this.fontSize=="number"?`${this.fontSize}px`:this.fontSize;let t=this.fontFamily;Array.isArray(this.fontFamily)||(t=this.fontFamily.split(","));for(let i=t.length-1;i>=0;i--){let s=t[i].trim();!/([\"\'])[^\'\"]+\1/.test(s)&&!b2.includes(s)&&(s=`"${s}"`),t[i]=s}return`${this.fontStyle} ${this.fontVariant} ${this.fontWeight} ${e} ${t.join(",")}`}};fS.defaultStyle={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fillGradientType:lh.LINEAR_VERTICAL,fillGradientStops:[],fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",leading:0,letterSpacing:0,lineHeight:0,lineJoin:"miter",miterLimit:10,padding:0,stroke:"black",strokeThickness:0,textBaseline:"alphabetic",trim:!1,whiteSpace:"pre",wordWrap:!1,wordWrapWidth:100};let Jr=fS;function Zf(n){const e=Rt.shared,t=i=>{const s=e.setValue(i);return s.alpha===1?s.toHex():s.toRgbaString()};return Array.isArray(n)?n.map(t):t(n)}function y2(n,e){if(!Array.isArray(n)||!Array.isArray(e)||n.length!==e.length)return!1;for(let t=0;t0&&p>m&&(g=(m+p)/2);const v=m+h,y=i.lineHeight*(f+1);let b=v;f+10}}function S2(n,e){var i;let t=!1;if((i=n==null?void 0:n._textures)!=null&&i.length){for(let s=0;s{this.queue&&this.prepareItems()},this.registerFindHook(_2),this.registerFindHook(M2),this.registerFindHook(S2),this.registerFindHook(C2),this.registerFindHook(A2),this.registerUploadHook(T2),this.registerUploadHook(E2)}upload(e){return new Promise(t=>{e&&this.add(e),this.queue.length?(this.completes.push(t),this.ticking||(this.ticking=!0,nn.system.addOnce(this.tick,this,Uo.UTILITY))):t()})}tick(){setTimeout(this.delayedTick,0)}prepareItems(){for(this.limiter.beginFrame();this.queue.length&&this.limiter.allowedToUpload();){const e=this.queue[0];let t=!1;if(e&&!e._destroyed){for(let i=0,s=this.uploadHooks.length;i=0;t--)this.add(e.children[t]);return this}destroy(){this.ticking&&nn.system.remove(this.tick,this),this.ticking=!1,this.addHooks=null,this.uploadHooks=null,this.renderer=null,this.completes=null,this.queue=null,this.limiter=null,this.uploadHookHelper=null}};mS.uploadsPerFrame=4;let pm=mS;Object.defineProperties(Ve,{UPLOADS_PER_FRAME:{get(){return pm.uploadsPerFrame},set(n){mt("7.1.0","settings.UPLOADS_PER_FRAME is deprecated, use prepare.BasePrepare.uploadsPerFrame"),pm.uploadsPerFrame=n}}});function vS(n,e){return e instanceof rt?(e._glTextures[n.CONTEXT_UID]||n.texture.bind(e),!0):!1}function P2(n,e){if(!(e instanceof Ki))return!1;const{geometry:t}=e;e.finishPoly(),t.updateBatches();const{batches:i}=t;for(let s=0;s1?es.from(R2,k2,t):es.from(W0,F2,t)}render(e){const t=this.renderer,i=this.quad;let s=i.vertices;s[0]=s[6]=e._width*-e.anchor.x,s[1]=s[3]=e._height*-e.anchor.y,s[2]=s[4]=e._width*(1-e.anchor.x),s[5]=s[7]=e._height*(1-e.anchor.y);const r=e.uvRespectAnchor?e.anchor.x:0,o=e.uvRespectAnchor?e.anchor.y:0;s=i.uvs,s[0]=s[6]=-r,s[1]=s[3]=-o,s[2]=s[4]=1-r,s[5]=s[7]=1-o,i.invalidate();const a=e._texture,c=a.baseTexture,l=c.alphaMode>0,d=e.tileTransform.localTransform,u=e.uvMatrix;let h=c.isPowerOfTwo&&a.frame.width===c.width&&a.frame.height===c.height;h&&(c._glTextures[t.CONTEXT_UID]?h=c.wrapMode!==Jn.CLAMP:c.wrapMode===Jn.CLAMP&&(c.wrapMode=Jn.REPEAT));const f=h?this.simpleShader:this.shader,p=a.width,m=a.height,g=e._width,v=e._height;Jc.set(d.a*p/g,d.b*p/v,d.c*m/g,d.d*m/v,d.tx/g,d.ty/v),Jc.invert(),h?Jc.prepend(u.mapCoord):(f.uniforms.uMapCoord=u.mapCoord.toArray(!0),f.uniforms.uClampFrame=u.uClampFrame,f.uniforms.uClampOffset=u.uClampOffset),f.uniforms.uTransform=Jc.toArray(!0),f.uniforms.uColor=Rt.shared.setValue(e.tint).premultiply(e.worldAlpha,l).toArray(f.uniforms.uColor),f.uniforms.translationMatrix=e.transform.worldTransform.toArray(!0),f.uniforms.uSampler=a,t.shader.bind(f),t.geometry.bind(i),this.state.blendMode=dw(e.blendMode,l),t.state.set(this.state),t.geometry.draw(this.renderer.gl.TRIANGLES,6,0)}}yS.extension={name:"tilingSprite",type:Oe.RendererPlugin};He.add(yS);const xS=class El{constructor(e,t,i){this.linkedSheets=[],(e instanceof rt||e instanceof it)&&(e={texture:e,data:t,resolutionFilename:i});const{texture:s,data:r,resolutionFilename:o=null,cachePrefix:a=""}=e;this.cachePrefix=a,this._texture=s instanceof it?s:null,this.baseTexture=s instanceof rt?s:this._texture.baseTexture,this.textures={},this.animations={},this.data=r;const c=this.baseTexture.resource;this.resolution=this._updateResolution(o||(c?c.url:null)),this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}_updateResolution(e=null){const{scale:t}=this.data.meta;let i=fr(e,null);return i===null&&(i=typeof t=="number"?t:parseFloat(t??"1")),i!==1&&this.baseTexture.setResolution(i),i}parse(){return new Promise(e=>{this._callback=e,this._batchIndex=0,this._frameKeys.length<=El.BATCH_SIZE?(this._processFrames(0),this._processAnimations(),this._parseComplete()):this._nextBatch()})}_processFrames(e){let t=e;const i=El.BATCH_SIZE;for(;t-e{this._batchIndex*El.BATCH_SIZE{i[s]=e}),Object.keys(e.textures).forEach(s=>{i[`${e.cachePrefix}${s}`]=e.textures[s]}),!t){const s=hi.dirname(n[0]);e.linkedSheets.forEach((r,o)=>{Object.assign(i,wS([`${s}/${e.data.meta.related_multi_packs[o]}`],r,!0))})}return i}const O2={extension:Oe.Asset,cache:{test:n=>n instanceof q0,getCacheableAssets:(n,e)=>wS(n,e,!1)},resolver:{test:n=>{const e=n.split("?")[0].split("."),t=e.pop(),i=e.pop();return t==="json"&&D2.includes(i)},parse:n=>{var t;const e=n.split(".");return{resolution:parseFloat(((t=Ve.RETINA_PREFIX.exec(n))==null?void 0:t[1])??"1"),format:e[e.length-2],src:n}}},loader:{name:"spritesheetLoader",extension:{type:Oe.LoadParser,priority:Cn.Normal},async testParse(n,e){return hi.extname(e.src).toLowerCase()===".json"&&!!n.frames},async parse(n,e,t){var d,u;const{texture:i,imageFilename:s,cachePrefix:r}=(e==null?void 0:e.data)??{};let o=hi.dirname(e.src);o&&o.lastIndexOf("/")!==o.length-1&&(o+="/");let a;if(i&&i.baseTexture)a=i;else{const h=eu(o+(s??n.meta.image),e.src);a=(await t.load([h]))[h]}const c=new q0({texture:a.baseTexture,data:n,resolutionFilename:e.src,cachePrefix:r});await c.parse();const l=(d=n==null?void 0:n.meta)==null?void 0:d.related_multi_packs;if(Array.isArray(l)){const h=[];for(const p of l){if(typeof p!="string")continue;let m=o+p;(u=e.data)!=null&&u.ignoreMultiPack||(m=eu(m,e.src),h.push(t.load({src:m,data:{ignoreMultiPack:!0}})))}const f=await Promise.all(h);c.linkedSheets=f,f.forEach(p=>{p.linkedSheets=[c].concat(c.linkedSheets.filter(m=>m!==p))})}return c},unload(n){n.destroy(!0)}}};He.add(O2);class ou{constructor(){this.info=[],this.common=[],this.page=[],this.char=[],this.kerning=[],this.distanceField=[]}}class Td{static test(e){return typeof e=="string"&&e.startsWith("info face=")}static parse(e){const t=e.match(/^[a-z]+\s+.+$/gm),i={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(const r in t){const o=t[r].match(/^[a-z]+/gm)[0],a=t[r].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),c={};for(const l in a){const d=a[l].split("="),u=d[0],h=d[1].replace(/"/gm,""),f=parseFloat(h),p=isNaN(f)?h:f;c[u]=p}i[o].push(c)}const s=new ou;return i.info.forEach(r=>s.info.push({face:r.face,size:parseInt(r.size,10)})),i.common.forEach(r=>s.common.push({lineHeight:parseInt(r.lineHeight,10)})),i.page.forEach(r=>s.page.push({id:parseInt(r.id,10),file:r.file})),i.char.forEach(r=>s.char.push({id:parseInt(r.id,10),page:parseInt(r.page,10),x:parseInt(r.x,10),y:parseInt(r.y,10),width:parseInt(r.width,10),height:parseInt(r.height,10),xoffset:parseInt(r.xoffset,10),yoffset:parseInt(r.yoffset,10),xadvance:parseInt(r.xadvance,10)})),i.kerning.forEach(r=>s.kerning.push({first:parseInt(r.first,10),second:parseInt(r.second,10),amount:parseInt(r.amount,10)})),i.distanceField.forEach(r=>s.distanceField.push({distanceRange:parseInt(r.distanceRange,10),fieldType:r.fieldType})),s}}class mm{static test(e){const t=e;return typeof e!="string"&&"getElementsByTagName"in e&&t.getElementsByTagName("page").length&&t.getElementsByTagName("info")[0].getAttribute("face")!==null}static parse(e){const t=new ou,i=e.getElementsByTagName("info"),s=e.getElementsByTagName("common"),r=e.getElementsByTagName("page"),o=e.getElementsByTagName("char"),a=e.getElementsByTagName("kerning"),c=e.getElementsByTagName("distanceField");for(let l=0;l")?mm.test(Ve.ADAPTER.parseXML(e)):!1}static parse(e){return mm.parse(Ve.ADAPTER.parseXML(e))}}const ep=[Td,mm,gm];function N2(n){for(let e=0;e=c-I*o){if(m===0)throw new Error(`[BitmapFont] textureHeight ${c}px is too small (fontFamily: '${u.fontFamily}', fontSize: ${u.fontSize}px, char: '${S}')`);--T,g=null,v=null,y=null,m=0,p=0,b=0;continue}if(b=Math.max(I+E.fontProperties.descent,b),M*o+p>=h){if(p===0)throw new Error(`[BitmapFont] textureWidth ${a}px is too small (fontFamily: '${u.fontFamily}', fontSize: ${u.fontSize}px, char: '${S}')`);--T,m+=b*o,m=Math.ceil(m),p=0,b=0;continue}B2(g,v,E,p,m,o,u);const k=Ed(E.text);f.char.push({id:k,page:x.length-1,x:p/o,y:m/o,width:M,height:I,xoffset:0,yoffset:0,xadvance:_-(u.dropShadow?u.dropShadowDistance:0)-(u.stroke?u.strokeThickness:0)}),p+=(M+2*r)*o,p=Math.ceil(p)}if(!(i!=null&&i.skipKerning))for(let T=0,S=d.length;T1?es.from(R2,k2,t):es.from(W0,F2,t)}render(e){const t=this.renderer,i=this.quad;let s=i.vertices;s[0]=s[6]=e._width*-e.anchor.x,s[1]=s[3]=e._height*-e.anchor.y,s[2]=s[4]=e._width*(1-e.anchor.x),s[5]=s[7]=e._height*(1-e.anchor.y);const r=e.uvRespectAnchor?e.anchor.x:0,o=e.uvRespectAnchor?e.anchor.y:0;s=i.uvs,s[0]=s[6]=-r,s[1]=s[3]=-o,s[2]=s[4]=1-r,s[5]=s[7]=1-o,i.invalidate();const a=e._texture,c=a.baseTexture,l=c.alphaMode>0,d=e.tileTransform.localTransform,u=e.uvMatrix;let h=c.isPowerOfTwo&&a.frame.width===c.width&&a.frame.height===c.height;h&&(c._glTextures[t.CONTEXT_UID]?h=c.wrapMode!==Jn.CLAMP:c.wrapMode===Jn.CLAMP&&(c.wrapMode=Jn.REPEAT));const f=h?this.simpleShader:this.shader,p=a.width,m=a.height,g=e._width,v=e._height;Jc.set(d.a*p/g,d.b*p/v,d.c*m/g,d.d*m/v,d.tx/g,d.ty/v),Jc.invert(),h?Jc.prepend(u.mapCoord):(f.uniforms.uMapCoord=u.mapCoord.toArray(!0),f.uniforms.uClampFrame=u.uClampFrame,f.uniforms.uClampOffset=u.uClampOffset),f.uniforms.uTransform=Jc.toArray(!0),f.uniforms.uColor=Rt.shared.setValue(e.tint).premultiply(e.worldAlpha,l).toArray(f.uniforms.uColor),f.uniforms.translationMatrix=e.transform.worldTransform.toArray(!0),f.uniforms.uSampler=a,t.shader.bind(f),t.geometry.bind(i),this.state.blendMode=dw(e.blendMode,l),t.state.set(this.state),t.geometry.draw(this.renderer.gl.TRIANGLES,6,0)}}yS.extension={name:"tilingSprite",type:Oe.RendererPlugin};He.add(yS);const xS=class El{constructor(e,t,i){this.linkedSheets=[],(e instanceof rt||e instanceof it)&&(e={texture:e,data:t,resolutionFilename:i});const{texture:s,data:r,resolutionFilename:o=null,cachePrefix:a=""}=e;this.cachePrefix=a,this._texture=s instanceof it?s:null,this.baseTexture=s instanceof rt?s:this._texture.baseTexture,this.textures={},this.animations={},this.data=r;const c=this.baseTexture.resource;this.resolution=this._updateResolution(o||(c?c.url:null)),this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}_updateResolution(e=null){const{scale:t}=this.data.meta;let i=fr(e,null);return i===null&&(i=typeof t=="number"?t:parseFloat(t??"1")),i!==1&&this.baseTexture.setResolution(i),i}parse(){return new Promise(e=>{this._callback=e,this._batchIndex=0,this._frameKeys.length<=El.BATCH_SIZE?(this._processFrames(0),this._processAnimations(),this._parseComplete()):this._nextBatch()})}_processFrames(e){let t=e;const i=El.BATCH_SIZE;for(;t-e{this._batchIndex*El.BATCH_SIZE{i[s]=e}),Object.keys(e.textures).forEach(s=>{i[`${e.cachePrefix}${s}`]=e.textures[s]}),!t){const s=hi.dirname(n[0]);e.linkedSheets.forEach((r,o)=>{Object.assign(i,wS([`${s}/${e.data.meta.related_multi_packs[o]}`],r,!0))})}return i}const O2={extension:Oe.Asset,cache:{test:n=>n instanceof q0,getCacheableAssets:(n,e)=>wS(n,e,!1)},resolver:{test:n=>{const e=n.split("?")[0].split("."),t=e.pop(),i=e.pop();return t==="json"&&D2.includes(i)},parse:n=>{var t;const e=n.split(".");return{resolution:parseFloat(((t=Ve.RETINA_PREFIX.exec(n))==null?void 0:t[1])??"1"),format:e[e.length-2],src:n}}},loader:{name:"spritesheetLoader",extension:{type:Oe.LoadParser,priority:Cn.Normal},async testParse(n,e){return hi.extname(e.src).toLowerCase()===".json"&&!!n.frames},async parse(n,e,t){var d,u;const{texture:i,imageFilename:s,cachePrefix:r}=(e==null?void 0:e.data)??{};let o=hi.dirname(e.src);o&&o.lastIndexOf("/")!==o.length-1&&(o+="/");let a;if(i&&i.baseTexture)a=i;else{const h=eu(o+(s??n.meta.image),e.src);a=(await t.load([h]))[h]}const c=new q0({texture:a.baseTexture,data:n,resolutionFilename:e.src,cachePrefix:r});await c.parse();const l=(d=n==null?void 0:n.meta)==null?void 0:d.related_multi_packs;if(Array.isArray(l)){const h=[];for(const p of l){if(typeof p!="string")continue;let m=o+p;(u=e.data)!=null&&u.ignoreMultiPack||(m=eu(m,e.src),h.push(t.load({src:m,data:{ignoreMultiPack:!0}})))}const f=await Promise.all(h);c.linkedSheets=f,f.forEach(p=>{p.linkedSheets=[c].concat(c.linkedSheets.filter(m=>m!==p))})}return c},unload(n){n.destroy(!0)}}};He.add(O2);class ou{constructor(){this.info=[],this.common=[],this.page=[],this.char=[],this.kerning=[],this.distanceField=[]}}class Td{static test(e){return typeof e=="string"&&e.startsWith("info face=")}static parse(e){const t=e.match(/^[a-z]+\s+.+$/gm),i={info:[],common:[],page:[],char:[],chars:[],kerning:[],kernings:[],distanceField:[]};for(const r in t){const o=t[r].match(/^[a-z]+/gm)[0],a=t[r].match(/[a-zA-Z]+=([^\s"']+|"([^"]*)")/gm),c={};for(const l in a){const d=a[l].split("="),u=d[0],h=d[1].replace(/"/gm,""),f=parseFloat(h),p=isNaN(f)?h:f;c[u]=p}i[o].push(c)}const s=new ou;return i.info.forEach(r=>s.info.push({face:r.face,size:parseInt(r.size,10)})),i.common.forEach(r=>s.common.push({lineHeight:parseInt(r.lineHeight,10)})),i.page.forEach(r=>s.page.push({id:parseInt(r.id,10),file:r.file})),i.char.forEach(r=>s.char.push({id:parseInt(r.id,10),page:parseInt(r.page,10),x:parseInt(r.x,10),y:parseInt(r.y,10),width:parseInt(r.width,10),height:parseInt(r.height,10),xoffset:parseInt(r.xoffset,10),yoffset:parseInt(r.yoffset,10),xadvance:parseInt(r.xadvance,10)})),i.kerning.forEach(r=>s.kerning.push({first:parseInt(r.first,10),second:parseInt(r.second,10),amount:parseInt(r.amount,10)})),i.distanceField.forEach(r=>s.distanceField.push({distanceRange:parseInt(r.distanceRange,10),fieldType:r.fieldType})),s}}class mm{static test(e){const t=e;return typeof e!="string"&&"getElementsByTagName"in e&&t.getElementsByTagName("page").length&&t.getElementsByTagName("info")[0].getAttribute("face")!==null}static parse(e){const t=new ou,i=e.getElementsByTagName("info"),s=e.getElementsByTagName("common"),r=e.getElementsByTagName("page"),o=e.getElementsByTagName("char"),a=e.getElementsByTagName("kerning"),c=e.getElementsByTagName("distanceField");for(let l=0;l")?mm.test(Ve.ADAPTER.parseXML(e)):!1}static parse(e){return mm.parse(Ve.ADAPTER.parseXML(e))}}const ep=[Td,mm,gm];function N2(n){for(let e=0;e=c-I*o){if(m===0)throw new Error(`[BitmapFont] textureHeight ${c}px is too small (fontFamily: '${u.fontFamily}', fontSize: ${u.fontSize}px, char: '${S}')`);--T,g=null,v=null,y=null,m=0,p=0,b=0;continue}if(b=Math.max(I+E.fontProperties.descent,b),M*o+p>=h){if(p===0)throw new Error(`[BitmapFont] textureWidth ${a}px is too small (fontFamily: '${u.fontFamily}', fontSize: ${u.fontSize}px, char: '${S}')`);--T,m+=b*o,m=Math.ceil(m),p=0,b=0;continue}B2(g,v,E,p,m,o,u);const k=Ed(E.text);f.char.push({id:k,page:w.length-1,x:p/o,y:m/o,width:M,height:I,xoffset:0,yoffset:0,xadvance:_-(u.dropShadow?u.dropShadowDistance:0)-(u.stroke?u.strokeThickness:0)}),p+=(M+2*r)*o,p=Math.ceil(p)}if(!(i!=null&&i.skipKerning))for(let T=0,S=d.length;T{this.dirty=!0},this,0,0),this._roundPixels=Ve.ROUND_PIXELS,this.dirty=!0,this._resolution=Ve.RESOLUTION,this._autoResolution=!0,this._textureCache={}}updateText(){var M;const e=Mr.available[this._fontName],t=this.fontSize,i=t/e.size,s=new At,r=[],o=[],a=[],c=this._text.replace(/(?:\r\n|\r)/g,` -`)||" ",l=SS(c),d=this._maxWidth*e.size/t,u=e.distanceFieldType==="none"?K0:J0;let h=null,f=0,p=0,m=0,g=-1,v=0,y=0,b=0,x=0;for(let k=0;k0&&s.x>d&&(++y,Ia(r,1+g-y,1+k-g),k=g,g=-1,o.push(v),a.push(r.length>0?r[r.length-1].prevSpaces:0),p=Math.max(p,v),m++,s.x=0,s.y+=e.lineHeight,h=null,x=0)}const C=l[l.length-1];C!=="\r"&&C!==` +`)||" ",l=SS(c),d=this._maxWidth*e.size/t,u=e.distanceFieldType==="none"?K0:J0;let h=null,f=0,p=0,m=0,g=-1,v=0,y=0,b=0,w=0;for(let k=0;k0&&s.x>d&&(++y,Ia(r,1+g-y,1+k-g),k=g,g=-1,o.push(v),a.push(r.length>0?r[r.length-1].prevSpaces:0),p=Math.max(p,v),m++,s.x=0,s.y+=e.lineHeight,h=null,w=0)}const C=l[l.length-1];C!=="\r"&&C!==` `&&(/(?:\s)/.test(C)&&(f=v),o.push(f),p=Math.max(p,f),a.push(-1));const T=[];for(let k=0;k<=m;k++){let B=0;this._align==="right"?B=p-o[k]:this._align==="center"?B=(p-o[k])/2:this._align==="justify"&&(B=a[k]<0?0:(p-o[k])/a[k]),T.push(B)}const S=r.length,E={},_=[],I=this._activePagesMeshData;u.push(...I);for(let k=0;k6*D)||B.vertices.lengtht[s.mesh.texture.baseTexture.uid]).forEach(s=>{s.mesh.texture=it.EMPTY});for(const s in t)t[s].destroy(),delete t[s];this._font=null,this._tintColor=null,this._textureCache=null,super.destroy(e)}};Y2.styleDefaults={align:"left",tint:16777215,maxWidth:0,letterSpacing:0};const z2=[".xml",".fnt"],j2={extension:{type:Oe.LoadParser,priority:Cn.Normal},name:"loadBitmapFont",test(n){return z2.includes(hi.extname(n).toLowerCase())},async testParse(n){return Td.test(n)||gm.test(n)},async parse(n,e,t){const i=Td.test(n)?Td.parse(n):gm.parse(n),{src:s}=e,{page:r}=i,o=[];for(let l=0;la[l]);return Mr.install(i,c,!0)},async load(n,e){return(await Ve.ADAPTER.fetch(n)).text()},unload(n){n.destroy()}};He.add(j2);const vm=class va extends Jr{constructor(){super(...arguments),this._fonts=[],this._overrides=[],this._stylesheet="",this.fontsDirty=!1}static from(e){return new va(Object.keys(va.defaultOptions).reduce((t,i)=>({...t,[i]:e[i]}),{}))}cleanFonts(){this._fonts.length>0&&(this._fonts.forEach(e=>{URL.revokeObjectURL(e.src),e.refs--,e.refs===0&&(e.fontFace&&document.fonts.delete(e.fontFace),delete va.availableFonts[e.originalUrl])}),this.fontFamily="Arial",this._fonts.length=0,this.styleID++,this.fontsDirty=!0)}loadFont(e,t={}){const{availableFonts:i}=va;if(i[e]){const s=i[e];return this._fonts.push(s),s.refs++,this.styleID++,this.fontsDirty=!0,Promise.resolve()}return Ve.ADAPTER.fetch(e).then(s=>s.blob()).then(async s=>new Promise((r,o)=>{const a=URL.createObjectURL(s),c=new FileReader;c.onload=()=>r([a,c.result]),c.onerror=o,c.readAsDataURL(s)})).then(async([s,r])=>{const o=Object.assign({family:hi.basename(e,hi.extname(e)),weight:"normal",style:"normal",display:"auto",src:s,dataSrc:r,refs:1,originalUrl:e,fontFace:null},t);i[e]=o,this._fonts.push(o),this.styleID++;const a=new FontFace(o.family,`url(${o.src})`,{weight:o.weight,style:o.style,display:o.display});o.fontFace=a,await a.load(),document.fonts.add(a),await document.fonts.ready,this.styleID++,this.fontsDirty=!0})}addOverride(...e){const t=e.filter(i=>!this._overrides.includes(i));t.length>0&&(this._overrides.push(...t),this.styleID++)}removeOverride(...e){const t=e.filter(i=>this._overrides.includes(i));t.length>0&&(this._overrides=this._overrides.filter(i=>!t.includes(i)),this.styleID++)}toCSS(e){return[`transform: scale(${e})`,"transform-origin: top left","display: inline-block",`color: ${this.normalizeColor(this.fill)}`,`font-size: ${this.fontSize}px`,`font-family: ${this.fontFamily}`,`font-weight: ${this.fontWeight}`,`font-style: ${this.fontStyle}`,`font-variant: ${this.fontVariant}`,`letter-spacing: ${this.letterSpacing}px`,`text-align: ${this.align}`,`padding: ${this.padding}px`,`white-space: ${this.whiteSpace}`,...this.lineHeight?[`line-height: ${this.lineHeight}px`]:[],...this.wordWrap?[`word-wrap: ${this.breakWords?"break-all":"break-word"}`,`max-width: ${this.wordWrapWidth}px`]:[],...this.strokeThickness?[`-webkit-text-stroke-width: ${this.strokeThickness}px`,`-webkit-text-stroke-color: ${this.normalizeColor(this.stroke)}`,`text-stroke-width: ${this.strokeThickness}px`,`text-stroke-color: ${this.normalizeColor(this.stroke)}`,"paint-order: stroke"]:[],...this.dropShadow?[this.dropShadowToCSS()]:[],...this._overrides].join(";")}toGlobalCSS(){return this._fonts.reduce((e,t)=>`${e} @font-face { font-family: "${t.family}"; @@ -1166,7 +1166,7 @@ void main(void)\r font-weight: ${t.weight}; font-style: ${t.style}; font-display: ${t.display}; - }`,this._stylesheet)}get stylesheet(){return this._stylesheet}set stylesheet(e){this._stylesheet!==e&&(this._stylesheet=e,this.styleID++)}normalizeColor(e){return Array.isArray(e)&&(e=DP(e)),typeof e=="number"?LP(e):e}dropShadowToCSS(){let e=this.normalizeColor(this.dropShadowColor);const t=this.dropShadowAlpha,i=Math.round(Math.cos(this.dropShadowAngle)*this.dropShadowDistance),s=Math.round(Math.sin(this.dropShadowAngle)*this.dropShadowDistance);e.startsWith("#")&&t<1&&(e+=(t*255|0).toString(16).padStart(2,"0"));const r=`${i}px ${s}px`;return this.dropShadowBlur>0?`text-shadow: ${r} ${this.dropShadowBlur}px ${e}`:`text-shadow: ${r} ${e}`}reset(){Object.assign(this,va.defaultOptions)}onBeforeDraw(){const{fontsDirty:e}=this;return this.fontsDirty=!1,this.isSafari&&this._fonts.length>0&&e?new Promise(t=>setTimeout(t,100)):Promise.resolve()}get isSafari(){const{userAgent:e}=Ve.ADAPTER.getNavigator();return/^((?!chrome|android).)*safari/i.test(e)}set fillGradientStops(e){console.warn("[HTMLTextStyle] fillGradientStops is not supported by HTMLText")}get fillGradientStops(){return super.fillGradientStops}set fillGradientType(e){console.warn("[HTMLTextStyle] fillGradientType is not supported by HTMLText")}get fillGradientType(){return super.fillGradientType}set miterLimit(e){console.warn("[HTMLTextStyle] miterLimit is not supported by HTMLText")}get miterLimit(){return super.miterLimit}set trim(e){console.warn("[HTMLTextStyle] trim is not supported by HTMLText")}get trim(){return super.trim}set textBaseline(e){console.warn("[HTMLTextStyle] textBaseline is not supported by HTMLText")}get textBaseline(){return super.textBaseline}set leading(e){console.warn("[HTMLTextStyle] leading is not supported by HTMLText")}get leading(){return super.leading}set lineJoin(e){console.warn("[HTMLTextStyle] lineJoin is not supported by HTMLText")}get lineJoin(){return super.lineJoin}};vm.availableFonts={},vm.defaultOptions={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",letterSpacing:0,lineHeight:0,padding:0,stroke:"black",strokeThickness:0,whiteSpace:"normal",wordWrap:!1,wordWrapWidth:100};let tp=vm;const Zc=class ba extends to{constructor(e="",t={}){super(it.EMPTY),this._text=null,this._style=null,this._autoResolution=!0,this.localStyleID=-1,this.dirty=!1,this._updateID=0,this.ownsStyle=!1;const i=new Image,s=it.from(i,{scaleMode:Ve.SCALE_MODE,resourceOptions:{autoLoad:!1}});s.orig=new ht,s.trim=new ht,this.texture=s;const r="http://www.w3.org/2000/svg",o="http://www.w3.org/1999/xhtml",a=document.createElementNS(r,"svg"),c=document.createElementNS(r,"foreignObject"),l=document.createElementNS(o,"div"),d=document.createElementNS(o,"style");c.setAttribute("width","10000"),c.setAttribute("height","10000"),c.style.overflow="hidden",a.appendChild(c),this.maxWidth=ba.defaultMaxWidth,this.maxHeight=ba.defaultMaxHeight,this._domElement=l,this._styleElement=d,this._svgRoot=a,this._foreignObject=c,this._foreignObject.appendChild(d),this._foreignObject.appendChild(l),this._image=i,this._loadImage=new Image,this._autoResolution=ba.defaultAutoResolution,this._resolution=ba.defaultResolution??Ve.RESOLUTION,this.text=e,this.style=t}measureText(e){var d,u;const{text:t,style:i,resolution:s}=Object.assign({text:this._text,style:this._style,resolution:this._resolution},e);Object.assign(this._domElement,{innerHTML:t,style:i.toCSS(s)}),this._styleElement.textContent=i.toGlobalCSS(),document.body.appendChild(this._svgRoot);const r=this._domElement.getBoundingClientRect();this._svgRoot.remove();const{width:o,height:a}=r;(o>this.maxWidth||a>this.maxHeight)&&console.warn("[HTMLText] Large expanse of text, increase HTMLText.maxWidth or HTMLText.maxHeight property.");const c=Math.min(this.maxWidth,Math.ceil(o)),l=Math.min(this.maxHeight,Math.ceil(a));return this._svgRoot.setAttribute("width",c.toString()),this._svgRoot.setAttribute("height",l.toString()),t!==this._text&&(this._domElement.innerHTML=this._text),i!==this._style&&(Object.assign(this._domElement,{style:(d=this._style)==null?void 0:d.toCSS(s)}),this._styleElement.textContent=(u=this._style)==null?void 0:u.toGlobalCSS()),{width:c+i.padding*2,height:l+i.padding*2}}async updateText(e=!0){const{style:t,_image:i,_loadImage:s}=this;if(this.localStyleID!==t.styleID&&(this.dirty=!0,this.localStyleID=t.styleID),!this.dirty&&e)return;const{width:r,height:o}=this.measureText();i.width=s.width=Math.ceil(Math.max(1,r)),i.height=s.height=Math.ceil(Math.max(1,o)),this._updateID++;const a=this._updateID;await new Promise(c=>{s.onload=async()=>{if(a/gi,"
").replace(/
/gi,"
").replace(/ /gi," ")}};Zc.defaultDestroyOptions={texture:!0,children:!1,baseTexture:!0},Zc.defaultMaxWidth=2024,Zc.defaultMaxHeight=2024,Zc.defaultAutoResolution=!0;function au(n,e){const t=Math.max(0,Number(n)||0),i=Math.max(0,Number(e)||0);return{inner:Math.min(t,i),outer:Math.max(t,i)}}function AS(n){const e=Math.max(0,Number(n.outerRectW)||0),t=Math.max(0,Number(n.outerRectH)||0);return{innerW:Math.min(e,Math.max(0,Number(n.innerRectW)||0)),innerH:Math.min(t,Math.max(0,Number(n.innerRectH)||0)),outerW:e,outerH:t}}function H2(n,e,t,i,s){if(n==="random")return s();const r=Math.max(1,Math.round(t)),o=Math.max(0,Math.round(e))%r;return i?o/r:r<=1?.5:o/(r-1)}function Q0(n,e,t,i){const s=Math.sqrt(n*n+i()*(e*e-n*n));return{x:Math.cos(t)*s,y:-Math.sin(t)*s,radialAngle:-t*180/Math.PI}}function G2(n,e){const{innerW:t,innerH:i,outerW:s,outerH:r}=AS(n),o=Math.max(0,(s-t)/2),a=Math.max(0,(r-i)/2),c=o*r,l=t*a,d=c*2+l*2;if(d<=0){const p=s*2+r*2;if(p<=0)return{x:0,y:0,radialAngle:0};let m=e()*p,g,v;return mt?0:n==="linear"?1-e/t:n==="inverse"?Math.min(10,t/Math.max(e,t*.1)):1}function J2(n,e,t,i,s,r,o){const a=n-t,c=e-i,l=Math.hypot(a,c);if(l<=1e-4||l>r)return{x:0,y:0};const d=s*TS(o,l,r)*10;return{x:-c/l*d,y:a/l*d}}function Z2(n,e,t){const i=n.rotation*Math.PI/180,s=Math.cos(i),r=Math.sin(i),o=Math.max(1e-4,Math.abs(n.scaleX??1)),a=Math.max(1e-4,Math.abs(n.scaleY??1)),c=e-n.x,l=t-n.y,d=(s*c+r*l)/o,u=(-r*c+s*l)/a,h=(T,S,E,_)=>{const I=E/o,M=_/a,k=Math.max(1e-4,Math.hypot(I,M)),B=I/k,D=M/k,G=s*B-r*D,V=r*B+s*D;return{x:n.x+s*T*o-r*S*a+G*.05,y:n.y+r*T*o+s*S*a+V*.05,nx:G,ny:V}};if(n.shape==="circle"){const T=Math.max(.001,n.radius),S=Math.hypot(d,u);if(S>=T)return null;const E=S>1e-4?d/S:1,_=S>1e-4?u/S:0;return h(E*T,_*T,E,_)}if(n.shape==="ellipse"){const T=Math.max(.001,n.radiusX),S=Math.max(.001,n.radiusY),E=Math.hypot(d/T,u/S);if(E>=1)return null;const _=E>1e-4?1/E:1,I=E>1e-4?d*_:T,M=E>1e-4?u*_:0,k=Math.max(1e-4,Math.hypot(I/(T*T),M/(S*S)));return h(I,M,I/(T*T)/k,M/(S*S)/k)}if(n.shape==="rect"){const T=Math.max(.001,n.width*.5),S=Math.max(.001,n.height*.5);if(Math.abs(d)>=T||Math.abs(u)>=S)return null;const E=T-Math.abs(d),_=S-Math.abs(u);if(E<_){const M=d>=0?1:-1;return h(M*T,u,M,0)}const I=u>=0?1:-1;return h(d,I*S,0,I)}const f=Math.max(3,Math.min(16,Math.round(n.sides||(n.shape==="custom"?5:6)))),p=Math.max(.001,n.width*.5),m=Math.max(.001,n.height*.5),g=Array.from({length:f},(T,S)=>{const E=Math.PI*.5+S/f*Math.PI*2;return{x:Math.cos(E)*p,y:Math.sin(E)*m}});let v=!1;for(let T=0,S=g.length-1;Tu!=_.y>u&&d<(_.x-E.x)*(u-E.y)/(_.y-E.y)+E.x&&(v=!v)}if(!v)return null;let y=g[0].x,b=g[0].y,x=1/0;for(let T=0;T>>0^Math.imul(e+1,2654435761)^t)>>>0;return i^=i>>>16,i=Math.imul(i,2146121005),i^=i>>>15,i=Math.imul(i,2221713035),i^=i>>>16,(i>>>0)/4294967296}function oa(n,e,t,i,s){return n==="fixed"?e:n==="curve"?Li(e,t,ws(i,s)):Li(e,t,s)}function ip(n,e,t,i,s,r){return n==="curve"?Li(e,t,ws(i,s)):n==="random"?r:e}function iy(n,e,t,i,s){const r=1-s;return r*r*r*n+3*r*r*s*e+3*r*s*s*t+s*s*s*i}function ws(n,e,t="线性"){if(!Array.isArray(n)||n.length===0)return 1;const i=[...n].sort((s,r)=>s.x-r.x);if(e<=i[0].x)return i[0].y;if(e>=i[i.length-1].x)return i[i.length-1].y;for(let s=0;s=i[s].x&&e<=i[s+1].x){const r=i[s],o=i[s+1],a=o.x-r.x||1;if(t!=="贝塞尔")return Li(r.y,o.y,(e-r.x)/a);const c=r.x+(r.outX??a/3),l=r.y+(r.outY??(o.y-r.y)/3),d=o.x+(o.inX??-a/3),u=o.y+(o.inY??-(o.y-r.y)/3);let h=0,f=1;for(let p=0;p<14;p++){const m=(h+f)/2;iy(r.x,c,d,o.x,m)>>0;return function(){e|=0,e=e+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}function Da(n){let e=n.replace("#","");return e.length===3&&(e=e.split("").map(t=>t+t).join("")),parseInt(e,16)}function eF(n,e,t){const i=ny(n),s=ny(e),r=Math.round(i[0]+(s[0]-i[0])*t),o=Math.round(i[1]+(s[1]-i[1])*t),a=Math.round(i[2]+(s[2]-i[2])*t);return r<<16|o<<8|a}function bm(n,e){if(!Array.isArray(n)||n.length===0)return 16777215;const t=[...n].sort((i,s)=>i.position-s.position);if(e<=t[0].position)return Da(t[0].color);if(e>=t[t.length-1].position)return Da(t[t.length-1].color);for(let i=0;ir.position)continue;const o=(e-s.position)/Math.max(1e-4,r.position-s.position);return eF(s.color,r.color,o)}return Da(t[t.length-1].color)}function ny(n){let e=n.replace("#","");e.length===3&&(e=e.split("").map(i=>i+i).join(""));const t=parseInt(e,16);return[t>>16&255,t>>8&255,t&255]}function sy(n,e){const t=Math.min(255,(n>>16&255)+(e>>16&255)),i=Math.min(255,(n>>8&255)+(e>>8&255)),s=Math.min(255,(n&255)+(e&255));return t<<16|i<<8|s}function tF(){return{sprite:null,boneName:"",mesh:null,meshSignature:"",history:[],bones:[],skinWeights:[],currentWidth:0,currentAlpha:0,currentColor:16777215,resourceId:1,enabled:!1,sampledLength:100,sampledWidth:100}}function _d(n){n.history.length=0,n.bones.length=0,n.mesh&&(n.mesh.visible=!1)}class iF{constructor(e){A(this,"container");this.container=e}ensureMesh(e,t,i){const s=t.trailResources.find(g=>g.id===e.resourceId)||t.trailResources[0],r=(s==null?void 0:s.texture)||it.EMPTY,o=Number(s==null?void 0:s.rotation)||0,a=Math.max(2,Math.min(16,Math.round(t.trailGridRows))),c=Math.max(2,Math.min(32,Math.round(t.trailGridCols))),l=Math.max(2,Math.min(16,Math.round((s==null?void 0:s.boneCount)??3))),d=`${a}:${c}:${l}:${(s==null?void 0:s.id)??0}:${o}`;if(e.mesh&&e.meshSignature===d)return e.mesh.texture!==r&&(e.mesh.texture=r),e.mesh;e.mesh&&(this.container.removeChild(e.mesh),e.mesh.destroy()),e.meshSignature&&e.meshSignature!==d&&(e.history.length=0,e.bones.length=0);const u=new Float32Array(a*c*2),h=new Float32Array(a*c*2),f=[],p=[];for(let g=0;g.05?e.history.unshift({x:t,y:i}):(r.x=t,r.y=i);const o=Math.max(1,s)*1.5;let a=0,c=e.history.length;for(let l=1;l=o||l>=239){c=l+1;break}e.history.length>c&&(e.history.length=c)}sampleBones(e,t,i){const s=Math.max(2,Math.min(16,Math.round(i))),r=e.history,o=[];if(!r.length)return o;let a=0;for(let l=1;l=d&&g>1e-4){const v=(d-u)/g;h={x:Li(p.x,m.x,v),y:Li(p.y,m.y,v)};break}u+=g}o.push({boneName:`${e.boneName}_trail_${l}`,x:h.x,y:h.y,rotation:0})}for(let l=0;l1){const l=o[0].rotation,u=(o[o.length-1].rotation-l+540)%360-180;for(let h=0;hd.id===i.resourceId)||t.trailResources[0];if(!(r!=null&&r.texture)||i.bones.length<2){s.visible=!1;return}e.resourceId=r.id,s.texture!==r.texture&&(s.texture=r.texture);const o=Math.max(2,Math.min(16,Math.round(t.trailGridRows))),a=Math.max(2,Math.min(32,Math.round(t.trailGridCols))),c=s.vertices,l=[];for(let d=0;d.5&&i.alpha>0}update(e,t,i,s,r,o,a){if(e.sprite=a,e.boneName=i,!t.trail||!e.enabled||e.sampledLength<=0||e.sampledWidth<=0){_d(e);return}this.ensureMesh(e,t,a);const c=t.trailResources.find(f=>f.id===e.resourceId)||t.trailResources[0];this.appendPoint(e,s,r,e.sampledLength);const l=c!=null&&c.lifeLengthEnabled?Math.max(0,ws(c.lifeLengthCurve,o)):1,d=Math.max(0,e.sampledLength)*l;e.bones=this.sampleBones(e,d,(c==null?void 0:c.boneCount)??3),e.bones[0]&&(e.bones[0].x=s,e.bones[0].y=r);const u=(c==null?void 0:c.widthMode)==="particle"?(Math.abs(a.scale.x)+Math.abs(a.scale.y))*.5:1;e.currentWidth=Math.max(0,e.sampledWidth)*u,e.currentAlpha=(c==null?void 0:c.alphaMode)==="particle"?a.alpha:(c==null?void 0:c.alphaMode)==="curve"?ws(c.alphaCurve,o):(c==null?void 0:c.alpha)??1,e.currentColor=(c==null?void 0:c.colorMode)==="particle"?a.tint:(c==null?void 0:c.colorMode)==="curve"?bm(c.colorGradient,o):Da((c==null?void 0:c.color)||"#ffffff");const h={bones:e.bones.map(f=>({...f})),activeBoneCount:e.bones.length,width:e.currentWidth,alpha:Math.min(1,Math.max(0,e.currentAlpha)),colorHex:e.currentColor,resourceId:e.resourceId};return this.skinMesh(e,t,h),h}applyState(e,t,i,s){var r;e.sprite=i,e.resourceId=s.resourceId??((r=t.trailResources[0])==null?void 0:r.id)??1,e.bones=s.bones.map(o=>({...o})),e.currentWidth=s.width,e.currentAlpha=s.alpha,this.skinMesh(e,t,s)}drawDebug(e,t,i,s){if(e.clear(),!t||!i.trail)return;const r=Math.max(2,Math.min(16,Math.round(i.trailGridRows))),o=Math.max(2,Math.min(32,Math.round(i.trailGridCols)));e.lineStyle(1,3790847,.72);for(const a of s){const c=a.mesh;if(!(c!=null&&c.visible))continue;const l=c.vertices,d=(u,h)=>{const f=(u*r+h)*2;return{x:l[f],y:l[f+1]}};for(let u=0;ur.texture||r.sequenceFrames.some(o=>o.texture));if(!t.length)return nF(n.texture);const i=t.reduce((r,o)=>r+Math.max(0,o.weight),0);if(i<=0)return t[Math.floor(e()*t.length)];let s=e()*i;for(const r of t)if(s-=Math.max(0,r.weight),s<=0)return r;return t[t.length-1]}function oF(n,e){const t=n.trailResources.filter(r=>r.texture);if(!t.length)return n.trailResources[0]||sF();const i=t.reduce((r,o)=>r+Math.max(0,o.weight),0);if(i<=0)return t[Math.min(t.length-1,Math.floor(e*t.length))];let s=e*i;for(const r of t)if(s-=Math.max(0,r.weight),s<=0)return r;return t[t.length-1]}function ry(n,e){if(n.imageMode!=="sequence"||n.sequenceFrames.length<=1)return{index:0,visible:!0};const t=Math.min(120,Math.max(1,Number(n.sequenceFps)||30)),i=Math.max(0,Math.floor(Math.max(0,e)*t)),s=n.sequenceFrames.length-1;return n.sequencePlayback==="once-hide"?{index:Math.min(s,i),visible:i<=s}:n.sequencePlayback==="once-hold"?{index:Math.min(s,i),visible:!0}:n.sequencePlayback==="loop-reverse"?{index:s-i%n.sequenceFrames.length,visible:!0}:{index:i%n.sequenceFrames.length,visible:!0}}function sp(n,e,t){var i;return n.imageMode==="sequence"&&n.sequenceFrames.length?((i=n.sequenceFrames[Math.max(0,Math.min(n.sequenceFrames.length-1,t))])==null?void 0:i.texture)||n.texture||e:n.texture||e}function tc(){return{texture:null,imageResources:[{id:1,texture:null,textureName:"star",textureFolder:"",previewUrl:"/images/star.png",imageMode:"fixed",sequencePlayback:"loop-forward",sequenceFps:30,sequenceFrames:[],weight:100,locked:!1,scale:1,anchorX:.5,anchorY:.5,colorMode:"fixed",colorStart:"#ffffff",colorEnd:"#ff4d4d",colorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ff4d4d"}],blend:"normal",independentAlpha:"off",alpha:1,alphaCurveMode:"跟随导出",alphaCurve:[{x:0,y:0},{x:.1,y:1},{x:.9,y:1},{x:1,y:0}]}],imageWeightVersion:1,name:"ParticleSystem1",mode:"stream",rate:20,streamBehavior:"normal",loopDurationFrames:30,generateLoopStartAnimation:!1,loopStartUseCustomDuration:!1,loopStartDurationFrames:30,generateLoopEndAnimation:!1,loopEndUseCustomDuration:!1,loopEndDurationFrames:30,burstCount:50,burstLoop:!1,delay:0,duration:1,shape:"point",showShape:!0,shapeRangeVersion:1,innerRadius:0,outerRadius:30,innerRectW:0,innerRectH:0,outerRectW:60,outerRectH:40,spawnPathId:0,spawnPathDistribution:"fixed",radius:30,rectW:60,rectH:40,centerX:0,centerY:0,rootRotation:0,rootScaleX:1,rootScaleY:1,renderLayerMode:"top",renderLayerSpineId:0,renderLayerSlotName:"",renderLayerSlotPosition:"above",renderLayerFollowAttachment:!1,emissionAngleMode:"random",direction:0,spread:360,coneDirection:90,coneAngle:60,lifeMin:.6,lifeMax:1.8,lifeMode:"random",lifeCurve:[{x:0,y:0},{x:1,y:1}],speedMin:30,speedMax:140,speedMode:"random",speedCurve:[{x:0,y:0},{x:1,y:1}],scaleMin:.3,scaleMax:.8,scaleMode:"random",scaleAxisMode:"uniform",scaleYMin:.3,scaleYMax:.8,scaleCurve:[{x:0,y:0},{x:1,y:1}],scaleYCurve:[{x:0,y:0},{x:1,y:1}],scaleEndRatio:.3,initialRotationMode:"random",initialRotationMin:0,initialRotationMax:360,initialRotationCurve:[{x:0,y:0},{x:1,y:1}],alpha:.9,alphaEnd:0,rotationSpeedMin:-180,rotationSpeedMax:180,speedOverLifeEnabled:!1,speedOverLifeMode:"fixed",speedOverLifeMin:1,speedOverLifeMax:1,speedOverLifeCurve:[{x:0,y:1},{x:1,y:1}],scaleOverLifeEnabled:!1,scaleOverLifeMode:"curve",scaleOverLifeAxisMode:"uniform",scaleOverLifeMin:0,scaleOverLifeMax:1,scaleYOverLifeMin:0,scaleYOverLifeMax:1,scaleOverLifeCurve:[{x:0,y:1},{x:1,y:1}],scaleYOverLifeCurve:[{x:0,y:1},{x:1,y:1}],rotationOverLifeEnabled:!1,rotationOverLifeMode:"random",rotationOverLifeCurve:[{x:0,y:0},{x:1,y:1}],gravity:980,gravityMode:"fixed",gravityMin:980,gravityMax:980,gravityDirection:-90,gravityCurve:[{x:0,y:1},{x:1,y:1}],damping:0,seed:0,colorStart:"#ffffff",colorEnd:"#ff4d4d",colorOverLife:!1,blend:"add",alphaMode:"curve",curveMode:"线性",alphaCurve:[{x:0,y:0},{x:.2,y:1},{x:.8,y:1},{x:1,y:0}],textureName:"star",textureFolder:"",alphaScale:1,anchorX:.5,anchorY:.5,independentAlpha:"off",offsetX:0,offsetY:0,noise:!1,noiseAmt:30,noiseRange:100,noiseSpeed:1,useGravity:!1,wind:!1,windX:0,windY:0,windMode:"fixed",windMin:100,windMax:100,windDirection:0,windCurve:[{x:0,y:1},{x:1,y:1}],forceField:!1,forceStrength:10,forceRadius:100,forceCenterX:0,forceCenterY:0,forceFalloff:"linear",showForceFieldShape:!0,vortex:!1,vortexStrength:10,vortexRadius:100,vortexCenterX:0,vortexCenterY:0,vortexFalloff:"linear",showVortexShape:!0,attraction:!1,attractionCenterX:200,attractionCenterY:0,attractionRadius:20,attractionDuration:.5,attractionDelay:.1,attractionDelayMode:"particle",attractionPath:"curve",showAttractionShape:!0,trail:!1,trailConfigVersion:3,trailResources:[{id:1,texture:null,textureName:"trail",previewUrl:"/images/trail.png",weight:100,locked:!1,rotation:0,colorMode:"particle",color:"#ffffff",colorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}],blend:"normal",alphaMode:"particle",alpha:1,alphaCurve:[{x:0,y:1},{x:1,y:1}],boneCount:3,trailRatio:100,lengthMode:"fixed",length:100,lengthMin:100,lengthMax:100,widthSizeMode:"fixed",width:100,widthMin:100,widthMax:100,widthMode:"particle",lifeLengthEnabled:!1,lifeLengthCurve:[{x:0,y:1},{x:1,y:1}],shapeEnabled:!1,shapeCurve:[{x:0,y:1},{x:1,y:1}]}],trailResourceVersion:6,trailTexture:null,trailTextureName:"trail",trailPreviewUrl:"/images/trail.png",trailColorMode:"particle",trailColor:"#ffffff",trailColorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}],trailAlphaMode:"particle",trailAlpha:1,trailAlphaCurve:[{x:0,y:1},{x:1,y:1}],trailBoneCount:3,trailLength:100,trailWidth:100,trailWidthMode:"particle",trailLifeLengthEnabled:!1,trailLifeLengthCurve:[{x:0,y:1},{x:1,y:1}],trailShapeEnabled:!1,trailShapeCurve:[{x:0,y:1},{x:1,y:1}],trailGridRows:4,trailGridCols:4,collision:!1,collisionColliderIds:[],pathFollow:!1,eventEnabled:!1,events:[],emitterFollow:!1,emitterFollowMode:"none",emitterFollowPathId:0,emitterFollowSpineId:0,emitterFollowBoneName:"",emitterFollowBoneOffsetX:0,emitterFollowBoneOffsetY:0,emitterFollowBoneRotation:0,emitterFollowBoneScaleX:1,emitterFollowBoneScaleY:1,emitterAngleMode:"fixed",emitterFollowCurve:[{x:0,y:0},{x:1,y:1}],emitterFollowDuration:2,emitterFollowSpace:"world",emitterFollowDirection:"forward",emitterFollowOffset:0}}function lr(n){var I;const e=tc(),t=n,i=t.shapeRangeVersion!==1,s=Number(t.radius),r=Number(t.rectW),o=Number(t.rectH),a=Number(t.direction),c=Number(t.spread),l=t.shape,d=t.imageWeightVersion!==1,u=t.loopDurationFrames==null,h=t.gravityMode==null,f=Number(t.gravity),p=t.windMode==null,m=Number(t.windX),g=Number(t.windY),v=t.forceFalloff==null,y=Number(t.forceStrength),b=t.trailConfigVersion!==3,x=!Array.isArray(t.trailResources),C=t.trailResourceVersion!==6,T=t.trailTexture,S=String(t.trailTextureName||"trail"),E=String(t.trailPreviewUrl||"/images/trail.png").replace("/trails/trail.png","/images/trail.png");for(const[M,k]of Object.entries(e))t[M]!==void 0&&t[M]!==null||(t[M]=Array.isArray(k)?k.map(B=>typeof B=="object"&&B!==null?{...B}:B):k);i&&(n.innerRadius=0,n.outerRadius=Math.max(0,Number.isFinite(s)?s:e.outerRadius),n.innerRectW=0,n.innerRectH=0,n.outerRectW=Math.max(0,Number.isFinite(r)?r:e.outerRectW),n.outerRectH=Math.max(0,Number.isFinite(o)?o:e.outerRectH),n.coneDirection=Number.isFinite(a)?a:90,n.emissionAngleMode=Number.isFinite(c)&&c>0?"random":"fixed",l==="cone"&&(n.spread=Math.max(0,Number(n.coneAngle)||0)),n.shapeRangeVersion=1),n.shape==="orbit"&&(n.shape="path"),["fixed","random","radial","path-normal","path-tangent"].includes(n.emissionAngleMode)||(n.emissionAngleMode="fixed"),!["circle","rect","cone"].includes(n.shape)&&n.emissionAngleMode==="radial"&&(n.emissionAngleMode="fixed"),n.shape!=="path"&&(n.emissionAngleMode==="path-normal"||n.emissionAngleMode==="path-tangent")&&(n.emissionAngleMode="fixed"),n.spawnPathId=Math.max(0,Math.round(Number(n.spawnPathId)||0)),n.spawnPathDistribution!=="fixed"&&n.spawnPathDistribution!=="random"&&(n.spawnPathDistribution="fixed"),n.renderLayerMode!=="top"&&n.renderLayerMode!=="slot"&&(n.renderLayerMode="top"),n.renderLayerSpineId=Math.max(0,Math.round(Number(n.renderLayerSpineId)||0)),typeof n.renderLayerSlotName!="string"&&(n.renderLayerSlotName=""),n.renderLayerSlotPosition!=="above"&&n.renderLayerSlotPosition!=="below"&&(n.renderLayerSlotPosition="above"),typeof n.renderLayerFollowAttachment!="boolean"&&(n.renderLayerFollowAttachment=!1),typeof n.eventEnabled!="boolean"&&(n.eventEnabled=!1),Array.isArray(n.events)||(n.events=[]);for(const M of n.events){M.id=Math.max(1,Math.round(Number(M.id)||1)),M.event!=="birth"&&M.event!=="death"&&M.event!=="collision"&&(M.event="birth"),M.targetSystemId=Math.max(0,Math.round(Number(M.targetSystemId)||0));const k=Number(M.probability);M.probability=Math.min(1,Math.max(0,Number.isFinite(k)?k:1));const B=Math.round(Number(M.collisionLimit));M.collisionLimit=Math.min(4,Math.max(1,Number.isFinite(B)?B:1));const D=M.inherit,G=["color","scale","rotation","life"],V=Array.isArray(D)?D:D==="all"?[...G]:G.includes(String(D))?[String(D)]:[],Y=[...new Set(V.filter(N=>G.includes(String(N))))],L=Array.isArray(D)?D:null;(!L||L.length!==Y.length||Y.some((N,F)=>N!==L[F]))&&(M.inherit=Y),M.colorInheritMode!=="add"&&M.colorInheritMode!=="replace"&&(M.colorInheritMode="add")}n.innerRadius=Math.max(0,Number(n.innerRadius)||0),n.outerRadius=Math.max(n.innerRadius,Number(n.outerRadius)||0),n.innerRectW=Math.max(0,Number(n.innerRectW)||0),n.innerRectH=Math.max(0,Number(n.innerRectH)||0),n.outerRectW=Math.max(n.innerRectW,Number(n.outerRectW)||0),n.outerRectH=Math.max(n.innerRectH,Number(n.outerRectH)||0);const _=Array.from(new Set((Array.isArray(n.collisionColliderIds)?n.collisionColliderIds:[]).map(M=>Math.round(Number(M))).filter(M=>Number.isFinite(M)&&M>0)));(_.length!==n.collisionColliderIds.length||_.some((M,k)=>M!==n.collisionColliderIds[k]))&&(n.collisionColliderIds=_),n.streamBehavior!=="normal"&&n.streamBehavior!=="loop"&&(n.streamBehavior="normal"),(u||!Number.isFinite(n.loopDurationFrames))&&(n.loopDurationFrames=Math.ceil(Math.max(1/30,Number(n.duration)||1)*30)),n.loopDurationFrames=Math.min(1800,Math.max(1,Math.ceil(n.loopDurationFrames))),typeof n.generateLoopStartAnimation!="boolean"&&(n.generateLoopStartAnimation=!1),typeof n.generateLoopEndAnimation!="boolean"&&(n.generateLoopEndAnimation=!1),typeof n.loopStartUseCustomDuration!="boolean"&&(n.loopStartUseCustomDuration=!1),typeof n.loopEndUseCustomDuration!="boolean"&&(n.loopEndUseCustomDuration=!1),n.loopStartDurationFrames=Math.min(1800,Math.max(1,Math.ceil(Number(n.loopStartDurationFrames)||30))),n.loopEndDurationFrames=Math.min(1800,Math.max(1,Math.ceil(Number(n.loopEndDurationFrames)||30))),(!Array.isArray(n.imageResources)||n.imageResources.length===0)&&(n.imageResources=tc().imageResources);for(const M of n.imageResources){!M.texture&&n.texture&&(M.texture=n.texture),M.textureName||(M.textureName="star"),M.previewUrl==="/particles/star.png"&&(M.previewUrl="/images/star.png"),M.previewUrl||(M.previewUrl=M.textureName==="star"?"/images/star.png":""),M.imageMode!=="fixed"&&M.imageMode!=="sequence"&&(M.imageMode="fixed"),M.sequencePlayback==="once"?M.sequencePlayback="once-hold":M.sequencePlayback==="loop"?M.sequencePlayback="loop-forward":["once-hide","once-hold","loop-forward","loop-reverse"].includes(M.sequencePlayback)||(M.sequencePlayback="loop-forward"),Number.isFinite(M.sequenceFps)||(M.sequenceFps=30),M.sequenceFps=Math.min(120,Math.max(1,Number(M.sequenceFps)||30)),Array.isArray(M.sequenceFrames)||(M.sequenceFrames=[]);for(const k of M.sequenceFrames)typeof k.name!="string"&&(k.name=""),typeof k.previewUrl!="string"&&(k.previewUrl=""),k.texture===void 0&&(k.texture=null);Number.isFinite(M.weight)||(M.weight=100),typeof M.locked!="boolean"&&(M.locked=!1),Number.isFinite(M.scale)||(M.scale=1),Number.isFinite(M.anchorX)||(M.anchorX=.5),Number.isFinite(M.anchorY)||(M.anchorY=.5),M.colorMode!=="fixed"&&M.colorMode!=="random"&&M.colorMode!=="lifetime"&&(M.colorMode=n.colorOverLife?"lifetime":"fixed"),M.colorStart||(M.colorStart=n.colorStart||"#ffffff"),M.colorEnd||(M.colorEnd=n.colorEnd||M.colorStart),(!Array.isArray(M.colorGradient)||M.colorGradient.length<2)&&(M.colorGradient=[{position:0,color:M.colorStart},{position:1,color:M.colorEnd}]),Object.prototype.hasOwnProperty.call(Yr,M.blend)||(M.blend=n.blend||"normal"),["off","fixed","curve"].includes(M.independentAlpha)||(M.independentAlpha=n.independentAlpha||"off"),Number.isFinite(M.alpha)||(M.alpha=Number.isFinite(n.alphaScale)?n.alphaScale:1),["跟随导出","线性","贝塞尔"].includes(M.alphaCurveMode)||(M.alphaCurveMode=n.curveMode||"跟随导出"),(!Array.isArray(M.alphaCurve)||M.alphaCurve.length<2)&&(M.alphaCurve=(n.alphaCurve||[{x:0,y:1},{x:1,y:1}]).map(k=>({...k})))}if(n.imageResources.length===1)n.imageResources[0].weight=100,n.imageResources[0].locked=!1;else if(d){const M=100/n.imageResources.length;n.imageResources.forEach((k,B)=>{k.weight=B===n.imageResources.length-1?100-M*(n.imageResources.length-1):M,k.locked=!1})}if(n.imageWeightVersion=1,h){const M=Number.isFinite(f)&&f!==0?f:980;n.gravity=M,n.gravityMin=M,n.gravityMax=M}if(p){const M=Number.isFinite(m)&&Number.isFinite(g)&&(m!==0||g!==0);n.windMin=M?Math.hypot(m,g):100,n.windMax=n.windMin,n.windDirection=M?Math.atan2(-g,m)*180/Math.PI:0}v&&(n.forceStrength=Number.isFinite(y)&&y!==0?y:10),b&&(n.trailConfigVersion=3,n.trailAlphaCurve=[{x:0,y:1},{x:1,y:1}],n.trailLifeLengthCurve=[{x:0,y:1},{x:1,y:1}],n.trailShapeCurve=[{x:0,y:1},{x:1,y:1}],n.trailGridRows=4,n.trailGridCols=4),(x||!n.trailResources.length)&&(n.trailResources=[{id:1,texture:T||null,textureName:S,previewUrl:E,weight:100,locked:!1,rotation:0,colorMode:n.trailColorMode,color:n.trailColor,colorGradient:n.trailColorGradient.map(M=>({...M})),blend:"normal",alphaMode:n.trailAlphaMode,alpha:n.trailAlpha,alphaCurve:n.trailAlphaCurve.map(M=>({...M})),boneCount:n.trailBoneCount,trailRatio:100,lengthMode:"fixed",length:n.trailLength,lengthMin:n.trailLength,lengthMax:n.trailLength,widthSizeMode:"fixed",width:n.trailWidth,widthMin:n.trailWidth,widthMax:n.trailWidth,widthMode:n.trailWidthMode,lifeLengthEnabled:n.trailLifeLengthEnabled,lifeLengthCurve:n.trailLifeLengthCurve.map(M=>({...M})),shapeEnabled:n.trailShapeEnabled,shapeCurve:n.trailShapeCurve.map(M=>({...M}))}]);for(const M of n.trailResources)M.textureName||(M.textureName="trail"),M.previewUrl==="/trails/trail.png"&&(M.previewUrl="/images/trail.png"),M.previewUrl||(M.previewUrl="/images/trail.png"),Number.isFinite(M.weight)||(M.weight=100),typeof M.locked!="boolean"&&(M.locked=!1),Number.isFinite(M.rotation)||(M.rotation=0),["particle","fixed","curve"].includes(M.colorMode)||(M.colorMode=n.trailColorMode||"particle"),M.color||(M.color=n.trailColor||"#ffffff"),(!Array.isArray(M.colorGradient)||M.colorGradient.length<2)&&(M.colorGradient=(n.trailColorGradient||[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}]).map(k=>({...k}))),Object.prototype.hasOwnProperty.call(Yr,M.blend)||(M.blend="normal"),["particle","fixed","curve"].includes(M.alphaMode)||(M.alphaMode=n.trailAlphaMode||"particle"),Number.isFinite(M.alpha)||(M.alpha=Number.isFinite(n.trailAlpha)?n.trailAlpha:1),(!Array.isArray(M.alphaCurve)||M.alphaCurve.length<2)&&(M.alphaCurve=(n.trailAlphaCurve||[{x:0,y:1},{x:1,y:1}]).map(k=>({...k}))),Number.isFinite(M.boneCount)||(M.boneCount=Number.isFinite(n.trailBoneCount)?n.trailBoneCount:3),Number.isFinite(M.trailRatio)||(M.trailRatio=100),M.trailRatio=Math.min(100,Math.max(0,M.trailRatio)),["fixed","random"].includes(M.lengthMode)||(M.lengthMode="fixed"),Number.isFinite(M.length)||(M.length=Number.isFinite(n.trailLength)?n.trailLength:100),Number.isFinite(M.lengthMin)||(M.lengthMin=M.length),Number.isFinite(M.lengthMax)||(M.lengthMax=M.length),["fixed","random"].includes(M.widthSizeMode)||(M.widthSizeMode="fixed"),Number.isFinite(M.width)||(M.width=Number.isFinite(n.trailWidth)?n.trailWidth:100),Number.isFinite(M.widthMin)||(M.widthMin=M.width),Number.isFinite(M.widthMax)||(M.widthMax=M.width),["particle","fixed"].includes(M.widthMode)||(M.widthMode=n.trailWidthMode||"particle"),typeof M.lifeLengthEnabled!="boolean"&&(M.lifeLengthEnabled=!!n.trailLifeLengthEnabled),(!Array.isArray(M.lifeLengthCurve)||M.lifeLengthCurve.length<2)&&(M.lifeLengthCurve=(n.trailLifeLengthCurve||[{x:0,y:1},{x:1,y:1}]).map(k=>({...k}))),typeof M.shapeEnabled!="boolean"&&(M.shapeEnabled=!!n.trailShapeEnabled),(!Array.isArray(M.shapeCurve)||M.shapeCurve.length<2)&&(M.shapeCurve=(n.trailShapeCurve||[{x:0,y:1},{x:1,y:1}]).map(k=>({...k})));if(n.trailResources.length===1&&(n.trailResources[0].weight=100,n.trailResources[0].locked=!1),C)for(const M of n.trailResources)M.alphaCurve=((I=M.alphaCurve)==null?void 0:I.length)>=2?M.alphaCurve:[{x:0,y:1},{x:1,y:1}];return n.trailResourceVersion=6,n}class oy extends _i{constructor(t,i=ey){super();A(this,"pool",[]);A(this,"cfg");A(this,"accumulator",0);A(this,"burstTimer",0);A(this,"_spawnSerial",0);A(this,"_elapsed",0);A(this,"_attractionEnabledAt",0);A(this,"_attractionWasEnabled",!1);A(this,"autoEmission",!0);A(this,"pendingEventSpawns",[]);A(this,"states",[]);A(this,"onParticleEvent",null);A(this,"rng",Math.random);A(this,"_lastSeed",-1);A(this,"trailDebugGfx",new Ki);A(this,"trail");A(this,"colliders",[]);A(this,"followSpawnX",0);A(this,"followSpawnY",0);A(this,"followSpawnAngle",0);A(this,"spawnPathSampler",null);A(this,"spawnPathClosed",!1);A(this,"followExportCurveMode","线性");A(this,"simulationTransform",null);this.cfg=lr(t),this.trail=new iF(this),this._ensurePool(i),this.addChild(this.trailDebugGfx)}setFollowExportCurveMode(t){this.followExportCurveMode=t}resolveCurveMode(t){return t==="跟随导出"?this.followExportCurveMode:t}reseed(){const t=this.cfg.seed;t!==this._lastSeed&&(this._lastSeed=t,this.rng=np(t>>>0))}_ensurePool(t){for(;this.pool.length=s.delay),o=i==="force"||i==="normal"&&(s.mode==="burst"||this._elapsed=1;)this.accumulator-=1,this.spawnOne();else this.burstTimer+=t,s.burstLoop?this.burstTimer>=1&&(this.burstTimer=0,this.emitBurst()):t>0&&this.burstTimer<=t&&this.emitBurst();if(this.pendingEventSpawns.length&&t>0){const p=[],m=[];for(const g of this.pendingEventSpawns)g.remaining-=t,g.remaining<=0?p.push(g):m.push(g);this.pendingEventSpawns=m;for(const g of p){const v=ed(this.cfg,g.worldX,g.worldY,this.simulationTransform);for(let y=0;y0){const N=Math.max(1e-4,Math.abs(s.rootScaleX)),F=Math.max(1e-4,Math.abs(s.rootScaleY)),$=-(((c=this.simulationTransform)==null?void 0:c.rotation)??s.rootRotation)*Math.PI/180,X=Math.cos($),z=Math.sin($),K=((l=this.simulationTransform)==null?void 0:l.centerX)??s.centerX,J=((d=this.simulationTransform)==null?void 0:d.centerY)??s.centerY,oe=K+X*N*m.x-z*F*m.y,le=-J+z*N*m.x+X*F*m.y,ve=oe,Se=-le,fe=s.forceCenterX-ve,be=s.forceCenterY-Se,q=Math.hypot(fe,be);if(q>1e-4&&q<=s.forceRadius){const Z=TS(s.forceFalloff,q,s.forceRadius),se=s.forceStrength*Z*10,j=fe/q*se,H=be/q*se,O=j,U=-H;m.vx+=(X*O+z*U)/N*t,m.vy+=(-z*O+X*U)/F*t}}if(!m.collisionPaused&&s.vortex&&s.vortexStrength!==0&&s.vortexRadius>0){const N=Cr(s,m.x,m.y,this.simulationTransform),F=J2(N.x,N.y,s.vortexCenterX,s.vortexCenterY,s.vortexStrength,s.vortexRadius,s.vortexFalloff),$=ty(s,F.x,F.y,this.simulationTransform);m.vx+=$.x*t,m.vy+=$.y*t}if(!m.collisionPaused&&s.damping>0){const N=Math.max(0,1-s.damping*t);m.vx*=N,m.vy*=N}if(m.collisionPaused)m.vx=0,m.vy=0;else if(m.x+=m.vx*t,m.y+=m.vy*t,this.applyColliders(m,p))continue;if(s.attraction&&!m.collisionPaused){const N=m.maxLife-m.life;if(s.attractionDelayMode==="particle"?N>=Math.max(0,s.attractionDelay):this._elapsed-this._attractionEnabledAt>=Math.max(0,s.attractionDelay)){const $=Cr(s,m.x,m.y,this.simulationTransform),X=s.attractionCenterX,z=s.attractionCenterY,K=Math.max(0,s.attractionRadius);if(!m.attractionActive){if(Math.hypot(X-$.x,z-$.y)<=K){this.kill(p);continue}m.attractionActive=!0,m.attractionElapsed=0,m.attractionStartWorldX=$.x,m.attractionStartWorldY=$.y}m.attractionElapsed+=t;const J=Math.max(1e-4,s.attractionDuration),oe=Math.min(1,m.attractionElapsed/J);let le=Li(m.attractionStartWorldX,X,oe),ve=Li(m.attractionStartWorldY,z,oe);if(s.attractionPath==="curve"){const be=X-m.attractionStartWorldX,q=z-m.attractionStartWorldY,Z=Math.hypot(be,q);if(Z>1e-4){const se=Z*.25*m.attractionCurveSide,j=(m.attractionStartWorldX+X)*.5-q/Z*se,H=(m.attractionStartWorldY+z)*.5+be/Z*se,O=1-oe;le=O*O*m.attractionStartWorldX+2*O*oe*j+oe*oe*X,ve=O*O*m.attractionStartWorldY+2*O*oe*H+oe*oe*z}}const Se=Math.hypot(X-le,z-ve);if(oe>=1||Se<=K){this.kill(p);continue}const fe=ed(s,le,ve,this.simulationTransform);m.x=fe.x,m.y=fe.y,m.vx=0,m.vy=0}}const v=g,y=m.sprite,b=s.imageResources.find(N=>N.id===m.resourceId);if(b){const N=ry(b,m.maxLife-m.life);m.imageFrameIndex=N.index,y.texture=sp(b,s.texture,m.imageFrameIndex),y.visible=N.visible}if(s.speedOverLifeEnabled){const N=Qc(ip(s.speedOverLifeMode,s.speedOverLifeMin,s.speedOverLifeMax,s.speedOverLifeCurve,v,m.speedScaleTarget),1),F=m.speedScale===0?N:N/m.speedScale;m.vx*=F,m.vy*=F,m.speedScale=N}let x=m.rotationSpeed;s.rotationOverLifeEnabled&&s.rotationOverLifeMode==="curve"&&(x=Li(s.rotationSpeedMin,s.rotationSpeedMax,ws(s.rotationOverLifeCurve,v))),m.rotation+=x*t;let C=m.x,T=m.y;if(s.noise&&s.noiseAmt>0&&s.noiseRange>0&&s.noiseSpeed>0){const N=m.maxLife-m.life,F=Math.max(0,s.noiseRange)*Math.min(1,Math.max(0,s.noiseAmt)/100)*.5,$=N*Math.max(0,s.noiseSpeed)*Math.PI*2;C+=(Math.sin(m.noisePhaseX+$)-Math.sin(m.noisePhaseX))*F,T+=(Math.sin(m.noisePhaseY+$*.83)-Math.sin(m.noisePhaseY))*F}y.x=C,y.y=T,y.rotation=-m.rotation*Math.PI/180;let S=1,E=1;s.scaleOverLifeEnabled&&(S=ip(s.scaleOverLifeMode,s.scaleOverLifeMin,s.scaleOverLifeMax,s.scaleOverLifeCurve,v,m.scaleOverLifeX),E=s.scaleOverLifeAxisMode==="separate"?ip(s.scaleOverLifeMode,s.scaleYOverLifeMin,s.scaleYOverLifeMax,s.scaleYOverLifeCurve,v,m.scaleOverLifeY):S),y.scale.set(Qc(m.scaleStartX*S,1),Qc(m.scaleStartY*E,1)),m.currentScaleX=y.scale.x,m.currentScaleY=y.scale.y;const _=s.alphaMode==="curve"?ws(s.alphaCurve,v,this.resolveCurveMode(s.curveMode))*s.alphaScale:s.alpha*s.alphaScale;y.alpha=Qc((b==null?void 0:b.independentAlpha)==="fixed"?b.alpha:(b==null?void 0:b.independentAlpha)==="curve"?ws(b.alphaCurve,v,this.resolveCurveMode(b.alphaCurveMode)):_,1);const I=(b==null?void 0:b.colorStart)||"#ffffff",M=(b==null?void 0:b.colorMode)==="lifetime"?bm(b.colorGradient,v):(b==null?void 0:b.colorMode)==="random"?m.colorSample:Da(I),k=m.colorOverride??sy(M,m.colorAdd);y.tint=k,y.blendMode=Yr[(b==null?void 0:b.blend)||"normal"];const B=this.trail.update(m.trail,s,m.boneName,C,T,v,y),D=Cr(s,C,T,this.simulationTransform),G=((u=this.simulationTransform)==null?void 0:u.rotation)??s.rootRotation,V=Math.abs(((h=this.simulationTransform)==null?void 0:h.scaleX)??s.rootScaleX),Y=Math.abs(((f=this.simulationTransform)==null?void 0:f.scaleY)??s.rootScaleY),L=B?{...B,bones:B.bones.map(N=>{const F=Cr(s,N.x,N.y,this.simulationTransform);return{...N,worldX:F.x,worldY:F.y,worldRotation:G-N.rotation}})}:void 0;a.push({boneName:m.boneName,spawnId:m.spawnId,x:C,y:T,rotation:m.rotation,scaleX:y.scale.x,scaleY:y.scale.y,worldX:D.x,worldY:D.y,worldRotation:G+m.rotation,worldScaleX:y.scale.x*V,worldScaleY:y.scale.y*Y,alpha:y.alpha,colorHex:k,resourceId:m.resourceId,imageFrameIndex:m.imageFrameIndex,imageVisible:y.visible,trailState:L,active:!0})}return this.states=a,a}drawTrailMeshDebug(t){this.trail.drawDebug(this.trailDebugGfx,t,this.cfg,this.pool.map(i=>i.trail))}emitBurst(){for(let t=0;t0&&this.spawnPathSampler){const a=this.estimatedEmissionCount(),c=H2(t.spawnPathDistribution,this._spawnSerial,a,this.spawnPathClosed,this.rng),l=this.spawnPathSampler(c);if(l)return{...this.applyFollowToOrigin(l.x+i,l.y+s),radialAngle:0,pathAngle:l.angle}}const r=W2(t,this.rng);return{...this.applyFollowToOrigin(i+r.x,s+r.y),radialAngle:r.radialAngle}}estimatedEmissionCount(){const t=this.cfg;return t.mode==="burst"?Math.max(1,Math.round(t.burstCount)):Math.max(1,Math.floor(t.rate*(t.streamBehavior==="loop"?Math.max(1,t.loopDurationFrames)/30:Math.max(0,t.duration))))}applyFollowToOrigin(t,i){const s=this.followSpawnAngle*Math.PI/180,r=Math.cos(s),o=Math.sin(s);return{x:this.followSpawnX+r*t-o*i,y:this.followSpawnY+o*t+r*i}}spawnEventParticle(t,i,s=1,r,o){if(s>2)return!1;const a=o??(this.cfg.mode==="burst"?this.cfg.burstCount:1),c=Math.max(1,Math.min(ey,Math.round(Number(a)||1))),l=Math.max(0,Number(this.cfg.delay)||0);if(l>0)return this.pendingEventSpawns.push({worldX:t,worldY:i,depth:s,inherit:r,count:c,remaining:l}),!0;const d=ed(this.cfg,t,i,this.simulationTransform);let u=!1;for(let h=0;h!E.active);if(o===-1)return!1;const a=t?{x:t.x,y:t.y,radialAngle:0}:this.spawnOrigin(),{x:c,y:l}=a,d=oa(r.lifeMode,r.lifeMin,r.lifeMax,r.lifeCurve,this.rng()),u=oa(r.speedMode,r.speedMin,r.speedMax,r.speedCurve,this.rng()),h=s!=null&&s.attributes.includes("rotation")?s.data.rotation:0,f=q2(r,a,this.followSpawnAngle,this.rng)+h*Math.PI/180,p=this.pool[o],m=rF(r,this.rng),g=this._spawnSerial++;p.spawnId=g;const v=oF(r,Pr(r.seed,g,1540483477));p.noisePhaseX=Pr(r.seed,g,1757159915)*Math.PI*2,p.noisePhaseY=Pr(r.seed,g,48610963)*Math.PI*2,p.gravityStrength=r.useGravity&&r.gravityMode==="random"?Li(r.gravityMin,r.gravityMax,this.rng()):r.gravityMin,p.windStrength=r.wind&&r.windMode==="random"?Li(r.windMin,r.windMax,this.rng()):r.windMin,p.attractionActive=!1,p.attractionElapsed=0,p.collisionPaused=!1,p.collisionCount=0,p.eventDepth=i,p.attractionCurveSide=Pr(r.seed,g,2738958700)<.5?-1:1,p.trail.history.length=0,p.trail.bones.length=0,p.trail.currentWidth=0,p.trail.currentAlpha=0,p.trail.currentColor=16777215,p.trail.resourceId=v.id;const y=Math.min(100,Math.max(0,Number(v.trailRatio)||0)),b=r.mode==="burst"?Math.max(0,Math.round(r.burstCount)):Math.max(0,Math.floor(r.rate*(r.streamBehavior==="loop"?Math.max(1,r.loopDurationFrames)/30:Math.max(0,r.duration)))),x=y>0&&b===1&&g===0,C=Pr(r.seed,g,668265261)*100,T=(E,_,I,M,k)=>{if(E!=="random")return Math.max(0,Number(_)||0);const B=Math.max(0,Math.min(Number(I)||0,Number(M)||0)),D=Math.max(0,Math.max(Number(I)||0,Number(M)||0));return Li(B,D,Pr(r.seed,g,k))};if(p.trail.sampledLength=T(v.lengthMode,v.length,v.lengthMin,v.lengthMax,374761393),p.trail.sampledWidth=T(v.widthSizeMode,v.width,v.widthMin,v.widthMax,3550635116),p.trail.enabled=r.trail&&(x||C0&&p.trail.sampledWidth>0,p.trail.mesh&&(p.trail.mesh.visible=!1),p.active=!0,p.life=d,p.maxLife=d,p.x=c,p.y=l,p.trail.enabled&&p.trail.history.push({x:c,y:l}),p.vx=Math.cos(f)*u,p.vy=Math.sin(f)*u,p.scaleStartX=oa(r.scaleMode,r.scaleMin,r.scaleMax,r.scaleCurve,this.rng())*m.scale,p.scaleStartY=r.scaleAxisMode==="separate"?oa(r.scaleMode,r.scaleYMin,r.scaleYMax,r.scaleYCurve,this.rng())*m.scale:p.scaleStartX,p.alphaStart=r.alpha,p.alphaEnd=r.alphaEnd,p.rotation=r.initialRotationMode==="direction"?-Math.atan2(p.vy,p.vx)*180/Math.PI+r.initialRotationMin:oa(r.initialRotationMode,r.initialRotationMin,r.initialRotationMax,r.initialRotationCurve,this.rng())+h,p.rotationSpeed=r.rotationOverLifeEnabled?oa(r.rotationOverLifeMode,r.rotationSpeedMin,r.rotationSpeedMax,r.rotationOverLifeCurve,this.rng()):0,p.speedScale=1,p.speedScaleTarget=r.speedOverLifeMode==="random"?Li(r.speedOverLifeMin,r.speedOverLifeMax,this.rng()):r.speedOverLifeMin,p.scaleOverLifeX=r.scaleOverLifeMode==="random"?Li(r.scaleOverLifeMin,r.scaleOverLifeMax,this.rng()):r.scaleOverLifeMin,p.scaleOverLifeY=r.scaleOverLifeMode==="random"?Li(r.scaleYOverLifeMin,r.scaleYOverLifeMax,this.rng()):r.scaleYOverLifeMin,p.resourceId=m.id,p.colorSample=m.colorMode==="random"?bm(m.colorGradient,Pr(r.seed,g,2654435769)):Da(m.colorStart),p.colorAdd=0,p.colorOverride=null,s){const E=s.attributes;E.includes("color")&&(s.colorMode==="replace"?p.colorOverride=s.data.colorHex:p.colorAdd=s.data.colorHex),E.includes("scale")&&(p.scaleStartX*=s.data.scaleX,p.scaleStartY*=s.data.scaleY),E.includes("life")&&(p.life=Math.max(1e-4,s.data.life),p.maxLife=p.life)}p.currentScaleX=p.scaleStartX,p.currentScaleY=p.scaleStartY;const S=ry(m,0);return p.imageFrameIndex=S.index,p.sprite.texture=sp(m,r.texture,S.index),p.sprite.anchor.set(m.anchorX,m.anchorY),p.sprite.blendMode=Yr[m.blend],p.sprite.tint=p.colorOverride??sy(p.colorSample,p.colorAdd),p.sprite.visible=!0,this.emitLocalEvent("birth",p,p.x,p.y),!0}kill(t){const i=this.pool[t];i.active&&this.emitLocalEvent("death",i,i.x,i.y),i.active=!1,i.sprite.visible=!1,_d(i.trail)}clear(){this.pendingEventSpawns.length=0;for(const t of this.pool)t.active=!1,t.sprite.visible=!1,_d(t.trail)}get activeCount(){let t=0;for(const i of this.pool)i.active&&t++;return t}capture(){const t=[];for(const i of this.pool)i.active&&t.push({boneName:i.boneName,spawnId:i.spawnId,x:i.sprite.x,y:i.sprite.y,rotation:i.rotation,scaleX:i.sprite.scale.x,scaleY:i.sprite.scale.y,...this.captureWorldTransform(i),alpha:i.sprite.alpha,colorHex:i.sprite.tint,resourceId:i.resourceId,imageFrameIndex:i.imageFrameIndex,imageVisible:i.sprite.visible,active:!0,trailState:this.cfg.trail&&i.trail.bones.length?{bones:i.trail.bones.map(s=>{var o;const r=Cr(this.cfg,s.x,s.y,this.simulationTransform);return{...s,worldX:r.x,worldY:r.y,worldRotation:(((o=this.simulationTransform)==null?void 0:o.rotation)??this.cfg.rootRotation)-s.rotation}}),activeBoneCount:i.trail.bones.length,width:i.trail.currentWidth,alpha:i.trail.currentAlpha,colorHex:i.trail.currentColor,resourceId:i.trail.resourceId}:void 0});return t}captureWorldTransform(t){var r,o,a;const i=Cr(this.cfg,t.sprite.x,t.sprite.y,this.simulationTransform),s=((r=this.simulationTransform)==null?void 0:r.rotation)??this.cfg.rootRotation;return{worldX:i.x,worldY:i.y,worldRotation:s+t.rotation,worldScaleX:t.sprite.scale.x*Math.abs(((o=this.simulationTransform)==null?void 0:o.scaleX)??this.cfg.rootScaleX),worldScaleY:t.sprite.scale.y*Math.abs(((a=this.simulationTransform)==null?void 0:a.scaleY)??this.cfg.rootScaleY)}}apply(t){const i=new Map;for(const s of t)i.set(s.boneName,s);for(const s of this.pool){const r=i.get(s.boneName);if(!r){s.active=!1,s.sprite.visible=!1,s.trail.mesh&&(s.trail.mesh.visible=!1);continue}s.active=r.active;const o=s.sprite;if(o.visible=r.active&&r.imageVisible!==!1,o.x=r.x,o.y=r.y,o.rotation=-r.rotation*Math.PI/180,o.scale.set(r.scaleX,r.scaleY),o.alpha=r.alpha,o.tint=r.colorHex,r.resourceId!=null){const a=this.cfg.imageResources.find(c=>c.id===r.resourceId);a&&(s.imageFrameIndex=r.imageFrameIndex??0,o.texture=sp(a,this.cfg.texture,s.imageFrameIndex),o.anchor.set(a.anchorX,a.anchorY),o.blendMode=Yr[a.blend])}this.cfg.trail&&r.trailState?this.trail.applyState(s.trail,this.cfg,s.sprite,r.trailState):s.trail.mesh&&(s.trail.mesh.visible=!1)}}reset(){this.pendingEventSpawns.length=0;for(const t of this.pool)t.active=!1,t.sprite.visible=!1,_d(t.trail);this.accumulator=0,this.burstTimer=0,this._spawnSerial=0,this._elapsed=0,this._attractionEnabledAt=0,this._attractionWasEnabled=!1,this._lastSeed=this.cfg.seed,this.rng=np(this.cfg.seed>>>0)}restartEmissionCycle(){this.pendingEventSpawns.length=0,this.accumulator=0,this.burstTimer=0,this._spawnSerial=0,this._elapsed=0,this._attractionEnabledAt=0,this._attractionWasEnabled=this.cfg.attraction,this._lastSeed=this.cfg.seed,this.rng=np(this.cfg.seed>>>0)}}const Vo=new Map,Oo=new Map;function aF(n){return[...Vo.values()].some(e=>e===n)}function ES(n){if(!(aF(n)||(Oo.get(n)||0)>0)){Oo.delete(n);for(const e of n.textures)e.destroy(!0)}}function lF(n){const e=Oo.get(n)||0;e>1?Oo.set(n,e-1):Oo.delete(n),ES(n)}function cF(n){return Vo.get(n)||null}function ch(n,e){bc(n),Vo.set(n,e)}function dF(n){const e=Vo.get(n);return e?(Oo.set(e,(Oo.get(e)||0)+1),e):null}function uF(n,e){const t=Vo.get(n);return t?(ch(e,t),!0):!1}function bc(n){const e=Vo.get(n);e&&(Vo.delete(n),ES(e))}function Zt(n){if(Array.isArray(n))return n.map(e=>Zt(e));if(n&&typeof n=="object"){const e=Object.getPrototypeOf(n);if(e===Object.prototype||e===null){const t={};for(const[i,s]of Object.entries(n))t[i]=Zt(s);return t}}return n}const _S=["3.8","4.0","4.1","4.2","4.3"];function lu(n){const e=String(n||"").trim();return _S.find(t=>e===t||e.startsWith(`${t}.`))||null}function ym(){return _S.join(" / ")}function hF(n){return n==="4.3"?"4.3":"4.2"}function Dg(){return{imagesPath:"./images/",spineVersion:"4.2",keyframeCurve:"bezier",fps:30,omitFps:!1,integerFrameAlignment:!0,bonePool:!0,excludeEmptyAnimations:!1,fileName:"SpineParticle.json"}}function MS(n){const e=Object.assign(Dg(),n||{});return e.imagesPath=String(e.imagesPath||"./images/"),e.spineVersion=lu(e.spineVersion)||"4.2",e.keyframeCurve=e.keyframeCurve==="bezier"?"bezier":"linear",e.fps=Math.min(240,Math.max(1,Math.round(Number(e.fps)||30))),e.omitFps=e.omitFps===!0,e.integerFrameAlignment=e.integerFrameAlignment!==!1,e.bonePool=e.bonePool!==!1,e.excludeEmptyAnimations=e.excludeEmptyAnimations===!0,e.fileName=String(e.fileName||"SpineParticle.json"),e}const xm=30;function Md(n,e=1){return Math.min(1800,Math.max(1,Math.ceil(Number(n)||e)))}function PS(n,e=30){const t=Math.max(0,Number(n.lifeMin)||0),i=Math.max(0,Number(n.lifeMax)||0),s=n.lifeMode==="fixed"?t:Math.max(t,i);return Md(Math.ceil(s*Math.max(1,e)),xm)}function Wn(n,e=30){const t=Md(n.loopDurationFrames),i=PS(n,e),s=n.generateLoopStartAnimation?n.loopStartUseCustomDuration?Md(n.loopStartDurationFrames,xm):i:0,r=n.generateLoopEndAnimation?n.loopEndUseCustomDuration?Md(n.loopEndDurationFrames,xm):i:0;return{start:s,loop:t,end:r,total:s+t+r}}function IS(n,e){const t=Wn(n,e),s=Math.max(0,Math.ceil(Math.max(0,Number(n.delay)||0)*Math.max(1,e)))+t.start;return{start:s,end:s+t.loop}}function Xa(n){var t,i;const e=new Set;for(const s of n){if(((t=s.config)==null?void 0:t.eventEnabled)===!1)continue;const r=(i=s.config)==null?void 0:i.events;if(Array.isArray(r))for(const o of r)o.targetSystemId>0&&o.targetSystemId!==s.id&&e.add(o.targetSystemId)}return e}function kS(n,e){var r,o;const t=new Map;for(const a of n){if(((r=a.config)==null?void 0:r.eventEnabled)===!1)continue;const c=(o=a.config)==null?void 0:o.events;if(Array.isArray(c))for(const l of c){if(l.targetSystemId<=0||l.targetSystemId===a.id)continue;const d=t.get(l.targetSystemId);d?d.push(a.id):t.set(l.targetSystemId,[a.id])}}const i=new Set,s=[...t.get(e)||[]];for(;s.length;){const a=s.pop();i.has(a)||(i.add(a),s.push(...t.get(a)||[]))}return i.delete(e),i}const fF=.001;function RS(n,e){const t=Math.max(1,Number(e)||30),s=Math.max(0,Number(n)||0)*t+fF*t;return Math.max(0,Math.floor(s))}function FS(n,e,t){const i=Math.max(1,Math.floor(t)-1),s=Math.min(i-1,Math.max(0,Math.floor(Number(n)||0))),r=Math.min(i,Math.max(s+1,Math.floor(Number(e)||i)));return{start:s,end:r}}function rp(n,e,t,i){const s=Math.max(1,Math.floor(i)-1);return FS(n?e:0,n?t:s,i)}function pF(n,e,t){const i=Math.max(1,e-1),s=Math.max(1,t-1),r=n.end>=i?s:n.end;return FS(n.start,r,t)}let td=1,id=1,nd=1,sd=1;function rd(n,e){const t=new Set(e),i=`${n} Copy`;if(!t.has(i))return i;let s=2;for(;t.has(`${i} ${s}`);)s++;return`${i} ${s}`}const Go=IM("particle",{state:()=>({editor:{viewScale:1,viewX:0,viewY:0},systems:[],colliders:[],paths:[],spines:[],activeId:0,activeObjectType:"particle",activeObjectId:0,timeline:{playing:!0,loop:!0,abLoop:!1,frame:0,totalFrames:60,playbackStart:0,playbackEnd:59,fps:30,recorded:!1,animation:"animation",animations:["animation"]},settings:{parameterPanelOnRight:!0,tickEnabled:!1,axisFontSize:12,tickWidth:1,showAxisLabels:!0,axisColor:"#7a86ad",undoLimit:20,backgroundX:0,backgroundY:0,backgroundOpacity:1,backgroundImageName:"",backgroundImageData:"",showEmitter:!0,showBones:!1,bonePointDrawSize:1,boneAxisDrawSize:2,showSkinMesh:!1,showGrid:!0,exportSettings:Dg()}}),getters:{activeSystemCount:n=>n.systems.length,playbackRange:n=>rp(n.timeline.abLoop,n.timeline.playbackStart,n.timeline.playbackEnd,n.timeline.totalFrames)},actions:{syncSceneSequences(){td=Math.max(td,...this.systems.map(n=>n.id+1),1),id=Math.max(id,...this.colliders.map(n=>n.id+1),1),nd=Math.max(nd,...this.paths.map(n=>n.id+1),1),sd=Math.max(sd,...this.spines.map(n=>n.id+1),1)},addSystem(n){const e=tc();n!=null&&n.config&&Object.assign(e,n.config);const t=new Set(this.systems.map(r=>r.config.name));if(t.has(e.name)){let r=0;for(const a of this.systems){const c=/^ParticleSystem(\d+)$/.exec(a.config.name);c&&(r=Math.max(r,parseInt(c[1],10)))}e.name=`ParticleSystem${r+1}`;let o=2;for(;t.has(e.name);)e.name=`ParticleSystem${r+o}`,o++}const i=this.timeline.animations.includes(this.timeline.animation)?this.timeline.animation:this.timeline.animations[0]||"animation",s={id:td++,visible:!0,animation:i,config:e};return this.systems.push(s),this.activeId=s.id,this.activeObjectType="particle",this.activeObjectId=s.id,s},removeSystem(n){var i;const e=this.systems.findIndex(s=>s.id===n);e>=0&&this.systems.splice(e,1),this.activeId===n&&(this.activeId=((i=this.systems[0])==null?void 0:i.id)??0);const t=this.systems.find(s=>s.id===this.activeId);if(t&&(this.timeline.animation=t.animation),this.activeObjectType==="particle"&&this.activeObjectId===n){const s=this.systems[0];this.activeObjectId=(s==null?void 0:s.id)??0}},selectSystem(n){this.activeId=n,this.activeObjectType="particle",this.activeObjectId=n;const e=this.systems.find(t=>t.id===n);e&&(this.timeline.animation=e.animation)},setSystemAnimation(n,e){if(!this.timeline.animations.includes(e))return;const t=this.systems.find(i=>i.id===n);t&&(t.animation=e,this.timeline.animation=e)},addAnimation(){const n=new Set(this.timeline.animations);let e=2,t=`animation${e}`;for(;n.has(t);)t=`animation${++e}`;this.timeline.animations.push(t),this.timeline.animation=t;const i=this.systems.find(s=>s.id===this.activeId);return i&&(i.animation=t),t},renameAnimation(n,e){const t=e.trim(),i=this.timeline.animations.indexOf(n);if(i<0||!t||t!==n&&this.timeline.animations.includes(t))return!1;this.timeline.animations[i]=t;for(const s of this.systems)s.animation===n&&(s.animation=t);return this.timeline.animation===n&&(this.timeline.animation=t),!0},removeAnimation(n){if(this.timeline.animations.length<=1)return!1;const e=this.timeline.animations.indexOf(n);if(e<0)return!1;this.timeline.animations.splice(e,1);const t=this.timeline.animations[Math.min(e,this.timeline.animations.length-1)];for(const i of this.systems)i.animation===n&&(i.animation=t);return this.timeline.animation===n&&(this.timeline.animation=t),!0},addCollider(){const n=id++,e={id:n,name:`Collider${n}`,visible:!0,shape:"circle",enabled:!0,x:0,y:0,rotation:0,scaleX:1,scaleY:1,radius:50,radiusX:70,radiusY:45,width:120,height:80,sides:6,response:"physics",elasticity:.8,friction:.3,followPath:!1,followPathId:0,followDuration:2,followPathRotation:!1,followCurveMode:"跟随导出",followCurve:[{x:0,y:0},{x:1,y:1}]};return this.colliders.push(e),this.activeObjectType="collision",this.activeObjectId=e.id,e},addPath(){const n=nd++,e={id:n,name:`Path${n}`,visible:!0,enabled:!0,x:0,y:0,rotation:0,scaleX:1,scaleY:1,closed:!1,color:"#ff933e",preset:"",points:[]};return this.paths.push(e),this.activeObjectType="path",this.activeObjectId=e.id,e},addSpine(){const n=sd++,e={id:n,name:`SpineSkeleton${n}`,enabled:!0,visible:!0,x:0,y:0,rotation:0,scaleX:1,scaleY:1,timeOffset:0,skeletonFileName:"",atlasFileName:"",textureFileNames:[],dataVersion:"",sourceBundle:null,selectedAnimation:"",selectedBone:"",selectedSlot:"",animations:[],bones:[],slots:[],assetVersion:0,status:"empty",error:""};return this.spines.push(e),this.activeObjectType="spine",this.activeObjectId=e.id,e},duplicateSelectedObject(){const n=this.activeObjectId;if(!n)return null;if(this.activeObjectType==="particle"){const i=this.systems.find(r=>r.id===n);if(!i)return null;const s=Zt(i);return s.id=td++,s.config.name=rd(i.config.name,this.systems.map(r=>r.config.name)),s.frames=void 0,this.systems.push(s),this.activeId=s.id,this.activeObjectId=s.id,this.timeline.animation=s.animation,s}if(this.activeObjectType==="collision"){const i=this.colliders.find(r=>r.id===n);if(!i)return null;const s=Zt(i);return s.id=id++,s.name=rd(i.name,this.colliders.map(r=>r.name)),this.colliders.push(s),this.activeObjectId=s.id,s}if(this.activeObjectType==="path"){const i=this.paths.find(r=>r.id===n);if(!i)return null;const s=Zt(i);return s.id=nd++,s.name=rd(i.name,this.paths.map(r=>r.name)),this.paths.push(s),this.activeObjectId=s.id,s}const e=this.spines.find(i=>i.id===n);if(!e)return null;const t=Zt(e);return t.id=sd++,t.name=rd(e.name,this.spines.map(i=>i.name)),t.selectedBone="",t.selectedSlot="",uF(e.id,t.id),this.spines.push(t),this.activeObjectId=t.id,t},selectSceneObject(n,e){if(this.activeObjectType=n,this.activeObjectId=e,n==="particle"){this.activeId=e;const t=this.systems.find(i=>i.id===e);t&&(this.timeline.animation=t.animation)}},removeCollider(n){var t;const e=this.colliders.findIndex(i=>i.id===n);e>=0&&this.colliders.splice(e,1);for(const i of this.systems){const s=lr(i.config);s.collisionColliderIds=s.collisionColliderIds.filter(r=>r!==n)}if(this.activeObjectType==="collision"&&this.activeObjectId===n){const i=this.systems[0];this.activeObjectType=i?"particle":"collision",this.activeObjectId=(i==null?void 0:i.id)??((t=this.colliders[0])==null?void 0:t.id)??0}},removePath(n){var t;const e=this.paths.findIndex(i=>i.id===n);if(e>=0&&this.paths.splice(e,1),this.activeObjectType==="path"&&this.activeObjectId===n){const i=this.systems[0];this.activeObjectType=i?"particle":"path",this.activeObjectId=(i==null?void 0:i.id)??((t=this.paths[0])==null?void 0:t.id)??0}},removeSpine(n){bc(n);const e=this.spines.findIndex(t=>t.id===n);if(e>=0&&this.spines.splice(e,1),this.activeObjectType==="spine"&&this.activeObjectId===n){const t=this.systems[0],i=this.colliders[0],s=this.paths[0],r=this.spines[0];t?(this.activeObjectType="particle",this.activeObjectId=t.id,this.activeId=t.id):i?(this.activeObjectType="collision",this.activeObjectId=i.id):s?(this.activeObjectType="path",this.activeObjectId=s.id):(this.activeObjectType="spine",this.activeObjectId=(r==null?void 0:r.id)??0)}this.recalcTotalFrames()},play(){const n=this.playbackRange;(this.timeline.frame=n.end)&&(this.timeline.frame=n.start),this.timeline.playing=!0},pause(){this.timeline.playing=!1},togglePlay(){this.timeline.playing?this.pause():this.play()},toStart(){this.timeline.frame=this.playbackRange.start},previousFrame(){this.timeline.playing=!1,this.timeline.frame=Math.max(this.playbackRange.start,this.timeline.frame-1)},nextFrame(){this.timeline.playing=!1,this.timeline.frame=Math.min(this.playbackRange.end,this.timeline.frame+1)},toEnd(){this.timeline.playing=!1,this.timeline.frame=this.playbackRange.end},toggleLoop(){this.timeline.loop=!this.timeline.loop},toggleABLoop(){this.timeline.abLoop=!this.timeline.abLoop;const n=this.playbackRange;(this.timeline.framen.end)&&(this.timeline.frame=n.start)},setFrame(n){this.timeline.frame=Math.max(0,Math.min(n,this.timeline.totalFrames-1))},setPlaybackStart(n){const e=rp(!0,n,this.timeline.playbackEnd,this.timeline.totalFrames);this.timeline.playbackStart=e.start,this.timeline.playbackEnd=e.end,this.timeline.abLoop&&this.timeline.framee.end&&(this.timeline.frame=e.end)},recalcTotalFrames(){const n=Math.max(1,this.timeline.fps||30),e=u=>{const h=Math.max(0,Number(u.lifeMin)||0),f=Math.max(0,Number(u.lifeMax)||0);return u.lifeMode==="fixed"?h:Math.max(h,f)},t=new Map(this.systems.map(u=>[u.id,u])),i=new Map,s=new Set,r=u=>{const h=i.get(u.id);if(h!=null)return h;if(s.has(u.id))return 0;s.add(u.id);const f=u.config,p=e(f);let m=p;if(f.eventEnabled)for(const g of f.events||[]){const v=t.get(g.targetSystemId);if(!v||v.id===u.id)continue;const y=r(v),b=g.event==="birth"?0:p,x=Math.max(0,Number(v.config.delay)||0);m=Math.max(m,b+x+y)}return s.delete(u.id),i.set(u.id,m),m},o=Xa(this.systems);let a=0;for(const u of this.systems){if(o.has(u.id))continue;const h=u.config,f=Math.max(0,Number(h.delay)||0),p=h.mode==="stream"&&h.streamBehavior==="loop";let m;if(h.mode==="stream"){const g=p?Wn(h,n).total/n:Math.max(1/n,Number(h.duration)||0);if(m=f+g,p){let v=0;if(h.eventEnabled){const y=e(h);for(const b of h.events||[]){const x=t.get(b.targetSystemId);if(!x||x.id===u.id)continue;const C=Math.max(0,Number(x.config.delay)||0);v=Math.max(v,(b.event==="birth"?0:y)+C+r(x))}}m+=v}else m+=r(u)}else m=f+r(u);m>a&&(a=m)}for(const u of this.spines){const h=u.animations.find(p=>p.name===u.selectedAnimation);if(!h)continue;const f=Math.max(0,Number(u.timeOffset)||0)+Math.max(0,h.duration||0);f>a&&(a=f)}for(const u of this.colliders){if(!u.followPath||!u.followPathId)continue;const h=Math.max(0,Number(u.followDuration)||0);h>a&&(a=h)}const c=this.timeline.totalFrames,l=Math.max(2,RS(a,n)+1);this.timeline.totalFrames=l;const d=pF({start:this.timeline.playbackStart,end:this.timeline.playbackEnd},c,l);return this.timeline.playbackStart=d.start,this.timeline.playbackEnd=d.end,this.timeline.frame>=l&&(this.timeline.frame=l-1),l}}});/*! + }`,this._stylesheet)}get stylesheet(){return this._stylesheet}set stylesheet(e){this._stylesheet!==e&&(this._stylesheet=e,this.styleID++)}normalizeColor(e){return Array.isArray(e)&&(e=DP(e)),typeof e=="number"?LP(e):e}dropShadowToCSS(){let e=this.normalizeColor(this.dropShadowColor);const t=this.dropShadowAlpha,i=Math.round(Math.cos(this.dropShadowAngle)*this.dropShadowDistance),s=Math.round(Math.sin(this.dropShadowAngle)*this.dropShadowDistance);e.startsWith("#")&&t<1&&(e+=(t*255|0).toString(16).padStart(2,"0"));const r=`${i}px ${s}px`;return this.dropShadowBlur>0?`text-shadow: ${r} ${this.dropShadowBlur}px ${e}`:`text-shadow: ${r} ${e}`}reset(){Object.assign(this,va.defaultOptions)}onBeforeDraw(){const{fontsDirty:e}=this;return this.fontsDirty=!1,this.isSafari&&this._fonts.length>0&&e?new Promise(t=>setTimeout(t,100)):Promise.resolve()}get isSafari(){const{userAgent:e}=Ve.ADAPTER.getNavigator();return/^((?!chrome|android).)*safari/i.test(e)}set fillGradientStops(e){console.warn("[HTMLTextStyle] fillGradientStops is not supported by HTMLText")}get fillGradientStops(){return super.fillGradientStops}set fillGradientType(e){console.warn("[HTMLTextStyle] fillGradientType is not supported by HTMLText")}get fillGradientType(){return super.fillGradientType}set miterLimit(e){console.warn("[HTMLTextStyle] miterLimit is not supported by HTMLText")}get miterLimit(){return super.miterLimit}set trim(e){console.warn("[HTMLTextStyle] trim is not supported by HTMLText")}get trim(){return super.trim}set textBaseline(e){console.warn("[HTMLTextStyle] textBaseline is not supported by HTMLText")}get textBaseline(){return super.textBaseline}set leading(e){console.warn("[HTMLTextStyle] leading is not supported by HTMLText")}get leading(){return super.leading}set lineJoin(e){console.warn("[HTMLTextStyle] lineJoin is not supported by HTMLText")}get lineJoin(){return super.lineJoin}};vm.availableFonts={},vm.defaultOptions={align:"left",breakWords:!1,dropShadow:!1,dropShadowAlpha:1,dropShadowAngle:Math.PI/6,dropShadowBlur:0,dropShadowColor:"black",dropShadowDistance:5,fill:"black",fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",letterSpacing:0,lineHeight:0,padding:0,stroke:"black",strokeThickness:0,whiteSpace:"normal",wordWrap:!1,wordWrapWidth:100};let tp=vm;const Zc=class ba extends to{constructor(e="",t={}){super(it.EMPTY),this._text=null,this._style=null,this._autoResolution=!0,this.localStyleID=-1,this.dirty=!1,this._updateID=0,this.ownsStyle=!1;const i=new Image,s=it.from(i,{scaleMode:Ve.SCALE_MODE,resourceOptions:{autoLoad:!1}});s.orig=new ht,s.trim=new ht,this.texture=s;const r="http://www.w3.org/2000/svg",o="http://www.w3.org/1999/xhtml",a=document.createElementNS(r,"svg"),c=document.createElementNS(r,"foreignObject"),l=document.createElementNS(o,"div"),d=document.createElementNS(o,"style");c.setAttribute("width","10000"),c.setAttribute("height","10000"),c.style.overflow="hidden",a.appendChild(c),this.maxWidth=ba.defaultMaxWidth,this.maxHeight=ba.defaultMaxHeight,this._domElement=l,this._styleElement=d,this._svgRoot=a,this._foreignObject=c,this._foreignObject.appendChild(d),this._foreignObject.appendChild(l),this._image=i,this._loadImage=new Image,this._autoResolution=ba.defaultAutoResolution,this._resolution=ba.defaultResolution??Ve.RESOLUTION,this.text=e,this.style=t}measureText(e){var d,u;const{text:t,style:i,resolution:s}=Object.assign({text:this._text,style:this._style,resolution:this._resolution},e);Object.assign(this._domElement,{innerHTML:t,style:i.toCSS(s)}),this._styleElement.textContent=i.toGlobalCSS(),document.body.appendChild(this._svgRoot);const r=this._domElement.getBoundingClientRect();this._svgRoot.remove();const{width:o,height:a}=r;(o>this.maxWidth||a>this.maxHeight)&&console.warn("[HTMLText] Large expanse of text, increase HTMLText.maxWidth or HTMLText.maxHeight property.");const c=Math.min(this.maxWidth,Math.ceil(o)),l=Math.min(this.maxHeight,Math.ceil(a));return this._svgRoot.setAttribute("width",c.toString()),this._svgRoot.setAttribute("height",l.toString()),t!==this._text&&(this._domElement.innerHTML=this._text),i!==this._style&&(Object.assign(this._domElement,{style:(d=this._style)==null?void 0:d.toCSS(s)}),this._styleElement.textContent=(u=this._style)==null?void 0:u.toGlobalCSS()),{width:c+i.padding*2,height:l+i.padding*2}}async updateText(e=!0){const{style:t,_image:i,_loadImage:s}=this;if(this.localStyleID!==t.styleID&&(this.dirty=!0,this.localStyleID=t.styleID),!this.dirty&&e)return;const{width:r,height:o}=this.measureText();i.width=s.width=Math.ceil(Math.max(1,r)),i.height=s.height=Math.ceil(Math.max(1,o)),this._updateID++;const a=this._updateID;await new Promise(c=>{s.onload=async()=>{if(a/gi,"
").replace(/
/gi,"
").replace(/ /gi," ")}};Zc.defaultDestroyOptions={texture:!0,children:!1,baseTexture:!0},Zc.defaultMaxWidth=2024,Zc.defaultMaxHeight=2024,Zc.defaultAutoResolution=!0;function au(n,e){const t=Math.max(0,Number(n)||0),i=Math.max(0,Number(e)||0);return{inner:Math.min(t,i),outer:Math.max(t,i)}}function AS(n){const e=Math.max(0,Number(n.outerRectW)||0),t=Math.max(0,Number(n.outerRectH)||0);return{innerW:Math.min(e,Math.max(0,Number(n.innerRectW)||0)),innerH:Math.min(t,Math.max(0,Number(n.innerRectH)||0)),outerW:e,outerH:t}}function H2(n,e,t,i,s){if(n==="random")return s();const r=Math.max(1,Math.round(t)),o=Math.max(0,Math.round(e))%r;return i?o/r:r<=1?.5:o/(r-1)}function Q0(n,e,t,i){const s=Math.sqrt(n*n+i()*(e*e-n*n));return{x:Math.cos(t)*s,y:-Math.sin(t)*s,radialAngle:-t*180/Math.PI}}function G2(n,e){const{innerW:t,innerH:i,outerW:s,outerH:r}=AS(n),o=Math.max(0,(s-t)/2),a=Math.max(0,(r-i)/2),c=o*r,l=t*a,d=c*2+l*2;if(d<=0){const p=s*2+r*2;if(p<=0)return{x:0,y:0,radialAngle:0};let m=e()*p,g,v;return mt?0:n==="linear"?1-e/t:n==="inverse"?Math.min(10,t/Math.max(e,t*.1)):1}function J2(n,e,t,i,s,r,o){const a=n-t,c=e-i,l=Math.hypot(a,c);if(l<=1e-4||l>r)return{x:0,y:0};const d=s*TS(o,l,r)*10;return{x:-c/l*d,y:a/l*d}}function Z2(n,e,t){const i=n.rotation*Math.PI/180,s=Math.cos(i),r=Math.sin(i),o=Math.max(1e-4,Math.abs(n.scaleX??1)),a=Math.max(1e-4,Math.abs(n.scaleY??1)),c=e-n.x,l=t-n.y,d=(s*c+r*l)/o,u=(-r*c+s*l)/a,h=(T,S,E,_)=>{const I=E/o,M=_/a,k=Math.max(1e-4,Math.hypot(I,M)),B=I/k,D=M/k,G=s*B-r*D,V=r*B+s*D;return{x:n.x+s*T*o-r*S*a+G*.05,y:n.y+r*T*o+s*S*a+V*.05,nx:G,ny:V}};if(n.shape==="circle"){const T=Math.max(.001,n.radius),S=Math.hypot(d,u);if(S>=T)return null;const E=S>1e-4?d/S:1,_=S>1e-4?u/S:0;return h(E*T,_*T,E,_)}if(n.shape==="ellipse"){const T=Math.max(.001,n.radiusX),S=Math.max(.001,n.radiusY),E=Math.hypot(d/T,u/S);if(E>=1)return null;const _=E>1e-4?1/E:1,I=E>1e-4?d*_:T,M=E>1e-4?u*_:0,k=Math.max(1e-4,Math.hypot(I/(T*T),M/(S*S)));return h(I,M,I/(T*T)/k,M/(S*S)/k)}if(n.shape==="rect"){const T=Math.max(.001,n.width*.5),S=Math.max(.001,n.height*.5);if(Math.abs(d)>=T||Math.abs(u)>=S)return null;const E=T-Math.abs(d),_=S-Math.abs(u);if(E<_){const M=d>=0?1:-1;return h(M*T,u,M,0)}const I=u>=0?1:-1;return h(d,I*S,0,I)}const f=Math.max(3,Math.min(16,Math.round(n.sides||(n.shape==="custom"?5:6)))),p=Math.max(.001,n.width*.5),m=Math.max(.001,n.height*.5),g=Array.from({length:f},(T,S)=>{const E=Math.PI*.5+S/f*Math.PI*2;return{x:Math.cos(E)*p,y:Math.sin(E)*m}});let v=!1;for(let T=0,S=g.length-1;Tu!=_.y>u&&d<(_.x-E.x)*(u-E.y)/(_.y-E.y)+E.x&&(v=!v)}if(!v)return null;let y=g[0].x,b=g[0].y,w=1/0;for(let T=0;T>>0^Math.imul(e+1,2654435761)^t)>>>0;return i^=i>>>16,i=Math.imul(i,2146121005),i^=i>>>15,i=Math.imul(i,2221713035),i^=i>>>16,(i>>>0)/4294967296}function oa(n,e,t,i,s){return n==="fixed"?e:n==="curve"?Li(e,t,ws(i,s)):Li(e,t,s)}function ip(n,e,t,i,s,r){return n==="curve"?Li(e,t,ws(i,s)):n==="random"?r:e}function iy(n,e,t,i,s){const r=1-s;return r*r*r*n+3*r*r*s*e+3*r*s*s*t+s*s*s*i}function ws(n,e,t="线性"){if(!Array.isArray(n)||n.length===0)return 1;const i=[...n].sort((s,r)=>s.x-r.x);if(e<=i[0].x)return i[0].y;if(e>=i[i.length-1].x)return i[i.length-1].y;for(let s=0;s=i[s].x&&e<=i[s+1].x){const r=i[s],o=i[s+1],a=o.x-r.x||1;if(t!=="贝塞尔")return Li(r.y,o.y,(e-r.x)/a);const c=r.x+(r.outX??a/3),l=r.y+(r.outY??(o.y-r.y)/3),d=o.x+(o.inX??-a/3),u=o.y+(o.inY??-(o.y-r.y)/3);let h=0,f=1;for(let p=0;p<14;p++){const m=(h+f)/2;iy(r.x,c,d,o.x,m)>>0;return function(){e|=0,e=e+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}function Da(n){let e=n.replace("#","");return e.length===3&&(e=e.split("").map(t=>t+t).join("")),parseInt(e,16)}function eF(n,e,t){const i=ny(n),s=ny(e),r=Math.round(i[0]+(s[0]-i[0])*t),o=Math.round(i[1]+(s[1]-i[1])*t),a=Math.round(i[2]+(s[2]-i[2])*t);return r<<16|o<<8|a}function bm(n,e){if(!Array.isArray(n)||n.length===0)return 16777215;const t=[...n].sort((i,s)=>i.position-s.position);if(e<=t[0].position)return Da(t[0].color);if(e>=t[t.length-1].position)return Da(t[t.length-1].color);for(let i=0;ir.position)continue;const o=(e-s.position)/Math.max(1e-4,r.position-s.position);return eF(s.color,r.color,o)}return Da(t[t.length-1].color)}function ny(n){let e=n.replace("#","");e.length===3&&(e=e.split("").map(i=>i+i).join(""));const t=parseInt(e,16);return[t>>16&255,t>>8&255,t&255]}function sy(n,e){const t=Math.min(255,(n>>16&255)+(e>>16&255)),i=Math.min(255,(n>>8&255)+(e>>8&255)),s=Math.min(255,(n&255)+(e&255));return t<<16|i<<8|s}function tF(){return{sprite:null,boneName:"",mesh:null,meshSignature:"",history:[],bones:[],skinWeights:[],currentWidth:0,currentAlpha:0,currentColor:16777215,resourceId:1,enabled:!1,sampledLength:100,sampledWidth:100}}function _d(n){n.history.length=0,n.bones.length=0,n.mesh&&(n.mesh.visible=!1)}class iF{constructor(e){A(this,"container");this.container=e}ensureMesh(e,t,i){const s=t.trailResources.find(g=>g.id===e.resourceId)||t.trailResources[0],r=(s==null?void 0:s.texture)||it.EMPTY,o=Number(s==null?void 0:s.rotation)||0,a=Math.max(2,Math.min(16,Math.round(t.trailGridRows))),c=Math.max(2,Math.min(32,Math.round(t.trailGridCols))),l=Math.max(2,Math.min(16,Math.round((s==null?void 0:s.boneCount)??3))),d=`${a}:${c}:${l}:${(s==null?void 0:s.id)??0}:${o}`;if(e.mesh&&e.meshSignature===d)return e.mesh.texture!==r&&(e.mesh.texture=r),e.mesh;e.mesh&&(this.container.removeChild(e.mesh),e.mesh.destroy()),e.meshSignature&&e.meshSignature!==d&&(e.history.length=0,e.bones.length=0);const u=new Float32Array(a*c*2),h=new Float32Array(a*c*2),f=[],p=[];for(let g=0;g.05?e.history.unshift({x:t,y:i}):(r.x=t,r.y=i);const o=Math.max(1,s)*1.5;let a=0,c=e.history.length;for(let l=1;l=o||l>=239){c=l+1;break}e.history.length>c&&(e.history.length=c)}sampleBones(e,t,i){const s=Math.max(2,Math.min(16,Math.round(i))),r=e.history,o=[];if(!r.length)return o;let a=0;for(let l=1;l=d&&g>1e-4){const v=(d-u)/g;h={x:Li(p.x,m.x,v),y:Li(p.y,m.y,v)};break}u+=g}o.push({boneName:`${e.boneName}_trail_${l}`,x:h.x,y:h.y,rotation:0})}for(let l=0;l1){const l=o[0].rotation,u=(o[o.length-1].rotation-l+540)%360-180;for(let h=0;hd.id===i.resourceId)||t.trailResources[0];if(!(r!=null&&r.texture)||i.bones.length<2){s.visible=!1;return}e.resourceId=r.id,s.texture!==r.texture&&(s.texture=r.texture);const o=Math.max(2,Math.min(16,Math.round(t.trailGridRows))),a=Math.max(2,Math.min(32,Math.round(t.trailGridCols))),c=s.vertices,l=[];for(let d=0;d.5&&i.alpha>0}update(e,t,i,s,r,o,a){if(e.sprite=a,e.boneName=i,!t.trail||!e.enabled||e.sampledLength<=0||e.sampledWidth<=0){_d(e);return}this.ensureMesh(e,t,a);const c=t.trailResources.find(f=>f.id===e.resourceId)||t.trailResources[0];this.appendPoint(e,s,r,e.sampledLength);const l=c!=null&&c.lifeLengthEnabled?Math.max(0,ws(c.lifeLengthCurve,o)):1,d=Math.max(0,e.sampledLength)*l;e.bones=this.sampleBones(e,d,(c==null?void 0:c.boneCount)??3),e.bones[0]&&(e.bones[0].x=s,e.bones[0].y=r);const u=(c==null?void 0:c.widthMode)==="particle"?(Math.abs(a.scale.x)+Math.abs(a.scale.y))*.5:1;e.currentWidth=Math.max(0,e.sampledWidth)*u,e.currentAlpha=(c==null?void 0:c.alphaMode)==="particle"?a.alpha:(c==null?void 0:c.alphaMode)==="curve"?ws(c.alphaCurve,o):(c==null?void 0:c.alpha)??1,e.currentColor=(c==null?void 0:c.colorMode)==="particle"?a.tint:(c==null?void 0:c.colorMode)==="curve"?bm(c.colorGradient,o):Da((c==null?void 0:c.color)||"#ffffff");const h={bones:e.bones.map(f=>({...f})),activeBoneCount:e.bones.length,width:e.currentWidth,alpha:Math.min(1,Math.max(0,e.currentAlpha)),colorHex:e.currentColor,resourceId:e.resourceId};return this.skinMesh(e,t,h),h}applyState(e,t,i,s){var r;e.sprite=i,e.resourceId=s.resourceId??((r=t.trailResources[0])==null?void 0:r.id)??1,e.bones=s.bones.map(o=>({...o})),e.currentWidth=s.width,e.currentAlpha=s.alpha,this.skinMesh(e,t,s)}drawDebug(e,t,i,s){if(e.clear(),!t||!i.trail)return;const r=Math.max(2,Math.min(16,Math.round(i.trailGridRows))),o=Math.max(2,Math.min(32,Math.round(i.trailGridCols)));e.lineStyle(1,3790847,.72);for(const a of s){const c=a.mesh;if(!(c!=null&&c.visible))continue;const l=c.vertices,d=(u,h)=>{const f=(u*r+h)*2;return{x:l[f],y:l[f+1]}};for(let u=0;ur.texture||r.sequenceFrames.some(o=>o.texture));if(!t.length)return nF(n.texture);const i=t.reduce((r,o)=>r+Math.max(0,o.weight),0);if(i<=0)return t[Math.floor(e()*t.length)];let s=e()*i;for(const r of t)if(s-=Math.max(0,r.weight),s<=0)return r;return t[t.length-1]}function oF(n,e){const t=n.trailResources.filter(r=>r.texture);if(!t.length)return n.trailResources[0]||sF();const i=t.reduce((r,o)=>r+Math.max(0,o.weight),0);if(i<=0)return t[Math.min(t.length-1,Math.floor(e*t.length))];let s=e*i;for(const r of t)if(s-=Math.max(0,r.weight),s<=0)return r;return t[t.length-1]}function ry(n,e){if(n.imageMode!=="sequence"||n.sequenceFrames.length<=1)return{index:0,visible:!0};const t=Math.min(120,Math.max(1,Number(n.sequenceFps)||30)),i=Math.max(0,Math.floor(Math.max(0,e)*t)),s=n.sequenceFrames.length-1;return n.sequencePlayback==="once-hide"?{index:Math.min(s,i),visible:i<=s}:n.sequencePlayback==="once-hold"?{index:Math.min(s,i),visible:!0}:n.sequencePlayback==="loop-reverse"?{index:s-i%n.sequenceFrames.length,visible:!0}:{index:i%n.sequenceFrames.length,visible:!0}}function sp(n,e,t){var i;return n.imageMode==="sequence"&&n.sequenceFrames.length?((i=n.sequenceFrames[Math.max(0,Math.min(n.sequenceFrames.length-1,t))])==null?void 0:i.texture)||n.texture||e:n.texture||e}function tc(){return{texture:null,imageResources:[{id:1,texture:null,textureName:"star",textureFolder:"",previewUrl:"/images/star.png",imageMode:"fixed",sequencePlayback:"loop-forward",sequenceFps:30,sequenceFrames:[],weight:100,locked:!1,scale:1,anchorX:.5,anchorY:.5,colorMode:"fixed",colorStart:"#ffffff",colorEnd:"#ff4d4d",colorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ff4d4d"}],blend:"normal",independentAlpha:"off",alpha:1,alphaCurveMode:"跟随导出",alphaCurve:[{x:0,y:0},{x:.1,y:1},{x:.9,y:1},{x:1,y:0}]}],imageWeightVersion:1,name:"ParticleSystem1",mode:"stream",rate:20,streamBehavior:"normal",loopDurationFrames:30,generateLoopStartAnimation:!1,loopStartUseCustomDuration:!1,loopStartDurationFrames:30,generateLoopEndAnimation:!1,loopEndUseCustomDuration:!1,loopEndDurationFrames:30,burstCount:50,burstLoop:!1,delay:0,duration:1,shape:"point",showShape:!0,shapeRangeVersion:1,innerRadius:0,outerRadius:30,innerRectW:0,innerRectH:0,outerRectW:60,outerRectH:40,spawnPathId:0,spawnPathDistribution:"fixed",radius:30,rectW:60,rectH:40,centerX:0,centerY:0,rootRotation:0,rootScaleX:1,rootScaleY:1,renderLayerMode:"top",renderLayerSpineId:0,renderLayerSlotName:"",renderLayerSlotPosition:"above",renderLayerFollowAttachment:!1,emissionAngleMode:"random",direction:0,spread:360,coneDirection:90,coneAngle:60,lifeMin:.6,lifeMax:1.8,lifeMode:"random",lifeCurve:[{x:0,y:0},{x:1,y:1}],speedMin:30,speedMax:140,speedMode:"random",speedCurve:[{x:0,y:0},{x:1,y:1}],scaleMin:.3,scaleMax:.8,scaleMode:"random",scaleAxisMode:"uniform",scaleYMin:.3,scaleYMax:.8,scaleCurve:[{x:0,y:0},{x:1,y:1}],scaleYCurve:[{x:0,y:0},{x:1,y:1}],scaleEndRatio:.3,initialRotationMode:"random",initialRotationMin:0,initialRotationMax:360,initialRotationCurve:[{x:0,y:0},{x:1,y:1}],alpha:.9,alphaEnd:0,rotationSpeedMin:-180,rotationSpeedMax:180,speedOverLifeEnabled:!1,speedOverLifeMode:"fixed",speedOverLifeMin:1,speedOverLifeMax:1,speedOverLifeCurve:[{x:0,y:1},{x:1,y:1}],scaleOverLifeEnabled:!1,scaleOverLifeMode:"curve",scaleOverLifeAxisMode:"uniform",scaleOverLifeMin:0,scaleOverLifeMax:1,scaleYOverLifeMin:0,scaleYOverLifeMax:1,scaleOverLifeCurve:[{x:0,y:1},{x:1,y:1}],scaleYOverLifeCurve:[{x:0,y:1},{x:1,y:1}],rotationOverLifeEnabled:!1,rotationOverLifeMode:"random",rotationOverLifeCurve:[{x:0,y:0},{x:1,y:1}],gravity:980,gravityMode:"fixed",gravityMin:980,gravityMax:980,gravityDirection:-90,gravityCurve:[{x:0,y:1},{x:1,y:1}],damping:0,seed:0,colorStart:"#ffffff",colorEnd:"#ff4d4d",colorOverLife:!1,blend:"add",alphaMode:"curve",curveMode:"线性",alphaCurve:[{x:0,y:0},{x:.2,y:1},{x:.8,y:1},{x:1,y:0}],textureName:"star",textureFolder:"",alphaScale:1,anchorX:.5,anchorY:.5,independentAlpha:"off",offsetX:0,offsetY:0,noise:!1,noiseAmt:30,noiseRange:100,noiseSpeed:1,useGravity:!1,wind:!1,windX:0,windY:0,windMode:"fixed",windMin:100,windMax:100,windDirection:0,windCurve:[{x:0,y:1},{x:1,y:1}],forceField:!1,forceStrength:10,forceRadius:100,forceCenterX:0,forceCenterY:0,forceFalloff:"linear",showForceFieldShape:!0,vortex:!1,vortexStrength:10,vortexRadius:100,vortexCenterX:0,vortexCenterY:0,vortexFalloff:"linear",showVortexShape:!0,attraction:!1,attractionCenterX:200,attractionCenterY:0,attractionRadius:20,attractionDuration:.5,attractionDelay:.1,attractionDelayMode:"particle",attractionPath:"curve",showAttractionShape:!0,trail:!1,trailConfigVersion:3,trailResources:[{id:1,texture:null,textureName:"trail",previewUrl:"/images/trail.png",weight:100,locked:!1,rotation:0,colorMode:"particle",color:"#ffffff",colorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}],blend:"normal",alphaMode:"particle",alpha:1,alphaCurve:[{x:0,y:1},{x:1,y:1}],boneCount:3,trailRatio:100,lengthMode:"fixed",length:100,lengthMin:100,lengthMax:100,widthSizeMode:"fixed",width:100,widthMin:100,widthMax:100,widthMode:"particle",lifeLengthEnabled:!1,lifeLengthCurve:[{x:0,y:1},{x:1,y:1}],shapeEnabled:!1,shapeCurve:[{x:0,y:1},{x:1,y:1}]}],trailResourceVersion:6,trailTexture:null,trailTextureName:"trail",trailPreviewUrl:"/images/trail.png",trailColorMode:"particle",trailColor:"#ffffff",trailColorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}],trailAlphaMode:"particle",trailAlpha:1,trailAlphaCurve:[{x:0,y:1},{x:1,y:1}],trailBoneCount:3,trailLength:100,trailWidth:100,trailWidthMode:"particle",trailLifeLengthEnabled:!1,trailLifeLengthCurve:[{x:0,y:1},{x:1,y:1}],trailShapeEnabled:!1,trailShapeCurve:[{x:0,y:1},{x:1,y:1}],trailGridRows:4,trailGridCols:4,collision:!1,collisionColliderIds:[],pathFollow:!1,eventEnabled:!1,events:[],emitterFollow:!1,emitterFollowMode:"none",emitterFollowPathId:0,emitterFollowSpineId:0,emitterFollowBoneName:"",emitterFollowBoneOffsetX:0,emitterFollowBoneOffsetY:0,emitterFollowBoneRotation:0,emitterFollowBoneScaleX:1,emitterFollowBoneScaleY:1,emitterAngleMode:"fixed",emitterFollowCurve:[{x:0,y:0},{x:1,y:1}],emitterFollowDuration:2,emitterFollowSpace:"world",emitterFollowDirection:"forward",emitterFollowOffset:0}}function lr(n){var I;const e=tc(),t=n,i=t.shapeRangeVersion!==1,s=Number(t.radius),r=Number(t.rectW),o=Number(t.rectH),a=Number(t.direction),c=Number(t.spread),l=t.shape,d=t.imageWeightVersion!==1,u=t.loopDurationFrames==null,h=t.gravityMode==null,f=Number(t.gravity),p=t.windMode==null,m=Number(t.windX),g=Number(t.windY),v=t.forceFalloff==null,y=Number(t.forceStrength),b=t.trailConfigVersion!==3,w=!Array.isArray(t.trailResources),C=t.trailResourceVersion!==6,T=t.trailTexture,S=String(t.trailTextureName||"trail"),E=String(t.trailPreviewUrl||"/images/trail.png").replace("/trails/trail.png","/images/trail.png");for(const[M,k]of Object.entries(e))t[M]!==void 0&&t[M]!==null||(t[M]=Array.isArray(k)?k.map(B=>typeof B=="object"&&B!==null?{...B}:B):k);i&&(n.innerRadius=0,n.outerRadius=Math.max(0,Number.isFinite(s)?s:e.outerRadius),n.innerRectW=0,n.innerRectH=0,n.outerRectW=Math.max(0,Number.isFinite(r)?r:e.outerRectW),n.outerRectH=Math.max(0,Number.isFinite(o)?o:e.outerRectH),n.coneDirection=Number.isFinite(a)?a:90,n.emissionAngleMode=Number.isFinite(c)&&c>0?"random":"fixed",l==="cone"&&(n.spread=Math.max(0,Number(n.coneAngle)||0)),n.shapeRangeVersion=1),n.shape==="orbit"&&(n.shape="path"),["fixed","random","radial","path-normal","path-tangent"].includes(n.emissionAngleMode)||(n.emissionAngleMode="fixed"),!["circle","rect","cone"].includes(n.shape)&&n.emissionAngleMode==="radial"&&(n.emissionAngleMode="fixed"),n.shape!=="path"&&(n.emissionAngleMode==="path-normal"||n.emissionAngleMode==="path-tangent")&&(n.emissionAngleMode="fixed"),n.spawnPathId=Math.max(0,Math.round(Number(n.spawnPathId)||0)),n.spawnPathDistribution!=="fixed"&&n.spawnPathDistribution!=="random"&&(n.spawnPathDistribution="fixed"),n.renderLayerMode!=="top"&&n.renderLayerMode!=="slot"&&(n.renderLayerMode="top"),n.renderLayerSpineId=Math.max(0,Math.round(Number(n.renderLayerSpineId)||0)),typeof n.renderLayerSlotName!="string"&&(n.renderLayerSlotName=""),n.renderLayerSlotPosition!=="above"&&n.renderLayerSlotPosition!=="below"&&(n.renderLayerSlotPosition="above"),typeof n.renderLayerFollowAttachment!="boolean"&&(n.renderLayerFollowAttachment=!1),typeof n.eventEnabled!="boolean"&&(n.eventEnabled=!1),Array.isArray(n.events)||(n.events=[]);for(const M of n.events){M.id=Math.max(1,Math.round(Number(M.id)||1)),M.event!=="birth"&&M.event!=="death"&&M.event!=="collision"&&(M.event="birth"),M.targetSystemId=Math.max(0,Math.round(Number(M.targetSystemId)||0));const k=Number(M.probability);M.probability=Math.min(1,Math.max(0,Number.isFinite(k)?k:1));const B=Math.round(Number(M.collisionLimit));M.collisionLimit=Math.min(4,Math.max(1,Number.isFinite(B)?B:1));const D=M.inherit,G=["color","scale","rotation","life"],V=Array.isArray(D)?D:D==="all"?[...G]:G.includes(String(D))?[String(D)]:[],Y=[...new Set(V.filter(N=>G.includes(String(N))))],L=Array.isArray(D)?D:null;(!L||L.length!==Y.length||Y.some((N,F)=>N!==L[F]))&&(M.inherit=Y),M.colorInheritMode!=="add"&&M.colorInheritMode!=="replace"&&(M.colorInheritMode="add")}n.innerRadius=Math.max(0,Number(n.innerRadius)||0),n.outerRadius=Math.max(n.innerRadius,Number(n.outerRadius)||0),n.innerRectW=Math.max(0,Number(n.innerRectW)||0),n.innerRectH=Math.max(0,Number(n.innerRectH)||0),n.outerRectW=Math.max(n.innerRectW,Number(n.outerRectW)||0),n.outerRectH=Math.max(n.innerRectH,Number(n.outerRectH)||0);const _=Array.from(new Set((Array.isArray(n.collisionColliderIds)?n.collisionColliderIds:[]).map(M=>Math.round(Number(M))).filter(M=>Number.isFinite(M)&&M>0)));(_.length!==n.collisionColliderIds.length||_.some((M,k)=>M!==n.collisionColliderIds[k]))&&(n.collisionColliderIds=_),n.streamBehavior!=="normal"&&n.streamBehavior!=="loop"&&(n.streamBehavior="normal"),(u||!Number.isFinite(n.loopDurationFrames))&&(n.loopDurationFrames=Math.ceil(Math.max(1/30,Number(n.duration)||1)*30)),n.loopDurationFrames=Math.min(1800,Math.max(1,Math.ceil(n.loopDurationFrames))),typeof n.generateLoopStartAnimation!="boolean"&&(n.generateLoopStartAnimation=!1),typeof n.generateLoopEndAnimation!="boolean"&&(n.generateLoopEndAnimation=!1),typeof n.loopStartUseCustomDuration!="boolean"&&(n.loopStartUseCustomDuration=!1),typeof n.loopEndUseCustomDuration!="boolean"&&(n.loopEndUseCustomDuration=!1),n.loopStartDurationFrames=Math.min(1800,Math.max(1,Math.ceil(Number(n.loopStartDurationFrames)||30))),n.loopEndDurationFrames=Math.min(1800,Math.max(1,Math.ceil(Number(n.loopEndDurationFrames)||30))),(!Array.isArray(n.imageResources)||n.imageResources.length===0)&&(n.imageResources=tc().imageResources);for(const M of n.imageResources){!M.texture&&n.texture&&(M.texture=n.texture),M.textureName||(M.textureName="star"),M.previewUrl==="/particles/star.png"&&(M.previewUrl="/images/star.png"),M.previewUrl||(M.previewUrl=M.textureName==="star"?"/images/star.png":""),M.imageMode!=="fixed"&&M.imageMode!=="sequence"&&(M.imageMode="fixed"),M.sequencePlayback==="once"?M.sequencePlayback="once-hold":M.sequencePlayback==="loop"?M.sequencePlayback="loop-forward":["once-hide","once-hold","loop-forward","loop-reverse"].includes(M.sequencePlayback)||(M.sequencePlayback="loop-forward"),Number.isFinite(M.sequenceFps)||(M.sequenceFps=30),M.sequenceFps=Math.min(120,Math.max(1,Number(M.sequenceFps)||30)),Array.isArray(M.sequenceFrames)||(M.sequenceFrames=[]);for(const k of M.sequenceFrames)typeof k.name!="string"&&(k.name=""),typeof k.previewUrl!="string"&&(k.previewUrl=""),k.texture===void 0&&(k.texture=null);Number.isFinite(M.weight)||(M.weight=100),typeof M.locked!="boolean"&&(M.locked=!1),Number.isFinite(M.scale)||(M.scale=1),Number.isFinite(M.anchorX)||(M.anchorX=.5),Number.isFinite(M.anchorY)||(M.anchorY=.5),M.colorMode!=="fixed"&&M.colorMode!=="random"&&M.colorMode!=="lifetime"&&(M.colorMode=n.colorOverLife?"lifetime":"fixed"),M.colorStart||(M.colorStart=n.colorStart||"#ffffff"),M.colorEnd||(M.colorEnd=n.colorEnd||M.colorStart),(!Array.isArray(M.colorGradient)||M.colorGradient.length<2)&&(M.colorGradient=[{position:0,color:M.colorStart},{position:1,color:M.colorEnd}]),Object.prototype.hasOwnProperty.call(Yr,M.blend)||(M.blend=n.blend||"normal"),["off","fixed","curve"].includes(M.independentAlpha)||(M.independentAlpha=n.independentAlpha||"off"),Number.isFinite(M.alpha)||(M.alpha=Number.isFinite(n.alphaScale)?n.alphaScale:1),["跟随导出","线性","贝塞尔"].includes(M.alphaCurveMode)||(M.alphaCurveMode=n.curveMode||"跟随导出"),(!Array.isArray(M.alphaCurve)||M.alphaCurve.length<2)&&(M.alphaCurve=(n.alphaCurve||[{x:0,y:1},{x:1,y:1}]).map(k=>({...k})))}if(n.imageResources.length===1)n.imageResources[0].weight=100,n.imageResources[0].locked=!1;else if(d){const M=100/n.imageResources.length;n.imageResources.forEach((k,B)=>{k.weight=B===n.imageResources.length-1?100-M*(n.imageResources.length-1):M,k.locked=!1})}if(n.imageWeightVersion=1,h){const M=Number.isFinite(f)&&f!==0?f:980;n.gravity=M,n.gravityMin=M,n.gravityMax=M}if(p){const M=Number.isFinite(m)&&Number.isFinite(g)&&(m!==0||g!==0);n.windMin=M?Math.hypot(m,g):100,n.windMax=n.windMin,n.windDirection=M?Math.atan2(-g,m)*180/Math.PI:0}v&&(n.forceStrength=Number.isFinite(y)&&y!==0?y:10),b&&(n.trailConfigVersion=3,n.trailAlphaCurve=[{x:0,y:1},{x:1,y:1}],n.trailLifeLengthCurve=[{x:0,y:1},{x:1,y:1}],n.trailShapeCurve=[{x:0,y:1},{x:1,y:1}],n.trailGridRows=4,n.trailGridCols=4),(w||!n.trailResources.length)&&(n.trailResources=[{id:1,texture:T||null,textureName:S,previewUrl:E,weight:100,locked:!1,rotation:0,colorMode:n.trailColorMode,color:n.trailColor,colorGradient:n.trailColorGradient.map(M=>({...M})),blend:"normal",alphaMode:n.trailAlphaMode,alpha:n.trailAlpha,alphaCurve:n.trailAlphaCurve.map(M=>({...M})),boneCount:n.trailBoneCount,trailRatio:100,lengthMode:"fixed",length:n.trailLength,lengthMin:n.trailLength,lengthMax:n.trailLength,widthSizeMode:"fixed",width:n.trailWidth,widthMin:n.trailWidth,widthMax:n.trailWidth,widthMode:n.trailWidthMode,lifeLengthEnabled:n.trailLifeLengthEnabled,lifeLengthCurve:n.trailLifeLengthCurve.map(M=>({...M})),shapeEnabled:n.trailShapeEnabled,shapeCurve:n.trailShapeCurve.map(M=>({...M}))}]);for(const M of n.trailResources)M.textureName||(M.textureName="trail"),M.previewUrl==="/trails/trail.png"&&(M.previewUrl="/images/trail.png"),M.previewUrl||(M.previewUrl="/images/trail.png"),Number.isFinite(M.weight)||(M.weight=100),typeof M.locked!="boolean"&&(M.locked=!1),Number.isFinite(M.rotation)||(M.rotation=0),["particle","fixed","curve"].includes(M.colorMode)||(M.colorMode=n.trailColorMode||"particle"),M.color||(M.color=n.trailColor||"#ffffff"),(!Array.isArray(M.colorGradient)||M.colorGradient.length<2)&&(M.colorGradient=(n.trailColorGradient||[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}]).map(k=>({...k}))),Object.prototype.hasOwnProperty.call(Yr,M.blend)||(M.blend="normal"),["particle","fixed","curve"].includes(M.alphaMode)||(M.alphaMode=n.trailAlphaMode||"particle"),Number.isFinite(M.alpha)||(M.alpha=Number.isFinite(n.trailAlpha)?n.trailAlpha:1),(!Array.isArray(M.alphaCurve)||M.alphaCurve.length<2)&&(M.alphaCurve=(n.trailAlphaCurve||[{x:0,y:1},{x:1,y:1}]).map(k=>({...k}))),Number.isFinite(M.boneCount)||(M.boneCount=Number.isFinite(n.trailBoneCount)?n.trailBoneCount:3),Number.isFinite(M.trailRatio)||(M.trailRatio=100),M.trailRatio=Math.min(100,Math.max(0,M.trailRatio)),["fixed","random"].includes(M.lengthMode)||(M.lengthMode="fixed"),Number.isFinite(M.length)||(M.length=Number.isFinite(n.trailLength)?n.trailLength:100),Number.isFinite(M.lengthMin)||(M.lengthMin=M.length),Number.isFinite(M.lengthMax)||(M.lengthMax=M.length),["fixed","random"].includes(M.widthSizeMode)||(M.widthSizeMode="fixed"),Number.isFinite(M.width)||(M.width=Number.isFinite(n.trailWidth)?n.trailWidth:100),Number.isFinite(M.widthMin)||(M.widthMin=M.width),Number.isFinite(M.widthMax)||(M.widthMax=M.width),["particle","fixed"].includes(M.widthMode)||(M.widthMode=n.trailWidthMode||"particle"),typeof M.lifeLengthEnabled!="boolean"&&(M.lifeLengthEnabled=!!n.trailLifeLengthEnabled),(!Array.isArray(M.lifeLengthCurve)||M.lifeLengthCurve.length<2)&&(M.lifeLengthCurve=(n.trailLifeLengthCurve||[{x:0,y:1},{x:1,y:1}]).map(k=>({...k}))),typeof M.shapeEnabled!="boolean"&&(M.shapeEnabled=!!n.trailShapeEnabled),(!Array.isArray(M.shapeCurve)||M.shapeCurve.length<2)&&(M.shapeCurve=(n.trailShapeCurve||[{x:0,y:1},{x:1,y:1}]).map(k=>({...k})));if(n.trailResources.length===1&&(n.trailResources[0].weight=100,n.trailResources[0].locked=!1),C)for(const M of n.trailResources)M.alphaCurve=((I=M.alphaCurve)==null?void 0:I.length)>=2?M.alphaCurve:[{x:0,y:1},{x:1,y:1}];return n.trailResourceVersion=6,n}class oy extends _i{constructor(t,i=ey){super();A(this,"pool",[]);A(this,"cfg");A(this,"accumulator",0);A(this,"burstTimer",0);A(this,"_spawnSerial",0);A(this,"_elapsed",0);A(this,"_attractionEnabledAt",0);A(this,"_attractionWasEnabled",!1);A(this,"autoEmission",!0);A(this,"pendingEventSpawns",[]);A(this,"states",[]);A(this,"onParticleEvent",null);A(this,"rng",Math.random);A(this,"_lastSeed",-1);A(this,"trailDebugGfx",new Ki);A(this,"trail");A(this,"colliders",[]);A(this,"followSpawnX",0);A(this,"followSpawnY",0);A(this,"followSpawnAngle",0);A(this,"spawnPathSampler",null);A(this,"spawnPathClosed",!1);A(this,"followExportCurveMode","线性");A(this,"simulationTransform",null);this.cfg=lr(t),this.trail=new iF(this),this._ensurePool(i),this.addChild(this.trailDebugGfx)}setFollowExportCurveMode(t){this.followExportCurveMode=t}resolveCurveMode(t){return t==="跟随导出"?this.followExportCurveMode:t}reseed(){const t=this.cfg.seed;t!==this._lastSeed&&(this._lastSeed=t,this.rng=np(t>>>0))}_ensurePool(t){for(;this.pool.length=s.delay),o=i==="force"||i==="normal"&&(s.mode==="burst"||this._elapsed=1;)this.accumulator-=1,this.spawnOne();else this.burstTimer+=t,s.burstLoop?this.burstTimer>=1&&(this.burstTimer=0,this.emitBurst()):t>0&&this.burstTimer<=t&&this.emitBurst();if(this.pendingEventSpawns.length&&t>0){const p=[],m=[];for(const g of this.pendingEventSpawns)g.remaining-=t,g.remaining<=0?p.push(g):m.push(g);this.pendingEventSpawns=m;for(const g of p){const v=ed(this.cfg,g.worldX,g.worldY,this.simulationTransform);for(let y=0;y0){const N=Math.max(1e-4,Math.abs(s.rootScaleX)),F=Math.max(1e-4,Math.abs(s.rootScaleY)),$=-(((c=this.simulationTransform)==null?void 0:c.rotation)??s.rootRotation)*Math.PI/180,X=Math.cos($),z=Math.sin($),K=((l=this.simulationTransform)==null?void 0:l.centerX)??s.centerX,J=((d=this.simulationTransform)==null?void 0:d.centerY)??s.centerY,oe=K+X*N*m.x-z*F*m.y,le=-J+z*N*m.x+X*F*m.y,ve=oe,Se=-le,fe=s.forceCenterX-ve,be=s.forceCenterY-Se,q=Math.hypot(fe,be);if(q>1e-4&&q<=s.forceRadius){const Z=TS(s.forceFalloff,q,s.forceRadius),se=s.forceStrength*Z*10,j=fe/q*se,H=be/q*se,O=j,U=-H;m.vx+=(X*O+z*U)/N*t,m.vy+=(-z*O+X*U)/F*t}}if(!m.collisionPaused&&s.vortex&&s.vortexStrength!==0&&s.vortexRadius>0){const N=Cr(s,m.x,m.y,this.simulationTransform),F=J2(N.x,N.y,s.vortexCenterX,s.vortexCenterY,s.vortexStrength,s.vortexRadius,s.vortexFalloff),$=ty(s,F.x,F.y,this.simulationTransform);m.vx+=$.x*t,m.vy+=$.y*t}if(!m.collisionPaused&&s.damping>0){const N=Math.max(0,1-s.damping*t);m.vx*=N,m.vy*=N}if(m.collisionPaused)m.vx=0,m.vy=0;else if(m.x+=m.vx*t,m.y+=m.vy*t,this.applyColliders(m,p))continue;if(s.attraction&&!m.collisionPaused){const N=m.maxLife-m.life;if(s.attractionDelayMode==="particle"?N>=Math.max(0,s.attractionDelay):this._elapsed-this._attractionEnabledAt>=Math.max(0,s.attractionDelay)){const $=Cr(s,m.x,m.y,this.simulationTransform),X=s.attractionCenterX,z=s.attractionCenterY,K=Math.max(0,s.attractionRadius);if(!m.attractionActive){if(Math.hypot(X-$.x,z-$.y)<=K){this.kill(p);continue}m.attractionActive=!0,m.attractionElapsed=0,m.attractionStartWorldX=$.x,m.attractionStartWorldY=$.y}m.attractionElapsed+=t;const J=Math.max(1e-4,s.attractionDuration),oe=Math.min(1,m.attractionElapsed/J);let le=Li(m.attractionStartWorldX,X,oe),ve=Li(m.attractionStartWorldY,z,oe);if(s.attractionPath==="curve"){const be=X-m.attractionStartWorldX,q=z-m.attractionStartWorldY,Z=Math.hypot(be,q);if(Z>1e-4){const se=Z*.25*m.attractionCurveSide,j=(m.attractionStartWorldX+X)*.5-q/Z*se,H=(m.attractionStartWorldY+z)*.5+be/Z*se,O=1-oe;le=O*O*m.attractionStartWorldX+2*O*oe*j+oe*oe*X,ve=O*O*m.attractionStartWorldY+2*O*oe*H+oe*oe*z}}const Se=Math.hypot(X-le,z-ve);if(oe>=1||Se<=K){this.kill(p);continue}const fe=ed(s,le,ve,this.simulationTransform);m.x=fe.x,m.y=fe.y,m.vx=0,m.vy=0}}const v=g,y=m.sprite,b=s.imageResources.find(N=>N.id===m.resourceId);if(b){const N=ry(b,m.maxLife-m.life);m.imageFrameIndex=N.index,y.texture=sp(b,s.texture,m.imageFrameIndex),y.visible=N.visible}if(s.speedOverLifeEnabled){const N=Qc(ip(s.speedOverLifeMode,s.speedOverLifeMin,s.speedOverLifeMax,s.speedOverLifeCurve,v,m.speedScaleTarget),1),F=m.speedScale===0?N:N/m.speedScale;m.vx*=F,m.vy*=F,m.speedScale=N}let w=m.rotationSpeed;s.rotationOverLifeEnabled&&s.rotationOverLifeMode==="curve"&&(w=Li(s.rotationSpeedMin,s.rotationSpeedMax,ws(s.rotationOverLifeCurve,v))),m.rotation+=w*t;let C=m.x,T=m.y;if(s.noise&&s.noiseAmt>0&&s.noiseRange>0&&s.noiseSpeed>0){const N=m.maxLife-m.life,F=Math.max(0,s.noiseRange)*Math.min(1,Math.max(0,s.noiseAmt)/100)*.5,$=N*Math.max(0,s.noiseSpeed)*Math.PI*2;C+=(Math.sin(m.noisePhaseX+$)-Math.sin(m.noisePhaseX))*F,T+=(Math.sin(m.noisePhaseY+$*.83)-Math.sin(m.noisePhaseY))*F}y.x=C,y.y=T,y.rotation=-m.rotation*Math.PI/180;let S=1,E=1;s.scaleOverLifeEnabled&&(S=ip(s.scaleOverLifeMode,s.scaleOverLifeMin,s.scaleOverLifeMax,s.scaleOverLifeCurve,v,m.scaleOverLifeX),E=s.scaleOverLifeAxisMode==="separate"?ip(s.scaleOverLifeMode,s.scaleYOverLifeMin,s.scaleYOverLifeMax,s.scaleYOverLifeCurve,v,m.scaleOverLifeY):S),y.scale.set(Qc(m.scaleStartX*S,1),Qc(m.scaleStartY*E,1)),m.currentScaleX=y.scale.x,m.currentScaleY=y.scale.y;const _=s.alphaMode==="curve"?ws(s.alphaCurve,v,this.resolveCurveMode(s.curveMode))*s.alphaScale:s.alpha*s.alphaScale;y.alpha=Qc((b==null?void 0:b.independentAlpha)==="fixed"?b.alpha:(b==null?void 0:b.independentAlpha)==="curve"?ws(b.alphaCurve,v,this.resolveCurveMode(b.alphaCurveMode)):_,1);const I=(b==null?void 0:b.colorStart)||"#ffffff",M=(b==null?void 0:b.colorMode)==="lifetime"?bm(b.colorGradient,v):(b==null?void 0:b.colorMode)==="random"?m.colorSample:Da(I),k=m.colorOverride??sy(M,m.colorAdd);y.tint=k,y.blendMode=Yr[(b==null?void 0:b.blend)||"normal"];const B=this.trail.update(m.trail,s,m.boneName,C,T,v,y),D=Cr(s,C,T,this.simulationTransform),G=((u=this.simulationTransform)==null?void 0:u.rotation)??s.rootRotation,V=Math.abs(((h=this.simulationTransform)==null?void 0:h.scaleX)??s.rootScaleX),Y=Math.abs(((f=this.simulationTransform)==null?void 0:f.scaleY)??s.rootScaleY),L=B?{...B,bones:B.bones.map(N=>{const F=Cr(s,N.x,N.y,this.simulationTransform);return{...N,worldX:F.x,worldY:F.y,worldRotation:G-N.rotation}})}:void 0;a.push({boneName:m.boneName,spawnId:m.spawnId,x:C,y:T,rotation:m.rotation,scaleX:y.scale.x,scaleY:y.scale.y,worldX:D.x,worldY:D.y,worldRotation:G+m.rotation,worldScaleX:y.scale.x*V,worldScaleY:y.scale.y*Y,alpha:y.alpha,colorHex:k,resourceId:m.resourceId,imageFrameIndex:m.imageFrameIndex,imageVisible:y.visible,trailState:L,active:!0})}return this.states=a,a}drawTrailMeshDebug(t){this.trail.drawDebug(this.trailDebugGfx,t,this.cfg,this.pool.map(i=>i.trail))}emitBurst(){for(let t=0;t0&&this.spawnPathSampler){const a=this.estimatedEmissionCount(),c=H2(t.spawnPathDistribution,this._spawnSerial,a,this.spawnPathClosed,this.rng),l=this.spawnPathSampler(c);if(l)return{...this.applyFollowToOrigin(l.x+i,l.y+s),radialAngle:0,pathAngle:l.angle}}const r=W2(t,this.rng);return{...this.applyFollowToOrigin(i+r.x,s+r.y),radialAngle:r.radialAngle}}estimatedEmissionCount(){const t=this.cfg;return t.mode==="burst"?Math.max(1,Math.round(t.burstCount)):Math.max(1,Math.floor(t.rate*(t.streamBehavior==="loop"?Math.max(1,t.loopDurationFrames)/30:Math.max(0,t.duration))))}applyFollowToOrigin(t,i){const s=this.followSpawnAngle*Math.PI/180,r=Math.cos(s),o=Math.sin(s);return{x:this.followSpawnX+r*t-o*i,y:this.followSpawnY+o*t+r*i}}spawnEventParticle(t,i,s=1,r,o){if(s>2)return!1;const a=o??(this.cfg.mode==="burst"?this.cfg.burstCount:1),c=Math.max(1,Math.min(ey,Math.round(Number(a)||1))),l=Math.max(0,Number(this.cfg.delay)||0);if(l>0)return this.pendingEventSpawns.push({worldX:t,worldY:i,depth:s,inherit:r,count:c,remaining:l}),!0;const d=ed(this.cfg,t,i,this.simulationTransform);let u=!1;for(let h=0;h!E.active);if(o===-1)return!1;const a=t?{x:t.x,y:t.y,radialAngle:0}:this.spawnOrigin(),{x:c,y:l}=a,d=oa(r.lifeMode,r.lifeMin,r.lifeMax,r.lifeCurve,this.rng()),u=oa(r.speedMode,r.speedMin,r.speedMax,r.speedCurve,this.rng()),h=s!=null&&s.attributes.includes("rotation")?s.data.rotation:0,f=q2(r,a,this.followSpawnAngle,this.rng)+h*Math.PI/180,p=this.pool[o],m=rF(r,this.rng),g=this._spawnSerial++;p.spawnId=g;const v=oF(r,Pr(r.seed,g,1540483477));p.noisePhaseX=Pr(r.seed,g,1757159915)*Math.PI*2,p.noisePhaseY=Pr(r.seed,g,48610963)*Math.PI*2,p.gravityStrength=r.useGravity&&r.gravityMode==="random"?Li(r.gravityMin,r.gravityMax,this.rng()):r.gravityMin,p.windStrength=r.wind&&r.windMode==="random"?Li(r.windMin,r.windMax,this.rng()):r.windMin,p.attractionActive=!1,p.attractionElapsed=0,p.collisionPaused=!1,p.collisionCount=0,p.eventDepth=i,p.attractionCurveSide=Pr(r.seed,g,2738958700)<.5?-1:1,p.trail.history.length=0,p.trail.bones.length=0,p.trail.currentWidth=0,p.trail.currentAlpha=0,p.trail.currentColor=16777215,p.trail.resourceId=v.id;const y=Math.min(100,Math.max(0,Number(v.trailRatio)||0)),b=r.mode==="burst"?Math.max(0,Math.round(r.burstCount)):Math.max(0,Math.floor(r.rate*(r.streamBehavior==="loop"?Math.max(1,r.loopDurationFrames)/30:Math.max(0,r.duration)))),w=y>0&&b===1&&g===0,C=Pr(r.seed,g,668265261)*100,T=(E,_,I,M,k)=>{if(E!=="random")return Math.max(0,Number(_)||0);const B=Math.max(0,Math.min(Number(I)||0,Number(M)||0)),D=Math.max(0,Math.max(Number(I)||0,Number(M)||0));return Li(B,D,Pr(r.seed,g,k))};if(p.trail.sampledLength=T(v.lengthMode,v.length,v.lengthMin,v.lengthMax,374761393),p.trail.sampledWidth=T(v.widthSizeMode,v.width,v.widthMin,v.widthMax,3550635116),p.trail.enabled=r.trail&&(w||C0&&p.trail.sampledWidth>0,p.trail.mesh&&(p.trail.mesh.visible=!1),p.active=!0,p.life=d,p.maxLife=d,p.x=c,p.y=l,p.trail.enabled&&p.trail.history.push({x:c,y:l}),p.vx=Math.cos(f)*u,p.vy=Math.sin(f)*u,p.scaleStartX=oa(r.scaleMode,r.scaleMin,r.scaleMax,r.scaleCurve,this.rng())*m.scale,p.scaleStartY=r.scaleAxisMode==="separate"?oa(r.scaleMode,r.scaleYMin,r.scaleYMax,r.scaleYCurve,this.rng())*m.scale:p.scaleStartX,p.alphaStart=r.alpha,p.alphaEnd=r.alphaEnd,p.rotation=r.initialRotationMode==="direction"?-Math.atan2(p.vy,p.vx)*180/Math.PI+r.initialRotationMin:oa(r.initialRotationMode,r.initialRotationMin,r.initialRotationMax,r.initialRotationCurve,this.rng())+h,p.rotationSpeed=r.rotationOverLifeEnabled?oa(r.rotationOverLifeMode,r.rotationSpeedMin,r.rotationSpeedMax,r.rotationOverLifeCurve,this.rng()):0,p.speedScale=1,p.speedScaleTarget=r.speedOverLifeMode==="random"?Li(r.speedOverLifeMin,r.speedOverLifeMax,this.rng()):r.speedOverLifeMin,p.scaleOverLifeX=r.scaleOverLifeMode==="random"?Li(r.scaleOverLifeMin,r.scaleOverLifeMax,this.rng()):r.scaleOverLifeMin,p.scaleOverLifeY=r.scaleOverLifeMode==="random"?Li(r.scaleYOverLifeMin,r.scaleYOverLifeMax,this.rng()):r.scaleYOverLifeMin,p.resourceId=m.id,p.colorSample=m.colorMode==="random"?bm(m.colorGradient,Pr(r.seed,g,2654435769)):Da(m.colorStart),p.colorAdd=0,p.colorOverride=null,s){const E=s.attributes;E.includes("color")&&(s.colorMode==="replace"?p.colorOverride=s.data.colorHex:p.colorAdd=s.data.colorHex),E.includes("scale")&&(p.scaleStartX*=s.data.scaleX,p.scaleStartY*=s.data.scaleY),E.includes("life")&&(p.life=Math.max(1e-4,s.data.life),p.maxLife=p.life)}p.currentScaleX=p.scaleStartX,p.currentScaleY=p.scaleStartY;const S=ry(m,0);return p.imageFrameIndex=S.index,p.sprite.texture=sp(m,r.texture,S.index),p.sprite.anchor.set(m.anchorX,m.anchorY),p.sprite.blendMode=Yr[m.blend],p.sprite.tint=p.colorOverride??sy(p.colorSample,p.colorAdd),p.sprite.visible=!0,this.emitLocalEvent("birth",p,p.x,p.y),!0}kill(t){const i=this.pool[t];i.active&&this.emitLocalEvent("death",i,i.x,i.y),i.active=!1,i.sprite.visible=!1,_d(i.trail)}clear(){this.pendingEventSpawns.length=0;for(const t of this.pool)t.active=!1,t.sprite.visible=!1,_d(t.trail)}get activeCount(){let t=0;for(const i of this.pool)i.active&&t++;return t}capture(){const t=[];for(const i of this.pool)i.active&&t.push({boneName:i.boneName,spawnId:i.spawnId,x:i.sprite.x,y:i.sprite.y,rotation:i.rotation,scaleX:i.sprite.scale.x,scaleY:i.sprite.scale.y,...this.captureWorldTransform(i),alpha:i.sprite.alpha,colorHex:i.sprite.tint,resourceId:i.resourceId,imageFrameIndex:i.imageFrameIndex,imageVisible:i.sprite.visible,active:!0,trailState:this.cfg.trail&&i.trail.bones.length?{bones:i.trail.bones.map(s=>{var o;const r=Cr(this.cfg,s.x,s.y,this.simulationTransform);return{...s,worldX:r.x,worldY:r.y,worldRotation:(((o=this.simulationTransform)==null?void 0:o.rotation)??this.cfg.rootRotation)-s.rotation}}),activeBoneCount:i.trail.bones.length,width:i.trail.currentWidth,alpha:i.trail.currentAlpha,colorHex:i.trail.currentColor,resourceId:i.trail.resourceId}:void 0});return t}captureWorldTransform(t){var r,o,a;const i=Cr(this.cfg,t.sprite.x,t.sprite.y,this.simulationTransform),s=((r=this.simulationTransform)==null?void 0:r.rotation)??this.cfg.rootRotation;return{worldX:i.x,worldY:i.y,worldRotation:s+t.rotation,worldScaleX:t.sprite.scale.x*Math.abs(((o=this.simulationTransform)==null?void 0:o.scaleX)??this.cfg.rootScaleX),worldScaleY:t.sprite.scale.y*Math.abs(((a=this.simulationTransform)==null?void 0:a.scaleY)??this.cfg.rootScaleY)}}apply(t){const i=new Map;for(const s of t)i.set(s.boneName,s);for(const s of this.pool){const r=i.get(s.boneName);if(!r){s.active=!1,s.sprite.visible=!1,s.trail.mesh&&(s.trail.mesh.visible=!1);continue}s.active=r.active;const o=s.sprite;if(o.visible=r.active&&r.imageVisible!==!1,o.x=r.x,o.y=r.y,o.rotation=-r.rotation*Math.PI/180,o.scale.set(r.scaleX,r.scaleY),o.alpha=r.alpha,o.tint=r.colorHex,r.resourceId!=null){const a=this.cfg.imageResources.find(c=>c.id===r.resourceId);a&&(s.imageFrameIndex=r.imageFrameIndex??0,o.texture=sp(a,this.cfg.texture,s.imageFrameIndex),o.anchor.set(a.anchorX,a.anchorY),o.blendMode=Yr[a.blend])}this.cfg.trail&&r.trailState?this.trail.applyState(s.trail,this.cfg,s.sprite,r.trailState):s.trail.mesh&&(s.trail.mesh.visible=!1)}}reset(){this.pendingEventSpawns.length=0;for(const t of this.pool)t.active=!1,t.sprite.visible=!1,_d(t.trail);this.accumulator=0,this.burstTimer=0,this._spawnSerial=0,this._elapsed=0,this._attractionEnabledAt=0,this._attractionWasEnabled=!1,this._lastSeed=this.cfg.seed,this.rng=np(this.cfg.seed>>>0)}restartEmissionCycle(){this.pendingEventSpawns.length=0,this.accumulator=0,this.burstTimer=0,this._spawnSerial=0,this._elapsed=0,this._attractionEnabledAt=0,this._attractionWasEnabled=this.cfg.attraction,this._lastSeed=this.cfg.seed,this.rng=np(this.cfg.seed>>>0)}}const Vo=new Map,Oo=new Map;function aF(n){return[...Vo.values()].some(e=>e===n)}function ES(n){if(!(aF(n)||(Oo.get(n)||0)>0)){Oo.delete(n);for(const e of n.textures)e.destroy(!0)}}function lF(n){const e=Oo.get(n)||0;e>1?Oo.set(n,e-1):Oo.delete(n),ES(n)}function cF(n){return Vo.get(n)||null}function ch(n,e){bc(n),Vo.set(n,e)}function dF(n){const e=Vo.get(n);return e?(Oo.set(e,(Oo.get(e)||0)+1),e):null}function uF(n,e){const t=Vo.get(n);return t?(ch(e,t),!0):!1}function bc(n){const e=Vo.get(n);e&&(Vo.delete(n),ES(e))}function Zt(n){if(Array.isArray(n))return n.map(e=>Zt(e));if(n&&typeof n=="object"){const e=Object.getPrototypeOf(n);if(e===Object.prototype||e===null){const t={};for(const[i,s]of Object.entries(n))t[i]=Zt(s);return t}}return n}const _S=["3.8","4.0","4.1","4.2","4.3"];function lu(n){const e=String(n||"").trim();return _S.find(t=>e===t||e.startsWith(`${t}.`))||null}function ym(){return _S.join(" / ")}function hF(n){return n==="4.3"?"4.3":"4.2"}function Dg(){return{imagesPath:"./images/",spineVersion:"4.2",keyframeCurve:"bezier",fps:30,omitFps:!1,integerFrameAlignment:!0,bonePool:!0,excludeEmptyAnimations:!1,fileName:"SpineParticle.json"}}function MS(n){const e=Object.assign(Dg(),n||{});return e.imagesPath=String(e.imagesPath||"./images/"),e.spineVersion=lu(e.spineVersion)||"4.2",e.keyframeCurve=e.keyframeCurve==="bezier"?"bezier":"linear",e.fps=Math.min(240,Math.max(1,Math.round(Number(e.fps)||30))),e.omitFps=e.omitFps===!0,e.integerFrameAlignment=e.integerFrameAlignment!==!1,e.bonePool=e.bonePool!==!1,e.excludeEmptyAnimations=e.excludeEmptyAnimations===!0,e.fileName=String(e.fileName||"SpineParticle.json"),e}const xm=30;function Md(n,e=1){return Math.min(1800,Math.max(1,Math.ceil(Number(n)||e)))}function PS(n,e=30){const t=Math.max(0,Number(n.lifeMin)||0),i=Math.max(0,Number(n.lifeMax)||0),s=n.lifeMode==="fixed"?t:Math.max(t,i);return Md(Math.ceil(s*Math.max(1,e)),xm)}function Wn(n,e=30){const t=Md(n.loopDurationFrames),i=PS(n,e),s=n.generateLoopStartAnimation?n.loopStartUseCustomDuration?Md(n.loopStartDurationFrames,xm):i:0,r=n.generateLoopEndAnimation?n.loopEndUseCustomDuration?Md(n.loopEndDurationFrames,xm):i:0;return{start:s,loop:t,end:r,total:s+t+r}}function IS(n,e){const t=Wn(n,e),s=Math.max(0,Math.ceil(Math.max(0,Number(n.delay)||0)*Math.max(1,e)))+t.start;return{start:s,end:s+t.loop}}function Xa(n){var t,i;const e=new Set;for(const s of n){if(((t=s.config)==null?void 0:t.eventEnabled)===!1)continue;const r=(i=s.config)==null?void 0:i.events;if(Array.isArray(r))for(const o of r)o.targetSystemId>0&&o.targetSystemId!==s.id&&e.add(o.targetSystemId)}return e}function kS(n,e){var r,o;const t=new Map;for(const a of n){if(((r=a.config)==null?void 0:r.eventEnabled)===!1)continue;const c=(o=a.config)==null?void 0:o.events;if(Array.isArray(c))for(const l of c){if(l.targetSystemId<=0||l.targetSystemId===a.id)continue;const d=t.get(l.targetSystemId);d?d.push(a.id):t.set(l.targetSystemId,[a.id])}}const i=new Set,s=[...t.get(e)||[]];for(;s.length;){const a=s.pop();i.has(a)||(i.add(a),s.push(...t.get(a)||[]))}return i.delete(e),i}const fF=.001;function RS(n,e){const t=Math.max(1,Number(e)||30),s=Math.max(0,Number(n)||0)*t+fF*t;return Math.max(0,Math.floor(s))}function FS(n,e,t){const i=Math.max(1,Math.floor(t)-1),s=Math.min(i-1,Math.max(0,Math.floor(Number(n)||0))),r=Math.min(i,Math.max(s+1,Math.floor(Number(e)||i)));return{start:s,end:r}}function rp(n,e,t,i){const s=Math.max(1,Math.floor(i)-1);return FS(n?e:0,n?t:s,i)}function pF(n,e,t){const i=Math.max(1,e-1),s=Math.max(1,t-1),r=n.end>=i?s:n.end;return FS(n.start,r,t)}let td=1,id=1,nd=1,sd=1;function rd(n,e){const t=new Set(e),i=`${n} Copy`;if(!t.has(i))return i;let s=2;for(;t.has(`${i} ${s}`);)s++;return`${i} ${s}`}const Go=IM("particle",{state:()=>({editor:{viewScale:1,viewX:0,viewY:0},systems:[],colliders:[],paths:[],spines:[],activeId:0,activeObjectType:"particle",activeObjectId:0,timeline:{playing:!0,loop:!0,abLoop:!1,frame:0,totalFrames:60,playbackStart:0,playbackEnd:59,fps:30,recorded:!1,animation:"animation",animations:["animation"]},settings:{parameterPanelOnRight:!0,tickEnabled:!1,axisFontSize:12,tickWidth:1,showAxisLabels:!0,axisColor:"#7a86ad",undoLimit:20,backgroundX:0,backgroundY:0,backgroundOpacity:1,backgroundImageName:"",backgroundImageData:"",showEmitter:!0,showBones:!1,bonePointDrawSize:1,boneAxisDrawSize:2,showSkinMesh:!1,showGrid:!0,exportSettings:Dg()}}),getters:{activeSystemCount:n=>n.systems.length,playbackRange:n=>rp(n.timeline.abLoop,n.timeline.playbackStart,n.timeline.playbackEnd,n.timeline.totalFrames)},actions:{syncSceneSequences(){td=Math.max(td,...this.systems.map(n=>n.id+1),1),id=Math.max(id,...this.colliders.map(n=>n.id+1),1),nd=Math.max(nd,...this.paths.map(n=>n.id+1),1),sd=Math.max(sd,...this.spines.map(n=>n.id+1),1)},addSystem(n){const e=tc();n!=null&&n.config&&Object.assign(e,n.config);const t=new Set(this.systems.map(r=>r.config.name));if(t.has(e.name)){let r=0;for(const a of this.systems){const c=/^ParticleSystem(\d+)$/.exec(a.config.name);c&&(r=Math.max(r,parseInt(c[1],10)))}e.name=`ParticleSystem${r+1}`;let o=2;for(;t.has(e.name);)e.name=`ParticleSystem${r+o}`,o++}const i=this.timeline.animations.includes(this.timeline.animation)?this.timeline.animation:this.timeline.animations[0]||"animation",s={id:td++,visible:!0,animation:i,config:e};return this.systems.push(s),this.activeId=s.id,this.activeObjectType="particle",this.activeObjectId=s.id,s},removeSystem(n){var i;const e=this.systems.findIndex(s=>s.id===n);e>=0&&this.systems.splice(e,1),this.activeId===n&&(this.activeId=((i=this.systems[0])==null?void 0:i.id)??0);const t=this.systems.find(s=>s.id===this.activeId);if(t&&(this.timeline.animation=t.animation),this.activeObjectType==="particle"&&this.activeObjectId===n){const s=this.systems[0];this.activeObjectId=(s==null?void 0:s.id)??0}},selectSystem(n){this.activeId=n,this.activeObjectType="particle",this.activeObjectId=n;const e=this.systems.find(t=>t.id===n);e&&(this.timeline.animation=e.animation)},setSystemAnimation(n,e){if(!this.timeline.animations.includes(e))return;const t=this.systems.find(i=>i.id===n);t&&(t.animation=e,this.timeline.animation=e)},addAnimation(){const n=new Set(this.timeline.animations);let e=2,t=`animation${e}`;for(;n.has(t);)t=`animation${++e}`;this.timeline.animations.push(t),this.timeline.animation=t;const i=this.systems.find(s=>s.id===this.activeId);return i&&(i.animation=t),t},renameAnimation(n,e){const t=e.trim(),i=this.timeline.animations.indexOf(n);if(i<0||!t||t!==n&&this.timeline.animations.includes(t))return!1;this.timeline.animations[i]=t;for(const s of this.systems)s.animation===n&&(s.animation=t);return this.timeline.animation===n&&(this.timeline.animation=t),!0},removeAnimation(n){if(this.timeline.animations.length<=1)return!1;const e=this.timeline.animations.indexOf(n);if(e<0)return!1;this.timeline.animations.splice(e,1);const t=this.timeline.animations[Math.min(e,this.timeline.animations.length-1)];for(const i of this.systems)i.animation===n&&(i.animation=t);return this.timeline.animation===n&&(this.timeline.animation=t),!0},addCollider(){const n=id++,e={id:n,name:`Collider${n}`,visible:!0,shape:"circle",enabled:!0,x:0,y:0,rotation:0,scaleX:1,scaleY:1,radius:50,radiusX:70,radiusY:45,width:120,height:80,sides:6,response:"physics",elasticity:.8,friction:.3,followPath:!1,followPathId:0,followDuration:2,followPathRotation:!1,followCurveMode:"跟随导出",followCurve:[{x:0,y:0},{x:1,y:1}]};return this.colliders.push(e),this.activeObjectType="collision",this.activeObjectId=e.id,e},addPath(){const n=nd++,e={id:n,name:`Path${n}`,visible:!0,enabled:!0,x:0,y:0,rotation:0,scaleX:1,scaleY:1,closed:!1,color:"#ff933e",preset:"",points:[]};return this.paths.push(e),this.activeObjectType="path",this.activeObjectId=e.id,e},addSpine(){const n=sd++,e={id:n,name:`SpineSkeleton${n}`,enabled:!0,visible:!0,x:0,y:0,rotation:0,scaleX:1,scaleY:1,timeOffset:0,skeletonFileName:"",atlasFileName:"",textureFileNames:[],dataVersion:"",sourceBundle:null,selectedAnimation:"",selectedBone:"",selectedSlot:"",animations:[],bones:[],slots:[],assetVersion:0,status:"empty",error:""};return this.spines.push(e),this.activeObjectType="spine",this.activeObjectId=e.id,e},duplicateSelectedObject(){const n=this.activeObjectId;if(!n)return null;if(this.activeObjectType==="particle"){const i=this.systems.find(r=>r.id===n);if(!i)return null;const s=Zt(i);return s.id=td++,s.config.name=rd(i.config.name,this.systems.map(r=>r.config.name)),s.frames=void 0,this.systems.push(s),this.activeId=s.id,this.activeObjectId=s.id,this.timeline.animation=s.animation,s}if(this.activeObjectType==="collision"){const i=this.colliders.find(r=>r.id===n);if(!i)return null;const s=Zt(i);return s.id=id++,s.name=rd(i.name,this.colliders.map(r=>r.name)),this.colliders.push(s),this.activeObjectId=s.id,s}if(this.activeObjectType==="path"){const i=this.paths.find(r=>r.id===n);if(!i)return null;const s=Zt(i);return s.id=nd++,s.name=rd(i.name,this.paths.map(r=>r.name)),this.paths.push(s),this.activeObjectId=s.id,s}const e=this.spines.find(i=>i.id===n);if(!e)return null;const t=Zt(e);return t.id=sd++,t.name=rd(e.name,this.spines.map(i=>i.name)),t.selectedBone="",t.selectedSlot="",uF(e.id,t.id),this.spines.push(t),this.activeObjectId=t.id,t},selectSceneObject(n,e){if(this.activeObjectType=n,this.activeObjectId=e,n==="particle"){this.activeId=e;const t=this.systems.find(i=>i.id===e);t&&(this.timeline.animation=t.animation)}},removeCollider(n){var t;const e=this.colliders.findIndex(i=>i.id===n);e>=0&&this.colliders.splice(e,1);for(const i of this.systems){const s=lr(i.config);s.collisionColliderIds=s.collisionColliderIds.filter(r=>r!==n)}if(this.activeObjectType==="collision"&&this.activeObjectId===n){const i=this.systems[0];this.activeObjectType=i?"particle":"collision",this.activeObjectId=(i==null?void 0:i.id)??((t=this.colliders[0])==null?void 0:t.id)??0}},removePath(n){var t;const e=this.paths.findIndex(i=>i.id===n);if(e>=0&&this.paths.splice(e,1),this.activeObjectType==="path"&&this.activeObjectId===n){const i=this.systems[0];this.activeObjectType=i?"particle":"path",this.activeObjectId=(i==null?void 0:i.id)??((t=this.paths[0])==null?void 0:t.id)??0}},removeSpine(n){bc(n);const e=this.spines.findIndex(t=>t.id===n);if(e>=0&&this.spines.splice(e,1),this.activeObjectType==="spine"&&this.activeObjectId===n){const t=this.systems[0],i=this.colliders[0],s=this.paths[0],r=this.spines[0];t?(this.activeObjectType="particle",this.activeObjectId=t.id,this.activeId=t.id):i?(this.activeObjectType="collision",this.activeObjectId=i.id):s?(this.activeObjectType="path",this.activeObjectId=s.id):(this.activeObjectType="spine",this.activeObjectId=(r==null?void 0:r.id)??0)}this.recalcTotalFrames()},play(){const n=this.playbackRange;(this.timeline.frame=n.end)&&(this.timeline.frame=n.start),this.timeline.playing=!0},pause(){this.timeline.playing=!1},togglePlay(){this.timeline.playing?this.pause():this.play()},toStart(){this.timeline.frame=this.playbackRange.start},previousFrame(){this.timeline.playing=!1,this.timeline.frame=Math.max(this.playbackRange.start,this.timeline.frame-1)},nextFrame(){this.timeline.playing=!1,this.timeline.frame=Math.min(this.playbackRange.end,this.timeline.frame+1)},toEnd(){this.timeline.playing=!1,this.timeline.frame=this.playbackRange.end},toggleLoop(){this.timeline.loop=!this.timeline.loop},toggleABLoop(){this.timeline.abLoop=!this.timeline.abLoop;const n=this.playbackRange;(this.timeline.framen.end)&&(this.timeline.frame=n.start)},setFrame(n){this.timeline.frame=Math.max(0,Math.min(n,this.timeline.totalFrames-1))},setPlaybackStart(n){const e=rp(!0,n,this.timeline.playbackEnd,this.timeline.totalFrames);this.timeline.playbackStart=e.start,this.timeline.playbackEnd=e.end,this.timeline.abLoop&&this.timeline.framee.end&&(this.timeline.frame=e.end)},recalcTotalFrames(){const n=Math.max(1,this.timeline.fps||30),e=u=>{const h=Math.max(0,Number(u.lifeMin)||0),f=Math.max(0,Number(u.lifeMax)||0);return u.lifeMode==="fixed"?h:Math.max(h,f)},t=new Map(this.systems.map(u=>[u.id,u])),i=new Map,s=new Set,r=u=>{const h=i.get(u.id);if(h!=null)return h;if(s.has(u.id))return 0;s.add(u.id);const f=u.config,p=e(f);let m=p;if(f.eventEnabled)for(const g of f.events||[]){const v=t.get(g.targetSystemId);if(!v||v.id===u.id)continue;const y=r(v),b=g.event==="birth"?0:p,w=Math.max(0,Number(v.config.delay)||0);m=Math.max(m,b+w+y)}return s.delete(u.id),i.set(u.id,m),m},o=Xa(this.systems);let a=0;for(const u of this.systems){if(o.has(u.id))continue;const h=u.config,f=Math.max(0,Number(h.delay)||0),p=h.mode==="stream"&&h.streamBehavior==="loop";let m;if(h.mode==="stream"){const g=p?Wn(h,n).total/n:Math.max(1/n,Number(h.duration)||0);if(m=f+g,p){let v=0;if(h.eventEnabled){const y=e(h);for(const b of h.events||[]){const w=t.get(b.targetSystemId);if(!w||w.id===u.id)continue;const C=Math.max(0,Number(w.config.delay)||0);v=Math.max(v,(b.event==="birth"?0:y)+C+r(w))}}m+=v}else m+=r(u)}else m=f+r(u);m>a&&(a=m)}for(const u of this.spines){const h=u.animations.find(p=>p.name===u.selectedAnimation);if(!h)continue;const f=Math.max(0,Number(u.timeOffset)||0)+Math.max(0,h.duration||0);f>a&&(a=f)}for(const u of this.colliders){if(!u.followPath||!u.followPathId)continue;const h=Math.max(0,Number(u.followDuration)||0);h>a&&(a=h)}const c=this.timeline.totalFrames,l=Math.max(2,RS(a,n)+1);this.timeline.totalFrames=l;const d=pF({start:this.timeline.playbackStart,end:this.timeline.playbackEnd},c,l);return this.timeline.playbackStart=d.start,this.timeline.playbackEnd=d.end,this.timeline.frame>=l&&(this.timeline.frame=l-1),l}}});/*! * shared v11.4.16 * (c) 2026 kazuya kawaguchi * Released under the MIT License. @@ -1175,16 +1175,16 @@ void main(void)\r * (c) 2026 kazuya kawaguchi * Released under the MIT License. */function NF(n,e,t){return{line:n,column:e,offset:t}}function wm(n,e,t){return{start:n,end:e}}const Lt={EXPECTED_TOKEN:1,INVALID_TOKEN_IN_PLACEHOLDER:2,UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER:3,UNKNOWN_ESCAPE_SEQUENCE:4,INVALID_UNICODE_ESCAPE_SEQUENCE:5,UNBALANCED_CLOSING_BRACE:6,UNTERMINATED_CLOSING_BRACE:7,EMPTY_PLACEHOLDER:8,NOT_ALLOW_NEST_PLACEHOLDER:9,INVALID_LINKED_FORMAT:10,MUST_HAVE_MESSAGES_IN_PLURAL:11,UNEXPECTED_EMPTY_LINKED_MODIFIER:12,UNEXPECTED_EMPTY_LINKED_KEY:13,UNEXPECTED_LEXICAL_ANALYSIS:14},$F=17;function dh(n,e,t={}){const{domain:i,messages:s,args:r}=t,o=n,a=new SyntaxError(String(o));return a.code=n,e&&(a.location=e),a.domain=i,a}function BF(n){throw n}const ss=" ",UF="\r",Ui=` -`,VF="\u2028",XF="\u2029";function YF(n){const e=n;let t=0,i=1,s=1,r=0;const o=S=>e[S]===UF&&e[S+1]===Ui,a=S=>e[S]===Ui,c=S=>e[S]===XF,l=S=>e[S]===VF,d=S=>o(S)||a(S)||c(S)||l(S),u=()=>t,h=()=>i,f=()=>s,p=()=>r,m=S=>o(S)||c(S)||l(S)?Ui:e[S],g=()=>m(t),v=()=>m(t+r);function y(){return r=0,d(t)&&(i++,s=0),o(t)&&t++,t++,s++,e[t]}function b(){return o(t+r)&&r++,r++,e[t+r]}function x(){t=0,i=1,s=1,r=0}function C(S=0){r=S}function T(){const S=t+r;for(;S!==t;)y();r=0}return{index:u,line:h,column:f,peekOffset:p,charAt:m,currentChar:g,currentPeek:v,next:y,peek:b,reset:x,resetPeek:C,skipToPeek:T}}const Bs=void 0,zF=".",uy="'",jF="tokenizer";function HF(n,e={}){const t=e.location!==!1,i=YF(n),s=()=>i.index(),r=()=>NF(i.line(),i.column(),i.index()),o=r(),a=s(),c={currentType:13,offset:a,startLoc:o,endLoc:o,lastType:13,lastOffset:a,lastStartLoc:o,lastEndLoc:o,braceNest:0,inLinked:!1,text:""},l=()=>c,{onError:d}=e;function u(U,W,ee,...ne){const ue=l();if(W.column+=ee,W.offset+=ee,d){const xe=t?wm(ue.startLoc,W):null,ye=dh(U,xe,{domain:jF,args:ne});d(ye)}}function h(U,W,ee){U.endLoc=r(),U.currentType=W;const ne={type:W};return t&&(ne.loc=wm(U.startLoc,U.endLoc)),ee!=null&&(ne.value=ee),ne}const f=U=>h(U,13);function p(U,W){return U.currentChar()===W?(U.next(),W):(u(Lt.EXPECTED_TOKEN,r(),0,W),"")}function m(U){let W="";for(;U.currentPeek()===ss||U.currentPeek()===Ui;)W+=U.currentPeek(),U.peek();return W}function g(U){const W=m(U);return U.skipToPeek(),W}function v(U){if(U===Bs)return!1;const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W===95}function y(U){if(U===Bs)return!1;const W=U.charCodeAt(0);return W>=48&&W<=57}function b(U,W){const{currentType:ee}=W;if(ee!==2)return!1;m(U);const ne=v(U.currentPeek());return U.resetPeek(),ne}function x(U,W){const{currentType:ee}=W;if(ee!==2)return!1;m(U);const ne=U.currentPeek()==="-"?U.peek():U.currentPeek(),ue=y(ne);return U.resetPeek(),ue}function C(U,W){const{currentType:ee}=W;if(ee!==2)return!1;m(U);const ne=U.currentPeek()===uy;return U.resetPeek(),ne}function T(U,W){const{currentType:ee}=W;if(ee!==7)return!1;m(U);const ne=U.currentPeek()===".";return U.resetPeek(),ne}function S(U,W){const{currentType:ee}=W;if(ee!==8)return!1;m(U);const ne=v(U.currentPeek());return U.resetPeek(),ne}function E(U,W){const{currentType:ee}=W;if(!(ee===7||ee===11))return!1;m(U);const ne=U.currentPeek()===":";return U.resetPeek(),ne}function _(U,W){const{currentType:ee}=W;if(ee!==9)return!1;const ne=()=>{const xe=U.currentPeek();return xe==="{"?v(U.peek()):xe==="@"||xe==="|"||xe===":"||xe==="."||xe===ss||!xe?!1:xe===Ui?(U.peek(),ne()):M(U,!1)},ue=ne();return U.resetPeek(),ue}function I(U){m(U);const W=U.currentPeek()==="|";return U.resetPeek(),W}function M(U,W=!0){const ee=(ue=!1,xe="")=>{const ye=U.currentPeek();return ye==="{"||ye==="@"||!ye?ue:ye==="|"?!(xe===ss||xe===Ui):ye===ss?(U.peek(),ee(!0,ss)):ye===Ui?(U.peek(),ee(!0,Ui)):!0},ne=ee();return W&&U.resetPeek(),ne}function k(U,W){const ee=U.currentChar();return ee===Bs?Bs:W(ee)?(U.next(),ee):null}function B(U){const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W>=48&&W<=57||W===95||W===36}function D(U){return k(U,B)}function G(U){const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W>=48&&W<=57||W===95||W===36||W===45}function V(U){return k(U,G)}function Y(U){const W=U.charCodeAt(0);return W>=48&&W<=57}function L(U){return k(U,Y)}function N(U){const W=U.charCodeAt(0);return W>=48&&W<=57||W>=65&&W<=70||W>=97&&W<=102}function F(U){return k(U,N)}function $(U){let W="",ee="";for(;W=L(U);)ee+=W;return ee}function X(U){let W="";for(;;){const ee=U.currentChar();if(ee==="\\"){const ne=U.peek();ne==="{"||ne==="}"||ne==="@"||ne==="|"||ne==="\\"?(W+=ee+ne,U.next(),U.next()):(U.resetPeek(),W+=ee,U.next())}else{if(ee==="{"||ee==="}"||ee==="@"||ee==="|"||!ee)break;if(ee===ss||ee===Ui)if(M(U))W+=ee,U.next();else{if(I(U))break;W+=ee,U.next()}else W+=ee,U.next()}}return W}function z(U){g(U);let W="",ee="";for(;W=V(U);)ee+=W;const ne=U.currentChar();if(ne&&ne!=="}"&&ne!==Bs&&ne!==ss&&ne!==Ui&&ne!==" "){const ue=fe(U);return u(Lt.INVALID_TOKEN_IN_PLACEHOLDER,r(),0,ee+ue),ee+ue}return U.currentChar()===Bs&&u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),ee}function K(U){g(U);let W="";return U.currentChar()==="-"?(U.next(),W+=`-${$(U)}`):W+=$(U),U.currentChar()===Bs&&u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),W}function J(U){return U!==uy&&U!==Ui}function oe(U){g(U),p(U,"'");let W="",ee="";for(;W=k(U,J);)W==="\\"?ee+=le(U):ee+=W;const ne=U.currentChar();return ne===Ui||ne===Bs?(u(Lt.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,r(),0),ne===Ui&&(U.next(),p(U,"'")),ee):(p(U,"'"),ee)}function le(U){const W=U.currentChar();switch(W){case"\\":case"'":return U.next(),`\\${W}`;case"u":return ve(U,W,4);case"U":return ve(U,W,6);default:return u(Lt.UNKNOWN_ESCAPE_SEQUENCE,r(),0,W),""}}function ve(U,W,ee){p(U,W);let ne="";for(let ue=0;ue{const ne=U.currentChar();return ne==="{"||ne==="@"||ne==="|"||ne==="("||ne===")"||!ne||ne===ss?ee:(ee+=ne,U.next(),W(ee))};return W("")}function Z(U){g(U);const W=p(U,"|");return g(U),W}function se(U,W){let ee=null;switch(U.currentChar()){case"{":return W.braceNest>=1&&u(Lt.NOT_ALLOW_NEST_PLACEHOLDER,r(),0),U.next(),ee=h(W,2,"{"),g(U),W.braceNest++,ee;case"}":return W.braceNest>0&&W.currentType===2&&u(Lt.EMPTY_PLACEHOLDER,r(),0),U.next(),ee=h(W,3,"}"),W.braceNest--,W.braceNest>0&&g(U),W.inLinked&&W.braceNest===0&&(W.inLinked=!1),ee;case"@":return W.braceNest>0&&u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),ee=j(U,W)||f(W),W.braceNest=0,ee;default:{let ue=!0,xe=!0,ye=!0;if(I(U))return W.braceNest>0&&u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),ee=h(W,1,Z(U)),W.braceNest=0,W.inLinked=!1,ee;if(W.braceNest>0&&(W.currentType===4||W.currentType===5||W.currentType===6))return u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),W.braceNest=0,H(U,W);if(ue=b(U,W))return ee=h(W,4,z(U)),g(U),ee;if(xe=x(U,W))return ee=h(W,5,K(U)),g(U),ee;if(ye=C(U,W))return ee=h(W,6,oe(U)),g(U),ee;if(!ue&&!xe&&!ye)return ee=h(W,12,fe(U)),u(Lt.INVALID_TOKEN_IN_PLACEHOLDER,r(),0,ee.value),g(U),ee;break}}return ee}function j(U,W){const{currentType:ee}=W;let ne=null;const ue=U.currentChar();switch((ee===7||ee===8||ee===11||ee===9)&&(ue===Ui||ue===ss)&&u(Lt.INVALID_LINKED_FORMAT,r(),0),ue){case"@":return U.next(),ne=h(W,7,"@"),W.inLinked=!0,ne;case".":return g(U),U.next(),h(W,8,".");case":":return g(U),U.next(),h(W,9,":");default:return I(U)?(ne=h(W,1,Z(U)),W.braceNest=0,W.inLinked=!1,ne):T(U,W)||E(U,W)?(g(U),j(U,W)):S(U,W)?(g(U),h(W,11,be(U))):_(U,W)?(g(U),ue==="{"?se(U,W)||ne:h(W,10,q(U))):(ee===7&&u(Lt.INVALID_LINKED_FORMAT,r(),0),W.braceNest=0,W.inLinked=!1,H(U,W))}}function H(U,W){let ee={type:13};if(W.braceNest>0)return se(U,W)||f(W);if(W.inLinked)return j(U,W)||f(W);switch(U.currentChar()){case"{":return se(U,W)||f(W);case"}":return u(Lt.UNBALANCED_CLOSING_BRACE,r(),0),U.next(),h(W,3,"}");case"@":return j(U,W)||f(W);default:{if(I(U))return ee=h(W,1,Z(U)),W.braceNest=0,W.inLinked=!1,ee;if(M(U))return h(W,0,X(U));break}}return ee}function O(){const{currentType:U,offset:W,startLoc:ee,endLoc:ne}=c;return c.lastType=U,c.lastOffset=W,c.lastStartLoc=ee,c.lastEndLoc=ne,c.offset=s(),c.startLoc=r(),i.currentChar()===Bs?h(c,13):H(i,c)}return{nextToken:O,currentOffset:s,currentPosition:r,context:l}}const GF="parser",WF=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g,qF=/\\([\\@{}|])/g;function KF(n,e){return e}function JF(n,e,t){switch(n){case"\\\\":return"\\";case"\\'":return"'";default:{const i=parseInt(e||t,16);return i<=55295||i>=57344?String.fromCodePoint(i):"�"}}}function ZF(n={}){const e=n.location!==!1,{onError:t}=n;function i(v,y,b,x,...C){const T=v.currentPosition();if(T.offset+=x,T.column+=x,t){const S=e?wm(b,T):null,E=dh(y,S,{domain:GF,args:C});t(E)}}function s(v,y,b){const x={type:v};return e&&(x.start=y,x.end=y,x.loc={start:b,end:b}),x}function r(v,y,b,x){e&&(v.end=y,v.loc&&(v.loc.end=b))}function o(v,y){const b=v.context(),x=s(3,b.offset,b.startLoc);return x.value=y.replace(qF,KF),r(x,v.currentOffset(),v.currentPosition()),x}function a(v,y){const b=v.context(),{lastOffset:x,lastStartLoc:C}=b,T=s(5,x,C);return T.index=parseInt(y,10),v.nextToken(),r(T,v.currentOffset(),v.currentPosition()),T}function c(v,y){const b=v.context(),{lastOffset:x,lastStartLoc:C}=b,T=s(4,x,C);return T.key=y,v.nextToken(),r(T,v.currentOffset(),v.currentPosition()),T}function l(v,y){const b=v.context(),{lastOffset:x,lastStartLoc:C}=b,T=s(9,x,C);return T.value=y.replace(WF,JF),v.nextToken(),r(T,v.currentOffset(),v.currentPosition()),T}function d(v){const y=v.nextToken(),b=v.context(),{lastOffset:x,lastStartLoc:C}=b,T=s(8,x,C);return y.type!==11?(i(v,Lt.UNEXPECTED_EMPTY_LINKED_MODIFIER,b.lastStartLoc,0),T.value="",r(T,x,C),{nextConsumeToken:y,node:T}):(y.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,rs(y)),T.value=y.value||"",r(T,v.currentOffset(),v.currentPosition()),{node:T})}function u(v,y){const b=v.context(),x=s(7,b.offset,b.startLoc);return x.value=y,r(x,v.currentOffset(),v.currentPosition()),x}function h(v){const y=v.context(),b=s(6,y.offset,y.startLoc);let x=v.nextToken();if(x.type===8){const C=d(v);b.modifier=C.node,x=C.nextConsumeToken||v.nextToken()}switch(x.type!==9&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(x)),x=v.nextToken(),x.type===2&&(x=v.nextToken()),x.type){case 10:x.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(x)),b.key=u(v,x.value||"");break;case 4:x.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(x)),b.key=c(v,x.value||"");break;case 5:x.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(x)),b.key=a(v,x.value||"");break;case 6:x.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(x)),b.key=l(v,x.value||"");break;default:{i(v,Lt.UNEXPECTED_EMPTY_LINKED_KEY,y.lastStartLoc,0);const C=v.context(),T=s(7,C.offset,C.startLoc);return T.value="",r(T,C.offset,C.startLoc),b.key=T,r(b,C.offset,C.startLoc),{nextConsumeToken:x,node:b}}}return r(b,v.currentOffset(),v.currentPosition()),{node:b}}function f(v){const y=v.context(),b=y.currentType===1?v.currentOffset():y.offset,x=y.currentType===1?y.endLoc:y.startLoc,C=s(2,b,x);C.items=[];let T=null;do{const _=T||v.nextToken();switch(T=null,_.type){case 0:_.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(_)),C.items.push(o(v,_.value||""));break;case 5:_.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(_)),C.items.push(a(v,_.value||""));break;case 4:_.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(_)),C.items.push(c(v,_.value||""));break;case 6:_.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(_)),C.items.push(l(v,_.value||""));break;case 7:{const I=h(v);C.items.push(I.node),T=I.nextConsumeToken||null;break}}}while(y.currentType!==13&&y.currentType!==1);const S=y.currentType===1?y.lastOffset:v.currentOffset(),E=y.currentType===1?y.lastEndLoc:v.currentPosition();return r(C,S,E),C}function p(v,y,b,x){const C=v.context();let T=x.items.length===0;const S=s(1,y,b);S.cases=[],S.cases.push(x);do{const E=f(v);T||(T=E.items.length===0),S.cases.push(E)}while(C.currentType!==13);return T&&i(v,Lt.MUST_HAVE_MESSAGES_IN_PLURAL,b,0),r(S,v.currentOffset(),v.currentPosition()),S}function m(v){const y=v.context(),{offset:b,startLoc:x}=y,C=f(v);return y.currentType===13?C:p(v,b,x,C)}function g(v){const y=HF(v,gi({},n)),b=y.context(),x=s(0,b.offset,b.startLoc);return e&&x.loc&&(x.loc.source=v),x.body=m(y),n.onCacheKey&&(x.cacheKey=n.onCacheKey(v)),b.currentType!==13&&i(y,Lt.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,v[b.offset]||""),r(x,y.currentOffset(),y.currentPosition()),x}return{parse:g}}function rs(n){if(n.type===13)return"EOF";const e=(n.value||"").replace(/\r?\n/gu,"\\n");return e.length>10?e.slice(0,9)+"…":e}function QF(n,e={}){const t={ast:n,helpers:new Set};return{context:()=>t,helper:r=>(t.helpers.add(r),r)}}function hy(n,e){for(let t=0;tfy(t)),n}function fy(n){if(n.items.length===1){const e=n.items[0];(e.type===3||e.type===9)&&(n.static=e.value,delete e.value)}else{const e=[];for(let t=0;to;function c(m,g){o.code+=m}function l(m,g=!0){const v=g?i:"";c(s?v+" ".repeat(m):v)}function d(m=!0){const g=++o.indentLevel;m&&l(g)}function u(m=!0){const g=--o.indentLevel;m&&l(g)}function h(){l(o.indentLevel)}return{context:a,push:c,indent:d,deindent:u,newline:h,helper:m=>`_${m}`,needIndent:()=>o.needIndent}}function nL(n,e){const{helper:t}=n;n.push(`${t("linked")}(`),za(n,e.key),e.modifier?(n.push(", "),za(n,e.modifier),n.push(", _type")):n.push(", undefined, _type"),n.push(")")}function sL(n,e){const{helper:t,needIndent:i}=n;n.push(`${t("normalize")}([`),n.indent(i());const s=e.items.length;for(let r=0;r1){n.push(`${t("plural")}([`),n.indent(i());const s=e.cases.length;for(let r=0;r{const t=ze(e.mode)?e.mode:"normal",i=ze(e.filename)?e.filename:"message.intl";e.sourceMap;const s=e.breakLineCode!=null?e.breakLineCode:t==="arrow"?";":` +`,VF="\u2028",XF="\u2029";function YF(n){const e=n;let t=0,i=1,s=1,r=0;const o=S=>e[S]===UF&&e[S+1]===Ui,a=S=>e[S]===Ui,c=S=>e[S]===XF,l=S=>e[S]===VF,d=S=>o(S)||a(S)||c(S)||l(S),u=()=>t,h=()=>i,f=()=>s,p=()=>r,m=S=>o(S)||c(S)||l(S)?Ui:e[S],g=()=>m(t),v=()=>m(t+r);function y(){return r=0,d(t)&&(i++,s=0),o(t)&&t++,t++,s++,e[t]}function b(){return o(t+r)&&r++,r++,e[t+r]}function w(){t=0,i=1,s=1,r=0}function C(S=0){r=S}function T(){const S=t+r;for(;S!==t;)y();r=0}return{index:u,line:h,column:f,peekOffset:p,charAt:m,currentChar:g,currentPeek:v,next:y,peek:b,reset:w,resetPeek:C,skipToPeek:T}}const Bs=void 0,zF=".",uy="'",jF="tokenizer";function HF(n,e={}){const t=e.location!==!1,i=YF(n),s=()=>i.index(),r=()=>NF(i.line(),i.column(),i.index()),o=r(),a=s(),c={currentType:13,offset:a,startLoc:o,endLoc:o,lastType:13,lastOffset:a,lastStartLoc:o,lastEndLoc:o,braceNest:0,inLinked:!1,text:""},l=()=>c,{onError:d}=e;function u(U,W,ee,...ne){const ue=l();if(W.column+=ee,W.offset+=ee,d){const xe=t?wm(ue.startLoc,W):null,ye=dh(U,xe,{domain:jF,args:ne});d(ye)}}function h(U,W,ee){U.endLoc=r(),U.currentType=W;const ne={type:W};return t&&(ne.loc=wm(U.startLoc,U.endLoc)),ee!=null&&(ne.value=ee),ne}const f=U=>h(U,13);function p(U,W){return U.currentChar()===W?(U.next(),W):(u(Lt.EXPECTED_TOKEN,r(),0,W),"")}function m(U){let W="";for(;U.currentPeek()===ss||U.currentPeek()===Ui;)W+=U.currentPeek(),U.peek();return W}function g(U){const W=m(U);return U.skipToPeek(),W}function v(U){if(U===Bs)return!1;const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W===95}function y(U){if(U===Bs)return!1;const W=U.charCodeAt(0);return W>=48&&W<=57}function b(U,W){const{currentType:ee}=W;if(ee!==2)return!1;m(U);const ne=v(U.currentPeek());return U.resetPeek(),ne}function w(U,W){const{currentType:ee}=W;if(ee!==2)return!1;m(U);const ne=U.currentPeek()==="-"?U.peek():U.currentPeek(),ue=y(ne);return U.resetPeek(),ue}function C(U,W){const{currentType:ee}=W;if(ee!==2)return!1;m(U);const ne=U.currentPeek()===uy;return U.resetPeek(),ne}function T(U,W){const{currentType:ee}=W;if(ee!==7)return!1;m(U);const ne=U.currentPeek()===".";return U.resetPeek(),ne}function S(U,W){const{currentType:ee}=W;if(ee!==8)return!1;m(U);const ne=v(U.currentPeek());return U.resetPeek(),ne}function E(U,W){const{currentType:ee}=W;if(!(ee===7||ee===11))return!1;m(U);const ne=U.currentPeek()===":";return U.resetPeek(),ne}function _(U,W){const{currentType:ee}=W;if(ee!==9)return!1;const ne=()=>{const xe=U.currentPeek();return xe==="{"?v(U.peek()):xe==="@"||xe==="|"||xe===":"||xe==="."||xe===ss||!xe?!1:xe===Ui?(U.peek(),ne()):M(U,!1)},ue=ne();return U.resetPeek(),ue}function I(U){m(U);const W=U.currentPeek()==="|";return U.resetPeek(),W}function M(U,W=!0){const ee=(ue=!1,xe="")=>{const ye=U.currentPeek();return ye==="{"||ye==="@"||!ye?ue:ye==="|"?!(xe===ss||xe===Ui):ye===ss?(U.peek(),ee(!0,ss)):ye===Ui?(U.peek(),ee(!0,Ui)):!0},ne=ee();return W&&U.resetPeek(),ne}function k(U,W){const ee=U.currentChar();return ee===Bs?Bs:W(ee)?(U.next(),ee):null}function B(U){const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W>=48&&W<=57||W===95||W===36}function D(U){return k(U,B)}function G(U){const W=U.charCodeAt(0);return W>=97&&W<=122||W>=65&&W<=90||W>=48&&W<=57||W===95||W===36||W===45}function V(U){return k(U,G)}function Y(U){const W=U.charCodeAt(0);return W>=48&&W<=57}function L(U){return k(U,Y)}function N(U){const W=U.charCodeAt(0);return W>=48&&W<=57||W>=65&&W<=70||W>=97&&W<=102}function F(U){return k(U,N)}function $(U){let W="",ee="";for(;W=L(U);)ee+=W;return ee}function X(U){let W="";for(;;){const ee=U.currentChar();if(ee==="\\"){const ne=U.peek();ne==="{"||ne==="}"||ne==="@"||ne==="|"||ne==="\\"?(W+=ee+ne,U.next(),U.next()):(U.resetPeek(),W+=ee,U.next())}else{if(ee==="{"||ee==="}"||ee==="@"||ee==="|"||!ee)break;if(ee===ss||ee===Ui)if(M(U))W+=ee,U.next();else{if(I(U))break;W+=ee,U.next()}else W+=ee,U.next()}}return W}function z(U){g(U);let W="",ee="";for(;W=V(U);)ee+=W;const ne=U.currentChar();if(ne&&ne!=="}"&&ne!==Bs&&ne!==ss&&ne!==Ui&&ne!==" "){const ue=fe(U);return u(Lt.INVALID_TOKEN_IN_PLACEHOLDER,r(),0,ee+ue),ee+ue}return U.currentChar()===Bs&&u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),ee}function K(U){g(U);let W="";return U.currentChar()==="-"?(U.next(),W+=`-${$(U)}`):W+=$(U),U.currentChar()===Bs&&u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),W}function J(U){return U!==uy&&U!==Ui}function oe(U){g(U),p(U,"'");let W="",ee="";for(;W=k(U,J);)W==="\\"?ee+=le(U):ee+=W;const ne=U.currentChar();return ne===Ui||ne===Bs?(u(Lt.UNTERMINATED_SINGLE_QUOTE_IN_PLACEHOLDER,r(),0),ne===Ui&&(U.next(),p(U,"'")),ee):(p(U,"'"),ee)}function le(U){const W=U.currentChar();switch(W){case"\\":case"'":return U.next(),`\\${W}`;case"u":return ve(U,W,4);case"U":return ve(U,W,6);default:return u(Lt.UNKNOWN_ESCAPE_SEQUENCE,r(),0,W),""}}function ve(U,W,ee){p(U,W);let ne="";for(let ue=0;ue{const ne=U.currentChar();return ne==="{"||ne==="@"||ne==="|"||ne==="("||ne===")"||!ne||ne===ss?ee:(ee+=ne,U.next(),W(ee))};return W("")}function Z(U){g(U);const W=p(U,"|");return g(U),W}function se(U,W){let ee=null;switch(U.currentChar()){case"{":return W.braceNest>=1&&u(Lt.NOT_ALLOW_NEST_PLACEHOLDER,r(),0),U.next(),ee=h(W,2,"{"),g(U),W.braceNest++,ee;case"}":return W.braceNest>0&&W.currentType===2&&u(Lt.EMPTY_PLACEHOLDER,r(),0),U.next(),ee=h(W,3,"}"),W.braceNest--,W.braceNest>0&&g(U),W.inLinked&&W.braceNest===0&&(W.inLinked=!1),ee;case"@":return W.braceNest>0&&u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),ee=j(U,W)||f(W),W.braceNest=0,ee;default:{let ue=!0,xe=!0,ye=!0;if(I(U))return W.braceNest>0&&u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),ee=h(W,1,Z(U)),W.braceNest=0,W.inLinked=!1,ee;if(W.braceNest>0&&(W.currentType===4||W.currentType===5||W.currentType===6))return u(Lt.UNTERMINATED_CLOSING_BRACE,r(),0),W.braceNest=0,H(U,W);if(ue=b(U,W))return ee=h(W,4,z(U)),g(U),ee;if(xe=w(U,W))return ee=h(W,5,K(U)),g(U),ee;if(ye=C(U,W))return ee=h(W,6,oe(U)),g(U),ee;if(!ue&&!xe&&!ye)return ee=h(W,12,fe(U)),u(Lt.INVALID_TOKEN_IN_PLACEHOLDER,r(),0,ee.value),g(U),ee;break}}return ee}function j(U,W){const{currentType:ee}=W;let ne=null;const ue=U.currentChar();switch((ee===7||ee===8||ee===11||ee===9)&&(ue===Ui||ue===ss)&&u(Lt.INVALID_LINKED_FORMAT,r(),0),ue){case"@":return U.next(),ne=h(W,7,"@"),W.inLinked=!0,ne;case".":return g(U),U.next(),h(W,8,".");case":":return g(U),U.next(),h(W,9,":");default:return I(U)?(ne=h(W,1,Z(U)),W.braceNest=0,W.inLinked=!1,ne):T(U,W)||E(U,W)?(g(U),j(U,W)):S(U,W)?(g(U),h(W,11,be(U))):_(U,W)?(g(U),ue==="{"?se(U,W)||ne:h(W,10,q(U))):(ee===7&&u(Lt.INVALID_LINKED_FORMAT,r(),0),W.braceNest=0,W.inLinked=!1,H(U,W))}}function H(U,W){let ee={type:13};if(W.braceNest>0)return se(U,W)||f(W);if(W.inLinked)return j(U,W)||f(W);switch(U.currentChar()){case"{":return se(U,W)||f(W);case"}":return u(Lt.UNBALANCED_CLOSING_BRACE,r(),0),U.next(),h(W,3,"}");case"@":return j(U,W)||f(W);default:{if(I(U))return ee=h(W,1,Z(U)),W.braceNest=0,W.inLinked=!1,ee;if(M(U))return h(W,0,X(U));break}}return ee}function O(){const{currentType:U,offset:W,startLoc:ee,endLoc:ne}=c;return c.lastType=U,c.lastOffset=W,c.lastStartLoc=ee,c.lastEndLoc=ne,c.offset=s(),c.startLoc=r(),i.currentChar()===Bs?h(c,13):H(i,c)}return{nextToken:O,currentOffset:s,currentPosition:r,context:l}}const GF="parser",WF=/(?:\\\\|\\'|\\u([0-9a-fA-F]{4})|\\U([0-9a-fA-F]{6}))/g,qF=/\\([\\@{}|])/g;function KF(n,e){return e}function JF(n,e,t){switch(n){case"\\\\":return"\\";case"\\'":return"'";default:{const i=parseInt(e||t,16);return i<=55295||i>=57344?String.fromCodePoint(i):"�"}}}function ZF(n={}){const e=n.location!==!1,{onError:t}=n;function i(v,y,b,w,...C){const T=v.currentPosition();if(T.offset+=w,T.column+=w,t){const S=e?wm(b,T):null,E=dh(y,S,{domain:GF,args:C});t(E)}}function s(v,y,b){const w={type:v};return e&&(w.start=y,w.end=y,w.loc={start:b,end:b}),w}function r(v,y,b,w){e&&(v.end=y,v.loc&&(v.loc.end=b))}function o(v,y){const b=v.context(),w=s(3,b.offset,b.startLoc);return w.value=y.replace(qF,KF),r(w,v.currentOffset(),v.currentPosition()),w}function a(v,y){const b=v.context(),{lastOffset:w,lastStartLoc:C}=b,T=s(5,w,C);return T.index=parseInt(y,10),v.nextToken(),r(T,v.currentOffset(),v.currentPosition()),T}function c(v,y){const b=v.context(),{lastOffset:w,lastStartLoc:C}=b,T=s(4,w,C);return T.key=y,v.nextToken(),r(T,v.currentOffset(),v.currentPosition()),T}function l(v,y){const b=v.context(),{lastOffset:w,lastStartLoc:C}=b,T=s(9,w,C);return T.value=y.replace(WF,JF),v.nextToken(),r(T,v.currentOffset(),v.currentPosition()),T}function d(v){const y=v.nextToken(),b=v.context(),{lastOffset:w,lastStartLoc:C}=b,T=s(8,w,C);return y.type!==11?(i(v,Lt.UNEXPECTED_EMPTY_LINKED_MODIFIER,b.lastStartLoc,0),T.value="",r(T,w,C),{nextConsumeToken:y,node:T}):(y.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,rs(y)),T.value=y.value||"",r(T,v.currentOffset(),v.currentPosition()),{node:T})}function u(v,y){const b=v.context(),w=s(7,b.offset,b.startLoc);return w.value=y,r(w,v.currentOffset(),v.currentPosition()),w}function h(v){const y=v.context(),b=s(6,y.offset,y.startLoc);let w=v.nextToken();if(w.type===8){const C=d(v);b.modifier=C.node,w=C.nextConsumeToken||v.nextToken()}switch(w.type!==9&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(w)),w=v.nextToken(),w.type===2&&(w=v.nextToken()),w.type){case 10:w.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(w)),b.key=u(v,w.value||"");break;case 4:w.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(w)),b.key=c(v,w.value||"");break;case 5:w.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(w)),b.key=a(v,w.value||"");break;case 6:w.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(w)),b.key=l(v,w.value||"");break;default:{i(v,Lt.UNEXPECTED_EMPTY_LINKED_KEY,y.lastStartLoc,0);const C=v.context(),T=s(7,C.offset,C.startLoc);return T.value="",r(T,C.offset,C.startLoc),b.key=T,r(b,C.offset,C.startLoc),{nextConsumeToken:w,node:b}}}return r(b,v.currentOffset(),v.currentPosition()),{node:b}}function f(v){const y=v.context(),b=y.currentType===1?v.currentOffset():y.offset,w=y.currentType===1?y.endLoc:y.startLoc,C=s(2,b,w);C.items=[];let T=null;do{const _=T||v.nextToken();switch(T=null,_.type){case 0:_.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(_)),C.items.push(o(v,_.value||""));break;case 5:_.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(_)),C.items.push(a(v,_.value||""));break;case 4:_.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(_)),C.items.push(c(v,_.value||""));break;case 6:_.value==null&&i(v,Lt.UNEXPECTED_LEXICAL_ANALYSIS,y.lastStartLoc,0,rs(_)),C.items.push(l(v,_.value||""));break;case 7:{const I=h(v);C.items.push(I.node),T=I.nextConsumeToken||null;break}}}while(y.currentType!==13&&y.currentType!==1);const S=y.currentType===1?y.lastOffset:v.currentOffset(),E=y.currentType===1?y.lastEndLoc:v.currentPosition();return r(C,S,E),C}function p(v,y,b,w){const C=v.context();let T=w.items.length===0;const S=s(1,y,b);S.cases=[],S.cases.push(w);do{const E=f(v);T||(T=E.items.length===0),S.cases.push(E)}while(C.currentType!==13);return T&&i(v,Lt.MUST_HAVE_MESSAGES_IN_PLURAL,b,0),r(S,v.currentOffset(),v.currentPosition()),S}function m(v){const y=v.context(),{offset:b,startLoc:w}=y,C=f(v);return y.currentType===13?C:p(v,b,w,C)}function g(v){const y=HF(v,gi({},n)),b=y.context(),w=s(0,b.offset,b.startLoc);return e&&w.loc&&(w.loc.source=v),w.body=m(y),n.onCacheKey&&(w.cacheKey=n.onCacheKey(v)),b.currentType!==13&&i(y,Lt.UNEXPECTED_LEXICAL_ANALYSIS,b.lastStartLoc,0,v[b.offset]||""),r(w,y.currentOffset(),y.currentPosition()),w}return{parse:g}}function rs(n){if(n.type===13)return"EOF";const e=(n.value||"").replace(/\r?\n/gu,"\\n");return e.length>10?e.slice(0,9)+"…":e}function QF(n,e={}){const t={ast:n,helpers:new Set};return{context:()=>t,helper:r=>(t.helpers.add(r),r)}}function hy(n,e){for(let t=0;tfy(t)),n}function fy(n){if(n.items.length===1){const e=n.items[0];(e.type===3||e.type===9)&&(n.static=e.value,delete e.value)}else{const e=[];for(let t=0;to;function c(m,g){o.code+=m}function l(m,g=!0){const v=g?i:"";c(s?v+" ".repeat(m):v)}function d(m=!0){const g=++o.indentLevel;m&&l(g)}function u(m=!0){const g=--o.indentLevel;m&&l(g)}function h(){l(o.indentLevel)}return{context:a,push:c,indent:d,deindent:u,newline:h,helper:m=>`_${m}`,needIndent:()=>o.needIndent}}function nL(n,e){const{helper:t}=n;n.push(`${t("linked")}(`),za(n,e.key),e.modifier?(n.push(", "),za(n,e.modifier),n.push(", _type")):n.push(", undefined, _type"),n.push(")")}function sL(n,e){const{helper:t,needIndent:i}=n;n.push(`${t("normalize")}([`),n.indent(i());const s=e.items.length;for(let r=0;r1){n.push(`${t("plural")}([`),n.indent(i());const s=e.cases.length;for(let r=0;r{const t=ze(e.mode)?e.mode:"normal",i=ze(e.filename)?e.filename:"message.intl";e.sourceMap;const s=e.breakLineCode!=null?e.breakLineCode:t==="arrow"?";":` `,r=e.needIndent?e.needIndent:t!=="arrow",o=n.helpers||[],a=iL(n,{filename:i,breakLineCode:s,needIndent:r});a.push(t==="normal"?"function __msg__ (ctx) {":"(ctx) => {"),a.indent(r),o.length>0&&(a.push(`const { ${$g(o.map(d=>`${d}: _${d}`),", ")} } = ctx`),a.newline()),a.push("return "),za(a,n),a.deindent(r),a.push("}"),delete n.helpers;const{code:c,map:l}=a.context();return{ast:n,code:c,map:l?l.toJSON():void 0}};function lL(n,e={}){const t=gi({},e),i=!!t.jit,s=!!t.minify,r=t.optimize==null?!0:t.optimize,a=ZF(t).parse(n);return i?(r&&tL(a),s&&ya(a),{ast:a,code:""}):(eL(a,t),aL(a,t))}/*! * core-base v11.4.16 * (c) 2026 kazuya kawaguchi * Released under the MIT License. - */function cL(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(zr().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(zr().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Xo(n){return Tt(n)&&Vg(n)===0&&(Ln(n,"b")||Ln(n,"body"))}const NS=["b","body"];function dL(n){return no(n,NS)}const $S=["c","cases"];function uL(n){return no(n,$S,[])}const BS=["s","static"];function hL(n){return no(n,BS)}const US=["i","items"];function fL(n){return no(n,US,[])}const VS=["t","type"];function Vg(n){return no(n,VS)}const XS=["v","value"];function od(n,e){const t=no(n,XS);if(t!=null)return t;throw ic(e)}const YS=["m","modifier"];function pL(n){return no(n,YS)}const zS=["k","key"];function mL(n){const e=no(n,zS);if(e)return e;throw ic(6)}function no(n,e,t){for(let i=0;igL(t,n)}function gL(n,e){const t=dL(e);if(t==null)throw ic(0);if(Vg(t)===1){const r=uL(t);return n.plural(r.reduce((o,a)=>[...o,py(n,a)],[]))}else return py(n,t)}function py(n,e){const t=hL(e);if(t!=null)return n.type==="text"?t:n.normalize([t]);{const i=fL(e).reduce((s,r)=>[...s,Sm(n,r)],[]);return n.normalize(i)}}function Sm(n,e){const t=Vg(e);switch(t){case 3:return od(e,t);case 9:return od(e,t);case 4:{const i=e;if(Ln(i,"k")&&i.k)return n.interpolate(n.named(i.k));if(Ln(i,"key")&&i.key)return n.interpolate(n.named(i.key));throw ic(t)}case 5:{const i=e;if(Ln(i,"i")&&xi(i.i))return n.interpolate(n.list(i.i));if(Ln(i,"index")&&xi(i.index))return n.interpolate(n.list(i.index));throw ic(t)}case 6:{const i=e,s=pL(i),r=mL(i);return n.linked(Sm(n,r),s?Sm(n,s):void 0,n.type)}case 7:return od(e,t);case 8:return od(e,t);default:throw new Error(`unhandled node on format message part: ${t}`)}}const vL=n=>n;let ad=$t();function bL(n,e={}){let t=!1;const i=e.onError||BF;return e.onError=s=>{t=!0,i(s)},{...lL(n,e),detectError:t}}function yL(n,e){if(!__INTLIFY_DROP_MESSAGE_COMPILER__&&ze(n)){kt(e.warnHtmlMessage)&&e.warnHtmlMessage;const i=(e.onCacheKey||vL)(n),s=ad[i];if(s)return s;const{ast:r,detectError:o}=bL(n,{...e,location:!1,jit:!0}),a=op(r);return o?a:ad[i]=a}else{if(!Xo(n))return(()=>n);const t=n.cacheKey;if(t){const i=ad[t];return i||(ad[t]=op(n))}else return op(n)}}let nc=null;function xL(n){nc=n}function wL(n,e,t){nc&&nc.emit("i18n:init",{timestamp:Date.now(),i18n:n,version:e,meta:t})}const SL=CL("function:translate");function CL(n){return e=>nc&&nc.emit(n,e)}const Zs={INVALID_ARGUMENT:$F,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},AL=24;function Qs(n){return dh(n,null,void 0)}function Xg(n,e){return e.locale!=null?my(e.locale):my(n.locale)}let ap;function my(n){if(ze(n))return n;if(Kt(n)){if(n.resolvedOnce&&ap!=null)return ap;if(n.constructor.name==="Function"){const e=n();if(yF(e))throw Qs(Zs.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return ap=e}else throw Qs(Zs.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw Qs(Zs.NOT_SUPPORT_LOCALE_TYPE)}function TL(n,e,t){return[...new Set([t,...Jt(e)?e:Tt(e)?Object.keys(e).filter(i=>i!=="default"):ze(e)?[e]:[t]])]}function EL(n,e,t){const i=ze(t)?t:sc,s=n;let r;Tt(e)?(s.__localeChainObjectCache||(s.__localeChainObjectCache=new WeakMap),r=s.__localeChainObjectCache.get(e),r||(r=new Map,s.__localeChainObjectCache.set(e,r))):(s.__localeChainCache||(s.__localeChainCache=new Map),r=s.__localeChainCache.get(e),r||(r=new Map,s.__localeChainCache.set(e,r)));const o=r.get(i);if(o)return o;const a=[];let c=[t];for(;Jt(c);)c=gy(a,c,e);const l=Jt(e)||!Yt(e)?e:e.default?e.default:null;return c=ze(l)?[l]:l,Jt(c)&&gy(a,c,!1),r.set(i,a),a}function gy(n,e,t){let i=!0;for(let s=0;s{o===void 0?o=a:o+=a},h[1]=()=>{o!==void 0&&(e.push(o),o=void 0)},h[2]=()=>{h[0](),s++},h[3]=()=>{if(s>0)s--,i=4,h[0]();else{if(s=0,o===void 0||(o=FL(o),o===!1))return!1;h[1]()}};function f(){const p=n[t+1];if(i===5&&p==="'"||i===6&&p==='"')return t++,a="\\"+p,h[0](),!0}for(;i!==null;)if(t++,r=n[t],!(r==="\\"&&f())){if(c=RL(r),u=so[i],l=u[c]||u.l||8,l===8||(i=l[0],l[1]!==void 0&&(d=h[l[1]],d&&(a=r,d()===!1))))return;if(i===7)return e}}const vy=new Map;function DL(n,e){return Tt(n)?Ii(n,e):null}function OL(n,e){if(!Tt(n))return null;let t=vy.get(e);if(t||(t=LL(e),t&&vy.set(e,t)),!t)return null;const i=t.length;let s=n,r=0;for(;r`${n.charAt(0).toLocaleUpperCase()}${n.substr(1)}`;function $L(){return{upper:(n,e)=>e==="text"&&ze(n)?n.toUpperCase():e==="vnode"&&Tt(n)&&"__v_isVNode"in n?n.children.toUpperCase():n,lower:(n,e)=>e==="text"&&ze(n)?n.toLowerCase():e==="vnode"&&Tt(n)&&"__v_isVNode"in n?n.children.toLowerCase():n,capitalize:(n,e)=>e==="text"&&ze(n)?by(n):e==="vnode"&&Tt(n)&&"__v_isVNode"in n?by(n.children):n}}let HS;function BL(n){HS=n}let GS;function UL(n){GS=n}let WS;function VL(n){WS=n}let qS=null;const XL=n=>{qS=n},YL=()=>qS;let KS=null;const yy=n=>{KS=n},zL=()=>KS;let xy=0;function jL(n={}){const e=Kt(n.onWarn)?n.onWarn:wF,t=ze(n.version)?n.version:NL,i=ze(n.locale)||Kt(n.locale)?n.locale:sc,s=Kt(i)?sc:i,r=Jt(n.fallbackLocale)||Yt(n.fallbackLocale)||ze(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:s,o=Yt(n.messages)?n.messages:lp(s),a=Yt(n.datetimeFormats)?n.datetimeFormats:lp(s),c=Yt(n.numberFormats)?n.numberFormats:lp(s),l=gi($t(),n.modifiers,$L()),d=n.pluralRules||$t(),u=Kt(n.missing)?n.missing:null,h=kt(n.missingWarn)||Ya(n.missingWarn)?n.missingWarn:!0,f=kt(n.fallbackWarn)||Ya(n.fallbackWarn)?n.fallbackWarn:!0,p=!!n.fallbackFormat,m=!!n.unresolving,g=Kt(n.postTranslation)?n.postTranslation:null,v=Yt(n.processor)?n.processor:null,y=kt(n.warnHtmlMessage)?n.warnHtmlMessage:!0,b=!!n.escapeParameter,x=Kt(n.messageCompiler)?n.messageCompiler:HS,C=Kt(n.messageResolver)?n.messageResolver:GS||DL,T=Kt(n.localeFallbacker)?n.localeFallbacker:WS||TL,S=Tt(n.fallbackContext)?n.fallbackContext:void 0,E=n,_=Tt(E.__datetimeFormatters)?E.__datetimeFormatters:new Map,I=Tt(E.__numberFormatters)?E.__numberFormatters:new Map,M=Tt(E.__meta)?E.__meta:{};xy++;const k={version:t,cid:xy,locale:i,fallbackLocale:r,messages:o,modifiers:l,pluralRules:d,missing:u,missingWarn:h,fallbackWarn:f,fallbackFormat:p,unresolving:m,postTranslation:g,processor:v,warnHtmlMessage:y,escapeParameter:b,messageCompiler:x,messageResolver:C,localeFallbacker:T,fallbackContext:S,onWarn:e,__meta:M};return k.datetimeFormats=a,k.numberFormats=c,k.__datetimeFormatters=_,k.__numberFormatters=I,__INTLIFY_PROD_DEVTOOLS__&&wL(k,t,M),k}const lp=n=>({[n]:$t()});function JS(n,e,t,i,s){const{missing:r,onWarn:o}=n;if(r!==null){const a=r(n,t,e,s);return ze(a)?a:e}else return e}function wy(n,e){var i,s;const t=n;Tt(e)?(i=t.__localeChainObjectCache)==null||i.delete(e):(s=t.__localeChainCache)==null||s.delete(e)}function ld(n,e,t){wy(n,t),n.fallbackContext&&wy(n.fallbackContext,t),n.localeFallbacker(n,t,e)}function HL(n,e){return n===e?!1:n.split("-")[0]===e.split("-")[0]}function GL(n,e){const t=e.indexOf(n);if(t===-1)return!1;for(let i=t+1;i{i.includes(c)?a[c]=s[c]:e[c]=s[c]}),ze(r)?e.locale=r:Yt(r)&&(a=r),Yt(o)&&(a=o),a}function Sy(n,...e){const{datetimeFormats:t,unresolving:i,onWarn:s}=n,{__datetimeFormatters:r}=n;if(!ze(e[0])&&!LS(e[0])&&!xi(e[0]))return du;const[o,a,c,l]=Cm(...e),d=kt(c.missingWarn)?c.missingWarn:n.missingWarn,u=kt(c.fallbackWarn)?c.fallbackWarn:n.fallbackWarn,h=!!c.part,f=Xg(n,c);if(!ze(o)||o===""){const y=new Intl.DateTimeFormat(f.replace(/!/g,""),l);return h?y.formatToParts(a):y.format(a)}const p=ZS(n,o,f,t,d,u,"datetime format");if(!ze(p))return i?uh:o;const m=t[p][o],g=QS(p,o,l);let v=r.get(g);return v||(v=new Intl.DateTimeFormat(p,gi({},m,l)),r.set(g,v)),h?v.formatToParts(a):v.format(a)}const iC=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Cm(...n){const[e]=n,t=$t(),i=$t();let s;if(ze(e)){const o=e.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!o)throw Qs(Zs.INVALID_ISO_DATE_ARGUMENT);const a=o[3]?o[3].trim().startsWith("T")?`${o[1].trim()}${o[3].trim()}`:`${o[1].trim()}T${o[3].trim()}`:o[1].trim();s=new Date(a);try{s.toISOString()}catch{throw Qs(Zs.INVALID_ISO_DATE_ARGUMENT)}}else if(LS(e)){if(isNaN(e.getTime()))throw Qs(Zs.INVALID_DATE_ARGUMENT);s=e}else if(xi(e))s=e;else throw Qs(Zs.INVALID_ARGUMENT);const r=tC(n,t,i,iC);return[t.key||"",s,t,r]}function Cy(n,e,t){eC(n.__datetimeFormatters,e,t)}function Ay(n,...e){const{numberFormats:t,unresolving:i,onWarn:s}=n,{__numberFormatters:r}=n;if(!xi(e[0]))return du;const[o,a,c,l]=Am(...e),d=kt(c.missingWarn)?c.missingWarn:n.missingWarn,u=kt(c.fallbackWarn)?c.fallbackWarn:n.fallbackWarn,h=!!c.part,f=Xg(n,c);if(!ze(o)||o===""){const y=new Intl.NumberFormat(f.replace(/!/g,""),l);return h?y.formatToParts(a):y.format(a)}const p=ZS(n,o,f,t,d,u,"number format");if(!ze(p))return i?uh:o;const m=t[p][o],g=QS(p,o,l);let v=r.get(g);return v||(v=new Intl.NumberFormat(p,gi({},m,l)),r.set(g,v)),h?v.formatToParts(a):v.format(a)}const nC=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Am(...n){const[e]=n,t=$t(),i=$t();if(!xi(e))throw Qs(Zs.INVALID_ARGUMENT);const s=e,r=tC(n,t,i,nC);return[t.key||"",s,t,r]}function Ty(n,e,t){eC(n.__numberFormatters,e,t)}const WL=n=>n,qL=n=>"",KL="text",JL=n=>n.length===0?"":$g(n),ZL=xF;function cp(n,e){return n=Math.abs(n),e===2?n===1?0:1:Math.min(n,2)}function QL(n){var t,i;const e=xi(n.pluralIndex)?n.pluralIndex:-1;return xi((t=n.named)==null?void 0:t.count)?n.named.count:xi((i=n.named)==null?void 0:i.n)?n.named.n:e}function eD(n={}){var y,b,x;const e=n.locale,t=QL(n),i=ze(e)&&n.pluralRules&&Kt(Ii(n.pluralRules,e))?n.pluralRules[e]:cp,s=i===cp?void 0:cp,r=C=>C[i(t,C.length,s)],o=n.list||[],a=C=>o[C],c=n.named||$t(),l=xi(n.pluralIndex),d=C=>{const T=DS(C)?Ii(c,C):c[C];return l&&!T&&(C==="count"||C==="n")?n.pluralIndex:T};function u(C,T){const S=Kt(n.messages)?n.messages(C,!!T):Tt(n.messages)?n.messages[C]:!1;return S||(n.parent?n.parent.message(C):qL)}const h=C=>n.modifiers?Ii(n.modifiers,C):WL,f=Kt((y=n.processor)==null?void 0:y.normalize)?n.processor.normalize:JL,p=Kt((b=n.processor)==null?void 0:b.interpolate)?n.processor.interpolate:ZL,m=ze((x=n.processor)==null?void 0:x.type)?n.processor.type:KL,v={list:a,named:d,plural:r,linked:(C,...T)=>{const[S,E]=T;let _="text",I="";T.length===1?Tt(S)?(I=S.modifier||I,_=S.type||_):ze(S)&&(I=S||I):T.length===2&&(ze(S)&&(I=S||I),ze(E)&&(_=E||_));const M=u(C,!0)(v),k=M===""||M===void 0?C:M,B=_==="vnode"&&Jt(k)&&I?k[0]:k;if(!I)return B;const D=h(I);return Kt(D)?D(B,_):B},message:u,type:m,interpolate:p,normalize:f,values:gi($t(),o,c,l?{count:d("count"),n:d("n")}:{})};return v}const Ey=()=>"",er=n=>Kt(n),uu=n=>ze(n)||Xo(n)||er(n);function _y(n,...e){const{fallbackFormat:t,postTranslation:i,unresolving:s,messageCompiler:r,fallbackLocale:o,messages:a}=n,[c,l]=Tm(...e),d=kt(l.missingWarn)?l.missingWarn:n.missingWarn,u=kt(l.fallbackWarn)?l.fallbackWarn:n.fallbackWarn,h=kt(l.escapeParameter)?l.escapeParameter:n.escapeParameter,f=!!l.resolvedMessage,p=ze(l.default)||kt(l.default)?kt(l.default)?r?c:()=>c:l.default:t?r?c:()=>c:null,m=t||p!=null&&(ze(p)||Kt(p)),g=Xg(n,l);h&&tD(l);let[v,y,b]=f?[c,g,Ii(a,g)||$t()]:sC(n,c,g,o,u,d),x=v,C=c;if(!f&&!uu(x)&&m&&(x=p,C=x),!f&&(!uu(x)||!ze(y)))return s?uh:c;let T=!1;const S=()=>{T=!0},E=er(x)?x:rC(n,c,y,x,C,S);if(T)return x;const _=sD(n,y,b,l),I=eD(_),M=iD(n,E,I);let k=i?i(M,c):M;if(h&&ze(k)&&(k=OF(k)),__INTLIFY_PROD_DEVTOOLS__){const B={timestamp:Date.now(),key:ze(c)?c:er(x)?x.key:"",locale:y||(er(x)?x.locale:""),format:ze(x)?x:er(x)?x.source:"",message:k};B.meta=gi({},n.__meta,YL()||{}),SL(B)}return k}function tD(n){if(Jt(n.list)&&(n.list=n.list.map(e=>ze(e)?ly(e):e)),Tt(n.named)){const e=n.named,t=$t();for(const i of Object.keys(e)){const s=e[i];t[i]=ze(s)?ly(s):s}n.named=t}}function sC(n,e,t,i,s,r){const{messages:o,onWarn:a,messageResolver:c,localeFallbacker:l}=n,d=l(n,i,t);let u=$t(),h,f=null;const p="translate";for(let m=0;mi);return l.locale=t,l.key=e,l}const c=o(i,nD(n,t,s,i,a,r));return c.locale=t,c.key=e,c.source=i,c}function iD(n,e,t){return e(t)}function Tm(...n){const[e,t,i]=n,s=$t();if(!ze(e)&&!xi(e)&&!er(e)&&!Xo(e))throw Qs(Zs.INVALID_ARGUMENT);const r=xi(e)?String(e):(er(e),e);return xi(t)?s.plural=t:ze(t)?s.default=t:Yt(t)&&!Og(t)?s.named=t:Jt(t)&&(s.list=t),xi(i)?s.plural=i:ze(i)?s.default=i:Yt(i)&&gi(s,i),[r,s]}function nD(n,e,t,i,s,r){return{locale:e,key:t,warnHtmlMessage:s,onError:o=>{throw r&&r(o),o},onCacheKey:o=>mF(e,t,o)}}function sD(n,e,t,i){const{modifiers:s,pluralRules:r,messageResolver:o,fallbackLocale:a,fallbackWarn:c,missingWarn:l,fallbackContext:d}=n,h={locale:e,modifiers:s,pluralRules:r,messages:(f,p)=>{let m=o(t,f);if(m==null&&(d||p)){const[g,,v]=sC(d||n,f,e,a,c,l);m=g??o(v,f)}if(ze(m)||Xo(m)){let g=!1;const y=rC(n,f,e,m,f,()=>{g=!0});return g?Ey:y}else return er(m)?m:Ey}};return n.processor&&(h.processor=n.processor),i.list&&(h.list=i.list),i.named&&(h.named=i.named),xi(i.plural)&&(h.pluralIndex=i.plural),h}cL();/*! + */function cL(){typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(zr().__INTLIFY_PROD_DEVTOOLS__=!1),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(zr().__INTLIFY_DROP_MESSAGE_COMPILER__=!1)}function Xo(n){return Tt(n)&&Vg(n)===0&&(Ln(n,"b")||Ln(n,"body"))}const NS=["b","body"];function dL(n){return no(n,NS)}const $S=["c","cases"];function uL(n){return no(n,$S,[])}const BS=["s","static"];function hL(n){return no(n,BS)}const US=["i","items"];function fL(n){return no(n,US,[])}const VS=["t","type"];function Vg(n){return no(n,VS)}const XS=["v","value"];function od(n,e){const t=no(n,XS);if(t!=null)return t;throw ic(e)}const YS=["m","modifier"];function pL(n){return no(n,YS)}const zS=["k","key"];function mL(n){const e=no(n,zS);if(e)return e;throw ic(6)}function no(n,e,t){for(let i=0;igL(t,n)}function gL(n,e){const t=dL(e);if(t==null)throw ic(0);if(Vg(t)===1){const r=uL(t);return n.plural(r.reduce((o,a)=>[...o,py(n,a)],[]))}else return py(n,t)}function py(n,e){const t=hL(e);if(t!=null)return n.type==="text"?t:n.normalize([t]);{const i=fL(e).reduce((s,r)=>[...s,Sm(n,r)],[]);return n.normalize(i)}}function Sm(n,e){const t=Vg(e);switch(t){case 3:return od(e,t);case 9:return od(e,t);case 4:{const i=e;if(Ln(i,"k")&&i.k)return n.interpolate(n.named(i.k));if(Ln(i,"key")&&i.key)return n.interpolate(n.named(i.key));throw ic(t)}case 5:{const i=e;if(Ln(i,"i")&&xi(i.i))return n.interpolate(n.list(i.i));if(Ln(i,"index")&&xi(i.index))return n.interpolate(n.list(i.index));throw ic(t)}case 6:{const i=e,s=pL(i),r=mL(i);return n.linked(Sm(n,r),s?Sm(n,s):void 0,n.type)}case 7:return od(e,t);case 8:return od(e,t);default:throw new Error(`unhandled node on format message part: ${t}`)}}const vL=n=>n;let ad=$t();function bL(n,e={}){let t=!1;const i=e.onError||BF;return e.onError=s=>{t=!0,i(s)},{...lL(n,e),detectError:t}}function yL(n,e){if(!__INTLIFY_DROP_MESSAGE_COMPILER__&&ze(n)){kt(e.warnHtmlMessage)&&e.warnHtmlMessage;const i=(e.onCacheKey||vL)(n),s=ad[i];if(s)return s;const{ast:r,detectError:o}=bL(n,{...e,location:!1,jit:!0}),a=op(r);return o?a:ad[i]=a}else{if(!Xo(n))return(()=>n);const t=n.cacheKey;if(t){const i=ad[t];return i||(ad[t]=op(n))}else return op(n)}}let nc=null;function xL(n){nc=n}function wL(n,e,t){nc&&nc.emit("i18n:init",{timestamp:Date.now(),i18n:n,version:e,meta:t})}const SL=CL("function:translate");function CL(n){return e=>nc&&nc.emit(n,e)}const Zs={INVALID_ARGUMENT:$F,INVALID_DATE_ARGUMENT:18,INVALID_ISO_DATE_ARGUMENT:19,NOT_SUPPORT_LOCALE_PROMISE_VALUE:21,NOT_SUPPORT_LOCALE_ASYNC_FUNCTION:22,NOT_SUPPORT_LOCALE_TYPE:23},AL=24;function Qs(n){return dh(n,null,void 0)}function Xg(n,e){return e.locale!=null?my(e.locale):my(n.locale)}let ap;function my(n){if(ze(n))return n;if(Kt(n)){if(n.resolvedOnce&&ap!=null)return ap;if(n.constructor.name==="Function"){const e=n();if(yF(e))throw Qs(Zs.NOT_SUPPORT_LOCALE_PROMISE_VALUE);return ap=e}else throw Qs(Zs.NOT_SUPPORT_LOCALE_ASYNC_FUNCTION)}else throw Qs(Zs.NOT_SUPPORT_LOCALE_TYPE)}function TL(n,e,t){return[...new Set([t,...Jt(e)?e:Tt(e)?Object.keys(e).filter(i=>i!=="default"):ze(e)?[e]:[t]])]}function EL(n,e,t){const i=ze(t)?t:sc,s=n;let r;Tt(e)?(s.__localeChainObjectCache||(s.__localeChainObjectCache=new WeakMap),r=s.__localeChainObjectCache.get(e),r||(r=new Map,s.__localeChainObjectCache.set(e,r))):(s.__localeChainCache||(s.__localeChainCache=new Map),r=s.__localeChainCache.get(e),r||(r=new Map,s.__localeChainCache.set(e,r)));const o=r.get(i);if(o)return o;const a=[];let c=[t];for(;Jt(c);)c=gy(a,c,e);const l=Jt(e)||!Yt(e)?e:e.default?e.default:null;return c=ze(l)?[l]:l,Jt(c)&&gy(a,c,!1),r.set(i,a),a}function gy(n,e,t){let i=!0;for(let s=0;s{o===void 0?o=a:o+=a},h[1]=()=>{o!==void 0&&(e.push(o),o=void 0)},h[2]=()=>{h[0](),s++},h[3]=()=>{if(s>0)s--,i=4,h[0]();else{if(s=0,o===void 0||(o=FL(o),o===!1))return!1;h[1]()}};function f(){const p=n[t+1];if(i===5&&p==="'"||i===6&&p==='"')return t++,a="\\"+p,h[0](),!0}for(;i!==null;)if(t++,r=n[t],!(r==="\\"&&f())){if(c=RL(r),u=so[i],l=u[c]||u.l||8,l===8||(i=l[0],l[1]!==void 0&&(d=h[l[1]],d&&(a=r,d()===!1))))return;if(i===7)return e}}const vy=new Map;function DL(n,e){return Tt(n)?Ii(n,e):null}function OL(n,e){if(!Tt(n))return null;let t=vy.get(e);if(t||(t=LL(e),t&&vy.set(e,t)),!t)return null;const i=t.length;let s=n,r=0;for(;r`${n.charAt(0).toLocaleUpperCase()}${n.substr(1)}`;function $L(){return{upper:(n,e)=>e==="text"&&ze(n)?n.toUpperCase():e==="vnode"&&Tt(n)&&"__v_isVNode"in n?n.children.toUpperCase():n,lower:(n,e)=>e==="text"&&ze(n)?n.toLowerCase():e==="vnode"&&Tt(n)&&"__v_isVNode"in n?n.children.toLowerCase():n,capitalize:(n,e)=>e==="text"&&ze(n)?by(n):e==="vnode"&&Tt(n)&&"__v_isVNode"in n?by(n.children):n}}let HS;function BL(n){HS=n}let GS;function UL(n){GS=n}let WS;function VL(n){WS=n}let qS=null;const XL=n=>{qS=n},YL=()=>qS;let KS=null;const yy=n=>{KS=n},zL=()=>KS;let xy=0;function jL(n={}){const e=Kt(n.onWarn)?n.onWarn:wF,t=ze(n.version)?n.version:NL,i=ze(n.locale)||Kt(n.locale)?n.locale:sc,s=Kt(i)?sc:i,r=Jt(n.fallbackLocale)||Yt(n.fallbackLocale)||ze(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:s,o=Yt(n.messages)?n.messages:lp(s),a=Yt(n.datetimeFormats)?n.datetimeFormats:lp(s),c=Yt(n.numberFormats)?n.numberFormats:lp(s),l=gi($t(),n.modifiers,$L()),d=n.pluralRules||$t(),u=Kt(n.missing)?n.missing:null,h=kt(n.missingWarn)||Ya(n.missingWarn)?n.missingWarn:!0,f=kt(n.fallbackWarn)||Ya(n.fallbackWarn)?n.fallbackWarn:!0,p=!!n.fallbackFormat,m=!!n.unresolving,g=Kt(n.postTranslation)?n.postTranslation:null,v=Yt(n.processor)?n.processor:null,y=kt(n.warnHtmlMessage)?n.warnHtmlMessage:!0,b=!!n.escapeParameter,w=Kt(n.messageCompiler)?n.messageCompiler:HS,C=Kt(n.messageResolver)?n.messageResolver:GS||DL,T=Kt(n.localeFallbacker)?n.localeFallbacker:WS||TL,S=Tt(n.fallbackContext)?n.fallbackContext:void 0,E=n,_=Tt(E.__datetimeFormatters)?E.__datetimeFormatters:new Map,I=Tt(E.__numberFormatters)?E.__numberFormatters:new Map,M=Tt(E.__meta)?E.__meta:{};xy++;const k={version:t,cid:xy,locale:i,fallbackLocale:r,messages:o,modifiers:l,pluralRules:d,missing:u,missingWarn:h,fallbackWarn:f,fallbackFormat:p,unresolving:m,postTranslation:g,processor:v,warnHtmlMessage:y,escapeParameter:b,messageCompiler:w,messageResolver:C,localeFallbacker:T,fallbackContext:S,onWarn:e,__meta:M};return k.datetimeFormats=a,k.numberFormats=c,k.__datetimeFormatters=_,k.__numberFormatters=I,__INTLIFY_PROD_DEVTOOLS__&&wL(k,t,M),k}const lp=n=>({[n]:$t()});function JS(n,e,t,i,s){const{missing:r,onWarn:o}=n;if(r!==null){const a=r(n,t,e,s);return ze(a)?a:e}else return e}function wy(n,e){var i,s;const t=n;Tt(e)?(i=t.__localeChainObjectCache)==null||i.delete(e):(s=t.__localeChainCache)==null||s.delete(e)}function ld(n,e,t){wy(n,t),n.fallbackContext&&wy(n.fallbackContext,t),n.localeFallbacker(n,t,e)}function HL(n,e){return n===e?!1:n.split("-")[0]===e.split("-")[0]}function GL(n,e){const t=e.indexOf(n);if(t===-1)return!1;for(let i=t+1;i{i.includes(c)?a[c]=s[c]:e[c]=s[c]}),ze(r)?e.locale=r:Yt(r)&&(a=r),Yt(o)&&(a=o),a}function Sy(n,...e){const{datetimeFormats:t,unresolving:i,onWarn:s}=n,{__datetimeFormatters:r}=n;if(!ze(e[0])&&!LS(e[0])&&!xi(e[0]))return du;const[o,a,c,l]=Cm(...e),d=kt(c.missingWarn)?c.missingWarn:n.missingWarn,u=kt(c.fallbackWarn)?c.fallbackWarn:n.fallbackWarn,h=!!c.part,f=Xg(n,c);if(!ze(o)||o===""){const y=new Intl.DateTimeFormat(f.replace(/!/g,""),l);return h?y.formatToParts(a):y.format(a)}const p=ZS(n,o,f,t,d,u,"datetime format");if(!ze(p))return i?uh:o;const m=t[p][o],g=QS(p,o,l);let v=r.get(g);return v||(v=new Intl.DateTimeFormat(p,gi({},m,l)),r.set(g,v)),h?v.formatToParts(a):v.format(a)}const iC=["localeMatcher","weekday","era","year","month","day","hour","minute","second","timeZoneName","formatMatcher","hour12","timeZone","dateStyle","timeStyle","calendar","dayPeriod","numberingSystem","hourCycle","fractionalSecondDigits"];function Cm(...n){const[e]=n,t=$t(),i=$t();let s;if(ze(e)){const o=e.match(/(\d{4}-\d{2}-\d{2})(T|\s)?(.*)/);if(!o)throw Qs(Zs.INVALID_ISO_DATE_ARGUMENT);const a=o[3]?o[3].trim().startsWith("T")?`${o[1].trim()}${o[3].trim()}`:`${o[1].trim()}T${o[3].trim()}`:o[1].trim();s=new Date(a);try{s.toISOString()}catch{throw Qs(Zs.INVALID_ISO_DATE_ARGUMENT)}}else if(LS(e)){if(isNaN(e.getTime()))throw Qs(Zs.INVALID_DATE_ARGUMENT);s=e}else if(xi(e))s=e;else throw Qs(Zs.INVALID_ARGUMENT);const r=tC(n,t,i,iC);return[t.key||"",s,t,r]}function Cy(n,e,t){eC(n.__datetimeFormatters,e,t)}function Ay(n,...e){const{numberFormats:t,unresolving:i,onWarn:s}=n,{__numberFormatters:r}=n;if(!xi(e[0]))return du;const[o,a,c,l]=Am(...e),d=kt(c.missingWarn)?c.missingWarn:n.missingWarn,u=kt(c.fallbackWarn)?c.fallbackWarn:n.fallbackWarn,h=!!c.part,f=Xg(n,c);if(!ze(o)||o===""){const y=new Intl.NumberFormat(f.replace(/!/g,""),l);return h?y.formatToParts(a):y.format(a)}const p=ZS(n,o,f,t,d,u,"number format");if(!ze(p))return i?uh:o;const m=t[p][o],g=QS(p,o,l);let v=r.get(g);return v||(v=new Intl.NumberFormat(p,gi({},m,l)),r.set(g,v)),h?v.formatToParts(a):v.format(a)}const nC=["localeMatcher","style","currency","currencyDisplay","currencySign","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","minimumSignificantDigits","maximumSignificantDigits","compactDisplay","notation","signDisplay","unit","unitDisplay","roundingMode","roundingPriority","roundingIncrement","trailingZeroDisplay"];function Am(...n){const[e]=n,t=$t(),i=$t();if(!xi(e))throw Qs(Zs.INVALID_ARGUMENT);const s=e,r=tC(n,t,i,nC);return[t.key||"",s,t,r]}function Ty(n,e,t){eC(n.__numberFormatters,e,t)}const WL=n=>n,qL=n=>"",KL="text",JL=n=>n.length===0?"":$g(n),ZL=xF;function cp(n,e){return n=Math.abs(n),e===2?n===1?0:1:Math.min(n,2)}function QL(n){var t,i;const e=xi(n.pluralIndex)?n.pluralIndex:-1;return xi((t=n.named)==null?void 0:t.count)?n.named.count:xi((i=n.named)==null?void 0:i.n)?n.named.n:e}function eD(n={}){var y,b,w;const e=n.locale,t=QL(n),i=ze(e)&&n.pluralRules&&Kt(Ii(n.pluralRules,e))?n.pluralRules[e]:cp,s=i===cp?void 0:cp,r=C=>C[i(t,C.length,s)],o=n.list||[],a=C=>o[C],c=n.named||$t(),l=xi(n.pluralIndex),d=C=>{const T=DS(C)?Ii(c,C):c[C];return l&&!T&&(C==="count"||C==="n")?n.pluralIndex:T};function u(C,T){const S=Kt(n.messages)?n.messages(C,!!T):Tt(n.messages)?n.messages[C]:!1;return S||(n.parent?n.parent.message(C):qL)}const h=C=>n.modifiers?Ii(n.modifiers,C):WL,f=Kt((y=n.processor)==null?void 0:y.normalize)?n.processor.normalize:JL,p=Kt((b=n.processor)==null?void 0:b.interpolate)?n.processor.interpolate:ZL,m=ze((w=n.processor)==null?void 0:w.type)?n.processor.type:KL,v={list:a,named:d,plural:r,linked:(C,...T)=>{const[S,E]=T;let _="text",I="";T.length===1?Tt(S)?(I=S.modifier||I,_=S.type||_):ze(S)&&(I=S||I):T.length===2&&(ze(S)&&(I=S||I),ze(E)&&(_=E||_));const M=u(C,!0)(v),k=M===""||M===void 0?C:M,B=_==="vnode"&&Jt(k)&&I?k[0]:k;if(!I)return B;const D=h(I);return Kt(D)?D(B,_):B},message:u,type:m,interpolate:p,normalize:f,values:gi($t(),o,c,l?{count:d("count"),n:d("n")}:{})};return v}const Ey=()=>"",er=n=>Kt(n),uu=n=>ze(n)||Xo(n)||er(n);function _y(n,...e){const{fallbackFormat:t,postTranslation:i,unresolving:s,messageCompiler:r,fallbackLocale:o,messages:a}=n,[c,l]=Tm(...e),d=kt(l.missingWarn)?l.missingWarn:n.missingWarn,u=kt(l.fallbackWarn)?l.fallbackWarn:n.fallbackWarn,h=kt(l.escapeParameter)?l.escapeParameter:n.escapeParameter,f=!!l.resolvedMessage,p=ze(l.default)||kt(l.default)?kt(l.default)?r?c:()=>c:l.default:t?r?c:()=>c:null,m=t||p!=null&&(ze(p)||Kt(p)),g=Xg(n,l);h&&tD(l);let[v,y,b]=f?[c,g,Ii(a,g)||$t()]:sC(n,c,g,o,u,d),w=v,C=c;if(!f&&!uu(w)&&m&&(w=p,C=w),!f&&(!uu(w)||!ze(y)))return s?uh:c;let T=!1;const S=()=>{T=!0},E=er(w)?w:rC(n,c,y,w,C,S);if(T)return w;const _=sD(n,y,b,l),I=eD(_),M=iD(n,E,I);let k=i?i(M,c):M;if(h&&ze(k)&&(k=OF(k)),__INTLIFY_PROD_DEVTOOLS__){const B={timestamp:Date.now(),key:ze(c)?c:er(w)?w.key:"",locale:y||(er(w)?w.locale:""),format:ze(w)?w:er(w)?w.source:"",message:k};B.meta=gi({},n.__meta,YL()||{}),SL(B)}return k}function tD(n){if(Jt(n.list)&&(n.list=n.list.map(e=>ze(e)?ly(e):e)),Tt(n.named)){const e=n.named,t=$t();for(const i of Object.keys(e)){const s=e[i];t[i]=ze(s)?ly(s):s}n.named=t}}function sC(n,e,t,i,s,r){const{messages:o,onWarn:a,messageResolver:c,localeFallbacker:l}=n,d=l(n,i,t);let u=$t(),h,f=null;const p="translate";for(let m=0;mi);return l.locale=t,l.key=e,l}const c=o(i,nD(n,t,s,i,a,r));return c.locale=t,c.key=e,c.source=i,c}function iD(n,e,t){return e(t)}function Tm(...n){const[e,t,i]=n,s=$t();if(!ze(e)&&!xi(e)&&!er(e)&&!Xo(e))throw Qs(Zs.INVALID_ARGUMENT);const r=xi(e)?String(e):(er(e),e);return xi(t)?s.plural=t:ze(t)?s.default=t:Yt(t)&&!Og(t)?s.named=t:Jt(t)&&(s.list=t),xi(i)?s.plural=i:ze(i)?s.default=i:Yt(i)&&gi(s,i),[r,s]}function nD(n,e,t,i,s,r){return{locale:e,key:t,warnHtmlMessage:s,onError:o=>{throw r&&r(o),o},onCacheKey:o=>mF(e,t,o)}}function sD(n,e,t,i){const{modifiers:s,pluralRules:r,messageResolver:o,fallbackLocale:a,fallbackWarn:c,missingWarn:l,fallbackContext:d}=n,h={locale:e,modifiers:s,pluralRules:r,messages:(f,p)=>{let m=o(t,f);if(m==null&&(d||p)){const[g,,v]=sC(d||n,f,e,a,c,l);m=g??o(v,f)}if(ze(m)||Xo(m)){let g=!1;const y=rC(n,f,e,m,f,()=>{g=!0});return g?Ey:y}else return er(m)?m:Ey}};return n.processor&&(h.processor=n.processor),i.list&&(h.list=i.list),i.named&&(h.named=i.named),xi(i.plural)&&(h.pluralIndex=i.plural),h}cL();/*! * vue-i18n v11.4.16 * (c) 2026 kazuya kawaguchi * Released under the MIT License. - */const rD="11.4.16";function oD(){typeof __VUE_I18N_FULL_INSTALL__!="boolean"&&(zr().__VUE_I18N_FULL_INSTALL__=!0),typeof __VUE_I18N_LEGACY_API__!="boolean"&&(zr().__VUE_I18N_LEGACY_API__=!0),typeof __INTLIFY_DROP_MESSAGE_COMPILER__!="boolean"&&(zr().__INTLIFY_DROP_MESSAGE_COMPILER__=!1),typeof __INTLIFY_PROD_DEVTOOLS__!="boolean"&&(zr().__INTLIFY_PROD_DEVTOOLS__=!1)}const sn={UNEXPECTED_RETURN_TYPE:AL,INVALID_ARGUMENT:25,MUST_BE_CALL_SETUP_TOP:26,NOT_INSTALLED:27,REQUIRED_VALUE:28,INVALID_VALUE:29,NOT_INSTALLED_WITH_PROVIDE:31,UNEXPECTED_ERROR:32,NOT_AVAILABLE_COMPOSITION_IN_LEGACY:34};function hn(n,...e){return dh(n,null,void 0)}const Em=io("__translateVNode"),_m=io("__datetimeParts"),Mm=io("__numberParts"),oC=io("__setPluralRules"),aC=io("__injectWithOption"),wa=io("__dispose");let lC=null;{const n=zr().__VUE_INSTANCE_SETTERS__;Jt(n)&&n.push(e=>{lC=e})}function Fr(n){return!!DS(n)}function rc(n){if(!Tt(n)||Xo(n))return n;for(const e in n)if(Ln(n,e))if(!e.includes("."))Tt(n[e])&&rc(n[e]);else{const t=e.split("."),i=t.length-1;let s=n,r=!1;for(let a=0;a{if("locale"in a&&"resource"in a){const{locale:c,resource:l}=a;if(c){if(Fr(c))return;o[c]=Ii(o,c)||$t(),Pd(l,o[c])}else Pd(l,o)}else ze(a)&&Pd(JSON.parse(a),o)}),s==null&&r)for(const a in o)Ln(o,a)&&rc(o[a]);return o}function cC(n){return n.type}function dC(n,e,t){let i=Tt(e.messages)?e.messages:$t();"__i18nGlobal"in t&&(i=Yg(n.locale.value,{messages:i,__i18n:t.__i18nGlobal}));const s=Object.keys(i);s.length&&s.forEach(r=>{n.mergeLocaleMessage(r,i[r])});{if(Tt(e.datetimeFormats)){const r=Object.keys(e.datetimeFormats);r.length&&r.forEach(o=>{n.mergeDateTimeFormat(o,e.datetimeFormats[o])})}if(Tt(e.numberFormats)){const r=Object.keys(e.numberFormats);r.length&&r.forEach(o=>{n.mergeNumberFormat(o,e.numberFormats[o])})}}}function My(n){return Ae(fc,null,n,0)}function oc(){return lC??Ku()}const Py="__INTLIFY_META__",Iy=()=>[],aD=()=>!1;let ky=0;function Ry(n){return((e,t,i,s)=>n(t,i,oc()||void 0,s))}const lD=()=>{const n=oc();let e=null;return n&&(e=cC(n)[Py])?{[Py]:e}:null};function hu(n={}){const{__root:e,__injectWithOption:t}=n,i=e===void 0,s=n.flatJson,r=cu?$e:SE;let o=kt(n.inheritLocale)?n.inheritLocale:!0;const a=r(e&&o?e.locale.value:ze(n.locale)?n.locale:sc),c=r(e&&o?e.fallbackLocale.value:ze(n.fallbackLocale)||Jt(n.fallbackLocale)||Yt(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:a.value),l=r(Yg(a.value,n)),d=r(Yt(n.datetimeFormats)?n.datetimeFormats:{[a.value]:{}}),u=r(Yt(n.numberFormats)?n.numberFormats:{[a.value]:{}});let h=e?e.missingWarn:kt(n.missingWarn)||Ya(n.missingWarn)?n.missingWarn:!0,f=e?e.fallbackWarn:kt(n.fallbackWarn)||Ya(n.fallbackWarn)?n.fallbackWarn:!0,p=e?e.fallbackRoot:kt(n.fallbackRoot)?n.fallbackRoot:!0,m=!!n.fallbackFormat,g=Kt(n.missing)?n.missing:null,v=Kt(n.missing)?Ry(n.missing):null,y=Kt(n.postTranslation)?n.postTranslation:null,b=e?e.warnHtmlMessage:kt(n.warnHtmlMessage)?n.warnHtmlMessage:!0,x=!!n.escapeParameter;const C=e?e.modifiers:Yt(n.modifiers)?n.modifiers:{};let T=n.pluralRules||e&&e.pluralRules,S;S=(()=>{i&&yy(null);const de={version:rD,locale:a.value,fallbackLocale:c.value,messages:l.value,modifiers:C,pluralRules:T,missing:v===null?void 0:v,missingWarn:h,fallbackWarn:f,fallbackFormat:m,unresolving:!0,postTranslation:y===null?void 0:y,warnHtmlMessage:b,escapeParameter:x,messageResolver:n.messageResolver,messageCompiler:n.messageCompiler,__meta:{framework:"vue"}};de.datetimeFormats=d.value,de.numberFormats=u.value;const ge=jL(de);return i&&yy(ge),ge})(),ld(S,a.value,c.value);function _(){return[a.value,c.value,l.value,d.value,u.value]}const I=Fe({get:()=>a.value,set:de=>{S.locale=de,a.value=de}});function M(de){i||(S.fallbackContext=zL());try{return de()}finally{i||(S.fallbackContext=void 0)}}function k(de){M(()=>ld(S,a.value,de))}const B=Fe({get:()=>c.value,set:de=>{c.value=de,S.fallbackLocale=c.value,k(c.value)}}),D=Fe(()=>l.value),G=Fe(()=>d.value),V=Fe(()=>u.value);function Y(){return Kt(y)?y:null}function L(de){y=de,S.postTranslation=de}function N(){return g}function F(de){de!==null&&(v=Ry(de)),g=de,S.missing=v}const $=(de,ge,Ge,Le,Ee,Ze)=>{_();let Te;try{__INTLIFY_PROD_DEVTOOLS__,Te=M(()=>de(S))}finally{__INTLIFY_PROD_DEVTOOLS__}if(Ge!=="translate exists"&&xi(Te)&&Te===uh||Ge==="translate exists"&&!Te){const[vi,lt]=ge();return e&&p?Le(e):Ee(vi)}else{if(Ze(Te))return Te;throw hn(sn.UNEXPECTED_RETURN_TYPE)}};function X(...de){return $(ge=>Reflect.apply(_y,null,[ge,...de]),()=>Tm(...de),"translate",ge=>Reflect.apply(ge.t,ge,[...de]),ge=>ge,ge=>ze(ge))}function z(...de){const[ge,Ge,Le]=de;if(Le&&!Tt(Le))throw hn(sn.INVALID_ARGUMENT);return X(ge,Ge,gi({resolvedMessage:!0},Le||{}))}function K(...de){return $(ge=>Reflect.apply(Sy,null,[ge,...de]),()=>Cm(...de),"datetime format",ge=>Reflect.apply(ge.d,ge,[...de]),()=>du,ge=>ze(ge)||Jt(ge))}function J(...de){return $(ge=>Reflect.apply(Ay,null,[ge,...de]),()=>Am(...de),"number format",ge=>Reflect.apply(ge.n,ge,[...de]),()=>du,ge=>ze(ge)||Jt(ge))}function oe(de){return de.map(ge=>ze(ge)||xi(ge)||kt(ge)?My(String(ge)):ge)}const ve={normalize:oe,interpolate:de=>de,type:"vnode"};function Se(...de){return $(ge=>{let Ge;const Le=ge;try{Le.processor=ve,Ge=Reflect.apply(_y,null,[Le,...de])}finally{Le.processor=null}return Ge},()=>Tm(...de),"translate",ge=>ge[Em](...de),ge=>[My(ge)],ge=>Jt(ge))}function fe(...de){return $(ge=>Reflect.apply(Ay,null,[ge,...de]),()=>Am(...de),"number format",ge=>ge[Mm](...de),Iy,ge=>ze(ge)||Jt(ge))}function be(...de){return $(ge=>Reflect.apply(Sy,null,[ge,...de]),()=>Cm(...de),"datetime format",ge=>ge[_m](...de),Iy,ge=>ze(ge)||Jt(ge))}function q(de){T=de,S.pluralRules=T}function Z(de,ge){const Ge=O(de),Le=S.messageResolver(Ge,ge);return Le===null?Ii(Ge,ge):Le}function se(de,ge){return $(()=>{if(!de)return!1;const Ge=ze(ge)?ge:a.value,Le=ze(ge)?[Ge]:S.localeFallbacker(S,c.value,Ge);for(let Ee=0;Ee[de],"translate exists",Ge=>Reflect.apply(Ge.te,Ge,[de,ge]),aD,Ge=>kt(Ge))}function j(de){let ge=null;const Ge=S.localeFallbacker(S,c.value,a.value);for(let Le=0;Lek(c.value),{deep:!0,flush:"sync"}),e&&cu&&(ei(e.locale,de=>{o&&(a.value=de,S.locale=de,ld(S,a.value,c.value))}),ei(e.fallbackLocale,de=>{o&&(c.value=de,S.fallbackLocale=c.value,ld(S,a.value,c.value))}));const Be={id:ky,locale:I,fallbackLocale:B,get inheritLocale(){return o},set inheritLocale(de){o=de,de&&e&&(I.value=e.locale.value,B.value=e.fallbackLocale.value)},get availableLocales(){return Object.keys(l.value).sort()},messages:D,get modifiers(){return C},get pluralRules(){return T||{}},get isGlobal(){return i},get missingWarn(){return h},set missingWarn(de){h=de,S.missingWarn=h},get fallbackWarn(){return f},set fallbackWarn(de){f=de,S.fallbackWarn=f},get fallbackRoot(){return p},set fallbackRoot(de){p=de},get fallbackFormat(){return m},set fallbackFormat(de){m=de,S.fallbackFormat=m},get warnHtmlMessage(){return b},set warnHtmlMessage(de){b=de,S.warnHtmlMessage=de},get escapeParameter(){return x},set escapeParameter(de){x=de,S.escapeParameter=de},t:X,getLocaleMessage:O,setLocaleMessage:U,mergeLocaleMessage:W,getPostTranslationHandler:Y,setPostTranslationHandler:L,getMissingHandler:N,setMissingHandler:F,[oC]:q};return Be.datetimeFormats=G,Be.numberFormats=V,Be.rt=z,Be.te=se,Be.tm=H,Be.d=K,Be.n=J,Be.getDateTimeFormat=ee,Be.setDateTimeFormat=ne,Be.mergeDateTimeFormat=ue,Be.getNumberFormat=xe,Be.setNumberFormat=ye,Be.mergeNumberFormat=Ne,Be[aC]=t,Be[Em]=Se,Be[_m]=be,Be[Mm]=fe,Be}function cD(n){const e=ze(n.locale)?n.locale:sc,t=ze(n.fallbackLocale)||Jt(n.fallbackLocale)||Yt(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:e,i=Kt(n.missing)?n.missing:void 0,s=kt(n.silentTranslationWarn)||Ya(n.silentTranslationWarn)?!n.silentTranslationWarn:!0,r=kt(n.silentFallbackWarn)||Ya(n.silentFallbackWarn)?!n.silentFallbackWarn:!0,o=kt(n.fallbackRoot)?n.fallbackRoot:!0,a=!!n.formatFallbackMessages,c=Yt(n.modifiers)?n.modifiers:{},l=n.pluralizationRules,d=Kt(n.postTranslation)?n.postTranslation:void 0,u=ze(n.warnHtmlInMessage)?n.warnHtmlInMessage!=="off":!0,h=!!n.escapeParameterHtml,f=kt(n.sync)?n.sync:!0;let p=n.messages;if(Yt(n.sharedMessages)){const C=n.sharedMessages;p=Object.keys(C).reduce((S,E)=>{if(Fr(E))return S;const _=Ii(S,E)||(S[E]={});return gi(_,C[E]),S},p||{})}const{__i18n:m,__root:g,__injectWithOption:v}=n,y=n.datetimeFormats,b=n.numberFormats,x=n.flatJson;return{locale:e,fallbackLocale:t,messages:p,flatJson:x,datetimeFormats:y,numberFormats:b,missing:i,missingWarn:s,fallbackWarn:r,fallbackRoot:o,fallbackFormat:a,modifiers:c,pluralRules:l,postTranslation:d,warnHtmlMessage:u,escapeParameter:h,messageResolver:n.messageResolver,inheritLocale:f,__i18n:m,__root:g,__injectWithOption:v}}function Pm(n={}){const e=hu(cD(n)),{__extender:t}=n,i={id:e.id,get locale(){return e.locale.value},set locale(s){e.locale.value=s},get fallbackLocale(){return e.fallbackLocale.value},set fallbackLocale(s){e.fallbackLocale.value=s},get messages(){return e.messages.value},get datetimeFormats(){return e.datetimeFormats.value},get numberFormats(){return e.numberFormats.value},get availableLocales(){return e.availableLocales},get missing(){return e.getMissingHandler()},set missing(s){e.setMissingHandler(s)},get silentTranslationWarn(){return kt(e.missingWarn)?!e.missingWarn:e.missingWarn},set silentTranslationWarn(s){e.missingWarn=kt(s)?!s:s},get silentFallbackWarn(){return kt(e.fallbackWarn)?!e.fallbackWarn:e.fallbackWarn},set silentFallbackWarn(s){e.fallbackWarn=kt(s)?!s:s},get modifiers(){return e.modifiers},get formatFallbackMessages(){return e.fallbackFormat},set formatFallbackMessages(s){e.fallbackFormat=s},get postTranslation(){return e.getPostTranslationHandler()},set postTranslation(s){e.setPostTranslationHandler(s)},get sync(){return e.inheritLocale},set sync(s){e.inheritLocale=s},get warnHtmlInMessage(){return e.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(s){e.warnHtmlMessage=s!=="off"},get escapeParameterHtml(){return e.escapeParameter},set escapeParameterHtml(s){e.escapeParameter=s},get pluralizationRules(){return e.pluralRules||{}},__composer:e,t(...s){return Reflect.apply(e.t,e,[...s])},rt(...s){return Reflect.apply(e.rt,e,[...s])},te(s,r){return e.te(s,r)},tm(s){return e.tm(s)},getLocaleMessage(s){return e.getLocaleMessage(s)},setLocaleMessage(s,r){e.setLocaleMessage(s,r)},mergeLocaleMessage(s,r){e.mergeLocaleMessage(s,r)},d(...s){return Reflect.apply(e.d,e,[...s])},getDateTimeFormat(s){return e.getDateTimeFormat(s)},setDateTimeFormat(s,r){e.setDateTimeFormat(s,r)},mergeDateTimeFormat(s,r){e.mergeDateTimeFormat(s,r)},n(...s){return Reflect.apply(e.n,e,[...s])},getNumberFormat(s){return e.getNumberFormat(s)},setNumberFormat(s,r){e.setNumberFormat(s,r)},mergeNumberFormat(s,r){e.mergeNumberFormat(s,r)}};return i.__extender=t,i}function dD(n,e,t){return{beforeCreate(){const i=oc();if(!i)throw hn(sn.UNEXPECTED_ERROR);const s=this.$options;if(s.i18n){const r=gi({},s.i18n);if(s.__i18n&&(r.__i18n=s.__i18n),r.__root=e,this===this.$root)this.$i18n=Fy(n,r);else{r.__injectWithOption=!0,r.__extender=t.__vueI18nExtend,this.$i18n=Pm(r);const o=this.$i18n;o.__extender&&(o.__disposer=o.__extender(this.$i18n))}}else if(s.__i18n)if(this===this.$root)this.$i18n=Fy(n,s);else{this.$i18n=Pm({__i18n:s.__i18n,__injectWithOption:!0,__extender:t.__vueI18nExtend,__root:e});const r=this.$i18n;r.__extender&&(r.__disposer=r.__extender(this.$i18n))}else this.$i18n=n;s.__i18nGlobal&&dC(e,s,s),this.$t=(...r)=>this.$i18n.t(...r),this.$rt=(...r)=>this.$i18n.rt(...r),this.$te=(r,o)=>this.$i18n.te(r,o),this.$d=(...r)=>this.$i18n.d(...r),this.$n=(...r)=>this.$i18n.n(...r),this.$tm=r=>this.$i18n.tm(r),t.__setInstance(i,this.$i18n)},mounted(){},unmounted(){const i=oc();if(!i)throw hn(sn.UNEXPECTED_ERROR);const s=this.$i18n;s&&(delete this.$t,delete this.$rt,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,s!=null&&s.__disposer&&(s.__disposer(),delete s.__disposer,delete s.__extender),t.__deleteInstance(i),delete this.$i18n)}}}function Fy(n,e){n.locale=e.locale||n.locale,n.fallbackLocale=e.fallbackLocale||n.fallbackLocale,n.missing=e.missing||n.missing,n.silentTranslationWarn=e.silentTranslationWarn||n.silentFallbackWarn,n.silentFallbackWarn=e.silentFallbackWarn||n.silentFallbackWarn,n.formatFallbackMessages=e.formatFallbackMessages||n.formatFallbackMessages,n.postTranslation=e.postTranslation||n.postTranslation,n.warnHtmlInMessage=e.warnHtmlInMessage||n.warnHtmlInMessage,n.escapeParameterHtml=e.escapeParameterHtml||n.escapeParameterHtml,n.sync=e.sync||n.sync,n.__composer[oC](e.pluralizationRules||n.pluralizationRules);const t=Yg(n.locale,{messages:e.messages,__i18n:e.__i18n});return Object.keys(t).forEach(i=>n.mergeLocaleMessage(i,t[i])),e.datetimeFormats&&Object.keys(e.datetimeFormats).forEach(i=>n.mergeDateTimeFormat(i,e.datetimeFormats[i])),e.numberFormats&&Object.keys(e.numberFormats).forEach(i=>n.mergeNumberFormat(i,e.numberFormats[i])),n}const zg={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:n=>n==="parent"||n==="global",default:"parent"},i18n:{type:Object}};function uD({slots:n},e){return e.length===1&&e[0]==="default"?(n.default?n.default():[]).reduce((i,s)=>[...i,...s.type===_e?s.children:[s]],[]):e.reduce((t,i)=>{const s=n[i];return s&&(t[i]=s()),t},$t())}function uC(){return _e}const hD=qt({name:"i18n-t",props:gi({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:n=>xi(n)||!isNaN(n)}},zg),setup(n,e){const{slots:t,attrs:i}=e,s=n.i18n||fn({useScope:n.scope,__useComponent:!0});return()=>{const r=()=>{const c=Object.keys(t).filter(u=>u[0]!=="_"),l=$t();n.locale&&(l.locale=n.locale),n.plural!==void 0&&(l.plural=ze(n.plural)?+n.plural:n.plural);const d=uD(e,c);return s[Em](n.keypath,d,l)},o=gi($t(),i),a=ze(n.tag)||Tt(n.tag)?n.tag:uC();return Tt(a)?ql(a,o,{default:r}):ql(a,o,r())}}}),Ly=hD;function fD(n){return Jt(n)&&!ze(n[0])}function hC(n,e,t,i){const{slots:s,attrs:r}=e;return()=>{const o=()=>{const l={part:!0};let d=$t();n.locale&&(l.locale=n.locale),ze(n.format)?l.key=n.format:Tt(n.format)&&(ze(n.format.key)&&(l.key=n.format.key),d=Object.keys(n.format).reduce((f,p)=>t.includes(p)?gi($t(),f,{[p]:n.format[p]}):f,$t()));const u=i(n.value,l,d);let h=[l.key];return Jt(u)?h=u.map((f,p)=>{const m=s[f.type],g=m?m({[f.type]:f.value,index:p,parts:u}):[f.value];return fD(g)&&(g[0].key=`${f.type}-${p}`),g}):ze(u)&&(h=[u]),h},a=gi($t(),r),c=ze(n.tag)||Tt(n.tag)?n.tag:uC();return Tt(c)?ql(c,a,{default:o}):ql(c,a,o())}}const pD=qt({name:"i18n-n",props:gi({value:{type:Number,required:!0},format:{type:[String,Object]}},zg),setup(n,e){const t=n.i18n||fn({useScope:n.scope,__useComponent:!0});return hC(n,e,nC,(...i)=>t[Mm](...i))}}),Dy=pD;function mD(n,e){const t=n;if(n.mode==="composition")return t.__getInstance(e)||n.global;{const i=t.__getInstance(e);return i!=null?i.__composer:n.global.__composer}}function gD(n){const e=o=>{const{instance:a,value:c}=o;if(!a||!a.$)throw hn(sn.UNEXPECTED_ERROR);const l=mD(n,a.$),d=Oy(c);return[Reflect.apply(l.t,l,[...Ny(d)]),l]};return{created:(o,a)=>{const[c,l]=e(a);cu&&(o.__i18nWatcher=ei(l.locale,()=>{a.instance&&a.instance.$forceUpdate()})),o.__composer=l,o.textContent=c},unmounted:o=>{cu&&o.__i18nWatcher&&(o.__i18nWatcher(),o.__i18nWatcher=void 0,delete o.__i18nWatcher),o.__composer&&(o.__composer=void 0,delete o.__composer)},beforeUpdate:(o,{value:a})=>{if(o.__composer){const c=o.__composer,l=Oy(a);o.textContent=Reflect.apply(c.t,c,[...Ny(l)])}},getSSRProps:o=>{const[a]=e(o);return{textContent:a}}}}function Oy(n){if(ze(n))return{path:n};if(Yt(n)){if(!("path"in n))throw hn(sn.REQUIRED_VALUE,"path");return n}else throw hn(sn.INVALID_VALUE)}function Ny(n){const{path:e,locale:t,args:i,choice:s,plural:r}=n,o={},a=i||{};return ze(t)&&(o.locale=t),xi(s)&&(o.plural=s),xi(r)&&(o.plural=r),[e,a,o]}function vD(n,e,...t){const i=Yt(t[0])?t[0]:{};(kt(i.globalInstall)?i.globalInstall:!0)&&([Ly.name,"I18nT"].forEach(r=>n.component(r,Ly)),[Dy.name,"I18nN"].forEach(r=>n.component(r,Dy)),[Uy.name,"I18nD"].forEach(r=>n.component(r,Uy))),n.directive("t",gD(e))}const bD=io("global-vue-i18n");function yD(n={}){const e=__VUE_I18N_LEGACY_API__&&kt(n.legacy)?n.legacy:__VUE_I18N_LEGACY_API__,t=kt(n.globalInjection)?n.globalInjection:!0,i=new Map,[s,r]=xD(n,e),o=io("");function a(u){return i.get(u)||null}function c(u,h){i.set(u,h)}function l(u){i.delete(u)}const d={get mode(){return __VUE_I18N_LEGACY_API__&&e?"legacy":"composition"},async install(u,...h){if(u.__VUE_I18N_SYMBOL__=o,u.provide(u.__VUE_I18N_SYMBOL__,d),Yt(h[0])){const m=h[0];d.__composerExtend=m.__composerExtend,d.__vueI18nExtend=m.__vueI18nExtend}let f=null;!e&&t&&(f=_D(u,d.global)),__VUE_I18N_FULL_INSTALL__&&vD(u,d,...h),__VUE_I18N_LEGACY_API__&&e&&u.mixin(dD(r,r.__composer,d));const p=u.unmount;u.unmount=()=>{f&&f(),d.dispose(),p()}},get global(){return r},dispose(){s.stop()},__instances:i,__getInstance:a,__setInstance:c,__deleteInstance:l};return d}function fn(n={}){const e=oc();if(e==null)throw hn(sn.MUST_BE_CALL_SETUP_TOP);if(!e.isCE&&e.appContext.app!=null&&!e.appContext.app.__VUE_I18N_SYMBOL__)throw hn(sn.NOT_INSTALLED);const t=wD(e),i=CD(t),s=cC(e),r=SD(n,s);if(r==="global")return dC(i,n,s),i;if(r==="parent"){let c=$y(t,e,n.__useComponent);return c==null&&(c=i),c}if(r==="isolated"){if(t.mode!=="composition")throw hn(sn.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const c=t,l=gi({},n),d=$y(t,e);l.__root=d||i;const u=hu(l);return c.__composerExtend&&(u[wa]=c.__composerExtend(u)),lg()&&Ux(()=>{const f=u[wa];f&&(f(),delete u[wa])}),u}const o=t;let a=o.__getInstance(e);if(a==null){const c=gi({},n);"__i18n"in s&&(c.__i18n=s.__i18n),i&&(c.__root=i),a=hu(c),o.__composerExtend&&(a[wa]=o.__composerExtend(a)),TD(o,e,a),o.__setInstance(e,a)}return a}function xD(n,e){const t=ag(),i=__VUE_I18N_LEGACY_API__&&e?t.run(()=>Pm(n)):t.run(()=>hu(n));if(i==null)throw hn(sn.UNEXPECTED_ERROR);return[t,i]}function wD(n){const e=Ro(n.isCE?bD:n.appContext.app.__VUE_I18N_SYMBOL__);if(!e)throw hn(n.isCE?sn.NOT_INSTALLED_WITH_PROVIDE:sn.UNEXPECTED_ERROR);return e}function SD(n,e){return Og(n)?"__i18n"in e?"local":"global":n.useScope?n.useScope:"local"}function CD(n){return n.mode==="composition"?n.global:n.global.__composer}function $y(n,e,t=!1){let i=null;const s=e.root;let r=AD(e,t);for(;r!=null;){const o=n;if(n.mode==="composition")i=o.__getInstance(r);else if(__VUE_I18N_LEGACY_API__){const a=o.__getInstance(r);a!=null&&(i=a.__composer,t&&i&&!i[aC]&&(i=null))}if(i!=null||s===r)break;r=r.parent}return i}function AD(n,e=!1){return n==null?null:e&&n.vnode.ctx||n.parent}function TD(n,e,t){Sn(()=>{},e),Za(()=>{const i=t;n.__deleteInstance(e);const s=i[wa];s&&(s(),delete i[wa])},e)}const ED=["locale","fallbackLocale","availableLocales"],By=["t","rt","d","n","tm","te"];function _D(n,e){const t=Object.create(null);return ED.forEach(s=>{const r=Object.getOwnPropertyDescriptor(e,s);if(!r)throw hn(sn.UNEXPECTED_ERROR);const o=Qt(r.value)?{get(){return r.value.value},set(a){r.value.value=a}}:{get(){return r.get&&r.get()}};Object.defineProperty(t,s,o)}),n.config.globalProperties.$i18n=t,By.forEach(s=>{const r=Object.getOwnPropertyDescriptor(e,s);if(!r||!r.value)throw hn(sn.UNEXPECTED_ERROR);Object.defineProperty(n.config.globalProperties,`$${s}`,r)}),()=>{delete n.config.globalProperties.$i18n,By.forEach(s=>{delete n.config.globalProperties[`$${s}`]})}}const MD=qt({name:"i18n-d",props:gi({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},zg),setup(n,e){const t=n.i18n||fn({useScope:n.scope,__useComponent:!0});return hC(n,e,iC,(...i)=>t[_m](...i))}}),Uy=MD;oD();BL(yL);UL(OL);VL(EL);if(__INTLIFY_PROD_DEVTOOLS__){const n=zr();n.__INTLIFY__=!0,xL(n.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}const PD={resizeTimeline:"Ziehen Sie, um die Höhe der Zeitleiste anzupassen",systems:"System",particlesBones:"Partikel (Knochen)",rootBone:"Wurzelknochen",hudTip:"Radzoom · Klicken Sie mit der linken Maustaste, um die Leinwand zu ziehen",title:"Spine-Partikeleditor - Yeomai"},ID={close:"Schließen",reset:"Zurücksetzen",add:"Hinzufügen",remove:"Entfernen",delete:"Löschen",clear:"Leeren",cancel:"Abbrechen",confirm:"Bestätigen",none:"Keine",enabled:"Aktiviert",disabled:"Deaktiviert",fixed:"Fest",random:"Zufällig",curve:"Kurve",followExport:"Exporteinstellung folgen",linear:"Linear",bezier:"Bézier",above:"Über",below:"Unter",left:"Links",right:"Rechts",seconds:"s",frames:"Frames"},kD={settings:"Einstellungen",undo:"Rückgängig (Ctrl+Z)",pan:"Canvas verschieben (Q)",translate:"Verschieben (W)",rotate:"Drehen (E)",scale:"Skalieren (R)",zoomIn:"Vergrößern",zoomOut:"Verkleinern",fitView:"An Canvas anpassen",toggleGrid:"Raster umschalten",resetView:"Ansicht zurücksetzen",background:"Hintergrund",backgroundSettings:"Hintergrundeinstellungen",changeBackground:"Bild ersetzen",uploadBackground:"Bild hochladen",clearBackground:"Hintergrund löschen",noBackground:"Kein Bild",backgroundX:"X-Versatz des Hintergrundbilds",backgroundY:"Y-Versatz des Hintergrundbilds",backgroundOpacity:"Transparenz des Hintergrundbilds",opacity:"Deckkraft",help:"Hilfe",openHelp:"Hilfe öffnen"},RD={title:"Systemeinstellungen",layout:"Schnittstellenlayout",parameterPanelPosition:"Position des Parameterfelds",panelOnRight:"Das Parameterfeld wird rechts angezeigt",history:"Operationsgeschichte",maxUndo:"Maximale Anzahl Schritte zurück",canvasGuides:"Hilfsdisplay aus Leinwand",emitter:"Startpunkt",bones:"Knochenverbindung",bonePointSize:"Größe der Knochenpunktzeichnung",boneAxisSize:"Zeichnungsgröße der Achse",skinMesh:"enthäutetes Netz",enableTicks:"Häkchen aktivieren",tickFontSize:"Textgröße skalieren",tickWidth:"Dicke der Teilstriche",axisColor:"Achsenfarbe",showAxisLabels:"Skalenwert anzeigen",cacheNote:"Die gesamten Systemeinstellungen werden automatisch im aktuellen Browser gespeichert"},FD={title:"Konfiguration",save:"Konfiguration speichern",saveTitle:"Alle Editorkonfigurationen speichern (Ctrl+S)",load:"Konfiguration laden",loadTitle:"Lokale Editorkonfiguration laden",presets:"Voreinstellungsliste",selectPreset:"Voreinstellung wählen",noPresets:"Keine Voreinstellungen",saved:"Die Konfiguration wurde lokal gespeichert",loading:"Konfiguration wird geladen…",loaded:"Geladen: {name}",presetLoading:"Voreinstellungen werden geladen…",presetLoaded:"Voreinstellung geladen: {name}",presetNamingError:"{message}, bitte überprüfen Sie die Standarddateibenennung",presetTransferTitle:"Voreinstellung laden",presetDownloading:"{file} wird heruntergeladen…",presetParsing:"Standardkonfiguration wird analysiert...",presetRestoring:"Standardressourcen werden analysiert und wiederhergestellt...",presetComplete:"Das Laden der Voreinstellungen ist abgeschlossen",presetListError:"Voreinstellungsliste kann nicht gelesen werden",presetReadError:"Voreinstellung konnte nicht gelesen werden: {file}"},LD={particleSweep:"1.Partikel-Sweep",barBlocks:"2.Balkenblöcke",forceTrail:"3.Kraftfeldschweif",lightningSequence:"4.Blitzsequenz",texturePivot:"5.Textur-Pivot",subEmitter:"6.Sub-Emitter"},DD={bezierHint:"Ziehen Sie den quadratischen Griff, um den Bogen anzupassen. · Doppelklicken Sie auf eine leere Stelle, um einen neuen zu erstellen. · Doppelklicken Sie auf einen Knoten, um ihn zu löschen",linearHint:"Doppelklicken Sie auf eine leere Stelle, um eine neue zu erstellen. Doppelklicken Sie auf einen Knoten, um ihn zu löschen. Ziehen Sie einen Knoten, um ihn anzupassen.",resetTitle:"Standardkurve wiederherstellen"},OD={addTitle:"Doppelklicken Sie auf das Menüband, um eine Farbmarkierung hinzuzufügen",color:"Farbcode",colorValue:"Farbwert der Farbskala",position:"Position der Farbmarkierung",addMiddle:"Fügen Sie Farbe in der Mitte hinzu",delete:"Aktuelles Farbfeld löschen",hint:"Doppelklicken Sie auf das Farbband, um ein neues hinzuzufügen. · Ziehen Sie die Farbmarkierung, um ihre Position anzupassen. · Doppelklicken Sie auf die Farbmarkierung, um sie zu löschen"},ND={angleOffset:"Winkelversatz",value:"Zahlenwert",lower:"untere Grenze",upper:"Obergrenze",rangeLower:"Untere Bereichsgrenze",rangeUpper:"Oberer Bereich",curveInput:"Kurveneingabe →",direction:"Startrichtung"},$D={title:"Drehpunkt der Karte",zoomOut:"herauszoomen",zoomIn:"vergrößern",expand:"Zoomen Sie auf Vollbildbetrieb",interaction:"Klicken/Ziehen mit der linken Maustaste, um den Drehpunkt festzulegen · Rechtsklick zum Ziehen der Leinwand · Scrollrad zum Zoomen",previewAlt:"Pivot-Punkt-Vorschau",noImage:"Kein Bild ausgewählt",resetCenter:"Neupositionierung in der Mitte (50 %, 50 %)",coordinates:"Achspunktkoordinaten (%)",rotationTest:"Achsenrotationstest",static:"Trotzdem",spin:"Drehung",swing:"Swing",rotationAlt:"Rotationstest",topLeft:"oben links",top:"Ganz oben",topRight:"oben rechts",left:"Rechts links",center:"Mitte",right:"Rechts",bottomLeft:"unten links",bottom:"Direkt unten",bottomRight:"unten rechts"},BD={chooseSequence:"Wählen Sie Sequenzrahmenbilder aus",chooseLocal:"Lokales Bild auswählen",subfolder:"Unterordner",name:"Name",restore:"Stellen Sie {name} wieder her",deleteResource:"Bildressourcen löschen",imageMode:"Bildmodus",fixed:"Einzelbild",sequence:"Sequenz",playbackMode:"Wiedergabemodus",onceHide:"Einmal, am Ende ausblenden",onceHold:"Einmal, letztes Bild halten",loopForward:"Vorwärts-Schleife",loopReverse:"Rückwärts-Schleife",playbackFps:"Bildrate der Wiedergabe",chooseSequenceMulti:"Sequenzbilder auswählen (Mehrfachauswahl)",weight:"Gewicht %",unlockWeight:"Proportionssperre entsperren",lockWeight:"Sperren Sie das aktuelle Verhältnis",pivot:"Textur-Pivot",collapsePivot:"Einstellung des Drehpunkts einklappen",expandPivot:"Erweitern Sie die Drehpunktanpassung",pivotModal:"Texturrotationsachsenpunkt, große Bildverfeinerung",pivotModalDesc:"Klicken oder ziehen Sie irgendwo auf der Karte unten, um das Rotations-/Schwingzentrum der Partikel genau festzulegen.",pivotZoomHint:"Unterstützt 100 % ~ 400 % Vergrößerung, präzises Zielen auf die Spitze oder Wurzel:",confirmPivot:"Drehpunkt ermitteln und speichern",noSequence:"Kein Sequenzbild ausgewählt",firstFrame:"Rahmen 1",firstImage:"erstes Bild",lastImage:"letztes Bild",pivotOn:"Geöffnet: X {x}% | Y {y}%",pivotOff:"Nicht aktiviert, die Standardeinstellung liegt etwa in der Bildmitte (50 %, 50 %).",pivotCustom:"Der Drehpunkt wurde angepasst: X {x}% | Y {y}%",frameCountOne:"1 Rahmen · {name}",frameCountMany:"Rahmen {count} · {first} → {last}",sequenceSelected:"Der Frame {count} wurde ausgewählt und in der Reihenfolge {first}-{last} abgespielt"},UD={play:"Spielen(D)",pause:"Pause (D)",toStart:"Gehe zurück zum ersten Frame (S)",previous:"vorherigen Frame",next:"nächsten Frame",toEnd:"Zum letzten Bild wechseln",continuousLoop:"Dauerhaft in Schleife abspielen",abLoop:"Unabhängige A/B-Bereichsschleife",abLoopShort:"AB-Schleife",abRange:"AB Zyklusintervall",playbackStart:"Benutzerdefiniertes Startbild für die Wiedergabe",playbackEnd:"Benutzerdefiniertes Wiedergabe-Endbild",startFrame:"Startbild abspielen",endFrame:"Endbild abspielen",frame:"rahmen",emission:"Emission",particleLife:"Aktive Partikel",spineAnimation:"Spine-Animation",ownerAnimation:"Zugehörige Animation",setOwnerAnimation:"Legen Sie die Animation fest, zu der das aktuelle Partikelsystem gehört",chooseOwnerAnimation:"Wählen Sie die Animation aus",animationName:"Animationsname",renameAnimation:"Aktuelle Animation umbenennen",rename:"Umbenennen",newAnimation:"+ Neu",keepOneAnimation:"Mindestens eine Animation muss beibehalten werden",spinePreview:"Spine Vorschauanimation",noSpineAnimation:"Keine Spine-Animation verfügbar",none:"keiner",systemName:"System {index}",dragLoopDuration:"Dauer des Drag-Loop-Segments",dragEmissionDuration:"Drag-Dauer",dragSpineStart:"Ziehen Sie, um die Startzeit der Animation anzupassen",noAnimationData:"Derzeit sind keine Animationsdaten zum Anzeigen vorhanden.",animationNameEmpty:"Der Animationsname darf nicht leer sein",animationNameDuplicate:"Animationsnamen können nicht wiederholt werden",animationRenameFailed:"Der Animationsname kann nicht geändert werden",zoomIn:"vergrößern",zoomOut:"herauszoomen",zoomFit:"Mäßig",frameStatus:"Frame {current} / {total}"},VD={title:"Emissionsmodus",reset:"Sendemodusparameter zurücksetzen",stream:"Kontinuierlich",burst:"Burst",normalStream:"Normaler Stream",loopStream:"Loop-Stream",rate:"Emissionsrate",duration:"Emissionsdauer",loopDuration:"Startdauer (f)",generateStart:"Generieren Sie eine Startschleifenanimation",generateEnd:"Generieren Sie eine Endloop-Animation",customDuration:"Dauer angeben",auto:"Automatisch {frames}f",startLoopDuration:"Dauer des Schleifensegments starten",endLoopDuration:"Dauer des Endschleifensegments",loopWarning:"Der Schleifenpersistenzmodus unterstützt keine Knochenverfolgung und Pfadverfolgung; Die Partikelverfolgungseinstellungen werden beim Betreten oder Verlassen auf die Standardwerte zurückgesetzt.",burstCount:"Menge pro Burst",delay:"Verzögerung",shapeTitle:"Emitterform",shapeReset:"Setzen Sie die Parameter der Emitterform zurück",shape:"Form",point:"Punkt",circle:"Kreis",rect:"Rechteck",cone:"Kegel",path:"Pfad",innerDiameter:"Innendurchmesser",outerDiameter:"Außendurchmesser",innerRadius:"Innenradius",outerRadius:"Außenradius",coneDirection:"Kegelausrichtung",coneAngle:"Konischer Öffnungswinkel",innerWidth:"Innenweite",innerHeight:"Hoch drinnen",outerWidth:"Außenbreite",outerHeight:"Extra hoch",selectPath:"Pfad auswählen",noPath:"Kein Pfad (Punktemission)",birthDistribution:"Geburtenverteilung",evenDistribution:"Gleichmäßige feste Verteilung",randomDistribution:"Zufallsverteilung",emissionAngle:"Startwinkel",radial:"Radial (Mitte nach außen)",pathNormal:"senkrecht zum Pfad",pathTangent:"entlang der Wegrichtung",fixedAngle:"fester Winkel",baseAngle:"Basiswinkel",randomRange:"zufälliger Bereich",showShape:"Form zeigen"},XD={title:"Partikeleigenschaften",reset:"Partikelattributparameter zurücksetzen",initialParams:"Initialwerte",initialLife:"anfänglicher Lebenszyklus",randomSample:"Zufallsauswahl →",initialSpeed:"Anfangsgeschwindigkeit",initialScale:"anfängliche Skalierung",uniform:"vereinheitlicht",separateXY:"XY-Trennung",scaleX:"Zoom X",scaleY:"Zoom Y",initialRotation:"anfängliche Rotation",lifecycleTitle:"Änderung über die Lebensdauer",speedOverLife:"Lebenszyklusgeschwindigkeit",speedMultiplier:"Geschwindigkeitsmultiplikator",lifeTo:"Lebenszyklus →",scaleOverLife:"Skalierung während des Lebenszyklus",scaleMultiplier:"Zoomverhältnis",multiplierX:"Vergrößerung",multiplierY:"Vergrößerung Y",rotationOverLife:"Während des Lebenszyklus rotieren",rotationSpeed:"Rotationsgeschwindigkeit"},YD={title:"Aussehen und Ressourcen",reset:"Aussehen und Ressourcenparameter zurücksetzen",opacity:"Deckkraft",curveMode:"Kurvenmodus",transparent:"0 (transparent)",opaque:"1 (undurchsichtig)",renderLayer:"Renderebene (Spine-Slot)",top:"oberstes Niveau",spineSlot:"Spine-Steckplatz",selectSpine:"Bitte wählen Sie Spine aus",noSpine:"Nicht verfügbar Spine",noSlot:"Noch kein Slot ausgewählt",reselect:"Neu auswählen",selectSlot:"Steckplatz auswählen",searchSlots:"Nach Steckplatz- oder Zubehörnamen suchen…",searchSlotsAria:"Suchplätze",emptySlot:"Leerer Steckplatz",noMatchingSlots:"Kein passender Steckplatz",above:"oben auf diesem Slot-Bild",below:"unter diesem Slot-Bild",followAttachment:"Ein- und Ausblenden mit Slot-Zubehör",previewOnly:"Das Anpassen der Anzeigeebene wirkt sich nur auf die Editor-Vorschau aus und hat keinen Einfluss auf die exportierten Daten.",imageResources:"Bildressourcen",addImage:"Bildressourcen hinzufügen",scale:"Zoom",color:"Farbe",fixedColor:"feste Farbe",randomColor:"zufällige Farbe",lifetime:"Lebenszyklus",normal:"Normal",add:"Addieren",multiply:"Multiplizieren",screen:"Bildschirm",fixedColorValue:"fester Farbwert",randomColorHint:"Jedes Teilchen wählt bei seiner Geburt zufällig eine Farbe aus dem Band aus und bleibt während seines Lebenszyklus unverändert.",independentAlpha:"Unabhängige Deckkraft",off:"Aus"},zD={slotLabelAbove:"{spine} / {slot} · Bild oben",slotLabelBelow:"{spine} / {slot} · Unter dem Bild",resolvedAbove:"Über dem {slot}-Bild und unter seinem Slot gerendert",resolvedBetween:"Gerendert zwischen {previous} und {slot}",warningNoSpine:"Es ist kein Spine geladen und die Partikel werden vorübergehend oben angezeigt.",warningNoSelection:"Spine wurde noch nicht ausgewählt und die Partikel werden vorübergehend oben angezeigt.",warningMissingSpine:"Das Ziel Spine existiert nicht und die Partikel werden vorübergehend oben angezeigt.",warningNotReady:"Das Ziel Spine ist nicht bereit und die Partikel werden vorübergehend oben angezeigt.",warningMissingSlot:"Der Zielplatz existiert nicht (die Ressource wurde möglicherweise ersetzt) ​​und die Partikel werden vorübergehend oben angezeigt.",warningFirstSlot:"Dies ist der erste Slot und kann nicht darunter angezeigt werden, die Partikel werden vorübergehend oben angezeigt."},jD={completed:"Vollendet",failed:"Der Vorgang ist fehlgeschlagen"},HD={title:"Szenenobjekte",addParticle:"Partikelsystem hinzufügen",addParticleShort:"+Teilchen",addCollider:"Collider hinzufügen",addColliderShort:"+Kollision",addPath:"Pfad hinzufügen",addPathShort:"+ Pfad",addSpine:"Fügen Sie Spine hinzu",copyTitle:"Kopieren Sie das aktuell ausgewählte Szenenobjekt",showParticle:"Partikelsystem anzeigen",hideParticle:"Partikelsystem ausblenden",showCollider:"Collider anzeigen",hideCollider:"Collider ausblenden",showPath:"Pfad anzeigen",hidePath:"Pfad ausblenden",showSpine:"Anzeige Spine",hideSpine:"Spine ausblenden",particle:"Partikel",subEmitter:"Sub-Emitter",collision:"Kollision",path:"Pfad",deleteParticle:"Partikelsystem löschen",deleteCollider:"Collider löschen",deletePath:"Pfad löschen",deleteSpine:"Löschen Sie Spine",empty:"Es sind noch keine Objekte in der Szene vorhanden",name:"Name",positionX:"X-Position",positionY:"Y-Position",offsetX:"X-Versatz",offsetY:"Y-Versatz",rotation:"Drehung",scaleX:"X-Skalierung",scaleY:"Y-Skalierung",seed:"Zufallsseed",seedTitle:"Steuern Sie alle Zufallsattribute, die Ressourcenauswahl und die Zufallsstichprobe von Modifikatoren im Partikelsystem",randomizeSeed:"Generieren Sie einen neuen globalen Zufallsstartwert",seedHint:"Steuern Sie die anfänglichen Zufallsparameter, die Ressourcenauswahl und die Modifikator-Zufallsstichprobe. Der gleiche Samen kann den gleichen Effekt hervorrufen",colliderTitle:"Collider-Eigenschaften",colliderName:"Collider-Name",type:"Typ",circle:"runden",ellipse:"Oval",rect:"Rechteck",polygon:"Polygon",custom:"Anpassen",enabled:"aktivieren",xPosition:"X-Position",yPosition:"Y-Position",scaleXShort:"X-Skalierung",scaleYShort:"Y-Skalierung",radius:"Radius",radiusX:"X-Radius",radiusY:"Y-Radius",width:"Breite",height:"hoch",sides:"Anzahl der Seiten",collisionResponse:"Crash-Reaktion",physics:"Physik (Sprung/Reibung)",pause:"Pause (Stopp)",destroy:"Verschwinden (sofort zerstören)",elasticity:"Elastizität (0-1)",friction:"Reibung (0-1)",followPath:"Folgen Sie dem Weg",targetPath:"Zielpfad",notSelected:"(nicht ausgewählt)",moveDuration:"Bewegungsdauer (Sekunden)",followDirection:"Richtung entlang des Pfades",moveProgressCurve:"Bewegliche Fortschrittskurve",moveProgressHelp:"Horizontale Achse: Echtzeit/Bewegungsdauer; vertikale Achse: Pfadfortschritt (0=Startpunkt → 1=Endpunkt)",pathTitle:"Pfadattribut",pathName:"Pfadname",closedPath:"geschlossener Weg",pathColor:"Pfadfarbe",pathHelp:"Bedienungsanleitung:",pathHelpItems:"Doppelklicken Sie auf den leeren Bereich/die leere Kurve: Erstellen Sie einen neuen Ankerpunkt, doppelklicken Sie auf den Ankerpunkt: löschen Sie den Knoten, doppelklicken Sie ein zweites Mal und ziehen Sie: erstellen Sie einen neuen und ziehen Sie den Griff heraus, ziehen Sie den Ankerpunkt, um die Position zu verschieben, ziehen Sie den Griff, um die Kurve anzupassen, Umschalt + Ziehgriff: vollständig symmetrisch auf beiden Seiten, Alt + Ziehgriff: unabhängige Steuerung einer Seite, Ctrl + Klick/Rahmenauswahl: ausgewählte Knoten hinzufügen, Alt+Klick/Rahmenauswahl: ausgewählte Knoten subtrahieren Knoten, Alt+Klick in den leeren Bereich: Löschen Sie alle Auswahlen, wählen Sie mehrere Knoten aus und ziehen Sie sie als Ganzes",applyPresetShape:"Wenden Sie eine voreingestellte Form an",choosePreset:"Wählen Sie eine Voreinstellung...",square:"Quadrat",star:"Sternform",applyPreset:"Voreinstellung anwenden",clearAnchors:"klarer Ankerpunkt",panelHint:"Verwenden Sie die Schaltfläche in der oberen rechten Ecke, um ein Szenenobjekt zu erstellen"},GD={title:"Modifikatoren",reset:"Modifikatorparameter zurücksetzen",damping:"Dämpfung",enableNoise:"Bewegungsrauschen aktivieren",strength:"Stärke",noiseRange:"Schwankungsbreite",noiseSpeed:"Zeitliche Durchflussrate",noiseHint:"Intensitätssteuerung beeinflusst den Anteil · Schwankungsbereich steuert die maximale Abweichung · Zeitfluss steuert die Änderungsgeschwindigkeit",enableGravity:"Schwerkraft aktivieren",gravityStrength:"Schwerkraftstärke",strengthMin:"Stärke min",strengthMax:"Stärke max",direction:"Richtung",gravityOverLife:"Schwerkraft während des Lebenszyklus",windOverLife:"Lebenszyklus Wind",axisStrength:"Vertikale Achse: Intensität 0~1",directionHint:"0° nach rechts · -90° nach unten · Negative Intensität kehrt die Richtung um",enableWind:"Wind aktivieren",windStrength:"Windstärke",enableForceField:"Kraftfeld aktivieren",centerX:"Mitte X",centerY:"Zentrum Y",forceStrength:"Kraftfeldstärke",forceRadius:"Kraftfeldradius",falloffMode:"Decay-Modus",constant:"Konstant (die Geschwindigkeit ändert sich innerhalb des Bereichs nicht)",linearFalloff:"Linearer Abfall (Kante ist 0)",inverseFalloff:"Umgekehrt proportional zur Entfernung (am stärksten in der Mitte)",forceHint:"Positive Zahlen ziehen sich zur Mitte hin an, negative Zahlen stoßen sich nach außen ab und der Kraftfeldkreis kann innerhalb der Leinwand gezogen werden.",showShape:"Form zeigen",enableVortex:"Wirbel aktivieren",vortexHint:"Positive Zahlen gegen den Uhrzeigersinn · Negative Zahlen im Uhrzeigersinn",enableAttraction:"Anziehung aktivieren",attractionX:"Adsorptionspunkt X",attractionY:"Adsorptionspunkt Y",attractionRadius:"Adsorptionsradius",attractionDuration:"Adsorptionszeit",delay:"Verzögerungszeit",delayMode:"Verzögerungsmodus",globalTime:"einheitliche Zeit",particleLife:"Das Leben einzelner Teilchen",attractionPath:"Adsorptionsmethode",straight:"Gerade",attractionHint:"Nach einer Verzögerung beginnt die Adsorption an der aktuellen Position. Wenn es den roten Bereich erreicht, stirbt es ab. Der Adsorptionskreis kann innerhalb der Leinwand gezogen werden.",enableTrail:"Schweif aktivieren",trailImages:"Nachgestellte unabhängige Bilder",addTrailImage:"Fügen Sie nachgestellte Bildressourcen hinzu",trailRotation:"drehen",trailBones:"Anzahl der nachlaufenden Knochen",trailRatio:"Trailing-Verhältnis (%)",trailLength:"Nachlauflänge",randomRange:"zufälliger Bereich",lengthRatio:"Längenverhältnis (%)",lengthMin:"Mindestlänge (%)",lengthMax:"Maximale Länge (%)",trailWidth:"Nachlaufbreite",widthRatio:"Breitenverhältnis (%)",widthMin:"Mindestbreite (%)",widthMax:"Maximale Breite (%)",widthScale:"Breitenskalierung",followParticle:"Teilchen folgen",lifeLengthCurve:"Lebenszykluslängenkurve",shapeCurve:"Formkurve (Kopf → Schwanzbreite)",colorMode:"Farbmodus",blendMode:"Mischmodus",fixedColor:"feste Farbe",alphaMode:"Transparenzmodus",opacity:"Transparenz",gridRows:"Anzahl der Rasterzeilen",gridCols:"Anzahl der Rasterspalten",trailHint:"Jedes Partikel generiert im Verhältnis zu den Ressourcen eine Reihe von Geschwister-Trailing-Bones. Die zufällige Länge und Breite werden bei der Geburt des Partikels bestimmt, und derselbe Samen kann stabil reproduziert werden",enableFollow:"Emitter-Verfolgung aktivieren",followMode:"Folgemodus",noFollow:"keiner",followPath:"Folge dem Weg",selectedBone:"ausgewählte Knochen",emitterAngleMode:"Senderwinkelmodus",fixedAngle:"fester Winkel",followMoveDirection:"Folgen Sie der Bewegungsrichtung",moveProgressCurve:"Bewegungsfortschrittskurve (0→1)",moveDuration:"Bewegungsdauer (s)",followSpace:"Folgen Sie dem Raum",localSpace:"Lokaler Raum (GEN-Bewegung)",worldSpace:"Weltraum (Partikelerzeugungspunktbewegung)",moveDirection:"Bewegungsrichtung",forward:"Vorwärts (Startpunkt → Endpunkt)",reverse:"Umkehren (Endpunkt → Startpunkt)",followOffset:"Offset-Startpunkt (0-1)",followSpaceHint:"Der lokale Raum bewegt den gesamten Emitter; Der Weltraum verschiebt nur den Entstehungspunkt neuer Partikel und die geborenen Partikel bleiben an der Weltposition.",followTarget:"Folgen Sie dem Ziel:",noValidBone:"Es wurde noch kein gültiger Bone gebunden. Bitte wählen Sie zuerst den Bone im Spine-Hierarchiebaum aus.",rebind:"neu binden",bind:"Bindung",selectedBoneLabel:"Aktuell ausgewählter Knochen:",boneLocalSpace:"Lokaler Raum (bewegt sich mit Knochen)",boneWorldSpace:"Weltraum (Partikel behalten ihre Position, nachdem sie erzeugt wurden)",offsetX:"Verschiebungsoffset X",offsetY:"Verschiebungsoffset Y",rotationOffset:"Rotationsversatz",scaleOffsetX:"Skalierungsversatz X",scaleOffsetY:"Skalenversatz Y",boneFollowHint:"Der Emitter folgt nur der Position des ausgewählten Spine-Bones und erbt nicht die Rotation oder Skalierung von Spine; Die Partikeltransformation verwendet die eigenen Parameter und den oberen Offset des Partikelsystems.",enableCollision:"Kollision aktivieren",collisionObjects:"Beteiligte Kollisionsobjekte",colliderDisabled:"{name} (Collider deaktiviert)",clearCollider:"Kollisionsobjekt löschen {name}",addCollider:"Szenenkollisionsobjekte hinzufügen",noAvailableColliders:"Es müssen keine Kollisionsobjekte hinzugefügt werden",noCollidersSelected:"Es ist kein Kollisionsobjekt ausgewählt und die aktuellen Partikel kollidieren nicht.",available:"Verfügbar",disabled:"Deaktiviert",collisionHint:"Nur hinzugefügte und aktivierte Szenenkollisionsobjekte nehmen an der Kollision des aktuellen Partikelsystems teil.",enableSubEmitter:"Sub-Emitter aktivieren",triggerTiming:"Wählen Sie die Triggerzeit",birth:"geboren",death:"sterben",collision:"Kollision",chooseTarget:"Zielpartikelsystem auswählen",noTarget:"Keine (Partikelsystem)",deleteSubEmitter:"Löschen Sie diesen Sub-Emitter",probability:"Emissionswahrscheinlichkeit",collisionLimit:"Kollisionsgrenze",inherit:"erben",colorInheritMode:"Farbvererbungsmethode",add:"Hinzufügen",replace:"Abdeckung",addSubEmitter:"+ Neuer Sub-Emitter hinzugefügt",inheritNone:"Keine (Standard)",inheritAll:"Alle Eigenschaften",inheritColor:"Farbe",inheritScale:"Größe",inheritRotation:"drehen",inheritLife:"Lebenszyklus"},WD={title:"Spine-Eigenschaften",name:"Spine-Name",xPosition:"X-Position",yPosition:"Y-Position",rotation:"Drehung",scaleX:"X-Skalierung",scaleY:"Y-Skalierung",startTime:"Startzeit",resources:"Spine-Ressourcen",chooseFolder:"Ordner auswählen und laden",folderHint:"Lesen Sie JSON / SKEL, Atlas und alle Texturen in einem Ordner gleichzeitig; Ressourcen können unten noch einzeln ausgetauscht werden.",choose:"wählen",chooseMultiple:"Auswählen (Mehrfachauswahl)",loading:"Laden…",load:"↧ Laden",clear:"Klar",supportNote:"Unterstützt Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Laden bei Bedarf, wenn die entsprechende Version ausgeführt wird · Lokal offline",currentResource:"Aktuelle Ressource {version}",animations:"Spine-Animationen",noAnimations:"Keine Animation verfügbar",timelineAnimation:"Spielen Sie die Animation auf der Timeline ab",no:"keiner",hierarchy:"Hierarchie",clearBoneTitle:"Klicken Sie, um die Knochenauswahl zu löschen",noBoneTitle:"Derzeit sind keine Knochen ausgewählt",clearBone:"Ausgewählte Knochen löschen: {name}",currentBone:"Aktuelles Skelett:",clearSlotTitle:"Klicken Sie hier, um die Slot-Auswahl zu löschen",noSlotTitle:"Derzeit ist kein Steckplatz ausgewählt",clearSlot:"Ausgewählten Steckplatz löschen: {name}",currentSlot:"Aktueller Slot:",notSelected:"Nicht ausgewählt",expandAll:"Alles erweitern",collapseAll:"Alles einklappen",bones:"Skeleton",slots:"Slot",notLoaded:"Nicht geladen Spine",searchBones:"Suche nach Knochen",searchBonesPlaceholder:"Knochennamen suchen…",clearSearch:"Suche löschen",clearBoneSearch:"Klare Knochensuche",noMatchingBones:"Kein passender Knochen gefunden",expandChildren:"Untergeordnete Knochen erweitern",collapseChildren:"Kinderknochen kollabieren lassen",notLoadedSlots:"Spine-Steckplatz nicht geladen",searchSlots:"Suchplätze",searchSlotsPlaceholder:"Nach Steckplatz- oder Zubehörnamen suchen…",clearSlotSearch:"Slot-Suche löschen",noMatchingSlots:"Kein passender Steckplatz gefunden",slotTitle:"{name} (Skelett: {bone}, Anhang: {attachment})",empty:"null",textureSummary:"{count} Zhang: {names}",textureImages:"Texturbilder",missingFolderAssets:"Der ausgewählte Ordner fehlt: {missing}",chooseAssets:"Bitte wählen Sie nacheinander die Daten Spine, Atlas und alle Texturbilder aus"},qD={title:"Hilfe",subtitle:"Schneller Einstieg vom Erstellen von Partikeln bis zum Speichern und Exportieren",close:"Anweisungen schließen",closeShort:"Schließen (Esc)",quickStart:"Schnellstart",stepCreate:"Erstellen Sie ein Objekt: Verwenden Sie +Particles / +Collision / +Path / +Spine im „Szenenobjekt“ auf der linken Seite, um ein Szenenobjekt hinzuzufügen.",stepEdit:"Partikel bearbeiten: Wählen Sie das Partikelsystem aus und passen Sie „Emissionsmodus → Emitterform → Partikeleigenschaften → Aussehen und Ressourcen → Modifikator“ an.",stepPreview:"Überprüfen Sie den Effekt: Die untere Timeline kann Bild für Bild abgespielt, angehalten oder verschoben werden. Es wird automatisch neu berechnet, nachdem die Parameter geändert wurden.",stepExport:"Speichern und exportieren: Benutzen Sie „Konfiguration speichern“, um das Projekt beizubehalten; „Export Spine Json / images package / .spine package“, um das fertige Produkt auszugeben.",quickNote:"„Zurücksetzen“ auf der rechten Seite des Titels jeder Modulgruppe kann die Standardparameter der Gruppe wiederherstellen; Die Systemeinstellungen werden automatisch im aktuellen Browser gespeichert.",commonOps:"Häufige Aktionen",eye:"kleine Augen",eyeDesc:"Objekte einzeln ein-/ausblenden; Verborgene Partikelsysteme werden nicht exportiert.",copyDesc:"Kopiert das aktuell ausgewählte Objekt vollständig, um den Vergleich verschiedener Parameter zu erleichtern.",backgroundDesc:"Laden Sie das Referenzbild hoch und passen Sie Position und Transparenz nur für die Leinwandvorschau an.",settingsDesc:"Das Layout der Verwaltungsoberfläche, die Zusatzanzeige, der Maßstab usw. werden automatisch im Browser gespeichert.",undoDesc:"Ctrl+Z fährt einen Schritt zurück; Die maximale Schrittanzahl kann in den Systemeinstellungen angepasst werden.",spineBoneDesc:"Suchen und wählen Sie einen Knochen im Hierarchiebaum aus, der vom Partikelemitter zum Folgen verwendet werden kann.",shortcuts:"Tastenkürzel",undoShortcut:"Machen Sie den vorherigen Schritt rückgängig",saveShortcut:"Konfiguration speichern",panShortcut:"Leinwand ziehen",translateShortcut:"Verdrängungswerkzeug",rotateShortcut:"Rotationswerkzeug",scaleShortcut:"Zoom-Tool",playShortcut:"abspielen/pausieren",startShortcut:"Gehen Sie zurück zum ersten Bild",shortcutNote:"Q/W/E/R müssen zuerst auf die Leinwand klicken; Wenn sich der Cursor im Eingabefeld befindet, wird die Einzeltastenkombination nicht ausgelöst.",modules:"Modulhandbuch",configTitle:"Konfigurationsmanagement",saveConfigDesc:"Speichern Sie alle aktuellen Szenenobjekte und Parameter als Projekt-JSON-Dateien (Ctrl+S wird auch unterstützt).",loadConfigDesc:"Wählen Sie die lokale Konfigurationsdatei aus, um das gesamte Projekt wiederherzustellen.",presetDesc:"Wählen Sie im Dropdown-Menü eine Standard-Schnellanwendung aus. Klicken Sie auf das Dropdown-Menü, um die Liste zu aktualisieren.",configScope:"Umfang",configScopeDesc:"Die Konfiguration enthält Objekte und Parameter; Schnittstellen- und Systemeinstellungen werden separat im Browser gespeichert.",sceneTitle:"Szenenobjekt",particleDesc:"Kernobjekt. Position, Offset, Drehung, Skalierung und Zufallsstartwert können eingestellt werden; Der gleiche Samen kann den gleichen Effekt hervorrufen.",colliderDesc:"Kreis/Ellipse/Rechteck/Polygon/benutzerdefiniert, unterstützt physisches Abprallen, Anhalten, Zerstören und Bewegung entlang des Pfades.",pathDesc:"Bezier-Pfad mit Unterstützung für Ankerpunkte, Steuerpunkte, Abschluss, Farbe und voreingestellte Formen.",spineDesc:"Laden Sie Spine-Daten, Atlas und Texturen, durchsuchen Sie Bones und Slots und folgen Sie den Emittern.",sceneCommonDesc:"Objekte können unabhängig voneinander angezeigt und kopiert werden; Verborgene Partikelsysteme werden nicht exportiert.",emissionDesc:"Kontinuierliches Feuer, Feuerstoß, Verzögerung und dreistufige Start-/Schleifen-/End-Schleifendauer.",burstDesc:"Gibt eine bestimmte Anzahl von Partikeln auf einmal ab.",delayDesc:"Die Wartezeit bis zum Beginn der Emission, entsprechend dem linken Ende des Partikelbalkens.",loopNote:"Die Schleifenpersistenz unterstützt Knochen- und Pfadverfolgung nicht und die folgenden Einstellungen werden beim Umschalten wiederhergestellt.",shapeDesc:"Punkt-, Kreis-, Rechteck-, Kegel- oder Pfad-Spawn-Bereich. Kreise/Kegel unterstützen Innen- und Außenradien und Rechtecke unterstützen Innen- und Außenbreite und -höhe.",angleDesc:"Fest, zufällig, radial, Pfadnormale oder Pfadtangente.",initialDesc:"Lebenszyklus, Geschwindigkeit, Skalierung und Rotationsunterstützung sind fest, zufällig, Kurve und Rotation können der Startrichtung folgen.",overLifeDesc:"Geschwindigkeitsvergrößerung, Zoomvergrößerung und Rotationsgeschwindigkeit können über die Lebenszykluskurve gesteuert werden.",alphaDesc:"Transparenz unterstützt fest oder gekrümmt; Der Kurvenmodus kann abgeleitet, linear oder Bezier folgen.",imageDesc:"Einzelbild oder Sequenzrahmen, Multibild-Gewichtungs-Randomisierung, Drehpunkt, Farbe, Mischmodus und unabhängige Transparenz.",sequenceDesc:"Zu den Wiedergabemethoden gehören einmaliges Ausblenden, einmaliges Einfrieren, Vorwärtsschleife und Rückwärtsschleife.",noiseDesc:"Erzeugen Sie Jitter-Spuren und steuern Sie Intensität, Reichweite und Geschwindigkeit.",gravityDesc:"Schwerkraft-, Wind- und Lebenszyklusintensitätskurven.",forceDesc:"Globale Kraftfelder, Wirbel, Adsorption und Kollisionen.",trailDesc:"Unabhängige nachgestellte Assets, Knochenanzahl, Länge, Breite, Form, Farbe und Transparenzkurven.",followDesc:"Der Emitter kann einem Pfad oder Spine Bone folgen.",collisionDesc:"Wählen Sie Szenenkollisionsobjekte und Partikelkollisionsreaktionen aus.",exportDesc:"Legen Sie den Bildpfad, die Spine-Version, die Keyframe-Kurve, FPS, Integer-Frames, den Bone-Pool und die leere Animation fest.",exportButtonsDesc:"Sie können Spine JSON, Bilder ZIP exportieren oder .spine-Projekte über den Connector generieren.",connectorTitle:"Gebrauchsanweisung für den Spine-Stecker",connectorIntro:"Der Connector übermittelt JSON und von der Webseite generierte Bilder an Spine, das auf dem lokalen Computer installiert und aktiviert wurde, und konvertiert sie in bearbeitbare .spine-Projekte.",prerequisite:"Frontload",prerequisiteDesc:"Auf dem Computer ist Spine installiert und aktiviert, und der Desktop-Connector wurde gestartet.",download:"herunterladen",webSide:"Webseite",webSideDesc:"Nachdem „Connector verfügbar · Spine ist bereit“ angezeigt wird, klicken Sie auf „.spine-Paket exportieren“.",authorization:"erste Genehmigung",authorizationDesc:"Bei der ersten Verbindung muss die Quelle der Website überprüft und einmal zugelassen werden; Dieses Gerät speichert die Autorisierungs-Whitelist.",pathSetup:"Pfadeinstellungen",pathSetupDesc:"Der Connector erkennt Spine automatisch. Wenn es nicht gefunden werden kann, können Sie den Anwendungspfad manuell angeben.",downloadResult:"Ergebnisse herunterladen",downloadResultDesc:"Holen Sie sich das ZIP-Paket, das das .spine-Projekt und das Bildverzeichnis enthält.",version:"Version",versionDesc:"Der Stecker passt automatisch zu Spine 3.8~4.3 entsprechend der JSON-Version.",security:"Sicherheit",securityDesc:"Hören Sie nur auf die lokale Adresse, die Autorisierung wird im Connector gespeichert und die temporären Dateien werden nach der Konvertierung bereinigt.",differenceTitle:"Was ist der Unterschied zwischen Konfigurieren und Exportieren?",differenceDesc:"„Konfiguration speichern“ speichert alle editierbaren Objekte und Parameter; „Export Spine Json“ exportiert nur das angezeigte Partikelsystem und backt die Kollisions-, Folge-, Nachlauf- und Sub-Emitter-Ergebnisse in unabhängige Animationsdaten."},KD={confirmLoopFollowEnter:"Nach dem Aufrufen des kontinuierlichen Schleifenmodus werden die Partikelverfolgungseinstellungen ungültig und auf den Standardwert zurückgesetzt. Weitermachen?",confirmLoopFollowExit:"Nach dem Verlassen des Schleifenpersistenzmodus werden die Partikelverfolgungseinstellungen ungültig und auf ihre Standardwerte zurückgesetzt. Weitermachen?",invalidJson:"Die Konfigurationsdatei ist ungültig JSON",invalidConfigFormat:"Nicht das Editorprofil SpineParticle",unsupportedConfigVersion:"Konfigurationsversion noch nicht unterstützt: {version}",missingScene:"In der Konfigurationsdatei fehlen vollständige Szenendaten",missingEmbeddedSpine:"Die Konfiguration enthält keine wiederverwendbaren Spine-Originalressourcen",chooseJsonConfig:"Bitte wählen Sie eine .json-Konfigurationsdatei aus",settingsInvalidJson:"Der Systemeinstellungscache ist ungültig JSON",settingsFormat:"Nicht SpineParticle Editor-Systemeinstellungscache",settingsVersion:"Die Systemkonfigurationsversion wird noch nicht unterstützt: {version}",settingsMissing:"Im Systemeinstellungscache fehlen Einstellungen",noExportableImages:"Für das aktuell sichtbare Partikelsystem sind keine exportierbaren Bilder vorhanden",invalidZipPath:"ZIP Ungültiger Dateipfad",spineFileType:"Spine-Daten unterstützen nur .json oder .skel",atlasFileType:"Atlas-Dateien unterstützen nur .atlas",chooseTexture:"Bitte wählen Sie mindestens ein Texturbild aus",binaryParseFailed:"Binäres Parsen von Spine ist fehlgeschlagen (4.3: {v43}; alte Version: {v42})",invalidSpineJson:"Spine JSON Ungültiges Dateiformat",unsupportedSpineJsonVersion:"Spine JSON-Version wird nicht unterstützt, nur {versions} wird unterstützt",unsupportedSpineDataVersion:"Die Datenversion Spine wird nicht unterstützt, nur {versions} wird unterstützt",embeddedReadFailed:"Die eingebettete Spine-Datei kann nicht gelesen werden: {name}",missingImageWarning:"Bild „{file}“ fehlt oder hat unlesbare Abmessungen, Pfad bleibt erhalten.",missingTrailImageWarning:"Das nachgestellte Bild „{file}“ fehlt und der Pfad wurde beibehalten.",emptyCacheWarning:"Für „{name}“ ist kein Framebuffer verfügbar.",readExportImageFailed:"Exportiertes Bild kann nicht gelesen werden: {name}",connectorOffline:"Der lokale Spine-Connector wurde nicht erkannt. Bitte aktivieren Sie zuerst den Connector",connectorHttpError:"Der Spine-Connector gibt den Fehler HTTP {status} zurück",invalidTrailUV:"Ungültige UV-Daten für nachgestelltes Netz „{name}“",missingTrailVertices:"Im nachgestellten Netz „{name}“ fehlen Scheitelpunktdaten",trailIndexOutOfRange:"Dreiecksindex des nachgestellten Netzes „{name}“ außerhalb der Grenzen",invalidTrailHull:"Die Außenkonturnummer des nachlaufenden Netzes „{name}“ ist ungültig",trailHullIndexOutOfRange:"Der Außenkonturkantenindex des nachgestellten Netzes „{name}“ liegt außerhalb der Grenzen",invalidInfluenceCount:"Das nachgestellte Netz „{name}“ enthält eine ungültige Anzahl an Knochengewichten",missingBoneReference:"Das nachgestellte Netz „{name}“ verweist auf einen nicht vorhandenen Knochen",invalidWeight:"Das nachfolgende Raster „{name}“ enthält ungültige Gewichtsdaten",weightSum:"Die Scheitelpunktgewichte des nachgestellten Netzes „{name}“ ergeben in der Summe nicht 1",vertexCountMismatch:"Das nachgestellte Netz „{name}“ weist eine inkonsistente Anzahl von Scheitelpunkten und UVs auf",invalidInherit:"Der geerbte Wert „{inherit}“ für Bone „{name}“ entspricht nicht dem Spine {version} JSON-Format",trailBoneParent:"Der Trailing-Bone „{name}“ muss direkt unter dem Partikelsystem-Bone aufgehängt werden und darf keine Bone-Kette bilden.",trailSlotEmpty:"Der gewichtete Tailing-Slot „{name}“ kann keine leeren Anhänge verwenden. Die entsprechende Knochenskalierung sollte in der Nichterscheinungs- oder Todesphase auf 0 gesetzt werden.",spine38Version:"Spine 3.8 Die exportierte Versions-ID muss 3.8 sein",spine38Inherit:"Spine 3.8 Bone „{name}“ sollte „Transform“ verwenden und kann nicht „Inherit“ verwenden",spine38SlotColor:"Spine 3.8 Slot-Farbzeitleiste muss Farbe / TwoColor verwenden",spine38AttachmentName:"Spine 3.8 Der versteckte Rahmen der Anhang-Timeline muss explizit als Name geschrieben werden: null",spine38RotationAngle:"Spine 3.8 Sie müssen den Winkel verwenden, um die Zeitachse zu drehen",spine38Curve:"Spine 3.8 unterstützt das 4.x-Array-Kurvenformat nicht",unsupportedExportVersion:"Die exportierte Version wird nicht unterstützt, nur Spine {versions} wird unterstützt",exportVersionMismatch:"Inkonsistente Exportversion: auf Spine {expected} gesetzt, JSON markiert als Spine {actual}",exportMissingBones:"Beim Exportergebnis fehlen Knochen",missingAtlasTexture:"Die von Atlas referenzierte Textur ist nicht ausgewählt: {name}"},JD={label:"Sprache",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},ZD={app:PD,common:ID,toolbar:kD,settings:RD,config:FD,presets:LD,curve:DD,gradient:OD,attributeControl:ND,pivot:$D,image:BD,timeline:UD,emission:VD,attributes:XD,appearance:YD,renderLayer:zD,export:{title:"Exporteinstellungen",reset:"Exporteinstellungen zurücksetzen",imagesPath:"Bildpfad (Spine-Bildpfad)",spineVersion:"Spine-Version",keyframeCurve:"Keyframe-Interpolationskurve",linear:"Linear",smoothBezier:"Glatter Bezier (Glatter Bézier)",bezierHelp:"Smooth Bezier passt kontinuierliche Bewegungen innerhalb der Fehlertoleranz an; Geburt, Tod, Bindungswechsel und Mutationen verwenden weiterhin Schritt-Keyframes.",spine38Help:"Spine 3.8 unterstützt das Bezier-Array pro Kanal von 4.x nicht und wird beim Export in toleranzreduzierte stückweise lineare Keyframes konvertiert.",fps:"Export-FPS",omitFps:"Schreiben Sie keine fps",fpsHelp:"Behalten Sie die tatsächlichen Sekunden der Animation bei, wenn Sie FPS ändern. „Keine FPS schreiben“ lässt nur die FPS-Metadaten von Spine weg.",integerFrames:"Ganzzahlige Frame-Ausrichtung",bonePool:"Knochenobjektpool",excludeEmpty:"Schließen Sie inhaltslose Animationen aus",baking:"Die Animation wird neu berechnet und gebacken",exportJsonTitle:"Exportieren Sie Spine {version} JSON",preparing:"Der Export wird vorbereitet...",exportJson:"Spine JSON exportieren",exportImagesTitle:"Laden Sie das vom aktuellen Partikelsystem ZIP verwendete Bild separat herunter",organizingImages:"Bilder sortieren...",exportImages:"Bilder-ZIP exportieren",generatingProject:"Projekt wird erstellt...",exportSpine:".spine-Paket exportieren",authorize:"Autorisieren Sie die aktuelle Website",authorizeTitle:"Autorisieren Sie die aktuelle Website im nativen Connector",refreshConnector:"Überprüfen Sie den Stecker erneut",refresh:"auffrischen",recalculating:"Partikelanimation wird neu berechnet...",exported:"Exportiert Spine {version}: {systems} Partikelsysteme, {animations} Animationen, {bones} Wurzelknochen {warning}",resourceWarning:";{count} Ressourcentipps (fehlende Bilder werden weiterhin exportiert)",timeout:"Neuberechnung des Animations-Timeouts. Bitte bestätigen Sie, dass die Seite noch ausgeführt wird, und versuchen Sie es erneut",preparingProject:"Bilder sortieren und diese Maschine Spine nennen…",projectExported:"{fileName} wurde generiert: einschließlich .spine-Projekt und {images}-Bilder, Spine {version}",collectingImages:"Zusammenstellung von Bildern, die derzeit vom Partikelsystem verwendet werden ...",imagesExported:"{fileName} wurde generiert: {folder}/ enthält {images}-Bilder",connectorChecking:"Lokaler Spine-Anschluss wird erkannt...",connectorOffline:"Der lokale Spine-Connector läuft nicht",spineNotFound:"Der Connector läuft, aber Spine wurde nicht gefunden",notAuthorized:"Der Connector läuft, aber diese Website ist nicht autorisiert",connectorReady:"Connector verfügbar · Spine bereit",connectorBusy:"Spine-Projekt wird neu berechnet und erstellt",connectorGenerate:"Spine-{version}-Projekt mit lokalem Spine erstellen",unknown:"unbekannt",checking:"Prüfung",offline:"Offline",notFound:"Spine nicht gefunden",unauthorized:"Nicht autorisiert",projectTransferTitle:"Exportieren Sie das Spine-Paket",projectTransferDetail:"Partikelanimation wird neu berechnet...",projectTransferDownload:"Das Spine-Projektpaket wurde heruntergeladen",generatingJson:"Generieren von Spine JSON…",preparingProjectFiles:"Projektbilder zusammenstellen...",uploading:"Daten werden in den Spine-Connector hochgeladen...",spineProcessing:"Spine konvertiert das Projekt, bitte warten...",downloadingProject:"Das generierte Spine-Projektpaket wird heruntergeladen ...",handingToBrowser:"Übergabe an den Browser zum Download..."},transfer:jD,scene:HD,modifiers:GD,spine:WD,help:qD,errors:KD,language:JD},QD={title:"Spine Particle Editor - Yeomai",resizeTimeline:"Drag to resize the timeline",systems:"Systems",particlesBones:"Particles (bones)",rootBone:"Root bone",hudTip:"Scroll to zoom · Drag with left mouse to pan"},eO={label:"Language",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},tO={close:"Close",reset:"Reset",add:"Add",remove:"Remove",delete:"Delete",clear:"Clear",cancel:"Cancel",confirm:"Confirm",none:"None",enabled:"Enabled",disabled:"Disabled",fixed:"Fixed",random:"Random",curve:"Curve",followExport:"Follow export",linear:"Linear",bezier:"Bézier",above:"Above",below:"Below",left:"Left",right:"Right",seconds:"s",frames:"f"},iO={settings:"Settings",undo:"Undo (Ctrl+Z)",pan:"Pan canvas (Q)",translate:"Move (W)",rotate:"Rotate (E)",scale:"Scale (R)",zoomIn:"Zoom in",zoomOut:"Zoom out",fitView:"Fit canvas",toggleGrid:"Toggle grid",resetView:"Reset view",background:"Background",backgroundSettings:"Background settings",changeBackground:"Replace image",uploadBackground:"Upload image",clearBackground:"Clear background",noBackground:"No image",backgroundX:"Background X offset",backgroundY:"Background Y offset",backgroundOpacity:"Background opacity",opacity:"Opacity",help:"Help",openHelp:"Open help"},nO={title:"Settings",layout:"Layout",parameterPanelPosition:"Parameter panel position",panelOnRight:"Show parameter panel on the right",history:"History",maxUndo:"Maximum undo steps",canvasGuides:"Canvas guides",emitter:"Emitter point",bones:"Bone links",bonePointSize:"Bone point size",boneAxisSize:"Axis size",skinMesh:"Skin mesh",enableTicks:"Show ticks",tickFontSize:"Tick text size",tickWidth:"Tick line width",axisColor:"Axis color",showAxisLabels:"Show tick values",cacheNote:"Settings are saved automatically in this browser"},sO={title:"Configuration",save:"Save Config",saveTitle:"Save the complete editor configuration (Ctrl+S)",load:"Load Config",loadTitle:"Load an editor configuration file",presets:"Preset list",selectPreset:"Select preset",noPresets:"No presets",saved:"Configuration saved locally",loading:"Loading configuration…",loaded:"Loaded: {name}",presetLoading:"Loading preset…",presetLoaded:"Preset loaded: {name}",presetNamingError:"{message}. Check the preset file name.",presetTransferTitle:"Load Preset",presetDownloading:"Downloading {file}…",presetParsing:"Parsing preset configuration…",presetRestoring:"Parsing and restoring preset resources…",presetComplete:"Preset loaded",presetListError:"Unable to read preset list",presetReadError:"Unable to read preset: {file}"},rO={particleSweep:"1. Particle Sweep",barBlocks:"2. Bar Blocks",forceTrail:"3. Force Field Trail",lightningSequence:"4. Lightning Sequence",texturePivot:"5. Texture Pivot",subEmitter:"6. Sub-emitter"},oO={bezierHint:"Drag square handles · Double-click empty space to add · Double-click a node to delete",linearHint:"Double-click empty space to add · Double-click a node to delete · Drag nodes to adjust",resetTitle:"Restore default curve"},aO={addTitle:"Double-click the color bar to add a stop",color:"Stop color",colorValue:"Stop color value",position:"Stop position",addMiddle:"Add color in the middle",delete:"Delete selected stop",hint:"Double-click to add · Drag a stop to move · Double-click a stop to delete"},lO={angleOffset:"Angle offset",value:"Value",lower:"Min",upper:"Max",rangeLower:"Range min",rangeUpper:"Range max",curveInput:"Curve input →",direction:"Emission direction"},cO={title:"Texture Pivot",zoomOut:"Zoom out",zoomIn:"Zoom in",expand:"Open full-screen pivot editor",interaction:"Click/drag to set pivot · Right-drag to pan · Scroll to zoom",previewAlt:"Pivot preview",noImage:"No image selected",resetCenter:"Center (50%, 50%)",coordinates:"Pivot coordinates (%)",rotationTest:"Pivot rotation test",static:"Static",spin:"Spin",swing:"Swing",rotationAlt:"Rotation test",topLeft:"Top left",top:"Top",topRight:"Top right",left:"Left",center:"Center",right:"Right",bottomLeft:"Bottom left",bottom:"Bottom",bottomRight:"Bottom right"},dO={chooseSequence:"Choose sequence images",chooseLocal:"Choose local image",subfolder:"Subfolder",name:"Name",restore:"Restore {name}",deleteResource:"Delete image resource",imageMode:"Image mode",fixed:"Single image",sequence:"Sequence",playbackMode:"Playback",onceHide:"Once, hide at end",onceHold:"Once, hold last frame",loopForward:"Loop forward",loopReverse:"Loop reverse",playbackFps:"Playback FPS",chooseSequenceMulti:"Choose sequence images (multiple)",weight:"Weight %",unlockWeight:"Unlock weight",lockWeight:"Lock current weight",pivot:"Texture Pivot",collapsePivot:"Collapse pivot editor",expandPivot:"Expand pivot editor",pivotModal:"Full-screen texture pivot editor",pivotModalDesc:"Click or drag on the texture to set the exact particle rotation center",pivotZoomHint:"Zoom from 100% to 400% to align tips or roots precisely:",confirmPivot:"Apply and save pivot",noSequence:"No sequence selected",firstFrame:"Frame 1",firstImage:"first image",lastImage:"last image",pivotOn:"Enabled: X {x}% | Y {y}%",pivotOff:"Disabled, using image center (50%, 50%)",pivotCustom:"Custom pivot: X {x}% | Y {y}%",frameCountOne:"1 frame · {name}",frameCountMany:"{count} frames · {first} → {last}",sequenceSelected:"{count} frames selected, playing {first} to {last}"},uO={play:"Play (D)",pause:"Pause (D)",toStart:"Go to first frame (S)",previous:"Previous frame",next:"Next frame",toEnd:"Go to last frame",continuousLoop:"Continuous loop playback",abLoop:"Independent A/B range loop",abLoopShort:"AB Loop",abRange:"A/B loop range",playbackStart:"Custom playback start frame",playbackEnd:"Custom playback end frame",startFrame:"Playback start frame",endFrame:"Playback end frame",frame:"Frame",emission:"Emitting",particleLife:"Particles alive",spineAnimation:"Spine animation",ownerAnimation:"Owner animation",setOwnerAnimation:"Set the animation that owns this particle system",chooseOwnerAnimation:"Choose owner animation",animationName:"Animation name",renameAnimation:"Rename current animation",rename:"Rename",newAnimation:"+ New",keepOneAnimation:"At least one animation is required",spinePreview:"Spine preview animation",noSpineAnimation:"No Spine animation available",none:"None",systemName:"System {index}",dragLoopDuration:"Drag to change loop duration",dragEmissionDuration:"Drag to change emission duration",dragSpineStart:"Drag to change animation start time",noAnimationData:"No animation data",animationNameEmpty:"Animation name cannot be empty",animationNameDuplicate:"Animation name already exists",animationRenameFailed:"Unable to rename animation",zoomIn:"Zoom in",zoomOut:"Zoom out",zoomFit:"Fit",frameStatus:"Frame {current} / {total}"},hO={title:"Emission",reset:"Reset emission settings",stream:"Stream",burst:"Burst",normalStream:"Standard stream",loopStream:"Loop stream",rate:"Emission rate",duration:"Emission duration",loopDuration:"Emission duration (f)",generateStart:"Generate loop start animation",generateEnd:"Generate loop end animation",customDuration:"Custom duration",auto:"Auto {frames}f",startLoopDuration:"Loop start duration",endLoopDuration:"Loop end duration",loopWarning:"Bone and path following are unavailable in loop stream mode and will be reset when entering or leaving it.",burstCount:"Burst count",delay:"Delay",shapeTitle:"Emitter Shape",shapeReset:"Reset emitter shape settings",shape:"Shape",point:"Point",circle:"Circle",rect:"Rectangle",cone:"Cone",path:"Path",innerDiameter:"Inner diameter",outerDiameter:"Outer diameter",innerRadius:"Inner radius",outerRadius:"Outer radius",coneDirection:"Cone direction",coneAngle:"Cone opening angle",innerWidth:"Inner width",innerHeight:"Inner height",outerWidth:"Outer width",outerHeight:"Outer height",selectPath:"Spawn path",noPath:"No path (point emission)",birthDistribution:"Birth distribution",evenDistribution:"Even spacing",randomDistribution:"Random",emissionAngle:"Emission angle",radial:"Radial (outward)",pathNormal:"Path normal",pathTangent:"Path tangent",fixedAngle:"Fixed angle",baseAngle:"Base angle",randomRange:"Random range",showShape:"Show shape"},fO={title:"Particle Attributes",reset:"Reset particle attribute settings",initialParams:"Initial particle values",initialLife:"Initial life",randomSample:"Random sample →",initialSpeed:"Initial speed",initialScale:"Initial scale",uniform:"Uniform",separateXY:"Separate XY",scaleX:"Scale X",scaleY:"Scale Y",initialRotation:"Initial rotation",lifecycleTitle:"Values over particle life",speedOverLife:"Speed over life",speedMultiplier:"Speed multiplier",lifeTo:"Lifetime →",scaleOverLife:"Scale over life",scaleMultiplier:"Scale multiplier",multiplierX:"Multiplier X",multiplierY:"Multiplier Y",rotationOverLife:"Rotation over life",rotationSpeed:"Rotation speed"},pO={title:"Appearance & Resources",reset:"Reset appearance and resource settings",opacity:"Opacity",curveMode:"Curve mode",transparent:"0 (transparent)",opaque:"1 (opaque)",renderLayer:"Render layer (Spine slot)",top:"Topmost",spineSlot:"Spine slot",selectSpine:"Select Spine",noSpine:"No Spine available",noSlot:"No slot selected",reselect:"Reselect",selectSlot:"Select slot",searchSlots:"Search slots or attachments…",searchSlotsAria:"Search slots",emptySlot:"Empty slot",noMatchingSlots:"No matching slots",above:"Above slot image",below:"Below slot image",followAttachment:"Follow attachment visibility",previewOnly:"Render layer changes only affect the editor preview and are not exported.",imageResources:"Image Resources",addImage:"Add image resource",scale:"Scale",color:"Color",fixedColor:"Fixed color",randomColor:"Random color",lifetime:"Over lifetime",normal:"Normal",add:"Add",multiply:"Multiply",screen:"Screen",fixedColorValue:"Fixed color value",randomColorHint:"Each particle samples a color from the gradient at birth and keeps it for its lifetime",independentAlpha:"Independent opacity",off:"Off"},mO={slotLabelAbove:"{spine} / {slot} · above image",slotLabelBelow:"{spine} / {slot} · below image",resolvedAbove:"Render above {slot} and below the following slot",resolvedBetween:"Render between {previous} and {slot}",warningNoSpine:"No loaded Spine resource. Particles are temporarily rendered on top.",warningNoSelection:"No Spine selected. Particles are temporarily rendered on top.",warningMissingSpine:"The target Spine no longer exists. Particles are temporarily rendered on top.",warningNotReady:"The target Spine is not ready. Particles are temporarily rendered on top.",warningMissingSlot:"The target slot no longer exists. Particles are temporarily rendered on top.",warningFirstSlot:"This is the first slot, so particles cannot render below it and are temporarily shown on top."},gO={completed:"Completed",failed:"Operation failed"},vO={title:"Scene Objects",addParticle:"Add particle system",addParticleShort:"+ Particle",addCollider:"Add collider",addColliderShort:"+ Collider",addPath:"Add path",addPathShort:"+ Path",addSpine:"Add Spine",copyTitle:"Duplicate selected scene object",showParticle:"Show particle system",hideParticle:"Hide particle system",showCollider:"Show collider",hideCollider:"Hide collider",showPath:"Show path",hidePath:"Hide path",showSpine:"Show Spine",hideSpine:"Hide Spine",particle:"Particle",subEmitter:"Sub-emitter",collision:"Collision",path:"Path",deleteParticle:"Delete particle system",deleteCollider:"Delete collider",deletePath:"Delete path",deleteSpine:"Delete Spine",empty:"No scene objects",name:"Name",positionX:"Position X",positionY:"Position Y",offsetX:"Offset X",offsetY:"Offset Y",rotation:"Rotation",scaleX:"Scale X",scaleY:"Scale Y",seed:"Random seed",seedTitle:"Controls random attributes, resource selection, and modifier sampling",randomizeSeed:"Generate a new global random seed",seedHint:"Controls initial random values, resource selection, and modifier sampling. The same seed reproduces the same result.",colliderTitle:"Collider Properties",colliderName:"Collider name",type:"Type",circle:"Circle",ellipse:"Ellipse",rect:"Rectangle",polygon:"Polygon",custom:"Custom",enabled:"Enabled",xPosition:"X position",yPosition:"Y position",scaleXShort:"Scale X",scaleYShort:"Scale Y",radius:"Radius",radiusX:"X radius",radiusY:"Y radius",width:"Width",height:"Height",sides:"Sides",collisionResponse:"Collision response",physics:"Physics (bounce / friction)",pause:"Pause in place",destroy:"Destroy immediately",elasticity:"Elasticity (0-1)",friction:"Friction (0-1)",followPath:"Follow a path",targetPath:"Target path",notSelected:"(Not selected)",moveDuration:"Move duration (s)",followDirection:"Orient along path",moveProgressCurve:"Movement progress curve",moveProgressHelp:"X: elapsed / duration · Y: path progress (0 = start, 1 = end)",pathTitle:"Path Properties",pathName:"Path name",closedPath:"Closed path",pathColor:"Path color",pathHelp:"Controls:",pathHelpItems:["Double-click empty space or a curve to add an anchor","Double-click an anchor to delete it","Double-click, hold on the second click, and drag to create handles","Drag anchors to move them and handles to reshape the curve","Shift + handle drag: symmetric handles","Alt + handle drag: independent handles","Ctrl + click / box select: add nodes","Alt + click / box select: remove nodes","Alt + click empty space: clear selection","Move multiple selected anchors together"],applyPresetShape:"Apply preset shape",choosePreset:"Choose preset…",square:"Square",star:"Star",applyPreset:"Apply preset",clearAnchors:"Clear anchors",panelHint:"Use the buttons above to create a scene object"},bO={title:"Modifiers",reset:"Reset modifiers",damping:"Damping",enableNoise:"Enable movement noise",strength:"Strength",noiseRange:"Wander range",noiseSpeed:"Time speed",noiseHint:"Strength controls influence · Wander range controls maximum offset · Time speed controls variation rate",enableGravity:"Enable gravity",gravityStrength:"Gravity strength",strengthMin:"Strength min",strengthMax:"Strength max",direction:"Direction",gravityOverLife:"Gravity over lifetime",windOverLife:"Wind over lifetime",axisStrength:"Y: strength 0–1",directionHint:"0° right · -90° down · Negative strength reverses direction",enableWind:"Enable wind",windStrength:"Wind strength",enableForceField:"Enable force field",centerX:"Center X",centerY:"Center Y",forceStrength:"Force strength",forceRadius:"Force radius",falloffMode:"Falloff",constant:"Constant",linearFalloff:"Linear (zero at edge)",inverseFalloff:"Inverse distance (strongest at center)",forceHint:"Positive attracts · Negative repels · Drag the force circle on the canvas",showShape:"Show shape",enableVortex:"Enable vortex",vortexHint:"Positive counter-clockwise · Negative clockwise",enableAttraction:"Enable attraction",attractionX:"Attraction point X",attractionY:"Attraction point Y",attractionRadius:"Arrival radius",attractionDuration:"Attraction duration",delay:"Delay",delayMode:"Delay mode",globalTime:"Global time",particleLife:"Per particle life",attractionPath:"Attraction path",straight:"Straight",attractionHint:"Starts attraction after the delay · Dies on reaching the red radius · Drag the attraction circle on the canvas",enableTrail:"Enable trail",trailImages:"Trail Images",addTrailImage:"Add trail image resource",trailRotation:"Rotation",trailBones:"Trail bones",trailRatio:"Trail ratio (%)",trailLength:"Trail length",randomRange:"Random range",lengthRatio:"Length ratio (%)",lengthMin:"Length min (%)",lengthMax:"Length max (%)",trailWidth:"Trail width",widthRatio:"Width ratio (%)",widthMin:"Width min (%)",widthMax:"Width max (%)",widthScale:"Width scale",followParticle:"Follow particle",lifeLengthCurve:"Length over lifetime",shapeCurve:"Shape curve (head to tail width)",colorMode:"Color mode",blendMode:"Blend mode",fixedColor:"Fixed color",alphaMode:"Opacity mode",opacity:"Opacity",gridRows:"Grid rows",gridCols:"Grid columns",trailHint:"Each particle creates a sibling trail bone group according to the resource ratio. Random length and width are fixed at birth and reproducible with the same seed.",enableFollow:"Enable emitter following",followMode:"Follow mode",noFollow:"None",followPath:"Follow path",selectedBone:"Selected bone",emitterAngleMode:"Emitter angle mode",fixedAngle:"Fixed angle",followMoveDirection:"Follow movement direction",moveProgressCurve:"Movement progress curve (0→1)",moveDuration:"Move duration (s)",followSpace:"Follow space",localSpace:"Local space (move emitter)",worldSpace:"World space (move spawn point)",moveDirection:"Movement direction",forward:"Forward (start → end)",reverse:"Reverse (end → start)",followOffset:"Start offset (0-1)",followSpaceHint:"Local space moves the entire emitter. World space moves only the spawn point; existing particles stay in world position.",followTarget:"Follow target: ",noValidBone:"No valid bone is bound. Select a bone in the Spine hierarchy first.",rebind:"Rebind",bind:"Bind",selectedBoneLabel:"Selected bone: ",boneLocalSpace:"Local space (follow bone)",boneWorldSpace:"World space (keep particle position)",offsetX:"Position offset X",offsetY:"Position offset Y",rotationOffset:"Rotation offset",scaleOffsetX:"Scale offset X",scaleOffsetY:"Scale offset Y",boneFollowHint:"The emitter follows only the selected Spine bone position. Particle transforms use the particle system settings and offsets above.",enableCollision:"Enable collision",collisionObjects:"Collision objects",colliderDisabled:"{name} (disabled)",clearCollider:"Remove collider {name}",addCollider:"Add a scene collider",noAvailableColliders:"No colliders available",noCollidersSelected:"No collider selected. Current particles will not collide.",available:"Available",disabled:"Disabled",collisionHint:"Only enabled scene colliders added here participate in this particle system's collisions.",enableSubEmitter:"Enable sub-emitters",triggerTiming:"Choose trigger event",birth:"Birth",death:"Death",collision:"Collision",chooseTarget:"Choose target particle system",noTarget:"None (particle system)",deleteSubEmitter:"Delete this sub-emitter",probability:"Trigger probability",collisionLimit:"Collision trigger limit",inherit:"Inherit",colorInheritMode:"Color inheritance",add:"Add",replace:"Replace",addSubEmitter:"+ Add sub-emitter",inheritNone:"None (default)",inheritAll:"All attributes",inheritColor:"Color",inheritScale:"Size",inheritRotation:"Rotation",inheritLife:"Lifetime"},yO={title:"Spine Properties",name:"Spine name",xPosition:"X position",yPosition:"Y position",rotation:"Rotation",scaleX:"Scale X",scaleY:"Scale Y",startTime:"Start time",resources:"Spine Resources",chooseFolder:"Choose folder and load",folderHint:"Reads JSON / SKEL, Atlas, and all textures from the folder. Assets can still be replaced individually below.",choose:"Choose",chooseMultiple:"Choose multiple",loading:"Loading…",load:"↧ Load",clear:"Clear",supportNote:"Supports Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Runtime loaded on demand · Fully local",currentResource:"Current asset {version}",animations:"Spine Animations",noAnimations:"No animations available",timelineAnimation:"Timeline animation",no:"None",hierarchy:"Hierarchy",clearBoneTitle:"Click to clear bone selection",noBoneTitle:"No bone selected",clearBone:"Clear selected bone: {name}",currentBone:"Current bone: ",clearSlotTitle:"Click to clear slot selection",noSlotTitle:"No slot selected",clearSlot:"Clear selected slot: {name}",currentSlot:"Current slot: ",notSelected:"Not selected",expandAll:"Expand all",collapseAll:"Collapse all",bones:"Bones",slots:"Slots",notLoaded:"Spine not loaded",searchBones:"Search bones",searchBonesPlaceholder:"Search bone names…",clearSearch:"Clear search",clearBoneSearch:"Clear bone search",noMatchingBones:"No matching bones",expandChildren:"Expand child bones",collapseChildren:"Collapse child bones",notLoadedSlots:"Spine slots not loaded",searchSlots:"Search slots",searchSlotsPlaceholder:"Search slots or attachments…",clearSlotSearch:"Clear slot search",noMatchingSlots:"No matching slots",slotTitle:"{name} (bone: {bone}, attachment: {attachment})",empty:"Empty",textureSummary:"{count} textures: {names}",textureImages:"texture images",missingFolderAssets:"The selected folder is missing: {missing}",chooseAssets:"Select Spine data, Atlas, and all texture images"},xO={title:"Help",subtitle:"Quick start from creating particles to saving and exporting",close:"Close help",closeShort:"Close (Esc)",quickStart:"Quick Start",stepCreate:"Create objects: use + Particle / + Collider / + Path / + Spine in Scene Objects.",stepEdit:"Edit particles: select a particle system, then adjust Emission → Emitter Shape → Particle Attributes → Appearance & Resources → Modifiers.",stepPreview:"Preview: play, pause, step, or scrub on the timeline. Parameter changes are recalculated automatically.",stepExport:"Save and export: Save Config keeps the project; Export Spine JSON / images ZIP / .spine package produces the deliverable.",quickNote:"Reset beside each section restores that section's defaults. Settings are saved automatically in this browser.",commonOps:"Common Actions",eye:"Visibility",eyeDesc:"Show or hide an object independently. Hidden particle systems are not exported.",copyDesc:"Duplicate the selected object for parameter comparisons.",backgroundDesc:"Upload a reference image and adjust its position and opacity for canvas preview only.",settingsDesc:"Manage layout, canvas guides, tick display, and other editor settings.",undoDesc:"Ctrl+Z undoes one step. The maximum history size is configurable.",spineBoneDesc:"Search and select bones in the hierarchy for emitter following.",shortcuts:"Shortcuts",undoShortcut:"Undo",saveShortcut:"Save config",panShortcut:"Pan canvas",translateShortcut:"Move tool",rotateShortcut:"Rotate tool",scaleShortcut:"Scale tool",playShortcut:"Play / pause",startShortcut:"Go to first frame",shortcutNote:"Click the canvas before using Q / W / E / R. Single-key shortcuts are disabled while typing in inputs.",modules:"Module Guide",configTitle:"Configuration",saveConfigDesc:"Save all scene objects and parameters to a project JSON file. Ctrl+S is supported.",loadConfigDesc:"Load a local configuration and restore the complete project.",presetDesc:"Choose a preset from the dropdown. Open the dropdown to refresh the list.",configScope:"Scope",configScopeDesc:"The project includes objects and parameters. Interface settings are stored separately in the browser.",sceneTitle:"Scene Objects",particleDesc:"The core object. Set position, offset, rotation, scale, and random seed. The same seed reproduces the same result.",colliderDesc:"Circle, ellipse, rectangle, polygon, or custom shape with physics, pause, destroy, and path-following responses.",pathDesc:"Bézier path with anchors, handles, closing, color, and preset shapes.",spineDesc:"Load Spine data, Atlas, and textures; browse bones and slots, and use them for emitter following.",sceneCommonDesc:"Objects can be hidden and duplicated independently. Hidden particle systems are not exported.",emissionDesc:"Streaming, burst, delay, and three-part loop streaming with start, loop, and end sections.",burstDesc:"Emit a fixed number of particles once.",delayDesc:"Wait time before emission starts, shown at the left edge of the particle bar.",loopNote:"Loop streaming does not support bone or path following and resets those settings when enabled.",shapeDesc:"Point, circle, rectangle, cone, or path spawn areas. Circle/cone use inner and outer radii; rectangles use inner and outer dimensions.",angleDesc:"Fixed, random, radial, path normal, or path tangent.",initialDesc:"Life, speed, scale, and rotation support fixed, random, and curve modes. Rotation can follow emission direction.",overLifeDesc:"Speed, scale, and rotation can be controlled by lifetime curves.",alphaDesc:"Opacity can be fixed or curved. Curve mode can follow export, linear, or Bézier.",imageDesc:"Single images or sequence frames, weighted image selection, pivots, colors, blend modes, and independent opacity.",sequenceDesc:"Playback can hide after one pass, hold the last frame, loop forward, or loop in reverse.",noiseDesc:"Adds movement noise with strength, range, and speed controls.",gravityDesc:"Gravity, wind, and lifetime strength curves.",forceDesc:"Global force field, vortex, attraction, and collision.",trailDesc:"Independent trail resources with bones, length, width, shape, color, and opacity curves.",followDesc:"The emitter can follow a path or a Spine bone.",collisionDesc:"Choose scene colliders and particle collision response.",exportDesc:"Configure image path, Spine version, keyframe curves, FPS, frame alignment, bone pool, and empty animations.",exportButtonsDesc:"Export Spine JSON, an images ZIP, or a complete .spine project through the connector.",connectorTitle:"Spine Connector",connectorIntro:"The connector sends generated JSON and images to a locally installed and activated Spine editor and converts them into an editable .spine project.",prerequisite:"Requirements",prerequisiteDesc:"Install and activate Spine, then start the desktop connector.",download:"Download",webSide:"Website",webSideDesc:"When the connector reports ready, click Export .spine package.",authorization:"First authorization",authorizationDesc:"Approve the website origin once. The connector stores the local allowlist.",pathSetup:"Application path",pathSetupDesc:"The connector detects Spine automatically. Set the application path manually if detection fails.",downloadResult:"Output",downloadResultDesc:"The downloaded ZIP contains the .spine project and image folder.",version:"Version",versionDesc:"The connector matches Spine 3.8–4.3 from the JSON version.",security:"Security",securityDesc:"The connector listens only on the local machine and deletes temporary conversion files.",differenceTitle:"Config vs. export",differenceDesc:"Save Config preserves editable objects and parameters. Export Spine JSON includes only visible particle systems and bakes collisions, following, trails, and sub-emitters into editable animation data."},wO={confirmLoopFollowEnter:"Enabling loop stream disables particle following and resets its settings. Continue?",confirmLoopFollowExit:"Leaving loop stream disables particle following and resets its settings. Continue?",invalidJson:"The configuration file is not valid JSON",invalidConfigFormat:"This is not a SpineParticle editor configuration",unsupportedConfigVersion:"Unsupported configuration version: {version}",missingScene:"The configuration is missing complete scene data",missingEmbeddedSpine:"The configuration does not contain reusable Spine source assets",chooseJsonConfig:"Choose a .json configuration file",settingsInvalidJson:"The cached settings are not valid JSON",settingsFormat:"This is not a SpineParticle settings cache",settingsVersion:"Unsupported settings version: {version}",settingsMissing:"The settings cache is missing settings",noExportableImages:"The visible particle systems have no exportable images",invalidZipPath:"Invalid ZIP file path",spineFileType:"Spine data must be .json or .skel",atlasFileType:"Atlas files must use .atlas",chooseTexture:"Choose at least one texture image",binaryParseFailed:"Spine binary parsing failed (4.3: {v43}; legacy: {v42})",invalidSpineJson:"Invalid Spine JSON format",unsupportedSpineJsonVersion:"Unsupported Spine JSON version. Supported versions: {versions}",unsupportedSpineDataVersion:"Unsupported Spine data version. Supported versions: {versions}",embeddedReadFailed:"Unable to read embedded Spine file: {name}",missingImageWarning:"Image “{file}” is missing or has unreadable dimensions. Its path was kept.",missingTrailImageWarning:"Trail image “{file}” is missing. Its path was kept.",emptyCacheWarning:"“{name}” has no baked frame cache.",readExportImageFailed:"Unable to read export image: {name}",connectorOffline:"Local Spine connector was not detected. Start the connector first.",connectorHttpError:"Spine connector returned HTTP {status}",invalidTrailUV:"Trail mesh “{name}” has invalid UV data",missingTrailVertices:"Trail mesh “{name}” has no vertex data",trailIndexOutOfRange:"Trail mesh “{name}” has an out-of-range triangle index",invalidTrailHull:"Trail mesh “{name}” has an invalid hull size",trailHullIndexOutOfRange:"Trail mesh “{name}” has an out-of-range hull edge index",invalidInfluenceCount:"Trail mesh “{name}” has an invalid bone influence count",missingBoneReference:"Trail mesh “{name}” references a missing bone",invalidWeight:"Trail mesh “{name}” contains invalid weights",weightSum:"Trail mesh “{name}” vertex weights do not sum to 1",vertexCountMismatch:"Trail mesh “{name}” vertex count does not match its UV count",invalidInherit:"Bone “{name}” has inherit value “{inherit}” incompatible with Spine {version} JSON",trailBoneParent:"Trail bone “{name}” must be a direct child of the particle system bone, not a bone chain",trailSlotEmpty:"Weighted trail slot “{name}” cannot use an empty attachment. Hide the bones with zero scale instead.",spine38Version:"Spine 3.8 export must identify its version as 3.8",spine38Inherit:"Spine 3.8 bone “{name}” must use transform instead of inherit",spine38SlotColor:"Spine 3.8 slot color timelines must use color / twoColor",spine38AttachmentName:"Spine 3.8 hidden attachment frames must explicitly write name: null",spine38RotationAngle:"Spine 3.8 rotation timelines must use angle",spine38Curve:"Spine 3.8 does not support Spine 4.x array curves",unsupportedExportVersion:"Unsupported export version. Supported Spine versions: {versions}",exportVersionMismatch:"Export version mismatch: expected Spine {expected}, JSON reports Spine {actual}",exportMissingBones:"Export result contains no bones",missingAtlasTexture:"Atlas texture was not selected: {name}"},SO={app:QD,language:eO,common:tO,toolbar:iO,settings:nO,config:sO,presets:rO,curve:oO,gradient:aO,attributeControl:lO,pivot:cO,image:dO,timeline:uO,emission:hO,attributes:fO,appearance:pO,renderLayer:mO,export:{title:"Export Settings",reset:"Reset export settings",imagesPath:"Image path (Spine Images Path)",spineVersion:"Spine version",keyframeCurve:"Keyframe interpolation",linear:"Linear",smoothBezier:"Smooth Bézier",bezierHelp:"Smooth Bézier fits continuous motion within the error tolerance; birth, death, attachment changes, and jumps still use stepped keys.",spine38Help:"Spine 3.8 does not support per-channel array Bézier curves. Export converts them to tolerance-reduced piecewise linear keys.",fps:"Export FPS",omitFps:"Omit fps",fpsHelp:"Changing FPS preserves real animation duration. “Omit fps” only removes the Spine fps metadata.",integerFrames:"Integer frame alignment",bonePool:"Bone object pool",excludeEmpty:"Exclude empty animations",baking:"Recalculating and baking animation",exportJsonTitle:"Export Spine {version} JSON",preparing:"Preparing export…",exportJson:"Export Spine JSON",exportImagesTitle:"Download the images used by the current particle systems as a ZIP",organizingImages:"Collecting images…",exportImages:"Export images ZIP",generatingProject:"Generating project…",exportSpine:"Export .spine package",authorize:"Authorize this site",authorizeTitle:"Authorize this site in the local connector",refreshConnector:"Check connector again",refresh:"Refresh",recalculating:"Recalculating particle animation…",exported:"Exported Spine {version}: {systems} particle systems, {animations} animations, {bones} bones{warning}",resourceWarning:"; {count} resource warnings (export continued without missing images)",timeout:"Baking timed out. Ensure the page is still running and try again.",preparingProject:"Collecting images and calling local Spine…",projectExported:"Generated {fileName}: .spine project with {images} images, Spine {version}",collectingImages:"Collecting images used by the current particle systems…",imagesExported:"Generated {fileName}: {images} images in {folder}/",connectorChecking:"Checking the local Spine connector…",connectorOffline:"Local Spine connector is not running",spineNotFound:"Connector is running, but Spine was not found",notAuthorized:"Connector is running, but this site is not authorized",connectorReady:"Connector available · Spine ready",connectorBusy:"Recalculating and generating the Spine project",connectorGenerate:"Generate a Spine {version} project with the local Spine",unknown:"Unknown",checking:"Checking",offline:"Offline",notFound:"Spine not found",unauthorized:"Not authorized",projectTransferTitle:"Export Spine Package",projectTransferDetail:"Recalculating particle animation…",projectTransferDownload:"Spine project download started",generatingJson:"Generating Spine JSON…",preparingProjectFiles:"Preparing project images…",uploading:"Uploading data to the Spine connector…",spineProcessing:"Spine is converting the project…",downloadingProject:"Downloading the generated Spine project…",handingToBrowser:"Starting browser download…"},transfer:gO,scene:vO,modifiers:bO,spine:yO,help:xO,errors:wO},CO={resizeTimeline:"Arrastra para ajustar la altura de la línea de tiempo",systems:"sistema",particlesBones:"Partículas (huesos)",rootBone:"hueso de la raíz",hudTip:"Zoom de rueda · Clic izquierdo para arrastrar el lienzo",title:"Editor de partículas Spine - Yeomai"},AO={close:"Cerrar",reset:"Restablecer",add:"Añadir",remove:"Quitar",delete:"Eliminar",clear:"Limpiar",cancel:"Cancelar",confirm:"Confirmar",none:"Ninguno",enabled:"Activado",disabled:"Desactivado",fixed:"Fijo",random:"Aleatorio",curve:"Curva",followExport:"Seguir exportación",linear:"Lineal",bezier:"Bézier",above:"Arriba",below:"Abajo",left:"Izquierda",right:"Derecha",seconds:"s",frames:"fotogramas"},TO={settings:"Ajustes",undo:"Deshacer (Ctrl+Z)",pan:"Mover lienzo (Q)",translate:"Mover (W)",rotate:"Girar (E)",scale:"Escalar (R)",zoomIn:"Acercar",zoomOut:"Alejar",fitView:"Ajustar al lienzo",toggleGrid:"Mostrar/ocultar cuadrícula",resetView:"Restablecer vista",background:"Fondo",backgroundSettings:"Ajustes del fondo",changeBackground:"Cambiar imagen",uploadBackground:"Subir imagen",clearBackground:"Borrar fondo",noBackground:"Sin imagen",backgroundX:"Desplazamiento X de la imagen de fondo",backgroundY:"Desplazamiento Y de la imagen de fondo",backgroundOpacity:"Transparencia de la imagen de fondo",opacity:"Opacidad",help:"Ayuda",openHelp:"Abrir ayuda"},EO={title:"Configuración del sistema",layout:"Diseño de interfaz",parameterPanelPosition:"Ubicación del panel de parámetros",panelOnRight:"El panel de parámetros se muestra a la derecha.",history:"Historial de operaciones",maxUndo:"Número máximo de pasos hacia atrás",canvasGuides:"Display auxiliar de lona",emitter:"punto de lanzamiento",bones:"Conexión ósea",bonePointSize:"Tamaño del dibujo de la punta del hueso",boneAxisSize:"Tamaño del dibujo del eje",skinMesh:"malla desollada",enableTicks:"Habilitar ticks",tickFontSize:"Escalar el tamaño del texto",tickWidth:"espesor de la marca de verificación",axisColor:"color del eje",showAxisLabels:"Mostrar valor de escala",cacheNote:"Toda la configuración del sistema se guarda automáticamente en el navegador actual."},_O={title:"Gestión de configuración",save:"Guardar configuración",saveTitle:"Guarde todas las configuraciones del editor (Ctrl+S)",load:"Cargar configuración",loadTitle:"Cargar la configuración del editor local",presets:"Lista preestablecida",selectPreset:"Seleccionar preajuste",noPresets:"Sin preajustes",saved:"La configuración se ha guardado localmente.",loading:"Cargando configuración…",loaded:"Cargado: {name}",presetLoading:"Cargando ajustes preestablecidos…",presetLoaded:"Preestablecido cargado: {name}",presetNamingError:"{message}, verifique el nombre de archivo predeterminado",presetTransferTitle:"Cargar preajuste",presetDownloading:"Descargando {file}…",presetParsing:"Analizando la configuración predeterminada...",presetRestoring:"Analizando y restaurando recursos predeterminados...",presetComplete:"Carga preestablecida completada",presetListError:"No se puede leer la lista preestablecida",presetReadError:"No se puede leer el ajuste preestablecido: {file}"},MO={particleSweep:"1.Barrido de partículas",barBlocks:"2.Bloques rectangulares",forceTrail:"3.Estela de campo de fuerza",lightningSequence:"4.Secuencia de rayos",texturePivot:"5.Pivote de textura",subEmitter:"6.Subemisor"},PO={bezierHint:"Arrastre el controlador cuadrado para ajustar el arco · Haga doble clic en un espacio en blanco para crear uno nuevo · Haga doble clic en un nodo para eliminarlo",linearHint:"Haga doble clic en un espacio en blanco para crear uno nuevo. Haga doble clic en un nodo para eliminarlo. Arrastra un nodo para ajustarlo.",resetTitle:"Restaurar curva predeterminada"},IO={addTitle:"Haga doble clic en la cinta para agregar una marca de color.",color:"Código de colores",colorValue:"Valor de color de la escala de color",position:"Posición de la marca de color",addMiddle:"Añade color en el medio.",delete:"Eliminar parche de color actual",hint:"Haga doble clic en la banda de color para agregar una nueva · Arrastre la marca de color para ajustar su posición · Haga doble clic en la marca de color para eliminarla"},kO={angleOffset:"Desplazamiento de ángulo",value:"valor numérico",lower:"límite inferior",upper:"límite superior",rangeLower:"Límite inferior del rango",rangeUpper:"Rango superior",curveInput:"Entrada de curva →",direction:"Dirección de lanzamiento"},RO={title:"punto de pivote del mapa",zoomOut:"alejar",zoomIn:"agrandar",expand:"Operación de zoom a pantalla completa",interaction:"Haga clic izquierdo/arrastre para establecer el punto de pivote · Haga clic derecho para arrastrar el lienzo · Rueda de desplazamiento para hacer zoom",previewAlt:"Vista previa del punto de pivote",noImage:"Ninguna imagen seleccionada",resetCenter:"Reposicionar en el medio (50%, 50%)",coordinates:"Coordenadas del punto del eje (%)",rotationTest:"Prueba de rotación del eje",static:"aún",spin:"rotación",swing:"balancearse",rotationAlt:"prueba de rotación",topLeft:"arriba a la izquierda",top:"Justo arriba",topRight:"arriba a la derecha",left:"derecha izquierda",center:"medio",right:"Bien",bottomLeft:"abajo a la izquierda",bottom:"Directamente debajo·abajo",bottomRight:"abajo a la derecha"},FO={chooseSequence:"Seleccionar imágenes de fotogramas de secuencia",chooseLocal:"Seleccionar imagen local",subfolder:"subcarpeta",name:"nombre",restore:"Restaurar {name}",deleteResource:"Eliminar recursos de imagen",imageMode:"Modo de imagen",fixed:"Imagen única",sequence:"Secuencia",playbackMode:"modo de juego",onceHide:"Una vez, ocultar al final",onceHold:"Una vez, mantener último fotograma",loopForward:"Bucle hacia delante",loopReverse:"Bucle inverso",playbackFps:"Velocidad de fotogramas de reproducción",chooseSequenceMulti:"Seleccionar fotogramas de secuencia (múltiples selecciones)",weight:"Peso %",unlockWeight:"Desbloquear bloqueo de proporción",lockWeight:"Bloquear la proporción actual",pivot:"Pivote de textura",collapsePivot:"Ajuste del punto de pivote de colapso",expandPivot:"Ampliar el ajuste del punto de pivote",pivotModal:"Refinamiento de imagen grande del punto del eje de rotación de la textura",pivotModalDesc:"Haga clic o arrastre a cualquier parte del mapa a continuación para establecer con precisión el centro de rotación/oscilación de las partículas.",pivotZoomHint:"Admite un aumento del 100 % al 400 % y apunta con precisión a la punta o la raíz:",confirmPivot:"Determinar y guardar el punto de pivote",noSequence:"No se ha seleccionado ningún cuadro de secuencia",firstFrame:"Cuadro 1",firstImage:"primera foto",lastImage:"última foto",pivotOn:"Abierto: X {x}% | Y {y}%",pivotOff:"No activado, el valor predeterminado está alrededor del centro de la imagen (50%, 50%)",pivotCustom:"Se ha personalizado el punto de pivote: X {x}% | Y {y}%",frameCountOne:"1 cuadro · {name}",frameCountMany:"Marco {count} · {first} → {last}",sequenceSelected:"El fotograma {count} ha sido seleccionado y reproducido en el orden {first}-{last}."},LO={play:"Reproducir(D)",pause:"Pausa (D)",toStart:"Volver al primer cuadro (S)",previous:"fotograma anterior",next:"siguiente fotograma",toEnd:"Ir al último fotograma",continuousLoop:"Reproducción en bucle continuo",abLoop:"Bucle independiente del rango A/B",abLoopShort:"Bucle AB",abRange:"Intervalo de ciclo AB",playbackStart:"Cuadro de inicio de reproducción personalizado",playbackEnd:"Fotograma final de reproducción personalizado",startFrame:"Reproducir cuadro de inicio",endFrame:"Reproducir fotograma final",frame:"marco",emission:"Emisión",particleLife:"Partículas activas",spineAnimation:"Animación de Spine",ownerAnimation:"Animación asociada",setOwnerAnimation:"Establecer la animación a la que pertenece el sistema de partículas actual.",chooseOwnerAnimation:"Seleccione la animación",animationName:"Nombre de la animación",renameAnimation:"Cambiar el nombre de la animación actual",rename:"Rebautizar",newAnimation:"+ Nuevo",keepOneAnimation:"Es necesario conservar al menos una animación.",spinePreview:"Animación de vista previa Spine",noSpineAnimation:"No hay animación Spine disponible",none:"ninguno",systemName:"Sistema {index}",dragLoopDuration:"Duración del segmento del bucle de arrastre",dragEmissionDuration:"Duración del arrastre",dragSpineStart:"Arrastre para ajustar la hora de inicio de la animación",noAnimationData:"Actualmente no hay datos de animación para mostrar.",animationNameEmpty:"El nombre de la animación no puede estar vacío.",animationNameDuplicate:"Los nombres de las animaciones no se pueden repetir.",animationRenameFailed:"No se puede modificar el nombre de la animación",zoomIn:"agrandar",zoomOut:"alejar",zoomFit:"Moderado",frameStatus:"Fotograma {current} / {total}"},DO={title:"Modo de emisión",reset:"Restablecer los parámetros del modo de transmisión",stream:"Continuo",burst:"Ráfaga",normalStream:"Continuo normal",loopStream:"Bucle continuo",rate:"Tasa de emisión",duration:"Duración de emisión",loopDuration:"Duración del lanzamiento (f)",generateStart:"Generar animación de bucle de inicio",generateEnd:"Generar animación de bucle final",customDuration:"Especificar duración",auto:"Automático {frames}f",startLoopDuration:"Duración del segmento de bucle inicial",endLoopDuration:"Duración del segmento de bucle final",loopWarning:"El modo de persistencia de bucle no admite el seguimiento de huesos ni el seguimiento de rutas; Las siguientes configuraciones de partículas se restaurarán a los valores predeterminados al entrar o salir.",burstCount:"Cantidad por ráfaga",delay:"Retardo",shapeTitle:"Forma del emisor",shapeReset:"Restablecer los parámetros de forma del emisor",shape:"forma",point:"Punto",circle:"Círculo",rect:"Rectángulo",cone:"Cono",path:"Ruta",innerDiameter:"diámetro interior",outerDiameter:"diámetro exterior",innerRadius:"radio interior",outerRadius:"radio exterior",coneDirection:"Orientación cónica",coneAngle:"Ángulo de apertura cónica",innerWidth:"ancho interior",innerHeight:"Alto por dentro",outerWidth:"Ancho exterior",outerHeight:"extra alto",selectPath:"Seleccionar ruta",noPath:"Sin camino (emisión puntual)",birthDistribution:"distribución de nacimientos",evenDistribution:"Distribución fija equiespaciada",randomDistribution:"distribución aleatoria",emissionAngle:"ángulo de lanzamiento",radial:"Radial (centro hacia afuera)",pathNormal:"perpendicular al camino",pathTangent:"a lo largo de la dirección del camino",fixedAngle:"ángulo fijo",baseAngle:"ángulo base",randomRange:"rango aleatorio",showShape:"mostrar forma"},OO={title:"Atributos de partículas",reset:"Restablecer parámetros de atributos de partículas",initialParams:"Valores iniciales",initialLife:"ciclo de vida inicial",randomSample:"Muestreo aleatorio →",initialSpeed:"velocidad inicial",initialScale:"escalamiento inicial",uniform:"unificado",separateXY:"separación XY",scaleX:"Ampliar X",scaleY:"Zoom Y",initialRotation:"rotación inicial",lifecycleTitle:"Cambios durante la vida útil",speedOverLife:"velocidad del ciclo de vida",speedMultiplier:"multiplicador de velocidad",lifeTo:"ciclo de vida →",scaleOverLife:"Escalar durante el ciclo de vida",scaleMultiplier:"Relación de zoom",multiplierX:"Aumento",multiplierY:"Ampliación Y",rotationOverLife:"Girar durante el ciclo de vida.",rotationSpeed:"Velocidad de rotación"},NO={title:"Apariencia y recursos",reset:"Restablecer parámetros de apariencia y recursos",opacity:"Opacidad",curveMode:"Modo curva",transparent:"0 (transparente)",opaque:"1 (opaco)",renderLayer:"Capa de renderizado (slot de Spine)",top:"nivel superior",spineSlot:"Ranura Spine",selectSpine:"Por favor seleccione Spine",noSpine:"Ninguno disponible Spine",noSlot:"Aún no se ha seleccionado ningún espacio",reselect:"Reseleccionar",selectSlot:"Seleccionar ranura",searchSlots:"Busque el nombre de la ranura o del accesorio...",searchSlotsAria:"Buscar espacios",emptySlot:"Ranura vacía",noMatchingSlots:"No hay ranura coincidente",above:"encima de esta imagen de tragamonedas",below:"debajo de esta imagen de tragamonedas",followAttachment:"Mostrar y ocultar con accesorios de tragamonedas",previewOnly:"Ajustar el nivel de visualización solo afecta la vista previa del editor y no afecta los datos exportados.",imageResources:"Recursos de imagen",addImage:"Agregar recursos de imagen",scale:"Zoom",color:"color",fixedColor:"color fijo",randomColor:"color aleatorio",lifetime:"ciclo vital",normal:"Normal",add:"Suma",multiply:"Multiplicación",screen:"Pantalla",fixedColorValue:"valor de color fijo",randomColorHint:"Cada partícula elige aleatoriamente un color de la cinta cuando nace y permanece sin cambios durante su ciclo de vida.",independentAlpha:"Opacidad independiente",off:"Desactivado"},$O={slotLabelAbove:"{spine} / {slot} · Imagen de arriba",slotLabelBelow:"{spine} / {slot} · Debajo de la imagen",resolvedAbove:"Representado encima de la imagen {slot} y debajo de su ranura.",resolvedBetween:"Representado entre {previous} y {slot}",warningNoSpine:"No hay ningún Spine cargado y las partículas se muestran temporalmente en la parte superior.",warningNoSelection:"Spine aún no se ha seleccionado y las partículas se muestran temporalmente en la parte superior.",warningMissingSpine:"El objetivo Spine no existe y las partículas se muestran temporalmente en la parte superior.",warningNotReady:"El objetivo Spine no está listo y las partículas se muestran temporalmente en la parte superior.",warningMissingSlot:"La ranura de destino no existe (es posible que el recurso haya sido reemplazado) y las partículas se muestran temporalmente en la parte superior.",warningFirstSlot:"Esta es la primera ranura y no se puede mostrar debajo de ella; las partículas se muestran temporalmente en la parte superior."},BO={completed:"Terminado",failed:"Operación fallida"},UO={title:"Objetos de escena",addParticle:"Agregar sistema de partículas",addParticleShort:"+partícula",addCollider:"Agregar colisionador",addColliderShort:"+colisión",addPath:"agregar ruta",addPathShort:"+ camino",addSpine:"Añadir Spine",copyTitle:"Copiar el objeto de escena seleccionado actualmente",showParticle:"Mostrar sistema de partículas",hideParticle:"Ocultar sistema de partículas",showCollider:"mostrar colisionadores",hideCollider:"Ocultar colisionador",showPath:"mostrar ruta",hidePath:"Ocultar ruta",showSpine:"Pantalla Spine",hideSpine:"Ocultar Spine",particle:"Partículas",subEmitter:"Subemisor",collision:"Colisión",path:"Ruta",deleteParticle:"Eliminar sistema de partículas",deleteCollider:"Eliminar colisionadores",deletePath:"eliminar ruta",deleteSpine:"Eliminar Spine",empty:"Aún no hay objetos en la escena.",name:"nombre",positionX:"Posición X",positionY:"Posición Y",offsetX:"Desplazamiento X",offsetY:"Desplazamiento Y",rotation:"Rotación",scaleX:"Escala X",scaleY:"Escala Y",seed:"Semilla aleatoria",seedTitle:"Controle todos los atributos aleatorios, la selección de recursos y el muestreo aleatorio de modificadores en el sistema de partículas.",randomizeSeed:"Generar una nueva semilla aleatoria global",seedHint:"Controlar los parámetros aleatorios iniciales, la selección de recursos y el muestreo aleatorio modificador; la misma semilla puede reproducir el mismo efecto",colliderTitle:"Propiedades del colisionador",colliderName:"Nombre del colisionador",type:"tipo",circle:"redondo",ellipse:"oval",rect:"rectángulo",polygon:"polígono",custom:"Personalizar",enabled:"permitir",xPosition:"Posición X",yPosition:"Posición Y",scaleXShort:"Escala X",scaleYShort:"Escala Y",radius:"radio",radiusX:"radio X",radiusY:"radio Y",width:"ancho",height:"alto",sides:"Número de lados",collisionResponse:"Respuesta de choque",physics:"Física (rebote/fricción)",pause:"Pausa (parar)",destroy:"Desaparecer (destruir inmediatamente)",elasticity:"Elasticidad (0-1)",friction:"Fricción (0-1)",followPath:"Sigue el camino",targetPath:"ruta de destino",notSelected:"(no seleccionado)",moveDuration:"Duración del movimiento (segundos)",followDirection:"dirección a lo largo del camino",moveProgressCurve:"Curva de progreso en movimiento",moveProgressHelp:"Eje horizontal: tiempo real/duración del movimiento; eje vertical: progreso del camino (0=punto inicial → 1=punto final)",pathTitle:"atributo de ruta",pathName:"nombre de la ruta",closedPath:"camino cerrado",pathColor:"color del camino",pathHelp:"Instrucciones de funcionamiento:",pathHelpItems:"Haga doble clic en el espacio en blanco/curva: cree un nuevo punto de anclaje, haga doble clic en el punto de anclaje: elimine el nodo, haga doble clic la segunda vez y arrastre: cree uno nuevo y extraiga el controlador, arrastre el punto de anclaje para mover la posición, arrastre el controlador para ajustar la curva, Mayús + controlador de arrastre: completamente simétrico en ambos lados, Alt+control de arrastre: controle independientemente un lado, Ctrl+clic/selección de marco: agregue nodos seleccionados, Alt+clic/selección de marco: reste nodos seleccionados, Alt+clic en el espacio en blanco: borre todas las selecciones, seleccione varios nodos y arrástrelos como un todo",applyPresetShape:"Aplicar una forma preestablecida",choosePreset:"Seleccione un preajuste...",square:"Cuadrado",star:"forma de estrella",applyPreset:"Aplicar preajuste",clearAnchors:"punto de anclaje claro",panelHint:"Utilice el botón en la esquina superior derecha para crear un objeto de escena."},VO={title:"Modificadores",reset:"Restablecer parámetros del modificador",damping:"Amortiguación",enableNoise:"Activar ruido de movimiento",strength:"fortaleza",noiseRange:"Rango de fluctuación",noiseSpeed:"Flujo de tiempo",noiseHint:"El control de intensidad afecta la proporción · El rango de fluctuación controla la desviación máxima · El flujo de tiempo controla la velocidad de cambio",enableGravity:"Activar gravedad",gravityStrength:"Fuerza de gravedad",strengthMin:"Fuerza mínima",strengthMax:"Fuerza máxima",direction:"dirección",gravityOverLife:"Gravedad durante el ciclo de vida.",windOverLife:"viento del ciclo de vida",axisStrength:"Eje vertical: intensidad 0~1",directionHint:"0° derecha · -90° abajo · La intensidad negativa invierte la dirección",enableWind:"Activar viento",windStrength:"fuerza del viento",enableForceField:"Activar campo de fuerza",centerX:"Centro X",centerY:"Centro Y",forceStrength:"Fuerza del campo de fuerza",forceRadius:"radio del campo de fuerza",falloffMode:"modo de decadencia",constant:"Constante (la velocidad no cambia dentro del rango)",linearFalloff:"Caída lineal (el borde es 0)",inverseFalloff:"Inversamente proporcional a la distancia (más fuerte en el centro)",forceHint:"Los números positivos se atraen hacia el centro, los números negativos se repelen hacia afuera y el círculo del campo de fuerza se puede arrastrar dentro del lienzo.",showShape:"mostrar forma",enableVortex:"Activar vórtice",vortexHint:"Números positivos en sentido antihorario · Números negativos en sentido horario",enableAttraction:"Activar atracción",attractionX:"Punto de adsorción X",attractionY:"Punto de adsorción Y",attractionRadius:"radio de adsorción",attractionDuration:"tiempo de adsorción",delay:"tiempo de retraso",delayMode:"Modo de retardo",globalTime:"tiempo unificado",particleLife:"vida de una sola partícula",attractionPath:"Método de adsorción",straight:"linea recta",attractionHint:"Después del retraso, la adsorción comienza desde la posición actual. Cuando alcance el rango rojo, morirá. El círculo de adsorción se puede arrastrar dentro del lienzo.",enableTrail:"Activar estela",trailImages:"Imágenes finales independientes",addTrailImage:"Agregar recursos de imágenes finales",trailRotation:"girar",trailBones:"Número de huesos posteriores",trailRatio:"Relación de seguimiento (%)",trailLength:"longitud de salida",randomRange:"rango aleatorio",lengthRatio:"Relación de longitud (%)",lengthMin:"Longitud mínima (%)",lengthMax:"Longitud máxima (%)",trailWidth:"Ancho de salida",widthRatio:"relación de ancho (%)",widthMin:"Ancho mínimo (%)",widthMax:"Ancho máximo (%)",widthScale:"escala de ancho",followParticle:"seguir partículas",lifeLengthCurve:"curva de longitud del ciclo de vida",shapeCurve:"Curva de forma (cabeza → ancho de cola)",colorMode:"modo de color",blendMode:"modo de fusión",fixedColor:"color fijo",alphaMode:"modo de transparencia",opacity:"transparencia",gridRows:"Número de filas de la cuadrícula",gridCols:"Número de columnas de la cuadrícula",trailHint:"Cada partícula genera un conjunto de huesos posteriores hermanos en proporción a los recursos; la longitud y el ancho aleatorios se determinan cuando nace la partícula, y la misma semilla se puede reproducir de manera estable",enableFollow:"Activar seguimiento del emisor",followMode:"modo de seguimiento",noFollow:"ninguno",followPath:"sigue el camino",selectedBone:"huesos seleccionados",emitterAngleMode:"Modo de ángulo del transmisor",fixedAngle:"ángulo fijo",followMoveDirection:"Sigue la dirección del movimiento.",moveProgressCurve:"Curva de progreso del movimiento (0→1)",moveDuration:"Duración del movimiento (s)",followSpace:"seguir el espacio",localSpace:"Espacio local (movimiento GEN)",worldSpace:"Espacio mundial (movimiento del punto de generación de partículas)",moveDirection:"dirección de movimiento",forward:"Adelante (punto inicial → punto final)",reverse:"Invertir (punto final → punto inicial)",followOffset:"Punto de partida compensado (0-1)",followSpaceHint:"El espacio local mueve todo el emisor; el espacio mundial solo mueve el punto de generación de nuevas partículas, y las partículas nacidas permanecen en la posición mundial.",followTarget:"Sigue el objetivo:",noValidBone:"Aún no se ha vinculado ningún hueso válido; seleccione primero el hueso en el árbol jerárquico Spine.",rebind:"reencuadernar",bind:"vinculante",selectedBoneLabel:"Hueso actualmente seleccionado:",boneLocalSpace:"Espacio local (se mueve con huesos)",boneWorldSpace:"Espacio mundial (las partículas mantienen su posición después de generarse)",offsetX:"Compensación de desplazamiento X",offsetY:"Compensación de desplazamiento Y",rotationOffset:"Desplazamiento de rotación",scaleOffsetX:"Compensación de escala X",scaleOffsetY:"Desplazamiento de escala Y",boneFollowHint:"El emisor solo sigue la posición del hueso Spine seleccionado y no hereda la rotación o escala de Spine; la transformación de partículas utiliza los propios parámetros del sistema de partículas y el desplazamiento superior.",enableCollision:"Activar colisión",collisionObjects:"Objetos de colisión participantes",colliderDisabled:"{name} (colisionadores desactivados)",clearCollider:"Borrar objeto de colisión {name}",addCollider:"Agregar objetos de colisión de escena",noAvailableColliders:"No hay objetos de colisión para agregar",noCollidersSelected:"No se selecciona ningún objeto de colisión y las partículas actuales no colisionarán.",available:"Disponible",disabled:"Desactivado",collisionHint:"Sólo los objetos de colisión de escena agregados y habilitados participarán en la colisión del sistema de partículas actual.",enableSubEmitter:"Activar subemisores",triggerTiming:"Elija el tiempo de activación",birth:"nacido",death:"morir",collision:"colisión",chooseTarget:"Seleccione el sistema de partículas objetivo",noTarget:"Ninguno (sistema de partículas)",deleteSubEmitter:"Eliminar este subemisor",probability:"probabilidad de emisión",collisionLimit:"Límite de colisión",inherit:"heredar",colorInheritMode:"Método de herencia de color",add:"Agregar",replace:"cubrir",addSubEmitter:"+ Se agregó un nuevo subemisor",inheritNone:"Ninguno (predeterminado)",inheritAll:"Todas las propiedades",inheritColor:"color",inheritScale:"tamaño",inheritRotation:"girar",inheritLife:"ciclo vital"},XO={title:"Propiedades de Spine",name:"Nombre Spine",xPosition:"Posición X",yPosition:"Posición Y",rotation:"Rotación",scaleX:"Escala X",scaleY:"Escala Y",startTime:"Tiempo inicial",resources:"Recursos de Spine",chooseFolder:"Seleccionar carpeta y cargar",folderHint:"Lea JSON / SKEL, Atlas y todas las texturas en una carpeta a la vez; Los recursos aún se pueden reemplazar individualmente a continuación.",choose:"elegir",chooseMultiple:"Seleccionar (múltiples opciones)",loading:"cargando…",load:"↧ Cargar",clear:"Claro",supportNote:"Soporte Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Carga bajo demanda cuando se está ejecutando la versión correspondiente · Local fuera de línea",currentResource:"Recurso actual {version}",animations:"Animaciones de Spine",noAnimations:"No hay animación disponible",timelineAnimation:"Reproducir animación en la línea de tiempo",no:"ninguno",hierarchy:"Jerarquía",clearBoneTitle:"Haga clic para borrar la selección de huesos",noBoneTitle:"No hay huesos seleccionados actualmente",clearBone:"Borrar huesos seleccionados: {name}",currentBone:"Esqueleto actual:",clearSlotTitle:"Haga clic para borrar la selección de ranuras",noSlotTitle:"Actualmente no hay ningún espacio seleccionado",clearSlot:"Borrar ranura seleccionada: {name}",currentSlot:"Ranura actual:",notSelected:"No seleccionado",expandAll:"Expandir todo",collapseAll:"Contraer todo",bones:"esqueleto",slots:"ranura",notLoaded:"No cargado Spine",searchBones:"buscar huesos",searchBonesPlaceholder:"Buscar nombre del hueso…",clearSearch:"Borrar búsqueda",clearBoneSearch:"Búsqueda ósea clara",noMatchingBones:"No se encontró ningún hueso coincidente",expandChildren:"Ampliar los huesos del niño",collapseChildren:"Colapso de huesos infantiles",notLoadedSlots:"Ranura Spine no cargada",searchSlots:"Buscar espacios",searchSlotsPlaceholder:"Busque el nombre de la ranura o del accesorio...",clearSlotSearch:"Borrar búsqueda de espacios",noMatchingSlots:"No se encontró ninguna ranura coincidente",slotTitle:"{name} (esqueleto: {bone}, accesorio: {attachment})",empty:"nulo",textureSummary:"{count}Zhang: {names}",textureImages:"Cuadros de textura",missingFolderAssets:"Falta la carpeta seleccionada: {missing}",chooseAssets:"Seleccione los datos Spine, Atlas y todas las imágenes de textura en secuencia"},YO={title:"Ayuda",subtitle:"Inicio rápido desde la creación de partículas hasta el guardado y la exportación",close:"Cerrar instrucciones",closeShort:"Cerrar (Esc)",quickStart:"inicio rápido",stepCreate:'Cree un objeto: use +Partículas / +Colisión / +Ruta / +Spine en el "Objeto de escena" a la izquierda para agregar un objeto de escena.',stepEdit:'Editar partículas: seleccione el sistema de partículas y ajuste "Modo de emisión → Forma del emisor → Propiedades de las partículas → Apariencia y recursos → Modificador".',stepPreview:"Compruebe el efecto: la línea de tiempo inferior se puede reproducir, pausar, cuadro por cuadro o arrastrar; se recalculará automáticamente después de modificar los parámetros.",stepExport:'Guardar y exportar: utilice "Guardar configuración" para conservar el proyecto; "Exportar Spine Json/paquete de imágenes/paquete .spine" para generar el producto terminado.',quickNote:'"Restablecer" en el lado derecho del título de cada grupo de módulos puede restaurar los parámetros predeterminados del grupo; La configuración del sistema se guardará automáticamente en el navegador actual.',commonOps:"Acciones comunes",eye:"ojos pequeños",eyeDesc:"Mostrar/ocultar objetos individualmente; Los sistemas de partículas ocultas no se exportan.",copyDesc:"Copia completamente el objeto seleccionado actualmente para facilitar la comparación de diferentes parámetros.",backgroundDesc:"Cargue la imagen de referencia y ajuste la posición y la transparencia solo para la vista previa del lienzo.",settingsDesc:"El diseño de la interfaz de administración, la pantalla auxiliar, la escala, etc. se guardan automáticamente en el navegador.",undoDesc:"Ctrl+Z retrocede un paso; el número máximo de pasos se puede ajustar en la configuración del sistema.",spineBoneDesc:"Busque y seleccione un hueso en el árbol jerárquico, que el emisor de partículas puede utilizar para seguir.",shortcuts:"Atajos",undoShortcut:"Deshacer el paso anterior",saveShortcut:"Guardar configuración",panShortcut:"Arrastrar lienzo",translateShortcut:"herramienta de desplazamiento",rotateShortcut:"herramienta rotativa",scaleShortcut:"herramienta de zoom",playShortcut:"reproducir/pausar",startShortcut:"Volver al primer fotograma",shortcutNote:"Q / W / E / R primero debe hacer clic en el lienzo; cuando el cursor está en el cuadro de entrada, la tecla de acceso directo de una sola tecla no se activará.",modules:"Guía de módulos",configTitle:"Gestión de configuración",saveConfigDesc:"Guarde todos los objetos y parámetros de la escena actual como archivos JSON del proyecto (también se admite Ctrl+S).",loadConfigDesc:"Seleccione el archivo de configuración local para restaurar el proyecto completo.",presetDesc:"Seleccione una Aplicación rápida predeterminada en el menú desplegable; haga clic en el menú desplegable para actualizar la lista.",configScope:"alcance",configScopeDesc:"La configuración contiene objetos y parámetros; La interfaz y la configuración del sistema se almacenan por separado en el navegador.",sceneTitle:"objeto de escena",particleDesc:"objeto central. Se pueden configurar posición, desplazamiento, rotación, escala y semilla aleatoria; la misma semilla puede reproducir el mismo efecto.",colliderDesc:"Círculo/elipse/rectángulo/polígono/personalizado, admite rebote físico, pausa, destrucción y movimiento a lo largo del camino.",pathDesc:"Ruta Bezier con soporte para puntos de anclaje, manijas de control, cierre, color y formas preestablecidas.",spineDesc:"Cargue datos Spine, Atlas y texturas, busque huesos y ranuras, y siga los emisores.",sceneCommonDesc:"Los objetos se pueden revelar y copiar de forma independiente; Los sistemas de partículas ocultas no se exportan.",emissionDesc:"Duración del bucle de tres etapas de disparo continuo, ráfaga, retraso e inicio/bucle/finalización.",burstDesc:"Emite un número específico de partículas a la vez.",delayDesc:"El tiempo de espera antes de que comience la emisión, correspondiente al extremo izquierdo de la barra de partículas.",loopNote:"La persistencia del bucle no admite el seguimiento de huesos ni de rutas, y las siguientes configuraciones se restaurarán al cambiar.",shapeDesc:"Área de generación de puntos, círculos, rectángulos, conos o caminos. Los círculos/conos admiten radios internos y externos, y los rectángulos admiten ancho y alto internos y externos.",angleDesc:"Fijo, aleatorio, radial, trayectoria normal o trayectoria tangente.",initialDesc:"El ciclo de vida, la velocidad, el escalado y la rotación admiten soporte fijo, aleatorio, curvo y la rotación puede seguir la dirección de lanzamiento.",overLifeDesc:"La ampliación de velocidad, la ampliación del zoom y la velocidad de rotación se pueden controlar mediante la curva del ciclo de vida.",alphaDesc:"Soportes de transparencia fijos o curvos; El modo de curva puede seguir la derivada, lineal o Bézier.",imageDesc:"Imagen única o fotograma de secuencia, aleatorización de peso de varias imágenes, punto de pivote, color, modo de fusión y transparencia independiente.",sequenceDesc:"Los métodos de reproducción incluyen ocultación de una sola vez, congelación de una sola vez, bucle de avance y bucle de retroceso.",noiseDesc:"Genere trazas de fluctuación y controle la intensidad, el alcance y la velocidad.",gravityDesc:"Curvas de intensidad de gravedad, viento y ciclo de vida.",forceDesc:"Campos de fuerza globales, vórtices, adsorción y colisiones.",trailDesc:"Activos finales independientes, número de huesos, longitud, ancho, forma, color y curvas de transparencia.",followDesc:"El emisor puede seguir un camino o hueso Spine.",collisionDesc:"Seleccione objetos de colisión de escena y respuestas de colisión de partículas.",exportDesc:"Establezca la ruta de la imagen, la versión Spine, la curva de fotogramas clave, FPS, los fotogramas enteros, el conjunto de huesos y la animación vacía.",exportButtonsDesc:"Puede exportar Spine JSON, imágenes ZIP o generar proyectos .spine a través del conector.",connectorTitle:"Instrucciones de uso del conector Spine",connectorIntro:"El conector entrega el JSON y las imágenes generadas por la página web al Spine que se ha instalado y activado en la máquina local, y los convierte en proyectos .spine editables.",prerequisite:"carga frontal",prerequisiteDesc:"La computadora tiene Spine instalado y activado, y se ha iniciado el conector de escritorio.",download:"descargar",webSide:"Página web",webSideDesc:'Después de que aparezca "Conector disponible · Spine está listo", haga clic en "Exportar paquete .spine".',authorization:"primera autorización",authorizationDesc:"La primera conexión debe verificar la fuente del sitio web y permitirla una vez; Esta máquina guarda la lista blanca de autorización.",pathSetup:"Configuración de ruta",pathSetupDesc:"El conector detectará automáticamente Spine; si no se puede encontrar, puede especificar manualmente la ruta de la aplicación.",downloadResult:"Descargar resultados",downloadResultDesc:"Obtenga el paquete ZIP, que contiene el proyecto .spine y el directorio de imágenes.",version:"Versión",versionDesc:"El conector coincide automáticamente con Spine 3.8~4.3 según la versión JSON.",security:"Seguridad",securityDesc:"Solo escuche la dirección local, la autorización se guarda en el conector y los archivos temporales se limpian después de la conversión.",differenceTitle:"¿Cuál es la diferencia entre configurar y exportar?",differenceDesc:'"Guardar configuración" guarda todos los objetos y parámetros que se pueden editar; "Exportar Spine Json" solo exporta el sistema de partículas mostrado y convierte los resultados de colisión, seguimiento, seguimiento y subemisor en datos de animación independientes.'},zO={confirmLoopFollowEnter:"Después de ingresar al modo de bucle continuo, la siguiente configuración de partículas no será válida y se restaurará al valor predeterminado. ¿Continuar?",confirmLoopFollowExit:"Después de salir del modo de persistencia del bucle, la siguiente configuración de partículas no será válida y se restaurará a sus valores predeterminados. ¿Continuar?",invalidJson:"El archivo de configuración no es válido JSON",invalidConfigFormat:"No es el perfil del editor SpineParticle",unsupportedConfigVersion:"Versión de configuración aún no compatible: {version}",missingScene:"Al archivo de configuración le faltan datos completos de la escena",missingEmbeddedSpine:"La configuración no contiene recursos originales Spine reutilizables",chooseJsonConfig:"Seleccione un archivo de configuración .json",settingsInvalidJson:"La caché de configuración del sistema no es válida JSON",settingsFormat:"No caché de configuración del sistema del editor SpineParticle",settingsVersion:"La versión de configuración del sistema aún no es compatible: {version}",settingsMissing:"A la caché de configuración del sistema le faltan configuraciones",noExportableImages:"No hay imágenes exportables para el sistema de partículas visible actualmente.",invalidZipPath:"ZIP Ruta de archivo no válida",spineFileType:"Los datos Spine solo admiten .json o .skel",atlasFileType:"Los archivos Atlas solo admiten .atlas",chooseTexture:"Por favor seleccione al menos una imagen de textura",binaryParseFailed:"Error en el análisis binario de Spine (4.3: {v43}; versión anterior: {v42})",invalidSpineJson:"Spine JSON Formato de archivo no válido",unsupportedSpineJsonVersion:"La versión Spine JSON no es compatible, solo se admite {versions}",unsupportedSpineDataVersion:"La versión de datos Spine no es compatible, solo se admite {versions}",embeddedReadFailed:"No se puede leer el archivo Spine incrustado: {name}",missingImageWarning:'Falta la imagen "{file}" o tiene dimensiones ilegibles, la ruta se conserva.',missingTrailImageWarning:'Falta la imagen final "{file}" y se ha conservado la ruta.',emptyCacheWarning:"No hay framebuffer disponible para '{name}'.",readExportImageFailed:"No se puede leer la imagen exportada: {name}",connectorOffline:"Conector local Spine no detectado, habilite el conector primero",connectorHttpError:"El conector Spine devuelve el error: HTTP {status}",invalidTrailUV:"Datos UV no válidos para la malla final '{name}'",missingTrailVertices:"A la malla final '{name}' le faltan datos de vértice",trailIndexOutOfRange:"Índice triangular de la malla final '{name}' fuera de límites",invalidTrailHull:'El número del contorno exterior de la malla final "{name}" no es válido',trailHullIndexOutOfRange:'El índice del borde del contorno exterior de la malla final "{name}" está fuera de límites',invalidInfluenceCount:"La malla final '{name}' contiene un número no válido de pesos óseos",missingBoneReference:"La malla final '{name}' hace referencia a un hueso inexistente",invalidWeight:'La cuadrícula final "{name}" contiene datos de peso no válidos',weightSum:"Los pesos de los vértices de la malla final '{name}' no suman 1",vertexCountMismatch:"La malla final '{name}' tiene un número inconsistente de vértices y UV",invalidInherit:"El valor heredado '{inherit}' para el hueso '{name}' no se ajusta al formato Spine {version} JSON",trailBoneParent:'El hueso posterior "{name}" debe colgarse directamente debajo del hueso del sistema de partículas y no puede formar una cadena ósea.',trailSlotEmpty:'La ranura de cola ponderada "{name}" no puede utilizar accesorios vacíos. La escala ósea correspondiente debe establecerse en 0 en la fase de no aparición o muerte.',spine38Version:"Spine 3.8 El ID de la versión exportada debe ser 3.8",spine38Inherit:'Spine 3.8 Bone "{name}" debería usar transformar y no puede usar heredar',spine38SlotColor:"La línea de tiempo de color de la ranura Spine 3.8 debe usar color/twoColor",spine38AttachmentName:"Spine 3.8 El fotograma oculto de la línea de tiempo del archivo adjunto debe tener un nombre escrito explícitamente: nulo",spine38RotationAngle:"Spine 3.8 Debes usar el ángulo para rotar el eje del tiempo",spine38Curve:"Spine 3.8 no admite el formato de curva de matriz 4.x",unsupportedExportVersion:"La versión exportada no es compatible, solo se admite Spine {versions}",exportVersionMismatch:"Versión de exportación inconsistente: establecida en Spine {expected}, JSON marcada como Spine {actual}",exportMissingBones:"Al resultado de la exportación le faltan huesos",missingAtlasTexture:"La textura a la que hace referencia Atlas no está seleccionada: {name}"},jO={label:"Idioma",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},HO={app:CO,common:AO,toolbar:TO,settings:EO,config:_O,presets:MO,curve:PO,gradient:IO,attributeControl:kO,pivot:RO,image:FO,timeline:LO,emission:DO,attributes:OO,appearance:NO,renderLayer:$O,export:{title:"Ajustes de exportación",reset:"Restablecer la configuración de exportación",imagesPath:"Ruta de imagen (Ruta de imágenes Spine)",spineVersion:"Versión de Spine",keyframeCurve:"Curva de interpolación de fotogramas clave",linear:"Lineal",smoothBezier:"Bézier suave (Suave Bézier)",bezierHelp:"Smooth Bezier ajusta el movimiento continuo dentro de la tolerancia al error; El nacimiento, la muerte, el cambio de apego y las mutaciones todavía utilizan fotogramas clave de pasos.",spine38Help:"Spine 3.8 no admite la matriz Bézier por canal de 4.x y se convierte a fotogramas clave lineales por partes con tolerancia reducida al exportar.",fps:"FPS de exportación",omitFps:"No escribas fps",fpsHelp:'Mantenga los segundos reales de la animación sin cambios al modificar FPS; "No escribir fps" solo omite los metadatos de fps de Spine.',integerFrames:"Alineación de marco entero",bonePool:"Conjunto de objetos óseos",excludeEmpty:"Excluir animaciones sin contenido",baking:"La animación se está recalculando y horneando.",exportJsonTitle:"Exportar Spine {version} JSON",preparing:"Preparándonos para exportar...",exportJson:"Exportar Spine JSON",exportImagesTitle:"Descargue por separado la imagen utilizada por el sistema de partículas actual ZIP",organizingImages:"Ordenando imágenes...",exportImages:"Exportar imágenes ZIP",generatingProject:"Generando proyecto...",exportSpine:"Exportar paquete .spine",authorize:"Autorizar sitio web actual",authorizeTitle:"Autorizar el sitio web actual en el conector nativo",refreshConnector:"Vuelva a comprobar el conector",refresh:"refrescar",recalculating:"Recalculando la animación de partículas...",exported:"Exportado Spine {version}: sistemas de partículas {systems}, animaciones {animations}, huesos de raíz {bones} {warning}",resourceWarning:";{count} sugerencias de recursos (las imágenes que faltan aún se exportan)",timeout:"Nuevo cálculo del tiempo de espera de la animación. Confirme que la página aún se está ejecutando e inténtelo nuevamente.",preparingProject:"Ordenando imágenes y llamando a esta máquina Spine…",projectExported:"Se ha generado {fileName}: incluye el proyecto .spine y las imágenes {images}, Spine {version}",collectingImages:"Cotejando imágenes utilizadas actualmente por el sistema de partículas...",imagesExported:"Se ha generado {fileName}: {folder}/ contiene imágenes {images}",connectorChecking:"Detectando el conector local Spine...",connectorOffline:"El conector local de Spine no está iniciado",spineNotFound:"El conector está iniciado, pero no se encontró Spine",notAuthorized:"El conector está iniciado, pero este sitio no está autorizado",connectorReady:"Conector disponible · Spine listo",connectorBusy:"Recalculando y generando el proyecto de Spine",connectorGenerate:"Generar proyecto Spine {version} con Spine local",unknown:"desconocido",checking:"Comprobando",offline:"Sin conexión",notFound:"Spine no encontrado",unauthorized:"No autorizado",projectTransferTitle:"Exportar paquete Spine",projectTransferDetail:"Recalculando la animación de partículas...",projectTransferDownload:"Se ha descargado el paquete del proyecto Spine.",generatingJson:"Generando Spine JSON…",preparingProjectFiles:"Recopilando imágenes del proyecto...",uploading:"Cargando datos al conector Spine...",spineProcessing:"Spine está convirtiendo el proyecto, espere...",downloadingProject:"Descargando el paquete de proyecto Spine generado...",handingToBrowser:"Entregando al navegador para descargar..."},transfer:BO,scene:UO,modifiers:VO,spine:XO,help:YO,errors:zO,language:jO},GO={resizeTimeline:"Faites glisser pour ajuster la hauteur de la timeline",systems:"système",particlesBones:"Particules (os)",rootBone:"os de la racine",hudTip:"Zoom sur la molette · Clic gauche pour faire glisser la toile",title:"Éditeur de particules Spine - Yeomai"},WO={close:"Fermer",reset:"Réinitialiser",add:"Ajouter",remove:"Retirer",delete:"Supprimer",clear:"Effacer",cancel:"Annuler",confirm:"Confirmer",none:"Aucun",enabled:"Activé",disabled:"Désactivé",fixed:"Fixe",random:"Aléatoire",curve:"Courbe",followExport:"Suivre l’export",linear:"Linéaire",bezier:"Bézier",above:"Au-dessus",below:"En dessous",left:"Gauche",right:"Droite",seconds:"s",frames:"images"},qO={settings:"Paramètres",undo:"Annuler (Ctrl+Z)",pan:"Déplacer le canevas (Q)",translate:"Déplacement (W)",rotate:"Rotation (E)",scale:"Échelle (R)",zoomIn:"Zoom avant",zoomOut:"Zoom arrière",fitView:"Ajuster le canevas",toggleGrid:"Afficher/masquer la grille",resetView:"Réinitialiser la vue",background:"Arrière-plan",backgroundSettings:"Paramètres de l’arrière-plan",changeBackground:"Remplacer l’image",uploadBackground:"Importer une image",clearBackground:"Effacer l’arrière-plan",noBackground:"Aucune image",backgroundX:"Décalage X de l'image d'arrière-plan",backgroundY:"Décalage Y de l'image d'arrière-plan",backgroundOpacity:"Transparence de l’image d’arrière-plan",opacity:"Opacité",help:"Aide",openHelp:"Ouvrir l’aide"},KO={title:"Paramètres système",layout:"Disposition de l'interface",parameterPanelPosition:"Emplacement du panneau de paramètres",panelOnRight:"Le panneau de paramètres est affiché à droite",history:"Historique des opérations",maxUndo:"Nombre maximum de pas en arrière",canvasGuides:"Affichage auxiliaire en toile",emitter:"point de lancement",bones:"Connexion osseuse",bonePointSize:"Taille du dessin de la pointe osseuse",boneAxisSize:"Taille du dessin des axes",skinMesh:"maille écorchée",enableTicks:"Activer les ticks",tickFontSize:"Taille du texte à l'échelle",tickWidth:"épaisseur de la graduation",axisColor:"couleur de l'axe",showAxisLabels:"Afficher la valeur de l'échelle",cacheNote:"L'ensemble des paramètres du système sont automatiquement enregistrés dans le navigateur actuel"},JO={title:"Configuration",save:"Enregistrer",saveTitle:"Enregistrez toutes les configurations de l'éditeur (Ctrl+S)",load:"Charger",loadTitle:"Charger la configuration de l'éditeur local",presets:"Liste des préréglages",selectPreset:"Choisir un préréglage",noPresets:"Aucun préréglage",saved:"La configuration a été enregistrée localement",loading:"Chargement de la configuration…",loaded:"Chargé : {name}",presetLoading:"Chargement des préréglages…",presetLoaded:"Préréglage chargé : {name}",presetNamingError:"{message}, veuillez vérifier le nom de fichier par défaut",presetTransferTitle:"Charger le préréglage",presetDownloading:"Téléchargement de {file}…",presetParsing:"Analyse de la configuration par défaut...",presetRestoring:"Analyse et restauration des ressources par défaut...",presetComplete:"Chargement du préréglage terminé",presetListError:"Impossible de lire la liste des préréglages",presetReadError:"Impossible de lire le préréglage : {file}"},ZO={particleSweep:"1.Balayage de particules",barBlocks:"2.Blocs rectangulaires",forceTrail:"3.Traînée de champ de force",lightningSequence:"4.Séquence d’éclairs",texturePivot:"5.Pivot de texture",subEmitter:"6.Sous-émetteur"},QO={bezierHint:"Faites glisser la poignée carrée pour ajuster l'arc · Double-cliquez sur un espace vide pour en créer un nouveau · Double-cliquez sur un nœud pour le supprimer",linearHint:"Double-cliquez sur un espace vide pour en créer un nouveau. Double-cliquez sur un nœud pour le supprimer. Faites glisser un nœud pour l'ajuster.",resetTitle:"Restaurer la courbe par défaut"},eN={addTitle:"Double-cliquez sur le ruban pour ajouter une marque de couleur",color:"Code couleur",colorValue:"Valeur de couleur de l'échelle de couleurs",position:"Position de la marque de couleur",addMiddle:"Ajouter de la couleur au milieu",delete:"Supprimer le patch de couleur actuel",hint:"Double-cliquez sur la bande de couleur pour en ajouter une nouvelle · Faites glisser la marque de couleur pour ajuster sa position · Double-cliquez sur la marque de couleur pour la supprimer"},tN={angleOffset:"Décalage angulaire",value:"valeur numérique",lower:"limite inférieure",upper:"limite supérieure",rangeLower:"Limite inférieure de la plage",rangeUpper:"Gamme supérieure",curveInput:"Entrée de courbe →",direction:"Direction du lancement"},iN={title:"point pivot de la carte",zoomOut:"dézoomer",zoomIn:"agrandir",expand:"Zoom en mode plein écran",interaction:"Clic gauche/glissez pour définir le point pivot · Clic droit pour faire glisser la toile · Molette de défilement pour zoomer",previewAlt:"Aperçu du point pivot",noImage:"Aucune image sélectionnée",resetCenter:"Repositionner au milieu (50 %, 50 %)",coordinates:"Coordonnées du point de l'axe (%)",rotationTest:"Test de rotation des axes",static:"toujours",spin:"rotation",swing:"balançoire",rotationAlt:"Essai de rotation",topLeft:"en haut à gauche",top:"Tout de suite",topRight:"en haut à droite",left:"Droite gauche",center:"milieu",right:"Droite",bottomLeft:"en bas à gauche",bottom:"Directement en dessous·en bas",bottomRight:"en bas à droite"},nN={chooseSequence:"Sélectionnez des images de séquence",chooseLocal:"Sélectionnez une image locale",subfolder:"sous-dossier",name:"nom",restore:"Restaurer {name}",deleteResource:"Supprimer les ressources d'images",imageMode:"Mode image",fixed:"Image fixe",sequence:"Séquence",playbackMode:"mode de lecture",onceHide:"Une fois, masquer à la fin",onceHold:"Une fois, conserver la dernière image",loopForward:"Boucle avant",loopReverse:"Boucle arrière",playbackFps:"Fréquence d'images de lecture",chooseSequenceMulti:"Sélectionner des images de séquence (sélections multiples)",weight:"Poids %",unlockWeight:"Déverrouiller le verrouillage des proportions",lockWeight:"Verrouiller la proportion actuelle",pivot:"Pivot de texture",collapsePivot:"Réduire l’ajustement du point pivot",expandPivot:"Développer l'ajustement du point pivot",pivotModal:"Point d'axe de rotation de texture, raffinement de grande image",pivotModalDesc:"Cliquez ou faites glisser n'importe où sur la carte ci-dessous pour définir avec précision le centre de rotation/oscillation des particules.",pivotZoomHint:"Prend en charge un grossissement de 100 % à 400 %, une visée précise vers la pointe ou la racine :",confirmPivot:"Déterminer et enregistrer le point pivot",noSequence:"Aucune image de séquence sélectionnée",firstFrame:"Cadre 1",firstImage:"première photo",lastImage:"dernière photo",pivotOn:"Ouvert : X {x}% | Y {y}%",pivotOff:"Non activé, la valeur par défaut se situe autour du centre de l'image (50 %, 50 %)",pivotCustom:"Le point pivot a été personnalisé : X {x}% | Y {y}%",frameCountOne:"1 cadre · {name}",frameCountMany:"Cadre {count} · {first} → {last}",sequenceSelected:"L'image {count} a été sélectionnée et lue dans l'ordre {first}-{last}."},sN={play:"Jouer(D)",pause:"Pause (D)",toStart:"Revenir à la première image (S)",previous:"image précédente",next:"image suivante",toEnd:"Passer à la dernière image",continuousLoop:"Lecture en boucle continue",abLoop:"Boucle indépendante de plage A/B",abLoopShort:"Boucle AB",abRange:"Intervalle de cycle AB",playbackStart:"Image de début de lecture personnalisée",playbackEnd:"Image de fin de lecture personnalisée",startFrame:"Lire l'image de début",endFrame:"Lire l'image de fin",frame:"cadre",emission:"Émission",particleLife:"Particules actives",spineAnimation:"Animation Spine",ownerAnimation:"Animation associée",setOwnerAnimation:"Définir l'animation à laquelle appartient le système de particules actuel",chooseOwnerAnimation:"Sélectionnez l'animation",animationName:"Nom de l'animation",renameAnimation:"Renommer l'animation actuelle",rename:"Rebaptiser",newAnimation:"+ Nouveau",keepOneAnimation:"Au moins une animation doit être conservée",spinePreview:"Animation d'aperçu Spine",noSpineAnimation:"Aucune animation Spine disponible",none:"aucun",systemName:"Système {index}",dragLoopDuration:"Durée du segment de boucle de glisser",dragEmissionDuration:"Durée du glissement",dragSpineStart:"Faites glisser pour ajuster l'heure de début de l'animation",noAnimationData:"Il n'y a actuellement aucune donnée d'animation à afficher.",animationNameEmpty:"Le nom de l'animation ne peut pas être vide",animationNameDuplicate:"Les noms d'animation ne peuvent pas être répétés",animationRenameFailed:"Impossible de modifier le nom de l'animation",zoomIn:"agrandir",zoomOut:"dézoomer",zoomFit:"Modéré",frameStatus:"Image {current} / {total}"},rN={title:"Mode d’émission",reset:"Réinitialiser les paramètres du mode de transmission",stream:"Continu",burst:"Rafale",normalStream:"Continu standard",loopStream:"Boucle continue",rate:"Taux d’émission",duration:"Durée d’émission",loopDuration:"Durée de lancement (f)",generateStart:"Générer une animation de boucle de démarrage",generateEnd:"Générer une animation de fin de boucle",customDuration:"Préciser la durée",auto:"Automatique {frames}f",startLoopDuration:"Durée du segment de démarrage de la boucle",endLoopDuration:"Durée du segment de fin de boucle",loopWarning:"Le mode de persistance de boucle ne prend pas en charge le suivi d'os et le suivi de chemin ; les paramètres de suivi des particules seront restaurés aux valeurs par défaut lors de l'entrée ou de la sortie.",burstCount:"Quantité par rafale",delay:"Délai",shapeTitle:"Forme de l’émetteur",shapeReset:"Réinitialiser les paramètres de forme de l'émetteur",shape:"forme",point:"Point",circle:"Cercle",rect:"Rectangle",cone:"Cône",path:"Chemin",innerDiameter:"diamètre intérieur",outerDiameter:"diamètre extérieur",innerRadius:"rayon intérieur",outerRadius:"rayon extérieur",coneDirection:"Orientation conique",coneAngle:"Angle d'ouverture conique",innerWidth:"largeur intérieure",innerHeight:"Haut à l'intérieur",outerWidth:"Largeur extérieure",outerHeight:"Très haut",selectPath:"Sélectionnez le chemin",noPath:"Pas de chemin (émission ponctuelle)",birthDistribution:"répartition des naissances",evenDistribution:"Distribution fixe équidistante",randomDistribution:"distribution aléatoire",emissionAngle:"angle de lancement",radial:"Radial (centre vers l'extérieur)",pathNormal:"perpendiculaire au chemin",pathTangent:"dans la direction du chemin",fixedAngle:"angle fixe",baseAngle:"angle de base",randomRange:"plage aléatoire",showShape:"montrer la forme"},oN={title:"Attributs des particules",reset:"Réinitialiser les paramètres d'attributs de particules",initialParams:"Valeurs initiales",initialLife:"cycle de vie initial",randomSample:"Échantillonnage aléatoire →",initialSpeed:"vitesse initiale",initialScale:"mise à l'échelle initiale",uniform:"unifié",separateXY:"Séparation XY",scaleX:"ZoomX",scaleY:"Zoom Y",initialRotation:"rotation initiale",lifecycleTitle:"Évolution pendant la durée de vie",speedOverLife:"vitesse du cycle de vie",speedMultiplier:"multiplicateur de vitesse",lifeTo:"cycle de vie →",scaleOverLife:"Échelle pendant le cycle de vie",scaleMultiplier:"Taux de zoom",multiplierX:"Grossissement",multiplierY:"Grossissement Y",rotationOverLife:"Rotation pendant le cycle de vie",rotationSpeed:"Vitesse de rotation"},aN={title:"Apparence et ressources",reset:"Réinitialiser les paramètres d'apparence et de ressources",opacity:"Opacité",curveMode:"Mode courbe",transparent:"0 (transparent)",opaque:"1(opaque)",renderLayer:"Calque de rendu (slot Spine)",top:"niveau supérieur",spineSlot:"Emplacement Spine",selectSpine:"Veuillez sélectionner Spine",noSpine:"Aucun disponible Spine",noSlot:"Aucun créneau sélectionné pour l'instant",reselect:"Sélectionner de nouveau",selectSlot:"Sélectionnez un emplacement",searchSlots:"Rechercher le nom de l'emplacement ou de l'accessoire…",searchSlotsAria:"Rechercher des créneaux",emptySlot:"Emplacement vide",noMatchingSlots:"Aucun emplacement correspondant",above:"au-dessus de cette photo de machine à sous",below:"sous cette photo de machine à sous",followAttachment:"Afficher et masquer avec les accessoires de machines à sous",previewOnly:"Le réglage du niveau d'affichage affecte uniquement l'aperçu de l'éditeur et n'affecte pas les données exportées.",imageResources:"Ressources d’image",addImage:"Ajouter des ressources d'images",scale:"Zoom",color:"couleur",fixedColor:"couleur fixe",randomColor:"couleur aléatoire",lifetime:"cycle de vie",normal:"Normal",add:"Ajout",multiply:"Multiplication",screen:"Écran",fixedColorValue:"valeur de couleur fixe",randomColorHint:"Chaque particule choisit au hasard une couleur sur le ruban à sa naissance et reste inchangée tout au long de son cycle de vie.",independentAlpha:"Opacité indépendante",off:"Désactivé"},lN={slotLabelAbove:"{spine} / {slot} · Photo ci-dessus",slotLabelBelow:"{spine} / {slot} · Sous la photo",resolvedAbove:"Rendu au-dessus de l'image {slot} et en dessous de son emplacement",resolvedBetween:"Rendu entre {previous} et {slot}",warningNoSpine:"Aucun Spine n'est chargé et les particules sont temporairement affichées en haut.",warningNoSelection:"Spine n'a pas encore été sélectionné et les particules sont temporairement affichées en haut.",warningMissingSpine:"La cible Spine n'existe pas et les particules sont temporairement affichées en haut.",warningNotReady:"La cible Spine n'est pas prête et les particules sont temporairement affichées en haut.",warningMissingSlot:"L'emplacement cible n'existe pas (la ressource a peut-être été remplacée) et les particules sont temporairement affichées en haut.",warningFirstSlot:"Il s'agit du premier emplacement et ne peut pas être affiché en dessous, les particules sont temporairement affichées en haut."},cN={completed:"Complété",failed:"L'opération a échoué"},dN={title:"Objets de scène",addParticle:"Ajouter un système de particules",addParticleShort:"+particule",addCollider:"Ajouter un collisionneur",addColliderShort:"+collision",addPath:"ajouter un chemin",addPathShort:"+ chemin",addSpine:"Ajouter Spine",copyTitle:"Copier l'objet de scène actuellement sélectionné",showParticle:"Afficher le système de particules",hideParticle:"Masquer le système de particules",showCollider:"montrer les collisionneurs",hideCollider:"Masquer le collisionneur",showPath:"montrer le chemin",hidePath:"Masquer le chemin",showSpine:"Affichage Spine",hideSpine:"Masquer Spine",particle:"Particules",subEmitter:"Sous-émetteur",collision:"Collision",path:"Chemin",deleteParticle:"Supprimer le système de particules",deleteCollider:"Supprimer les collisionneurs",deletePath:"supprimer le chemin",deleteSpine:"Supprimer Spine",empty:"Il n'y a pas encore d'objets dans la scène",name:"nom",positionX:"Position X",positionY:"Position Y",offsetX:"Décalage X",offsetY:"Décalage Y",rotation:"Rotation",scaleX:"Échelle X",scaleY:"Échelle Y",seed:"Graine aléatoire",seedTitle:"Contrôlez tous les attributs aléatoires, la sélection des ressources et l'échantillonnage aléatoire du modificateur dans le système de particules",randomizeSeed:"Générer une nouvelle graine aléatoire globale",seedHint:"Contrôler les paramètres aléatoires initiaux, la sélection des ressources et l'échantillonnage aléatoire du modificateur ; la même graine peut reproduire le même effet",colliderTitle:"Propriétés du collisionneur",colliderName:"Nom du collisionneur",type:"taper",circle:"rond",ellipse:"ovale",rect:"rectangle",polygon:"polygone",custom:"Personnaliser",enabled:"activer",xPosition:"Position X",yPosition:"Position Y",scaleXShort:"Échelle X",scaleYShort:"Échelle Y",radius:"rayon",radiusX:"Rayon X",radiusY:"Rayon Y",width:"largeur",height:"haut",sides:"Nombre de côtés",collisionResponse:"Réponse en cas d'accident",physics:"Physique (rebond/frottement)",pause:"Pause (arrêter)",destroy:"Disparaître (détruire immédiatement)",elasticity:"Élasticité (0-1)",friction:"Frictions (0-1)",followPath:"Suivez le chemin",targetPath:"chemin cible",notSelected:"(non sélectionné)",moveDuration:"Durée du mouvement (secondes)",followDirection:"direction le long du chemin",moveProgressCurve:"Courbe de progression en mouvement",moveProgressHelp:"Axe horizontal : temps réel/durée du mouvement ; axe vertical : progression du chemin (0=point de départ → 1=point final)",pathTitle:"attribut de chemin",pathName:"nom du chemin",closedPath:"chemin fermé",pathColor:"couleur du chemin",pathHelp:"Mode d'emploi :",pathHelpItems:"Double-cliquez sur l'espace vide/la courbe : créez un nouveau point d'ancrage, double-cliquez sur le point d'ancrage : supprimez le nœud, double-cliquez une deuxième fois et faites glisser : créez-en un nouveau et retirez la poignée, faites glisser le point d'ancrage pour déplacer la position, faites glisser la poignée pour ajuster la courbe, Maj + faites glisser la poignée : complètement symétrique des deux côtés, A lt+glissez la poignée : contrôlez indépendamment un côté, Ctrl+sélection clic/cadre : ajouter les nœuds sélectionnés, Alt+clic/sélection de cadre : soustraire la sélection nœuds, Alt+clic dans l'espace vide : effacez toutes les sélections, sélectionnez plusieurs nœuds et faites-les glisser dans leur ensemble",applyPresetShape:"Appliquer une forme prédéfinie",choosePreset:"Sélectionnez un préréglage...",square:"Carré",star:"forme d'étoile",applyPreset:"Appliquer le préréglage",clearAnchors:"point d'ancrage clair",panelHint:"Utilisez le bouton dans le coin supérieur droit pour créer un objet de scène"},uN={title:"Modificateurs",reset:"Réinitialiser les paramètres du modificateur",damping:"Amortissement",enableNoise:"Activer le bruit de mouvement",strength:"force",noiseRange:"Plage de fluctuation",noiseSpeed:"Débit temporel",noiseHint:"Le contrôle de l'intensité affecte la proportion · La plage de fluctuation contrôle l'écart maximum · Le flux temporel contrôle la vitesse de changement",enableGravity:"Activer la gravité",gravityStrength:"Force de gravité",strengthMin:"Force min.",strengthMax:"Force maximale",direction:"direction",gravityOverLife:"La gravité pendant le cycle de vie",windOverLife:"Vent du cycle de vie",axisStrength:"Axe vertical : intensité 0~1",directionHint:"0° à droite · -90° vers le bas · L'intensité négative inverse la direction",enableWind:"Activer le vent",windStrength:"force du vent",enableForceField:"Activer le champ de force",centerX:"Centre X",centerY:"Centre Y",forceStrength:"Intensité du champ de force",forceRadius:"rayon du champ de force",falloffMode:"mode de désintégration",constant:"Constante (la vitesse ne change pas dans la plage)",linearFalloff:"Atténuation linéaire (le bord est 0)",inverseFalloff:"Inversement proportionnel à la distance (le plus fort au centre)",forceHint:"Les nombres positifs attirent vers le centre, les nombres négatifs se repoussent vers l'extérieur et le cercle du champ de force peut être déplacé dans le canevas.",showShape:"montrer la forme",enableVortex:"Activer le tourbillon",vortexHint:"Nombres positifs dans le sens inverse des aiguilles d'une montre · Nombres négatifs dans le sens des aiguilles d'une montre",enableAttraction:"Activer l’attraction",attractionX:"Point d'adsorption X",attractionY:"Point d'adsorption Y",attractionRadius:"rayon d'adsorption",attractionDuration:"Temps d'adsorption",delay:"Temps de retard",delayMode:"Mode retard",globalTime:"temps unifié",particleLife:"durée de vie d'une seule particule",attractionPath:"Méthode d'adsorption",straight:"ligne droite",attractionHint:"Après un délai, l'adsorption démarre à partir de la position actuelle. Lorsqu'il atteint la zone rouge, il mourra. Le cercle d'adsorption peut être glissé dans la toile.",enableTrail:"Activer la traînée",trailImages:"Images indépendantes de fin",addTrailImage:"Ajouter des ressources d'image de fin",trailRotation:"tourner",trailBones:"Nombre d'os arrière",trailRatio:"Ratio de suivi (%)",trailLength:"Longueur de fuite",randomRange:"plage aléatoire",lengthRatio:"Rapport de longueur (%)",lengthMin:"Longueur minimale (%)",lengthMax:"Longueur maximale (%)",trailWidth:"Largeur de fuite",widthRatio:"rapport de largeur (%)",widthMin:"Largeur minimale (%)",widthMax:"Largeur maximale (%)",widthScale:"mise à l'échelle de la largeur",followParticle:"suivre les particules",lifeLengthCurve:"courbe de longueur du cycle de vie",shapeCurve:"Courbe de forme (largeur tête → queue)",colorMode:"mode couleur",blendMode:"mode de fusion",fixedColor:"couleur fixe",alphaMode:"mode transparence",opacity:"transparence",gridRows:"Nombre de lignes de grille",gridCols:"Nombre de colonnes de grille",trailHint:"Chaque particule génère un ensemble d’os frères et sœurs proportionnels aux ressources ; la longueur et la largeur aléatoires sont déterminées à la naissance de la particule, et la même graine peut être reproduite de manière stable",enableFollow:"Activer le suivi de l’émetteur",followMode:"mode suivi",noFollow:"aucun",followPath:"suivre le chemin",selectedBone:"os sélectionnés",emitterAngleMode:"Mode angle de l'émetteur",fixedAngle:"angle fixe",followMoveDirection:"Suivre la direction du mouvement",moveProgressCurve:"Courbe de progression du mouvement (0→1)",moveDuration:"Durée(s) du mouvement",followSpace:"suivre l'espace",localSpace:"Espace local (mouvement GEN)",worldSpace:"Espace mondial (mouvement du point de génération de particules)",moveDirection:"direction de déplacement",forward:"Suivant (point de départ → point final)",reverse:"Inverse (point final → point de départ)",followOffset:"Point de départ décalé (0-1)",followSpaceHint:"L'espace local déplace l'émetteur tout entier ; l'espace mondial ne déplace que le point d'apparition des nouvelles particules, et les particules nées restent à la position du monde.",followTarget:"Suivez la cible :",noValidBone:"Aucun os valide n'a encore été lié, veuillez d'abord sélectionner l'os dans l'arborescence hiérarchique Spine.",rebind:"relier",bind:"obligatoire",selectedBoneLabel:"Os actuellement sélectionné :",boneLocalSpace:"Espace local (se déplace avec les os)",boneWorldSpace:"Espace mondial (les particules conservent leur position après avoir été générées)",offsetX:"Décalage de déplacement X",offsetY:"Décalage de déplacement Y",rotationOffset:"Décalage de rotation",scaleOffsetX:"Décalage d'échelle X",scaleOffsetY:"Décalage d'échelle Y",boneFollowHint:"L'émetteur suit uniquement la position de l'os Spine sélectionné et n'hérite pas de la rotation ou de la mise à l'échelle de Spine ; la transformation des particules utilise les propres paramètres et le décalage supérieur du système de particules.",enableCollision:"Activer la collision",collisionObjects:"Objets de collision participants",colliderDisabled:"{name} (collisionneurs désactivés)",clearCollider:"Effacer l'objet de collision {name}",addCollider:"Ajouter des objets de collision de scène",noAvailableColliders:"Aucun objet de collision à ajouter",noCollidersSelected:"Aucun objet de collision n'est sélectionné et les particules actuelles n'entreront pas en collision.",available:"Disponible",disabled:"Désactivé",collisionHint:"Seuls les objets de collision de scène ajoutés et activés participeront à la collision du système de particules actuel.",enableSubEmitter:"Activer les sous-émetteurs",triggerTiming:"Choisissez l'heure de déclenchement",birth:"né",death:"mourir",collision:"collision",chooseTarget:"Sélectionnez le système de particules cible",noTarget:"Aucun (système de particules)",deleteSubEmitter:"Supprimer ce sous-émetteur",probability:"probabilité d'émission",collisionLimit:"Limite de collision",inherit:"hériter",colorInheritMode:"Méthode d'héritage des couleurs",add:"Ajouter",replace:"couverture",addSubEmitter:"+ Ajout d'un nouveau sous-émetteur",inheritNone:"Aucun (par défaut)",inheritAll:"Toutes les propriétés",inheritColor:"couleur",inheritScale:"taille",inheritRotation:"tourner",inheritLife:"cycle de vie"},hN={title:"Propriétés Spine",name:"Nom Spine",xPosition:"Position X",yPosition:"Position Y",rotation:"Rotation",scaleX:"Échelle X",scaleY:"Échelle Y",startTime:"Heure de début",resources:"Ressources Spine",chooseFolder:"Sélectionnez le dossier et chargez",folderHint:"Lisez JSON / SKEL, Atlas et toutes les textures d'un dossier en même temps ; les ressources peuvent toujours être remplacées individuellement ci-dessous.",choose:"choisir",chooseMultiple:"Sélectionner (choix multiples)",loading:"chargement…",load:"↧ Charger",clear:"Clair",supportNote:"Prise en charge de Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Chargement à la demande lorsque la version correspondante est en cours d'exécution · Local hors ligne",currentResource:"Ressource actuelle {version}",animations:"Animations Spine",noAnimations:"Aucune animation disponible",timelineAnimation:"Lire l'animation sur la chronologie",no:"aucun",hierarchy:"Hiérarchie",clearBoneTitle:"Cliquez pour effacer la sélection d'os",noBoneTitle:"Aucun os n'est actuellement sélectionné",clearBone:"Effacer les os sélectionnés : {name}",currentBone:"Squelette actuel :",clearSlotTitle:"Cliquez pour effacer la sélection d'emplacement",noSlotTitle:"Aucun emplacement n'est actuellement sélectionné",clearSlot:"Effacer l'emplacement sélectionné : {name}",currentSlot:"Emplacement actuel :",notSelected:"Non sélectionné",expandAll:"Tout développer",collapseAll:"Tout réduire",bones:"squelette",slots:"fente",notLoaded:"Non chargé Spine",searchBones:"Rechercher des os",searchBonesPlaceholder:"Rechercher le nom de l'os…",clearSearch:"Effacer la recherche",clearBoneSearch:"Recherche osseuse claire",noMatchingBones:"Aucun os correspondant trouvé",expandChildren:"Développer les os enfants",collapseChildren:"Réduire les os de l'enfant",notLoadedSlots:"Emplacement Spine non chargé",searchSlots:"Rechercher des créneaux",searchSlotsPlaceholder:"Rechercher le nom de l'emplacement ou de l'accessoire…",clearSlotSearch:"Effacer la recherche de créneau",noMatchingSlots:"Aucun emplacement correspondant trouvé",slotTitle:"{name} (squelette : {bone}, accessoire : {attachment})",empty:"nul",textureSummary:"{count} Zhang : {names}",textureImages:"Images de textures",missingFolderAssets:"Le dossier sélectionné est manquant : {missing}",chooseAssets:"Veuillez sélectionner les données Spine, Atlas et toutes les images de texture dans l'ordre"},fN={title:"Aide",subtitle:"Démarrage rapide de la création de particules à l'enregistrement et à l'exportation",close:"Fermer les instructions",closeShort:"Fermer (Échap)",quickStart:"démarrage rapide",stepCreate:"Créer un objet : utilisez +Particles / +Collision / +Path / +Spine dans « Objet de scène » à gauche pour ajouter un objet de scène.",stepEdit:`Modifier les particules : sélectionnez le système de particules et ajustez "Mode d'émission → Forme de l'émetteur → Propriétés des particules → Apparence et ressources → Modificateur".`,stepPreview:"Vérifiez l'effet : la chronologie inférieure peut être lue, mise en pause, image par image ou glissée ; il sera automatiquement recalculé après modification des paramètres.",stepExport:'Enregistrer et exporter : utilisez « Enregistrer la configuration » pour conserver le projet ; "Exporter le package Spine Json / images / .spine" pour sortir le produit fini.',quickNote:"« Réinitialiser » sur le côté droit du titre de chaque groupe de modules peut restaurer les paramètres par défaut du groupe ; les paramètres système seront automatiquement enregistrés dans le navigateur actuel.",commonOps:"Actions courantes",eye:"petits yeux",eyeDesc:"Afficher/masquer les objets individuellement ; les systèmes de particules cachées ne sont pas exportés.",copyDesc:"Copie entièrement l'objet actuellement sélectionné pour faciliter la comparaison des différents paramètres.",backgroundDesc:"Téléchargez l'image de référence et ajustez la position et la transparence pour l'aperçu du canevas uniquement.",settingsDesc:"La disposition de l'interface de gestion, l'affichage auxiliaire, la balance, etc. sont automatiquement enregistrés dans le navigateur.",undoDesc:"Ctrl+Z se rétracte d'un pas ; le nombre maximum d'étapes peut être ajusté dans les paramètres du système.",spineBoneDesc:"Recherchez et sélectionnez un os dans l'arborescence hiérarchique, qui peut être utilisé par l'émetteur de particules à suivre.",shortcuts:"Raccourcis",undoShortcut:"Annuler l'étape précédente",saveShortcut:"Enregistrer la configuration",panShortcut:"Faites glisser la toile",translateShortcut:"Outil de déplacement",rotateShortcut:"Outil rotatif",scaleShortcut:"Outil Zoom",playShortcut:"lecture/pause",startShortcut:"Revenir à la première image",shortcutNote:"Q / W / E / R devez d'abord cliquer sur la toile ; lorsque le curseur est dans la zone de saisie, la touche de raccourci à touche unique ne sera pas déclenchée.",modules:"Guide des modules",configTitle:"Gestion des configurations",saveConfigDesc:"Enregistrez tous les objets et paramètres de scène actuels en tant que fichiers de projet JSON (Ctrl+S est également pris en charge).",loadConfigDesc:"Sélectionnez le fichier de configuration local pour restaurer le projet complet.",presetDesc:"Sélectionnez une application rapide par défaut dans la liste déroulante ; cliquez sur la liste déroulante pour actualiser la liste.",configScope:"portée",configScopeDesc:"La configuration contient des objets et des paramètres ; les paramètres de l'interface et du système sont stockés séparément dans le navigateur.",sceneTitle:"objet de scène",particleDesc:"objet de base. La position, le décalage, la rotation, la mise à l'échelle et la graine aléatoire peuvent être définis ; la même graine peut reproduire le même effet.",colliderDesc:"Cercle/ellipse/rectangle/polygone/personnalisé, prend en charge le rebond physique, la pause, la destruction et le mouvement le long du chemin.",pathDesc:"Chemin de Bézier avec prise en charge des points d'ancrage, poignées de contrôle, fermeture, couleur et formes prédéfinies.",spineDesc:"Chargez les données Spine, Atlas et les textures, parcourez les os et les emplacements et suivez les émetteurs.",sceneCommonDesc:"Les objets peuvent être révélés et copiés indépendamment ; les systèmes de particules cachées ne sont pas exportés.",emissionDesc:"Tir continu, rafale, retard et durée de boucle en trois étapes de démarrage/boucle/fin.",burstDesc:"Émet un nombre spécifié de particules à la fois.",delayDesc:"Le temps d'attente avant le début de l'émission, correspondant à l'extrémité gauche de la barre de particules.",loopNote:"La persistance de la boucle ne prend pas en charge le suivi des os et des chemins, et les paramètres suivants seront restaurés lors du changement.",shapeDesc:"Zone d'apparition d'un point, d'un cercle, d'un rectangle, d'un cône ou d'un chemin. Les cercles/cônes prennent en charge les rayons internes et externes, et les rectangles prennent en charge la largeur et la hauteur internes et externes.",angleDesc:"Fixe, aléatoire, radial, trajectoire normale ou tangente à la trajectoire.",initialDesc:"Le cycle de vie, la vitesse, la mise à l'échelle et la rotation supportent la direction fixe, aléatoire, la courbe et la rotation peuvent suivre la direction de lancement.",overLifeDesc:"Le grossissement de la vitesse, le grossissement du zoom et la vitesse de rotation peuvent être contrôlés par la courbe du cycle de vie.",alphaDesc:"Supports de transparence fixes ou courbes ; Le mode courbe peut suivre dérivé, linéaire ou Bézier.",imageDesc:"Image unique ou image de séquence, randomisation du poids de plusieurs images, point pivot, couleur, mode de fusion et transparence indépendante.",sequenceDesc:"Les méthodes de lecture incluent le masquage ponctuel, le gel ponctuel, la boucle avant et la boucle inverse.",noiseDesc:"Générez des traces de gigue et contrôlez l’intensité, la portée et la vitesse.",gravityDesc:"Courbes d'intensité de gravité, de vent et de cycle de vie.",forceDesc:"Champs de force globaux, vortex, adsorption et collisions.",trailDesc:"Actifs de fin indépendants, nombre d’os, courbes de longueur, largeur, forme, couleur et transparence.",followDesc:"L'émetteur peut suivre un chemin ou un os Spine.",collisionDesc:"Sélectionnez les objets de collision de scène et les réponses aux collisions de particules.",exportDesc:"Définissez le chemin de l'image, la version Spine, la courbe d'images clés, FPS, les images entières, le pool d'os et l'animation vide.",exportButtonsDesc:"Vous pouvez exporter Spine JSON, des images ZIP ou générer des projets .spine via le connecteur.",connectorTitle:"Mode d'emploi du connecteur Spine",connectorIntro:"Le connecteur transmet le JSON et les images générées par la page Web au Spine qui a été installé et activé sur la machine locale, et les convertit en projets .spine modifiables.",prerequisite:"chargement initial",prerequisiteDesc:"L'ordinateur a Spine installé et activé, et le connecteur de bureau a été lancé.",download:"télécharger",webSide:"page web",webSideDesc:"Une fois que « Connecteur disponible · Spine est prêt » s'affiche, cliquez sur « Exporter le package .spine ».",authorization:"première autorisation",authorizationDesc:"La première connexion doit vérifier la source du site Web et l'autoriser une fois ; cette machine enregistre la liste blanche d'autorisation.",pathSetup:"Paramètres du chemin",pathSetupDesc:"Le connecteur détectera automatiquement Spine ; s'il est introuvable, vous pouvez spécifier manuellement le chemin de l'application.",downloadResult:"Télécharger les résultats",downloadResultDesc:"Obtenez le package ZIP, qui contient le projet .spine et le répertoire d'images.",version:"Version",versionDesc:"Le connecteur correspond automatiquement à Spine 3.8~4.3 selon la version JSON.",security:"Sécurité",securityDesc:"Écoutez uniquement l'adresse locale, l'autorisation est enregistrée dans le connecteur et les fichiers temporaires sont nettoyés après conversion.",differenceTitle:"Quelle est la différence entre configurer et exporter ?",differenceDesc:`« Enregistrer la configuration » enregistre tous les objets et paramètres pouvant être modifiés ; "Exporter Spine Json" exporte uniquement le système de particules affiché et intègre les résultats de collision, de suivi, de fuite et de sous-émetteur dans des données d'animation indépendantes.`},pN={confirmLoopFollowEnter:"Après être entré en mode continu de boucle, les paramètres de suivi des particules seront invalides et restaurés à leur valeur par défaut. Continuer?",confirmLoopFollowExit:"Après avoir quitté le mode de persistance de boucle, les paramètres de suivi des particules seront invalides et restaurés à leurs valeurs par défaut. Continuer?",invalidJson:"Le fichier de configuration n'est pas valide JSON",invalidConfigFormat:"Pas le profil de l'éditeur SpineParticle",unsupportedConfigVersion:"Version de configuration non encore prise en charge : {version}",missingScene:"Le fichier de configuration ne contient pas de données complètes sur la scène",missingEmbeddedSpine:"La configuration ne contient pas de ressources originales Spine réutilisables",chooseJsonConfig:"Veuillez sélectionner un fichier de configuration .json",settingsInvalidJson:"Le cache des paramètres système n'est pas valide JSON",settingsFormat:"Pas le cache des paramètres système de l'éditeur SpineParticle",settingsVersion:"La version de la configuration du système n'est pas encore prise en charge : {version}",settingsMissing:"Le cache des paramètres système ne contient pas de paramètres",noExportableImages:"Il n'y a pas d'images exportables pour le système de particules actuellement visible",invalidZipPath:"ZIP Chemin de fichier invalide",spineFileType:"Les données Spine ne prennent en charge que .json ou .skel",atlasFileType:"Les fichiers Atlas ne prennent en charge que .atlas",chooseTexture:"Veuillez sélectionner au moins une image de texture",binaryParseFailed:"Échec de l'analyse binaire Spine (4.3 : {v43} ; ancienne version : {v42})",invalidSpineJson:"Spine JSON Format de fichier invalide",unsupportedSpineJsonVersion:"La version Spine JSON n'est pas prise en charge, seul {versions} est pris en charge",unsupportedSpineDataVersion:"La version des données Spine n'est pas prise en charge, seul {versions} est pris en charge",embeddedReadFailed:"Impossible de lire le fichier Spine intégré : {name}",missingImageWarning:`L'image "{file}" est manquante ou présente des dimensions illisibles, chemin conservé.`,missingTrailImageWarning:`L'image de fin "{file}" est manquante et le chemin a été conservé.`,emptyCacheWarning:"Aucun framebuffer disponible pour '{name}'.",readExportImageFailed:"Impossible de lire l'image exportée : {name}",connectorOffline:"Connecteur local Spine non détecté, veuillez d'abord activer le connecteur",connectorHttpError:"Le connecteur Spine renvoie l'erreur : HTTP {status}",invalidTrailUV:"Données UV non valides pour le maillage final '{name}'",missingTrailVertices:"Le maillage final '{name}' ne contient pas de données de sommet",trailIndexOutOfRange:"Indice triangulaire du maillage final '{name}' hors limites",invalidTrailHull:`Le numéro de contour extérieur du maillage final "{name}" n'est pas valide`,trailHullIndexOutOfRange:`L'index du bord du contour extérieur du maillage final "{name}" est hors limites`,invalidInfluenceCount:"Le maillage final « {name} » contient un nombre non valide de poids d'os.",missingBoneReference:"Le maillage final '{name}' fait référence à un os inexistant",invalidWeight:'La grille finale "{name}" contient des données de poids non valides',weightSum:"Les poids des sommets du maillage final '{name}' ne totalisent pas 1",vertexCountMismatch:"Le maillage final '{name}' a un nombre incohérent de sommets et d'UV",invalidInherit:"La valeur héritée « {inherit} » pour l'os « {name} » n'est pas conforme au format Spine {version} JSON.",trailBoneParent:`L'os arrière "{name}" doit être directement suspendu sous l'os du système de particules et ne peut pas former de chaîne osseuse.`,trailSlotEmpty:`L'emplacement de queue pondéré "{name}" ne peut pas utiliser de pièces jointes vides. La mise à l'échelle osseuse correspondante doit être fixée à 0 en phase de non-apparition ou de mort.`,spine38Version:"Spine 3.8 L'ID de version exporté doit être 3.8",spine38Inherit:`Spine 3.8 Bone "{name}" doit utiliser la transformation et ne peut pas utiliser l'héritage`,spine38SlotColor:"La chronologie des couleurs de l'emplacement Spine 3.8 doit utiliser color / twoColor",spine38AttachmentName:"Spine 3.8 L'image cachée de la chronologie de la pièce jointe doit être explicitement écrite en nom : null",spine38RotationAngle:"Spine 3.8 Vous devez utiliser l'angle pour faire pivoter l'axe du temps",spine38Curve:"Spine 3.8 ne prend pas en charge le format de courbe de tableau 4.x",unsupportedExportVersion:"La version exportée n'est pas prise en charge, seul Spine {versions} est pris en charge",exportVersionMismatch:"Version d'exportation incohérente : définie sur Spine {expected}, JSON marquée comme Spine {actual}",exportMissingBones:"Le résultat de l'exportation ne contient pas d'os",missingAtlasTexture:"La texture référencée par Atlas n'est pas sélectionnée : {name}"},mN={label:"Langue",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},gN={app:GO,common:WO,toolbar:qO,settings:KO,config:JO,presets:ZO,curve:QO,gradient:eN,attributeControl:tN,pivot:iN,image:nN,timeline:sN,emission:rN,attributes:oN,appearance:aN,renderLayer:lN,export:{title:"Paramètres d’export",reset:"Réinitialiser les paramètres d'exportation",imagesPath:"Chemin de l'image (Chemin des images Spine)",spineVersion:"Version de Spine",keyframeCurve:"Courbe d'interpolation d'images clés",linear:"Linéaire",smoothBezier:"Bézier Lisse (Lisse Bézier)",bezierHelp:"Smooth Bezier s'adapte au mouvement continu dans la tolérance d'erreur ; la naissance, la mort, le changement d'attachement et les mutations utilisent toujours des images clés d'étape.",spine38Help:"Spine 3.8 ne prend pas en charge le tableau Bézier par canal de 4.x et est converti en images clés linéaires par morceaux à tolérance réduite lors de l'exportation.",fps:"FPS d’export",omitFps:"N'écrivez pas de fps",fpsHelp:`Conservez les secondes réelles de l'animation inchangées lors de la modification de FPS ; "Ne pas écrire de fps" omet uniquement les métadonnées fps de Spine.`,integerFrames:"Alignement du cadre entier",bonePool:"Pool d'objets osseux",excludeEmpty:"Exclure les animations sans contenu",baking:"L'animation est recalculée et cuite",exportJsonTitle:"Exporter Spine {version} JSON",preparing:"Préparation à l'exportation...",exportJson:"Exporter Spine JSON",exportImagesTitle:"Téléchargez séparément l'image utilisée par le système de particules actuel ZIP",organizingImages:"Tri des images...",exportImages:"Exporter les images ZIP",generatingProject:"Génération du projet...",exportSpine:"Exporter le package .spine",authorize:"Autoriser le site Web actuel",authorizeTitle:"Autoriser le site web actuel dans le connecteur natif",refreshConnector:"Revérifiez le connecteur",refresh:"rafraîchir",recalculating:"Recalcul de l'animation des particules...",exported:"Spine {version} exportés : systèmes de particules {systems}, animations {animations}, os racinaires {bones} {warning}",resourceWarning:";{count} astuces sur les ressources (les images manquantes sont toujours exportées)",timeout:"Recalcul du délai d'expiration de l'animation, veuillez confirmer que la page est toujours en cours d'exécution et réessayer",preparingProject:"Trier les images et appeler cette machine Spine…",projectExported:"{fileName} a été généré : y compris le projet .spine et les images {images}, Spine {version}",collectingImages:"Rassembler les images actuellement utilisées par le système de particules...",imagesExported:"{fileName} a été généré : {folder}/ contient des images {images}",connectorChecking:"Détection du connecteur Spine local...",connectorOffline:"Le connecteur Spine local n’est pas démarré",spineNotFound:"Le connecteur est démarré, mais Spine est introuvable",notAuthorized:"Le connecteur est démarré, mais ce site n’est pas autorisé",connectorReady:"Connecteur disponible · Spine prêt",connectorBusy:"Recalcul et génération du projet Spine",connectorGenerate:"Générer un projet Spine {version} avec Spine local",unknown:"inconnu",checking:"Vérification",offline:"Hors ligne",notFound:"Spine introuvable",unauthorized:"Non autorisé",projectTransferTitle:"Exporter le package Spine",projectTransferDetail:"Recalcul de l'animation des particules...",projectTransferDownload:"Le package du projet Spine a été téléchargé",generatingJson:"Génération de Spine JSON…",preparingProjectFiles:"Rassemblement des photos du projet...",uploading:"Téléchargement des données vers le connecteur Spine...",spineProcessing:"Spine est en train de convertir le projet, veuillez patienter...",downloadingProject:"Téléchargement du package de projet Spine généré...",handingToBrowser:"Passage au navigateur pour le téléchargement..."},transfer:cN,scene:dN,modifiers:uN,spine:hN,help:fN,errors:pN,language:mN},vN={resizeTimeline:"ドラッグしてタイムラインの高さを調整します",systems:"システム",particlesBones:"粒子(骨)",rootBone:"根の骨",hudTip:"ホイールズーム・左クリックでキャンバスをドラッグ",title:"Spineパーティクルエディター-Yeomai"},bN={close:"閉じる",reset:"リセット",add:"追加",remove:"削除",delete:"削除",clear:"クリア",cancel:"キャンセル",confirm:"確定",none:"なし",enabled:"有効",disabled:"無効",fixed:"固定",random:"ランダム",curve:"カーブ",followExport:"エクスポート設定に従う",linear:"リニア",bezier:"ベジェ",above:"上",below:"下",left:"左",right:"右",seconds:"秒",frames:"フレーム"},yN={settings:"設定",undo:"元に戻す (Ctrl+Z)",pan:"キャンバス移動 (Q)",translate:"移動 (W)",rotate:"回転 (E)",scale:"拡大縮小 (R)",zoomIn:"拡大",zoomOut:"縮小",fitView:"キャンバスに合わせる",toggleGrid:"グリッド切替",resetView:"ビューをリセット",background:"背景",backgroundSettings:"背景画像設定",changeBackground:"画像を変更",uploadBackground:"画像をアップロード",clearBackground:"背景をクリア",noBackground:"画像なし",backgroundX:"背景画像のXオフセット",backgroundY:"背景画像のYオフセット",backgroundOpacity:"背景画像の透明度",opacity:"不透明度",help:"ヘルプ",openHelp:"ヘルプを開く"},xN={title:"システム設定",layout:"インターフェースのレイアウト",parameterPanelPosition:"パラメータパネルの位置",panelOnRight:"パラメータパネルは右側に表示されます",history:"動作履歴",maxUndo:"戻る最大ステップ数",canvasGuides:"キャンバス補助ディスプレイ",emitter:"発射点",bones:"骨の接続",bonePointSize:"骨点描画サイズ",boneAxisSize:"軸描画サイズ",skinMesh:"スキンメッシュ",enableTicks:"ティックを有効にする",tickFontSize:"文字サイズの拡大縮小",tickWidth:"目盛りの太さ",axisColor:"軸の色",showAxisLabels:"表示スケール値",cacheNote:"システム設定全体が現在のブラウザに自動的に保存されます"},wN={title:"設定管理",save:"設定を保存",saveTitle:"すべてのエディタ設定を保存する (Ctrl+S)",load:"設定を読み込む",loadTitle:"ローカルエディタ設定をロードする",presets:"プリセットリスト",selectPreset:"プリセットを選択",noPresets:"プリセットなし",saved:"設定はローカルに保存されました",loading:"設定を読み込み中…",loaded:"ロード済み: {name}",presetLoading:"プリセットをロード中…",presetLoaded:"ロードされたプリセット: {name}",presetNamingError:"{message}、デフォルトのファイル名を確認してください",presetTransferTitle:"プリセットをロードする",presetDownloading:"{file}をダウンロード中…",presetParsing:"デフォルト設定を解析しています...",presetRestoring:"デフォルトのリソースを解析して復元しています...",presetComplete:"プリセットのロードが完了しました",presetListError:"プリセットリストを読み取れません",presetReadError:"プリセットを読み取れません: {file}"},SN={particleSweep:"1.パーティクルスイープ",barBlocks:"2.バーブロック",forceTrail:"3.フォースフィールドトレイル",lightningSequence:"4.雷シーケンス",texturePivot:"5.テクスチャピボット",subEmitter:"6.サブエミッター"},CN={bezierHint:"四角いハンドルをドラッグして円弧を調整します。 · 空白スペースをダブルクリックして新しいスペースを作成します。 · ノードをダブルクリックして削除します。",linearHint:"空白スペースをダブルクリックして、新しいスペースを作成します。ノードをダブルクリックして削除します。ノードをドラッグして調整します。",resetTitle:"デフォルトのカーブを復元する"},AN={addTitle:"リボンをダブルクリックしてカラーマークを追加します",color:"カラーコード",colorValue:"カラースケールのカラー値",position:"カラーマーク位置",addMiddle:"真ん中に色を入れる",delete:"現在のカラーパッチを削除します",hint:"カラーバンドをダブルクリックして新規追加・カラーマークをドラッグして位置を調整・カラーマークをダブルクリックして削除"},TN={angleOffset:"角度オフセット",value:"数値",lower:"下限",upper:"上限",rangeLower:"範囲の下限",rangeUpper:"上限範囲",curveInput:"曲線入力→",direction:"発射方向"},EN={title:"マップのピボットポイント",zoomOut:"ズームアウト",zoomIn:"拡大する",expand:"全画面へのズーム操作",interaction:"左クリック/ドラッグしてピボット ポイントを設定します。 · 右クリックしてキャンバスをドラッグします。 · スクロール ホイールでズームします。",previewAlt:"ピボットポイントのプレビュー",noImage:"画像が選択されていません",resetCenter:"中央に再配置 (50%、50%)",coordinates:"軸点座標(%)",rotationTest:"軸回転試験",static:"まだ",spin:"回転",swing:"スイング",rotationAlt:"回転試験",topLeft:"左上",top:"すぐ上",topRight:"右上",left:"右左",center:"真ん中",right:"右",bottomLeft:"左下",bottom:"真下・底",bottomRight:"右下"},_N={chooseSequence:"連番フレーム画像を選択",chooseLocal:"ローカル画像を選択",subfolder:"サブフォルダー",name:"名前",restore:"{name}を復元する",deleteResource:"画像リソースを削除する",imageMode:"ピクチャーモード",fixed:"固定",sequence:"シーケンス",playbackMode:"プレイモード",onceHide:"1回・最終フレームで非表示",onceHold:"1回・最終フレームを保持",loopForward:"正方向ループ",loopReverse:"逆方向ループ",playbackFps:"再生フレームレート",chooseSequenceMulti:"シーケンスフレームの選択(複数選択)",weight:"重み %",unlockWeight:"プロポーションロックを解除する",lockWeight:"現在の比率をロックする",pivot:"テクスチャピボット",collapsePivot:"折り畳むピボットポイントの調整",expandPivot:"ピボットポイントの調整を拡張する",pivotModal:"テクスチャ回転軸ポイント大画面リファインメント",pivotModalDesc:"下のマップ上の任意の場所をクリックまたはドラッグして、パーティクルの回転/スイング中心を正確に設定します。",pivotZoomHint:"100% ~ 400% の倍率をサポートし、先端または根元を正確に狙うことができます。",confirmPivot:"ピボットポイントを決定して保存する",noSequence:"シーケンスフレームが選択されていません",firstFrame:"フレーム 1",firstImage:"最初の写真",lastImage:"最後の写真",pivotOn:"オープン済み: X {x}% | Y {y}%",pivotOff:"オンになっていません。デフォルトは画像の中心付近 (50%、50%)",pivotCustom:"ピボット ポイントがカスタマイズされました: X {x}% | Y {y}%",frameCountOne:"1フレーム・{name}",frameCountMany:"{count}フレーム・{first}→{last}",sequenceSelected:"{count} フレームが選択され、{first}-{last} の順序で再生されます"},MN={play:"プレイ(D)",pause:"一時停止(D)",toStart:"最初のフレームに戻る(S)",previous:"前のフレーム",next:"次のフレーム",toEnd:"最後のフレームに移動",continuousLoop:"連続ループ再生",abLoop:"独立した A/B 区間ループ",abLoopShort:"AB ループ",abRange:"AB サイクル間隔",playbackStart:"カスタム再生開始フレーム",playbackEnd:"カスタム再生終了フレーム",startFrame:"再生開始フレーム",endFrame:"再生終了フレーム",frame:"フレーム",emission:"放出中",particleLife:"パーティクル存在",spineAnimation:"Spine アニメーション",ownerAnimation:"所属アニメーション",setOwnerAnimation:"現在のパーティクル システムが属するアニメーションを設定します",chooseOwnerAnimation:"アニメーションを選択してください",animationName:"アニメ名",renameAnimation:"現在のアニメーションの名前を変更する",rename:"名前の変更",newAnimation:"+ 新しい",keepOneAnimation:"少なくとも 1 つのアニメーションを保持する必要があります",spinePreview:"Spine プレビュー アニメーション",noSpineAnimation:"利用できる Spine アニメーションはありません",none:"なし",systemName:"システム {index}",dragLoopDuration:"ドラッグループセグメントの継続時間",dragEmissionDuration:"ドラッグ時間",dragSpineStart:"ドラッグしてアニメーションの開始時間を調整します",noAnimationData:"現在、表示するアニメーション データがありません。",animationNameEmpty:"アニメーション名を空にすることはできません",animationNameDuplicate:"アニメーション名を繰り返すことはできません",animationRenameFailed:"アニメーション名は変更できません",zoomIn:"拡大する",zoomOut:"ズームアウト",zoomFit:"適度",frameStatus:"フレーム {current} / {total}"},PN={title:"エミッションモード",reset:"送信モードパラメータをリセット",stream:"ストリーム",burst:"バースト",normalStream:"通常ストリーム",loopStream:"ループストリーム",rate:"放出レート",duration:"放出時間",loopDuration:"発射持続時間 (f)",generateStart:"開始ループアニメーションを生成する",generateEnd:"ループ終了アニメーションを生成する",customDuration:"期間を指定する",auto:"自動{frames}f",startLoopDuration:"ループセグメントの開始時間",endLoopDuration:"ループセグメントの終了時間",loopWarning:"ループ永続モードは、ボーン追跡とパス追跡をサポートしていません。パーティクルの次の設定は、開始または終了時にデフォルト値に復元されます。",burstCount:"一度の放出数",delay:"遅延時間",shapeTitle:"エミッター形状",shapeReset:"エミッタ形状パラメータをリセット",shape:"形",point:"点",circle:"円",rect:"矩形",cone:"円錐",path:"パス",innerDiameter:"内径",outerDiameter:"外径",innerRadius:"内半径",outerRadius:"外半径",coneDirection:"テーパ方向",coneAngle:"テーパー開き角度",innerWidth:"内幅",innerHeight:"高い内側",outerWidth:"外幅",outerHeight:"エクストラハイ",selectPath:"パスの選択",noPath:"パスなし (ポイント放出)",birthDistribution:"出生分布",evenDistribution:"等間隔固定分布",randomDistribution:"ランダムな分布",emissionAngle:"打ち出し角",radial:"ラジアル(中心外側)",pathNormal:"パスに対して垂直",pathTangent:"パス方向に沿って",fixedAngle:"固定角度",baseAngle:"底角",randomRange:"ランダムな範囲",showShape:"形状を表示"},IN={title:"パーティクル属性",reset:"パーティクル属性パラメータをリセット",initialParams:"パーティクル初期値",initialLife:"初期ライフサイクル",randomSample:"ランダムサンプリング →",initialSpeed:"初速",initialScale:"初期スケーリング",uniform:"統一された",separateXY:"XY分離",scaleX:"ズームX",scaleY:"ズームY",initialRotation:"初期回転",lifecycleTitle:"ライフタイム中の変化",speedOverLife:"ライフサイクル速度",speedMultiplier:"スピードマルチプライヤー",lifeTo:"ライフサイクル →",scaleOverLife:"ライフサイクル中のスケーリング",scaleMultiplier:"ズーム倍率",multiplierX:"倍率",multiplierY:"倍率Y",rotationOverLife:"ライフサイクル中に回転する",rotationSpeed:"回転速度"},kN={title:"外観とリソース",reset:"外観とリソースのパラメータをリセットする",opacity:"不透明度",curveMode:"カーブモード",transparent:"0(透明)",opaque:"1(不透明)",renderLayer:"レンダー階層(Spine スロット)",top:"トップレベル",spineSlot:"Spineスロット",selectSpine:"Spineを選択してください",noSpine:"利用可能なものはありません",noSlot:"スロットがまだ選択されていません",reselect:"再選択",selectSlot:"スロットを選択",searchSlots:"スロット名またはアクセサリ名を検索してください…",searchSlotsAria:"スロットを検索する",emptySlot:"空のスロット",noMatchingSlots:"一致するスロットがありません",above:"このスロットの絵の上に",below:"このスロットの絵の下に",followAttachment:"スロットアクセサリの表示と非表示を切り替える",previewOnly:"表示レベルの調整はエディターのプレビューにのみ影響し、エクスポートされたデータには影響しません。",imageResources:"画像リソース",addImage:"画像リソースを追加する",scale:"ズーム",color:"色",fixedColor:"固定色",randomColor:"ランダムな色",lifetime:"ライフサイクル",normal:"通常",add:"加算",multiply:"乗算",screen:"スクリーン",fixedColorValue:"固定色の値",randomColorHint:"各パーティクルは、生成時にリボンからランダムに色を選択し、ライフ サイクルを通じて変更されません。",independentAlpha:"独立した不透明度",off:"オフ"},RN={slotLabelAbove:"{spine} / {slot} · 上の写真",slotLabelBelow:"{spine} / {slot} · 写真の下",resolvedAbove:"{slot} イメージの上とそのスロットの下にレンダリングされます",resolvedBetween:"{previous} と {slot} の間でレンダリング",warningNoSpine:"Spine はロードされておらず、パーティクルが一時的に上部に表示されます。",warningNoSelection:"Spine はまだ選択されておらず、パーティクルが一時的に上部に表示されます。",warningMissingSpine:"ターゲットの Spine が存在しないため、パーティクルが一時的に上に表示されます。",warningNotReady:"ターゲット Spine の準備ができていないため、パーティクルが一時的に上部に表示されます。",warningMissingSlot:"ターゲット スロットが存在せず (リソースが置き換えられた可能性があります)、パーティクルが一時的に上部に表示されます。",warningFirstSlot:"これは最初のスロットであり、その下に表示することはできません。パーティクルは一時的に上に表示されます。"},FN={completed:"完了",failed:"操作が失敗しました"},LN={title:"シーンオブジェクト",addParticle:"パーティクルシステムを追加",addParticleShort:"+粒子",addCollider:"コライダーの追加",addColliderShort:"+衝突",addPath:"パスを追加",addPathShort:"+ パス",addSpine:"Spineを追加",copyTitle:"現在選択されているシーン オブジェクトをコピーします",showParticle:"パーティクル システムを表示する",hideParticle:"パーティクル システムを非表示にする",showCollider:"コライダーを表示",hideCollider:"コライダーを非表示にする",showPath:"パスを表示",hidePath:"パスを非表示にする",showSpine:"表示 Spine",hideSpine:"隠す",particle:"パーティクル",subEmitter:"サブエミッター",collision:"コリジョン",path:"パス",deleteParticle:"パーティクル システムの削除",deleteCollider:"コライダーの削除",deletePath:"パスを削除する",deleteSpine:"Spineを削除",empty:"シーンにはまだオブジェクトがありません",name:"名前",positionX:"X 位置",positionY:"Y 位置",offsetX:"X オフセット",offsetY:"Y オフセット",rotation:"回転",scaleX:"X スケール",scaleY:"Y スケール",seed:"ランダムシード",seedTitle:"パーティクル システム内のすべてのランダム アトリビュート、リソースの選択、モディファイアのランダム サンプリングを制御します。",randomizeSeed:"新しいグローバルランダムシードを生成する",seedHint:"初期ランダムパラメータ、リソース選択、および修飾子のランダムサンプリングを制御します。同じ種で同じ効果が再現できる",colliderTitle:"コライダーのプロパティ",colliderName:"コライダー名",type:"タイプ",circle:"ラウンド",ellipse:"楕円形",rect:"矩形",polygon:"ポリゴン",custom:"カスタマイズ",enabled:"有効にする",xPosition:"X 位置",yPosition:"Y 位置",scaleXShort:"X スケール",scaleYShort:"Y スケール",radius:"半径",radiusX:"X半径",radiusY:"Y半径",width:"幅",height:"高い",sides:"辺の数",collisionResponse:"クラッシュレスポンス",physics:"物理学 (バウンス/摩擦)",pause:"一時停止(停止)",destroy:"消えます(すぐに破壊します)",elasticity:"弾力性 (0-1)",friction:"摩擦 (0-1)",followPath:"道をたどってください",targetPath:"ターゲットパス",notSelected:"(選択されていません)",moveDuration:"移動時間(秒)",followDirection:"パスに沿った方向",moveProgressCurve:"進行曲線の移動",moveProgressHelp:"横軸: リアルタイム/移動時間。縦軸: パスの進行状況 (0=開始点 → 1=終了点)",pathTitle:"パス属性",pathName:"パス名",closedPath:"閉じたパス",pathColor:"パスの色",pathHelp:"操作説明:",pathHelpItems:"空白スペース/曲線をダブルクリック: 新しいアンカーポイントを作成、アンカーポイントをダブルクリック: ノードを削除、2 回目のダブルクリックしてドラッグ: 新しいノードを作成してハンドルを引き出し、アンカーポイントをドラッグして位置を移動、ハンドルをドラッグして曲線を調整、Shift + ハンドルをドラッグ: 両側で完全に対称、Alt+ ハンドルをドラッグ: 片側を独立して制御、Ctrl+クリック/フレーム選択: 選択したノードを追加、Alt+クリック/フレーム選択:選択したノードを減算し、Alt キーを押しながら空白スペースをクリックします。すべての選択をクリアし、複数のノードを選択して全体としてドラッグします。",applyPresetShape:"プリセット形状を適用する",choosePreset:"プリセットを選択...",square:"四角",star:"星形",applyPreset:"プリセットを適用する",clearAnchors:"明確なアンカーポイント",panelHint:"右上隅のボタンを使用してシーン オブジェクトを作成します"},DN={title:"モディファイア",reset:"モディファイアパラメータをリセット",damping:"減衰",enableNoise:"移動ノイズを有効化",strength:"強さ",noiseRange:"変動幅",noiseSpeed:"時間流量",noiseHint:"強度制御は比率に影響を与える ・変動範囲は最大偏差を制御する ・時間の流れは変化速度を制御する",enableGravity:"重力を有効化",gravityStrength:"重力の強さ",strengthMin:"最小強度",strengthMax:"強度最大値",direction:"方向",gravityOverLife:"ライフサイクル中の重力",windOverLife:"ライフサイクルの風",axisStrength:"縦軸:強度0~1",directionHint:"右 0°、下 -90°、負の強度で方向を反転",enableWind:"風を有効化",windStrength:"風の強さ",enableForceField:"フォースフィールドを有効化",centerX:"センターX",centerY:"センターY",forceStrength:"力場の強さ",forceRadius:"力場の半径",falloffMode:"ディケイモード",constant:"一定(範囲内で速度が変化しない)",linearFalloff:"リニアフォールオフ(エッジは0)",inverseFalloff:"距離に反比例(中心が最も強くなる)",forceHint:"正の数は中心に向かって引き寄せられ、負の数は外側に反発し、力場の円をキャンバス内でドラッグできます。",showShape:"形状を表示",enableVortex:"渦を有効化",vortexHint:"正の数は反時計回り、負の数は時計回り",enableAttraction:"吸着を有効化",attractionX:"吸着点X",attractionY:"吸着点Y",attractionRadius:"吸着半径",attractionDuration:"吸着時間",delay:"遅延時間",delayMode:"ディレイモード",globalTime:"統一時間",particleLife:"単一粒子の寿命",attractionPath:"吸着法",straight:"直線",attractionHint:"遅延後、現在位置から吸着を開始します。赤い範囲に到達すると死亡します。吸着円はキャンバス内でドラッグすることができます。",enableTrail:"トレイルを有効化",trailImages:"独立した画像を後続する",addTrailImage:"末尾の画像リソースを追加する",trailRotation:"回転させる",trailBones:"後続ボーンの数",trailRatio:"トレーリング率(%)",trailLength:"トレーリングの長さ",randomRange:"ランダムな範囲",lengthRatio:"長さ比率(%)",lengthMin:"最小長さ (%)",lengthMax:"最大長さ(%)",trailWidth:"トレーリング幅",widthRatio:"幅比(%)",widthMin:"幅の最小値 (%)",widthMax:"最大幅(%)",widthScale:"幅のスケーリング",followParticle:"粒子を追跡する",lifeLengthCurve:"ライフサイクル長曲線",shapeCurve:"形状カーブ(ヘッド→テール幅)",colorMode:"カラーモード",blendMode:"ブレンドモード",fixedColor:"固定色",alphaMode:"透明度モード",opacity:"透明性",gridRows:"グリッド行数",gridCols:"グリッド列の数",trailHint:"各パーティクルは、リソースに応じて一連の兄弟末尾ボーンを生成します。パーティクル誕生時にランダムな長さと幅が決まり、同じ種を安定して再現できる",enableFollow:"エミッター追従を有効化",followMode:"フォローモード",noFollow:"なし",followPath:"道をたどってください",selectedBone:"選択されたボーン",emitterAngleMode:"送信機角度モード",fixedAngle:"固定角度",followMoveDirection:"進行方向に従ってください",moveProgressCurve:"動作進行曲線(0→1)",moveDuration:"移動時間(秒)",followSpace:"スペースに従ってください",localSpace:"ローカル空間(GEN動作)",worldSpace:"ワールド空間(パーティクル生成点の移動)",moveDirection:"進行方向",forward:"前進(始点→終点)",reverse:"リバース(終点→始点)",followOffset:"オフセット開始点(0-1)",followSpaceHint:"ローカル空間はエミッタ全体を移動します。ワールド空間は新しいパーティクルのスポーン ポイントを移動するだけで、生成されたパーティクルはワールド位置に留まります。",followTarget:"目標に従ってください:",noValidBone:"有効なボーンがまだバインドされていません。最初に Spine 階層ツリーでボーンを選択してください。",rebind:"再バインド",bind:"バインディング",selectedBoneLabel:"現在選択されているボーン:",boneLocalSpace:"ローカル空間(ボーンと一緒に動きます)",boneWorldSpace:"ワールド空間 (パーティクルは生成後に位置を維持します)",offsetX:"変位オフセットX",offsetY:"変位オフセットY",rotationOffset:"回転オフセット",scaleOffsetX:"スケールオフセットX",scaleOffsetY:"スケールオフセットY",boneFollowHint:"エミッタは、選択した Spine ボーンの位置のみに従い、Spine の回転やスケーリングを継承しません。パーティクル変換では、パーティクル システム独自のパラメータと上限オフセットが使用されます。",enableCollision:"コリジョンを有効化",collisionObjects:"参加している衝突オブジェクト",colliderDisabled:"{name} (コライダー無効)",clearCollider:"衝突オブジェクトをクリア {name}",addCollider:"シーン衝突オブジェクトを追加する",noAvailableColliders:"追加する衝突オブジェクトはありません",noCollidersSelected:"衝突オブジェクトが選択されていないため、現在のパーティクルは衝突しません。",available:"利用可能",disabled:"無効",collisionHint:"追加および有効化されたシーン衝突オブジェクトのみが、現在のパーティクル システムの衝突に参加します。",enableSubEmitter:"サブエミッターを有効化",triggerTiming:"トリガー時間を選択してください",birth:"生まれる",death:"死ぬ",collision:"衝突",chooseTarget:"ターゲットパーティクルシステムを選択してください",noTarget:"なし (パーティクル システム)",deleteSubEmitter:"このサブエミッタを削除します",probability:"放出確率",collisionLimit:"衝突限界",inherit:"継承する",colorInheritMode:"色の継承方法",add:"追加",replace:"カバー",addSubEmitter:"+ 新しいサブエミッターを追加",inheritNone:"なし (デフォルト)",inheritAll:"すべてのプロパティ",inheritColor:"色",inheritScale:"サイズ",inheritRotation:"回転させる",inheritLife:"ライフサイクル"},ON={title:"Spine プロパティ",name:"Spine 名前",xPosition:"X 位置",yPosition:"Y 位置",rotation:"回転",scaleX:"X スケール",scaleY:"Y スケール",startTime:"開始時間",resources:"Spine リソース",chooseFolder:"フォルダを選択してロードする",folderHint:"JSON / SKEL、Atlas、およびフォルダー内のすべてのテクスチャを一度に読み取ります。リソースは引き続き以下で個別に置き換えることができます。",choose:"選ぶ",chooseMultiple:"選択(複数の選択肢)",loading:"読み込み中…",load:"↧ ロード",clear:"クリア",supportNote:"Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSONをサポート · 対応するバージョンの実行時にオンデマンドでロード · ローカルオフライン",currentResource:"現在のリソース {version}",animations:"Spine アニメーション",noAnimations:"利用できるアニメーションはありません",timelineAnimation:"タイムライン上でアニメーションを再生する",no:"なし",hierarchy:"階層ツリー",clearBoneTitle:"クリックしてボーンの選択をクリアします",noBoneTitle:"現在ボーンが選択されていません",clearBone:"選択したボーンをクリア: {name}",currentBone:"現在のスケルトン:",clearSlotTitle:"クリックしてスロットの選択をクリアします",noSlotTitle:"現在スロットが選択されていません",clearSlot:"選択したスロットをクリア: {name}",currentSlot:"現在のスロット:",notSelected:"未選択",expandAll:"すべて展開",collapseAll:"すべて折りたたむ",bones:"スケルトン",slots:"スロット",notLoaded:"ロードされていません Spine",searchBones:"骨を探す",searchBonesPlaceholder:"ボーン名を検索…",clearSearch:"検索をクリア",clearBoneSearch:"クリアボーン検索",noMatchingBones:"一致するボーンが見つかりません",expandChildren:"子ボーンを展開する",collapseChildren:"子ボーンを折りたたむ",notLoadedSlots:"Spine スロットがロードされていません",searchSlots:"スロットを検索する",searchSlotsPlaceholder:"スロット名またはアクセサリ名を検索してください…",clearSlotSearch:"スロット検索をクリアする",noMatchingSlots:"一致するスロットが見つかりません",slotTitle:"{name}(スケルトン:{bone}、アタッチメント:{attachment})",empty:"ヌル",textureSummary:"{count} 張: {names}",textureImages:"テクスチャ画像",missingFolderAssets:"選択したフォルダーが見つかりません: {missing}",chooseAssets:"Spine データ、Atlas、およびすべてのテクスチャ画像を順番に選択してください"},NN={title:"ヘルプ",subtitle:"パーティクルの作成から保存、エクスポートまでクイックスタート",close:"指示を閉じる",closeShort:"閉じる (Esc)",quickStart:"クイックスタート",stepCreate:"オブジェクトの作成: 左側の「シーン オブジェクト」で +Particles / +Collision / +Path / +Spine を使用して、シーン オブジェクトを追加します。",stepEdit:"パーティクルの編集: パーティクル システムを選択し、「放出モード → エミッタ形状 → パーティクル プロパティ → 外観とリソース → モディファイア」を調整します。",stepPreview:"効果を確認します: 下部のタイムラインは再生、一時停止、フレームごと、またはドラッグできます。パラメータを変更すると、自動的に再計算されます。",stepExport:"保存とエクスポート: 「設定の保存」を使用してプロジェクトを保持します。 「Spine Json/images package/.spine packageをエクスポート」で完成品を出力します。",quickNote:"各モジュールグループのタイトルの右側にある「リセット」をクリックすると、グループのデフォルトパラメータを復元できます。システム設定は現在のブラウザに自動的に保存されます。",commonOps:"よく使う操作",eye:"小さな目",eyeDesc:"オブジェクトを個別に表示/非表示にします。非表示のパーティクル システムはエクスポートされません。",copyDesc:"現在選択されているオブジェクトを完全にコピーして、さまざまなパラメータの比較を容易にします。",backgroundDesc:"参照画像をアップロードし、キャンバスプレビューのみ位置と透明度を調整します。",settingsDesc:"管理インターフェイスのレイアウト、補助表示、スケールなどはブラウザに自動的に保存されます。",undoDesc:"Ctrl+Z は 1 ステップ後退します。最大ステップ数はシステム設定で調整できます。",spineBoneDesc:"階層ツリーでボーンを検索して選択します。これは、追跡するパーティクル エミッタで使用できます。",shortcuts:"ショートカット",undoShortcut:"前のステップを元に戻す",saveShortcut:"設定の保存",panShortcut:"キャンバスをドラッグする",translateShortcut:"変位ツール",rotateShortcut:"回転工具",scaleShortcut:"ズームツール",playShortcut:"再生/一時停止",startShortcut:"最初のフレームに戻る",shortcutNote:"Q / W / E / R は最初にキャンバスをクリックする必要があります。カーソルが入力ボックス内にある場合、単一キーのショートカット キーはトリガーされません。",modules:"機能モジュール",configTitle:"構成管理",saveConfigDesc:"現在のシーン オブジェクトとパラメータをすべてプロジェクト JSON ファイルとして保存します (Ctrl+S もサポートされています)。",loadConfigDesc:"ローカル構成ファイルを選択して、完全なプロジェクトを復元します。",presetDesc:"ドロップダウンからデフォルトのクイック適用を選択します。ドロップダウンをクリックしてリストを更新します。",configScope:"範囲",configScopeDesc:"設定にはオブジェクトとパラメータが含まれます。インターフェースとシステム設定はブラウザーに別々に保存されます。",sceneTitle:"シーンオブジェクト",particleDesc:"コアオブジェクト。位置、オフセット、回転、スケーリング、ランダム シードを設定できます。同じ種は同じ効果を再現できます。",colliderDesc:"円/楕円/長方形/多角形/カスタム、物理的なバウンス、一時停止、破壊、パスに沿った移動をサポートします。",pathDesc:"アンカー ポイント、コントロール ハンドル、クロージャー、カラー、プリセット形状をサポートするベジェ パス。",spineDesc:"Spine データ、Atlas およびテクスチャをロードし、ボーンとスロットを参照し、エミッタを追跡します。",sceneCommonDesc:"オブジェクトは個別に公開およびコピーできます。非表示のパーティクル システムはエクスポートされません。",emissionDesc:"連射、バースト、ディレイ、開始/ループ/終了の3段階ループ持続時間。",burstDesc:"指定した数のパーティクルを一度に放出します。",delayDesc:"パーティクル バーの左端に対応する、放出が開始されるまでの待ち時間。",loopNote:"ループ永続性はボーンとパスのフォローをサポートしていません。切り替え時に次の設定が復元されます。",shapeDesc:"点、円、長方形、円錐、またはパスの生成エリア。円/円錐は内部半径と外部半径をサポートし、長方形は内部と外部の幅と高さをサポートします。",angleDesc:"固定、ランダム、放射状、パス法線、またはパス接線。",initialDesc:"ライフサイクル、速度、スケーリング、回転は、固定、ランダム、カーブ、および回転をサポートしており、起動方向に従うことができます。",overLifeDesc:"ライフサイクルカーブにより速度倍率、ズーム倍率、回転速度を制御できます。",alphaDesc:"透明度は固定または曲線をサポートします。曲線モードは、派生、線形、またはベジェに従うことができます。",imageDesc:"単一の画像またはシーケンス フレーム、複数画像のウェイトのランダム化、ピボット ポイント、カラー、ブレンド モード、および独立した透明度。",sequenceDesc:"再生方法には、1 回の非表示、1 回のフリーズ、順方向ループ、および逆方向ループが含まれます。",noiseDesc:"ジッター トレースを生成し、強度、範囲、速度を制御します。",gravityDesc:"重力、風、ライフサイクルの強度曲線。",forceDesc:"グローバルな力場、渦、吸着、衝突。",trailDesc:"独立したトレーリング アセット、ボーン数、長さ、幅、形状、色、透明度のカーブ。",followDesc:"エミッタはパスまたは Spine ボーンをたどることができます。",collisionDesc:"シーン衝突オブジェクトとパーティクル衝突応答を選択します。",exportDesc:"画像パス、Spine バージョン、キーフレーム カーブ、FPS、整数フレーム、ボーン プール、空のアニメーションを設定します。",exportButtonsDesc:"コネクタを介して、Spine JSON、画像 ZIP をエクスポートしたり、.spine プロジェクトを生成したりできます。",connectorTitle:"Spine コネクタの使用説明書",connectorIntro:"コネクタは、JSON と Web ページによって生成されたイメージを、ローカル マシンにインストールされアクティブ化されている Spine に配信し、編集可能な .spine プロジェクトに変換します。",prerequisite:"フロントロード",prerequisiteDesc:"コンピューターには Spine がインストールされてアクティブ化されており、デスクトップ コネクタが起動されています。",download:"ダウンロード",webSide:"ウェブページ",webSideDesc:"「コネクタが利用可能・Spineの準備ができました」と表示されたら、「.spineパッケージをエクスポート」をクリックします。",authorization:"最初の認可",authorizationDesc:"最初の接続では、Web サイトのソースを確認し、一度許可する必要があります。このマシンは認証ホワイトリストを保存します。",pathSetup:"パスの設定",pathSetupDesc:"コネクタは Spine を自動的に検出します。見つからない場合は、アプリケーション パスを手動で指定できます。",downloadResult:"ダウンロード結果",downloadResultDesc:".spine プロジェクトとイメージ ディレクトリが含まれる ZIP パッケージを取得します。",version:"バージョン",versionDesc:"コネクタは、JSON バージョンに応じて、Spine 3.8 ~ 4.3 に自動的に一致します。",security:"安全性",securityDesc:"ローカル アドレスのみをリッスンし、認証はコネクタに保存され、一時ファイルは変換後にクリーンアップされます。",differenceTitle:"構成とエクスポートの違いは何ですか?",differenceDesc:"「設定の保存」では、編集可能なすべてのオブジェクトとパラメータが保存されます。 「Spine Json のエクスポート」は、表示されているパーティクル システムのみをエクスポートし、コリジョン、フォロー、トレーリング、サブエミッターの結果を独立したアニメーション データにベイクします。"},$N={confirmLoopFollowEnter:"ループ連続モードに入ると、パーティクル追従設定は無効になり、デフォルト値に戻ります。続く?",confirmLoopFollowExit:"ループ永続モードを終了すると、パーティクル追従設定は無効になり、デフォルト値に戻ります。続く?",invalidJson:"構成ファイルが有効ではありません JSON",invalidConfigFormat:"SpineParticle 編集者プロフィールではありません",unsupportedConfigVersion:"構成バージョンはまだサポートされていません: {version}",missingScene:"設定ファイルに完全なシーン データがありません",missingEmbeddedSpine:"構成には再利用可能な Spine の元のリソースが含まれていません",chooseJsonConfig:".json 構成ファイルを選択してください",settingsInvalidJson:"システム設定キャッシュが有効ではありません JSON",settingsFormat:"SpineParticle エディターのシステム設定キャッシュではありません",settingsVersion:"システム構成バージョンはまだサポートされていません: {version}",settingsMissing:"システム設定キャッシュに設定がありません",noExportableImages:"現在表示されているパーティクル システムにはエクスポート可能なイメージがありません",invalidZipPath:"ZIP 無効なファイル パス",spineFileType:"Spine データは .json または .skel のみをサポートします",atlasFileType:"アトラス ファイルは .atlas のみをサポートします",chooseTexture:"少なくとも 1 つのテクスチャ画像を選択してください",binaryParseFailed:"Spine バイナリ解析に失敗しました (4.3: {v43}、旧バージョン: {v42})",invalidSpineJson:"Spine JSON 無効なファイル形式です",unsupportedSpineJsonVersion:"Spine JSON バージョンはサポートされていません。{versions} のみがサポートされています",unsupportedSpineDataVersion:"Spine データ バージョンはサポートされていません。{versions} のみがサポートされています",embeddedReadFailed:"埋め込み Spine ファイルを読み取れません: {name}",missingImageWarning:"画像「{file}」が見つからないか、読み取り不能な寸法があり、パスは保存されています。",missingTrailImageWarning:"末尾のイメージ「{file}」がありませんが、パスは保存されています。",emptyCacheWarning:"「{name}」に使用できるフレームバッファがありません。",readExportImageFailed:"エクスポートされた画像を読み取れません: {name}",connectorOffline:"ローカルの Spine コネクタが検出されません。最初にコネクタを有効にしてください",connectorHttpError:"Spine コネクタがエラーを返します: HTTP {status}",invalidTrailUV:"後続メッシュ「{name}」の UV データが無効です",missingTrailVertices:"後続メッシュ '{name}' に頂点データがありません",trailIndexOutOfRange:"後続メッシュ「{name}」の三角形インデックスが範囲外です",invalidTrailHull:"後続メッシュ「{name}」の外側輪郭番号が無効です",trailHullIndexOutOfRange:"トレーリングメッシュ「{name}」の外側輪郭エッジインデックスが範囲外です",invalidInfluenceCount:"後続メッシュ '{name}' に無効な数のボーン ウェイトが含まれています",missingBoneReference:"後続メッシュ「{name}」が存在しないボーンを参照しています",invalidWeight:"後続グリッド「{name}」に無効な重量データが含まれています",weightSum:"後続メッシュ「{name}」の頂点の重みの合計が 1 になりません",vertexCountMismatch:"後続メッシュ「{name}」の頂点と UV の数が一貫していません",invalidInherit:"ボーン「{name}」の継承値「{inherit}」は、Spine {version} JSON 形式に準拠していません",trailBoneParent:"後続のボーン「{name}」はパーティクル システム ボーンの下に直接ぶら下げる必要があり、ボーン チェーンを形成することはできません。",trailSlotEmpty:"加重末尾スロット「{name}」では空のアタッチメントを使用できません。対応するボーン スケーリングは、非出現フェーズまたは死亡フェーズでは 0 に設定する必要があります。",spine38Version:"Spine 3.8 エクスポートされるバージョン ID は 3.8 である必要があります",spine38Inherit:"Spine 3.8 ボーン「{name}」は変換を使用する必要があり、継承は使用できません",spine38SlotColor:"Spine 3.8 スロット カラー タイムラインはカラー / twoColor を使用する必要があります",spine38AttachmentName:"Spine 3.8 添付ファイルのタイムラインの非表示フレームは明示的に記述する必要があります name: null",spine38RotationAngle:"Spine 3.8 時間軸を回転す​​るには角度を使用する必要があります",spine38Curve:"Spine 3.8 は 4.x 配列曲線形式をサポートしていません",unsupportedExportVersion:"エクスポートされたバージョンはサポートされていません。Spine {versions} のみがサポートされています",exportVersionMismatch:"一貫性のないエクスポート バージョン: Spine {expected}、JSON に設定され、Spine {actual} としてマークされます",exportMissingBones:"エクスポート結果にボーンがありません",missingAtlasTexture:"Atlas によって参照されるテクスチャが選択されていません: {name}"},BN={label:"言語",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},UN={app:vN,common:bN,toolbar:yN,settings:xN,config:wN,presets:SN,curve:CN,gradient:AN,attributeControl:TN,pivot:EN,image:_N,timeline:MN,emission:PN,attributes:IN,appearance:kN,renderLayer:RN,export:{title:"エクスポート設定",reset:"エクスポート設定をリセットする",imagesPath:"画像パス (Spine 画像パス)",spineVersion:"Spine バージョン",keyframeCurve:"キーフレーム補間カーブ",linear:"リニア",smoothBezier:"スムーズ ベジェ (スムーズ Bézier)",bezierHelp:"スムーズ ベジェは連続モーションを誤差許容範囲内に適合させます。誕生、死亡、アタッチメントの切り替え、突然変異では引き続きステップ キーフレームが使用されます。",spine38Help:"Spine 3.8 は 4.x のチャネルごとの配列ベジェをサポートしておらず、エクスポート時に許容差が低減された区分的線形キーフレームに変換されます。",fps:"エクスポート FPS",omitFps:"fpsは書かないでください",fpsHelp:"FPS を変更するときは、アニメーションの実際の秒数を変更しないでください。 「fps を書かない」は、Spine の fps メタデータのみを省略します。",integerFrames:"整数フレームの位置合わせ",bonePool:"ボーン オブジェクト プール",excludeEmpty:"内容のないアニメーションを除外する",baking:"アニメーションが再計算されてベイクされています",exportJsonTitle:"エクスポート Spine {version} JSON",preparing:"エクスポートの準備中...",exportJson:"Spine JSON を書き出す",exportImagesTitle:"現在のパーティクル システム ZIP で使用されているイメージを別途ダウンロードします。",organizingImages:"写真を並べ替えています...",exportImages:"画像 ZIP を書き出す",generatingProject:"プロジェクトを生成中...",exportSpine:".spine パッケージをエクスポートする",authorize:"現在の Web サイトを認証する",authorizeTitle:"ネイティブ コネクタで現在の Web サイトを承認する",refreshConnector:"コネクタを再確認してください",refresh:"リフレッシュする",recalculating:"パーティクル アニメーションを再計算しています...",exported:"エクスポートされた Spine {version}: {systems} パーティクル システム、{animations} アニメーション、{bones} ルート ボーン {warning}",resourceWarning:";{count} リソースのヒント (不足している画像もエクスポートされます)",timeout:"アニメーションのタイムアウトを再計算します。ページがまだ実行中であることを確認して、再試行してください。",preparingProject:"写真を並べ替えて、このマシンを Spine と呼び出します…",projectExported:"{fileName} が生成されました: .spine プロジェクトと {images} 画像、Spine {version} を含む",collectingImages:"現在パーティクル システムで使用されている画像を照合しています...",imagesExported:"{fileName} が生成されました: {folder}/ {images} 画像が含まれています",connectorChecking:"ローカルの Spine コネクタを検出しています...",connectorOffline:"ローカル Spine コネクタが起動していません",spineNotFound:"コネクタは起動していますが Spine が見つかりません",notAuthorized:"コネクタは起動していますが、このサイトは未認証です",connectorReady:"コネクタ使用可能 · Spine 準備完了",connectorBusy:"Spine プロジェクトを再計算して生成中",connectorGenerate:"ローカル Spine で Spine {version} プロジェクトを生成",unknown:"未知",checking:"確認中",offline:"未起動",notFound:"Spine が見つかりません",unauthorized:"未認証",projectTransferTitle:"Spine パッケージをエクスポートする",projectTransferDetail:"パーティクル アニメーションを再計算しています...",projectTransferDownload:"Spine プロジェクト パッケージがダウンロードされました",generatingJson:"Spine JSON を生成中…",preparingProjectFiles:"プロジェクトの写真を照合中...",uploading:"Spine コネクタにデータをアップロードしています...",spineProcessing:"Spine がプロジェクトを変換中です。お待​​ちください...",downloadingProject:"生成された Spine プロジェクト パッケージをダウンロードしています...",handingToBrowser:"ダウンロードのためにブラウザに引​​き渡しています..."},transfer:FN,scene:LN,modifiers:DN,spine:ON,help:NN,errors:$N,language:BN},VN={resizeTimeline:"드래그하여 타임라인 높이 조정",systems:"체계",particlesBones:"입자(뼈)",rootBone:"뿌리뼈",hudTip:"휠 확대/축소 · 캔버스를 드래그하려면 왼쪽 클릭",title:"Spine 파티클 에디터-Yeomai"},XN={close:"닫기",reset:"초기화",add:"추가",remove:"제거",delete:"삭제",clear:"지우기",cancel:"취소",confirm:"확인",none:"없음",enabled:"사용",disabled:"사용 안 함",fixed:"고정",random:"랜덤",curve:"곡선",followExport:"내보내기 설정 따르기",linear:"선형",bezier:"베지어",above:"위",below:"아래",left:"왼쪽",right:"오른쪽",seconds:"초",frames:"프레임"},YN={settings:"설정",undo:"실행 취소 (Ctrl+Z)",pan:"캔버스 이동 (Q)",translate:"이동 (W)",rotate:"회전 (E)",scale:"크기 조절 (R)",zoomIn:"확대",zoomOut:"축소",fitView:"캔버스에 맞추기",toggleGrid:"그리드 전환",resetView:"보기 초기화",background:"배경",backgroundSettings:"배경 이미지 설정",changeBackground:"이미지 교체",uploadBackground:"이미지 업로드",clearBackground:"배경 지우기",noBackground:"이미지 없음",backgroundX:"배경 이미지 X 오프셋",backgroundY:"배경 이미지 Y 오프셋",backgroundOpacity:"배경 이미지 투명도",opacity:"불투명도",help:"도움말",openHelp:"도움말 열기"},zN={title:"시스템 설정",layout:"인터페이스 레이아웃",parameterPanelPosition:"매개변수 패널 위치",panelOnRight:"매개변수 패널이 오른쪽에 표시됩니다.",history:"운영 이력",maxUndo:"뒤로 최대 단계 수",canvasGuides:"캔버스 보조 디스플레이",emitter:"발사 지점",bones:"뼈 연결",bonePointSize:"뼈점 도면 크기",boneAxisSize:"축 도면 크기",skinMesh:"스킨드 메쉬",enableTicks:"진드기 활성화",tickFontSize:"텍스트 크기 조정",tickWidth:"눈금 표시 두께",axisColor:"축 색상",showAxisLabels:"표시 스케일 값",cacheNote:"전체 시스템 설정이 현재 브라우저에 자동으로 저장됩니다."},jN={title:"설정 관리",save:"설정 저장",saveTitle:"모든 편집기 구성 저장(Ctrl+S)",load:"설정 불러오기",loadTitle:"로컬 편집기 구성 로드",presets:"프리셋 목록",selectPreset:"프리셋 선택",noPresets:"프리셋 없음",saved:"구성이 로컬에 저장되었습니다.",loading:"구성 로드 중…",loaded:"로드됨: {name}",presetLoading:"사전 설정 로드 중…",presetLoaded:"프리셋 로드됨: {name}",presetNamingError:"{message}, 기본 파일 이름을 확인하세요",presetTransferTitle:"사전 설정 로드",presetDownloading:"{file} 다운로드 중…",presetParsing:"기본 구성을 구문 분석하는 중...",presetRestoring:"기본 리소스를 구문 분석하고 복원하는 중...",presetComplete:"프리셋 로딩 완료",presetListError:"사전 설정 목록을 읽을 수 없습니다.",presetReadError:"사전 설정을 읽을 수 없습니다: {file}"},HN={particleSweep:"1.파티클 스윕",barBlocks:"2.바 블록",forceTrail:"3.힘장 트레일",lightningSequence:"4.번개 시퀀스",texturePivot:"5.텍스처 피벗",subEmitter:"6.하위 이미터"},GN={bezierHint:"원호를 조정하려면 사각형 핸들을 드래그하세요. · 새 공간을 만들려면 빈 공간을 두 번 클릭하세요. · 삭제하려면 노드를 두 번 클릭하세요.",linearHint:"빈 공간을 더블클릭하면 새로운 공간이 생성됩니다. 삭제하려면 노드를 두 번 클릭하세요. 노드를 드래그하여 조정하세요.",resetTitle:"기본 곡선 복원"},WN={addTitle:"색상 표시를 추가하려면 리본을 두 번 클릭하세요.",color:"색상 코드",colorValue:"색상 스케일 색상 값",position:"컬러마크 위치",addMiddle:"중간에 색을 넣어주세요",delete:"현재 색상 패치 삭제",hint:"색상 밴드를 두 번 클릭하여 새 색상 추가 · 색상 표시를 드래그하여 위치 조정 · 색상 표시를 두 번 클릭하여 삭제"},qN={angleOffset:"각도 오프셋",value:"수치",lower:"하한",upper:"상한",rangeLower:"범위의 하한",rangeUpper:"상위 범위",curveInput:"곡선 입력 →",direction:"발사방향"},KN={title:"지도 피벗 포인트",zoomOut:"축소",zoomIn:"크게 하다",expand:"전체 화면으로 확대 작업",interaction:"피벗 포인트를 설정하려면 왼쪽 클릭/드래그 · 캔버스를 드래그하려면 마우스 오른쪽 버튼을 클릭 · 확대/축소하려면 휠 스크롤",previewAlt:"피벗 포인트 미리보기",noImage:"선택한 사진이 없습니다.",resetCenter:"중간에 재배치 (50%, 50%)",coordinates:"축점 좌표(%)",rotationTest:"축 회전 테스트",static:"아직",spin:"회전",swing:"그네",rotationAlt:"회전 테스트",topLeft:"왼쪽 위",top:"바로",topRight:"오른쪽 위",left:"오른쪽 왼쪽",center:"가운데",right:"오른쪽",bottomLeft:"왼쪽 아래",bottom:"바로 아래·아래",bottomRight:"오른쪽 아래"},JN={chooseSequence:"시퀀스 프레임 사진 선택",chooseLocal:"로컬 이미지 선택",subfolder:"하위 폴더",name:"이름",restore:"{name} 복원",deleteResource:"이미지 리소스 삭제",imageMode:"영상 모드",fixed:"고정",sequence:"시퀀스",playbackMode:"플레이 모드",onceHide:"1회·마지막 프레임에서 숨김",onceHold:"1회·마지막 프레임 유지",loopForward:"정방향 루프",loopReverse:"역방향 루프",playbackFps:"재생 프레임 속도",chooseSequenceMulti:"시퀀스 프레임 선택(다중 선택)",weight:"가중치 %",unlockWeight:"비율 잠금 해제",lockWeight:"현재 비율 잠금",pivot:"텍스처 피벗",collapsePivot:"피봇 포인트 조정 축소",expandPivot:"피봇 포인트 조정 확장",pivotModal:"텍스처 회전축 포인트 대형 화면 미세 조정",pivotModalDesc:"입자의 회전/스윙 중심을 정확하게 설정하려면 아래 지도의 아무 곳이나 클릭하거나 드래그하세요.",pivotZoomHint:"100% ~ 400% 배율 지원, 끝이나 뿌리를 정확하게 조준:",confirmPivot:"피봇 포인트 결정 및 저장",noSequence:"선택한 시퀀스 프레임이 없습니다.",firstFrame:"프레임 1",firstImage:"첫 번째 사진",lastImage:"마지막 사진",pivotOn:"열림: X {x}% | 와 {y}%",pivotOff:"켜지지 않음, 기본값은 이미지 중앙 주위(50%, 50%)입니다.",pivotCustom:"피벗 포인트가 사용자 정의되었습니다: X {x}% | 와 {y}%",frameCountOne:"1 프레임 · {name}",frameCountMany:"{count} 프레임 · {first} → {last}",sequenceSelected:"{count} 프레임을 선택하여 {first}~{last} 순서대로 재생하였습니다."},ZN={play:"플레이(D)",pause:"일시정지(D)",toStart:"첫 번째 프레임으로 돌아가기(S)",previous:"이전 프레임",next:"다음 프레임",toEnd:"마지막 프레임으로 이동",continuousLoop:"연속 루프 재생",abLoop:"독립 A/B 구간 루프",abLoopShort:"AB 루프",abRange:"AB 사이클 간격",playbackStart:"사용자 정의 재생 시작 프레임",playbackEnd:"사용자 정의 재생 종료 프레임",startFrame:"재생 시작 프레임",endFrame:"종료 프레임 재생",frame:"액자",emission:"이미션 중",particleLife:"파티클 존재",spineAnimation:"Spine 애니메이션",ownerAnimation:"소속 애니메이션",setOwnerAnimation:"현재 입자 시스템이 속한 애니메이션을 설정합니다.",chooseOwnerAnimation:"애니메이션을 선택하세요",animationName:"애니메이션 이름",renameAnimation:"현재 애니메이션 이름 바꾸기",rename:"이름 바꾸기",newAnimation:"+ 신규",keepOneAnimation:"하나 이상의 애니메이션을 유지해야 합니다.",spinePreview:"Spine 미리보기 애니메이션",noSpineAnimation:"사용 가능한 Spine 애니메이션이 없습니다.",none:"없음",systemName:"시스템 {index}",dragLoopDuration:"드래그 루프 세그먼트 지속 시간",dragEmissionDuration:"드래그 시간",dragSpineStart:"드래그하여 애니메이션 시작 시간 조정",noAnimationData:"현재 표시할 애니메이션 데이터가 없습니다.",animationNameEmpty:"애니메이션 이름은 비워둘 수 없습니다.",animationNameDuplicate:"애니메이션 이름은 반복할 수 없습니다.",animationRenameFailed:"애니메이션 이름을 수정할 수 없습니다",zoomIn:"크게 하다",zoomOut:"축소",zoomFit:"보통의",frameStatus:"프레임 {current} / {total}"},QN={title:"이미션 모드",reset:"전송 모드 매개변수 재설정",stream:"스트림",burst:"버스트",normalStream:"일반 스트림",loopStream:"루프 스트림",rate:"이미션 속도",duration:"이미션 시간",loopDuration:"발사 기간(f)",generateStart:"시작 루프 애니메이션 생성",generateEnd:"끝 루프 애니메이션 생성",customDuration:"기간 지정",auto:"자동 {frames}f",startLoopDuration:"루프 세그먼트 지속 시간 시작",endLoopDuration:"종료 루프 세그먼트 기간",loopWarning:"루프 지속성 모드는 뼈대 따르기 및 경로 따르기를 지원하지 않습니다. 입자 추적 설정은 들어가거나 나갈 때 기본값으로 복원됩니다.",burstCount:"1회 생성 수",delay:"지연 시간",shapeTitle:"이미터 모양",shapeReset:"이미터 모양 매개변수 재설정",shape:"모양",point:"점",circle:"원",rect:"사각형",cone:"원뿔",path:"경로",innerDiameter:"내경",outerDiameter:"외경",innerRadius:"내부 반경",outerRadius:"외부 반경",coneDirection:"테이퍼 방향",coneAngle:"테이퍼 개방 각도",innerWidth:"내부 폭",innerHeight:"높은 내부",outerWidth:"외부 폭",outerHeight:"매우 높음",selectPath:"경로 선택",noPath:"경로 없음(점 방출)",birthDistribution:"출생 분포",evenDistribution:"등간격 고정 분포",randomDistribution:"무작위 분포",emissionAngle:"발사 각도",radial:"방사형(중심 바깥쪽)",pathNormal:"경로에 수직",pathTangent:"경로 방향을 따라",fixedAngle:"고정 각도",baseAngle:"기본 각도",randomRange:"무작위 범위",showShape:"모양을 보여주다"},e$={title:"파티클 속성",reset:"입자 속성 매개변수 재설정",initialParams:"파티클 초기값",initialLife:"초기 수명주기",randomSample:"무작위 샘플링 →",initialSpeed:"초기 속도",initialScale:"초기 스케일링",uniform:"통일된",separateXY:"XY 분리",scaleX:"줌 X",scaleY:"줌 Y",initialRotation:"초기 회전",lifecycleTitle:"수명에 따른 변화",speedOverLife:"수명 주기 속도",speedMultiplier:"속도 승수",lifeTo:"수명주기 →",scaleOverLife:"수명 주기 동안 확장",scaleMultiplier:"줌 비율",multiplierX:"확대",multiplierY:"배율 Y",rotationOverLife:"수명주기 동안 회전",rotationSpeed:"회전 속도"},t$={title:"외형과 리소스",reset:"모양 및 자원 매개변수 재설정",opacity:"불투명도",curveMode:"곡선 모드",transparent:"0(투명)",opaque:"1(불투명)",renderLayer:"렌더링 레이어(Spine 슬롯)",top:"최상위 수준",spineSlot:"Spine 슬롯",selectSpine:"Spine를 선택하세요",noSpine:"사용 가능한 항목 없음",noSlot:"아직 선택한 슬롯이 없습니다.",reselect:"재선택",selectSlot:"슬롯 선택",searchSlots:"슬롯 또는 액세서리 이름을 검색하세요…",searchSlotsAria:"슬롯 검색",emptySlot:"빈 슬롯",noMatchingSlots:"일치하는 슬롯 없음",above:"이 슬롯 사진 위에",below:"이 슬롯 사진 아래",followAttachment:"슬롯 액세서리로 표시 및 숨기기",previewOnly:"표시 수준을 조정하면 편집기 미리보기에만 영향을 미치고 내보낸 데이터에는 영향을 주지 않습니다.",imageResources:"이미지 리소스",addImage:"이미지 리소스 추가",scale:"줌",color:"색상",fixedColor:"고정된 색상",randomColor:"임의의 색상",lifetime:"수명주기",normal:"일반",add:"더하기",multiply:"곱하기",screen:"스크린",fixedColorValue:"고정된 색상 값",randomColorHint:"각 입자는 생성될 때 리본에서 무작위로 색상을 선택하고 수명 주기 동안 변경되지 않습니다.",independentAlpha:"독립 불투명도",off:"끄기"},i$={slotLabelAbove:"{spine} / {slot} · 위 사진",slotLabelBelow:"{spine} / {slot} · 사진 아래",resolvedAbove:"{slot} 이미지 위와 해당 슬롯 아래에 렌더링됨",resolvedBetween:"{previous}와 {slot} 사이에서 렌더링됨",warningNoSpine:"로드된 Spine가 없으며 입자가 일시적으로 상단에 표시됩니다.",warningNoSelection:"Spine는 아직 선택되지 않았으며 입자가 일시적으로 상단에 표시됩니다.",warningMissingSpine:"대상 Spine가 존재하지 않으며 입자가 일시적으로 상단에 표시됩니다.",warningNotReady:"대상 Spine가 준비되지 않았으며 입자가 일시적으로 상단에 표시됩니다.",warningMissingSlot:"대상 슬롯이 존재하지 않으며(리소스가 교체되었을 수 있음) 파티클이 일시적으로 상단에 표시됩니다.",warningFirstSlot:"이것은 첫 번째 슬롯으로 그 아래에 표시될 수 없으며 파티클은 일시적으로 위에 표시됩니다."},n$={completed:"완전한",failed:"작업 실패"},s$={title:"장면 오브젝트",addParticle:"파티클 시스템 추가",addParticleShort:"+입자",addCollider:"충돌기 추가",addColliderShort:"+충돌",addPath:"경로 추가",addPathShort:"+ 경로",addSpine:"Spine 추가",copyTitle:"현재 선택된 장면 객체를 복사합니다.",showParticle:"입자 시스템 표시",hideParticle:"입자 시스템 숨기기",showCollider:"충돌체 표시",hideCollider:"충돌체 숨기기",showPath:"경로 표시",hidePath:"경로 숨기기",showSpine:"Spine 표시",hideSpine:"Spine 숨기기",particle:"파티클",subEmitter:"하위 이미터",collision:"충돌",path:"경로",deleteParticle:"입자 시스템 삭제",deleteCollider:"충돌체 삭제",deletePath:"경로 삭제",deleteSpine:"Spine 삭제",empty:"아직 장면에 객체가 없습니다.",name:"이름",positionX:"X 위치",positionY:"Y 위치",offsetX:"X 오프셋",offsetY:"Y 오프셋",rotation:"회전",scaleX:"X 크기",scaleY:"Y 크기",seed:"랜덤 시드",seedTitle:"입자 시스템의 모든 무작위 속성, 리소스 선택 및 수정자 무작위 샘플링을 제어합니다.",randomizeSeed:"새로운 전역 무작위 시드 생성",seedHint:"초기 무작위 매개변수, 자원 선택 및 수정자 무작위 샘플링을 제어합니다. 같은 씨앗은 같은 효과를 재현할 수 있습니다",colliderTitle:"충돌기 속성",colliderName:"충돌기 이름",type:"유형",circle:"둥근",ellipse:"타원형",rect:"구형",polygon:"다각형",custom:"사용자 정의",enabled:"~할 수 있게 하다",xPosition:"X 위치",yPosition:"Y 위치",scaleXShort:"X 크기",scaleYShort:"Y 크기",radius:"반지름",radiusX:"X 반경",radiusY:"Y 반경",width:"너비",height:"높은",sides:"면의 수",collisionResponse:"충돌 대응",physics:"물리학(바운스/마찰)",pause:"일시정지(중지)",destroy:"사라지다(즉시 파기)",elasticity:"탄력성 (0-1)",friction:"마찰(0-1)",followPath:"길을 따라가세요",targetPath:"대상 경로",notSelected:"(선택되지 않음)",moveDuration:"이동 시간(초)",followDirection:"경로를 따라 방향",moveProgressCurve:"이동 진행 곡선",moveProgressHelp:"가로축: 실시간/이동 기간; 세로축: 경로 진행(0=시작점 → 1=종료점)",pathTitle:"경로 속성",pathName:"경로 이름",closedPath:"닫힌 경로",pathColor:"경로 색상",pathHelp:"운영 지침:",pathHelpItems:"빈 공간/곡선 두 번 클릭: 새 앵커 포인트 만들기, 앵커 포인트 두 번 클릭: 노드 삭제, 두 번째로 두 번 클릭하고 드래그: 새 노드를 만들고 핸들을 당기고 앵커 포인트를 드래그하여 위치를 이동하고 핸들을 드래그하여 곡선을 조정합니다. Shift + 핸들 드래그: 양쪽에서 완전히 대칭, A lt+ 드래그 핸들: 한쪽을 독립적으로 제어, Ctrl+클릭/프레임 선택: 선택한 노드 추가, Alt+클릭/프레임 선택: 선택 항목 빼기 노드, 빈 공간에서 Alt+클릭: 모든 선택을 취소하고 여러 노드를 선택한 후 전체적으로 드래그합니다.",applyPresetShape:"사전 설정된 모양 적용",choosePreset:"사전 설정 선택...",square:"정사각형",star:"별 모양",applyPreset:"사전 설정 적용",clearAnchors:"앵커 포인트 지우기",panelHint:"오른쪽 상단에 있는 버튼을 사용하여 장면 개체를 만듭니다."},r$={title:"모디파이어",reset:"수정자 매개변수 재설정",damping:"감쇠",enableNoise:"이동 노이즈 사용",strength:"힘",noiseRange:"변동 범위",noiseSpeed:"시간 흐름율",noiseHint:"강도 제어는 비율에 영향을 미칩니다. · 변동 범위는 최대 편차를 제어합니다. · 시간 흐름은 변화 속도를 제어합니다.",enableGravity:"중력 사용",gravityStrength:"중력 강도",strengthMin:"강도 최소",strengthMax:"최대 강도",direction:"방향",gravityOverLife:"수명주기 동안의 중력",windOverLife:"라이프 사이클 바람",axisStrength:"수직축: 강도 0~1",directionHint:"오른쪽 0° · 아래쪽 -90° · 음의 강도는 방향을 바꿉니다.",enableWind:"바람 사용",windStrength:"바람의 세기",enableForceField:"힘장 사용",centerX:"센터 X",centerY:"센터 Y",forceStrength:"역장 강도",forceRadius:"역장 반경",falloffMode:"붕괴 모드",constant:"일정(속도는 범위 내에서 변하지 않습니다)",linearFalloff:"선형 폴오프(가장자리는 0)",inverseFalloff:"거리에 반비례(중앙에서 가장 강함)",forceHint:"양수는 중앙쪽으로 끌어당기고, 음수는 바깥쪽으로 밀어내며, 역장 원은 캔버스 내에서 드래그될 수 있습니다.",showShape:"모양을 보여주다",enableVortex:"소용돌이 사용",vortexHint:"양수는 시계 반대 방향 · 음수는 시계 방향",enableAttraction:"흡인 사용",attractionX:"흡착점 X",attractionY:"흡착점 Y",attractionRadius:"흡착반경",attractionDuration:"흡착시간",delay:"지연시간",delayMode:"지연 모드",globalTime:"통일된 시간",particleLife:"단일 입자 수명",attractionPath:"흡착방식",straight:"일직선",attractionHint:"지연 후 현재 위치부터 흡착이 시작됩니다. 빨간색 범위에 도달하면 죽습니다. 흡착 원은 캔버스 내에서 드래그할 수 있습니다.",enableTrail:"트레일 사용",trailImages:"후행 독립 사진",addTrailImage:"후행 이미지 리소스 추가",trailRotation:"회전하다",trailBones:"후행 뼈 수",trailRatio:"후행비율(%)",trailLength:"후행 길이",randomRange:"무작위 범위",lengthRatio:"길이 비율(%)",lengthMin:"최소 길이(%)",lengthMax:"최대 길이(%)",trailWidth:"후행 너비",widthRatio:"폭 비율(%)",widthMin:"최소 너비(%)",widthMax:"최대 너비(%)",widthScale:"너비 스케일링",followParticle:"입자를 따라가다",lifeLengthCurve:"수명주기 길이 곡선",shapeCurve:"형상 곡선(머리 → 꼬리 폭)",colorMode:"색상 모드",blendMode:"블렌드 모드",fixedColor:"고정된 색상",alphaMode:"투명도 모드",opacity:"투명도",gridRows:"그리드 행 수",gridCols:"그리드 열 수",trailHint:"각 입자는 리소스에 비례하여 형제 후행 뼈 세트를 생성합니다. 입자가 생성될 때 임의의 길이와 너비가 결정되어 동일한 시드를 안정적으로 재현할 수 있음",enableFollow:"이미터 추적 사용",followMode:"팔로우 모드",noFollow:"없음",followPath:"길을 따라가다",selectedBone:"선택된 뼈",emitterAngleMode:"송신기 각도 모드",fixedAngle:"고정 각도",followMoveDirection:"움직이는 방향을 따라가세요",moveProgressCurve:"이동 진행 곡선(0→1)",moveDuration:"이동 기간(초)",followSpace:"공간을 따라가다",localSpace:"로컬 공간(GEN 운동)",worldSpace:"월드 공간(입자 생성점 이동)",moveDirection:"움직이는 방향",forward:"앞으로(시작점 → 끝점)",reverse:"역방향(종료점 → 시작점)",followOffset:"오프셋 시작점(0-1)",followSpaceHint:"로컬 공간은 전체 방사체를 이동합니다. 월드 공간은 새 입자의 생성 지점만 이동하고 생성된 입자는 월드 위치에 유지됩니다.",followTarget:"목표를 따르십시오:",noValidBone:"유효한 뼈가 아직 바인딩되지 않았습니다. 먼저 Spine 계층 구조 트리에서 뼈를 선택하십시오.",rebind:"리바인드",bind:"제본",selectedBoneLabel:"현재 선택된 뼈대:",boneLocalSpace:"로컬 공간(뼈와 함께 이동)",boneWorldSpace:"월드 공간(파티클이 생성된 후 위치를 유지함)",offsetX:"변위 오프셋 X",offsetY:"변위 오프셋 Y",rotationOffset:"회전 오프셋",scaleOffsetX:"스케일 오프셋 X",scaleOffsetY:"스케일 오프셋 Y",boneFollowHint:"이미터는 선택한 Spine 뼈대의 위치만 따르며 Spine의 회전이나 크기 조정은 상속하지 않습니다. 입자 변환은 입자 시스템의 자체 매개변수와 상위 오프셋을 사용합니다.",enableCollision:"충돌 사용",collisionObjects:"참여 충돌 객체",colliderDisabled:"{name}(충돌기 비활성화)",clearCollider:"충돌 객체 지우기 {name}",addCollider:"장면 충돌 개체 추가",noAvailableColliders:"추가할 충돌 개체가 없습니다.",noCollidersSelected:"충돌 개체가 선택되지 않았으며 현재 입자는 충돌하지 않습니다.",available:"사용 가능",disabled:"장애가 있는",collisionHint:"추가되고 활성화된 장면 충돌 객체만 현재 입자 시스템의 충돌에 참여합니다.",enableSubEmitter:"하위 이미터 사용",triggerTiming:"트리거 시간 선택",birth:"태어나다",death:"주사위",collision:"충돌",chooseTarget:"대상 입자 시스템 선택",noTarget:"없음(입자 시스템)",deleteSubEmitter:"이 하위 이미터 삭제",probability:"방출 확률",collisionLimit:"충돌 한계",inherit:"상속하다",colorInheritMode:"색상 상속 방법",add:"추가하다",replace:"씌우다",addSubEmitter:"+ 새로운 하위 이미 터 추가",inheritNone:"없음(기본값)",inheritAll:"모든 속성",inheritColor:"색상",inheritScale:"크기",inheritRotation:"회전하다",inheritLife:"수명주기"},o$={title:"Spine 속성",name:"Spine 이름",xPosition:"X 위치",yPosition:"Y 위치",rotation:"회전",scaleX:"X 크기",scaleY:"Y 크기",startTime:"시작 시간",resources:"Spine 리소스",chooseFolder:"폴더를 선택하고 로드하세요.",folderHint:"JSON / SKEL, Atlas 및 폴더의 모든 텍스처를 한 번에 읽습니다. 아래에서 리소스를 개별적으로 교체할 수 있습니다.",choose:"선택하다",chooseMultiple:"선택(복수 선택)",loading:"로드 중…",load:"↧ 로드",clear:"분명한",supportNote:"Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON 지원 · 해당 버전이 실행 중일 때 요청 시 로드 · 로컬 오프라인",currentResource:"현재 자원 {version}",animations:"Spine 애니메이션",noAnimations:"사용할 수 있는 애니메이션이 없습니다.",timelineAnimation:"타임라인에서 애니메이션 재생",no:"없음",hierarchy:"계층 트리",clearBoneTitle:"뼈대 선택을 지우려면 클릭하세요.",noBoneTitle:"현재 선택된 뼈가 없습니다.",clearBone:"선택한 뼈 지우기: {name}",currentBone:"현재 스켈레톤:",clearSlotTitle:"슬롯 선택을 지우려면 클릭하세요.",noSlotTitle:"현재 선택된 슬롯이 없습니다.",clearSlot:"선택한 슬롯 지우기: {name}",currentSlot:"현재 슬롯:",notSelected:"선택되지 않음",expandAll:"모두 펼치기",collapseAll:"모두 접기",bones:"해골",slots:"슬롯",notLoaded:"로드되지 않음 Spine",searchBones:"뼈 검색",searchBonesPlaceholder:"뼈 이름 검색…",clearSearch:"검색 지우기",clearBoneSearch:"뼈 검색 지우기",noMatchingBones:"일치하는 뼈가 발견되지 않았습니다.",expandChildren:"자식 뼈 확장",collapseChildren:"자식 뼈 접기",notLoadedSlots:"Spine 슬롯이 로드되지 않았습니다.",searchSlots:"슬롯 검색",searchSlotsPlaceholder:"슬롯 또는 액세서리 이름을 검색하세요…",clearSlotSearch:"슬롯 검색 지우기",noMatchingSlots:"일치하는 슬롯을 찾을 수 없습니다.",slotTitle:"{name}(스켈레톤: {bone}, 부착물: {attachment})",empty:"null",textureSummary:"{count} 장: {names}",textureImages:"질감 사진",missingFolderAssets:"선택한 폴더가 없습니다: {missing}",chooseAssets:"Spine 데이터, Atlas 및 모든 텍스처 이미지를 순서대로 선택하십시오."},a$={title:"도움말",subtitle:"입자 생성부터 저장 및 내보내기까지 빠른 시작",close:"지침 닫기",closeShort:"닫기(Esc)",quickStart:"빠른 시작",stepCreate:'객체 생성: 왼쪽의 "Scene Object"에서 +Particles / +Collision / +Path / +Spine를 사용하여 장면 객체를 추가합니다.',stepEdit:'입자 편집: 입자 시스템을 선택하고 "방출 모드 → 방사체 모양 → 입자 속성 → 모양 및 리소스 → 수정자"를 조정합니다.',stepPreview:"효과 확인: 하단 타임라인은 프레임별로 재생, 일시 중지, 드래그할 수 있습니다. 매개변수를 수정하면 자동으로 다시 계산됩니다.",stepExport:'저장 및 내보내기: 프로젝트를 유지하려면 "구성 저장"을 사용하십시오. 완성된 제품을 출력하려면 "Spine Json / 이미지 패키지 / .spine 패키지를 내보내세요."',quickNote:'각 모듈 그룹 제목 오른쪽에 있는 "재설정"은 그룹의 기본 매개변수를 복원할 수 있습니다. 시스템 설정은 현재 브라우저에 자동으로 저장됩니다.',commonOps:"자주 쓰는 작업",eye:"작은 눈",eyeDesc:"개체를 개별적으로 표시하거나 숨깁니다. 숨겨진 입자 시스템은 내보내지지 않습니다.",copyDesc:"다양한 매개변수의 비교를 용이하게 하기 위해 현재 선택된 개체를 완전히 복사합니다.",backgroundDesc:"참조 이미지를 업로드하고 캔버스 미리보기 전용 위치와 투명도를 조정하세요.",settingsDesc:"관리 인터페이스 레이아웃, 보조 디스플레이, 규모 등은 브라우저에 자동으로 저장됩니다.",undoDesc:"Ctrl+Z는 한 단계 후퇴합니다. 최대 단계 수는 시스템 설정에서 조정할 수 있습니다.",spineBoneDesc:"파티클 이미터가 따라갈 수 있는 계층 구조 트리에서 뼈대를 검색하고 선택합니다.",shortcuts:"단축키",undoShortcut:"이전 단계 실행 취소",saveShortcut:"구성 저장",panShortcut:"캔버스 드래그",translateShortcut:"변위 도구",rotateShortcut:"회전 도구",scaleShortcut:"확대/축소 도구",playShortcut:"재생/일시 정지",startShortcut:"첫 번째 프레임으로 돌아가기",shortcutNote:"Q / W / E / R은 먼저 캔버스를 클릭해야 합니다. 커서가 입력 상자에 있으면 단일 키 단축키가 실행되지 않습니다.",modules:"기능 모듈",configTitle:"구성 관리",saveConfigDesc:"모든 현재 장면 객체와 매개변수를 프로젝트 JSON 파일로 저장합니다(Ctrl+S도 지원됨).",loadConfigDesc:"전체 프로젝트를 복원하려면 로컬 구성 파일을 선택하세요.",presetDesc:"드롭다운에서 기본 빠른 적용을 선택합니다. 목록을 새로 고치려면 드롭다운을 클릭하세요.",configScope:"범위",configScopeDesc:"구성에는 개체와 매개변수가 포함됩니다. 인터페이스와 시스템 설정은 브라우저에 별도로 저장됩니다.",sceneTitle:"장면 객체",particleDesc:"핵심 개체. 위치, 오프셋, 회전, 크기 조정 및 임의 시드를 설정할 수 있습니다. 동일한 씨앗은 동일한 효과를 재현할 수 있습니다.",colliderDesc:"원/타원/직사각형/다각형/사용자 정의는 경로를 따라 물리적 바운스, 일시 중지, 파괴 및 이동을 지원합니다.",pathDesc:"앵커 포인트, 제어 핸들, 클로저, 색상 및 사전 설정 모양을 지원하는 베지어 경로입니다.",spineDesc:"Spine 데이터, Atlas 및 텍스처를 로드하고, 뼈대와 슬롯을 찾아보고, 이미터를 따라갑니다.",sceneCommonDesc:"개체는 독립적으로 표시되고 복사될 수 있습니다. 숨겨진 입자 시스템은 내보내지지 않습니다.",emissionDesc:"연속 발사, 폭발, 지연 및 시작/루프/종료 3단계 루프 지속 시간.",burstDesc:"한 번에 지정된 수의 입자를 방출합니다.",delayDesc:"방출이 시작되기 전 대기 시간으로, 입자 막대의 왼쪽 끝에 해당합니다.",loopNote:"루프 지속성은 뼈대 및 경로 추적을 지원하지 않으며 전환 시 다음 설정이 복원됩니다.",shapeDesc:"점, 원, 직사각형, 원뿔 또는 경로 생성 영역. 원/원추는 내부 및 외부 반경을 지원하고 직사각형은 내부 및 외부 너비와 높이를 지원합니다.",angleDesc:"고정, 무작위, 방사형, 법선 경로 또는 경로 접선.",initialDesc:"수명 주기, 속도, 크기 조정 및 회전 지원은 고정, 무작위, 곡선 및 회전을 지원하여 출시 방향을 따를 수 있습니다.",overLifeDesc:"속도배율, 줌배율, 회전속도는 수명곡선에 따라 조절 가능합니다.",alphaDesc:"투명도는 고정 또는 곡선을 지원합니다. 곡선 모드는 파생, 선형 또는 베지어를 따를 수 있습니다.",imageDesc:"단일 이미지 또는 시퀀스 프레임, 다중 이미지 가중치 무작위화, 피벗 포인트, 색상, 혼합 모드 및 독립적인 투명도.",sequenceDesc:"재생 방법에는 단일 시간 숨기기, 단일 시간 고정, 정방향 루프 및 역방향 루프가 포함됩니다.",noiseDesc:"지터 추적을 생성하고 강도, 범위 및 속도를 제어합니다.",gravityDesc:"중력, 바람 및 수명주기 강도 곡선.",forceDesc:"전역 역장, 소용돌이, 흡착 및 충돌.",trailDesc:"독립적인 후행 자산, 뼈 수, 길이, 너비, 모양, 색상 및 투명도 곡선.",followDesc:"이미터는 경로 또는 Spine 뼈를 따를 수 있습니다.",collisionDesc:"장면 충돌 개체와 입자 충돌 반응을 선택합니다.",exportDesc:"이미지 경로, Spine 버전, 키프레임 곡선, FPS, 정수 프레임, 뼈 풀 및 빈 애니메이션을 설정합니다.",exportButtonsDesc:"커넥터를 통해 Spine JSON, 이미지 ZIP를 내보내거나 .spine 프로젝트를 생성할 수 있습니다.",connectorTitle:"Spine 커넥터 사용 지침",connectorIntro:"커넥터는 웹 페이지에서 생성된 JSON 및 이미지를 로컬 시스템에 설치 및 활성화된 Spine에 전달하고 이를 편집 가능한 .spine 프로젝트로 변환합니다.",prerequisite:"프론트로드",prerequisiteDesc:"컴퓨터에 Spine가 설치 및 활성화되었으며 데스크탑 커넥터가 실행되었습니다.",download:"다운로드",webSide:"웹페이지",webSideDesc:'"커넥터 사용 가능 · Spine가 준비되었습니다"가 표시되면 ".spine 패키지 내보내기"를 클릭합니다.',authorization:"첫 번째 승인",authorizationDesc:"첫 번째 연결에서는 웹사이트의 소스를 확인하고 한 번만 허용해야 합니다. 이 기계는 인증 화이트리스트를 저장합니다.",pathSetup:"경로 설정",pathSetupDesc:"커넥터는 Spine를 자동으로 감지합니다. 찾을 수 없는 경우 애플리케이션 경로를 수동으로 지정할 수 있습니다.",downloadResult:"결과 다운로드",downloadResultDesc:".spine 프로젝트 및 이미지 디렉터리가 포함된 ZIP 패키지를 가져옵니다.",version:"버전",versionDesc:"커넥터는 JSON 버전에 따라 Spine 3.8~4.3을 자동으로 일치시킵니다.",security:"안전",securityDesc:"로컬 주소만 듣고 인증은 커넥터에 저장되며 변환 후 임시 파일은 정리됩니다.",differenceTitle:"구성과 내보내기의 차이점은 무엇입니까?",differenceDesc:'"구성 저장"은 편집할 수 있는 모든 개체와 매개변수를 저장합니다. "Spine Json 내보내기"는 표시된 입자 시스템만 내보내고 충돌, 추적, 추적 및 하위 방사체 결과를 독립적인 애니메이션 데이터로 굽습니다.'},l$={confirmLoopFollowEnter:"루프 연속 모드에 들어가면 입자 추적 설정이 무효화되고 기본값으로 복원됩니다. 계속하다?",confirmLoopFollowExit:"루프 지속 모드를 종료한 후 입자 추적 설정이 무효화되고 기본값으로 복원됩니다. 계속하다?",invalidJson:"구성 파일이 유효하지 않습니다. JSON",invalidConfigFormat:"SpineParticle 편집자 프로필이 아닙니다.",unsupportedConfigVersion:"아직 지원되지 않는 구성 버전: {version}",missingScene:"구성 파일에 전체 장면 데이터가 누락되었습니다.",missingEmbeddedSpine:"구성에 재사용 가능한 Spine 원본 리소스가 포함되어 있지 않습니다.",chooseJsonConfig:".json 구성 파일을 선택하세요.",settingsInvalidJson:"시스템 설정 캐시가 유효하지 않습니다. JSON",settingsFormat:"SpineParticle 편집기 시스템 설정 캐시가 아님",settingsVersion:"시스템 구성 버전은 아직 지원되지 않습니다: {version}",settingsMissing:"시스템 설정 캐시에 설정이 없습니다.",noExportableImages:"현재 표시되는 입자 시스템에 대해 내보낼 수 있는 이미지가 없습니다.",invalidZipPath:"ZIP 잘못된 파일 경로",spineFileType:"Spine 데이터는 .json 또는 .skel만 지원합니다.",atlasFileType:"Atlas 파일은 .atlas만 지원합니다.",chooseTexture:"텍스처 이미지를 하나 이상 선택하세요.",binaryParseFailed:"Spine 바이너리 구문 분석 실패(4.3: {v43}, 이전 버전: {v42})",invalidSpineJson:"Spine JSON 잘못된 파일 형식",unsupportedSpineJsonVersion:"Spine JSON 버전은 지원되지 않으며 {versions}만 지원됩니다.",unsupportedSpineDataVersion:"Spine 데이터 버전은 지원되지 않으며 {versions}만 지원됩니다.",embeddedReadFailed:"내장된 Spine 파일을 읽을 수 없습니다: {name}",missingImageWarning:'이미지 "{file}"가 누락되었거나 크기를 읽을 수 없으며 경로가 유지됩니다.',missingTrailImageWarning:'후행 이미지 "{file}"가 누락되어 경로가 보존되었습니다.',emptyCacheWarning:"'{name}'에 사용할 수 있는 프레임 버퍼가 없습니다.",readExportImageFailed:"내보낸 이미지를 읽을 수 없습니다: {name}",connectorOffline:"로컬 Spine 커넥터가 감지되지 않습니다. 먼저 커넥터를 활성화하십시오.",connectorHttpError:"Spine 커넥터가 오류를 반환합니다: HTTP {status}",invalidTrailUV:"후행 메시 '{name}'에 대한 잘못된 UV ​​데이터",missingTrailVertices:"후행 메시 '{name}'에 정점 데이터가 누락되었습니다.",trailIndexOutOfRange:"후행 메시 '{name}'의 삼각형 인덱스가 범위를 벗어났습니다.",invalidTrailHull:'후행 메쉬 "{name}"의 외부 윤곽 번호가 잘못되었습니다.',trailHullIndexOutOfRange:'후행 메시 "{name}"의 외부 윤곽선 가장자리 인덱스가 범위를 벗어났습니다.',invalidInfluenceCount:"후행 메시 '{name}'에 잘못된 수의 뼈 가중치가 포함되어 있습니다.",missingBoneReference:"후행 메시 '{name}'는 존재하지 않는 뼈대를 참조합니다.",invalidWeight:'후행 그리드 "{name}"에 잘못된 중량 데이터가 포함되어 있습니다.',weightSum:"후행 메시 '{name}'의 정점 가중치의 합이 1이 아닙니다.",vertexCountMismatch:"후행 메시 '{name}'의 정점 수와 UV 수가 일치하지 않습니다.",invalidInherit:"뼈대 '{name}'의 상속 값 '{inherit}'가 Spine {version} JSON 형식을 따르지 않습니다.",trailBoneParent:'후행 뼈대 "{name}"는 입자 시스템 뼈 아래에 직접 매달려야 하며 뼈대 체인을 형성할 수 없습니다.',trailSlotEmpty:'가중 테일링 슬롯 "{name}"는 빈 부착물을 사용할 수 없습니다. 해당 뼈대 스케일링은 나타나지 않거나 사망하는 단계에서 0으로 설정되어야 합니다.',spine38Version:"Spine 3.8 내보낸 버전 ID는 3.8이어야 합니다.",spine38Inherit:'Spine 3.8 뼈 "{name}"는 변환을 사용해야 하며 상속을 사용할 수 없습니다.',spine38SlotColor:"Spine 3.8 슬롯 색상 타임라인은 color / twoColor를 사용해야 합니다.",spine38AttachmentName:"Spine 3.8 첨부 타임라인의 숨겨진 프레임에는 이름을 명시적으로 작성해야 합니다: null",spine38RotationAngle:"Spine 3.8 시간축을 회전하려면 각도를 사용해야 합니다.",spine38Curve:"Spine 3.8은 4.x 배열 곡선 형식을 지원하지 않습니다.",unsupportedExportVersion:"내보낸 버전은 지원되지 않으며 Spine {versions}만 지원됩니다.",exportVersionMismatch:"일관성 없는 내보내기 버전: Spine {expected}로 설정, JSON는 Spine {actual}로 표시됨",exportMissingBones:"내보내기 결과 뼈가 누락되었습니다.",missingAtlasTexture:"Atlas에서 참조하는 텍스처가 선택되지 않았습니다: {name}"},c$={label:"언어",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},d$={app:VN,common:XN,toolbar:YN,settings:zN,config:jN,presets:HN,curve:GN,gradient:WN,attributeControl:qN,pivot:KN,image:JN,timeline:ZN,emission:QN,attributes:e$,appearance:t$,renderLayer:i$,export:{title:"내보내기 설정",reset:"내보내기 설정 재설정",imagesPath:"이미지 경로(Spine 이미지 경로)",spineVersion:"Spine 버전",keyframeCurve:"키프레임 보간 곡선",linear:"선의",smoothBezier:"부드러운 베지어(부드러운 Bézier)",bezierHelp:"Smooth Bezier는 오류 허용 범위 내에서 연속 동작을 맞춥니다. 탄생, 사망, 첨부 파일 전환 및 돌연변이는 여전히 단계 키프레임을 사용합니다.",spine38Help:"Spine 3.8은 4.x의 채널별 배열 베지어를 지원하지 않으며 내보낼 때 허용 오차가 감소된 조각별 선형 키프레임으로 변환됩니다.",fps:"내보내기 FPS",omitFps:"fps를 쓰지 마세요",fpsHelp:'FPS를 수정할 때 애니메이션의 실제 시간(초)을 변경하지 않고 유지하세요. "fps를 쓰지 마십시오"는 Spine의 fps 메타데이터만 생략합니다.',integerFrames:"정수 프레임 정렬",bonePool:"뼈 개체 풀",excludeEmpty:"콘텐츠가 없는 애니메이션 제외",baking:"애니메이션이 다시 계산되고 구워지고 있습니다.",exportJsonTitle:"Spine {version} JSON 내보내기",preparing:"수출 준비 중...",exportJson:"Spine JSON 내보내기",exportImagesTitle:"현재 파티클 시스템 ZIP에서 사용하는 이미지를 별도로 다운로드합니다.",organizingImages:"사진 정렬 중...",exportImages:"이미지 ZIP 내보내기",generatingProject:"프로젝트 생성 중...",exportSpine:".spine 패키지 내보내기",authorize:"현재 웹사이트 승인",authorizeTitle:"기본 커넥터에서 현재 웹사이트 승인",refreshConnector:"커넥터를 다시 확인하세요",refresh:"새로 고치다",recalculating:"입자 애니메이션을 다시 계산하는 중...",exported:"내보낸 Spine {version}: {systems} 입자 시스템, {animations} 애니메이션, {bones} 루트 뼈대 {warning}",resourceWarning:";{count} 리소스 팁(누락된 이미지는 계속 내보내집니다.)",timeout:"애니메이션 시간 초과를 다시 계산합니다. 페이지가 아직 실행 중인지 확인한 후 다시 시도하세요.",preparingProject:"사진을 정렬하고 이 기계를 Spine라고 부르는 중…",projectExported:"{fileName}가 생성되었습니다: .spine 프로젝트 및 {images} 사진, Spine {version} 포함",collectingImages:"현재 파티클 시스템에서 사용되는 사진을 조합하는 중...",imagesExported:"{fileName}가 생성되었습니다: {folder}/에는 {images} 사진이 포함되어 있습니다.",connectorChecking:"로컬 Spine 커넥터 감지 중...",connectorOffline:"로컬 Spine 커넥터가 실행 중이 아닙니다",spineNotFound:"커넥터는 실행 중이지만 Spine을 찾을 수 없습니다",notAuthorized:"커넥터는 실행 중이지만 이 사이트는 승인되지 않았습니다",connectorReady:"커넥터 사용 가능 · Spine 준비됨",connectorBusy:"Spine 프로젝트를 다시 계산하고 생성 중",connectorGenerate:"로컬 Spine으로 Spine {version} 프로젝트 생성",unknown:"알려지지 않은",checking:"확인 중",offline:"오프라인",notFound:"Spine 없음",unauthorized:"승인되지 않음",projectTransferTitle:"Spine 패키지 내보내기",projectTransferDetail:"입자 애니메이션을 다시 계산하는 중...",projectTransferDownload:"Spine 프로젝트 패키지가 다운로드되었습니다.",generatingJson:"Spine JSON 생성 중…",preparingProjectFiles:"프로젝트 사진을 대조하는 중...",uploading:"Spine 커넥터에 데이터 업로드 중...",spineProcessing:"Spine가 프로젝트를 변환하는 중입니다. 잠시 기다려 주세요...",downloadingProject:"생성된 Spine 프로젝트 패키지를 다운로드하는 중...",handingToBrowser:"다운로드를 위해 브라우저로 넘기는 중..."},transfer:n$,scene:s$,modifiers:r$,spine:o$,help:a$,errors:l$,language:c$},u$={resizeTimeline:"Arraste para ajustar a altura da linha do tempo",systems:"sistema",particlesBones:"Partículas (ossos)",rootBone:"osso da raiz",hudTip:"Zoom da roda · Clique com o botão esquerdo para arrastar a tela",title:"Editor de Partículas Spine - Yeomai"},h$={close:"Fechar",reset:"Redefinir",add:"Adicionar",remove:"Remover",delete:"Excluir",clear:"Limpar",cancel:"Cancelar",confirm:"Confirmar",none:"Nenhum",enabled:"Ativado",disabled:"Desativado",fixed:"Fixo",random:"Aleatório",curve:"Curva",followExport:"Seguir exportação",linear:"Linear",bezier:"Bézier",above:"Acima",below:"Abaixo",left:"Esquerda",right:"Direita",seconds:"s",frames:"quadros"},f$={settings:"Configurações",undo:"Desfazer (Ctrl+Z)",pan:"Mover tela (Q)",translate:"Mover (W)",rotate:"Girar (E)",scale:"Escalar (R)",zoomIn:"Ampliar",zoomOut:"Reduzir",fitView:"Ajustar à tela",toggleGrid:"Alternar grade",resetView:"Redefinir visualização",background:"Fundo",backgroundSettings:"Configurações do fundo",changeBackground:"Trocar imagem",uploadBackground:"Enviar imagem",clearBackground:"Limpar fundo",noBackground:"Nenhuma imagem",backgroundX:"Deslocamento X da imagem de fundo",backgroundY:"Deslocamento Y da imagem de fundo",backgroundOpacity:"Transparência da imagem de fundo",opacity:"Opacidade",help:"Ajuda",openHelp:"Abrir ajuda"},p$={title:"Configurações do sistema",layout:"Layout da interface",parameterPanelPosition:"Localização do painel de parâmetros",panelOnRight:"O painel de parâmetros é mostrado à direita",history:"Histórico de operação",maxUndo:"Número máximo de passos para trás",canvasGuides:"Display auxiliar de tela",emitter:"ponto de lançamento",bones:"Conexão óssea",bonePointSize:"Tamanho do desenho do ponto ósseo",boneAxisSize:"Tamanho do desenho do eixo",skinMesh:"malha esfolada",enableTicks:"Habilitar ticks",tickFontSize:"Dimensionar o tamanho do texto",tickWidth:"espessura da marca",axisColor:"cor do eixo",showAxisLabels:"Exibir valor da escala",cacheNote:"Todas as configurações do sistema são salvas automaticamente no navegador atual"},m$={title:"Gerenciamento de configuração",save:"Salvar configuração",saveTitle:"Salve todas as configurações do editor (Ctrl+S)",load:"Carregar configuração",loadTitle:"Carregar configuração do editor local",presets:"Lista predefinida",selectPreset:"Selecionar predefinição",noPresets:"Nenhuma predefinição",saved:"A configuração foi salva localmente",loading:"Carregando configuração…",loaded:"Carregado: {name}",presetLoading:"Carregando predefinições…",presetLoaded:"Predefinição carregada: {name}",presetNamingError:"{message}, verifique a nomenclatura de arquivo padrão",presetTransferTitle:"Carregar predefinição",presetDownloading:"Baixando {file}…",presetParsing:"Analisando a configuração padrão...",presetRestoring:"Analisando e restaurando recursos padrão...",presetComplete:"Carregamento predefinido concluído",presetListError:"Não é possível ler a lista predefinida",presetReadError:"Não é possível ler a predefinição: {file}"},g$={particleSweep:"1.Varredura de partículas",barBlocks:"2.Blocos retangulares",forceTrail:"3.Rastro de campo de força",lightningSequence:"4.Sequência de raios",texturePivot:"5.Pivô da textura",subEmitter:"6.Subemissor"},v$={bezierHint:"Arraste a alça quadrada para ajustar o arco · Clique duas vezes em um espaço em branco para criar um novo · Clique duas vezes em um nó para excluí-lo",linearHint:"Clique duas vezes em um espaço em branco para criar um novo. Clique duas vezes em um nó para excluí-lo. Arraste um nó para ajustá-lo.",resetTitle:"Restaurar curva padrão"},b$={addTitle:"Clique duas vezes na faixa de opções para adicionar uma marca colorida",color:"Código de cores",colorValue:"Valor de cor da escala de cores",position:"Posição da marca colorida",addMiddle:"Adicione cor no meio",delete:"Excluir patch de cor atual",hint:"Clique duas vezes na faixa colorida para adicionar uma nova · Arraste a marca colorida para ajustar sua posição · Clique duas vezes na marca colorida para excluí-la"},y$={angleOffset:"Deslocamento de ângulo",value:"valor numérico",lower:"limite inferior",upper:"limite superior",rangeLower:"Limite inferior do intervalo",rangeUpper:"Faixa superior",curveInput:"Entrada de curva →",direction:"Direção de lançamento"},x$={title:"ponto de articulação do mapa",zoomOut:"diminuir o zoom",zoomIn:"ampliar",expand:"Zoom para operação em tela cheia",interaction:"Clique com o botão esquerdo/arraste para definir o ponto de giro · Clique com o botão direito para arrastar a tela · Roda de rolagem para ampliar",previewAlt:"Visualização do ponto dinâmico",noImage:"Nenhuma imagem selecionada",resetCenter:"Reposicionar no meio (50%, 50%)",coordinates:"Coordenadas do ponto do eixo (%)",rotationTest:"Teste de rotação do eixo",static:"ainda",spin:"rotação",swing:"balanço",rotationAlt:"Teste de rotação",topLeft:"canto superior esquerdo",top:"Bem acima",topRight:"canto superior direito",left:"Direita esquerda",center:"meio",right:"Certo",bottomLeft:"canto inferior esquerdo",bottom:"Diretamente abaixo·inferior",bottomRight:"canto inferior direito"},w$={chooseSequence:"Selecione imagens de quadros de sequência",chooseLocal:"Selecione a imagem local",subfolder:"subpasta",name:"nome",restore:"Restaurar {name}",deleteResource:"Excluir recursos de imagem",imageMode:"Modo de imagem",fixed:"Imagem única",sequence:"Sequência",playbackMode:"modo de jogo",onceHide:"Uma vez, ocultar no final",onceHold:"Uma vez, manter último quadro",loopForward:"Loop para frente",loopReverse:"Loop reverso",playbackFps:"Taxa de quadros de reprodução",chooseSequenceMulti:"Selecione quadros de sequência (múltiplas seleções)",weight:"Peso %",unlockWeight:"Desbloquear bloqueio de proporção",lockWeight:"Bloquear a proporção atual",pivot:"Pivô da textura",collapsePivot:"Recolher ajuste do ponto de articulação",expandPivot:"Expandir o ajuste do ponto de articulação",pivotModal:"Eixo de rotação de textura ponto grande refinamento de imagem",pivotModalDesc:"Clique ou arraste em qualquer lugar no mapa abaixo para definir com precisão o centro de rotação/oscilação das partículas.",pivotZoomHint:"Suporta ampliação de 100% ~ 400%, mira precisa na ponta ou raiz:",confirmPivot:"Determinar e salvar o ponto de articulação",noSequence:"Nenhum quadro de sequência selecionado",firstFrame:"Quadro 1",firstImage:"primeira foto",lastImage:"última foto",pivotOn:"Aberto: X {x}% | Y {y}%",pivotOff:"Não ativado, o padrão é próximo ao centro da imagem (50%, 50%)",pivotCustom:"O ponto de articulação foi personalizado: X {x}% | Y {y}%",frameCountOne:"1 quadro · {name}",frameCountMany:"Quadro {count} · {first} → {last}",sequenceSelected:"O quadro {count} foi selecionado e reproduzido na ordem {first}-{last}"},S$={play:"Jogar(D)",pause:"Pausa (D)",toStart:"Volte para o primeiro quadro (S)",previous:"quadro anterior",next:"próximo quadro",toEnd:"Mover para o último quadro",continuousLoop:"Reprodução em loop contínuo",abLoop:"Loop independente do intervalo A/B",abLoopShort:"Loop AB",abRange:"Intervalo do ciclo AB",playbackStart:"Quadro inicial de reprodução personalizado",playbackEnd:"Quadro final de reprodução personalizado",startFrame:"Reproduzir quadro inicial",endFrame:"Reproduzir quadro final",frame:"quadro",emission:"Emissão",particleLife:"Partículas ativas",spineAnimation:"Animação Spine",ownerAnimation:"Animação associada",setOwnerAnimation:"Defina a animação à qual pertence o sistema de partículas atual",chooseOwnerAnimation:"Selecione a animação",animationName:"Nome da animação",renameAnimation:"Renomear a animação atual",rename:"Renomear",newAnimation:"+ Novo",keepOneAnimation:"Pelo menos uma animação precisa ser mantida",spinePreview:"Animação de visualização Spine",noSpineAnimation:"Nenhuma animação Spine disponível",none:"nenhum",systemName:"Sistema {index}",dragLoopDuration:"Duração do segmento do loop de arrastar",dragEmissionDuration:"Duração do arrasto",dragSpineStart:"Arraste para ajustar o horário de início da animação",noAnimationData:"Atualmente não há dados de animação para exibir.",animationNameEmpty:"O nome da animação não pode ficar vazio",animationNameDuplicate:"Os nomes das animações não podem ser repetidos",animationRenameFailed:"Não é possível modificar o nome da animação",zoomIn:"ampliar",zoomOut:"diminuir o zoom",zoomFit:"Moderado",frameStatus:"Quadro {current} / {total}"},C$={title:"Modo de emissão",reset:"Redefinir parâmetros do modo de transmissão",stream:"Contínuo",burst:"Explosão",normalStream:"Contínuo normal",loopStream:"Loop contínuo",rate:"Taxa de emissão",duration:"Duração da emissão",loopDuration:"Duração do lançamento (f)",generateStart:"Gerar animação de loop inicial",generateEnd:"Gerar animação de loop final",customDuration:"Especifique a duração",auto:"{frames}f automático",startLoopDuration:"Duração do segmento do loop inicial",endLoopDuration:"Duração do segmento do loop final",loopWarning:"O modo de persistência de loop não suporta seguimento de osso e seguimento de caminho; as configurações a seguir das partículas serão restauradas aos valores padrão ao entrar ou sair.",burstCount:"Quantidade por explosão",delay:"Atraso",shapeTitle:"Forma do emissor",shapeReset:"Redefinir parâmetros de formato do emissor",shape:"forma",point:"Ponto",circle:"Círculo",rect:"Retângulo",cone:"Cone",path:"Caminho",innerDiameter:"diâmetro interno",outerDiameter:"diâmetro externo",innerRadius:"raio interno",outerRadius:"raio externo",coneDirection:"Orientação cônica",coneAngle:"Ângulo de abertura cônico",innerWidth:"largura interna",innerHeight:"Alto por dentro",outerWidth:"Largura externa",outerHeight:"Extra alto",selectPath:"Selecione o caminho",noPath:"Sem caminho (emissão pontual)",birthDistribution:"distribuição de nascimentos",evenDistribution:"Distribuição fixa igualmente espaçada",randomDistribution:"distribuição aleatória",emissionAngle:"ângulo de lançamento",radial:"Radial (centro para fora)",pathNormal:"perpendicular ao caminho",pathTangent:"ao longo da direção do caminho",fixedAngle:"ângulo fixo",baseAngle:"ângulo base",randomRange:"intervalo aleatório",showShape:"mostrar forma"},A$={title:"Atributos das partículas",reset:"Redefinir parâmetros de atributos de partículas",initialParams:"Valores iniciais",initialLife:"ciclo de vida inicial",randomSample:"Amostragem aleatória →",initialSpeed:"velocidade inicial",initialScale:"dimensionamento inicial",uniform:"unificado",separateXY:"Separação XY",scaleX:"Ampliar X",scaleY:"Ampliar Y",initialRotation:"rotação inicial",lifecycleTitle:"Alterações durante o tempo de vida",speedOverLife:"velocidade do ciclo de vida",speedMultiplier:"multiplicador de velocidade",lifeTo:"ciclo de vida →",scaleOverLife:"Escala durante o ciclo de vida",scaleMultiplier:"Proporção de zoom",multiplierX:"Ampliação",multiplierY:"Ampliação Y",rotationOverLife:"Girar durante o ciclo de vida",rotationSpeed:"Velocidade de rotação"},T$={title:"Aparência e recursos",reset:"Redefinir parâmetros de aparência e recursos",opacity:"Opacidade",curveMode:"Modo curva",transparent:"0 (transparente)",opaque:"1 (opaco)",renderLayer:"Camada de renderização (slot Spine)",top:"nível superior",spineSlot:"Slot Spine",selectSpine:"Selecione Spine",noSpine:"Nenhum disponível Spine",noSlot:"Nenhum slot selecionado ainda",reselect:"Selecionar novamente",selectSlot:"Selecione o slot",searchSlots:"Pesquise o nome do slot ou acessório…",searchSlotsAria:"Espaços de pesquisa",emptySlot:"Espaço vazio",noMatchingSlots:"Nenhum slot correspondente",above:"no topo desta imagem do slot",below:"abaixo desta imagem do slot",followAttachment:"Mostre e oculte com acessórios de slot",previewOnly:"O ajuste do nível de exibição afeta apenas a visualização do editor e não afeta os dados exportados.",imageResources:"Recursos de imagem",addImage:"Adicione recursos de imagem",scale:"Zoom",color:"cor",fixedColor:"cor fixa",randomColor:"cor aleatória",lifetime:"vida útil",normal:"Normal",add:"Adição",multiply:"Multiplicação",screen:"Tela",fixedColorValue:"valor de cor fixo",randomColorHint:"Cada partícula escolhe aleatoriamente uma cor da fita quando nasce e permanece inalterada durante seu ciclo de vida.",independentAlpha:"Opacidade independente",off:"Desligado"},E$={slotLabelAbove:"{spine} / {slot} · Imagem acima",slotLabelBelow:"{spine} / {slot} · Abaixo da foto",resolvedAbove:"Renderizado acima da imagem {slot} e abaixo de seu slot",resolvedBetween:"Renderizado entre {previous} e {slot}",warningNoSpine:"Não há nenhum Spine carregado e as partículas são exibidas temporariamente no topo.",warningNoSelection:"Spine ainda não foi selecionado e as partículas são exibidas temporariamente no topo.",warningMissingSpine:"O alvo Spine não existe e as partículas são exibidas temporariamente no topo.",warningNotReady:"O alvo Spine não está pronto e as partículas são temporariamente exibidas no topo.",warningMissingSlot:"O slot alvo não existe (o recurso pode ter sido substituído) e as partículas são exibidas temporariamente no topo.",warningFirstSlot:"Este é o primeiro slot e não pode ser exibido abaixo dele; as partículas são exibidas temporariamente no topo."},_$={completed:"Concluído",failed:"Falha na operação"},M$={title:"Objetos da cena",addParticle:"Adicionar sistema de partículas",addParticleShort:"+partícula",addCollider:"Adicionar colisor",addColliderShort:"+colisão",addPath:"adicionar caminho",addPathShort:"+ caminho",addSpine:"Adicionar Spine",copyTitle:"Copie o objeto de cena atualmente selecionado",showParticle:"Mostrar sistema de partículas",hideParticle:"Ocultar sistema de partículas",showCollider:"mostrar colisores",hideCollider:"Ocultar colisor",showPath:"mostrar caminho",hidePath:"Ocultar caminho",showSpine:"Exibir Spine",hideSpine:"Ocultar Spine",particle:"Partículas",subEmitter:"Subemissor",collision:"Colisão",path:"Caminho",deleteParticle:"Excluir sistema de partículas",deleteCollider:"Excluir colisores",deletePath:"excluir caminho",deleteSpine:"Excluir Spine",empty:"Ainda não há objetos na cena",name:"nome",positionX:"Posição X",positionY:"Posição Y",offsetX:"Deslocamento X",offsetY:"Deslocamento Y",rotation:"Rotação",scaleX:"Escala X",scaleY:"Escala Y",seed:"Semente aleatória",seedTitle:"Controle todos os atributos aleatórios, seleção de recursos e modificador de amostragem aleatória no sistema de partículas",randomizeSeed:"Gere uma nova semente aleatória global",seedHint:"Controlar parâmetros aleatórios iniciais, seleção de recursos e amostragem aleatória modificadora; a mesma semente pode reproduzir o mesmo efeito",colliderTitle:"Propriedades do colisor",colliderName:"Nome do colisor",type:"tipo",circle:"redondo",ellipse:"oval",rect:"retângulo",polygon:"polígono",custom:"Personalizar",enabled:"habilitar",xPosition:"Posição X",yPosition:"Posição Y",scaleXShort:"Escala X",scaleYShort:"Escala Y",radius:"raio",radiusX:"Raio X",radiusY:"Raio Y",width:"largura",height:"alto",sides:"Número de lados",collisionResponse:"Resposta a falhas",physics:"Física (salto/fricção)",pause:"Pausa (parar)",destroy:"Desaparecer (destruir imediatamente)",elasticity:"Elasticidade (0-1)",friction:"Fricção (0-1)",followPath:"Siga o caminho",targetPath:"caminho de destino",notSelected:"(não selecionado)",moveDuration:"Duração do movimento (segundos)",followDirection:"direção ao longo do caminho",moveProgressCurve:"Curva de progresso móvel",moveProgressHelp:"Eixo horizontal: tempo real/duração do movimento; eixo vertical: progresso do caminho (0=ponto inicial → 1=ponto final)",pathTitle:"atributo de caminho",pathName:"nome do caminho",closedPath:"caminho fechado",pathColor:"cor do caminho",pathHelp:"Instruções de operação:",pathHelpItems:"Clique duas vezes no espaço/curva em branco: crie um novo ponto de ancoragem, clique duas vezes no ponto de ancoragem: exclua o nó, clique duas vezes na segunda vez e arraste: crie um novo e puxe a alça, arraste o ponto de ancoragem para mover a posição, arraste a alça para ajustar a curva, Shift + alça de arrastar: completamente simétrico em ambos os lados, A lt + alça de arrastar: controlar independentemente um lado, Ctrl + clicar/seleção de quadro: adicionar nós selecionados, Alt+clique/seleção de quadro: subtrair nós selecionados, Alt+clique no espaço em branco: limpe todas as seleções, selecione vários nós e arraste-os como um todo",applyPresetShape:"Aplicar uma forma predefinida",choosePreset:"Selecione uma predefinição...",square:"Quadrado",star:"forma de estrela",applyPreset:"Aplicar predefinição",clearAnchors:"ponto de ancoragem claro",panelHint:"Use o botão no canto superior direito para criar um objeto de cena"},P$={title:"Modificadores",reset:"Redefinir parâmetros modificadores",damping:"Amortecimento",enableNoise:"Ativar ruído de movimento",strength:"força",noiseRange:"Faixa de flutuação",noiseSpeed:"Taxa de fluxo de tempo",noiseHint:"O controle de intensidade afeta a proporção · A faixa de flutuação controla o desvio máximo · O fluxo de tempo controla a velocidade de mudança",enableGravity:"Ativar gravidade",gravityStrength:"Força da gravidade",strengthMin:"Força mínima",strengthMax:"Força máxima",direction:"direção",gravityOverLife:"Gravidade durante o ciclo de vida",windOverLife:"Vento do ciclo de vida",axisStrength:"Eixo vertical: intensidade 0 ~ 1",directionHint:"0° para a direita · -90° para baixo · Intensidade negativa inverte a direção",enableWind:"Ativar vento",windStrength:"força do vento",enableForceField:"Ativar campo de força",centerX:"Centro X",centerY:"Centro Y",forceStrength:"Força do campo de força",forceRadius:"raio do campo de força",falloffMode:"modo de decaimento",constant:"Constante (a velocidade não muda dentro da faixa)",linearFalloff:"Queda linear (a borda é 0)",inverseFalloff:"Inversamente proporcional à distância (mais forte no centro)",forceHint:"Os números positivos se atraem para o centro, os números negativos se repelem para fora e o círculo do campo de força pode ser arrastado dentro da tela.",showShape:"mostrar forma",enableVortex:"Ativar vórtice",vortexHint:"Números positivos no sentido anti-horário · Números negativos no sentido horário",enableAttraction:"Ativar atração",attractionX:"Ponto de adsorção X",attractionY:"Ponto de adsorção Y",attractionRadius:"raio de adsorção",attractionDuration:"Tempo de adsorção",delay:"Tempo de atraso",delayMode:"Modo de atraso",globalTime:"tempo unificado",particleLife:"vida de partícula única",attractionPath:"Método de adsorção",straight:"linha reta",attractionHint:"Após o atraso, a adsorção começa a partir da posição atual. Quando atingir a faixa vermelha, ele morrerá. O círculo de adsorção pode ser arrastado dentro da tela.",enableTrail:"Ativar rastro",trailImages:"Trailing de fotos independentes",addTrailImage:"Adicionar recursos de imagem finais",trailRotation:"girar",trailBones:"Número de ossos à direita",trailRatio:"Proporção final (%)",trailLength:"Comprimento final",randomRange:"intervalo aleatório",lengthRatio:"Proporção de comprimento (%)",lengthMin:"Comprimento mínimo (%)",lengthMax:"Comprimento máximo (%)",trailWidth:"Largura final",widthRatio:"proporção de largura (%)",widthMin:"Largura mínima (%)",widthMax:"Largura máxima (%)",widthScale:"escala de largura",followParticle:"siga partículas",lifeLengthCurve:"curva de comprimento do ciclo de vida",shapeCurve:"Curva de forma (cabeça → largura da cauda)",colorMode:"modo de cor",blendMode:"modo de mesclagem",fixedColor:"cor fixa",alphaMode:"modo de transparência",opacity:"transparência",gridRows:"Número de linhas da grade",gridCols:"Número de colunas da grade",trailHint:"Cada partícula gera um conjunto de ossos irmãos em proporção aos recursos; o comprimento e a largura aleatórios são determinados quando a partícula nasce, e a mesma semente pode ser reproduzida de forma estável",enableFollow:"Ativar seguimento do emissor",followMode:"modo de acompanhamento",noFollow:"nenhum",followPath:"siga o caminho",selectedBone:"ossos selecionados",emitterAngleMode:"Modo de ângulo do transmissor",fixedAngle:"ângulo fixo",followMoveDirection:"Siga a direção do movimento",moveProgressCurve:"Curva de progresso do movimento (0→1)",moveDuration:"Duração(ões) do movimento",followSpace:"siga o espaço",localSpace:"Espaço local (movimento GEN)",worldSpace:"Espaço mundial (movimento do ponto de geração de partículas)",moveDirection:"direção em movimento",forward:"Avançar (ponto inicial → ponto final)",reverse:"Reverso (ponto final → ponto inicial)",followOffset:"Ponto inicial do deslocamento (0-1)",followSpaceHint:"O espaço local move todo o emissor; o espaço mundial apenas move o ponto de geração de novas partículas, e as partículas nascidas permanecem na posição mundial.",followTarget:"Siga o alvo:",noValidBone:"Nenhum osso válido foi vinculado ainda. Selecione primeiro o osso na árvore hierárquica Spine.",rebind:"religar",bind:"vinculativo",selectedBoneLabel:"Osso atualmente selecionado:",boneLocalSpace:"Espaço local (move-se com ossos)",boneWorldSpace:"Espaço mundial (as partículas mantêm a posição após serem geradas)",offsetX:"Deslocamento de deslocamento X",offsetY:"Deslocamento de deslocamento Y",rotationOffset:"Deslocamento de rotação",scaleOffsetX:"Deslocamento de escala X",scaleOffsetY:"Deslocamento de escala Y",boneFollowHint:"O emissor segue apenas a posição do osso Spine selecionado e não herda a rotação ou escala de Spine; a transformação de partículas usa os próprios parâmetros e deslocamento superior do sistema de partículas.",enableCollision:"Ativar colisão",collisionObjects:"Objetos de colisão participantes",colliderDisabled:"{name} (colisores desativados)",clearCollider:"Limpar objeto de colisão {name}",addCollider:"Adicionar objetos de colisão de cena",noAvailableColliders:"Nenhum objeto de colisão para adicionar",noCollidersSelected:"Nenhum objeto de colisão é selecionado e as partículas atuais não colidirão.",available:"Disponível",disabled:"Desabilitado",collisionHint:"Somente objetos de colisão de cena adicionados e habilitados participarão da colisão do sistema de partículas atual.",enableSubEmitter:"Ativar subemissores",triggerTiming:"Escolha o tempo de disparo",birth:"nascer",death:"morrer",collision:"colisão",chooseTarget:"Selecione o sistema de partículas alvo",noTarget:"Nenhum (sistema de partículas)",deleteSubEmitter:"Exclua este subemissor",probability:"probabilidade de emissão",collisionLimit:"Limite de colisão",inherit:"herdar",colorInheritMode:"Método de herança de cores",add:"Adicionar",replace:"cobrir",addSubEmitter:"+ Adicionado novo subemissor",inheritNone:"Nenhum (padrão)",inheritAll:"Todas as propriedades",inheritColor:"cor",inheritScale:"tamanho",inheritRotation:"girar",inheritLife:"vida útil"},I$={title:"Propriedades do Spine",name:"Nome Spine",xPosition:"Posição X",yPosition:"Posição Y",rotation:"Rotação",scaleX:"Escala X",scaleY:"Escala Y",startTime:"Tempo inicial",resources:"Recursos Spine",chooseFolder:"Selecione a pasta e carregue",folderHint:"Leia JSON/SKEL, Atlas e todas as texturas em uma pasta de uma só vez; os recursos ainda podem ser substituídos individualmente abaixo.",choose:"escolher",chooseMultiple:"Selecione (múltiplas escolhas)",loading:"carregando…",load:"↧ Carregar",clear:"Claro",supportNote:"Suporte Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Carregar sob demanda quando a versão correspondente estiver em execução · Offline local",currentResource:"Recurso atual {version}",animations:"Animações Spine",noAnimations:"Nenhuma animação disponível",timelineAnimation:"Reproduzir animação na linha do tempo",no:"nenhum",hierarchy:"Hierarquia",clearBoneTitle:"Clique para limpar a seleção de osso",noBoneTitle:"Nenhum osso está selecionado no momento",clearBone:"Limpar ossos selecionados: {name}",currentBone:"Esqueleto atual:",clearSlotTitle:"Clique para limpar a seleção de slot",noSlotTitle:"Nenhum slot está selecionado no momento",clearSlot:"Limpar slot selecionado: {name}",currentSlot:"Slot atual:",notSelected:"Não selecionado",expandAll:"Expandir tudo",collapseAll:"Recolher tudo",bones:"esqueleto",slots:"slot",notLoaded:"Não carregado Spine",searchBones:"Procure por ossos",searchBonesPlaceholder:"Pesquisar nome do osso…",clearSearch:"Limpar pesquisa",clearBoneSearch:"Limpar pesquisa óssea",noMatchingBones:"Nenhum osso correspondente encontrado",expandChildren:"Expandir ossos infantis",collapseChildren:"Recolher ossos infantis",notLoadedSlots:"Slot Spine não carregado",searchSlots:"Espaços de pesquisa",searchSlotsPlaceholder:"Pesquise o nome do slot ou acessório…",clearSlotSearch:"Limpar pesquisa de slots",noMatchingSlots:"Nenhum slot correspondente encontrado",slotTitle:"{name} (esqueleto: {bone}, anexo: {attachment})",empty:"nulo",textureSummary:"{count} Zhang: {names}",textureImages:"Imagens de textura",missingFolderAssets:"A pasta selecionada está faltando: {missing}",chooseAssets:"Selecione os dados Spine, Atlas e todas as imagens de textura em sequência"},k$={title:"Ajuda",subtitle:"Início rápido, desde a criação de partículas até o salvamento e exportação",close:"Fechar instruções",closeShort:"Fechar (Esc)",quickStart:"início rápido",stepCreate:'Crie um objeto: Use +Particles / +Collision / +Path / +Spine em "Scene Object" à esquerda para adicionar um objeto de cena.',stepEdit:'Editar partículas: Selecione o sistema de partículas e ajuste "Modo de emissão → Forma do emissor → Propriedades da partícula → Aparência e recursos → Modificador".',stepPreview:"Confira o efeito: A linha do tempo inferior pode ser reproduzida, pausada, quadro a quadro ou arrastada; será recalculado automaticamente após a modificação dos parâmetros.",stepExport:'Salvar e exportar: Use “Salvar configuração” para reter o projeto; "Exportar Spine Json/pacote de imagens/pacote .spine" para gerar o produto acabado.',quickNote:'"Reset" no lado direito do título de cada grupo de módulos pode restaurar os parâmetros padrão do grupo; as configurações do sistema serão salvas automaticamente no navegador atual.',commonOps:"Ações comuns",eye:"olhos pequenos",eyeDesc:"Mostrar/ocultar objetos individualmente; sistemas de partículas ocultas não são exportados.",copyDesc:"Copia completamente o objeto atualmente selecionado para facilitar a comparação de diferentes parâmetros.",backgroundDesc:"Carregue a imagem de referência e ajuste a posição e a transparência apenas para visualização da tela.",settingsDesc:"Layout da interface de gerenciamento, display auxiliar, balança, etc. são salvos automaticamente no navegador.",undoDesc:"Ctrl+Z retrai um passo; o número máximo de etapas pode ser ajustado nas configurações do sistema.",spineBoneDesc:"Pesquise e selecione um osso na árvore hierárquica, que pode ser usado pelo emissor de partículas a seguir.",shortcuts:"Atalhos",undoShortcut:"Desfazer a etapa anterior",saveShortcut:"Salvar configuração",panShortcut:"Arrastar tela",translateShortcut:"Ferramenta de deslocamento",rotateShortcut:"Ferramenta rotativa",scaleShortcut:"Ferramenta Zoom",playShortcut:"reproduzir/pausar",startShortcut:"Volte para o primeiro quadro",shortcutNote:"Q/W/E/R precisa clicar primeiro na tela; quando o cursor estiver na caixa de entrada, a tecla de atalho de tecla única não será acionada.",modules:"Guia dos módulos",configTitle:"Gerenciamento de configuração",saveConfigDesc:"Salve todos os objetos e parâmetros da cena atual como arquivos de projeto JSON (Ctrl+S também é suportado).",loadConfigDesc:"Selecione o arquivo de configuração local para restaurar o projeto completo.",presetDesc:"Selecione uma aplicação rápida padrão no menu suspenso; clique no menu suspenso para atualizar a lista.",configScope:"escopo",configScopeDesc:"A configuração contém objetos e parâmetros; as configurações da interface e do sistema são armazenadas separadamente no navegador.",sceneTitle:"objeto de cena",particleDesc:"objeto central. Posição, deslocamento, rotação, escala e semente aleatória podem ser definidos; a mesma semente pode reproduzir o mesmo efeito.",colliderDesc:"Círculo/elipse/retângulo/polígono/personalizado, suporta salto físico, pausa, destruição e movimento ao longo do caminho.",pathDesc:"Caminho Bézier com suporte para pontos de ancoragem, alças de controle, fechamento, cor e formas predefinidas.",spineDesc:"Carregue dados Spine, Atlas e texturas, navegue em ossos e slots e siga os emissores.",sceneCommonDesc:"Os objetos podem ser revelados e copiados de forma independente; sistemas de partículas ocultas não são exportados.",emissionDesc:"Disparo contínuo, explosão, atraso e duração de loop de três estágios de início/loop/fim.",burstDesc:"Emite um número especificado de partículas de uma só vez.",delayDesc:"O tempo de espera antes do início da emissão, correspondente à extremidade esquerda da barra de partículas.",loopNote:"A persistência de loop não oferece suporte ao seguimento de ossos e caminhos, e as configurações a seguir serão restauradas ao alternar.",shapeDesc:"Área de geração de ponto, círculo, retângulo, cone ou caminho. Círculos/cones suportam raios internos e externos, e retângulos suportam largura e altura internas e externas.",angleDesc:"Fixo, aleatório, radial, caminho normal ou caminho tangente.",initialDesc:"Ciclo de vida, velocidade, escala e suporte de rotação fixo, aleatório, curva e rotação podem seguir a direção de lançamento.",overLifeDesc:"A ampliação da velocidade, a ampliação do zoom e a velocidade de rotação podem ser controladas pela curva do ciclo de vida.",alphaDesc:"Suportes de transparência fixos ou curvos; o modo de curva pode seguir derivado, linear ou Bezier.",imageDesc:"Imagem única ou quadro de sequência, randomização de peso de várias imagens, ponto de articulação, cor, modo de mesclagem e transparência independente.",sequenceDesc:"Os métodos de reprodução incluem ocultação única, congelamento único, loop direto e loop reverso.",noiseDesc:"Gere traços de jitter e controle a intensidade, o alcance e a velocidade.",gravityDesc:"Curvas de gravidade, vento e intensidade do ciclo de vida.",forceDesc:"Campos de força globais, vórtices, adsorção e colisões.",trailDesc:"Ativos independentes, contagem de ossos, curvas de comprimento, largura, forma, cor e transparência.",followDesc:"O emissor pode seguir um caminho ou osso Spine.",collisionDesc:"Selecione objetos de colisão de cena e respostas de colisão de partículas.",exportDesc:"Defina o caminho da imagem, versão Spine, curva de quadro-chave, FPS, quadros inteiros, conjunto de ossos e animação vazia.",exportButtonsDesc:"Você pode exportar Spine JSON, imagens ZIP ou gerar projetos .spine por meio do conector.",connectorTitle:"Instruções de uso do conector Spine",connectorIntro:"O conector entrega o JSON e as imagens geradas pela página da web ao Spine que foi instalado e ativado na máquina local e os converte em projetos .spine editáveis.",prerequisite:"carregamento antecipado",prerequisiteDesc:"O computador tem Spine instalado e ativado e o conector de desktop foi iniciado.",download:"download",webSide:"página da Internet",webSideDesc:'Depois que "Conector disponível · Spine está pronto" for exibido, clique em "Exportar pacote .spine".',authorization:"primeira autorização",authorizationDesc:"A primeira conexão precisa verificar a origem do site e permitir uma vez; esta máquina salva a lista branca de autorização.",pathSetup:"Configurações de caminho",pathSetupDesc:"O conector detectará automaticamente Spine; se não puder ser encontrado, você poderá especificar manualmente o caminho do aplicativo.",downloadResult:"Baixar resultados",downloadResultDesc:"Obtenha o pacote ZIP, que contém o projeto .spine e o diretório de imagem.",version:"Versão",versionDesc:"O conector corresponde automaticamente a Spine 3.8~4.3 de acordo com a versão JSON.",security:"Segurança",securityDesc:"Ouça apenas o endereço local, a autorização é salva no conector e os arquivos temporários são limpos após a conversão.",differenceTitle:"Qual é a diferença entre configurar e exportar?",differenceDesc:'“Salvar configuração” salva todos os objetos e parâmetros que podem ser editados; "Exportar Spine Json" exporta apenas o sistema de partículas exibido e transforma os resultados de colisão, seguimento, rastreamento e subemissor em dados de animação independentes.'},R$={confirmLoopFollowEnter:"Depois de entrar no modo de loop contínuo, as configurações seguintes de partículas serão inválidas e restauradas para o valor padrão. Continuar?",confirmLoopFollowExit:"Depois de sair do modo de persistência de loop, as configurações a seguir serão inválidas e restauradas para seus valores padrão. Continuar?",invalidJson:"O arquivo de configuração não é válido JSON",invalidConfigFormat:"Não é o perfil do editor SpineParticle",unsupportedConfigVersion:"Versão de configuração ainda não suportada: {version}",missingScene:"O arquivo de configuração não contém dados completos da cena",missingEmbeddedSpine:"A configuração não contém recursos originais Spine reutilizáveis",chooseJsonConfig:"Selecione um arquivo de configuração .json",settingsInvalidJson:"O cache de configurações do sistema não é válido JSON",settingsFormat:"Não cache de configurações do sistema do Editor SpineParticle",settingsVersion:"A versão de configuração do sistema ainda não é suportada: {version}",settingsMissing:"Faltam configurações no cache de configurações do sistema",noExportableImages:"Não há imagens exportáveis ​​para o sistema de partículas atualmente visível",invalidZipPath:"ZIP Caminho de arquivo inválido",spineFileType:"Os dados Spine suportam apenas .json ou .skel",atlasFileType:"Arquivos Atlas suportam apenas .atlas",chooseTexture:"Selecione pelo menos uma imagem de textura",binaryParseFailed:"Falha na análise binária Spine (4.3: {v43}; versão antiga: {v42})",invalidSpineJson:"Spine JSON Formato de arquivo inválido",unsupportedSpineJsonVersion:"A versão Spine JSON não é suportada, apenas {versions} é compatível",unsupportedSpineDataVersion:"A versão de dados Spine não é suportada, apenas {versions} é compatível",embeddedReadFailed:"Não é possível ler o arquivo Spine incorporado: {name}",missingImageWarning:'A imagem "{file}" está ausente ou possui dimensões ilegíveis, caminho preservado.',missingTrailImageWarning:'A imagem final "{file}" está faltando e o caminho foi preservado.',emptyCacheWarning:"Nenhum framebuffer disponível para '{name}'.",readExportImageFailed:"Não é possível ler a imagem exportada: {name}",connectorOffline:"Conector Spine local não detectado, ative o conector primeiro",connectorHttpError:"O conector Spine retorna erro: HTTP {status}",invalidTrailUV:"Dados UV inválidos para malha final '{name}'",missingTrailVertices:"A malha final '{name}' está sem dados de vértice",trailIndexOutOfRange:"Índice triangular da malha final '{name}' fora dos limites",invalidTrailHull:'O número do contorno externo da malha final "{name}" é inválido',trailHullIndexOutOfRange:'O índice da borda do contorno externo da malha final "{name}" está fora dos limites',invalidInfluenceCount:"A malha final '{name}' contém um número inválido de pesos ósseos",missingBoneReference:"A malha final '{name}' faz referência a um osso inexistente",invalidWeight:'A grade final "{name}" contém dados de peso inválidos',weightSum:"Os pesos dos vértices da malha final '{name}' não somam 1",vertexCountMismatch:"A malha final '{name}' tem um número inconsistente de vértices e UVs",invalidInherit:"O valor herdado '{inherit}' para o osso '{name}' não está em conformidade com o formato Spine {version} JSON",trailBoneParent:'O osso final "{name}" deve ser pendurado diretamente sob o osso do sistema de partículas e não pode formar uma cadeia óssea.',trailSlotEmpty:'O slot de cauda ponderado "{name}" não pode usar anexos vazios. A escala óssea correspondente deve ser definida como 0 na fase de não aparecimento ou morte.',spine38Version:"Spine 3.8 O ID da versão exportada deve ser 3.8",spine38Inherit:'Spine 3.8 Bone "{name}" deve usar transformação e não pode usar herança',spine38SlotColor:"A linha do tempo de cores do slot Spine 3.8 deve usar color/twoColor",spine38AttachmentName:"Spine 3.8 O quadro oculto da linha do tempo do anexo deve ter um nome escrito explicitamente: null",spine38RotationAngle:"Spine 3.8 Você deve usar o ângulo para girar o eixo do tempo",spine38Curve:"Spine 3.8 não suporta formato de curva de matriz 4.x",unsupportedExportVersion:"A versão exportada não é suportada, apenas Spine {versions} é compatível",exportVersionMismatch:"Versão de exportação inconsistente: definida como Spine {expected}, JSON marcada como Spine {actual}",exportMissingBones:"O resultado da exportação está faltando ossos",missingAtlasTexture:"A textura referenciada por Atlas não está selecionada: {name}"},F$={label:"Idioma",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},L$={app:u$,common:h$,toolbar:f$,settings:p$,config:m$,presets:g$,curve:v$,gradient:b$,attributeControl:y$,pivot:x$,image:w$,timeline:S$,emission:C$,attributes:A$,appearance:T$,renderLayer:E$,export:{title:"Configurações de exportação",reset:"Redefinir configurações de exportação",imagesPath:"Caminho da imagem (caminho das imagens Spine)",spineVersion:"Versão do Spine",keyframeCurve:"Curva de interpolação de quadro-chave",linear:"Linear",smoothBezier:"Bézier Suave (Bézier Suave)",bezierHelp:"Smooth Bezier ajusta o movimento contínuo dentro da tolerância de erro; nascimento, morte, troca de apegos e mutações ainda usam quadros-chave de etapas.",spine38Help:"Spine 3.8 não oferece suporte à matriz Bezier por canal 4.x e é convertido em quadros-chave lineares por partes com tolerância reduzida na exportação.",fps:"FPS de exportação",omitFps:"Não escreva fps",fpsHelp:'Mantenha os segundos reais da animação inalterados ao modificar FPS; "Não escreva fps" omite apenas os metadados fps de Spine.',integerFrames:"Alinhamento de quadro inteiro",bonePool:"Conjunto de objetos ósseos",excludeEmpty:"Exclua animações sem conteúdo",baking:"A animação está sendo recalculada e preparada",exportJsonTitle:"Exportar Spine {version} JSON",preparing:"Preparando para exportar...",exportJson:"Exportar Spine JSON",exportImagesTitle:"Baixe separadamente a imagem usada pelo sistema de partículas atual ZIP",organizingImages:"Classificando fotos...",exportImages:"Exportar imagens ZIP",generatingProject:"Gerando projeto...",exportSpine:"Exportar pacote .spine",authorize:"Autorizar o site atual",authorizeTitle:"Autorize o site atual no conector nativo",refreshConnector:"Verifique novamente o conector",refresh:"atualizar",recalculating:"Recálculo da animação de partículas...",exported:"Spine {version} exportado: sistemas de partículas {systems}, animações {animations}, ossos de raiz {bones} {warning}",resourceWarning:";dicas de recursos {count} (as imagens ausentes ainda são exportadas)",timeout:"Recálculo do tempo limite da animação. Confirme se a página ainda está em execução e tente novamente",preparingProject:"Classificando fotos e chamando esta máquina de Spine…",projectExported:"{fileName} foi gerado: incluindo projeto .spine e imagens {images}, Spine {version}",collectingImages:"Comparando imagens atualmente usadas pelo sistema de partículas...",imagesExported:"{fileName} foi gerado: {folder}/ contém imagens {images}",connectorChecking:"Detectando conector Spine local...",connectorOffline:"O conector local do Spine não está em execução",spineNotFound:"O conector está ativo, mas o Spine não foi encontrado",notAuthorized:"O conector está ativo, mas este site não está autorizado",connectorReady:"Conector disponível · Spine pronto",connectorBusy:"Recalculando e gerando o projeto Spine",connectorGenerate:"Gerar projeto Spine {version} com o Spine local",unknown:"desconhecido",checking:"Verificando",offline:"Offline",notFound:"Spine não encontrado",unauthorized:"Não autorizado",projectTransferTitle:"Exportar pacote Spine",projectTransferDetail:"Recálculo da animação de partículas...",projectTransferDownload:"O pacote do projeto Spine foi baixado",generatingJson:"Gerando Spine JSON…",preparingProjectFiles:"Coletando fotos do projeto...",uploading:"Fazendo upload de dados para o conector Spine...",spineProcessing:"Spine está convertendo o projeto, aguarde...",downloadingProject:"Baixando o pacote do projeto Spine gerado...",handingToBrowser:"Passando para o navegador para download..."},transfer:_$,scene:M$,modifiers:P$,spine:I$,help:k$,errors:R$,language:F$},D$={title:"Spine粒子编辑器-Yeomai",resizeTimeline:"拖动调整时间轴高度",systems:"系统",particlesBones:"粒子(骨骼)",rootBone:"根骨骼",hudTip:"滚轮缩放 · 左键拖动画布"},O$={label:"语言",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},N$={close:"关闭",reset:"重置",add:"添加",remove:"移除",delete:"删除",clear:"清除",cancel:"取消",confirm:"确定",none:"无",enabled:"启用",disabled:"禁用",fixed:"固定",random:"随机",curve:"曲线",followExport:"跟随导出",linear:"线性",bezier:"贝塞尔",above:"之上",below:"之下",left:"左侧",right:"右侧",seconds:"秒",frames:"帧"},$$={settings:"系统设置",undo:"撤回上一步 (Ctrl+Z)",pan:"拖动画布 (Q)",translate:"位移 (W)",rotate:"旋转 (E)",scale:"缩放 (R)",zoomIn:"放大",zoomOut:"缩小",fitView:"适配画布",toggleGrid:"切换网格",resetView:"重置视图",background:"背景图",backgroundSettings:"背景图显示设置",changeBackground:"更换图像",uploadBackground:"上传图像",clearBackground:"清除背景",noBackground:"未上传图像",backgroundX:"背景图 X 偏移",backgroundY:"背景图 Y 偏移",backgroundOpacity:"背景图透明度",opacity:"透明度",help:"使用说明",openHelp:"查看使用说明"},B$={title:"系统设置",layout:"界面布局",parameterPanelPosition:"参数面板位置",panelOnRight:"参数面板显示在右侧",history:"操作历史",maxUndo:"最大撤回步数",canvasGuides:"画布辅助显示",emitter:"发射点",bones:"骨骼连线",bonePointSize:"骨骼点绘制大小",boneAxisSize:"坐标轴绘制大小",skinMesh:"蒙皮网格",enableTicks:"启用刻度",tickFontSize:"刻度文字大小",tickWidth:"刻度线粗细",axisColor:"坐标轴颜色",showAxisLabels:"显示刻度数值",cacheNote:"整个系统设置会自动保存到当前浏览器"},U$={title:"配置管理",save:"保存配置",saveTitle:"保存全部编辑器配置 (Ctrl+S)",load:"加载配置",loadTitle:"加载本地编辑器配置",presets:"预设列表",selectPreset:"选择预设",noPresets:"无预设文件",saved:"配置已保存到本地",loading:"正在加载配置…",loaded:"已加载:{name}",presetLoading:"正在加载预设…",presetLoaded:"已加载预设:{name}",presetNamingError:"{message},请检查预设文件命名",presetTransferTitle:"加载预设",presetDownloading:"正在下载 {file}…",presetParsing:"正在解析预设配置…",presetRestoring:"正在解析并恢复预设资源…",presetComplete:"预设加载完成",presetListError:"无法读取预设列表",presetReadError:"无法读取预设:{file}"},V$={particleSweep:"1.粒子扫过",barBlocks:"2.长条方块",forceTrail:"3.力场拖尾",lightningSequence:"4.雷电序列帧",texturePivot:"5.贴图轴点",subEmitter:"6.子发射器"},X$={bezierHint:"拖动方形手柄调整弧度 · 双击空白新建 · 双击节点删除",linearHint:"双击空白新建 · 双击节点删除 · 拖动节点调整",resetTitle:"恢复默认曲线"},Y$={addTitle:"双击色带添加色标",color:"色标颜色",colorValue:"色标颜色值",position:"色标位置",addMiddle:"在中间新增颜色",delete:"删除当前色标",hint:"双击色带新增 · 拖动色标调整位置 · 双击色标删除"},z$={angleOffset:"角度偏移",value:"数值",lower:"下限",upper:"上限",rangeLower:"范围下限",rangeUpper:"范围上限",curveInput:"曲线输入 →",direction:"发射方向"},j$={title:"贴图轴点",zoomOut:"缩小",zoomIn:"放大",expand:"放大到全屏操作",interaction:"左键点击/拖动设置轴点 · 右键拖动画布 · 滚轮缩放",previewAlt:"轴点预览",noImage:"未选择图片",resetCenter:"复位居中 (50%, 50%)",coordinates:"轴点坐标(%)",rotationTest:"轴心旋转测试",static:"静止",spin:"自转",swing:"摆动",rotationAlt:"旋转测试",topLeft:"左上",top:"正上",topRight:"右上",left:"正左",center:"正中",right:"正右",bottomLeft:"左下",bottom:"正下·底部",bottomRight:"右下"},H$={chooseSequence:"选择序列帧图片",chooseLocal:"选择本地图片",subfolder:"子文件夹",name:"名称",restore:"恢复 {name}",deleteResource:"删除图片资源",imageMode:"图片模式",fixed:"固定",sequence:"序列帧",playbackMode:"播放模式",onceHide:"单次-尾帧消失",onceHold:"单次-尾帧固定",loopForward:"正向循环",loopReverse:"反向循环",playbackFps:"播放帧率",chooseSequenceMulti:"选择序列帧(多选)",weight:"占比%",unlockWeight:"解除占比锁定",lockWeight:"锁定当前占比",pivot:"贴图轴点",collapsePivot:"收起轴点调整",expandPivot:"展开轴点调整",pivotModal:"贴图旋转轴点大图精修",pivotModalDesc:"在下方贴图上任意点击或拖拽,精确设置粒子的旋转/摆动中心",pivotZoomHint:"支持 100% ~ 400% 放大,精确对准尖端或根部:",confirmPivot:"确定并保存轴点",noSequence:"未选择序列帧",firstFrame:"第 1 帧",firstImage:"第一张图片",lastImage:"最后一张图片",pivotOn:"已开启:X {x}% | Y {y}%",pivotOff:"未开启,默认围绕图片正中心 (50%, 50%)",pivotCustom:"轴点已自定义:X {x}% | Y {y}%",frameCountOne:"1 帧 · {name}",frameCountMany:"{count} 帧 · {first} → {last}",sequenceSelected:"已选择 {count} 帧,按 {first}-{last} 顺序播放"},G$={play:"播放 (D)",pause:"暂停 (D)",toStart:"回到第一帧 (S)",previous:"前一帧",next:"后一帧",toEnd:"移动到最后一帧",continuousLoop:"持续循环播放",abLoop:"独立 A/B 区间循环",abLoopShort:"AB 循环",abRange:"AB 循环区间",playbackStart:"自定义播放起始帧",playbackEnd:"自定义播放结束帧",startFrame:"播放起始帧",endFrame:"播放结束帧",frame:"帧",emission:"持续发射",particleLife:"粒子存在",spineAnimation:"Spine 动画",ownerAnimation:"所属动画",setOwnerAnimation:"设置当前粒子系统所属的动画",chooseOwnerAnimation:"选择所属动画",animationName:"动画名称",renameAnimation:"重命名当前动画",rename:"重命名",newAnimation:"+ 新增",keepOneAnimation:"至少需要保留一个动画",spinePreview:"Spine 预览动画",noSpineAnimation:"无可用 Spine 动画",none:"无",systemName:"系统 {index}",dragLoopDuration:"拖动循环段时长",dragEmissionDuration:"拖动持续发射时长",dragSpineStart:"拖动调整动画开始时间",noAnimationData:"暂无可显示的动画数据",animationNameEmpty:"动画名称不能为空",animationNameDuplicate:"动画名称不能重复",animationRenameFailed:"无法修改动画名称",zoomIn:"放大",zoomOut:"缩小",zoomFit:"适中",frameStatus:"帧 {current} / {total}"},W$={title:"发射模式",reset:"重置发射模式参数",stream:"持续",burst:"爆发",normalStream:"常规持续",loopStream:"循环持续",rate:"发射速率",duration:"发射时长",loopDuration:"发射时长 (f)",generateStart:"生成开始循环动画",generateEnd:"生成结束循环动画",customDuration:"指定时长",auto:"自动 {frames}f",startLoopDuration:"开始循环段时长",endLoopDuration:"结束循环段时长",loopWarning:"循环持续模式不支持骨骼跟随和路径跟随;进入或退出时会将粒子跟随设置恢复默认值。",burstCount:"单次数量",delay:"延迟时间",shapeTitle:"发射器形状",shapeReset:"重置发射器形状参数",shape:"形状",point:"点",circle:"圆形",rect:"矩形",cone:"锥形",path:"路径",innerDiameter:"内径",outerDiameter:"外径",innerRadius:"内半径",outerRadius:"外半径",coneDirection:"锥形朝向",coneAngle:"锥形开口角度",innerWidth:"内宽",innerHeight:"内高",outerWidth:"外宽",outerHeight:"外高",selectPath:"选择路径",noPath:"无路径(点发射)",birthDistribution:"出生分布",evenDistribution:"等间距固定分布",randomDistribution:"随机分布",emissionAngle:"发射角度",radial:"径向(中心向外)",pathNormal:"垂直于路径",pathTangent:"沿路径方向",fixedAngle:"固定角度",baseAngle:"基准角度",randomRange:"随机范围",showShape:"显示形状"},q$={title:"粒子属性",reset:"重置粒子属性参数",initialParams:"粒子初始参数",initialLife:"初始生命周期",randomSample:"随机采样 →",initialSpeed:"初始速度",initialScale:"初始缩放",uniform:"统一",separateXY:"XY分离",scaleX:"缩放 X",scaleY:"缩放 Y",initialRotation:"初始旋转",lifecycleTitle:"粒子生命周期变化参数",speedOverLife:"生命周期内速度",speedMultiplier:"速度倍率",lifeTo:"生命周期 →",scaleOverLife:"生命周期内缩放",scaleMultiplier:"缩放倍率",multiplierX:"倍率 X",multiplierY:"倍率 Y",rotationOverLife:"生命周期内旋转",rotationSpeed:"旋转速度"},K$={title:"外观与资源",reset:"重置外观与资源参数",opacity:"透明度",curveMode:"曲线模式",transparent:"0(透明)",opaque:"1(不透明)",renderLayer:"渲染层级(Spine 插槽)",top:"最上层",spineSlot:"Spine 插槽",selectSpine:"请选择 Spine",noSpine:"无可用 Spine",noSlot:"尚未选择插槽",reselect:"重新选择",selectSlot:"选择插槽",searchSlots:"搜索插槽或附件名称…",searchSlotsAria:"搜索插槽",emptySlot:"空插槽",noMatchingSlots:"没有匹配的插槽",above:"在此插槽图片之上",below:"在此插槽图片之下",followAttachment:"随插槽附件显隐",previewOnly:"调整显示层级只影响编辑器预览,不影响导出数据。",imageResources:"图片资源",addImage:"新增图片资源",scale:"缩放",color:"颜色",fixedColor:"固定色",randomColor:"随机颜色",lifetime:"生命周期",normal:"正常",add:"相加",multiply:"相乘",screen:"滤色",fixedColorValue:"固定颜色值",randomColorHint:"每个粒子出生时从色带随机取色,生命周期内保持不变",independentAlpha:"独立透明度",off:"关闭"},J$={slotLabelAbove:"{spine} / {slot} · 图片之上",slotLabelBelow:"{spine} / {slot} · 图片之下",resolvedAbove:"渲染在 {slot} 图片之上、其后插槽之下",resolvedBetween:"渲染在 {previous} 与 {slot} 之间",warningNoSpine:"没有已加载的 Spine,粒子临时显示在最上层。",warningNoSelection:"尚未选择 Spine,粒子临时显示在最上层。",warningMissingSpine:"目标 Spine 不存在,粒子临时显示在最上层。",warningNotReady:"目标 Spine 未就绪,粒子临时显示在最上层。",warningMissingSlot:"目标插槽不存在(资源可能已更换),粒子临时显示在最上层。",warningFirstSlot:"这是第一个插槽,无法显示在其下方,粒子临时显示在最上层。"},Z$={completed:"已完成",failed:"操作失败"},Q$={title:"场景对象",addParticle:"添加粒子系统",addParticleShort:"+粒子",addCollider:"添加碰撞体",addColliderShort:"+碰撞",addPath:"添加路径",addPathShort:"+路径",addSpine:"添加 Spine",copyTitle:"复制当前选中的场景对象",showParticle:"显示粒子系统",hideParticle:"隐藏粒子系统",showCollider:"显示碰撞体",hideCollider:"隐藏碰撞体",showPath:"显示路径",hidePath:"隐藏路径",showSpine:"显示 Spine",hideSpine:"隐藏 Spine",particle:"粒子",subEmitter:"子发射器",collision:"碰撞",path:"路径",deleteParticle:"删除粒子系统",deleteCollider:"删除碰撞体",deletePath:"删除路径",deleteSpine:"删除 Spine",empty:"场景中暂无对象",name:"名称",positionX:"位置X",positionY:"位置Y",offsetX:"偏移X",offsetY:"偏移Y",rotation:"旋转",scaleX:"缩放X",scaleY:"缩放Y",seed:"随机种子",seedTitle:"控制粒子系统内全部随机属性、资源选择与修改器随机采样",randomizeSeed:"生成新的全局随机种子",seedHint:"控制初始随机参数、资源选择和修改器随机采样;相同种子可复现相同效果",colliderTitle:"碰撞体属性",colliderName:"碰撞体名称",type:"类型",circle:"圆形",ellipse:"椭圆",rect:"矩形",polygon:"多边形",custom:"自定义",enabled:"启用",xPosition:"X 位置",yPosition:"Y 位置",scaleXShort:"缩放 X",scaleYShort:"缩放 Y",radius:"半径",radiusX:"X 半径",radiusY:"Y 半径",width:"宽度",height:"高度",sides:"边数",collisionResponse:"碰撞响应",physics:"物理(弹跳/摩擦)",pause:"暂停(停止不动)",destroy:"消失(立即销毁)",elasticity:"弹性 (0-1)",friction:"摩擦 (0-1)",followPath:"跟随路径移动",targetPath:"目标路径",notSelected:"(未选择)",moveDuration:"移动时长(秒)",followDirection:"方向沿路径",moveProgressCurve:"移动进度曲线",moveProgressHelp:"横轴:实时/移动时长 纵轴:路径进度(0=起点 → 1=终点)",pathTitle:"路径属性",pathName:"路径名称",closedPath:"闭合路径",pathColor:"路径颜色",pathHelp:"操作说明:",pathHelpItems:["双击空白处/曲线:新建锚点","双击锚点:删除节点","双击第二下按住拖动:新建并拉出手柄","拖动锚点移动位置,拖动手柄调整曲线","Shift+拖动手柄:两侧完全对称","Alt+拖动手柄:独立控制单侧","Ctrl+点击/框选:加选节点","Alt+点击/框选:减选节点","Alt+单击空白处:清除全部选中","选中多个节点后可整体拖动"],applyPresetShape:"应用预设形状",choosePreset:"选择预设...",square:"方形",star:"星形",applyPreset:"应用预设",clearAnchors:"清空锚点",panelHint:"使用右上角按钮创建场景对象"},eB={title:"修改器",reset:"重置修改器参数",damping:"阻尼",enableNoise:"开启移动噪声",strength:"强度",noiseRange:"波动范围",noiseSpeed:"时间流速",noiseHint:"强度控制影响比例 · 波动范围控制最大偏移 · 时间流速控制变化速度",enableGravity:"开启重力",gravityStrength:"重力强度",strengthMin:"强度 min",strengthMax:"强度 max",direction:"方向",gravityOverLife:"生命周期内重力",windOverLife:"生命周期内风力",axisStrength:"纵轴:强度 0~1",directionHint:"0° 向右 · -90° 向下 · 负强度会反转方向",enableWind:"开启风力",windStrength:"风力强度",enableForceField:"开启力场",centerX:"中心 X",centerY:"中心 Y",forceStrength:"力场强度",forceRadius:"力场半径",falloffMode:"衰减模式",constant:"恒定(范围内力度不变)",linearFalloff:"线性衰减(边缘为 0)",inverseFalloff:"距离反比(中心最强)",forceHint:"正数吸向中心 · 负数向外排斥 · 可在画布内拖动力场圆",showShape:"显示形状",enableVortex:"开启漩涡",vortexHint:"正数逆时针 · 负数顺时针",enableAttraction:"开启吸附",attractionX:"吸附点 X",attractionY:"吸附点 Y",attractionRadius:"吸附半径",attractionDuration:"吸附时长",delay:"延迟时间",delayMode:"延迟方式",globalTime:"统一时间",particleLife:"单粒子生命",attractionPath:"吸附方式",straight:"直线",attractionHint:"延迟后从当前位置开始吸附 · 到达红色范围即死亡 · 可在画布内拖动吸附圆",enableTrail:"开启拖尾",trailImages:"拖尾独立图片",addTrailImage:"增加拖尾图片资源",trailRotation:"旋转",trailBones:"拖尾骨骼数",trailRatio:"拖尾比例 (%)",trailLength:"拖尾长度",randomRange:"随机范围",lengthRatio:"长度比例 (%)",lengthMin:"长度最小 (%)",lengthMax:"长度最大 (%)",trailWidth:"拖尾宽度",widthRatio:"宽度比例 (%)",widthMin:"宽度最小 (%)",widthMax:"宽度最大 (%)",widthScale:"宽度缩放",followParticle:"跟随粒子",lifeLengthCurve:"生命周期长度曲线",shapeCurve:"形状曲线(首端 → 尾端宽度)",colorMode:"颜色模式",blendMode:"混合模式",fixedColor:"固定颜色",alphaMode:"透明度模式",opacity:"透明度",gridRows:"网格行数",gridCols:"网格列数",trailHint:"每个粒子按资源比例生成一组同级拖尾骨骼;随机长度与宽度在粒子出生时确定,相同种子可稳定复现",enableFollow:"开启发射器跟随",followMode:"跟随模式",noFollow:"无",followPath:"跟随路径",selectedBone:"选中的骨骼",emitterAngleMode:"发射器角度模式",fixedAngle:"固定角度",followMoveDirection:"跟随移动方向",moveProgressCurve:"移动进度曲线 (0→1)",moveDuration:"移动时长 (s)",followSpace:"跟随空间",localSpace:"局部空间(GEN 移动)",worldSpace:"世界空间(粒子生成点移动)",moveDirection:"移动方向",forward:"正向(起点 → 终点)",reverse:"反向(终点 → 起点)",followOffset:"偏移起始点 (0-1)",followSpaceHint:"局部空间会移动整个发射器;世界空间只移动新粒子的生成点,已出生粒子留在世界位置。",followTarget:"跟随目标:",noValidBone:"尚未绑定有效骨骼,请先在 Spine 层级树中选择骨骼。",rebind:"重新绑定",bind:"绑定",selectedBoneLabel:"当前选中骨骼:",boneLocalSpace:"本地空间(随骨骼移动)",boneWorldSpace:"世界空间(粒子生成后保持位置)",offsetX:"位移偏移 X",offsetY:"位移偏移 Y",rotationOffset:"旋转偏移",scaleOffsetX:"缩放偏移 X",scaleOffsetY:"缩放偏移 Y",boneFollowHint:"发射器只跟随所选 Spine 骨骼的位置,不继承 Spine 的旋转或缩放;粒子变换使用粒子系统自身参数和上方偏移。",enableCollision:"开启碰撞",collisionObjects:"参与的碰撞对象",colliderDisabled:"{name}(碰撞体已禁用)",clearCollider:"清除碰撞对象 {name}",addCollider:"加入场景碰撞对象",noAvailableColliders:"没有可加入的碰撞对象",noCollidersSelected:"未选择碰撞对象,当前粒子不会发生碰撞",available:"可用",disabled:"已禁用",collisionHint:"只有已加入且启用的场景碰撞对象会参与当前粒子系统的碰撞",enableSubEmitter:"开启子发射器",triggerTiming:"选择触发时机",birth:"出生",death:"死亡",collision:"碰撞",chooseTarget:"选择目标粒子系统",noTarget:"无(粒子系统)",deleteSubEmitter:"删除该子发射器",probability:"发射概率",collisionLimit:"碰撞次数限制",inherit:"继承",colorInheritMode:"颜色继承方式",add:"相加",replace:"覆盖",addSubEmitter:"+ 新增子发射器",inheritNone:"无(默认值)",inheritAll:"所有属性",inheritColor:"颜色",inheritScale:"大小",inheritRotation:"旋转",inheritLife:"生命周期"},tB={title:"Spine 属性",name:"Spine 名称",xPosition:"X 位置",yPosition:"Y 位置",rotation:"旋转",scaleX:"Scale X",scaleY:"Scale Y",startTime:"开始时间",resources:"Spine 资源",chooseFolder:"选择文件夹并加载",folderHint:"一次读取文件夹中的 JSON / SKEL、Atlas 和全部纹理;仍可在下方单独替换资源。",choose:"选择",chooseMultiple:"选择(多选)",loading:"加载中…",load:"↧ 加载",clear:"清除",supportNote:"支持 Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · 对应版本运行时按需加载 · 本地离线",currentResource:"当前资源 {version}",animations:"Spine 动画",noAnimations:"无可用动画",timelineAnimation:"时间轴播放动画",no:"无",hierarchy:"层级树",clearBoneTitle:"点击清除骨骼选择",noBoneTitle:"当前未选择骨骼",clearBone:"清除选中骨骼:{name}",currentBone:"当前骨骼:",clearSlotTitle:"点击清除插槽选择",noSlotTitle:"当前未选择插槽",clearSlot:"清除选中插槽:{name}",currentSlot:"当前插槽:",notSelected:"未选择",expandAll:"全部展开",collapseAll:"全部折叠",bones:"骨骼",slots:"插槽",notLoaded:"未加载 Spine",searchBones:"搜索骨骼",searchBonesPlaceholder:"搜索骨骼名称…",clearSearch:"清空搜索",clearBoneSearch:"清空骨骼搜索",noMatchingBones:"未找到匹配的骨骼",expandChildren:"展开子骨骼",collapseChildren:"折叠子骨骼",notLoadedSlots:"未加载 Spine 插槽",searchSlots:"搜索插槽",searchSlotsPlaceholder:"搜索插槽或附件名称…",clearSlotSearch:"清空插槽搜索",noMatchingSlots:"未找到匹配的插槽",slotTitle:"{name}(骨骼:{bone},附件:{attachment})",empty:"空",textureSummary:"{count} 张:{names}",textureImages:"纹理图片",missingFolderAssets:"所选文件夹缺少:{missing}",chooseAssets:"请依次选择 Spine 数据、Atlas 和全部纹理图片"},iB={title:"使用说明",subtitle:"从创建粒子到保存、导出的快速入门",close:"关闭使用说明",closeShort:"关闭 (Esc)",quickStart:"快速开始",stepCreate:"创建对象:在左侧“场景对象”中用 +粒子 / +碰撞 / +路径 / +Spine 添加场景对象。",stepEdit:"编辑粒子:选中粒子系统,依次调整“发射模式 → 发射器形状 → 粒子属性 → 外观与资源 → 修改器”。",stepPreview:"查看效果:底部时间轴可播放、暂停、逐帧或拖动;修改参数后会自动重新计算。",stepExport:"保存与导出:用“保存配置”保留工程;“导出 Spine Json / images 包 / .spine 包”输出成品。",quickNote:"每个模块组标题右侧的“重置”可恢复该组默认参数;系统设置会自动保存在当前浏览器。",commonOps:"常用操作",eye:"小眼睛",eyeDesc:"单独显示/隐藏对象;隐藏的粒子系统不会被导出。",copyDesc:"完整复制当前选中对象,方便对比不同参数。",backgroundDesc:"上传参考图并调整位置和透明度,只用于画布预览。",settingsDesc:"管理界面布局、辅助显示、刻度等,自动存入浏览器。",undoDesc:"Ctrl+Z 撤回一步;最大步数可在系统设置中调整。",spineBoneDesc:"在层级树搜索并选择骨骼,可用于粒子发射器跟随。",shortcuts:"快捷键",undoShortcut:"撤回上一步",saveShortcut:"保存配置",panShortcut:"拖动画布",translateShortcut:"位移工具",rotateShortcut:"旋转工具",scaleShortcut:"缩放工具",playShortcut:"播放 / 暂停",startShortcut:"回到第一帧",shortcutNote:"Q / W / E / R 需先点击画布;光标位于输入框时,单键快捷键不会触发。",modules:"功能模块详解",configTitle:"配置管理",saveConfigDesc:"把当前全部场景对象和参数保存为工程 JSON 文件(也支持 Ctrl+S)。",loadConfigDesc:"选择本地配置文件,恢复完整工程。",presetDesc:"从下拉中选择预设快速套用;点击下拉刷新列表。",configScope:"范围",configScopeDesc:"配置包含对象与参数;界面和系统设置单独存于浏览器。",sceneTitle:"场景对象",particleDesc:"核心对象。可设置位置、偏移、旋转、缩放和随机种子;相同种子可复现相同效果。",colliderDesc:"圆形/椭圆/矩形/多边形/自定义,支持物理弹跳、暂停、销毁,以及沿路径移动。",pathDesc:"贝塞尔路径,支持锚点、控制手柄、闭合、颜色和预设形状。",spineDesc:"加载 Spine 数据、Atlas 和纹理,浏览骨骼与插槽,并用于发射器跟随。",sceneCommonDesc:"对象可独立显隐和复制;隐藏的粒子系统不会导出。",emissionDesc:"持续发射、爆发、延迟,以及开始/循环/结束三段式循环持续。",burstDesc:"一次性发射指定数量的粒子。",delayDesc:"发射开始前的等待时间,对应粒子条左端。",loopNote:"循环持续不支持骨骼和路径跟随,切换时会恢复跟随设置。",shapeDesc:"点、圆形、矩形、锥形或路径出生区域。圆/锥支持内外半径,矩形支持内外宽高。",angleDesc:"固定、随机、径向、路径法线或路径切线。",initialDesc:"生命周期、速度、缩放和旋转支持固定、随机、曲线,旋转可跟随发射方向。",overLifeDesc:"速度倍率、缩放倍率、旋转速度可用生命周期曲线控制。",alphaDesc:"透明度支持固定或曲线;曲线模式可跟随导出、线性或贝塞尔。",imageDesc:"单图或序列帧、多图权重随机、轴点、颜色、混合模式和独立透明度。",sequenceDesc:"播放方式有单次隐藏、单次定格、正向循环、反向循环。",noiseDesc:"产生抖动轨迹,并控制强度、范围和速度。",gravityDesc:"重力、风力和生命周期强度曲线。",forceDesc:"全局力场、漩涡、吸附和碰撞。",trailDesc:"独立拖尾资源、骨骼数、长度、宽度、形状、颜色与透明度曲线。",followDesc:"发射器可跟随路径或 Spine 骨骼。",collisionDesc:"选择场景碰撞对象和粒子碰撞响应。",exportDesc:"设置图片路径、Spine 版本、关键帧曲线、FPS、整数帧、骨骼池和空动画。",exportButtonsDesc:"可导出 Spine JSON、images ZIP,或通过连接器生成 .spine 工程。",connectorTitle:"Spine 连接器使用说明",connectorIntro:"连接器把网页生成的 JSON 和图片交给本机已安装并激活的 Spine,转换成可编辑的 .spine 工程。",prerequisite:"前置",prerequisiteDesc:"电脑已安装并激活 Spine,并已启动桌面版连接器。",download:"下载",webSide:"网页端",webSideDesc:"显示“连接器可用 · Spine 已就绪”后,点击“导出 .spine 包”。",authorization:"首次授权",authorizationDesc:"首次连接需核对网站来源并允许一次;本机会保存授权白名单。",pathSetup:"路径设置",pathSetupDesc:"连接器会自动检测 Spine;找不到时可手动指定应用路径。",downloadResult:"下载结果",downloadResultDesc:"得到 ZIP 包,内含 .spine 工程和图片目录。",version:"版本",versionDesc:"连接器按 JSON 版本自动匹配 Spine 3.8~4.3。",security:"安全",securityDesc:"仅监听本机地址,授权保存在连接器,临时文件转换后清理。",differenceTitle:"配置与导出有什么区别?",differenceDesc:"“保存配置”保存全部可继续编辑的对象和参数;“导出 Spine Json”只导出显示中的粒子系统,并把碰撞、跟随、拖尾和子发射器结果烘焙为独立动画数据。"},nB={confirmLoopFollowEnter:"进入循环持续模式后,粒子跟随设置会失效并恢复默认值。是否继续?",confirmLoopFollowExit:"退出循环持续模式后,粒子跟随设置会失效并恢复默认值。是否继续?",invalidJson:"配置文件不是有效的 JSON",invalidConfigFormat:"不是 SpineParticle 编辑器配置文件",unsupportedConfigVersion:"暂不支持配置版本:{version}",missingScene:"配置文件缺少完整场景数据",missingEmbeddedSpine:"配置未包含可复用的 Spine 原始资源",chooseJsonConfig:"请选择 .json 配置文件",settingsInvalidJson:"系统设置缓存不是有效的 JSON",settingsFormat:"不是 SpineParticle 编辑器系统设置缓存",settingsVersion:"暂不支持系统配置版本:{version}",settingsMissing:"系统设置缓存缺少 settings",noExportableImages:"当前可见粒子系统没有可导出的图片",invalidZipPath:"ZIP 文件路径无效",spineFileType:"Spine 数据仅支持 .json 或 .skel",atlasFileType:"图集文件仅支持 .atlas",chooseTexture:"请至少选择一张纹理图片",binaryParseFailed:"Spine 二进制解析失败(4.3:{v43};旧版:{v42})",invalidSpineJson:"Spine JSON 文件格式无效",unsupportedSpineJsonVersion:"Spine JSON 版本不受支持,仅支持 {versions}",unsupportedSpineDataVersion:"Spine 数据版本不受支持,仅支持 {versions}",embeddedReadFailed:"无法读取内嵌 Spine 文件:{name}",missingImageWarning:"图片“{file}”缺失或尺寸不可读,已保留路径。",missingTrailImageWarning:"拖尾图片“{file}”缺失,已保留路径。",emptyCacheWarning:"“{name}”没有可用帧缓存。",readExportImageFailed:"无法读取导出图片:{name}",connectorOffline:"未检测到本地 Spine 连接器,请先启动连接器",connectorHttpError:"Spine 连接器返回错误:HTTP {status}",invalidTrailUV:"拖尾网格“{name}”的 UV 数据无效",missingTrailVertices:"拖尾网格“{name}”缺少顶点数据",trailIndexOutOfRange:"拖尾网格“{name}”的三角形索引越界",invalidTrailHull:"拖尾网格“{name}”的外轮廓数量无效",trailHullIndexOutOfRange:"拖尾网格“{name}”的外轮廓边索引越界",invalidInfluenceCount:"拖尾网格“{name}”包含无效骨骼权重数量",missingBoneReference:"拖尾网格“{name}”引用了不存在的骨骼",invalidWeight:"拖尾网格“{name}”包含无效权重数据",weightSum:"拖尾网格“{name}”的顶点权重之和不为 1",vertexCountMismatch:"拖尾网格“{name}”的顶点数量与 UV 不一致",invalidInherit:"骨骼“{name}”的 inherit 值“{inherit}”不符合 Spine {version} JSON 格式",trailBoneParent:"拖尾骨骼“{name}”必须直接挂在粒子系统骨骼下,不能组成骨骼链",trailSlotEmpty:"加权拖尾插槽“{name}”不能使用空附件,未出现或死亡阶段应将对应骨骼缩放设为 0",spine38Version:"Spine 3.8 导出的版本标识必须为 3.8",spine38Inherit:"Spine 3.8 骨骼“{name}”应使用 transform,不能使用 inherit",spine38SlotColor:"Spine 3.8 插槽颜色时间轴必须使用 color / twoColor",spine38AttachmentName:"Spine 3.8 附件时间轴的隐藏帧必须显式写入 name: null",spine38RotationAngle:"Spine 3.8 旋转时间轴必须使用 angle",spine38Curve:"Spine 3.8 不支持 4.x 数组曲线格式",unsupportedExportVersion:"导出版本不受支持,仅支持 Spine {versions}",exportVersionMismatch:"导出版本不一致:设置为 Spine {expected},JSON 标记为 Spine {actual}",exportMissingBones:"导出结果缺少骨骼",missingAtlasTexture:"Atlas 引用的纹理未选择:{name}"},sB={app:D$,language:O$,common:N$,toolbar:$$,settings:B$,config:U$,presets:V$,curve:X$,gradient:Y$,attributeControl:z$,pivot:j$,image:H$,timeline:G$,emission:W$,attributes:q$,appearance:K$,renderLayer:J$,export:{title:"导出设置",reset:"重置导出设置",imagesPath:"图片路径 (Spine Images Path)",spineVersion:"Spine 版本",keyframeCurve:"关键帧插值曲线",linear:"线性 (Linear)",smoothBezier:"平滑贝塞尔 (Smooth Bézier)",bezierHelp:"平滑贝塞尔会在误差允许范围内拟合连续运动;出生、死亡、附件切换和突变仍使用阶跃关键帧。",spine38Help:"Spine 3.8 不支持 4.x 的逐通道数组贝塞尔,导出时会转换为经过容差精简的分段线性关键帧。",fps:"导出 FPS",omitFps:"不写 fps",fpsHelp:"修改 FPS 时保持动画实际秒数不变;“不写 fps”只省略 Spine 的 fps 元数据。",integerFrames:"整数帧对齐",bonePool:"骨骼对象池",excludeEmpty:"排除无内容动画",baking:"正在重新计算并烘焙动画",exportJsonTitle:"导出 Spine {version} JSON",preparing:"正在准备导出…",exportJson:"导出Spine Json",exportImagesTitle:"单独下载当前粒子系统使用的图片 ZIP",organizingImages:"正在整理图片…",exportImages:"导出 images 包",generatingProject:"正在生成工程…",exportSpine:"导出 .spine 包",authorize:"授权当前网站",authorizeTitle:"在本机连接器中授权当前网站",refreshConnector:"重新检测连接器",refresh:"刷新",recalculating:"正在重新计算粒子动画…",exported:"已导出 Spine {version}:{systems} 个粒子系统、{animations} 个动画、{bones} 根骨骼{warning}",resourceWarning:";{count} 条资源提示(缺图仍已导出)",timeout:"重新计算动画超时,请确认页面仍在运行后重试",preparingProject:"正在整理图片并调用本机 Spine…",projectExported:"已生成 {fileName}:包含 .spine 工程和 {images} 张图片,Spine {version}",collectingImages:"正在整理当前粒子系统使用的图片…",imagesExported:"已生成 {fileName}:{folder}/ 内包含 {images} 张图片",connectorChecking:"正在检测本地 Spine 连接器…",connectorOffline:"本地 Spine 连接器未启动",spineNotFound:"连接器已启动,但未找到 Spine",notAuthorized:"连接器已启动,当前网站尚未授权",connectorReady:"连接器可用 · Spine 已就绪",connectorBusy:"正在重新计算并生成 Spine 工程",connectorGenerate:"调用本机 Spine 自动生成 {version} 工程",unknown:"未知",checking:"检测中",offline:"未启动",notFound:"未找到 Spine",unauthorized:"未授权",projectTransferTitle:"导出 Spine 包",projectTransferDetail:"正在重新计算粒子动画…",projectTransferDownload:"Spine 工程包已开始下载",generatingJson:"正在生成 Spine JSON…",preparingProjectFiles:"正在整理工程图片…",uploading:"正在上传数据到 Spine 连接器…",spineProcessing:"Spine 正在转换工程,请稍候…",downloadingProject:"正在下载生成的 Spine 工程包…",handingToBrowser:"正在交给浏览器下载…"},transfer:Z$,scene:Q$,modifiers:eB,spine:tB,help:iB,errors:nB},rB={resizeTimeline:"拖曳調整時間軸高度",systems:"系統",particlesBones:"粒子(骨骼)",rootBone:"根骨骼",hudTip:"滾輪縮放 · 左鍵拖動畫布",title:"Spine粒子編輯器-Yeomai"},oB={close:"關閉",reset:"重設",add:"新增",remove:"移除",delete:"刪除",clear:"清除",cancel:"取消",confirm:"確定",none:"無",enabled:"啟用",disabled:"停用",fixed:"固定",random:"隨機",curve:"曲線",followExport:"跟隨匯出",linear:"線性",bezier:"貝茲",above:"上方",below:"下方",left:"左側",right:"右側",seconds:"秒",frames:"幀"},aB={settings:"系統設定",undo:"復原上一步 (Ctrl+Z)",pan:"拖曳畫布 (Q)",translate:"位移 (W)",rotate:"旋轉 (E)",scale:"縮放 (R)",zoomIn:"放大",zoomOut:"縮小",fitView:"適合畫布",toggleGrid:"切換網格",resetView:"重設視圖",background:"背景圖",backgroundSettings:"背景圖顯示設定",changeBackground:"更換圖像",uploadBackground:"上傳圖像",clearBackground:"清除背景",noBackground:"未上傳圖像",backgroundX:"背景圖 X 偏移",backgroundY:"背景圖 Y 偏移",backgroundOpacity:"背景圖透明度",opacity:"透明度",help:"使用說明",openHelp:"查看使用說明"},lB={title:"系統設定",layout:"介面佈局",parameterPanelPosition:"參數面板位置",panelOnRight:"參數面板顯示在右側",history:"操作歷史",maxUndo:"最大撤回步數",canvasGuides:"畫布輔助顯示",emitter:"發射點",bones:"骨骼連線",bonePointSize:"骨骼點繪製大小",boneAxisSize:"座標軸繪製大小",skinMesh:"蒙皮網格",enableTicks:"啟用刻度",tickFontSize:"刻度文字大小",tickWidth:"刻度線粗細",axisColor:"座標軸顏色",showAxisLabels:"顯示刻度數值",cacheNote:"整個系統設定會自動儲存到目前瀏覽器"},cB={title:"設定管理",save:"儲存設定",saveTitle:"儲存全部編輯器配置 (Ctrl+S)",load:"載入設定",loadTitle:"載入本機編輯器配置",presets:"預設列表",selectPreset:"選擇預設",noPresets:"無預設檔案",saved:"配置已儲存至本機",loading:"正在加載配置…",loaded:"已載入:{name}",presetLoading:"正在載入預設…",presetLoaded:"已載入預設:{name}",presetNamingError:"{message},請檢查預設檔命名",presetTransferTitle:"載入預設",presetDownloading:"正在下載 {file}…",presetParsing:"正在解析預設配置…",presetRestoring:"正在解析並恢復預設資源…",presetComplete:"預設載入完成",presetListError:"無法讀取預設列表",presetReadError:"無法讀取預設:{file}"},dB={particleSweep:"1.粒子掃過",barBlocks:"2.長條方塊",forceTrail:"3.力場拖尾",lightningSequence:"4.雷電序列幀",texturePivot:"5.貼圖軸點",subEmitter:"6.子發射器"},uB={bezierHint:"拖曳方形手把調整弧度 · 雙擊空白新建 · 雙擊節點刪除",linearHint:"雙擊空白新建 · 雙擊節點刪除 · 拖曳節點調整",resetTitle:"恢復預設曲線"},hB={addTitle:"雙擊色帶添加色標",color:"色標顏色",colorValue:"色標顏色值",position:"色標位置",addMiddle:"在中間新增顏色",delete:"刪除目前色標",hint:"雙擊色帶新增 · 拖曳色標調整位置 · 雙擊色標刪除"},fB={angleOffset:"角度偏移",value:"數值",lower:"下限",upper:"上限",rangeLower:"範圍下限",rangeUpper:"範圍上限",curveInput:"曲線輸入 →",direction:"發射方向"},pB={title:"貼圖軸點",zoomOut:"縮小",zoomIn:"放大",expand:"放大到全螢幕操作",interaction:"左鍵點選/拖曳設定軸點 · 右鍵拖曳動畫布 · 滾輪縮放",previewAlt:"軸點預覽",noImage:"未選擇圖片",resetCenter:"復位中 (50%, 50%)",coordinates:"軸點座標(%)",rotationTest:"軸心旋轉測試",static:"靜止",spin:"自轉",swing:"擺動",rotationAlt:"旋轉測試",topLeft:"左上",top:"正上",topRight:"右上",left:"正左",center:"正中",right:"正右",bottomLeft:"左下",bottom:"正下·底部",bottomRight:"右下"},mB={chooseSequence:"選擇序列影格圖片",chooseLocal:"選擇本地圖片",subfolder:"子資料夾",name:"名稱",restore:"恢復 {name}",deleteResource:"刪除圖片資源",imageMode:"圖片模式",fixed:"固定",sequence:"序列幀",playbackMode:"播放模式",onceHide:"單次-尾幀消失",onceHold:"單次-尾幀固定",loopForward:"正向循環",loopReverse:"反向循環",playbackFps:"播放影格率",chooseSequenceMulti:"選擇序列幀(多選)",weight:"權重 %",unlockWeight:"解除佔比鎖定",lockWeight:"鎖定目前佔比",pivot:"貼圖軸點",collapsePivot:"收起軸點調整",expandPivot:"展開軸點調整",pivotModal:"貼圖旋轉軸點大圖精修",pivotModalDesc:"在下方貼圖上任意點擊或拖拽,精確設定粒子的旋轉/擺動中心",pivotZoomHint:"支援 100% ~ 400% 放大,精確對準尖端或根部:",confirmPivot:"確定並保存軸點",noSequence:"未選擇序列幀",firstFrame:"第 1 幀",firstImage:"第一張圖片",lastImage:"最後一張圖片",pivotOn:"已開啟:X {x}% | Y {y}%",pivotOff:"未開啟,預設圍繞圖片正中心 (50%, 50%)",pivotCustom:"軸點已自訂:X {x}% | Y {y}%",frameCountOne:"1 幀 · {name}",frameCountMany:"{count} 幀 · {first} → {last}",sequenceSelected:"已選擇 {count} 幀,按 {first}-{last} 順序播放"},gB={play:"播放 (D)",pause:"暫停 (D)",toStart:"回到第一幀 (S)",previous:"前一幀",next:"後一幀",toEnd:"移動到最後一幀",continuousLoop:"持續循環播放",abLoop:"獨立 A/B 區間循環",abLoopShort:"AB 循環",abRange:"AB 循環區間",playbackStart:"自訂播放起始幀",playbackEnd:"自訂播放結束幀",startFrame:"播放起始影格",endFrame:"播放結束影格",frame:"影格",emission:"持續發射",particleLife:"粒子存在",spineAnimation:"Spine 動畫",ownerAnimation:"所屬動畫",setOwnerAnimation:"設定目前粒子系統所屬的動畫",chooseOwnerAnimation:"選擇所屬動畫",animationName:"動畫名稱",renameAnimation:"重新命名當前動畫",rename:"重新命名",newAnimation:"+ 新增",keepOneAnimation:"至少需要保留一個動畫",spinePreview:"Spine 預覽動畫",noSpineAnimation:"無可用 Spine 動畫",none:"無",systemName:"系統 {index}",dragLoopDuration:"拖曳循環段時長",dragEmissionDuration:"拖曳持續發射時長",dragSpineStart:"拖曳調整動畫開始時間",noAnimationData:"暫無可顯示的動畫數據",animationNameEmpty:"動畫名稱不能為空",animationNameDuplicate:"動畫名稱不能重複",animationRenameFailed:"無法修改動畫名稱",zoomIn:"放大",zoomOut:"縮小",zoomFit:"適中",frameStatus:"幀 {current} / {total}"},vB={title:"發射模式",reset:"重置發射模式參數",stream:"持續",burst:"爆發",normalStream:"一般持續",loopStream:"循環持續",rate:"發射速率",duration:"發射時長",loopDuration:"發射時長 (f)",generateStart:"生成開始循環動畫",generateEnd:"生成結束循環動畫",customDuration:"指定時長",auto:"自動 {frames}f",startLoopDuration:"開始循環段時長",endLoopDuration:"結束循環段時長",loopWarning:"循環持續模式不支援骨骼跟隨和路徑跟隨;進入或退出時會將粒子跟隨設定恢復預設值。",burstCount:"單次數量",delay:"延遲時間",shapeTitle:"發射器形狀",shapeReset:"重置發射器形狀參數",shape:"形狀",point:"點",circle:"圓形",rect:"矩形",cone:"錐形",path:"路徑",innerDiameter:"內徑",outerDiameter:"外徑",innerRadius:"內半徑",outerRadius:"外半徑",coneDirection:"錐形朝向",coneAngle:"錐形開口角度",innerWidth:"內寬",innerHeight:"內高",outerWidth:"外寬",outerHeight:"外高",selectPath:"選擇路徑",noPath:"無路徑(點發射)",birthDistribution:"出生分佈",evenDistribution:"等間距固定分佈",randomDistribution:"隨機分佈",emissionAngle:"發射角度",radial:"徑向(中心向外)",pathNormal:"垂直於路徑",pathTangent:"沿路徑方向",fixedAngle:"固定角度",baseAngle:"基準角度",randomRange:"隨機範圍",showShape:"顯示形狀"},bB={title:"粒子屬性",reset:"重置粒子屬性參數",initialParams:"粒子初始參數",initialLife:"初始生命週期",randomSample:"隨機取樣 →",initialSpeed:"初始速度",initialScale:"初始縮放",uniform:"統一",separateXY:"XY分離",scaleX:"縮放 X",scaleY:"縮放 Y",initialRotation:"初始旋轉",lifecycleTitle:"粒子生命週期變化參數",speedOverLife:"生命週期內速度",speedMultiplier:"速度倍率",lifeTo:"生命週期 →",scaleOverLife:"生命週期內縮放",scaleMultiplier:"縮放倍率",multiplierX:"倍率 X",multiplierY:"倍率 Y",rotationOverLife:"生命週期內旋轉",rotationSpeed:"旋轉速度"},yB={title:"外觀與資源",reset:"重置外觀與資源參數",opacity:"透明度",curveMode:"曲線模式",transparent:"0(透明)",opaque:"1(不透明)",renderLayer:"渲染層級(Spine 插槽)",top:"最上層",spineSlot:"Spine 插槽",selectSpine:"請選擇 Spine",noSpine:"無可用 Spine",noSlot:"尚未選擇插槽",reselect:"重新選擇",selectSlot:"選擇插槽",searchSlots:"搜尋插槽或附件名稱…",searchSlotsAria:"搜尋插槽",emptySlot:"空插槽",noMatchingSlots:"沒有符合的插槽",above:"在此插槽圖片之上",below:"在此插槽圖片之下",followAttachment:"隨插槽附件顯隱",previewOnly:"調整顯示層級只會影響編輯器預覽,不影響匯出資料。",imageResources:"圖片資源",addImage:"新增圖片資源",scale:"縮放",color:"顏色",fixedColor:"固定色",randomColor:"隨機顏色",lifetime:"生命週期",normal:"正常",add:"相加",multiply:"相乘",screen:"濾色",fixedColorValue:"固定顏色值",randomColorHint:"每個粒子出生時從色帶隨機取色,生命週期內保持不變",independentAlpha:"獨立透明度",off:"關閉"},xB={slotLabelAbove:"{spine} / {slot} · 圖片之上",slotLabelBelow:"{spine} / {slot} · 圖片之下",resolvedAbove:"渲染在 {slot} 圖片之上、其後插槽之下",resolvedBetween:"渲染在 {previous} 與 {slot} 之間",warningNoSpine:"沒有已載入的 Spine,粒子暫時顯示在最上層。",warningNoSelection:"尚未選擇 Spine,粒子暫時顯示在最上層。",warningMissingSpine:"目標 Spine 不存在,粒子暫時顯示在最上層。",warningNotReady:"目標 Spine 未就緒,粒子暫時顯示在最上層。",warningMissingSlot:"目標插槽不存在(資源可能已更換),粒子暫時顯示在最上層。",warningFirstSlot:"這是第一個插槽,無法顯示在其下方,粒子暫時顯示在最上層。"},wB={completed:"已完成",failed:"操作失敗"},SB={title:"場景物件",addParticle:"加入粒子系統",addParticleShort:"+粒子",addCollider:"添加碰撞體",addColliderShort:"+碰撞",addPath:"新增路徑",addPathShort:"+路徑",addSpine:"加入 Spine",copyTitle:"複製目前選取的場景對象",showParticle:"顯示粒子系統",hideParticle:"隱藏粒子系統",showCollider:"顯示碰撞體",hideCollider:"隱藏碰撞體",showPath:"顯示路徑",hidePath:"隱藏路徑",showSpine:"顯示 Spine",hideSpine:"隱藏 Spine",particle:"粒子",subEmitter:"子發射器",collision:"碰撞",path:"路徑",deleteParticle:"刪除粒子系統",deleteCollider:"刪除碰撞體",deletePath:"刪除路徑",deleteSpine:"刪除 Spine",empty:"場景中暫無對象",name:"名稱",positionX:"X 位置",positionY:"Y 位置",offsetX:"X 偏移",offsetY:"Y 偏移",rotation:"旋轉",scaleX:"X 縮放",scaleY:"Y 縮放",seed:"隨機種子",seedTitle:"控製粒子系統內全部隨機屬性、資源選擇與修改器隨機取樣",randomizeSeed:"產生新的全域隨機種子",seedHint:"控制初始隨機參數、資源選擇和修改器隨機取樣;相同種子可重現相同效果",colliderTitle:"碰撞體屬性",colliderName:"碰撞體名稱",type:"類型",circle:"圓形",ellipse:"橢圓",rect:"長方形",polygon:"多邊形",custom:"自訂",enabled:"啟用",xPosition:"X 位置",yPosition:"Y 位置",scaleXShort:"X 縮放",scaleYShort:"Y 縮放",radius:"半徑",radiusX:"X 半徑",radiusY:"Y 半徑",width:"寬度",height:"高度",sides:"邊數",collisionResponse:"碰撞響應",physics:"物理(彈跳/摩擦)",pause:"暫停(停止不動)",destroy:"消失(立即銷毀)",elasticity:"彈性 (0-1)",friction:"摩擦 (0-1)",followPath:"跟隨路徑移動",targetPath:"目標路徑",notSelected:"(未選擇)",moveDuration:"移動時長(秒)",followDirection:"方向沿路徑",moveProgressCurve:"移動進度曲線",moveProgressHelp:"橫軸:即時/移動時長 縱軸:路徑進度(0=起點 → 1=終點)",pathTitle:"路徑屬性",pathName:"路徑名稱",closedPath:"閉合路徑",pathColor:"路徑顏色",pathHelp:"操作說明:",pathHelpItems:"雙擊空白處/曲線:新錨點,雙擊錨點:刪除節點,雙擊第二下按住拖曳:新建並拉出手柄,拖曳錨點移動位置,拖曳手柄調整曲線,Shift+拖曳手柄:兩側完全對稱,A lt+拖曳手把:獨立控制單側,Ctrl+點選/框選:加選節點,Alt+點選/框選:減選節點,Alt+點選空白處:清除全部選取,選取多個節點後可整體拖曳",applyPresetShape:"應用預設形狀",choosePreset:"選擇預設...",square:"方形",star:"星形",applyPreset:"應用預設",clearAnchors:"清空錨點",panelHint:"使用右上角按鈕建立場景對象"},CB={title:"修改器",reset:"重置修改器參數",damping:"阻尼",enableNoise:"開啟移動雜訊",strength:"強度",noiseRange:"波動範圍",noiseSpeed:"時間流速",noiseHint:"強度控制影響比例 · 波動範圍控制最大偏移 · 時間流速控制變化速度",enableGravity:"開啟重力",gravityStrength:"重力強度",strengthMin:"強度 min",strengthMax:"強度 max",direction:"方向",gravityOverLife:"生命週期內重力",windOverLife:"生命週期內風力",axisStrength:"縱軸:強度 0~1",directionHint:"0° 向右 · -90° 向下 · 負強度會反轉方向",enableWind:"開啟風力",windStrength:"風力強度",enableForceField:"開啟力場",centerX:"中心 X",centerY:"中心 Y",forceStrength:"力場強度",forceRadius:"力場半徑",falloffMode:"衰減模式",constant:"恆定(範圍內力道不變)",linearFalloff:"線性衰減(邊緣為 0)",inverseFalloff:"距離反比(中心最強)",forceHint:"正數吸向中心 · 負數向外排斥 · 可在畫布內拖動力場圓",showShape:"顯示形狀",enableVortex:"開啟漩渦",vortexHint:"正數逆時針 · 負數順時針",enableAttraction:"開啟吸附",attractionX:"吸附點 X",attractionY:"吸附點 Y",attractionRadius:"吸附半徑",attractionDuration:"吸附時長",delay:"延遲時間",delayMode:"延遲方式",globalTime:"統一時間",particleLife:"單粒子生命",attractionPath:"吸附方式",straight:"直線",attractionHint:"延遲後從當前位置開始吸附 · 到達紅色範圍即死亡 · 可在畫布內拖動吸附圓",enableTrail:"開啟拖尾",trailImages:"拖尾獨立圖片",addTrailImage:"增加拖尾圖片資源",trailRotation:"旋轉",trailBones:"拖尾骨骼數",trailRatio:"拖尾比例 (%)",trailLength:"拖尾長度",randomRange:"隨機範圍",lengthRatio:"長度比例 (%)",lengthMin:"長度最小 (%)",lengthMax:"長度最大 (%)",trailWidth:"拖尾寬度",widthRatio:"寬度比例 (%)",widthMin:"寬度最小 (%)",widthMax:"寬度最大 (%)",widthScale:"寬度縮放",followParticle:"跟隨粒子",lifeLengthCurve:"生命週期長度曲線",shapeCurve:"形狀曲線(首端 → 尾端寬度)",colorMode:"色彩模式",blendMode:"混合模式",fixedColor:"固定顏色",alphaMode:"透明度模式",opacity:"透明度",gridRows:"網格行數",gridCols:"網格列數",trailHint:"每個粒子依資源比例產生一組同級拖尾骨骼;隨機長度與寬度在粒子出生時確定,相同種子可穩定復現",enableFollow:"開啟發射器跟隨",followMode:"跟隨模式",noFollow:"無",followPath:"跟隨路徑",selectedBone:"選取的骨骼",emitterAngleMode:"發射器角度模式",fixedAngle:"固定角度",followMoveDirection:"跟著移動方向",moveProgressCurve:"移動進度曲線 (0→1)",moveDuration:"移動時長 (s)",followSpace:"跟隨空間",localSpace:"局部空間(GEN 移動)",worldSpace:"世界空間(粒子生成點移動)",moveDirection:"移動方向",forward:"正向(起點 → 終點)",reverse:"反向(終點 → 起點)",followOffset:"偏移起始點 (0-1)",followSpaceHint:"局部空間會移動整個發射器;世界空間只移動新粒子的生成點,已出生粒子留在世界位置。",followTarget:"跟隨目標:",noValidBone:"尚未綁定有效骨骼,請先在 Spine 層級樹中選擇骨骼。",rebind:"重新綁定",bind:"綁定",selectedBoneLabel:"目前選取骨骼:",boneLocalSpace:"本地空間(隨骨骼移動)",boneWorldSpace:"世界空間(粒子生成後保持位置)",offsetX:"位移偏移 X",offsetY:"位移偏移 Y",rotationOffset:"旋轉偏移",scaleOffsetX:"縮放偏移 X",scaleOffsetY:"縮放偏移 Y",boneFollowHint:"發射器只跟隨所選 Spine 骨骼的位置,不繼承 Spine 的旋轉或縮放;粒子變換使用粒子系統本身參數和上方偏移。",enableCollision:"開啟碰撞",collisionObjects:"參與的碰撞對象",colliderDisabled:"{name}(碰撞體已停用)",clearCollider:"清除碰撞物件 {name}",addCollider:"加入場景碰撞對象",noAvailableColliders:"沒有可加入的碰撞對象",noCollidersSelected:"未選擇碰撞對象,目前粒子不會發生碰撞",available:"可用",disabled:"已停用",collisionHint:"只有已加入且啟用的場景碰撞物件會參與目前粒子系統的碰撞",enableSubEmitter:"開啟子發射器",triggerTiming:"選擇觸發時機",birth:"出生",death:"死亡",collision:"碰撞",chooseTarget:"選擇目標粒子系統",noTarget:"無(粒子系統)",deleteSubEmitter:"刪除該子發射器",probability:"發射機率",collisionLimit:"碰撞次數限制",inherit:"繼承",colorInheritMode:"顏色繼承方式",add:"相加",replace:"覆蓋",addSubEmitter:"+ 新增子發射器",inheritNone:"無(預設值)",inheritAll:"所有屬性",inheritColor:"顏色",inheritScale:"大小",inheritRotation:"旋轉",inheritLife:"生命週期"},AB={title:"Spine 屬性",name:"Spine 名稱",xPosition:"X 位置",yPosition:"Y 位置",rotation:"旋轉",scaleX:"X 縮放",scaleY:"Y 縮放",startTime:"開始時間",resources:"Spine 資源",chooseFolder:"選擇資料夾並加載",folderHint:"一次讀取資料夾中的 JSON / SKEL、Atlas 和全部紋理;仍可在下方單獨取代資源。",choose:"選擇",chooseMultiple:"選擇(多選)",loading:"載入中…",load:"↧ 加載",clear:"清除",supportNote:"支援 Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · 對應版本運行時按需載入 · 本地離線",currentResource:"目前資源 {version}",animations:"Spine 動畫",noAnimations:"無可用動畫",timelineAnimation:"時間軸播放動畫",no:"無",hierarchy:"階層樹",clearBoneTitle:"點擊清除骨骼選擇",noBoneTitle:"目前未選擇骨骼",clearBone:"清除選取骨骼:{name}",currentBone:"當前骨骼:",clearSlotTitle:"點選清除插槽選擇",noSlotTitle:"目前未選擇插槽",clearSlot:"清除選取插槽:{name}",currentSlot:"目前插槽:",notSelected:"未選擇",expandAll:"全部展開",collapseAll:"全部折疊",bones:"骨骼",slots:"插槽",notLoaded:"未載入 Spine",searchBones:"搜尋骨骼",searchBonesPlaceholder:"搜尋骨骼名稱…",clearSearch:"清空搜尋",clearBoneSearch:"清空骨骼搜索",noMatchingBones:"未找到匹配的骨骼",expandChildren:"展開子骨骼",collapseChildren:"折疊子骨骼",notLoadedSlots:"未載入 Spine 插槽",searchSlots:"搜尋插槽",searchSlotsPlaceholder:"搜尋插槽或附件名稱…",clearSlotSearch:"清空插槽搜尋",noMatchingSlots:"未找到符合的插槽",slotTitle:"{name}(骨骼:{bone},配件:{attachment})",empty:"空",textureSummary:"{count} 張:{names}",textureImages:"紋理圖片",missingFolderAssets:"所選資料夾缺少:{missing}",chooseAssets:"請依序選擇 Spine 資料、Atlas 和全部紋理圖片"},TB={title:"使用說明",subtitle:"從創建粒子到保存、導出的快速入門",close:"關閉使用說明",closeShort:"關閉 (Esc)",quickStart:"快速開始",stepCreate:"建立物件:在左側「場景物件」中以 +粒子 / +碰撞 / +路徑 / +Spine 新增場景物件。",stepEdit:"編輯粒子:選取粒子系統,依序調整「發射模式 → 發射器形狀 → 粒子屬性 → 外觀與資源 → 修改器」。",stepPreview:"查看效果:底部時間軸可播放、暫停、逐幀或拖曳;修改參數後會自動重新計算。",stepExport:"儲存與匯出:以「儲存設定」保留工程;「匯出 Spine Json / images 套件 / .spine 套件」輸出完成品。",quickNote:"每個模組組標題右側的「重設」可恢復此組預設參數;系統設定會自動儲存在目前瀏覽器。",commonOps:"常用操作",eye:"小眼睛",eyeDesc:"單獨顯示/隱藏物件;隱藏的粒子系統不會被匯出。",copyDesc:"完整複製目前選取對象,方便比較不同參數。",backgroundDesc:"上傳參考圖並調整位置和透明度,只用於畫布預覽。",settingsDesc:"管理介面佈局、輔助顯示、刻度等,自動存入瀏覽器。",undoDesc:"Ctrl+Z 撤回一步;最大步數可在系統設定中調整。",spineBoneDesc:"在層級樹搜尋並選擇骨骼,可用於粒子發射器跟隨。",shortcuts:"快速鍵",undoShortcut:"撤銷上一步",saveShortcut:"儲存配置",panShortcut:"拖曳動畫布",translateShortcut:"位移工具",rotateShortcut:"旋轉工具",scaleShortcut:"縮放工具",playShortcut:"播放 / 暫停",startShortcut:"回到第一幀",shortcutNote:"Q / W / E / R 需先點選畫布;遊標位於輸入框時,單鍵快速鍵不會觸發。",modules:"功能模組詳解",configTitle:"配置管理",saveConfigDesc:"把目前全部場景物件和參數儲存為工程​​ JSON 檔案(也支援 Ctrl+S)。",loadConfigDesc:"選擇本地設定文件,恢復完整工程。",presetDesc:"從下拉選擇預設快速套用;點選下拉刷新清單。",configScope:"範圍",configScopeDesc:"配置包含物件與參數;介面和系統設定單獨存於瀏覽器。",sceneTitle:"場景對象",particleDesc:"核心對象。可設定位置、偏移、旋轉、縮放和隨機種子;相同種子可重複相同效果。",colliderDesc:"圓形/橢圓/矩形/多邊形/自訂,支援實體彈跳、暫停、銷毀,以及沿路徑移動。",pathDesc:"貝塞爾路徑,支援錨點、控製手柄、閉合、顏色和預設形狀。",spineDesc:"載入 Spine 資料、Atlas 和紋理,瀏覽骨骼與插槽,並用於發射器跟隨。",sceneCommonDesc:"物件可獨立顯隱和複製;隱藏的粒子系統不會導出。",emissionDesc:"持續發射、爆發、延遲,以及開始/循環/結束三段式循環持續。",burstDesc:"一次性發射指定數量的粒子。",delayDesc:"發射開始前的等待時間,對應粒子條左端。",loopNote:"循環持續不支援骨骼和路徑跟隨,切換時會恢復跟隨設定。",shapeDesc:"點、圓形、長方形、錐形或路徑出生區域。圓/錐支持內外半徑,矩形支持內外寬高。",angleDesc:"固定、隨機、徑向、路徑法線或路徑切線。",initialDesc:"生命週期、速度、縮放和旋轉支援固定、隨機、曲線,旋轉可跟隨發射方向。",overLifeDesc:"速度倍率、縮放倍率、旋轉速度可用生命週期曲線控制。",alphaDesc:"透明度支援固定或曲線;曲線模式可跟隨導出、線性或貝塞爾。",imageDesc:"單圖或序列幀、多圖權重隨機、軸點、顏色、混合模式和獨立透明度。",sequenceDesc:"播放方式有單次隱藏、單次定格、正向循環、反向循環。",noiseDesc:"產生抖動軌跡,並控制強度、範圍和速度。",gravityDesc:"重力、風力和生命週期強度曲線。",forceDesc:"全局力場、漩渦、吸附和碰撞。",trailDesc:"獨立拖尾資源、骨骼數、長度、寬度、形狀、顏色與透明度曲線。",followDesc:"發射器可跟隨路徑或 Spine 骨骼。",collisionDesc:"選擇場景碰撞物件和粒子碰撞響應。",exportDesc:"設定圖片路徑、Spine 版本、關鍵影格曲線、FPS、整數影格、骨骼池和空白動畫。",exportButtonsDesc:"可導出 Spine JSON、images ZIP,或透過連接器產生 .spine 工程。",connectorTitle:"Spine 連接器使用說明",connectorIntro:"連接器把網頁產生的 JSON 和圖片交給本機已安裝並啟動的 Spine,轉換成可編輯的 .spine 工程。",prerequisite:"前置",prerequisiteDesc:"電腦已安裝並啟動 Spine,並已啟動桌面版連接器。",download:"下載",webSide:"網頁端",webSideDesc:"顯示「連接器可用 · Spine 已就緒」後,點選「匯出 .spine 套件」。",authorization:"首次授權",authorizationDesc:"首次連接需核對網站來源並允許一次;本機會保存授權白名單。",pathSetup:"路徑設定",pathSetupDesc:"連接器會自動偵測 Spine;找不到時可手動指定應用路徑。",downloadResult:"下載結果",downloadResultDesc:"得到 ZIP 包,內含 .spine 工程和圖片目錄。",version:"版本",versionDesc:"連接器按 JSON 版本自動匹配 Spine 3.8~4.3。",security:"安全",securityDesc:"僅監聽本機位址,授權保存在連接器,臨時檔案轉換後清理。",differenceTitle:"配置與匯出有什麼差別?",differenceDesc:"「儲存配置」儲存全部可繼續編輯的物件和參數;「匯出 Spine Json」只匯出顯示中的粒子系統,並把碰撞、跟隨、拖尾和子發射器結果烘焙為獨立動畫資料。"},EB={confirmLoopFollowEnter:"進入循環持續模式後,粒子跟隨設定會失效並恢復預設值。是否繼續?",confirmLoopFollowExit:"退出循環持續模式後,粒子跟隨設定會失效並恢復預設值。是否繼續?",invalidJson:"設定檔不是有效的 JSON",invalidConfigFormat:"不是 SpineParticle 編輯器設定檔",unsupportedConfigVersion:"暫不支援配置版本:{version}",missingScene:"設定檔缺少完整場景數據",missingEmbeddedSpine:"配置未包含可重複使用的 Spine 原始資源",chooseJsonConfig:"請選擇 .json 設定文件",settingsInvalidJson:"系統設定快取不是有效的 JSON",settingsFormat:"不是 SpineParticle 編輯器系統設定緩存",settingsVersion:"暫不支援系統配置版本:{version}",settingsMissing:"系統設定緩存缺少 settings",noExportableImages:"目前可見粒子系統沒有可匯出的圖片",invalidZipPath:"ZIP 檔案路徑無效",spineFileType:"Spine 資料僅支援 .json 或 .skel",atlasFileType:"圖集檔案僅支援 .atlas",chooseTexture:"請至少選擇一張紋理圖片",binaryParseFailed:"Spine 二進位解析失敗(4.3:{v43};舊版:{v42})",invalidSpineJson:"Spine JSON 檔案格式無效",unsupportedSpineJsonVersion:"Spine JSON 版本不受支持,僅支援 {versions}",unsupportedSpineDataVersion:"Spine 資料版本不受支持,僅支援 {versions}",embeddedReadFailed:"無法讀取內嵌 Spine 檔案:{name}",missingImageWarning:"圖片「{file}」缺失或尺寸不可讀,已保留路徑。",missingTrailImageWarning:"拖尾圖片「{file}」缺失,已保留路徑。",emptyCacheWarning:"“{name}”沒有可用幀快取。",readExportImageFailed:"無法讀取匯出圖:{name}",connectorOffline:"未偵測到本機 Spine 連接器,請先啟動連接器",connectorHttpError:"Spine 連接器回傳錯誤:HTTP {status}",invalidTrailUV:"拖尾網格「{name}」的 UV 資料無效",missingTrailVertices:"拖尾網格“{name}”缺少頂點數據",trailIndexOutOfRange:"拖尾網格「{name}」的三角形索引越界",invalidTrailHull:"拖尾網格「{name}」的外輪廓數量無效",trailHullIndexOutOfRange:"拖尾網格「{name}」的外輪廓邊索引越界",invalidInfluenceCount:"拖尾網格“{name}”包含無效骨骼權重數量",missingBoneReference:"拖尾網格“{name}”引用了不存在的骨骼",invalidWeight:"拖尾網格“{name}”包含無效權重數據",weightSum:"拖尾網格「{name}」的頂點權重總和不為 1",vertexCountMismatch:"拖尾網格「{name}」的頂點數量與 UV 不一致",invalidInherit:"骨骼「{name}」的 inherit 值「{inherit}」不符合 Spine {version} JSON 格式",trailBoneParent:"拖尾骨骼「{name}」必須直接掛在粒子系統骨骼下,無法組成骨骼鏈",trailSlotEmpty:"加權拖尾插槽「{name}」不能使用空白附件,未出現或死亡階段應將對應骨骼縮放設為 0",spine38Version:"Spine 3.8 導出的版本標識必須為 3.8",spine38Inherit:"Spine 3.8 骨骼「{name}」應使用 transform,不能使用 inherit",spine38SlotColor:"Spine 3.8 插槽顏色時間軸必須使用 color / twoColor",spine38AttachmentName:"Spine 3.8 附件時間軸的隱藏訊框必須明確寫入 name: null",spine38RotationAngle:"Spine 3.8 旋轉時間軸必須使用 angle",spine38Curve:"Spine 3.8 不支援 4.x 陣列曲線格式",unsupportedExportVersion:"匯出版本不受支持,僅支援 Spine {versions}",exportVersionMismatch:"匯出版本不一致:設定為 Spine {expected},JSON 標記為 Spine {actual}",exportMissingBones:"匯出結果缺少骨骼",missingAtlasTexture:"Atlas 引用的紋理未選擇:{name}"},_B={label:"語言",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},MB={app:rB,common:oB,toolbar:aB,settings:lB,config:cB,presets:dB,curve:uB,gradient:hB,attributeControl:fB,pivot:pB,image:mB,timeline:gB,emission:vB,attributes:bB,appearance:yB,renderLayer:xB,export:{title:"匯出設定",reset:"重置導出設定",imagesPath:"圖片路徑 (Spine Images Path)",spineVersion:"Spine 版本",keyframeCurve:"關鍵幀插值曲線",linear:"線性 (Linear)",smoothBezier:"平滑貝塞爾 (Smooth Bézier)",bezierHelp:"平滑貝塞爾會在誤差允許範圍內擬合連續運動;出生、死亡、附件切換和突變仍使用階躍關鍵幀。",spine38Help:"Spine 3.8 不支援 4.x 的逐通道數組貝塞爾,導出時會轉換為經過容差精簡的分段線性關鍵影格。",fps:"匯出 FPS",omitFps:"不寫 fps",fpsHelp:"修改 FPS 時保持動畫實際秒數不變;「不寫 fps」只省略 Spine 的 fps 元資料。",integerFrames:"整數幀對齊",bonePool:"骨骼物件池",excludeEmpty:"排除無內容動畫",baking:"正在重新計算並烘焙動畫",exportJsonTitle:"導出 Spine {version} JSON",preparing:"正在準備匯出…",exportJson:"匯出 Spine JSON",exportImagesTitle:"單獨下載目前粒子系統使用的圖片 ZIP",organizingImages:"正在整理圖片…",exportImages:"匯出圖片 ZIP",generatingProject:"正在生成工程…",exportSpine:"匯出 .spine 包",authorize:"授權目前網站",authorizeTitle:"在本機連接器中授權目前網站",refreshConnector:"重新偵測連接器",refresh:"重新整理",recalculating:"正在重新計算粒子動畫…",exported:"已匯出 Spine {version}:{systems} 個粒子系統、{animations} 個動畫、{bones} 根骨骼{warning}",resourceWarning:";{count} 條資源提示(缺圖仍已匯出)",timeout:"重新計算動畫超時,請確認頁面仍在運行後重試",preparingProject:"正在整理圖片並調用本機 Spine…",projectExported:"已產生 {fileName}:包含 .spine 工程和 {images} 張圖片,Spine {version}",collectingImages:"正在整理目前粒子系統使用的圖片…",imagesExported:"已產生 {fileName}:{folder}/ 內包含 {images} 張圖片",connectorChecking:"正在偵測本地 Spine 連接器…",connectorOffline:"本機 Spine 連接器未啟動",spineNotFound:"連接器已啟動,但找不到 Spine",notAuthorized:"連接器已啟動,但目前網站尚未授權",connectorReady:"連接器可用 · Spine 已就緒",connectorBusy:"正在重新計算並產生 Spine 專案",connectorGenerate:"使用本機 Spine 自動產生 {version} 專案",unknown:"未知",checking:"偵測中",offline:"未啟動",notFound:"找不到 Spine",unauthorized:"未授權",projectTransferTitle:"匯出 Spine 包",projectTransferDetail:"正在重新計算粒子動畫…",projectTransferDownload:"Spine 工程包已開始下載",generatingJson:"正在生成 Spine JSON…",preparingProjectFiles:"正在整理工程圖片…",uploading:"正在上傳資料到 Spine 連接器…",spineProcessing:"Spine 正在轉換工程,請稍候…",downloadingProject:"正在下載產生的 Spine 工程包…",handingToBrowser:"正在交給瀏覽器下載…"},transfer:wB,scene:SB,modifiers:CB,spine:AB,help:TB,errors:EB,language:_B},fC=[{code:"zh-CN",label:"中文"},{code:"zh-TW",label:"繁體中文"},{code:"en",label:"English"},{code:"ja",label:"日本語"},{code:"ko",label:"한국어"},{code:"fr",label:"Français"},{code:"de",label:"Deutsch"},{code:"pt-BR",label:"Português"},{code:"es",label:"Español"}],pC="spine-particle.locale";function PB(n){return fC.some(e=>e.code===n)}function IB(n,e){if(PB(n))return n;for(const t of e){const i=t.toLowerCase();if(i.startsWith("zh"))return i.includes("hant")||/-(tw|hk|mo)(-|$)/.test(i)?"zh-TW":"zh-CN";if(i.startsWith("ja"))return"ja";if(i.startsWith("ko"))return"ko";if(i.startsWith("fr"))return"fr";if(i.startsWith("de"))return"de";if(i.startsWith("pt"))return"pt-BR";if(i.startsWith("es"))return"es";if(i.startsWith("en"))return"en"}return"en"}function kB(){var t;let n=null;if(typeof window<"u")try{n=localStorage.getItem(pC)}catch{}const e=typeof navigator>"u"?[]:(t=navigator.languages)!=null&&t.length?[...navigator.languages]:[navigator.language];return IB(n,e)}const mC=kB(),ac=yD({legacy:!1,locale:mC,fallbackLocale:"en",messages:{"zh-CN":sB,"zh-TW":MB,en:SO,ja:UN,ko:d$,fr:gN,de:ZD,"pt-BR":L$,es:HO}});function gC(n){if(ac.global.locale.value=n,typeof window<"u")try{localStorage.setItem(pC,n)}catch{}typeof document<"u"&&(document.documentElement.lang=n,document.title=ac.global.t("app.title"))}function Ye(n,e){return e?ac.global.t(n,e):ac.global.t(n)}gC(mC);const vC="SpineParticle.SystemSettings",bC=1,dp="SpineParticle.SystemSettings.v1";function pl(n,e,t,i){const s=Number(n);return Math.min(t,Math.max(e,Number.isFinite(s)?s:i))}function RB(n){return{parameterPanelOnRight:n.parameterPanelOnRight,undoLimit:n.undoLimit,showEmitter:n.showEmitter,showBones:n.showBones,bonePointDrawSize:n.bonePointDrawSize,boneAxisDrawSize:n.boneAxisDrawSize,showSkinMesh:n.showSkinMesh,tickEnabled:n.tickEnabled,axisFontSize:n.axisFontSize,tickWidth:n.tickWidth,showAxisLabels:n.showAxisLabels,axisColor:n.axisColor}}function FB(n,e){const t=s=>n[s]==null?!!e[s]:n[s]===!0,i=typeof n.axisColor=="string"&&/^#[0-9a-f]{6}$/i.test(n.axisColor)?n.axisColor:e.axisColor;return{parameterPanelOnRight:t("parameterPanelOnRight"),undoLimit:Math.round(pl(n.undoLimit,1,200,e.undoLimit)),showEmitter:t("showEmitter"),showBones:t("showBones"),bonePointDrawSize:pl(n.bonePointDrawSize,.1,10,e.bonePointDrawSize),boneAxisDrawSize:pl(n.boneAxisDrawSize,.1,10,e.boneAxisDrawSize),showSkinMesh:t("showSkinMesh"),tickEnabled:t("tickEnabled"),axisFontSize:Math.round(pl(n.axisFontSize,8,40,e.axisFontSize)),tickWidth:pl(n.tickWidth,1,5,e.tickWidth),showAxisLabels:t("showAxisLabels"),axisColor:i}}function LB(n){let e;try{e=JSON.parse(n)}catch{throw new Error(Ye("errors.settingsInvalidJson"))}const t=e;if(t.format!==vC)throw new Error(Ye("errors.settingsFormat"));if(t.version!==bC)throw new Error(Ye("errors.settingsVersion",{version:t.version??Ye("export.unknown")}));if(!t.settings||typeof t.settings!="object")throw new Error(Ye("errors.settingsMissing"));return t}function DB(n,e){Object.assign(n.settings,FB(e,n.settings))}let cd=null;function OB(n){cd==null||cd();try{const e=localStorage.getItem(dp);e&&DB(n,LB(e).settings)}catch{try{localStorage.removeItem(dp)}catch{}}cd=ei(()=>RB(n.settings),e=>{const t={format:vC,version:bC,savedAt:new Date().toISOString(),settings:e};try{localStorage.setItem(dp,JSON.stringify(t))}catch{}},{deep:!0})}function NB(n,e=0){if(n<=0)return 1;const t=Math.pow(10,Math.floor(Math.log10(n))),i=[1,2,5,10,20,50,100];let s=1;for(const r of i)if(r*t>=n){s=r*t;break}return Math.max(s,e)}function $B(n,e,t,i,s){if(!t)return;const r=t;r.clear();const o=n.settings;if(!o.tickEnabled){for(const S of s)S.visible=!1;return}const a=0,c=0,l=e.screen.width/n.editor.viewScale,d=e.screen.height/n.editor.viewScale,u=+("0x"+o.axisColor.replace("#",""));r.lineStyle(1.5,u,.35),r.moveTo(-l,c),r.lineTo(l,c),r.moveTo(a,-d),r.lineTo(a,d);const h=n.editor.viewScale,f=NB(50/h),p=l,m=d,g=Math.max(1,o.tickWidth);if(o.tickEnabled){for(let S=0;S<=l;S+=f){const E=Math.round(S/f)*f;E!==0&&(r.lineStyle(g,u,.25),r.moveTo(E,c-4),r.lineTo(E,c+4),r.moveTo(-E,c-4),r.lineTo(-E,c+4))}for(let S=0;S<=d;S+=f)Math.round(S/f)*f!==0&&(r.lineStyle(g,u,.25),r.moveTo(a-4,S),r.lineTo(a+4,S),r.moveTo(a-4,-S),r.lineTo(a+4,-S))}const v=e.screen.width/2+n.editor.viewX,y=e.screen.height*.5+n.editor.viewY,b=o.axisFontSize,x=+("0x"+o.axisColor.replace("#",""));for(;s.length<64;){const S=new Lg("",{fontFamily:"monospace",fontSize:b,fill:x});S.anchor.set(.5,.5),i.addChild(S),s.push(S)}let C=0;const T=o.showAxisLabels&&o.tickEnabled;for(let S=0;S<=l;S+=f){const E=Math.round(S/f)*f;if(E===0||!T||E>p)continue;const _=s[C++];if(!_)break;_.style.fontSize=b,_.text=String(E),_.position.set(v+E*h,y+9),_.visible=!0;const I=s[C++];if(!I)break;I.style.fontSize=b,I.text=String(-E),I.position.set(v-E*h,y+9),I.visible=!0}for(let S=0;S<=d;S+=f){const E=Math.round(S/f)*f;if(E===0||!T||E>m)continue;const _=s[C++];if(!_)break;_.style.fontSize=b,_.text=String(E),_.position.set(v+8,y-S*h),_.visible=!0;const I=s[C++];if(!I)break;I.style.fontSize=b,I.text=String(-E),I.position.set(v+8,y+S*h),I.visible=!0}for(;Cy.id===n.activeId);if(!s||s.visible===!1)return;const r=s.config;if(!r.showShape)return;const o=e.get(s.id),a=(o==null?void 0:o.x)??r.centerX??0,c=-((o==null?void 0:o.y)??r.centerY??0),l=r.shape;if(l==="point"||l==="path")return;const d=r.rootScaleX??1,u=r.rootScaleY??1,h=-((o==null?void 0:o.rotation)??r.rootRotation??0)*Math.PI/180,f=Math.cos(h),p=Math.sin(h),m=r.offsetX??0,g=r.offsetY??0,v=(y,b)=>{const x=y+m,C=-b-g,T=x*d,S=C*u;return[a+T*f-S*p,c+(T*p+S*f)]};if(l==="circle"){const y=au(r.innerRadius,r.outerRadius);i.lineStyle(2,3991658,.7);const b=48;for(const x of[y.outer,y.inner])if(!(x<=0))for(let C=0;C<=b;C++){const T=C/b*Math.PI*2,[S,E]=v(Math.cos(T)*x,Math.sin(T)*x);C===0?i.moveTo(S,E):i.lineTo(S,E)}}else if(l==="rect"){const y=AS(r);i.lineStyle(2,4885759,.7);for(const[b,x]of[[y.outerW,y.outerH],[y.innerW,y.innerH]]){if(b<=0||x<=0)continue;const C=b/2,T=x/2,S=v(-C,-T),E=v(C,-T),_=v(C,T),I=v(-C,T);i.moveTo(S[0],S[1]),i.lineTo(E[0],E[1]),i.lineTo(_[0],_[1]),i.lineTo(I[0],I[1]),i.lineTo(S[0],S[1])}}else if(l==="cone"){const y=au(r.innerRadius,r.outerRadius),b=r.coneAngle/2*Math.PI/180,x=r.coneDirection*Math.PI/180,C=v(Math.cos(x-b)*y.inner,Math.sin(x-b)*y.inner),T=v(Math.cos(x+b)*y.inner,Math.sin(x+b)*y.inner),S=v(Math.cos(x-b)*y.outer,Math.sin(x-b)*y.outer),E=v(Math.cos(x+b)*y.outer,Math.sin(x+b)*y.outer);i.lineStyle(2,3991658,.7),i.moveTo(C[0],C[1]),i.lineTo(S[0],S[1]),i.moveTo(T[0],T[1]),i.lineTo(E[0],E[1]),i.lineStyle(1,3991658,.5);const _=24;for(const I of[y.outer,y.inner])if(!(I<=0))for(let M=0;M<=_;M++){const k=x-b+2*b*M/_,[B,D]=v(Math.cos(k)*I,Math.sin(k)*I);M===0?i.moveTo(B,D):i.lineTo(B,D)}}}function VB(n,e){if(!e)return;const t=e;t.clear();const i=n.systems.find(c=>c.id===n.activeId);if((i==null?void 0:i.visible)===!1)return;const s=i==null?void 0:i.config;if(!(s!=null&&s.forceField)||!s.showForceFieldShape||s.forceRadius<=0)return;const r=s.forceCenterX,o=-s.forceCenterY,a=s.forceStrength>=0?5818367:16739194;t.lineStyle(2,a,.85),t.beginFill(a,.08),t.drawCircle(r,o,s.forceRadius),t.endFill(),t.lineStyle(1,a,.7),t.moveTo(r-9,o),t.lineTo(r+9,o),t.moveTo(r,o-9),t.lineTo(r,o+9),t.beginFill(a,.95),t.drawCircle(r,o,4),t.endFill()}function XB(n,e){if(!e)return;const t=e;t.clear();const i=n.systems.find(u=>u.id===n.activeId);if((i==null?void 0:i.visible)===!1)return;const s=i==null?void 0:i.config;if(!(s!=null&&s.vortex)||!s.showVortexShape||s.vortexRadius<=0)return;const r=s.vortexCenterX,o=-s.vortexCenterY,a=s.vortexStrength>=0?12156159:16753228;t.lineStyle(2,a,.9),t.beginFill(a,.07),t.drawCircle(r,o,s.vortexRadius),t.endFill(),t.beginFill(a,.95),t.drawCircle(r,o,4),t.endFill();const c=r+Math.min(s.vortexRadius*.65,50),l=s.vortexStrength>=0?-1:1,d=o+l*14;t.lineStyle(2,a,.9),t.moveTo(c,o+l*-8),t.lineTo(c,d),t.moveTo(c,d),t.lineTo(c-4,d-l*5),t.moveTo(c,d),t.lineTo(c+4,d-l*5)}function YB(n,e){if(!e)return;const t=e;t.clear();const i=n.systems.find(l=>l.id===n.activeId);if((i==null?void 0:i.visible)===!1)return;const s=i==null?void 0:i.config;if(!(s!=null&&s.attraction)||!s.showAttractionShape)return;const r=s.attractionCenterX,o=-s.attractionCenterY,a=Math.max(0,s.attractionRadius),c=16731487;a>0&&(t.lineStyle(2,c,.95),t.beginFill(c,.09),t.drawCircle(r,o,a),t.endFill()),t.lineStyle(1,c,.85),t.moveTo(r-10,o),t.lineTo(r+10,o),t.moveTo(r,o-10),t.lineTo(r,o+10),t.beginFill(c,1),t.drawCircle(r,o,a>0?4:6),t.endFill()}function zB(n,e,t){const i=n.rotation*Math.PI/180,s=Math.cos(i),r=Math.sin(i),o=Math.max(1e-4,Math.abs(n.scaleX??1)),a=Math.max(1e-4,Math.abs(n.scaleY??1));return{x:n.x+s*e*o-r*t*a,y:n.y+r*e*o+s*t*a}}function aa(n,e,t){const i=n.rotation*Math.PI/180,s=Math.cos(i),r=Math.sin(i),o=Math.max(1e-4,Math.abs(n.scaleX??1)),a=Math.max(1e-4,Math.abs(n.scaleY??1)),c=e-n.x,l=t-n.y;return{x:(s*c+r*l)/o,y:(-r*c+s*l)/a}}function yC(n,e,t="linear"){if(!n.length)return e;const i=[...n].sort((s,r)=>s.x-r.x);if(e<=i[0].x)return i[0].y;for(let s=1;sl.id===a.emitterFollowSpineId);!c||c.visible===!1||s.set(`${a.emitterFollowSpineId}:${a.emitterFollowBoneName}`,{spineId:a.emitterFollowSpineId,boneName:a.emitterFollowBoneName})}for(const o of s.values()){const a=e==null?void 0:e.getBoneWorldTransform(o.spineId,o.boneName);if(!a)continue;const c=a.x,l=-a.y;i.lineStyle(2,12881151,.95),i.beginFill(12881151,.2),i.drawCircle(c,l,8),i.endFill(),i.beginFill(15919103,1),i.drawCircle(c,l,3.5),i.endFill()}}function HB(n,e,t){if(!t)return;const i=t;if(i.clear(),!n.value)return;const s=e();if(!s)return;const r=s.x,o=-s.y,a=s.scaleX,c=s.scaleY,l=-s.rotation*Math.PI/180,d=Math.cos(l),u=Math.sin(l),h=(m,g)=>{const v=m*a,y=-g*c;return[r+v*d-y*u,o+(v*u+y*d)]},f=(m,g,v,y)=>{const b=h(m,g),x=h(v,y);i.moveTo(b[0],b[1]),i.lineTo(x[0],x[1])},p=26;if(i.lineStyle(2,3526911,.9),i.beginFill(3526911,.25),i.drawCircle(r,o,6),i.endFill(),n.value==="translate")i.lineStyle(2,3526911,.9),f(-p,0,p,0),f(0,-p,0,p),f(p-6,-4,p,0),f(p,0,p-6,4),f(-20,-4,-p,0),f(-p,0,-20,4),f(-4,p-6,0,p),f(0,p,4,p-6),f(-4,-20,0,-p),f(0,-p,4,-20);else if(n.value==="rotate"){i.lineStyle(2,3526911,.8);const m=48;for(let y=0;y<=m;y++){const b=y/m*Math.PI*2,[x,C]=h(Math.cos(b)*p,Math.sin(b)*p);y===0?i.moveTo(x,C):i.lineTo(x,C)}const[g,v]=h(0,p);i.beginFill(3526911,.95),i.drawCircle(g,v,4),i.endFill()}else if(n.value==="scale"){i.lineStyle(2,3526911,.9);const g=[[-p,-p],[p,-p],[p,p],[-p,p]].map(([v,y])=>h(v,y));i.moveTo(g[0][0],g[0][1]),i.lineTo(g[1][0],g[1][1]),i.lineTo(g[2][0],g[2][1]),i.lineTo(g[3][0],g[3][1]),i.lineTo(g[0][0],g[0][1]),i.beginFill(3526911,.9);for(const v of g)i.drawRect(v[0]-3,v[1]-3,6,6);i.endFill()}}function GB(n,e=16777215){const t=Number.parseInt(n.replace("#",""),16);return Number.isFinite(t)?t:e}function WB(n,e,t){if(!t)return;const i=t;i.clear();for(const s of e){if(s.visible===!1)continue;const r=n.activeObjectType==="collision"&&n.activeObjectId===s.id,o=s.enabled?r?16735858:13911899:5792116,a=s.rotation*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=Math.max(1e-4,Math.abs(s.scaleX??1)),u=Math.max(1e-4,Math.abs(s.scaleY??1)),h=(m,g)=>({x:s.x+c*m*d-l*g*u,y:-(s.y+l*m*d+c*g*u)});let f=[];if(s.shape==="circle"||s.shape==="ellipse"){const m=s.shape==="circle"?s.radius:s.radiusX,g=s.shape==="circle"?s.radius:s.radiusY;f=Array.from({length:49},(v,y)=>{const b=y/48*Math.PI*2;return h(Math.cos(b)*m,Math.sin(b)*g)})}else if(s.shape==="rect"){const m=s.width*.5,g=s.height*.5;f=[h(-m,-g),h(m,-g),h(m,g),h(-m,g),h(-m,-g)]}else{const m=Math.max(3,Math.min(16,Math.round(s.sides)));f=Array.from({length:m+1},(g,v)=>{const y=Math.PI*.5+v%m/m*Math.PI*2;return h(Math.cos(y)*s.width*.5,Math.sin(y)*s.height*.5)})}if(!f.length)continue;i.lineStyle(r?2.5:1.5,o,s.enabled?.95:.45),i.beginFill(o,r?.12:.055),i.moveTo(f[0].x,f[0].y);for(let m=1;mo.id===n.activeObjectId):null,r=(s==null?void 0:s.config.shape)==="path"&&!s.config.showShape?s.config.spawnPathId:0;for(const o of n.paths){if(o.id===r||o.visible===!1||!o.enabled||!o.points.length)continue;const a=n.activeObjectType==="path"&&n.activeObjectId===o.id,c=GB(o.color,16749374),l=(f,p)=>{const m=zB(o,f,p);return{x:m.x,y:-m.y}},d=o.points[0],u=l(d.x,d.y);i.lineStyle(a?2.5:1.8,c,a?1:.75),i.moveTo(u.x,u.y);const h=o.closed?o.points.length:o.points.length-1;for(let f=0;f{const m=l(f.x,f.y),g=l(f.x+f.inX,f.y+f.inY),v=l(f.x+f.outX,f.y+f.outY),y=Math.hypot(f.inX,f.inY)>.01,b=Math.hypot(f.outX,f.outY)>.01;i.lineStyle(1,11121867,.65),y&&(i.moveTo(m.x,m.y),i.lineTo(g.x,g.y)),b&&(i.moveTo(m.x,m.y),i.lineTo(v.x,v.y)),y&&(i.beginFill(14015724,.95),i.drawCircle(g.x,g.y,3),i.endFill()),b&&(i.beginFill(14015724,.95),i.drawCircle(v.x,v.y,3),i.endFill()),i.beginFill(e.has(p)?16777215:c,1),i.lineStyle(1.5,e.has(p)?6126847:16777215,.95),i.drawCircle(m.x,m.y,e.has(p)?5:4),i.endFill()})}}function KB(n,e,t,i){var o;const s=Number.isFinite(e.worldX)&&Number.isFinite(e.worldY),r=Number.isFinite(e.worldRotation);n.push({boneName:e.boneName,x:s?e.worldX:e.x,y:s?-e.worldY:e.y,rotation:r?-e.worldRotation:-e.rotation,parentX:t,parentY:i}),(o=e.trailState)!=null&&o.bones.length&&e.trailState.bones.forEach(a=>{const c=Number.isFinite(a.worldX)&&Number.isFinite(a.worldY),l=Number.isFinite(a.worldRotation);n.push({boneName:a.boneName,x:c?a.worldX:a.x,y:c?-a.worldY:a.y,rotation:l?-a.worldRotation:a.rotation,parentX:t,parentY:i,trail:!0})})}function Xy(n,e,t,i,s,r,o,a){const c=r*.62,l=e+i*r,d=t+s*r,u=Math.max(2.5,r*.32),h=Math.max(1.7,r*.22),f=l-i*u,p=d-s*u,m=-s,g=i;n.lineStyle(o,a,.95),n.moveTo(e-i*c,t-s*c),n.lineTo(f,p),n.lineStyle(0),n.beginFill(a,.95),n.drawPolygon([l,d,f+m*h,p+g*h,f-m*h,p-g*h]),n.endFill()}function JB(n,e,t){if(!t)return;const i=t;if(i.clear(),!e.settings.showBones)return;const s=0,r=0,o=Math.max(.25,Math.abs(e.editor.viewScale)||1),a=Math.min(10,Math.max(.1,Number(e.settings.bonePointDrawSize)||1)),c=Math.min(10,Math.max(.1,Number(e.settings.boneAxisDrawSize)||2)),l=2.5*a/o,d=4.5*c/o,u=Math.max(.65,c*.625)/o;for(const h of n){const f=h.trail?16731533:16747610;i.lineStyle(1,f,h.trail?.65:.35),i.moveTo(h.parentX??s,h.parentY??r),i.lineTo(h.x,h.y);const p=h.rotation*Math.PI/180,m=Math.cos(p),g=Math.sin(p);Xy(i,h.x,h.y,m,g,d,u,15684432),Xy(i,h.x,h.y,g,-m,d,u,5622123),i.beginFill(f,.9),i.drawCircle(h.x,h.y,l),i.endFill()}}function Xi(n){return n.map(e=>({...e,trailState:e.trailState?{...e.trailState,bones:e.trailState.bones.map(t=>({...t}))}:void 0}))}function ZB(n){const e=new Map;for(const i of n)for(const s of i)e.has(s.boneName)||e.set(s.boneName,Xi([s])[0]);const t=[...e.keys()].sort((i,s)=>{const r=Number(i.replace(/^p_/,"")),o=Number(s.replace(/^p_/,""));return Number.isFinite(r)&&Number.isFinite(o)?r-o:i.localeCompare(s)});for(let i=0;i[r.boneName,r]));n[i]=t.map(r=>{const o=s.get(r);return o||{...Xi([e.get(r)])[0],alpha:0,imageVisible:!1,trailState:void 0,active:!0}})}}function QB(n){n.length<2||(n[n.length-1]=Xi(n[0]))}function e3(n,e){const t=Math.max(0,n.length-1),i=[];for(let s=0;s<=e;s++){const r=Math.min(t,Math.round(s/e*t));i.push(Xi(n[r]||[]))}return i}function up(n){return`${n.boneName}:${n.spawnId??"legacy"}`}function Yy(n){return{...Xi([n])[0],alpha:0,imageVisible:!1,trailState:void 0,active:!0}}function t3(n,e,t,i){const s=Math.min(n.length,i+1),r=n.slice(Math.max(0,n.length-s)),o=new Map;for(const l of e){if(l.imageVisible===!1||l.alpha<=0)continue;const d=up(l),u=new Map;let h=!1;for(let f=r.length-1;f>=0;f--){const p=r[f].find(m=>up(m)===d);if(p)h=!0,u.set(f,p);else if(h)break}o.set(d,u)}const a=Math.max(0,r.length-1),c=[];for(let l=0;l<=t;l++){const d=Math.min(a,Math.round(l/t*a));c.push(e.map(u=>{var f;if(u.imageVisible===!1||u.alpha<=0)return Xi([u])[0];const h=(f=o.get(up(u)))==null?void 0:f.get(d);return h?Xi([h])[0]:Yy(u)}))}return c[0]=c[0].map(Yy),c[c.length-1]=Xi(e),c}function zy(n,e){const t=n.length?1:0;for(let i=t;i{const b=y?[[]]:[];e.reset();for(let x=0;x0&&e.restartEmissionCycle();for(let C=0;C0;x++)e.update(r,"off"),y.push(e.capture());(v=y[y.length-1])!=null&&v.length&&y.push([]),zy(u,e3(y,a.end))}const g=Xi(u[u.length-1]||[]);for(u.length>i&&(u.length=i);u.length{var a;return String(((a=o==null?void 0:o.data)==null?void 0:a.name)||"")}):null}catch{return null}}getSlotLocalMatrix(e,t){var o,a,c;const i=(o=this.entries.get(e))==null?void 0:o.spine,s=(c=(a=i==null?void 0:i.skeleton)==null?void 0:a.findSlot)==null?void 0:c.call(a,t),r=s==null?void 0:s.bone;return r!=null&&r.active?new Bt(r.a,r.c,-r.b,-r.d,r.worldX,r.worldY):null}getSlotParentMatrix(e,t,i){const s=this.getSlotLocalMatrix(e,t);if(!s)return null;const r=-i.rotation*Math.PI/180,o=Math.cos(r),a=Math.sin(r);return new Bt(o*i.scaleX,a*i.scaleX,-a*i.scaleY,o*i.scaleY,i.x,-i.y).append(s)}attachSlotObject(e,t,i,s){var o;const r=(o=this.entries.get(e))==null?void 0:o.spine;if(!(r!=null&&r.addSlotObject))return!1;try{return r.addSlotObject(t,i,{followAttachmentTimeline:s}),!0}catch{return!1}}detachSlotObject(e,t,i){var r,o;const s=(r=this.entries.get(e))==null?void 0:r.spine;try{(o=s==null?void 0:s.removeSlotObject)==null||o.call(s,t,i)}catch{}}destroyEntry(e){var t,i;try{(i=(t=e.spine)==null?void 0:t.removeSlotObjects)==null||i.call(t)}catch{}this.container.removeChild(e.root),e.root.destroy({children:!0})}sync(e,t,i){var s;for(const[r,o]of this.entries)e.some(a=>a.id===r)||(this.destroyEntry(o),this.entries.delete(r));for(const r of e){const o=cF(r.id);let a=this.entries.get(r.id);if(a&&a.assetVersion!==r.assetVersion&&!o&&(this.destroyEntry(a),this.entries.delete(r.id),a=void 0),(!a||a.assetVersion!==r.assetVersion)&&o){a&&this.destroyEntry(a);const h=new _i,f=new o.SpineClass({skeletonData:o.skeletonData,autoUpdate:!1,darkTint:!1});o.skeletonData.defaultSkin&&f.skeleton.setSkin(o.skeletonData.defaultSkin),o.runtimeVersion==="4.3"?f.skeleton.setupPoseSlots():f.skeleton.setSlotsToSetupPose(),h.addChild(f),this.container.addChild(h),a={root:h,spine:f,runtimeVersion:o.runtimeVersion,assetVersion:r.assetVersion,animation:""},this.entries.set(r.id,a)}if(!a)continue;const c=a.root,l=a.spine,d=r.visible!==!1&&r.enabled;c.visible=d,c.renderable=d,c.position.set(r.x,-r.y),c.rotation=-r.rotation*Math.PI/180,c.scale.set(r.scaleX,r.scaleY),a.animation!==r.selectedAnimation&&(a.animation=r.selectedAnimation,a.runtimeVersion==="4.3"?l.skeleton.setupPose():l.skeleton.setToSetupPose(),l.state.clearTracks(),a.animation&&l.state.setAnimation(0,a.animation,!1));const u=a.runtimeVersion==="4.3"?l.state.getTrack(0):l.state.getCurrent(0);if(u){const h=((s=r.animations.find(p=>p.name===r.selectedAnimation))==null?void 0:s.duration)||0,f=Math.max(0,t/Math.max(1,i)-r.timeOffset);u.trackTime=h>0?Math.min(f,h):f}l.update(0)}}getBoneWorldTransform(e,t){const i=this.entries.get(e),s=i==null?void 0:i.spine.skeleton.findBone(t);if(!i||!s||!s.active)return null;const r=i.runtimeVersion==="4.3"?s.appliedPose:s,o=i.root,a=Math.cos(o.rotation),c=Math.sin(o.rotation),l=a*o.scale.x,d=-c*o.scale.y,u=c*o.scale.x,h=a*o.scale.y,f=l*r.a+d*r.c,p=l*r.b+d*r.d,m=u*r.a+h*r.c,g=u*r.b+h*r.d,v=o.position.x+l*r.worldX+d*r.worldY,y=o.position.y+u*r.worldX+h*r.worldY;return{x:v,y:-y,rotation:-Math.atan2(m,f)*180/Math.PI,scaleX:Math.max(1e-4,Math.hypot(f,m)),scaleY:Math.max(1e-4,Math.hypot(p,g))}}destroy(){for(const e of this.entries.values())this.destroyEntry(e);this.entries.clear(),this.container.removeFromParent(),this.container.destroy({children:!0})}}let xC=class{constructor(){A(this,"entries",{});A(this,"size",0)}add(e){let t=this.entries[e];return this.entries[e]=!0,t?!1:(this.size++,!0)}addAll(e){let t=this.size;for(var i=0,s=e.length;i1&&(this.r=1),this.g<0?this.g=0:this.g>1&&(this.g=1),this.b<0?this.b=0:this.b>1&&(this.b=1),this.a<0?this.a=0:this.a>1&&(this.a=1),this}static rgba8888ToColor(e,t){e.r=((t&4278190080)>>>24)/255,e.g=((t&16711680)>>>16)/255,e.b=((t&65280)>>>8)/255,e.a=(t&255)/255}static rgb888ToColor(e,t){e.r=((t&16711680)>>>16)/255,e.g=((t&65280)>>>8)/255,e.b=(t&255)/255}toRgb888(){const e=t=>("0"+(t*255).toString(16)).slice(-2);return+("0x"+e(this.r)+e(this.g)+e(this.b))}static fromString(e,t=new Vi){return t.setFromString(e)}},A(Vi,"WHITE",new Vi(1,1,1,1)),A(Vi,"RED",new Vi(1,0,0,1)),A(Vi,"GREEN",new Vi(0,1,0,1)),A(Vi,"BLUE",new Vi(0,0,1,1)),A(Vi,"MAGENTA",new Vi(1,0,1,1)),Vi);var ui;let Re=(ui=class{static clamp(e,t,i){return ei?i:e}static cosDeg(e){return Math.cos(e*ui.degRad)}static sinDeg(e){return Math.sin(e*ui.degRad)}static atan2Deg(e,t){return Math.atan2(e,t)*ui.degRad}static signum(e){return e>0?1:e<0?-1:0}static toInt(e){return e>0?Math.floor(e):Math.ceil(e)}static cbrt(e){let t=Math.pow(Math.abs(e),.3333333333333333);return e<0?-t:t}static randomTriangular(e,t){return ui.randomTriangularWith(e,t,(e+t)*.5)}static randomTriangularWith(e,t,i){let s=Math.random(),r=t-e;return s<=(i-e)/r?e+Math.sqrt(s*r*(i-e)):t-Math.sqrt((1-s)*r*(t-i))}static isPowerOfTwo(e){return e&&(e&e-1)===0}},A(ui,"PI",3.1415927),A(ui,"PI2",ui.PI*2),A(ui,"invPI2",1/ui.PI2),A(ui,"radiansToDegrees",180/ui.PI),A(ui,"radDeg",ui.radiansToDegrees),A(ui,"degreesToRadians",ui.PI/180),A(ui,"degRad",ui.degreesToRadians),ui);var Hn;let De=(Hn=class{static arrayCopy(e,t,i,s,r){for(let o=t,a=s;o=t?e:Hn.setArraySize(e,t,i)}static newArray(e,t){let i=new Array(e);for(let s=0;s0?this.items.pop():this.instantiator()}free(e){e.reset&&e.reset(),this.items.push(e)}freeAll(e){for(let t=0;t>1)*a;let c=t.bone.skeleton,l=t.deform,d=this.vertices,u=this.bones;if(!u){l.length>0&&(d=l);let m=t.bone,g=m.worldX,v=m.worldY,y=m.a,b=m.b,x=m.c,C=m.d;for(let T=i,S=o;S=this.regions.length&&(i=this.regions.length-1);let s=this.regions[i];t.region!=s&&(t.region=s,t.updateRegion())}getPath(e,t){let i=e,s=(this.start+t).toString();for(let r=this.digits-s.length;r>0;r--)i+="0";return i+=s,i}static nextID(){return sr._nextID++}},A(sr,"_nextID",0),sr);var Di;(function(n){n[n.hold=0]="hold",n[n.once=1]="once",n[n.loop=2]="loop",n[n.pingpong=3]="pingpong",n[n.onceReverse=4]="onceReverse",n[n.loopReverse=5]="loopReverse",n[n.pingpongReverse=6]="pingpongReverse"})(Di||(Di={}));const CC=[Di.hold,Di.once,Di.loop,Di.pingpong,Di.onceReverse,Di.loopReverse,Di.pingpongReverse];let jg=class{constructor(e,t,i){A(this,"name");A(this,"timelines",[]);A(this,"timelineIds",new xC);A(this,"duration");if(!e)throw new Error("name cannot be null.");this.name=e,this.setTimelines(t),this.duration=i}setTimelines(e){if(!e)throw new Error("timelines cannot be null.");this.timelines=e,this.timelineIds.clear();for(var t=0;t0&&(t%=this.duration));let l=this.timelines;for(let d=0,u=l.length;dt)return s-1;return i-1}static search(e,t,i){let s=e.length;for(let r=i;rt)return r-i;return s-i}},Rs=class extends ti{constructor(t,i,s){super(t,s);A(this,"curves");this.curves=De.newFloatArray(t+i*18),this.curves[t-1]=1}setLinear(t){this.curves[t]=0}setStepped(t){this.curves[t]=1}shrink(t){let i=this.getFrameCount()+t*18;if(this.curves.length>i){let s=De.newFloatArray(i);De.arrayCopy(this.curves,0,s,0,i),this.curves=s}}setBezier(t,i,s,r,o,a,c,l,d,u,h){let f=this.curves,p=this.getFrameCount()+t*18;s==0&&(f[i]=2+p);let m=(r-a*2+l)*.03,g=(o-c*2+d)*.03,v=((a-l)*3-r+u)*.006,y=((c-d)*3-o+h)*.006,b=m*2+v,x=g*2+y,C=(a-r)*.3+m+v*.16666667,T=(c-o)*.3+g+y*.16666667,S=r+C,E=o+T;for(let _=p+18;p<_;p+=2)f[p]=S,f[p+1]=E,C+=b,T+=x,b+=v,x+=y,S+=C,E+=T}getBezierValue(t,i,s,r){let o=this.curves;if(o[r]>t){let d=this.frames[i],u=this.frames[i+s];return u+(t-d)/(o[r]-d)*(o[r+1]-u)}let a=r+18;for(r+=2;r=t){let d=o[r-2],u=o[r-1];return u+(t-d)/(o[r]-d)*(o[r+1]-u)}i+=this.getFrameEntries();let c=o[a-2],l=o[a-1];return l+(t-c)/(this.frames[i]-c)*(this.frames[i+s]-l)}},is=class extends Rs{constructor(e,t,i){super(e,t,[i])}getFrameEntries(){return 2}setFrame(e,t,i){e<<=1,this.frames[e]=t,this.frames[e+1]=i}getCurveValue(e){let t=this.frames,i=t.length-2;for(let r=2;r<=i;r+=2)if(t[r]>e){i=r-2;break}let s=this.curves[i>>1];switch(s){case 0:let r=t[i],o=t[i+1];return o+(e-r)/(t[i+2]-r)*(t[i+2+1]-o);case 1:return t[i+1]}return this.getBezierValue(e,i,1,s-2)}getRelativeValue(e,t,i,s,r){if(e>2];switch(g){case 0:let v=d[m];h=d[m+1],f=d[m+2],p=d[m+3];let y=(s-v)/(d[m+4]-v);h+=(d[m+4+1]-h)*y,f+=(d[m+4+2]-f)*y,p+=(d[m+4+3]-p)*y;break;case 1:h=d[m+1],f=d[m+2],p=d[m+3];break;default:h=this.getBezierValue(s,m,1,g-2),f=this.getBezierValue(s,m,2,g+18-2),p=this.getBezierValue(s,m,3,g+36-2)}if(o==1)u.r=h,u.g=f,u.b=p;else{if(a==we.setup){let v=l.data.color;u.r=v.r,u.g=v.g,u.b=v.b}u.r+=(h-u.r)*o,u.g+=(f-u.g)*o,u.b+=(p-u.b)*o}}},OC=class extends is{constructor(t,i,s){super(t,i,ft.alpha+"|"+s);A(this,"slotIndex",0);this.slotIndex=s}apply(t,i,s,r,o,a,c){let l=t.slots[this.slotIndex];if(!l.bone.active)return;let d=l.color;if(s>3];switch(C){case 0:let T=d[x];f=d[x+1],p=d[x+2],m=d[x+3],g=d[x+4],v=d[x+5],y=d[x+6],b=d[x+7];let S=(s-T)/(d[x+8]-T);f+=(d[x+8+1]-f)*S,p+=(d[x+8+2]-p)*S,m+=(d[x+8+3]-m)*S,g+=(d[x+8+4]-g)*S,v+=(d[x+8+5]-v)*S,y+=(d[x+8+6]-y)*S,b+=(d[x+8+7]-b)*S;break;case 1:f=d[x+1],p=d[x+2],m=d[x+3],g=d[x+4],v=d[x+5],y=d[x+6],b=d[x+7];break;default:f=this.getBezierValue(s,x,1,C-2),p=this.getBezierValue(s,x,2,C+18-2),m=this.getBezierValue(s,x,3,C+36-2),g=this.getBezierValue(s,x,4,C+54-2),v=this.getBezierValue(s,x,5,C+72-2),y=this.getBezierValue(s,x,6,C+90-2),b=this.getBezierValue(s,x,7,C+108-2)}if(o==1)u.set(f,p,m,g),h.r=v,h.g=y,h.b=b;else{if(a==we.setup){u.setFromColor(l.data.color);let T=l.data.darkColor;h.r=T.r,h.g=T.g,h.b=T.b}u.add((f-u.r)*o,(p-u.g)*o,(m-u.b)*o,(g-u.a)*o),h.r+=(v-h.r)*o,h.g+=(y-h.g)*o,h.b+=(b-h.b)*o}}},$C=class extends Rs{constructor(t,i,s){super(t,i,[ft.rgb+"|"+s,ft.rgb2+"|"+s]);A(this,"slotIndex",0);this.slotIndex=s}getFrameEntries(){return 7}setFrame(t,i,s,r,o,a,c,l){t*=7,this.frames[t]=i,this.frames[t+1]=s,this.frames[t+2]=r,this.frames[t+3]=o,this.frames[t+4]=a,this.frames[t+5]=c,this.frames[t+6]=l}apply(t,i,s,r,o,a,c){let l=t.slots[this.slotIndex];if(!l.bone.active)return;let d=this.frames,u=l.color,h=l.darkColor;if(st){let l=this.frames[i];return s[r+1]*(t-l)/(s[r]-l)}let o=r+18;for(r+=2;r=t){let l=s[r-2],d=s[r-1];return d+(t-l)/(s[r]-l)*(s[r+1]-d)}let a=s[o-2],c=s[o-1];return c+(1-c)*(t-a)/(this.frames[i+this.getFrameEntries()]-a)}apply(t,i,s,r,o,a,c){let l=t.slots[this.slotIndex];if(!l.bone.active)return;let d=l.getAttachment();if(!d||!(d instanceof mr)||d.timelineAttachment!=this.attachment)return;let u=l.deform;u.length==0&&(a=we.setup);let h=this.vertices,f=h[0].length,p=this.frames;if(s=p[p.length-1]){let x=h[p.length-1];if(o==1)if(a==we.add){let C=d;if(C.bones)for(let T=0;Ts)this.apply(t,i,Number.MAX_VALUE,r,o,a,c),i=-1;else if(i>=l[d-1])return;if(s0&&l[u-1]==h;)u--}for(;u=l[u];u++)r.push(this.events[u])}},A(Mo,"propertyIds",[""+ft.event]),Mo);var Po;let Fl=(Po=class extends ti{constructor(t){super(t,Po.propertyIds);A(this,"drawOrders");this.drawOrders=new Array(t)}getFrameCount(){return this.frames.length}setFrame(t,i,s){this.frames[t]=i,this.drawOrders[t]=s}apply(t,i,s,r,o,a,c){if(c==ji.mixOut){a==we.setup&&De.arrayCopy(t.slots,0,t.drawOrder,0,t.slots.length);return}if(s>2];switch(m){case 0:let g=d[p];u=d[p+1],h=d[p+2],f=d[p+3];let v=(s-g)/(d[p+4]-g);u+=(d[p+4+1]-u)*v,h+=(d[p+4+2]-h)*v,f+=(d[p+4+3]-f)*v;break;case 1:u=d[p+1],h=d[p+2],f=d[p+3];break;default:u=this.getBezierValue(s,p,1,m-2),h=this.getBezierValue(s,p,2,m+18-2),f=this.getBezierValue(s,p,3,m+36-2)}if(a==we.setup){let g=l.data;l.mixRotate=g.mixRotate+(u-g.mixRotate)*o,l.mixX=g.mixX+(h-g.mixX)*o,l.mixY=g.mixY+(f-g.mixY)*o}else l.mixRotate+=(u-l.mixRotate)*o,l.mixX+=(h-l.mixX)*o,l.mixY+=(f-l.mixY)*o}},Wo=class extends is{constructor(t,i,s,r){super(t,i,r+"|"+s);A(this,"constraintIndex",0);this.constraintIndex=s}apply(t,i,s,r,o,a,c){let l;if(this.constraintIndex==-1){const d=s>=this.frames[0]?this.getCurveValue(s):0;for(const u of t.physicsConstraints)u.active&&this.global(u.data)&&this.set(u,this.getAbsoluteValue2(s,o,a,this.get(u),this.setup(u),d))}else l=t.physicsConstraints[this.constraintIndex],l.active&&this.set(l,this.getAbsoluteValue(s,o,a,this.get(l),this.setup(l)))}},jC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintInertia)}setup(e){return e.data.inertia}get(e){return e.inertia}set(e,t){e.inertia=t}global(e){return e.inertiaGlobal}},HC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintStrength)}setup(e){return e.data.strength}get(e){return e.strength}set(e,t){e.strength=t}global(e){return e.strengthGlobal}},GC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintDamping)}setup(e){return e.data.damping}get(e){return e.damping}set(e,t){e.damping=t}global(e){return e.dampingGlobal}},WC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintMass)}setup(e){return 1/e.data.massInverse}get(e){return 1/e.massInverse}set(e,t){e.massInverse=1/t}global(e){return e.massGlobal}},qC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintWind)}setup(e){return e.data.wind}get(e){return e.wind}set(e,t){e.wind=t}global(e){return e.windGlobal}},KC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintGravity)}setup(e){return e.data.gravity}get(e){return e.gravity}set(e,t){e.gravity=t}global(e){return e.gravityGlobal}},JC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintMix)}setup(e){return e.data.mix}get(e){return e.mix}set(e,t){e.mix=t}global(e){return e.mixGlobal}};var Io;let ZC=(Io=class extends ti{constructor(t,i){super(t,Io.propertyIds);A(this,"constraintIndex");this.constraintIndex=i}getFrameCount(){return this.frames.length}setFrame(t,i){this.frames[t]=i}apply(t,i,s,r,o,a,c){let l;if(this.constraintIndex!=-1&&(l=t.physicsConstraints[this.constraintIndex],!l.active))return;const d=this.frames;if(i>s)this.apply(t,i,Number.MAX_VALUE,[],o,a,c),i=-1;else if(i>=d[d.length-1])return;if(!(s=d[ti.search1(d,i)+1]))if(l!=null)l.reset();else for(const u of t.physicsConstraints)u.active&&u.reset()}},A(Io,"propertyIds",[ft.physicsConstraintReset.toString()]),Io);var Ji;let QC=(Ji=class extends ti{constructor(t,i,s){super(t,[ft.sequence+"|"+i+"|"+s.sequence.id]);A(this,"slotIndex");A(this,"attachment");this.slotIndex=i,this.attachment=s}getFrameEntries(){return Ji.ENTRIES}getSlotIndex(){return this.slotIndex}getAttachment(){return this.attachment}setFrame(t,i,s,r,o){let a=this.frames;t*=Ji.ENTRIES,a[t]=i,a[t+Ji.MODE]=s|r<<4,a[t+Ji.DELAY]=o}apply(t,i,s,r,o,a,c){let l=t.slots[this.slotIndex];if(!l.bone.active)return;let d=l.attachment,u=this.attachment;if(d!=u&&(!(d instanceof mr)||d.timelineAttachment!=u))return;if(c==ji.mixOut){a==we.setup&&(l.sequenceIndex=-1);return}let h=this.frames;if(s>4,y=this.attachment.sequence.regions.length,b=CC[m&15];if(b!=Di.hold)switch(v+=(s-p)/g+1e-5|0,b){case Di.once:v=Math.min(y-1,v);break;case Di.loop:v%=y;break;case Di.pingpong:{let x=(y<<1)-2;v=x==0?0:v%x,v>=y&&(v=x-v);break}case Di.onceReverse:v=Math.max(y-1-v,0);break;case Di.loopReverse:v=y-1-v%y;break;case Di.pingpongReverse:{let x=(y<<1)-2;v=x==0?0:(v+y-1)%x,v>=y&&(v=x-v)}}l.sequenceIndex=v}},A(Ji,"ENTRIES",3),A(Ji,"MODE",1),A(Ji,"DELAY",2),Ji);var rr;let n3=(rr=class{constructor(e){A(this,"data");A(this,"tracks",new Array);A(this,"timeScale",1);A(this,"unkeyedState",0);A(this,"events",new Array);A(this,"listeners",new Array);A(this,"queue",new r3(this));A(this,"propertyIDs",new xC);A(this,"animationsChanged",!1);A(this,"trackEntryPool",new fu(()=>new s3));this.data=e}static emptyAnimation(){return rr._emptyAnimation}update(e){e*=this.timeScale;let t=this.tracks;for(let i=0,s=t.length;i0){if(r.delay-=o,r.delay>0)continue;o=-r.delay,r.delay=0}let a=r.next;if(a){let c=r.trackLast-a.delay;if(c>=0){for(a.delay=0,a.trackTime+=r.timeScale==0?0:(c/r.timeScale+e)*a.timeScale,r.trackTime+=o,this.setCurrent(i,a,!0);a.mixingFrom;)a.mixTime+=e,a=a.mixingFrom;continue}}else if(r.trackLast>=r.trackEnd&&!r.mixingFrom){t[i]=null,this.queue.end(r),this.clearNext(r);continue}if(r.mixingFrom&&this.updateMixingFrom(r,e)){let c=r.mixingFrom;for(r.mixingFrom=null,c&&(c.mixingTo=null);c;)this.queue.end(c),c=c.mixingFrom}r.trackTime+=o}this.queue.drain()}updateMixingFrom(e,t){let i=e.mixingFrom;if(!i)return!0;let s=this.updateMixingFrom(i,t);return i.animationLast=i.nextAnimationLast,i.trackLast=i.nextTrackLast,e.nextTrackLast!=-1&&e.mixTime>=e.mixDuration?((i.totalAlpha==0||e.mixDuration==0)&&(e.mixingFrom=i.mixingFrom,i.mixingFrom!=null&&(i.mixingFrom.mixingTo=e),e.interruptAlpha=i.interruptAlpha,this.queue.end(i)),s):(i.trackTime+=t*i.timeScale,e.mixTime+=t,!1)}apply(e){if(!e)throw new Error("skeleton cannot be null.");this.animationsChanged&&this._animationsChanged();let t=this.events,i=this.tracks,s=!1;for(let h=0,f=i.length;h0)continue;s=!0;let m=h==0?we.first:p.mixBlend,g=p.alpha;p.mixingFrom?g*=this.applyMixingFrom(p,e,m):p.trackTime>=p.trackEnd&&!p.next&&(g=0);let v=g>=p.alphaAttachmentThreshold,y=p.animationLast,b=p.getAnimationTime(),x=b,C=t;p.reverse&&(x=p.animation.duration-x,C=null);let T=p.animation.timelines,S=T.length;if(h==0&&g==1||m==we.add){h==0&&(v=!0);for(let E=0;E1&&(r=1),i!=we.first&&(i=s.mixBlend));let o=r=s.alphaAttachmentThreshold):(a&&C instanceof Fl&&S==we.setup&&(T=ji.mixIn),C.apply(t,h,p,m,E,S,T))}}return e.mixDuration>0&&this.queueEvents(s,f),this.events.length=0,s.nextAnimationLast=f,s.nextTrackLast=s.trackTime,r}applyAttachmentTimeline(e,t,i,s,r){var o=t.slots[e.slotIndex];o.bone.active&&(i=0,b=m>=0;Math.abs(g)<=90&&Re.signum(g)!=Re.signum(p)&&(Math.abs(m-v)>180?(f+=360*Re.signum(m),b=y):v!=0?f-=360*Re.signum(m):b=y),b!=y&&(f+=360*Re.signum(m)),o[a]=f}o[a+1]=p,l.rotation=u+f*s}queueEvents(e,t){let i=e.animationStart,s=e.animationEnd,r=s-i,o=e.trackLast%r,a=this.events,c=0,l=a.length;for(;cs||this.queue.event(e,u)}let d=!1;if(e.loop)if(r==0)d=!0;else{const u=Math.floor(e.trackTime/r);d=u>0&&u>Math.floor(e.trackLast/r)}else d=t>=s&&e.animationLast=this.tracks.length)return;let t=this.tracks[e];if(!t)return;this.queue.end(t),this.clearNext(t);let i=t;for(;;){let s=i.mixingFrom;if(!s)break;this.queue.end(s),i.mixingFrom=null,i.mixingTo=null,i=s}this.tracks[t.trackIndex]=null,this.queue.drain()}setCurrent(e,t,i){let s=this.expandToIndex(e);this.tracks[e]=t,t.previous=null,s&&(i&&this.queue.interrupt(s),t.mixingFrom=s,s.mixingTo=t,t.mixTime=0,s.mixingFrom&&s.mixDuration>0&&(t.interruptAlpha*=Math.min(1,s.mixTime/s.mixDuration)),s.timelinesRotation.length=0),this.queue.start(t)}setAnimation(e,t,i=!1){let s=this.data.skeletonData.findAnimation(t);if(!s)throw new Error("Animation not found: "+t);return this.setAnimationWith(e,s,i)}setAnimationWith(e,t,i=!1){if(!t)throw new Error("animation cannot be null.");let s=!0,r=this.expandToIndex(e);r&&(r.nextTrackLast==-1?(this.tracks[e]=r.mixingFrom,this.queue.interrupt(r),this.queue.end(r),this.clearNext(r),r=r.mixingFrom,s=!1):this.clearNext(r));let o=this.trackEntry(e,t,i,r);return this.setCurrent(e,o,s),this.queue.drain(),o}addAnimation(e,t,i=!1,s=0){let r=this.data.skeletonData.findAnimation(t);if(!r)throw new Error("Animation not found: "+t);return this.addAnimationWith(e,r,i,s)}addAnimationWith(e,t,i=!1,s=0){if(!t)throw new Error("animation cannot be null.");let r=this.expandToIndex(e);if(r)for(;r.next;)r=r.next;let o=this.trackEntry(e,t,i,r);return r?(r.next=o,o.previous=r,s<=0&&(s=Math.max(s+r.getTrackComplete()-o.mixDuration,0))):(this.setCurrent(e,o,!0),this.queue.drain(),s<0&&(s=0)),o.delay=s,o}setEmptyAnimation(e,t=0){let i=this.setAnimationWith(e,rr.emptyAnimation(),!1);return i.mixDuration=t,i.trackEnd=t,i}addEmptyAnimation(e,t=0,i=0){let s=this.addAnimationWith(e,rr.emptyAnimation(),!1,i);return i<=0&&(s.delay=Math.max(s.delay+s.mixDuration-t,0)),s.mixDuration=t,s.trackEnd=t,s}setEmptyAnimations(e=0){let t=this.queue.drainDisabled;this.queue.drainDisabled=!0;for(let i=0,s=this.tracks.length;i0){r[c]=o3,o[c]=u;continue e}break}r[c]=fp}}}getCurrent(e){return e>=this.tracks.length?null:this.tracks[e]}addListener(e){if(!e)throw new Error("listener cannot be null.");this.listeners.push(e)}removeListener(e){let t=this.listeners.indexOf(e);t>=0&&this.listeners.splice(t,1)}clearListeners(){this.listeners.length=0}clearListenerNotifications(){this.queue.clear()}},A(rr,"_emptyAnimation",new jg("",[],0)),rr),s3=class{constructor(){A(this,"animation",null);A(this,"previous",null);A(this,"next",null);A(this,"mixingFrom",null);A(this,"mixingTo",null);A(this,"listener",null);A(this,"trackIndex",0);A(this,"loop",!1);A(this,"holdPrevious",!1);A(this,"reverse",!1);A(this,"shortestRotation",!1);A(this,"eventThreshold",0);A(this,"mixAttachmentThreshold",0);A(this,"alphaAttachmentThreshold",0);A(this,"mixDrawOrderThreshold",0);A(this,"animationStart",0);A(this,"animationEnd",0);A(this,"animationLast",0);A(this,"nextAnimationLast",0);A(this,"delay",0);A(this,"trackTime",0);A(this,"trackLast",0);A(this,"nextTrackLast",0);A(this,"trackEnd",0);A(this,"timeScale",0);A(this,"alpha",0);A(this,"mixTime",0);A(this,"_mixDuration",0);A(this,"interruptAlpha",0);A(this,"totalAlpha",0);A(this,"mixBlend",we.replace);A(this,"timelineMode",new Array);A(this,"timelineHoldMix",new Array);A(this,"timelinesRotation",new Array)}get mixDuration(){return this._mixDuration}set mixDuration(e){this._mixDuration=e}setMixDurationWithDelay(e,t){this._mixDuration=e,t<=0&&(this.previous!=null?t=Math.max(t+this.previous.getTrackComplete()-e,0):t=0),this.delay=t}reset(){this.next=null,this.previous=null,this.mixingFrom=null,this.mixingTo=null,this.animation=null,this.listener=null,this.timelineMode.length=0,this.timelineHoldMix.length=0,this.timelinesRotation.length=0}getAnimationTime(){if(this.loop){let e=this.animationEnd-this.animationStart;return e==0?this.animationStart:this.trackTime%e+this.animationStart}return Math.min(this.trackTime+this.animationStart,this.animationEnd)}setAnimationLast(e){this.animationLast=e,this.nextAnimationLast=e}isComplete(){return this.trackTime>=this.animationEnd-this.animationStart}resetRotationDirections(){this.timelinesRotation.length=0}getTrackComplete(){let e=this.animationEnd-this.animationStart;if(e!=0){if(this.loop)return e*(1+(this.trackTime/e|0));if(this.trackTime=0}},r3=class{constructor(e){A(this,"objects",[]);A(this,"drainDisabled",!1);A(this,"animState");this.animState=e}start(e){this.objects.push(an.start),this.objects.push(e),this.animState.animationsChanged=!0}interrupt(e){this.objects.push(an.interrupt),this.objects.push(e)}end(e){this.objects.push(an.end),this.objects.push(e),this.animState.animationsChanged=!0}dispose(e){this.objects.push(an.dispose),this.objects.push(e)}complete(e){this.objects.push(an.complete),this.objects.push(e)}event(e,t){this.objects.push(an.event),this.objects.push(e),this.objects.push(t)}drain(){if(this.drainDisabled)return;this.drainDisabled=!0;let e=this.objects;for(let t=0;t{d.width=parseInt(i[1]),d.height=parseInt(i[2])},s.format=()=>{},s.filter=d=>{d.minFilter=De.enumValue(Mi,i[1]),d.magFilter=De.enumValue(Mi,i[2])},s.repeat=d=>{i[1].indexOf("x")!=-1&&(d.uWrap=cr.Repeat),i[1].indexOf("y")!=-1&&(d.vWrap=cr.Repeat)},s.pma=d=>{d.pma=i[1]=="true"};var r={};r.xy=d=>{d.x=parseInt(i[1]),d.y=parseInt(i[2])},r.size=d=>{d.width=parseInt(i[1]),d.height=parseInt(i[2])},r.bounds=d=>{d.x=parseInt(i[1]),d.y=parseInt(i[2]),d.width=parseInt(i[3]),d.height=parseInt(i[4])},r.offset=d=>{d.offsetX=parseInt(i[1]),d.offsetY=parseInt(i[2])},r.orig=d=>{d.originalWidth=parseInt(i[1]),d.originalHeight=parseInt(i[2])},r.offsets=d=>{d.offsetX=parseInt(i[1]),d.offsetY=parseInt(i[2]),d.originalWidth=parseInt(i[3]),d.originalHeight=parseInt(i[4])},r.rotate=d=>{let u=i[1];u=="true"?d.degrees=90:u!="false"&&(d.degrees=parseInt(u))},r.index=d=>{d.index=parseInt(i[1])};let o=t.readLine();for(;o&&o.trim().length==0;)o=t.readLine();for(;!(!o||o.trim().length==0||t.readEntry(i,o)==0);)o=t.readLine();let a=null,c=null,l=null;for(;o!==null;)if(o.trim().length==0)a=null,o=t.readLine();else if(a){let d=new sA(a,o);for(;;){let u=t.readEntry(i,o=t.readLine());if(u==0)break;let h=r[i[0]];if(h)h(d);else{c||(c=[]),l||(l=[]),c.push(i[0]);let f=[];for(let p=0;p0&&l&&l.length>0&&(d.names=c,d.values=l,c=null,l=null),d.u=d.x/a.width,d.v=d.y/a.height,d.degrees==90?(d.u2=(d.x+d.height)/a.width,d.v2=(d.y+d.width)/a.height):(d.u2=(d.x+d.width)/a.width,d.v2=(d.y+d.height)/a.height),this.regions.push(d)}else{for(a=new h3(o.trim());t.readEntry(i,o=t.readLine())!=0;){let d=s[i[0]];d&&d(a)}this.pages.push(a)}}findRegion(e){for(let t=0;t=this.lines.length?null:this.lines[this.index++]}readEntry(e,t){if(!t||(t=t.trim(),t.length==0))return 0;let i=t.indexOf(":");if(i==-1)return 0;e[0]=t.substr(0,i).trim();for(let s=1,r=i+1;;s++){let o=t.indexOf(",",r);if(o==-1)return e[s]=t.substr(r).trim(),s;if(e[s]=t.substr(r,o-r).trim(),r=o+1,s==4)return 4}}},h3=class{constructor(e){A(this,"name");A(this,"minFilter",Mi.Nearest);A(this,"magFilter",Mi.Nearest);A(this,"uWrap",cr.ClampToEdge);A(this,"vWrap",cr.ClampToEdge);A(this,"texture",null);A(this,"width",0);A(this,"height",0);A(this,"pma",!1);A(this,"regions",new Array);this.name=e}setTexture(e){this.texture=e,e.setFilters(this.minFilter,this.magFilter),e.setWraps(this.uWrap,this.vWrap);for(let t of this.regions)t.texture=e}},sA=class extends d3{constructor(t,i){super();A(this,"page");A(this,"name");A(this,"x",0);A(this,"y",0);A(this,"offsetX",0);A(this,"offsetY",0);A(this,"originalWidth",0);A(this,"originalHeight",0);A(this,"index",0);A(this,"degrees",0);A(this,"names",null);A(this,"values",null);this.page=t,this.name=i,t.regions.push(this)}},yc=class Im extends mr{constructor(t,i){super(t);A(this,"region",null);A(this,"path");A(this,"regionUVs",[]);A(this,"uvs",[]);A(this,"triangles",[]);A(this,"color",new ut(1,1,1,1));A(this,"width",0);A(this,"height",0);A(this,"hullLength",0);A(this,"edges",[]);A(this,"parentMesh",null);A(this,"sequence",null);A(this,"tempColor",new ut(0,0,0,0));this.path=i}updateRegion(){if(!this.region)throw new Error("Region not set.");let t=this.regionUVs;(!this.uvs||this.uvs.length!=t.length)&&(this.uvs=De.newFloatArray(t.length));let i=this.uvs,s=this.uvs.length,r=this.region.u,o=this.region.v,a=0,c=0;if(this.region instanceof sA){let l=this.region,d=l.page,u=d.width,h=d.height;switch(l.degrees){case 90:r-=(l.originalHeight-l.offsetY-l.height)/u,o-=(l.originalWidth-l.offsetX-l.width)/h,a=l.originalHeight/u,c=l.originalWidth/h;for(let f=0;f= 0.");if(!t)throw new Error("name cannot be null.");this.index=e,this.name=t,this.parent=i}};var oi;(function(n){n[n.Normal=0]="Normal",n[n.OnlyTranslation=1]="OnlyTranslation",n[n.NoRotationOrReflection=2]="NoRotationOrReflection",n[n.NoScale=3]="NoScale",n[n.NoScaleOrReflection=4]="NoScaleOrReflection"})(oi||(oi={}));let qy=class{constructor(e,t,i){A(this,"data");A(this,"skeleton");A(this,"parent",null);A(this,"children",new Array);A(this,"x",0);A(this,"y",0);A(this,"rotation",0);A(this,"scaleX",0);A(this,"scaleY",0);A(this,"shearX",0);A(this,"shearY",0);A(this,"ax",0);A(this,"ay",0);A(this,"arotation",0);A(this,"ascaleX",0);A(this,"ascaleY",0);A(this,"ashearX",0);A(this,"ashearY",0);A(this,"a",0);A(this,"b",0);A(this,"c",0);A(this,"d",0);A(this,"worldY",0);A(this,"worldX",0);A(this,"inherit",oi.Normal);A(this,"sorted",!1);A(this,"active",!1);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("skeleton cannot be null.");this.data=e,this.skeleton=t,this.parent=i,this.setToSetupPose()}isActive(){return this.active}update(e){this.updateWorldTransformWith(this.ax,this.ay,this.arotation,this.ascaleX,this.ascaleY,this.ashearX,this.ashearY)}updateWorldTransform(){this.updateWorldTransformWith(this.x,this.y,this.rotation,this.scaleX,this.scaleY,this.shearX,this.shearY)}updateWorldTransformWith(e,t,i,s,r,o,a){this.ax=e,this.ay=t,this.arotation=i,this.ascaleX=s,this.ascaleY=r,this.ashearX=o,this.ashearY=a;let c=this.parent;if(!c){let f=this.skeleton;const p=f.scaleX,m=f.scaleY,g=(i+o)*Re.degRad,v=(i+90+a)*Re.degRad;this.a=Math.cos(g)*s*p,this.b=Math.cos(v)*r*p,this.c=Math.sin(g)*s*m,this.d=Math.sin(v)*r*m,this.worldX=e*p+f.x,this.worldY=t*m+f.y;return}let l=c.a,d=c.b,u=c.c,h=c.d;switch(this.worldX=l*e+d*t+c.worldX,this.worldY=u*e+h*t+c.worldY,this.inherit){case oi.Normal:{const f=(i+o)*Re.degRad,p=(i+90+a)*Re.degRad,m=Math.cos(f)*s,g=Math.cos(p)*r,v=Math.sin(f)*s,y=Math.sin(p)*r;this.a=l*m+d*v,this.b=l*g+d*y,this.c=u*m+h*v,this.d=u*g+h*y;return}case oi.OnlyTranslation:{const f=(i+o)*Re.degRad,p=(i+90+a)*Re.degRad;this.a=Math.cos(f)*s,this.b=Math.cos(p)*r,this.c=Math.sin(f)*s,this.d=Math.sin(p)*r;break}case oi.NoRotationOrReflection:{let f=1/this.skeleton.scaleX,p=1/this.skeleton.scaleY;l*=f,u*=p;let m=l*l+u*u,g=0;m>1e-4?(m=Math.abs(l*h*p-d*f*u)/m,d=u*m,h=l*m,g=Math.atan2(u,l)*Re.radDeg):(l=0,u=0,g=90-Math.atan2(h,d)*Re.radDeg);const v=(i+o-g)*Re.degRad,y=(i+a-g+90)*Re.degRad,b=Math.cos(v)*s,x=Math.cos(y)*r,C=Math.sin(v)*s,T=Math.sin(y)*r;this.a=l*b-d*C,this.b=l*x-d*T,this.c=u*b+h*C,this.d=u*x+h*T;break}case oi.NoScale:case oi.NoScaleOrReflection:{i*=Re.degRad;const f=Math.cos(i),p=Math.sin(i);let m=(l*f+d*p)/this.skeleton.scaleX,g=(u*f+h*p)/this.skeleton.scaleY,v=Math.sqrt(m*m+g*g);v>1e-5&&(v=1/v),m*=v,g*=v,v=Math.sqrt(m*m+g*g),this.inherit==oi.NoScale&&l*h-d*u<0!=(this.skeleton.scaleX<0!=this.skeleton.scaleY<0)&&(v=-v),i=Math.PI/2+Math.atan2(g,m);const y=Math.cos(i)*v,b=Math.sin(i)*v;o*=Re.degRad,a=(90+a)*Re.degRad;const x=Math.cos(o)*s,C=Math.cos(a)*r,T=Math.sin(o)*s,S=Math.sin(a)*r;this.a=m*x+y*T,this.b=m*C+y*S,this.c=g*x+b*T,this.d=g*C+b*S;break}}this.a*=this.skeleton.scaleX,this.b*=this.skeleton.scaleX,this.c*=this.skeleton.scaleY,this.d*=this.skeleton.scaleY}setToSetupPose(){let e=this.data;this.x=e.x,this.y=e.y,this.rotation=e.rotation,this.scaleX=e.scaleX,this.scaleY=e.scaleY,this.shearX=e.shearX,this.shearY=e.shearY,this.inherit=e.inherit}updateAppliedTransform(){let e=this.parent;if(!e){this.ax=this.worldX-this.skeleton.x,this.ay=this.worldY-this.skeleton.y,this.arotation=Math.atan2(this.c,this.a)*Re.radDeg,this.ascaleX=Math.sqrt(this.a*this.a+this.c*this.c),this.ascaleY=Math.sqrt(this.b*this.b+this.d*this.d),this.ashearX=0,this.ashearY=Math.atan2(this.a*this.b+this.c*this.d,this.a*this.d-this.b*this.c)*Re.radDeg;return}let t=e.a,i=e.b,s=e.c,r=e.d,o=1/(t*r-i*s),a=r*o,c=i*o,l=s*o,d=t*o,u=this.worldX-e.worldX,h=this.worldY-e.worldY;this.ax=u*a-h*c,this.ay=h*d-u*l;let f,p,m,g;if(this.inherit==oi.OnlyTranslation)f=this.a,p=this.b,m=this.c,g=this.d;else{switch(this.inherit){case oi.NoRotationOrReflection:{let C=Math.abs(t*r-i*s)/(t*t+s*s);i=-s*this.skeleton.scaleX*C/this.skeleton.scaleY,r=t*this.skeleton.scaleY*C/this.skeleton.scaleX,o=1/(t*r-i*s),a=r*o,c=i*o;break}case oi.NoScale:case oi.NoScaleOrReflection:let v=Re.cosDeg(this.rotation),y=Re.sinDeg(this.rotation);t=(t*v+i*y)/this.skeleton.scaleX,s=(s*v+r*y)/this.skeleton.scaleY;let b=Math.sqrt(t*t+s*s);b>1e-5&&(b=1/b),t*=b,s*=b,b=Math.sqrt(t*t+s*s),this.inherit==oi.NoScale&&o<0!=(this.skeleton.scaleX<0!=this.skeleton.scaleY<0)&&(b=-b);let x=Re.PI/2+Math.atan2(s,t);i=Math.cos(x)*b,r=Math.sin(x)*b,o=1/(t*r-i*s),a=r*o,c=i*o,l=s*o,d=t*o}f=a*this.a-c*this.c,p=a*this.b-c*this.d,m=d*this.c-l*this.a,g=d*this.d-l*this.b}if(this.ashearX=0,this.ascaleX=Math.sqrt(f*f+m*m),this.ascaleX>1e-4){let v=f*g-p*m;this.ascaleY=v/this.ascaleX,this.ashearY=-Math.atan2(f*p+m*g,v)*Re.radDeg,this.arotation=Math.atan2(m,f)*Re.radDeg}else this.ascaleX=0,this.ascaleY=Math.sqrt(p*p+g*g),this.ashearY=0,this.arotation=90-Math.atan2(g,p)*Re.radDeg}getWorldRotationX(){return Math.atan2(this.c,this.a)*Re.radDeg}getWorldRotationY(){return Math.atan2(this.d,this.b)*Re.radDeg}getWorldScaleX(){return Math.sqrt(this.a*this.a+this.c*this.c)}getWorldScaleY(){return Math.sqrt(this.b*this.b+this.d*this.d)}worldToLocal(e){let t=1/(this.a*this.d-this.b*this.c),i=e.x-this.worldX,s=e.y-this.worldY;return e.x=i*this.d*t-s*this.b*t,e.y=s*this.a*t-i*this.c*t,e}localToWorld(e){let t=e.x,i=e.y;return e.x=t*this.a+i*this.b+this.worldX,e.y=t*this.c+i*this.d+this.worldY,e}worldToParent(e){if(e==null)throw new Error("world cannot be null.");return this.parent==null?e:this.parent.worldToLocal(e)}parentToWorld(e){if(e==null)throw new Error("world cannot be null.");return this.parent==null?e:this.parent.localToWorld(e)}worldToLocalRotation(e){let t=Re.sinDeg(e),i=Re.cosDeg(e);return Math.atan2(this.a*t-this.c*i,this.d*i-this.b*t)*Re.radDeg+this.rotation-this.shearX}localToWorldRotation(e){e-=this.rotation-this.shearX;let t=Re.sinDeg(e),i=Re.cosDeg(e);return Math.atan2(i*this.c+t*this.d,i*this.a+t*this.b)*Re.radDeg}rotateWorld(e){e*=Re.degRad;const t=Math.sin(e),i=Math.cos(e),s=this.a,r=this.b;this.a=i*s-t*this.c,this.b=i*r-t*this.d,this.c=t*s+i*this.c,this.d=t*r+i*this.d}},fh=class{constructor(e,t,i){A(this,"name");A(this,"order");A(this,"skinRequired");this.name=e,this.order=t,this.skinRequired=i}},cA=class{constructor(e,t){A(this,"data");A(this,"intValue",0);A(this,"floatValue",0);A(this,"stringValue",null);A(this,"time",0);A(this,"volume",0);A(this,"balance",0);if(!t)throw new Error("data cannot be null.");this.time=e,this.data=t}},dA=class{constructor(e){A(this,"name");A(this,"intValue",0);A(this,"floatValue",0);A(this,"stringValue",null);A(this,"audioPath",null);A(this,"volume",0);A(this,"balance",0);this.name=e}},f3=class{constructor(e,t){A(this,"data");A(this,"bones");A(this,"target");A(this,"bendDirection",0);A(this,"compress",!1);A(this,"stretch",!1);A(this,"mix",1);A(this,"softness",0);A(this,"active",!1);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("skeleton cannot be null.");this.data=e,this.bones=new Array;for(let s=0;s180?f-=360:f<-180&&(f+=360);let g=e.ascaleX,v=e.ascaleY;if(s||r){switch(e.inherit){case oi.NoScale:case oi.NoScaleOrReflection:p=t-e.worldX,m=i-e.worldY}const y=e.data.length*g;if(y>1e-4){const b=p*p+m*m;if(s&&by*y){const x=(Math.sqrt(b)/y-1)*a+1;g*=x,o&&(v*=x)}}}e.updateWorldTransformWith(e.ax,e.ay,e.arotation+f*a,g,v,e.ashearX,e.ashearY)}apply2(e,t,i,s,r,o,a,c,l){if(e.inherit!=oi.Normal||t.inherit!=oi.Normal)return;let d=e.ax,u=e.ay,h=e.ascaleX,f=e.ascaleY,p=h,m=f,g=t.ascaleX,v=0,y=0,b=0;h<0?(h=-h,v=180,b=-1):(v=0,b=1),f<0&&(f=-f,b=-b),g<0?(g=-g,y=180):y=0;let x=t.ax,C=0,T=0,S=0,E=e.a,_=e.b,I=e.c,M=e.d,k=Math.abs(h-f)<=1e-4;!k||o?(C=0,T=E*x+e.worldX,S=I*x+e.worldY):(C=t.ay,T=E*x+_*C+e.worldX,S=I*x+M*C+e.worldY);let B=e.parent;if(!B)throw new Error("IK parent must itself have a parent.");E=B.a,_=B.b,I=B.c,M=B.d;let D=E*M-_*I,G=T-B.worldX,V=S-B.worldY;D=Math.abs(D)<=1e-4?0:1/D;let Y=(G*M-V*_)*D-d,L=(V*E-G*I)*D-u,N=Math.sqrt(Y*Y+L*L),F=t.data.length*g,$,X;if(N<1e-4){this.apply1(e,i,s,!1,o,!1,l),t.updateWorldTransformWith(x,C,0,t.ascaleX,t.ascaleY,t.ashearX,t.ashearY);return}G=i-B.worldX,V=s-B.worldY;let z=(G*M-V*_)*D-d,K=(V*E-G*I)*D-u,J=z*z+K*K;if(c!=0){c*=h*(g+1)*.5;let ve=Math.sqrt(J),Se=ve-N-F*h+c;if(Se>0){let fe=Math.min(1,Se/(c*2))-1;fe=(Se-c*(1-fe*fe))/ve,z-=fe*z,K-=fe*K,J=z*z+K*K}}e:if(k){F*=h;let ve=(J-N*N-F*F)/(2*N*F);ve<-1?(ve=-1,X=Math.PI*r):ve>1?(ve=1,X=0,o&&(E=(Math.sqrt(J)/(N+F)-1)*l+1,p*=E,a&&(m*=E))):X=Math.acos(ve)*r,E=N+F*ve,_=F*Math.sin(X),$=Math.atan2(K*E-z*_,z*E+K*_)}else{E=h*F,_=f*F;let ve=E*E,Se=_*_,fe=Math.atan2(K,z);I=Se*N*N+ve*J-ve*Se;let be=-2*Se*N,q=Se-ve;if(M=be*be-4*q*I,M>=0){let ne=Math.sqrt(M);be<0&&(ne=-ne),ne=-(be+ne)*.5;let ue=ne/q,xe=I/ne,ye=Math.abs(ue)=0){V=Math.sqrt(ue)*r,$=fe-Math.atan2(V,ye),X=Math.atan2(V/f,(ye-N)/h);break e}}let Z=Re.PI,se=N-E,j=se*se,H=0,O=0,U=N+E,W=U*U,ee=0;I=-E*N/(ve-Se),I>=-1&&I<=1&&(I=Math.acos(I),G=E*Math.cos(I)+N,V=_*Math.sin(I),M=G*G+V*V,MW&&(O=I,W=M,U=G,ee=V)),J<=(j+W)*.5?($=fe-Math.atan2(H*r,se),X=Z*r):($=fe-Math.atan2(ee*r,U),X=O*r)}let oe=Math.atan2(C,x)*b,le=e.arotation;$=($-oe)*Re.radDeg+v-le,$>180?$-=360:$<-180&&($+=360),e.updateWorldTransformWith(d,u,le+$*l,p,m,0,0),le=t.arotation,X=((X+oe)*Re.radDeg-t.ashearX)*b+y-le,X>180?X-=360:X<-180&&(X+=360),t.updateWorldTransformWith(x,C,le+X*l,t.ascaleX,t.ascaleY,t.ashearX,t.ashearY)}},uA=class extends fh{constructor(t){super(t,0,!1);A(this,"bones",new Array);A(this,"_target",null);A(this,"bendDirection",0);A(this,"compress",!1);A(this,"stretch",!1);A(this,"uniform",!1);A(this,"mix",0);A(this,"softness",0)}set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("BoneData not set.")}},hA=class extends fh{constructor(t){super(t,0,!1);A(this,"bones",new Array);A(this,"_target",null);A(this,"positionMode",Ms.Fixed);A(this,"spacingMode",Ai.Fixed);A(this,"rotateMode",No.Chain);A(this,"offsetRotation",0);A(this,"position",0);A(this,"spacing",0);A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0)}set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("SlotData not set.")}};var Ms;(function(n){n[n.Fixed=0]="Fixed",n[n.Percent=1]="Percent"})(Ms||(Ms={}));var Ai;(function(n){n[n.Length=0]="Length",n[n.Fixed=1]="Fixed",n[n.Percent=2]="Percent",n[n.Proportional=3]="Proportional"})(Ai||(Ai={}));var No;(function(n){n[n.Tangent=0]="Tangent",n[n.Chain=1]="Chain",n[n.ChainScale=2]="ChainScale"})(No||(No={}));var Yi;let p3=(Yi=class{constructor(e,t){A(this,"data");A(this,"bones");A(this,"target");A(this,"position",0);A(this,"spacing",0);A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0);A(this,"spaces",new Array);A(this,"positions",new Array);A(this,"world",new Array);A(this,"curves",new Array);A(this,"lengths",new Array);A(this,"segments",new Array);A(this,"active",!1);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("skeleton cannot be null.");this.data=e,this.bones=new Array;for(let s=0,r=e.bones.length;s0){x=u/x*p;for(let T=1;T0?Re.degRad:-.01745329277777778}for(let x=0,C=3;x0){let M=T.a,k=T.b,B=T.c,D=T.d,G=0,V=0,Y=0;if(a?G=m[C-1]:h[x+1]==0?G=m[C+2]:G=Math.atan2(I,_),G-=Math.atan2(B,M),b){V=Math.cos(G),Y=Math.sin(G);let L=T.data.length;g+=(L*(V*M-Y*B)-_)*i,v+=(L*(Y*M+V*B)-I)*i}else G+=y;G>Re.PI?G-=Re.PI2:G<-3.1415927&&(G+=Re.PI2),G*=i,V=Math.cos(G),Y=Math.sin(G),T.a=V*M-Y*B,T.b=V*k-Y*D,T.c=Y*M+V*B,T.d=Y*k+V*D}T.updateAppliedTransform()}}computeWorldPositions(e,t,i){let s=this.target,r=this.position,o=this.spaces,a=De.setArraySize(this.positions,t*3+2),c=this.world,l=e.closed,d=e.worldVerticesLength,u=d/6,h=Yi.NONE;if(!e.constantSpeed){let L=e.lengths;u-=l?1:2;let N=L[u];this.data.positionMode==Ms.Percent&&(r*=N);let F;switch(this.data.spacingMode){case Ai.Percent:F=N;break;case Ai.Proportional:F=N/t;break;default:F=1}c=De.setArraySize(this.world,8);for(let $=0,X=0,z=0;$N){h!=Yi.AFTER&&(h=Yi.AFTER,e.computeWorldVertices(s,d-6,4,c,0,2)),this.addAfterPosition(J-N,c,0,a,X);continue}for(;;z++){let oe=L[z];if(!(J>oe)){if(z==0)J/=oe;else{let le=L[z-1];J=(J-le)/(oe-le)}break}}z!=h&&(h=z,l&&z==u?(e.computeWorldVertices(s,d-4,4,c,0,2),e.computeWorldVertices(s,0,4,c,4,2)):e.computeWorldVertices(s,z*6+2,8,c,0,2)),this.addCurvePosition(J,c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],a,X,i||$>0&&K==0)}return a}l?(d+=2,c=De.setArraySize(this.world,d),e.computeWorldVertices(s,2,d-4,c,0,2),e.computeWorldVertices(s,0,2,c,d-4,2),c[d-2]=c[0],c[d-1]=c[1]):(u--,d-=4,c=De.setArraySize(this.world,d),e.computeWorldVertices(s,2,d,c,0,2));let f=De.setArraySize(this.curves,u),p=0,m=c[0],g=c[1],v=0,y=0,b=0,x=0,C=0,T=0,S=0,E=0,_=0,I=0,M=0,k=0,B=0,D=0;for(let L=0,N=2;Lp){this.addAfterPosition(z-p,c,d-4,a,N);continue}for(;;F++){let K=f[F];if(!(z>K)){if(F==0)z/=K;else{let J=f[F-1];z=(z-J)/(K-J)}break}}if(F!=h){h=F;let K=F*6;for(m=c[K],g=c[K+1],v=c[K+2],y=c[K+3],b=c[K+4],x=c[K+5],C=c[K+6],T=c[K+7],S=(m-v*2+b)*.03,E=(g-y*2+x)*.03,_=((v-b)*3-m+C)*.006,I=((y-x)*3-g+T)*.006,M=S*2+_,k=E*2+I,B=(v-m)*.3+S+_*.16666667,D=(y-g)*.3+E+I*.16666667,Y=Math.sqrt(B*B+D*D),V[0]=Y,K=1;K<8;K++)B+=M,D+=k,M+=_,k+=I,Y+=Math.sqrt(B*B+D*D),V[K]=Y;B+=M,D+=k,Y+=Math.sqrt(B*B+D*D),V[8]=Y,B+=M+_,D+=k+I,Y+=Math.sqrt(B*B+D*D),V[9]=Y,$=0}for(z*=Y;;$++){let K=V[$];if(!(z>K)){if($==0)z/=K;else{let J=V[$-1];z=$+(z-J)/(K-J)}break}}this.addCurvePosition(z*.1,m,g,v,y,b,x,C,T,a,N,i||L>0&&X==0)}return a}addBeforePosition(e,t,i,s,r){let o=t[i],a=t[i+1],c=t[i+2]-o,l=t[i+3]-a,d=Math.atan2(l,c);s[r]=o+e*Math.cos(d),s[r+1]=a+e*Math.sin(d),s[r+2]=d}addAfterPosition(e,t,i,s,r){let o=t[i+2],a=t[i+3],c=o-t[i],l=a-t[i+1],d=Math.atan2(l,c);s[r]=o+e*Math.cos(d),s[r+1]=a+e*Math.sin(d),s[r+2]=d}addCurvePosition(e,t,i,s,r,o,a,c,l,d,u,h){if(e==0||isNaN(e)){d[u]=t,d[u+1]=i,d[u+2]=Math.atan2(r-i,s-t);return}let f=e*e,p=f*e,m=1-e,g=m*m,v=g*m,y=m*e,b=y*3,x=m*b,C=b*e,T=t*v+s*x+o*C+c*p,S=i*v+r*x+a*C+l*p;d[u]=T,d[u+1]=S,h&&(e<.001?d[u+2]=Math.atan2(r-i,s-t):d[u+2]=Math.atan2(S-(i*g+r*y*2+a*f),T-(t*g+s*y*2+o*f)))}},A(Yi,"NONE",-1),A(Yi,"BEFORE",-2),A(Yi,"AFTER",-3),A(Yi,"epsilon",1e-5),Yi),m3=class{constructor(e,t){A(this,"data");A(this,"_bone",null);A(this,"inertia",0);A(this,"strength",0);A(this,"damping",0);A(this,"massInverse",0);A(this,"wind",0);A(this,"gravity",0);A(this,"mix",0);A(this,"_reset",!0);A(this,"ux",0);A(this,"uy",0);A(this,"cx",0);A(this,"cy",0);A(this,"tx",0);A(this,"ty",0);A(this,"xOffset",0);A(this,"xVelocity",0);A(this,"yOffset",0);A(this,"yVelocity",0);A(this,"rotateOffset",0);A(this,"rotateVelocity",0);A(this,"scaleOffset",0);A(this,"scaleVelocity",0);A(this,"active",!1);A(this,"skeleton");A(this,"remaining",0);A(this,"lastTime",0);this.data=e,this.skeleton=t,this.bone=t.bones[e.bone.index],this.inertia=e.inertia,this.strength=e.strength,this.damping=e.damping,this.massInverse=e.massInverse,this.wind=e.wind,this.gravity=e.gravity,this.mix=e.mix}set bone(e){this._bone=e}get bone(){if(this._bone)return this._bone;throw new Error("Bone not set.")}reset(){this.remaining=0,this.lastTime=this.skeleton.time,this._reset=!0,this.xOffset=0,this.xVelocity=0,this.yOffset=0,this.yVelocity=0,this.rotateOffset=0,this.rotateVelocity=0,this.scaleOffset=0,this.scaleVelocity=0}setToSetupPose(){const e=this.data;this.inertia=e.inertia,this.strength=e.strength,this.damping=e.damping,this.massInverse=e.massInverse,this.wind=e.wind,this.gravity=e.gravity,this.mix=e.mix}isActive(){return this.active}update(e){const t=this.mix;if(t==0)return;const i=this.data.x>0,s=this.data.y>0,r=this.data.rotate>0||this.data.shearX>0,o=this.data.scaleX>0,a=this.bone,c=a.data.length;switch(e){case $r.none:return;case $r.reset:this.reset();case $r.update:const l=this.skeleton,d=Math.max(this.skeleton.time-this.lastTime,0);this.remaining+=d,this.lastTime=l.time;const u=a.worldX,h=a.worldY;if(this._reset)this._reset=!1,this.ux=u,this.uy=h;else{let f=this.remaining,p=this.inertia,m=this.data.step,g=this.skeleton.data.referenceScale,v=-1,y=this.data.limit*d,b=y*Math.abs(l.scaleY);if(y*=Math.abs(l.scaleX),i||s){if(i){const x=(this.ux-u)*p;this.xOffset+=x>y?y:x<-y?-y:x,this.ux=u}if(s){const x=(this.uy-h)*p;this.yOffset+=x>b?b:x<-b?-b:x,this.uy=h}if(f>=m){v=Math.pow(this.damping,60*m);const x=this.massInverse*m,C=this.strength,T=this.wind*g*l.scaleX,S=this.gravity*g*l.scaleY;do i&&(this.xVelocity+=(T-this.xOffset*C)*x,this.xOffset+=this.xVelocity*m,this.xVelocity*=v),s&&(this.yVelocity-=(S+this.yOffset*C)*x,this.yOffset+=this.yVelocity*m,this.yVelocity*=v),f-=m;while(f>=m)}i&&(a.worldX+=this.xOffset*t*this.data.x),s&&(a.worldY+=this.yOffset*t*this.data.y)}if(r||o){let x=Math.atan2(a.c,a.a),C=0,T=0,S=0,E=this.cx-a.worldX,_=this.cy-a.worldY;if(E>y?E=y:E<-y&&(E=-y),_>b?_=b:_<-b&&(_=-b),r){S=(this.data.rotate+this.data.shearX)*t;let I=Math.atan2(_+this.ty,E+this.tx)-x-this.rotateOffset*S;this.rotateOffset+=(I-Math.ceil(I*Re.invPI2-.5)*Re.PI2)*p,I=this.rotateOffset*S+x,C=Math.cos(I),T=Math.sin(I),o&&(I=c*a.getWorldScaleX(),I>0&&(this.scaleOffset+=(E*C+_*T)*p/I))}else{C=Math.cos(x),T=Math.sin(x);const I=c*a.getWorldScaleX();I>0&&(this.scaleOffset+=(E*C+_*T)*p/I)}if(f=this.remaining,f>=m){v==-1&&(v=Math.pow(this.damping,60*m));const I=this.massInverse*m,M=this.strength,k=this.wind,B=Wg.yDown?-this.gravity:this.gravity,D=c/g;for(;;)if(f-=m,o&&(this.scaleVelocity+=(k*C-B*T-this.scaleOffset*M)*I,this.scaleOffset+=this.scaleVelocity*m,this.scaleVelocity*=v),r){if(this.rotateVelocity-=((k*T+B*C)*D+this.rotateOffset*M)*I,this.rotateOffset+=this.rotateVelocity*m,this.rotateVelocity*=v,f0){let f=0;this.data.rotate>0&&(f=l*this.data.rotate,d=Math.sin(f),u=Math.cos(f),h=a.b,a.b=u*h-d*a.d,a.d=d*h+u*a.d),f+=l*this.data.shearX,d=Math.sin(f),u=Math.cos(f),h=a.a,a.a=u*h-d*a.c,a.c=d*h+u*a.c}else l*=this.data.rotate,d=Math.sin(l),u=Math.cos(l),h=a.a,a.a=u*h-d*a.c,a.c=d*h+u*a.c,h=a.b,a.b=u*h-d*a.d,a.d=d*h+u*a.d}if(o){const l=1+this.scaleOffset*t*this.data.scaleX;a.a*=l,a.c*=l}e!=$r.pose&&(this.tx=c*a.a,this.ty=c*a.c),a.updateAppliedTransform()}translate(e,t){this.ux-=e,this.uy-=t,this.cx-=e,this.cy-=t}rotate(e,t,i){const s=i*Re.degRad,r=Math.cos(s),o=Math.sin(s),a=this.cx-e,c=this.cy-t;this.translate(a*r-c*o-a,a*o+c*r-c)}},g3=class{constructor(e,t){A(this,"data");A(this,"bone");A(this,"color");A(this,"darkColor",null);A(this,"attachment",null);A(this,"attachmentState",0);A(this,"sequenceIndex",-1);A(this,"deform",new Array);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("bone cannot be null.");this.data=e,this.bone=t,this.color=new ut,this.darkColor=e.darkColor?new ut:null,this.setToSetupPose()}getSkeleton(){return this.bone.skeleton}getAttachment(){return this.attachment}setAttachment(e){this.attachment!=e&&((!(e instanceof mr)||!(this.attachment instanceof mr)||e.timelineAttachment!=this.attachment.timelineAttachment)&&(this.deform.length=0),this.attachment=e,this.sequenceIndex=-1)}setToSetupPose(){this.color.setFromColor(this.data.color),this.darkColor&&this.darkColor.setFromColor(this.data.darkColor),this.data.attachmentName?(this.attachment=null,this.setAttachment(this.bone.skeleton.getAttachment(this.data.index,this.data.attachmentName))):this.attachment=null}},v3=class{constructor(e,t){A(this,"data");A(this,"bones");A(this,"target");A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0);A(this,"mixScaleX",0);A(this,"mixScaleY",0);A(this,"mixShearY",0);A(this,"temp",new pu);A(this,"active",!1);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("skeleton cannot be null.");this.data=e,this.bones=new Array;for(let s=0;s0?Re.degRad:-.01745329277777778,p=this.data.offsetRotation*f,m=this.data.offsetShearY*f,g=this.bones;for(let v=0,y=g.length;vRe.PI?E-=Re.PI2:E<-3.1415927&&(E+=Re.PI2),E*=e;let _=Math.cos(E),I=Math.sin(E);b.a=_*x-I*T,b.b=_*C-I*S,b.c=I*x+_*T,b.d=I*C+_*S}if(a){let x=this.temp;c.localToWorld(x.set(this.data.offsetX,this.data.offsetY)),b.worldX+=(x.x-b.worldX)*t,b.worldY+=(x.y-b.worldY)*i}if(s!=0){let x=Math.sqrt(b.a*b.a+b.c*b.c);x!=0&&(x=(x+(Math.sqrt(l*l+u*u)-x+this.data.offsetScaleX)*s)/x),b.a*=x,b.c*=x}if(r!=0){let x=Math.sqrt(b.b*b.b+b.d*b.d);x!=0&&(x=(x+(Math.sqrt(d*d+h*h)-x+this.data.offsetScaleY)*r)/x),b.b*=x,b.d*=x}if(o>0){let x=b.b,C=b.d,T=Math.atan2(C,x),S=Math.atan2(h,d)-Math.atan2(u,l)-(T-Math.atan2(b.c,b.a));S>Re.PI?S-=Re.PI2:S<-3.1415927&&(S+=Re.PI2),S=T+(S+m)*o;let E=Math.sqrt(x*x+C*C);b.b=Math.cos(S)*E,b.d=Math.sin(S)*E}b.updateAppliedTransform()}}applyRelativeWorld(){let e=this.mixRotate,t=this.mixX,i=this.mixY,s=this.mixScaleX,r=this.mixScaleY,o=this.mixShearY,a=t!=0||i!=0,c=this.target,l=c.a,d=c.b,u=c.c,h=c.d,f=l*h-d*u>0?Re.degRad:-.01745329277777778,p=this.data.offsetRotation*f,m=this.data.offsetShearY*f,g=this.bones;for(let v=0,y=g.length;vRe.PI?E-=Re.PI2:E<-3.1415927&&(E+=Re.PI2),E*=e;let _=Math.cos(E),I=Math.sin(E);b.a=_*x-I*T,b.b=_*C-I*S,b.c=I*x+_*T,b.d=I*C+_*S}if(a){let x=this.temp;c.localToWorld(x.set(this.data.offsetX,this.data.offsetY)),b.worldX+=x.x*t,b.worldY+=x.y*i}if(s!=0){let x=(Math.sqrt(l*l+u*u)-1+this.data.offsetScaleX)*s+1;b.a*=x,b.c*=x}if(r!=0){let x=(Math.sqrt(d*d+h*h)-1+this.data.offsetScaleY)*r+1;b.b*=x,b.d*=x}if(o>0){let x=Math.atan2(h,d)-Math.atan2(u,l);x>Re.PI?x-=Re.PI2:x<-3.1415927&&(x+=Re.PI2);let C=b.b,T=b.d;x=Math.atan2(T,C)+(x-Re.PI/2+m)*o;let S=Math.sqrt(C*C+T*T);b.b=Math.cos(x)*S,b.d=Math.sin(x)*S}b.updateAppliedTransform()}}applyAbsoluteLocal(){let e=this.mixRotate,t=this.mixX,i=this.mixY,s=this.mixScaleX,r=this.mixScaleY,o=this.mixShearY,a=this.target,c=this.bones;for(let l=0,d=c.length;lt.data.name==e)??null}findTransformConstraint(e){if(!e)throw new Error("constraintName cannot be null.");return this.transformConstraints.find(t=>t.data.name==e)??null}findPathConstraint(e){if(!e)throw new Error("constraintName cannot be null.");return this.pathConstraints.find(t=>t.data.name==e)??null}findPhysicsConstraint(e){if(e==null)throw new Error("constraintName cannot be null.");return this.physicsConstraints.find(t=>t.data.name==e)??null}getBoundsRect(e){let t=new pu,i=new pu;return this.getBounds(t,i,void 0,e),{x:t.x,y:t.y,width:i.x,height:i.y}}getBounds(e,t,i=new Array(2),s=null){if(!e)throw new Error("offset cannot be null.");if(!t)throw new Error("size cannot be null.");let r=this.drawOrder,o=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY;for(let d=0,u=r.length;d=s.length&&(s.length=e+1),s[e]||(s[e]={}),s[e][t]=i}addSkin(e){for(let s=0;s= 0.");if(!t)throw new Error("name cannot be null.");if(!i)throw new Error("boneData cannot be null.");this.index=e,this.name=t,this.boneData=i}};var jr;(function(n){n[n.Normal=0]="Normal",n[n.Additive=1]="Additive",n[n.Multiply=2]="Multiply",n[n.Screen=3]="Screen"})(jr||(jr={}));let mA=class extends fh{constructor(t){super(t,0,!1);A(this,"bones",new Array);A(this,"_target",null);A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0);A(this,"mixScaleX",0);A(this,"mixScaleY",0);A(this,"mixShearY",0);A(this,"offsetRotation",0);A(this,"offsetX",0);A(this,"offsetY",0);A(this,"offsetScaleX",0);A(this,"offsetScaleY",0);A(this,"offsetShearY",0);A(this,"relative",!1);A(this,"local",!1)}set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("BoneData not set.")}},Fm=class{constructor(e){A(this,"scale",1);A(this,"attachmentLoader");A(this,"linkedMeshes",new Array);this.attachmentLoader=e}readSkeletonData(e){let t=this.scale,i=new gu;i.name="";let s=new b3(e),r=s.readInt32(),o=s.readInt32();i.hash=o==0&&r==0?null:o.toString(16)+r.toString(16),i.version=s.readString(),i.x=s.readFloat(),i.y=s.readFloat(),i.width=s.readFloat(),i.height=s.readFloat(),i.referenceScale=s.readFloat()*t;let a=s.readBoolean();a&&(i.fps=s.readFloat(),i.imagesPath=s.readString(),i.audioPath=s.readString());let c=0;c=s.readInt(!0);for(let d=0;d>1&3,f.rotateMode=p>>3&3,(p&128)!=0&&(f.offsetRotation=s.readFloat()),f.position=s.readFloat(),f.positionMode==Ms.Fixed&&(f.position*=t),f.spacing=s.readFloat(),(f.spacingMode==Ai.Length||f.spacingMode==Ai.Fixed)&&(f.spacing*=t),f.mixRotate=s.readFloat(),f.mixX=s.readFloat(),f.mixY=s.readFloat(),i.pathConstraints.push(f)}c=s.readInt(!0);for(let d=0,u;d>4,e.readFloat())}s.push(T);break}}}}}let o=e.readInt(!0);if(o>0){let l=new Fl(o),d=i.slots.length;for(let u=0;u=0;y--)p[y]=-1;let m=De.newArray(d-f,0),g=0,v=0;for(let y=0;y=0;y--)p[y]==-1&&(p[y]=m[--v]);l.setFrame(u,h,p)}s.push(l)}let a=e.readInt(!0);if(a>0){let l=new Gg(a);for(let d=0;d>>1^-(i&1)}readStringRef(){let e=this.readInt(!0);return e==0?null:this.strings[e-1]}readString(){let e=this.readInt(!0);switch(e){case 0:return null;case 1:return""}e--;let t="";for(let i=0;i>4){case 12:case 13:t+=String.fromCharCode((s&31)<<6|this.readByte()&63),i+=2;break;case 14:t+=String.fromCharCode((s&15)<<12|(this.readByte()&63)<<6|this.readByte()&63),i+=3;break;default:t+=String.fromCharCode(s),i++}}return t}readFloat(){let e=this.buffer.getFloat32(this.index);return this.index+=4,e}readBoolean(){return this.readByte()!=0}},y3=class{constructor(e,t,i,s,r){A(this,"parent");A(this,"skinIndex");A(this,"slotIndex");A(this,"mesh");A(this,"inheritTimeline");this.mesh=e,this.skinIndex=t,this.slotIndex=i,this.parent=s,this.inheritTimeline=r}},x3=class{constructor(e=null,t=null,i=0){A(this,"bones");A(this,"vertices");A(this,"length");this.bones=e,this.vertices=t,this.length=i}};var Xs;(function(n){n[n.Region=0]="Region",n[n.BoundingBox=1]="BoundingBox",n[n.Mesh=2]="Mesh",n[n.LinkedMesh=3]="LinkedMesh",n[n.Path=4]="Path",n[n.Point=5]="Point",n[n.Clipping=6]="Clipping"})(Xs||(Xs={}));function Bi(n,e,t){let i=n.readFloat(),s=n.readFloat()*t;for(let r=0,o=0,a=e.getFrameCount()-1;e.setFrame(r,i,s),r!=a;r++){let c=n.readFloat(),l=n.readFloat()*t;switch(n.readByte()){case hs:e.setStepped(r);break;case fs:gt(n,e,o++,r,0,i,c,s,l,t)}i=c,s=l}return e}function pp(n,e,t){let i=n.readFloat(),s=n.readFloat()*t,r=n.readFloat()*t;for(let o=0,a=0,c=e.getFrameCount()-1;e.setFrame(o,i,s,r),o!=c;o++){let l=n.readFloat(),d=n.readFloat()*t,u=n.readFloat()*t;switch(n.readByte()){case hs:e.setStepped(o);break;case fs:gt(n,e,a++,o,0,i,l,s,d,t),gt(n,e,a++,o,1,i,l,r,u,t)}i=l,s=d,r=u}return e}function gt(n,e,t,i,s,r,o,a,c,l){e.setBezier(t,i,s,r,a,n.readFloat(),n.readFloat()*l,n.readFloat(),n.readFloat()*l,o,c)}const w3=0,S3=1,C3=2,A3=3,T3=4,E3=5,_3=6,M3=7,P3=8,I3=9,k3=10,R3=0,F3=1,L3=2,D3=3,O3=4,N3=5,$3=0,B3=1,U3=0,V3=1,X3=2,Y3=0,z3=1,j3=2,H3=4,G3=5,W3=6,q3=7,K3=8,hs=1,fs=2;class ln{constructor(){A(this,"convexPolygons",new Array);A(this,"convexPolygonsIndices",new Array);A(this,"indicesArray",new Array);A(this,"isConcaveArray",new Array);A(this,"triangles",new Array);A(this,"polygonPool",new fu(()=>new Array));A(this,"polygonIndicesPool",new fu(()=>new Array))}triangulate(e){let t=e,i=e.length>>1,s=this.indicesArray;s.length=0;for(let a=0;a3;){let a=i-1,c=0,l=1;for(;;){e:if(!r[c]){let h=s[a]<<1,f=s[c]<<1,p=s[l]<<1,m=t[h],g=t[h+1],v=t[f],y=t[f+1],b=t[p],x=t[p+1];for(let C=(l+1)%i;C!=a;C=(C+1)%i){if(!r[C])continue;let T=s[C]<<1,S=t[T],E=t[T+1];if(ln.positiveArea(b,x,m,g,S,E)&&ln.positiveArea(m,g,v,y,S,E)&&ln.positiveArea(v,y,b,x,S,E))break e}break}if(l==0){do{if(!r[c])break;c--}while(c>0);break}a=c,c=l,l=(l+1)%i}o.push(s[(i+c-1)%i]),o.push(s[c]),o.push(s[(c+1)%i]),s.splice(c,1),r.splice(c,1),i--;let d=(i+c-1)%i,u=c==i?0:c;r[d]=ln.isConcave(d,i,t,s),r[u]=ln.isConcave(u,i,t,s)}return i==3&&(o.push(s[2]),o.push(s[0]),o.push(s[1])),o}decompose(e,t){let i=e,s=this.convexPolygons;this.polygonPool.freeAll(s),s.length=0;let r=this.convexPolygonsIndices;this.polygonIndicesPool.freeAll(r),r.length=0;let o=this.polygonIndicesPool.obtain();o.length=0;let a=this.polygonPool.obtain();a.length=0;let c=-1,l=0;for(let d=0,u=t.length;d0?(s.push(a),r.push(o)):(this.polygonPool.free(a),this.polygonIndicesPool.free(o)),a=this.polygonPool.obtain(),a.length=0,a.push(m),a.push(g),a.push(v),a.push(y),a.push(b),a.push(x),o=this.polygonIndicesPool.obtain(),o.length=0,o.push(h),o.push(f),o.push(p),l=ln.winding(m,g,v,y,b,x),c=h)}a.length>0&&(s.push(a),r.push(o));for(let d=0,u=s.length;d=0;d--)a=s[d],a.length==0&&(s.splice(d,1),this.polygonPool.free(a),o=r[d],r.splice(d,1),this.polygonIndicesPool.free(o));return s}static isConcave(e,t,i,s){let r=s[(t+e-1)%t]<<1,o=s[e]<<1,a=s[(e+1)%t]<<1;return!this.positiveArea(i[r],i[r+1],i[o],i[o+1],i[a],i[a+1])}static positiveArea(e,t,i,s,r,o){return e*(o-s)+i*(t-o)+r*(s-t)>=0}static winding(e,t,i,s,r,o){let a=i-e,c=s-t;return r*c-o*a+a*t-e*c>=0?1:-1}}class vu{constructor(){A(this,"triangulator",new ln);A(this,"clippingPolygon",new Array);A(this,"clipOutput",new Array);A(this,"clippedVertices",new Array);A(this,"clippedUVs",new Array);A(this,"clippedTriangles",new Array);A(this,"scratch",new Array);A(this,"clipAttachment",null);A(this,"clippingPolygons",null)}clipStart(e,t){if(this.clipAttachment)return 0;this.clipAttachment=t;let i=t.worldVerticesLength,s=De.setArraySize(this.clippingPolygon,i);t.computeWorldVertices(e,0,i,s,0,2);let r=this.clippingPolygon;vu.makeClockwise(r);let o=this.clippingPolygons=this.triangulator.decompose(r,this.triangulator.triangulate(r));for(let a=0,c=o.length;a>1,T=this.clipOutput,S=De.setArraySize(r,b+C*2);for(let _=0;_>1,X=this.clipOutput,z=De.setArraySize(l,D+$*f);for(let J=0;J>1,N=this.clipOutput,F=De.setArraySize(o,M+L*2),$=De.setArraySize(a,M+L*2);for(let z=0;z=2?(u=c,c=this.scratch):u=this.scratch,u.length=0,u.push(e),u.push(t),u.push(i),u.push(s),u.push(r),u.push(o),u.push(e),u.push(t),c.length=0;let h=a.length-4,f=a;for(let p=0;;p+=2){let m=f[p],g=f[p+1],v=m-f[p+2],y=g-f[p+3],b=c.length,x=u;for(let T=0,S=u.length-2;Tv*(g-M),B=y*(m-E)-v*(g-_);if(B>0){if(k){c.push(I),c.push(M);continue}let D=I-E,G=M-_,V=B/(D*y-G*v);if(V>=0&&V<=1)c.push(E+D*V),c.push(_+G*V);else{c.push(I),c.push(M);continue}}else if(k){let D=I-E,G=M-_,V=B/(D*y-G*v);if(V>=0&&V<=1)c.push(E+D*V),c.push(_+G*V),c.push(I),c.push(M);else{c.push(I),c.push(M);continue}}d=!0}if(b==c.length)return l.length=0,!0;if(c.push(c[0]),c.push(c[1]),p==h)break;let C=c;c=u,c.length=0,u=C}if(l!=c){l.length=0;for(let p=0,m=c.length-2;p>1;l0){let d=i.findPhysicsConstraint(a);if(!d)throw new Error("Physics constraint not found: "+a);l=i.physicsConstraints.indexOf(d)}for(let d in c){let u=c[d],h=u[0];if(!h)continue;let f=u.length;if(d=="reset"){const m=new ZC(f,l);for(let g=0;h!=null;h=u[g+1],g++)m.setFrame(g,ae(h,"time",0));r.push(m);continue}let p;if(d=="inertia")p=new jC(f,f,l);else if(d=="strength")p=new HC(f,f,l);else if(d=="damping")p=new GC(f,f,l);else if(d=="mass")p=new WC(f,f,l);else if(d=="wind")p=new qC(f,f,l);else if(d=="gravity")p=new KC(f,f,l);else if(d=="mix")p=new JC(f,f,l);else continue;r.push(Vn(u,p,0,1))}}if(e.attachments)for(let a in e.attachments){let c=e.attachments[a],l=i.findSkin(a);if(!l)throw new Error("Skin not found: "+a);for(let d in c){let u=c[d],h=i.findSlot(d);if(!h)throw new Error("Slot not found: "+d);let f=h.index;for(let p in u){let m=u[p],g=l.getAttachment(f,p);for(let v in m){let y=m[v],b=y[0];if(b){if(v=="deform"){let x=g.bones,C=g.vertices,T=x?C.length/3*2:C.length,S=new BC(y.length,y.length,f,g),E=ae(b,"time",0);for(let _=0,I=0;;_++){let M,k=ae(b,"vertices",null);if(!k)M=x?De.newFloatArray(T):C;else{M=De.newFloatArray(T);let V=ae(b,"offset",0);if(De.arrayCopy(k,0,M,V,k.length),s!=1)for(let Y=V,L=Y+k.length;Y=0;v--)h[v]==-1&&(h[v]=p[--g])}a.setFrame(l,ae(u,"time",0),h)}r.push(a)}if(e.events){let a=new Gg(e.events.length),c=0;for(let l=0;l"u"&&(Math.fround=(function(n){return function(e){return n[0]=e,n[0]}})(new Float32Array(1)));if(typeof window<"u"&&window.PIXI){let n=window.require;window.require=e=>{if(n)return n(e);if(e.startsWith("@pixi/"))return window.PIXI}}const zs=class zs extends c3{constructor(t){super(t.resource.source);A(this,"texture");this.texture=it.from(t)}static from(t){return zs.textureMap.has(t)?zs.textureMap.get(t):new zs(t)}setFilters(t,i){this.texture.baseTexture.scaleMode=zs.toPixiTextureFilter(t),this.texture.baseTexture.mipmap=zs.toPixiMipMap(t)}setWraps(t,i){this.texture.baseTexture.wrapMode=zs.toPixiTextureWrap(t)}dispose(){this.texture.destroy()}static toPixiTextureFilter(t){switch(t){case Mi.Nearest:case Mi.MipMapNearestLinear:case Mi.MipMapNearestNearest:return Gn.NEAREST;case Mi.Linear:case Mi.MipMapLinearLinear:case Mi.MipMapLinearNearest:return Gn.LINEAR;default:throw new Error(`Unknown texture filter: ${String(t)}`)}}static toPixiMipMap(t){switch(t){case Mi.Nearest:case Mi.Linear:return On.OFF;case Mi.MipMapNearestLinear:case Mi.MipMapNearestNearest:case Mi.MipMapLinearLinear:case Mi.MipMapLinearNearest:return On.ON;default:throw new Error(`Unknown texture filter: ${String(t)}`)}}static toPixiTextureWrap(t){switch(t){case cr.ClampToEdge:return Jn.CLAMP;case cr.MirroredRepeat:return Jn.MIRRORED_REPEAT;case cr.Repeat:return Jn.REPEAT;default:throw new Error(`Unknown texture wrap: ${String(t)}`)}}static toPixiBlending(t){switch(t){case jr.Normal:return Qe.NORMAL;case jr.Additive:return Qe.ADD;case jr.Multiply:return Qe.MULTIPLY;case jr.Screen:return Qe.SCREEN;default:throw new Error(`Unknown blendMode: ${String(t)}`)}}};A(zs,"textureMap",new Map);let Yo=zs;const js=class js extends ec{constructor(){const t=new Fg;t.getBuffer("aVertexPosition").static=!1,t.getBuffer("aTextureCoord").static=!1;const i=new ru(it.EMPTY);super(t,i);A(this,"name","");A(this,"warnedTwoTint",!1)}updateFromSpineData(t,i,s,r,o,a,c,l){var v,y;this.texture=t.texture;const d=o/(l?12:8)*2,u=this.geometry.getBuffer("aTextureCoord");((v=u.data)==null?void 0:v.length)!==d&&(u.data=new Float32Array(d));const h=this.geometry.getBuffer("aVertexPosition");((y=h.data)==null?void 0:y.length)!==d&&(h.data=new Float32Array(d));let f=0,p=u.data,m=h.data;for(let b=0;b{lC=e})}function Fr(n){return!!DS(n)}function rc(n){if(!Tt(n)||Xo(n))return n;for(const e in n)if(Ln(n,e))if(!e.includes("."))Tt(n[e])&&rc(n[e]);else{const t=e.split("."),i=t.length-1;let s=n,r=!1;for(let a=0;a{if("locale"in a&&"resource"in a){const{locale:c,resource:l}=a;if(c){if(Fr(c))return;o[c]=Ii(o,c)||$t(),Pd(l,o[c])}else Pd(l,o)}else ze(a)&&Pd(JSON.parse(a),o)}),s==null&&r)for(const a in o)Ln(o,a)&&rc(o[a]);return o}function cC(n){return n.type}function dC(n,e,t){let i=Tt(e.messages)?e.messages:$t();"__i18nGlobal"in t&&(i=Yg(n.locale.value,{messages:i,__i18n:t.__i18nGlobal}));const s=Object.keys(i);s.length&&s.forEach(r=>{n.mergeLocaleMessage(r,i[r])});{if(Tt(e.datetimeFormats)){const r=Object.keys(e.datetimeFormats);r.length&&r.forEach(o=>{n.mergeDateTimeFormat(o,e.datetimeFormats[o])})}if(Tt(e.numberFormats)){const r=Object.keys(e.numberFormats);r.length&&r.forEach(o=>{n.mergeNumberFormat(o,e.numberFormats[o])})}}}function My(n){return Ae(fc,null,n,0)}function oc(){return lC??Ku()}const Py="__INTLIFY_META__",Iy=()=>[],aD=()=>!1;let ky=0;function Ry(n){return((e,t,i,s)=>n(t,i,oc()||void 0,s))}const lD=()=>{const n=oc();let e=null;return n&&(e=cC(n)[Py])?{[Py]:e}:null};function hu(n={}){const{__root:e,__injectWithOption:t}=n,i=e===void 0,s=n.flatJson,r=cu?$e:SE;let o=kt(n.inheritLocale)?n.inheritLocale:!0;const a=r(e&&o?e.locale.value:ze(n.locale)?n.locale:sc),c=r(e&&o?e.fallbackLocale.value:ze(n.fallbackLocale)||Jt(n.fallbackLocale)||Yt(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:a.value),l=r(Yg(a.value,n)),d=r(Yt(n.datetimeFormats)?n.datetimeFormats:{[a.value]:{}}),u=r(Yt(n.numberFormats)?n.numberFormats:{[a.value]:{}});let h=e?e.missingWarn:kt(n.missingWarn)||Ya(n.missingWarn)?n.missingWarn:!0,f=e?e.fallbackWarn:kt(n.fallbackWarn)||Ya(n.fallbackWarn)?n.fallbackWarn:!0,p=e?e.fallbackRoot:kt(n.fallbackRoot)?n.fallbackRoot:!0,m=!!n.fallbackFormat,g=Kt(n.missing)?n.missing:null,v=Kt(n.missing)?Ry(n.missing):null,y=Kt(n.postTranslation)?n.postTranslation:null,b=e?e.warnHtmlMessage:kt(n.warnHtmlMessage)?n.warnHtmlMessage:!0,w=!!n.escapeParameter;const C=e?e.modifiers:Yt(n.modifiers)?n.modifiers:{};let T=n.pluralRules||e&&e.pluralRules,S;S=(()=>{i&&yy(null);const de={version:rD,locale:a.value,fallbackLocale:c.value,messages:l.value,modifiers:C,pluralRules:T,missing:v===null?void 0:v,missingWarn:h,fallbackWarn:f,fallbackFormat:m,unresolving:!0,postTranslation:y===null?void 0:y,warnHtmlMessage:b,escapeParameter:w,messageResolver:n.messageResolver,messageCompiler:n.messageCompiler,__meta:{framework:"vue"}};de.datetimeFormats=d.value,de.numberFormats=u.value;const ge=jL(de);return i&&yy(ge),ge})(),ld(S,a.value,c.value);function _(){return[a.value,c.value,l.value,d.value,u.value]}const I=Fe({get:()=>a.value,set:de=>{S.locale=de,a.value=de}});function M(de){i||(S.fallbackContext=zL());try{return de()}finally{i||(S.fallbackContext=void 0)}}function k(de){M(()=>ld(S,a.value,de))}const B=Fe({get:()=>c.value,set:de=>{c.value=de,S.fallbackLocale=c.value,k(c.value)}}),D=Fe(()=>l.value),G=Fe(()=>d.value),V=Fe(()=>u.value);function Y(){return Kt(y)?y:null}function L(de){y=de,S.postTranslation=de}function N(){return g}function F(de){de!==null&&(v=Ry(de)),g=de,S.missing=v}const $=(de,ge,Ge,Le,Ee,Ze)=>{_();let Te;try{__INTLIFY_PROD_DEVTOOLS__,Te=M(()=>de(S))}finally{__INTLIFY_PROD_DEVTOOLS__}if(Ge!=="translate exists"&&xi(Te)&&Te===uh||Ge==="translate exists"&&!Te){const[vi,lt]=ge();return e&&p?Le(e):Ee(vi)}else{if(Ze(Te))return Te;throw hn(sn.UNEXPECTED_RETURN_TYPE)}};function X(...de){return $(ge=>Reflect.apply(_y,null,[ge,...de]),()=>Tm(...de),"translate",ge=>Reflect.apply(ge.t,ge,[...de]),ge=>ge,ge=>ze(ge))}function z(...de){const[ge,Ge,Le]=de;if(Le&&!Tt(Le))throw hn(sn.INVALID_ARGUMENT);return X(ge,Ge,gi({resolvedMessage:!0},Le||{}))}function K(...de){return $(ge=>Reflect.apply(Sy,null,[ge,...de]),()=>Cm(...de),"datetime format",ge=>Reflect.apply(ge.d,ge,[...de]),()=>du,ge=>ze(ge)||Jt(ge))}function J(...de){return $(ge=>Reflect.apply(Ay,null,[ge,...de]),()=>Am(...de),"number format",ge=>Reflect.apply(ge.n,ge,[...de]),()=>du,ge=>ze(ge)||Jt(ge))}function oe(de){return de.map(ge=>ze(ge)||xi(ge)||kt(ge)?My(String(ge)):ge)}const ve={normalize:oe,interpolate:de=>de,type:"vnode"};function Se(...de){return $(ge=>{let Ge;const Le=ge;try{Le.processor=ve,Ge=Reflect.apply(_y,null,[Le,...de])}finally{Le.processor=null}return Ge},()=>Tm(...de),"translate",ge=>ge[Em](...de),ge=>[My(ge)],ge=>Jt(ge))}function fe(...de){return $(ge=>Reflect.apply(Ay,null,[ge,...de]),()=>Am(...de),"number format",ge=>ge[Mm](...de),Iy,ge=>ze(ge)||Jt(ge))}function be(...de){return $(ge=>Reflect.apply(Sy,null,[ge,...de]),()=>Cm(...de),"datetime format",ge=>ge[_m](...de),Iy,ge=>ze(ge)||Jt(ge))}function q(de){T=de,S.pluralRules=T}function Z(de,ge){const Ge=O(de),Le=S.messageResolver(Ge,ge);return Le===null?Ii(Ge,ge):Le}function se(de,ge){return $(()=>{if(!de)return!1;const Ge=ze(ge)?ge:a.value,Le=ze(ge)?[Ge]:S.localeFallbacker(S,c.value,Ge);for(let Ee=0;Ee[de],"translate exists",Ge=>Reflect.apply(Ge.te,Ge,[de,ge]),aD,Ge=>kt(Ge))}function j(de){let ge=null;const Ge=S.localeFallbacker(S,c.value,a.value);for(let Le=0;Lek(c.value),{deep:!0,flush:"sync"}),e&&cu&&(ei(e.locale,de=>{o&&(a.value=de,S.locale=de,ld(S,a.value,c.value))}),ei(e.fallbackLocale,de=>{o&&(c.value=de,S.fallbackLocale=c.value,ld(S,a.value,c.value))}));const Be={id:ky,locale:I,fallbackLocale:B,get inheritLocale(){return o},set inheritLocale(de){o=de,de&&e&&(I.value=e.locale.value,B.value=e.fallbackLocale.value)},get availableLocales(){return Object.keys(l.value).sort()},messages:D,get modifiers(){return C},get pluralRules(){return T||{}},get isGlobal(){return i},get missingWarn(){return h},set missingWarn(de){h=de,S.missingWarn=h},get fallbackWarn(){return f},set fallbackWarn(de){f=de,S.fallbackWarn=f},get fallbackRoot(){return p},set fallbackRoot(de){p=de},get fallbackFormat(){return m},set fallbackFormat(de){m=de,S.fallbackFormat=m},get warnHtmlMessage(){return b},set warnHtmlMessage(de){b=de,S.warnHtmlMessage=de},get escapeParameter(){return w},set escapeParameter(de){w=de,S.escapeParameter=de},t:X,getLocaleMessage:O,setLocaleMessage:U,mergeLocaleMessage:W,getPostTranslationHandler:Y,setPostTranslationHandler:L,getMissingHandler:N,setMissingHandler:F,[oC]:q};return Be.datetimeFormats=G,Be.numberFormats=V,Be.rt=z,Be.te=se,Be.tm=H,Be.d=K,Be.n=J,Be.getDateTimeFormat=ee,Be.setDateTimeFormat=ne,Be.mergeDateTimeFormat=ue,Be.getNumberFormat=xe,Be.setNumberFormat=ye,Be.mergeNumberFormat=Ne,Be[aC]=t,Be[Em]=Se,Be[_m]=be,Be[Mm]=fe,Be}function cD(n){const e=ze(n.locale)?n.locale:sc,t=ze(n.fallbackLocale)||Jt(n.fallbackLocale)||Yt(n.fallbackLocale)||n.fallbackLocale===!1?n.fallbackLocale:e,i=Kt(n.missing)?n.missing:void 0,s=kt(n.silentTranslationWarn)||Ya(n.silentTranslationWarn)?!n.silentTranslationWarn:!0,r=kt(n.silentFallbackWarn)||Ya(n.silentFallbackWarn)?!n.silentFallbackWarn:!0,o=kt(n.fallbackRoot)?n.fallbackRoot:!0,a=!!n.formatFallbackMessages,c=Yt(n.modifiers)?n.modifiers:{},l=n.pluralizationRules,d=Kt(n.postTranslation)?n.postTranslation:void 0,u=ze(n.warnHtmlInMessage)?n.warnHtmlInMessage!=="off":!0,h=!!n.escapeParameterHtml,f=kt(n.sync)?n.sync:!0;let p=n.messages;if(Yt(n.sharedMessages)){const C=n.sharedMessages;p=Object.keys(C).reduce((S,E)=>{if(Fr(E))return S;const _=Ii(S,E)||(S[E]={});return gi(_,C[E]),S},p||{})}const{__i18n:m,__root:g,__injectWithOption:v}=n,y=n.datetimeFormats,b=n.numberFormats,w=n.flatJson;return{locale:e,fallbackLocale:t,messages:p,flatJson:w,datetimeFormats:y,numberFormats:b,missing:i,missingWarn:s,fallbackWarn:r,fallbackRoot:o,fallbackFormat:a,modifiers:c,pluralRules:l,postTranslation:d,warnHtmlMessage:u,escapeParameter:h,messageResolver:n.messageResolver,inheritLocale:f,__i18n:m,__root:g,__injectWithOption:v}}function Pm(n={}){const e=hu(cD(n)),{__extender:t}=n,i={id:e.id,get locale(){return e.locale.value},set locale(s){e.locale.value=s},get fallbackLocale(){return e.fallbackLocale.value},set fallbackLocale(s){e.fallbackLocale.value=s},get messages(){return e.messages.value},get datetimeFormats(){return e.datetimeFormats.value},get numberFormats(){return e.numberFormats.value},get availableLocales(){return e.availableLocales},get missing(){return e.getMissingHandler()},set missing(s){e.setMissingHandler(s)},get silentTranslationWarn(){return kt(e.missingWarn)?!e.missingWarn:e.missingWarn},set silentTranslationWarn(s){e.missingWarn=kt(s)?!s:s},get silentFallbackWarn(){return kt(e.fallbackWarn)?!e.fallbackWarn:e.fallbackWarn},set silentFallbackWarn(s){e.fallbackWarn=kt(s)?!s:s},get modifiers(){return e.modifiers},get formatFallbackMessages(){return e.fallbackFormat},set formatFallbackMessages(s){e.fallbackFormat=s},get postTranslation(){return e.getPostTranslationHandler()},set postTranslation(s){e.setPostTranslationHandler(s)},get sync(){return e.inheritLocale},set sync(s){e.inheritLocale=s},get warnHtmlInMessage(){return e.warnHtmlMessage?"warn":"off"},set warnHtmlInMessage(s){e.warnHtmlMessage=s!=="off"},get escapeParameterHtml(){return e.escapeParameter},set escapeParameterHtml(s){e.escapeParameter=s},get pluralizationRules(){return e.pluralRules||{}},__composer:e,t(...s){return Reflect.apply(e.t,e,[...s])},rt(...s){return Reflect.apply(e.rt,e,[...s])},te(s,r){return e.te(s,r)},tm(s){return e.tm(s)},getLocaleMessage(s){return e.getLocaleMessage(s)},setLocaleMessage(s,r){e.setLocaleMessage(s,r)},mergeLocaleMessage(s,r){e.mergeLocaleMessage(s,r)},d(...s){return Reflect.apply(e.d,e,[...s])},getDateTimeFormat(s){return e.getDateTimeFormat(s)},setDateTimeFormat(s,r){e.setDateTimeFormat(s,r)},mergeDateTimeFormat(s,r){e.mergeDateTimeFormat(s,r)},n(...s){return Reflect.apply(e.n,e,[...s])},getNumberFormat(s){return e.getNumberFormat(s)},setNumberFormat(s,r){e.setNumberFormat(s,r)},mergeNumberFormat(s,r){e.mergeNumberFormat(s,r)}};return i.__extender=t,i}function dD(n,e,t){return{beforeCreate(){const i=oc();if(!i)throw hn(sn.UNEXPECTED_ERROR);const s=this.$options;if(s.i18n){const r=gi({},s.i18n);if(s.__i18n&&(r.__i18n=s.__i18n),r.__root=e,this===this.$root)this.$i18n=Fy(n,r);else{r.__injectWithOption=!0,r.__extender=t.__vueI18nExtend,this.$i18n=Pm(r);const o=this.$i18n;o.__extender&&(o.__disposer=o.__extender(this.$i18n))}}else if(s.__i18n)if(this===this.$root)this.$i18n=Fy(n,s);else{this.$i18n=Pm({__i18n:s.__i18n,__injectWithOption:!0,__extender:t.__vueI18nExtend,__root:e});const r=this.$i18n;r.__extender&&(r.__disposer=r.__extender(this.$i18n))}else this.$i18n=n;s.__i18nGlobal&&dC(e,s,s),this.$t=(...r)=>this.$i18n.t(...r),this.$rt=(...r)=>this.$i18n.rt(...r),this.$te=(r,o)=>this.$i18n.te(r,o),this.$d=(...r)=>this.$i18n.d(...r),this.$n=(...r)=>this.$i18n.n(...r),this.$tm=r=>this.$i18n.tm(r),t.__setInstance(i,this.$i18n)},mounted(){},unmounted(){const i=oc();if(!i)throw hn(sn.UNEXPECTED_ERROR);const s=this.$i18n;s&&(delete this.$t,delete this.$rt,delete this.$te,delete this.$d,delete this.$n,delete this.$tm,s!=null&&s.__disposer&&(s.__disposer(),delete s.__disposer,delete s.__extender),t.__deleteInstance(i),delete this.$i18n)}}}function Fy(n,e){n.locale=e.locale||n.locale,n.fallbackLocale=e.fallbackLocale||n.fallbackLocale,n.missing=e.missing||n.missing,n.silentTranslationWarn=e.silentTranslationWarn||n.silentFallbackWarn,n.silentFallbackWarn=e.silentFallbackWarn||n.silentFallbackWarn,n.formatFallbackMessages=e.formatFallbackMessages||n.formatFallbackMessages,n.postTranslation=e.postTranslation||n.postTranslation,n.warnHtmlInMessage=e.warnHtmlInMessage||n.warnHtmlInMessage,n.escapeParameterHtml=e.escapeParameterHtml||n.escapeParameterHtml,n.sync=e.sync||n.sync,n.__composer[oC](e.pluralizationRules||n.pluralizationRules);const t=Yg(n.locale,{messages:e.messages,__i18n:e.__i18n});return Object.keys(t).forEach(i=>n.mergeLocaleMessage(i,t[i])),e.datetimeFormats&&Object.keys(e.datetimeFormats).forEach(i=>n.mergeDateTimeFormat(i,e.datetimeFormats[i])),e.numberFormats&&Object.keys(e.numberFormats).forEach(i=>n.mergeNumberFormat(i,e.numberFormats[i])),n}const zg={tag:{type:[String,Object]},locale:{type:String},scope:{type:String,validator:n=>n==="parent"||n==="global",default:"parent"},i18n:{type:Object}};function uD({slots:n},e){return e.length===1&&e[0]==="default"?(n.default?n.default():[]).reduce((i,s)=>[...i,...s.type===_e?s.children:[s]],[]):e.reduce((t,i)=>{const s=n[i];return s&&(t[i]=s()),t},$t())}function uC(){return _e}const hD=qt({name:"i18n-t",props:gi({keypath:{type:String,required:!0},plural:{type:[Number,String],validator:n=>xi(n)||!isNaN(n)}},zg),setup(n,e){const{slots:t,attrs:i}=e,s=n.i18n||fn({useScope:n.scope,__useComponent:!0});return()=>{const r=()=>{const c=Object.keys(t).filter(u=>u[0]!=="_"),l=$t();n.locale&&(l.locale=n.locale),n.plural!==void 0&&(l.plural=ze(n.plural)?+n.plural:n.plural);const d=uD(e,c);return s[Em](n.keypath,d,l)},o=gi($t(),i),a=ze(n.tag)||Tt(n.tag)?n.tag:uC();return Tt(a)?ql(a,o,{default:r}):ql(a,o,r())}}}),Ly=hD;function fD(n){return Jt(n)&&!ze(n[0])}function hC(n,e,t,i){const{slots:s,attrs:r}=e;return()=>{const o=()=>{const l={part:!0};let d=$t();n.locale&&(l.locale=n.locale),ze(n.format)?l.key=n.format:Tt(n.format)&&(ze(n.format.key)&&(l.key=n.format.key),d=Object.keys(n.format).reduce((f,p)=>t.includes(p)?gi($t(),f,{[p]:n.format[p]}):f,$t()));const u=i(n.value,l,d);let h=[l.key];return Jt(u)?h=u.map((f,p)=>{const m=s[f.type],g=m?m({[f.type]:f.value,index:p,parts:u}):[f.value];return fD(g)&&(g[0].key=`${f.type}-${p}`),g}):ze(u)&&(h=[u]),h},a=gi($t(),r),c=ze(n.tag)||Tt(n.tag)?n.tag:uC();return Tt(c)?ql(c,a,{default:o}):ql(c,a,o())}}const pD=qt({name:"i18n-n",props:gi({value:{type:Number,required:!0},format:{type:[String,Object]}},zg),setup(n,e){const t=n.i18n||fn({useScope:n.scope,__useComponent:!0});return hC(n,e,nC,(...i)=>t[Mm](...i))}}),Dy=pD;function mD(n,e){const t=n;if(n.mode==="composition")return t.__getInstance(e)||n.global;{const i=t.__getInstance(e);return i!=null?i.__composer:n.global.__composer}}function gD(n){const e=o=>{const{instance:a,value:c}=o;if(!a||!a.$)throw hn(sn.UNEXPECTED_ERROR);const l=mD(n,a.$),d=Oy(c);return[Reflect.apply(l.t,l,[...Ny(d)]),l]};return{created:(o,a)=>{const[c,l]=e(a);cu&&(o.__i18nWatcher=ei(l.locale,()=>{a.instance&&a.instance.$forceUpdate()})),o.__composer=l,o.textContent=c},unmounted:o=>{cu&&o.__i18nWatcher&&(o.__i18nWatcher(),o.__i18nWatcher=void 0,delete o.__i18nWatcher),o.__composer&&(o.__composer=void 0,delete o.__composer)},beforeUpdate:(o,{value:a})=>{if(o.__composer){const c=o.__composer,l=Oy(a);o.textContent=Reflect.apply(c.t,c,[...Ny(l)])}},getSSRProps:o=>{const[a]=e(o);return{textContent:a}}}}function Oy(n){if(ze(n))return{path:n};if(Yt(n)){if(!("path"in n))throw hn(sn.REQUIRED_VALUE,"path");return n}else throw hn(sn.INVALID_VALUE)}function Ny(n){const{path:e,locale:t,args:i,choice:s,plural:r}=n,o={},a=i||{};return ze(t)&&(o.locale=t),xi(s)&&(o.plural=s),xi(r)&&(o.plural=r),[e,a,o]}function vD(n,e,...t){const i=Yt(t[0])?t[0]:{};(kt(i.globalInstall)?i.globalInstall:!0)&&([Ly.name,"I18nT"].forEach(r=>n.component(r,Ly)),[Dy.name,"I18nN"].forEach(r=>n.component(r,Dy)),[Uy.name,"I18nD"].forEach(r=>n.component(r,Uy))),n.directive("t",gD(e))}const bD=io("global-vue-i18n");function yD(n={}){const e=__VUE_I18N_LEGACY_API__&&kt(n.legacy)?n.legacy:__VUE_I18N_LEGACY_API__,t=kt(n.globalInjection)?n.globalInjection:!0,i=new Map,[s,r]=xD(n,e),o=io("");function a(u){return i.get(u)||null}function c(u,h){i.set(u,h)}function l(u){i.delete(u)}const d={get mode(){return __VUE_I18N_LEGACY_API__&&e?"legacy":"composition"},async install(u,...h){if(u.__VUE_I18N_SYMBOL__=o,u.provide(u.__VUE_I18N_SYMBOL__,d),Yt(h[0])){const m=h[0];d.__composerExtend=m.__composerExtend,d.__vueI18nExtend=m.__vueI18nExtend}let f=null;!e&&t&&(f=_D(u,d.global)),__VUE_I18N_FULL_INSTALL__&&vD(u,d,...h),__VUE_I18N_LEGACY_API__&&e&&u.mixin(dD(r,r.__composer,d));const p=u.unmount;u.unmount=()=>{f&&f(),d.dispose(),p()}},get global(){return r},dispose(){s.stop()},__instances:i,__getInstance:a,__setInstance:c,__deleteInstance:l};return d}function fn(n={}){const e=oc();if(e==null)throw hn(sn.MUST_BE_CALL_SETUP_TOP);if(!e.isCE&&e.appContext.app!=null&&!e.appContext.app.__VUE_I18N_SYMBOL__)throw hn(sn.NOT_INSTALLED);const t=wD(e),i=CD(t),s=cC(e),r=SD(n,s);if(r==="global")return dC(i,n,s),i;if(r==="parent"){let c=$y(t,e,n.__useComponent);return c==null&&(c=i),c}if(r==="isolated"){if(t.mode!=="composition")throw hn(sn.NOT_AVAILABLE_COMPOSITION_IN_LEGACY);const c=t,l=gi({},n),d=$y(t,e);l.__root=d||i;const u=hu(l);return c.__composerExtend&&(u[wa]=c.__composerExtend(u)),lg()&&Ux(()=>{const f=u[wa];f&&(f(),delete u[wa])}),u}const o=t;let a=o.__getInstance(e);if(a==null){const c=gi({},n);"__i18n"in s&&(c.__i18n=s.__i18n),i&&(c.__root=i),a=hu(c),o.__composerExtend&&(a[wa]=o.__composerExtend(a)),TD(o,e,a),o.__setInstance(e,a)}return a}function xD(n,e){const t=ag(),i=__VUE_I18N_LEGACY_API__&&e?t.run(()=>Pm(n)):t.run(()=>hu(n));if(i==null)throw hn(sn.UNEXPECTED_ERROR);return[t,i]}function wD(n){const e=Ro(n.isCE?bD:n.appContext.app.__VUE_I18N_SYMBOL__);if(!e)throw hn(n.isCE?sn.NOT_INSTALLED_WITH_PROVIDE:sn.UNEXPECTED_ERROR);return e}function SD(n,e){return Og(n)?"__i18n"in e?"local":"global":n.useScope?n.useScope:"local"}function CD(n){return n.mode==="composition"?n.global:n.global.__composer}function $y(n,e,t=!1){let i=null;const s=e.root;let r=AD(e,t);for(;r!=null;){const o=n;if(n.mode==="composition")i=o.__getInstance(r);else if(__VUE_I18N_LEGACY_API__){const a=o.__getInstance(r);a!=null&&(i=a.__composer,t&&i&&!i[aC]&&(i=null))}if(i!=null||s===r)break;r=r.parent}return i}function AD(n,e=!1){return n==null?null:e&&n.vnode.ctx||n.parent}function TD(n,e,t){Sn(()=>{},e),Za(()=>{const i=t;n.__deleteInstance(e);const s=i[wa];s&&(s(),delete i[wa])},e)}const ED=["locale","fallbackLocale","availableLocales"],By=["t","rt","d","n","tm","te"];function _D(n,e){const t=Object.create(null);return ED.forEach(s=>{const r=Object.getOwnPropertyDescriptor(e,s);if(!r)throw hn(sn.UNEXPECTED_ERROR);const o=Qt(r.value)?{get(){return r.value.value},set(a){r.value.value=a}}:{get(){return r.get&&r.get()}};Object.defineProperty(t,s,o)}),n.config.globalProperties.$i18n=t,By.forEach(s=>{const r=Object.getOwnPropertyDescriptor(e,s);if(!r||!r.value)throw hn(sn.UNEXPECTED_ERROR);Object.defineProperty(n.config.globalProperties,`$${s}`,r)}),()=>{delete n.config.globalProperties.$i18n,By.forEach(s=>{delete n.config.globalProperties[`$${s}`]})}}const MD=qt({name:"i18n-d",props:gi({value:{type:[Number,Date],required:!0},format:{type:[String,Object]}},zg),setup(n,e){const t=n.i18n||fn({useScope:n.scope,__useComponent:!0});return hC(n,e,iC,(...i)=>t[_m](...i))}}),Uy=MD;oD();BL(yL);UL(OL);VL(EL);if(__INTLIFY_PROD_DEVTOOLS__){const n=zr();n.__INTLIFY__=!0,xL(n.__INTLIFY_DEVTOOLS_GLOBAL_HOOK__)}const PD={resizeTimeline:"Ziehen Sie, um die Höhe der Zeitleiste anzupassen",systems:"System",particlesBones:"Partikel (Knochen)",rootBone:"Wurzelknochen",hudTip:"Radzoom · Klicken Sie mit der linken Maustaste, um die Leinwand zu ziehen",title:"Spine-Partikeleditor - Yeomai"},ID={close:"Schließen",reset:"Zurücksetzen",add:"Hinzufügen",remove:"Entfernen",delete:"Löschen",clear:"Leeren",cancel:"Abbrechen",confirm:"Bestätigen",none:"Keine",enabled:"Aktiviert",disabled:"Deaktiviert",fixed:"Fest",random:"Zufällig",curve:"Kurve",followExport:"Exporteinstellung folgen",linear:"Linear",bezier:"Bézier",above:"Über",below:"Unter",left:"Links",right:"Rechts",seconds:"s",frames:"Frames"},kD={settings:"Einstellungen",undo:"Rückgängig (Ctrl+Z)",pan:"Canvas verschieben (Q)",translate:"Verschieben (W)",rotate:"Drehen (E)",scale:"Skalieren (R)",zoomIn:"Vergrößern",zoomOut:"Verkleinern",fitView:"An Canvas anpassen",toggleGrid:"Raster umschalten",resetView:"Ansicht zurücksetzen",background:"Hintergrund",backgroundSettings:"Hintergrundeinstellungen",changeBackground:"Bild ersetzen",uploadBackground:"Bild hochladen",clearBackground:"Hintergrund löschen",noBackground:"Kein Bild",backgroundX:"X-Versatz des Hintergrundbilds",backgroundY:"Y-Versatz des Hintergrundbilds",backgroundOpacity:"Transparenz des Hintergrundbilds",opacity:"Deckkraft",help:"Hilfe",openHelp:"Hilfe öffnen"},RD={title:"Systemeinstellungen",layout:"Schnittstellenlayout",parameterPanelPosition:"Position des Parameterfelds",panelOnRight:"Das Parameterfeld wird rechts angezeigt",history:"Operationsgeschichte",maxUndo:"Maximale Anzahl Schritte zurück",canvasGuides:"Hilfsdisplay aus Leinwand",emitter:"Startpunkt",bones:"Knochenverbindung",bonePointSize:"Größe der Knochenpunktzeichnung",boneAxisSize:"Zeichnungsgröße der Achse",skinMesh:"enthäutetes Netz",enableTicks:"Häkchen aktivieren",tickFontSize:"Textgröße skalieren",tickWidth:"Dicke der Teilstriche",axisColor:"Achsenfarbe",showAxisLabels:"Skalenwert anzeigen",cacheNote:"Die gesamten Systemeinstellungen werden automatisch im aktuellen Browser gespeichert"},FD={title:"Konfiguration",save:"Konfiguration speichern",saveTitle:"Alle Editorkonfigurationen speichern (Ctrl+S)",load:"Konfiguration laden",loadTitle:"Lokale Editorkonfiguration laden",presets:"Voreinstellungsliste",selectPreset:"Voreinstellung wählen",noPresets:"Keine Voreinstellungen",saved:"Die Konfiguration wurde lokal gespeichert",loading:"Konfiguration wird geladen…",loaded:"Geladen: {name}",presetLoading:"Voreinstellungen werden geladen…",presetLoaded:"Voreinstellung geladen: {name}",presetNamingError:"{message}, bitte überprüfen Sie die Standarddateibenennung",presetTransferTitle:"Voreinstellung laden",presetDownloading:"{file} wird heruntergeladen…",presetParsing:"Standardkonfiguration wird analysiert...",presetRestoring:"Standardressourcen werden analysiert und wiederhergestellt...",presetComplete:"Das Laden der Voreinstellungen ist abgeschlossen",presetListError:"Voreinstellungsliste kann nicht gelesen werden",presetReadError:"Voreinstellung konnte nicht gelesen werden: {file}"},LD={bezierHint:"Ziehen Sie den quadratischen Griff, um den Bogen anzupassen. · Doppelklicken Sie auf eine leere Stelle, um einen neuen zu erstellen. · Doppelklicken Sie auf einen Knoten, um ihn zu löschen",linearHint:"Doppelklicken Sie auf eine leere Stelle, um eine neue zu erstellen. Doppelklicken Sie auf einen Knoten, um ihn zu löschen. Ziehen Sie einen Knoten, um ihn anzupassen.",resetTitle:"Standardkurve wiederherstellen"},DD={addTitle:"Doppelklicken Sie auf das Menüband, um eine Farbmarkierung hinzuzufügen",color:"Farbcode",colorValue:"Farbwert der Farbskala",position:"Position der Farbmarkierung",addMiddle:"Fügen Sie Farbe in der Mitte hinzu",delete:"Aktuelles Farbfeld löschen",hint:"Doppelklicken Sie auf das Farbband, um ein neues hinzuzufügen. · Ziehen Sie die Farbmarkierung, um ihre Position anzupassen. · Doppelklicken Sie auf die Farbmarkierung, um sie zu löschen"},OD={angleOffset:"Winkelversatz",value:"Zahlenwert",lower:"untere Grenze",upper:"Obergrenze",rangeLower:"Untere Bereichsgrenze",rangeUpper:"Oberer Bereich",curveInput:"Kurveneingabe →",direction:"Startrichtung"},ND={title:"Drehpunkt der Karte",zoomOut:"herauszoomen",zoomIn:"vergrößern",expand:"Zoomen Sie auf Vollbildbetrieb",interaction:"Klicken/Ziehen mit der linken Maustaste, um den Drehpunkt festzulegen · Rechtsklick zum Ziehen der Leinwand · Scrollrad zum Zoomen",previewAlt:"Pivot-Punkt-Vorschau",noImage:"Kein Bild ausgewählt",resetCenter:"Neupositionierung in der Mitte (50 %, 50 %)",coordinates:"Achspunktkoordinaten (%)",rotationTest:"Achsenrotationstest",static:"Trotzdem",spin:"Drehung",swing:"Swing",rotationAlt:"Rotationstest",topLeft:"oben links",top:"Ganz oben",topRight:"oben rechts",left:"Rechts links",center:"Mitte",right:"Rechts",bottomLeft:"unten links",bottom:"Direkt unten",bottomRight:"unten rechts"},$D={chooseSequence:"Wählen Sie Sequenzrahmenbilder aus",chooseLocal:"Lokales Bild auswählen",subfolder:"Unterordner",name:"Name",restore:"Stellen Sie {name} wieder her",deleteResource:"Bildressourcen löschen",imageMode:"Bildmodus",fixed:"Einzelbild",sequence:"Sequenz",playbackMode:"Wiedergabemodus",onceHide:"Einmal, am Ende ausblenden",onceHold:"Einmal, letztes Bild halten",loopForward:"Vorwärts-Schleife",loopReverse:"Rückwärts-Schleife",playbackFps:"Bildrate der Wiedergabe",chooseSequenceMulti:"Sequenzbilder auswählen (Mehrfachauswahl)",weight:"Gewicht %",unlockWeight:"Proportionssperre entsperren",lockWeight:"Sperren Sie das aktuelle Verhältnis",pivot:"Textur-Pivot",collapsePivot:"Einstellung des Drehpunkts einklappen",expandPivot:"Erweitern Sie die Drehpunktanpassung",pivotModal:"Texturrotationsachsenpunkt, große Bildverfeinerung",pivotModalDesc:"Klicken oder ziehen Sie irgendwo auf der Karte unten, um das Rotations-/Schwingzentrum der Partikel genau festzulegen.",pivotZoomHint:"Unterstützt 100 % ~ 400 % Vergrößerung, präzises Zielen auf die Spitze oder Wurzel:",confirmPivot:"Drehpunkt ermitteln und speichern",noSequence:"Kein Sequenzbild ausgewählt",firstFrame:"Rahmen 1",firstImage:"erstes Bild",lastImage:"letztes Bild",pivotOn:"Geöffnet: X {x}% | Y {y}%",pivotOff:"Nicht aktiviert, die Standardeinstellung liegt etwa in der Bildmitte (50 %, 50 %).",pivotCustom:"Der Drehpunkt wurde angepasst: X {x}% | Y {y}%",frameCountOne:"1 Rahmen · {name}",frameCountMany:"Rahmen {count} · {first} → {last}",sequenceSelected:"Der Frame {count} wurde ausgewählt und in der Reihenfolge {first}-{last} abgespielt"},BD={play:"Spielen(D)",pause:"Pause (D)",toStart:"Gehe zurück zum ersten Frame (S)",previous:"vorherigen Frame",next:"nächsten Frame",toEnd:"Zum letzten Bild wechseln",continuousLoop:"Dauerhaft in Schleife abspielen",abLoop:"Unabhängige A/B-Bereichsschleife",abLoopShort:"AB-Schleife",abRange:"AB Zyklusintervall",playbackStart:"Benutzerdefiniertes Startbild für die Wiedergabe",playbackEnd:"Benutzerdefiniertes Wiedergabe-Endbild",startFrame:"Startbild abspielen",endFrame:"Endbild abspielen",frame:"rahmen",emission:"Emission",particleLife:"Aktive Partikel",spineAnimation:"Spine-Animation",ownerAnimation:"Zugehörige Animation",setOwnerAnimation:"Legen Sie die Animation fest, zu der das aktuelle Partikelsystem gehört",chooseOwnerAnimation:"Wählen Sie die Animation aus",animationName:"Animationsname",renameAnimation:"Aktuelle Animation umbenennen",rename:"Umbenennen",newAnimation:"+ Neu",keepOneAnimation:"Mindestens eine Animation muss beibehalten werden",spinePreview:"Spine Vorschauanimation",noSpineAnimation:"Keine Spine-Animation verfügbar",none:"keiner",systemName:"System {index}",dragLoopDuration:"Dauer des Drag-Loop-Segments",dragEmissionDuration:"Drag-Dauer",dragSpineStart:"Ziehen Sie, um die Startzeit der Animation anzupassen",noAnimationData:"Derzeit sind keine Animationsdaten zum Anzeigen vorhanden.",animationNameEmpty:"Der Animationsname darf nicht leer sein",animationNameDuplicate:"Animationsnamen können nicht wiederholt werden",animationRenameFailed:"Der Animationsname kann nicht geändert werden",zoomIn:"vergrößern",zoomOut:"herauszoomen",zoomFit:"Mäßig",frameStatus:"Frame {current} / {total}"},UD={title:"Emissionsmodus",reset:"Sendemodusparameter zurücksetzen",stream:"Kontinuierlich",burst:"Burst",normalStream:"Normaler Stream",loopStream:"Loop-Stream",rate:"Emissionsrate",duration:"Emissionsdauer",loopDuration:"Startdauer (f)",generateStart:"Generieren Sie eine Startschleifenanimation",generateEnd:"Generieren Sie eine Endloop-Animation",customDuration:"Dauer angeben",auto:"Automatisch {frames}f",startLoopDuration:"Dauer des Schleifensegments starten",endLoopDuration:"Dauer des Endschleifensegments",loopWarning:"Der Schleifenpersistenzmodus unterstützt keine Knochenverfolgung und Pfadverfolgung; Die Partikelverfolgungseinstellungen werden beim Betreten oder Verlassen auf die Standardwerte zurückgesetzt.",burstCount:"Menge pro Burst",delay:"Verzögerung",shapeTitle:"Emitterform",shapeReset:"Setzen Sie die Parameter der Emitterform zurück",shape:"Form",point:"Punkt",circle:"Kreis",rect:"Rechteck",cone:"Kegel",path:"Pfad",innerDiameter:"Innendurchmesser",outerDiameter:"Außendurchmesser",innerRadius:"Innenradius",outerRadius:"Außenradius",coneDirection:"Kegelausrichtung",coneAngle:"Konischer Öffnungswinkel",innerWidth:"Innenweite",innerHeight:"Hoch drinnen",outerWidth:"Außenbreite",outerHeight:"Extra hoch",selectPath:"Pfad auswählen",noPath:"Kein Pfad (Punktemission)",birthDistribution:"Geburtenverteilung",evenDistribution:"Gleichmäßige feste Verteilung",randomDistribution:"Zufallsverteilung",emissionAngle:"Startwinkel",radial:"Radial (Mitte nach außen)",pathNormal:"senkrecht zum Pfad",pathTangent:"entlang der Wegrichtung",fixedAngle:"fester Winkel",baseAngle:"Basiswinkel",randomRange:"zufälliger Bereich",showShape:"Form zeigen"},VD={title:"Partikeleigenschaften",reset:"Partikelattributparameter zurücksetzen",initialParams:"Initialwerte",initialLife:"anfänglicher Lebenszyklus",randomSample:"Zufallsauswahl →",initialSpeed:"Anfangsgeschwindigkeit",initialScale:"anfängliche Skalierung",uniform:"vereinheitlicht",separateXY:"XY-Trennung",scaleX:"Zoom X",scaleY:"Zoom Y",initialRotation:"anfängliche Rotation",lifecycleTitle:"Änderung über die Lebensdauer",speedOverLife:"Lebenszyklusgeschwindigkeit",speedMultiplier:"Geschwindigkeitsmultiplikator",lifeTo:"Lebenszyklus →",scaleOverLife:"Skalierung während des Lebenszyklus",scaleMultiplier:"Zoomverhältnis",multiplierX:"Vergrößerung",multiplierY:"Vergrößerung Y",rotationOverLife:"Während des Lebenszyklus rotieren",rotationSpeed:"Rotationsgeschwindigkeit"},XD={title:"Aussehen und Ressourcen",reset:"Aussehen und Ressourcenparameter zurücksetzen",opacity:"Deckkraft",curveMode:"Kurvenmodus",transparent:"0 (transparent)",opaque:"1 (undurchsichtig)",renderLayer:"Renderebene (Spine-Slot)",top:"oberstes Niveau",spineSlot:"Spine-Steckplatz",selectSpine:"Bitte wählen Sie Spine aus",noSpine:"Nicht verfügbar Spine",noSlot:"Noch kein Slot ausgewählt",reselect:"Neu auswählen",selectSlot:"Steckplatz auswählen",searchSlots:"Nach Steckplatz- oder Zubehörnamen suchen…",searchSlotsAria:"Suchplätze",emptySlot:"Leerer Steckplatz",noMatchingSlots:"Kein passender Steckplatz",above:"oben auf diesem Slot-Bild",below:"unter diesem Slot-Bild",followAttachment:"Ein- und Ausblenden mit Slot-Zubehör",previewOnly:"Das Anpassen der Anzeigeebene wirkt sich nur auf die Editor-Vorschau aus und hat keinen Einfluss auf die exportierten Daten.",imageResources:"Bildressourcen",addImage:"Bildressourcen hinzufügen",scale:"Zoom",color:"Farbe",fixedColor:"feste Farbe",randomColor:"zufällige Farbe",lifetime:"Lebenszyklus",normal:"Normal",add:"Addieren",multiply:"Multiplizieren",screen:"Bildschirm",fixedColorValue:"fester Farbwert",randomColorHint:"Jedes Teilchen wählt bei seiner Geburt zufällig eine Farbe aus dem Band aus und bleibt während seines Lebenszyklus unverändert.",independentAlpha:"Unabhängige Deckkraft",off:"Aus"},YD={slotLabelAbove:"{spine} / {slot} · Bild oben",slotLabelBelow:"{spine} / {slot} · Unter dem Bild",resolvedAbove:"Über dem {slot}-Bild und unter seinem Slot gerendert",resolvedBetween:"Gerendert zwischen {previous} und {slot}",warningNoSpine:"Es ist kein Spine geladen und die Partikel werden vorübergehend oben angezeigt.",warningNoSelection:"Spine wurde noch nicht ausgewählt und die Partikel werden vorübergehend oben angezeigt.",warningMissingSpine:"Das Ziel Spine existiert nicht und die Partikel werden vorübergehend oben angezeigt.",warningNotReady:"Das Ziel Spine ist nicht bereit und die Partikel werden vorübergehend oben angezeigt.",warningMissingSlot:"Der Zielplatz existiert nicht (die Ressource wurde möglicherweise ersetzt) ​​und die Partikel werden vorübergehend oben angezeigt.",warningFirstSlot:"Dies ist der erste Slot und kann nicht darunter angezeigt werden, die Partikel werden vorübergehend oben angezeigt."},zD={completed:"Vollendet",failed:"Der Vorgang ist fehlgeschlagen"},jD={title:"Szenenobjekte",addParticle:"Partikelsystem hinzufügen",addParticleShort:"+Teilchen",addCollider:"Collider hinzufügen",addColliderShort:"+Kollision",addPath:"Pfad hinzufügen",addPathShort:"+ Pfad",addSpine:"Fügen Sie Spine hinzu",copyTitle:"Kopieren Sie das aktuell ausgewählte Szenenobjekt",showParticle:"Partikelsystem anzeigen",hideParticle:"Partikelsystem ausblenden",showCollider:"Collider anzeigen",hideCollider:"Collider ausblenden",showPath:"Pfad anzeigen",hidePath:"Pfad ausblenden",showSpine:"Anzeige Spine",hideSpine:"Spine ausblenden",particle:"Partikel",subEmitter:"Sub-Emitter",collision:"Kollision",path:"Pfad",deleteParticle:"Partikelsystem löschen",deleteCollider:"Collider löschen",deletePath:"Pfad löschen",deleteSpine:"Löschen Sie Spine",empty:"Es sind noch keine Objekte in der Szene vorhanden",name:"Name",positionX:"X-Position",positionY:"Y-Position",offsetX:"X-Versatz",offsetY:"Y-Versatz",rotation:"Drehung",scaleX:"X-Skalierung",scaleY:"Y-Skalierung",seed:"Zufallsseed",seedTitle:"Steuern Sie alle Zufallsattribute, die Ressourcenauswahl und die Zufallsstichprobe von Modifikatoren im Partikelsystem",randomizeSeed:"Generieren Sie einen neuen globalen Zufallsstartwert",seedHint:"Steuern Sie die anfänglichen Zufallsparameter, die Ressourcenauswahl und die Modifikator-Zufallsstichprobe. Der gleiche Samen kann den gleichen Effekt hervorrufen",colliderTitle:"Collider-Eigenschaften",colliderName:"Collider-Name",type:"Typ",circle:"runden",ellipse:"Oval",rect:"Rechteck",polygon:"Polygon",custom:"Anpassen",enabled:"aktivieren",xPosition:"X-Position",yPosition:"Y-Position",scaleXShort:"X-Skalierung",scaleYShort:"Y-Skalierung",radius:"Radius",radiusX:"X-Radius",radiusY:"Y-Radius",width:"Breite",height:"hoch",sides:"Anzahl der Seiten",collisionResponse:"Crash-Reaktion",physics:"Physik (Sprung/Reibung)",pause:"Pause (Stopp)",destroy:"Verschwinden (sofort zerstören)",elasticity:"Elastizität (0-1)",friction:"Reibung (0-1)",followPath:"Folgen Sie dem Weg",targetPath:"Zielpfad",notSelected:"(nicht ausgewählt)",moveDuration:"Bewegungsdauer (Sekunden)",followDirection:"Richtung entlang des Pfades",moveProgressCurve:"Bewegliche Fortschrittskurve",moveProgressHelp:"Horizontale Achse: Echtzeit/Bewegungsdauer; vertikale Achse: Pfadfortschritt (0=Startpunkt → 1=Endpunkt)",pathTitle:"Pfadattribut",pathName:"Pfadname",closedPath:"geschlossener Weg",pathColor:"Pfadfarbe",pathHelp:"Bedienungsanleitung:",pathHelpItems:"Doppelklicken Sie auf den leeren Bereich/die leere Kurve: Erstellen Sie einen neuen Ankerpunkt, doppelklicken Sie auf den Ankerpunkt: löschen Sie den Knoten, doppelklicken Sie ein zweites Mal und ziehen Sie: erstellen Sie einen neuen und ziehen Sie den Griff heraus, ziehen Sie den Ankerpunkt, um die Position zu verschieben, ziehen Sie den Griff, um die Kurve anzupassen, Umschalt + Ziehgriff: vollständig symmetrisch auf beiden Seiten, Alt + Ziehgriff: unabhängige Steuerung einer Seite, Ctrl + Klick/Rahmenauswahl: ausgewählte Knoten hinzufügen, Alt+Klick/Rahmenauswahl: ausgewählte Knoten subtrahieren Knoten, Alt+Klick in den leeren Bereich: Löschen Sie alle Auswahlen, wählen Sie mehrere Knoten aus und ziehen Sie sie als Ganzes",applyPresetShape:"Wenden Sie eine voreingestellte Form an",choosePreset:"Wählen Sie eine Voreinstellung...",square:"Quadrat",star:"Sternform",applyPreset:"Voreinstellung anwenden",clearAnchors:"klarer Ankerpunkt",panelHint:"Verwenden Sie die Schaltfläche in der oberen rechten Ecke, um ein Szenenobjekt zu erstellen"},HD={title:"Modifikatoren",reset:"Modifikatorparameter zurücksetzen",damping:"Dämpfung",enableNoise:"Bewegungsrauschen aktivieren",strength:"Stärke",noiseRange:"Schwankungsbreite",noiseSpeed:"Zeitliche Durchflussrate",noiseHint:"Intensitätssteuerung beeinflusst den Anteil · Schwankungsbereich steuert die maximale Abweichung · Zeitfluss steuert die Änderungsgeschwindigkeit",enableGravity:"Schwerkraft aktivieren",gravityStrength:"Schwerkraftstärke",strengthMin:"Stärke min",strengthMax:"Stärke max",direction:"Richtung",gravityOverLife:"Schwerkraft während des Lebenszyklus",windOverLife:"Lebenszyklus Wind",axisStrength:"Vertikale Achse: Intensität 0~1",directionHint:"0° nach rechts · -90° nach unten · Negative Intensität kehrt die Richtung um",enableWind:"Wind aktivieren",windStrength:"Windstärke",enableForceField:"Kraftfeld aktivieren",centerX:"Mitte X",centerY:"Zentrum Y",forceStrength:"Kraftfeldstärke",forceRadius:"Kraftfeldradius",falloffMode:"Decay-Modus",constant:"Konstant (die Geschwindigkeit ändert sich innerhalb des Bereichs nicht)",linearFalloff:"Linearer Abfall (Kante ist 0)",inverseFalloff:"Umgekehrt proportional zur Entfernung (am stärksten in der Mitte)",forceHint:"Positive Zahlen ziehen sich zur Mitte hin an, negative Zahlen stoßen sich nach außen ab und der Kraftfeldkreis kann innerhalb der Leinwand gezogen werden.",showShape:"Form zeigen",enableVortex:"Wirbel aktivieren",vortexHint:"Positive Zahlen gegen den Uhrzeigersinn · Negative Zahlen im Uhrzeigersinn",enableAttraction:"Anziehung aktivieren",attractionX:"Adsorptionspunkt X",attractionY:"Adsorptionspunkt Y",attractionRadius:"Adsorptionsradius",attractionDuration:"Adsorptionszeit",delay:"Verzögerungszeit",delayMode:"Verzögerungsmodus",globalTime:"einheitliche Zeit",particleLife:"Das Leben einzelner Teilchen",attractionPath:"Adsorptionsmethode",straight:"Gerade",attractionHint:"Nach einer Verzögerung beginnt die Adsorption an der aktuellen Position. Wenn es den roten Bereich erreicht, stirbt es ab. Der Adsorptionskreis kann innerhalb der Leinwand gezogen werden.",enableTrail:"Schweif aktivieren",trailImages:"Nachgestellte unabhängige Bilder",addTrailImage:"Fügen Sie nachgestellte Bildressourcen hinzu",trailRotation:"drehen",trailBones:"Anzahl der nachlaufenden Knochen",trailRatio:"Trailing-Verhältnis (%)",trailLength:"Nachlauflänge",randomRange:"zufälliger Bereich",lengthRatio:"Längenverhältnis (%)",lengthMin:"Mindestlänge (%)",lengthMax:"Maximale Länge (%)",trailWidth:"Nachlaufbreite",widthRatio:"Breitenverhältnis (%)",widthMin:"Mindestbreite (%)",widthMax:"Maximale Breite (%)",widthScale:"Breitenskalierung",followParticle:"Teilchen folgen",lifeLengthCurve:"Lebenszykluslängenkurve",shapeCurve:"Formkurve (Kopf → Schwanzbreite)",colorMode:"Farbmodus",blendMode:"Mischmodus",fixedColor:"feste Farbe",alphaMode:"Transparenzmodus",opacity:"Transparenz",gridRows:"Anzahl der Rasterzeilen",gridCols:"Anzahl der Rasterspalten",trailHint:"Jedes Partikel generiert im Verhältnis zu den Ressourcen eine Reihe von Geschwister-Trailing-Bones. Die zufällige Länge und Breite werden bei der Geburt des Partikels bestimmt, und derselbe Samen kann stabil reproduziert werden",enableFollow:"Emitter-Verfolgung aktivieren",followMode:"Folgemodus",noFollow:"keiner",followPath:"Folge dem Weg",selectedBone:"ausgewählte Knochen",emitterAngleMode:"Senderwinkelmodus",fixedAngle:"fester Winkel",followMoveDirection:"Folgen Sie der Bewegungsrichtung",moveProgressCurve:"Bewegungsfortschrittskurve (0→1)",moveDuration:"Bewegungsdauer (s)",followSpace:"Folgen Sie dem Raum",localSpace:"Lokaler Raum (GEN-Bewegung)",worldSpace:"Weltraum (Partikelerzeugungspunktbewegung)",moveDirection:"Bewegungsrichtung",forward:"Vorwärts (Startpunkt → Endpunkt)",reverse:"Umkehren (Endpunkt → Startpunkt)",followOffset:"Offset-Startpunkt (0-1)",followSpaceHint:"Der lokale Raum bewegt den gesamten Emitter; Der Weltraum verschiebt nur den Entstehungspunkt neuer Partikel und die geborenen Partikel bleiben an der Weltposition.",followTarget:"Folgen Sie dem Ziel:",noValidBone:"Es wurde noch kein gültiger Bone gebunden. Bitte wählen Sie zuerst den Bone im Spine-Hierarchiebaum aus.",rebind:"neu binden",bind:"Bindung",selectedBoneLabel:"Aktuell ausgewählter Knochen:",boneLocalSpace:"Lokaler Raum (bewegt sich mit Knochen)",boneWorldSpace:"Weltraum (Partikel behalten ihre Position, nachdem sie erzeugt wurden)",offsetX:"Verschiebungsoffset X",offsetY:"Verschiebungsoffset Y",rotationOffset:"Rotationsversatz",scaleOffsetX:"Skalierungsversatz X",scaleOffsetY:"Skalenversatz Y",boneFollowHint:"Der Emitter folgt nur der Position des ausgewählten Spine-Bones und erbt nicht die Rotation oder Skalierung von Spine; Die Partikeltransformation verwendet die eigenen Parameter und den oberen Offset des Partikelsystems.",enableCollision:"Kollision aktivieren",collisionObjects:"Beteiligte Kollisionsobjekte",colliderDisabled:"{name} (Collider deaktiviert)",clearCollider:"Kollisionsobjekt löschen {name}",addCollider:"Szenenkollisionsobjekte hinzufügen",noAvailableColliders:"Es müssen keine Kollisionsobjekte hinzugefügt werden",noCollidersSelected:"Es ist kein Kollisionsobjekt ausgewählt und die aktuellen Partikel kollidieren nicht.",available:"Verfügbar",disabled:"Deaktiviert",collisionHint:"Nur hinzugefügte und aktivierte Szenenkollisionsobjekte nehmen an der Kollision des aktuellen Partikelsystems teil.",enableSubEmitter:"Sub-Emitter aktivieren",triggerTiming:"Wählen Sie die Triggerzeit",birth:"geboren",death:"sterben",collision:"Kollision",chooseTarget:"Zielpartikelsystem auswählen",noTarget:"Keine (Partikelsystem)",deleteSubEmitter:"Löschen Sie diesen Sub-Emitter",probability:"Emissionswahrscheinlichkeit",collisionLimit:"Kollisionsgrenze",inherit:"erben",colorInheritMode:"Farbvererbungsmethode",add:"Hinzufügen",replace:"Abdeckung",addSubEmitter:"+ Neuer Sub-Emitter hinzugefügt",inheritNone:"Keine (Standard)",inheritAll:"Alle Eigenschaften",inheritColor:"Farbe",inheritScale:"Größe",inheritRotation:"drehen",inheritLife:"Lebenszyklus"},GD={title:"Spine-Eigenschaften",name:"Spine-Name",xPosition:"X-Position",yPosition:"Y-Position",rotation:"Drehung",scaleX:"X-Skalierung",scaleY:"Y-Skalierung",startTime:"Startzeit",resources:"Spine-Ressourcen",chooseFolder:"Ordner auswählen und laden",folderHint:"Lesen Sie JSON / SKEL, Atlas und alle Texturen in einem Ordner gleichzeitig; Ressourcen können unten noch einzeln ausgetauscht werden.",choose:"wählen",chooseMultiple:"Auswählen (Mehrfachauswahl)",loading:"Laden…",load:"↧ Laden",clear:"Klar",supportNote:"Unterstützt Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Laden bei Bedarf, wenn die entsprechende Version ausgeführt wird · Lokal offline",currentResource:"Aktuelle Ressource {version}",animations:"Spine-Animationen",noAnimations:"Keine Animation verfügbar",timelineAnimation:"Spielen Sie die Animation auf der Timeline ab",no:"keiner",hierarchy:"Hierarchie",clearBoneTitle:"Klicken Sie, um die Knochenauswahl zu löschen",noBoneTitle:"Derzeit sind keine Knochen ausgewählt",clearBone:"Ausgewählte Knochen löschen: {name}",currentBone:"Aktuelles Skelett:",clearSlotTitle:"Klicken Sie hier, um die Slot-Auswahl zu löschen",noSlotTitle:"Derzeit ist kein Steckplatz ausgewählt",clearSlot:"Ausgewählten Steckplatz löschen: {name}",currentSlot:"Aktueller Slot:",notSelected:"Nicht ausgewählt",expandAll:"Alles erweitern",collapseAll:"Alles einklappen",bones:"Skeleton",slots:"Slot",notLoaded:"Nicht geladen Spine",searchBones:"Suche nach Knochen",searchBonesPlaceholder:"Knochennamen suchen…",clearSearch:"Suche löschen",clearBoneSearch:"Klare Knochensuche",noMatchingBones:"Kein passender Knochen gefunden",expandChildren:"Untergeordnete Knochen erweitern",collapseChildren:"Kinderknochen kollabieren lassen",notLoadedSlots:"Spine-Steckplatz nicht geladen",searchSlots:"Suchplätze",searchSlotsPlaceholder:"Nach Steckplatz- oder Zubehörnamen suchen…",clearSlotSearch:"Slot-Suche löschen",noMatchingSlots:"Kein passender Steckplatz gefunden",slotTitle:"{name} (Skelett: {bone}, Anhang: {attachment})",empty:"null",textureSummary:"{count} Zhang: {names}",textureImages:"Texturbilder",missingFolderAssets:"Der ausgewählte Ordner fehlt: {missing}",chooseAssets:"Bitte wählen Sie nacheinander die Daten Spine, Atlas und alle Texturbilder aus"},WD={title:"Hilfe",subtitle:"Schneller Einstieg vom Erstellen von Partikeln bis zum Speichern und Exportieren",close:"Anweisungen schließen",closeShort:"Schließen (Esc)",quickStart:"Schnellstart",stepCreate:"Erstellen Sie ein Objekt: Verwenden Sie +Particles / +Collision / +Path / +Spine im „Szenenobjekt“ auf der linken Seite, um ein Szenenobjekt hinzuzufügen.",stepEdit:"Partikel bearbeiten: Wählen Sie das Partikelsystem aus und passen Sie „Emissionsmodus → Emitterform → Partikeleigenschaften → Aussehen und Ressourcen → Modifikator“ an.",stepPreview:"Überprüfen Sie den Effekt: Die untere Timeline kann Bild für Bild abgespielt, angehalten oder verschoben werden. Es wird automatisch neu berechnet, nachdem die Parameter geändert wurden.",stepExport:"Speichern und exportieren: Benutzen Sie „Konfiguration speichern“, um das Projekt beizubehalten; „Export Spine Json / images package / .spine package“, um das fertige Produkt auszugeben.",quickNote:"„Zurücksetzen“ auf der rechten Seite des Titels jeder Modulgruppe kann die Standardparameter der Gruppe wiederherstellen; Die Systemeinstellungen werden automatisch im aktuellen Browser gespeichert.",commonOps:"Häufige Aktionen",eye:"kleine Augen",eyeDesc:"Objekte einzeln ein-/ausblenden; Verborgene Partikelsysteme werden nicht exportiert.",copyDesc:"Kopiert das aktuell ausgewählte Objekt vollständig, um den Vergleich verschiedener Parameter zu erleichtern.",backgroundDesc:"Laden Sie das Referenzbild hoch und passen Sie Position und Transparenz nur für die Leinwandvorschau an.",settingsDesc:"Das Layout der Verwaltungsoberfläche, die Zusatzanzeige, der Maßstab usw. werden automatisch im Browser gespeichert.",undoDesc:"Ctrl+Z fährt einen Schritt zurück; Die maximale Schrittanzahl kann in den Systemeinstellungen angepasst werden.",spineBoneDesc:"Suchen und wählen Sie einen Knochen im Hierarchiebaum aus, der vom Partikelemitter zum Folgen verwendet werden kann.",shortcuts:"Tastenkürzel",undoShortcut:"Machen Sie den vorherigen Schritt rückgängig",saveShortcut:"Konfiguration speichern",panShortcut:"Leinwand ziehen",translateShortcut:"Verdrängungswerkzeug",rotateShortcut:"Rotationswerkzeug",scaleShortcut:"Zoom-Tool",playShortcut:"abspielen/pausieren",startShortcut:"Gehen Sie zurück zum ersten Bild",shortcutNote:"Q/W/E/R müssen zuerst auf die Leinwand klicken; Wenn sich der Cursor im Eingabefeld befindet, wird die Einzeltastenkombination nicht ausgelöst.",modules:"Modulhandbuch",configTitle:"Konfigurationsmanagement",saveConfigDesc:"Speichern Sie alle aktuellen Szenenobjekte und Parameter als Projekt-JSON-Dateien (Ctrl+S wird auch unterstützt).",loadConfigDesc:"Wählen Sie die lokale Konfigurationsdatei aus, um das gesamte Projekt wiederherzustellen.",presetDesc:"Wählen Sie im Dropdown-Menü eine Standard-Schnellanwendung aus. Klicken Sie auf das Dropdown-Menü, um die Liste zu aktualisieren.",configScope:"Umfang",configScopeDesc:"Die Konfiguration enthält Objekte und Parameter; Schnittstellen- und Systemeinstellungen werden separat im Browser gespeichert.",sceneTitle:"Szenenobjekt",particleDesc:"Kernobjekt. Position, Offset, Drehung, Skalierung und Zufallsstartwert können eingestellt werden; Der gleiche Samen kann den gleichen Effekt hervorrufen.",colliderDesc:"Kreis/Ellipse/Rechteck/Polygon/benutzerdefiniert, unterstützt physisches Abprallen, Anhalten, Zerstören und Bewegung entlang des Pfades.",pathDesc:"Bezier-Pfad mit Unterstützung für Ankerpunkte, Steuerpunkte, Abschluss, Farbe und voreingestellte Formen.",spineDesc:"Laden Sie Spine-Daten, Atlas und Texturen, durchsuchen Sie Bones und Slots und folgen Sie den Emittern.",sceneCommonDesc:"Objekte können unabhängig voneinander angezeigt und kopiert werden; Verborgene Partikelsysteme werden nicht exportiert.",emissionDesc:"Kontinuierliches Feuer, Feuerstoß, Verzögerung und dreistufige Start-/Schleifen-/End-Schleifendauer.",burstDesc:"Gibt eine bestimmte Anzahl von Partikeln auf einmal ab.",delayDesc:"Die Wartezeit bis zum Beginn der Emission, entsprechend dem linken Ende des Partikelbalkens.",loopNote:"Die Schleifenpersistenz unterstützt Knochen- und Pfadverfolgung nicht und die folgenden Einstellungen werden beim Umschalten wiederhergestellt.",shapeDesc:"Punkt-, Kreis-, Rechteck-, Kegel- oder Pfad-Spawn-Bereich. Kreise/Kegel unterstützen Innen- und Außenradien und Rechtecke unterstützen Innen- und Außenbreite und -höhe.",angleDesc:"Fest, zufällig, radial, Pfadnormale oder Pfadtangente.",initialDesc:"Lebenszyklus, Geschwindigkeit, Skalierung und Rotationsunterstützung sind fest, zufällig, Kurve und Rotation können der Startrichtung folgen.",overLifeDesc:"Geschwindigkeitsvergrößerung, Zoomvergrößerung und Rotationsgeschwindigkeit können über die Lebenszykluskurve gesteuert werden.",alphaDesc:"Transparenz unterstützt fest oder gekrümmt; Der Kurvenmodus kann abgeleitet, linear oder Bezier folgen.",imageDesc:"Einzelbild oder Sequenzrahmen, Multibild-Gewichtungs-Randomisierung, Drehpunkt, Farbe, Mischmodus und unabhängige Transparenz.",sequenceDesc:"Zu den Wiedergabemethoden gehören einmaliges Ausblenden, einmaliges Einfrieren, Vorwärtsschleife und Rückwärtsschleife.",noiseDesc:"Erzeugen Sie Jitter-Spuren und steuern Sie Intensität, Reichweite und Geschwindigkeit.",gravityDesc:"Schwerkraft-, Wind- und Lebenszyklusintensitätskurven.",forceDesc:"Globale Kraftfelder, Wirbel, Adsorption und Kollisionen.",trailDesc:"Unabhängige nachgestellte Assets, Knochenanzahl, Länge, Breite, Form, Farbe und Transparenzkurven.",followDesc:"Der Emitter kann einem Pfad oder Spine Bone folgen.",collisionDesc:"Wählen Sie Szenenkollisionsobjekte und Partikelkollisionsreaktionen aus.",exportDesc:"Legen Sie den Bildpfad, die Spine-Version, die Keyframe-Kurve, FPS, Integer-Frames, den Bone-Pool und die leere Animation fest.",exportButtonsDesc:"Sie können Spine JSON, Bilder ZIP exportieren oder .spine-Projekte über den Connector generieren.",connectorTitle:"Gebrauchsanweisung für den Spine-Stecker",connectorIntro:"Der Connector übermittelt JSON und von der Webseite generierte Bilder an Spine, das auf dem lokalen Computer installiert und aktiviert wurde, und konvertiert sie in bearbeitbare .spine-Projekte.",prerequisite:"Frontload",prerequisiteDesc:"Auf dem Computer ist Spine installiert und aktiviert, und der Desktop-Connector wurde gestartet.",download:"herunterladen",webSide:"Webseite",webSideDesc:"Nachdem „Connector verfügbar · Spine ist bereit“ angezeigt wird, klicken Sie auf „.spine-Paket exportieren“.",authorization:"erste Genehmigung",authorizationDesc:"Bei der ersten Verbindung muss die Quelle der Website überprüft und einmal zugelassen werden; Dieses Gerät speichert die Autorisierungs-Whitelist.",pathSetup:"Pfadeinstellungen",pathSetupDesc:"Der Connector erkennt Spine automatisch. Wenn es nicht gefunden werden kann, können Sie den Anwendungspfad manuell angeben.",downloadResult:"Ergebnisse herunterladen",downloadResultDesc:"Holen Sie sich das ZIP-Paket, das das .spine-Projekt und das Bildverzeichnis enthält.",version:"Version",versionDesc:"Der Stecker passt automatisch zu Spine 3.8~4.3 entsprechend der JSON-Version.",security:"Sicherheit",securityDesc:"Hören Sie nur auf die lokale Adresse, die Autorisierung wird im Connector gespeichert und die temporären Dateien werden nach der Konvertierung bereinigt.",differenceTitle:"Was ist der Unterschied zwischen Konfigurieren und Exportieren?",differenceDesc:"„Konfiguration speichern“ speichert alle editierbaren Objekte und Parameter; „Export Spine Json“ exportiert nur das angezeigte Partikelsystem und backt die Kollisions-, Folge-, Nachlauf- und Sub-Emitter-Ergebnisse in unabhängige Animationsdaten."},qD={confirmLoopFollowEnter:"Nach dem Aufrufen des kontinuierlichen Schleifenmodus werden die Partikelverfolgungseinstellungen ungültig und auf den Standardwert zurückgesetzt. Weitermachen?",confirmLoopFollowExit:"Nach dem Verlassen des Schleifenpersistenzmodus werden die Partikelverfolgungseinstellungen ungültig und auf ihre Standardwerte zurückgesetzt. Weitermachen?",invalidJson:"Die Konfigurationsdatei ist ungültig JSON",invalidConfigFormat:"Nicht das Editorprofil SpineParticle",unsupportedConfigVersion:"Konfigurationsversion noch nicht unterstützt: {version}",missingScene:"In der Konfigurationsdatei fehlen vollständige Szenendaten",missingEmbeddedSpine:"Die Konfiguration enthält keine wiederverwendbaren Spine-Originalressourcen",chooseJsonConfig:"Bitte wählen Sie eine .json-Konfigurationsdatei aus",settingsInvalidJson:"Der Systemeinstellungscache ist ungültig JSON",settingsFormat:"Nicht SpineParticle Editor-Systemeinstellungscache",settingsVersion:"Die Systemkonfigurationsversion wird noch nicht unterstützt: {version}",settingsMissing:"Im Systemeinstellungscache fehlen Einstellungen",noExportableImages:"Für das aktuell sichtbare Partikelsystem sind keine exportierbaren Bilder vorhanden",invalidZipPath:"ZIP Ungültiger Dateipfad",spineFileType:"Spine-Daten unterstützen nur .json oder .skel",atlasFileType:"Atlas-Dateien unterstützen nur .atlas",chooseTexture:"Bitte wählen Sie mindestens ein Texturbild aus",binaryParseFailed:"Binäres Parsen von Spine ist fehlgeschlagen (4.3: {v43}; alte Version: {v42})",invalidSpineJson:"Spine JSON Ungültiges Dateiformat",unsupportedSpineJsonVersion:"Spine JSON-Version wird nicht unterstützt, nur {versions} wird unterstützt",unsupportedSpineDataVersion:"Die Datenversion Spine wird nicht unterstützt, nur {versions} wird unterstützt",embeddedReadFailed:"Die eingebettete Spine-Datei kann nicht gelesen werden: {name}",missingImageWarning:"Bild „{file}“ fehlt oder hat unlesbare Abmessungen, Pfad bleibt erhalten.",missingTrailImageWarning:"Das nachgestellte Bild „{file}“ fehlt und der Pfad wurde beibehalten.",emptyCacheWarning:"Für „{name}“ ist kein Framebuffer verfügbar.",readExportImageFailed:"Exportiertes Bild kann nicht gelesen werden: {name}",connectorOffline:"Der lokale Spine-Connector wurde nicht erkannt. Bitte aktivieren Sie zuerst den Connector",connectorHttpError:"Der Spine-Connector gibt den Fehler HTTP {status} zurück",invalidTrailUV:"Ungültige UV-Daten für nachgestelltes Netz „{name}“",missingTrailVertices:"Im nachgestellten Netz „{name}“ fehlen Scheitelpunktdaten",trailIndexOutOfRange:"Dreiecksindex des nachgestellten Netzes „{name}“ außerhalb der Grenzen",invalidTrailHull:"Die Außenkonturnummer des nachlaufenden Netzes „{name}“ ist ungültig",trailHullIndexOutOfRange:"Der Außenkonturkantenindex des nachgestellten Netzes „{name}“ liegt außerhalb der Grenzen",invalidInfluenceCount:"Das nachgestellte Netz „{name}“ enthält eine ungültige Anzahl an Knochengewichten",missingBoneReference:"Das nachgestellte Netz „{name}“ verweist auf einen nicht vorhandenen Knochen",invalidWeight:"Das nachfolgende Raster „{name}“ enthält ungültige Gewichtsdaten",weightSum:"Die Scheitelpunktgewichte des nachgestellten Netzes „{name}“ ergeben in der Summe nicht 1",vertexCountMismatch:"Das nachgestellte Netz „{name}“ weist eine inkonsistente Anzahl von Scheitelpunkten und UVs auf",invalidInherit:"Der geerbte Wert „{inherit}“ für Bone „{name}“ entspricht nicht dem Spine {version} JSON-Format",trailBoneParent:"Der Trailing-Bone „{name}“ muss direkt unter dem Partikelsystem-Bone aufgehängt werden und darf keine Bone-Kette bilden.",trailSlotEmpty:"Der gewichtete Tailing-Slot „{name}“ kann keine leeren Anhänge verwenden. Die entsprechende Knochenskalierung sollte in der Nichterscheinungs- oder Todesphase auf 0 gesetzt werden.",spine38Version:"Spine 3.8 Die exportierte Versions-ID muss 3.8 sein",spine38Inherit:"Spine 3.8 Bone „{name}“ sollte „Transform“ verwenden und kann nicht „Inherit“ verwenden",spine38SlotColor:"Spine 3.8 Slot-Farbzeitleiste muss Farbe / TwoColor verwenden",spine38AttachmentName:"Spine 3.8 Der versteckte Rahmen der Anhang-Timeline muss explizit als Name geschrieben werden: null",spine38RotationAngle:"Spine 3.8 Sie müssen den Winkel verwenden, um die Zeitachse zu drehen",spine38Curve:"Spine 3.8 unterstützt das 4.x-Array-Kurvenformat nicht",unsupportedExportVersion:"Die exportierte Version wird nicht unterstützt, nur Spine {versions} wird unterstützt",exportVersionMismatch:"Inkonsistente Exportversion: auf Spine {expected} gesetzt, JSON markiert als Spine {actual}",exportMissingBones:"Beim Exportergebnis fehlen Knochen",missingAtlasTexture:"Die von Atlas referenzierte Textur ist nicht ausgewählt: {name}"},KD={label:"Sprache",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},JD={app:PD,common:ID,toolbar:kD,settings:RD,config:FD,curve:LD,gradient:DD,attributeControl:OD,pivot:ND,image:$D,timeline:BD,emission:UD,attributes:VD,appearance:XD,renderLayer:YD,export:{title:"Exporteinstellungen",reset:"Exporteinstellungen zurücksetzen",imagesPath:"Bildpfad (Spine-Bildpfad)",spineVersion:"Spine-Version",keyframeCurve:"Keyframe-Interpolationskurve",linear:"Linear",smoothBezier:"Glatter Bezier (Glatter Bézier)",bezierHelp:"Smooth Bezier passt kontinuierliche Bewegungen innerhalb der Fehlertoleranz an; Geburt, Tod, Bindungswechsel und Mutationen verwenden weiterhin Schritt-Keyframes.",spine38Help:"Spine 3.8 unterstützt das Bezier-Array pro Kanal von 4.x nicht und wird beim Export in toleranzreduzierte stückweise lineare Keyframes konvertiert.",fps:"Export-FPS",omitFps:"Schreiben Sie keine fps",fpsHelp:"Behalten Sie die tatsächlichen Sekunden der Animation bei, wenn Sie FPS ändern. „Keine FPS schreiben“ lässt nur die FPS-Metadaten von Spine weg.",integerFrames:"Ganzzahlige Frame-Ausrichtung",bonePool:"Knochenobjektpool",excludeEmpty:"Schließen Sie inhaltslose Animationen aus",baking:"Die Animation wird neu berechnet und gebacken",exportJsonTitle:"Exportieren Sie Spine {version} JSON",preparing:"Der Export wird vorbereitet...",exportJson:"Spine JSON exportieren",exportImagesTitle:"Laden Sie das vom aktuellen Partikelsystem ZIP verwendete Bild separat herunter",organizingImages:"Bilder sortieren...",exportImages:"Bilder-ZIP exportieren",generatingProject:"Projekt wird erstellt...",exportSpine:".spine-Paket exportieren",authorize:"Autorisieren Sie die aktuelle Website",authorizeTitle:"Autorisieren Sie die aktuelle Website im nativen Connector",refreshConnector:"Überprüfen Sie den Stecker erneut",refresh:"auffrischen",recalculating:"Partikelanimation wird neu berechnet...",exported:"Exportiert Spine {version}: {systems} Partikelsysteme, {animations} Animationen, {bones} Wurzelknochen {warning}",resourceWarning:";{count} Ressourcentipps (fehlende Bilder werden weiterhin exportiert)",timeout:"Neuberechnung des Animations-Timeouts. Bitte bestätigen Sie, dass die Seite noch ausgeführt wird, und versuchen Sie es erneut",preparingProject:"Bilder sortieren und diese Maschine Spine nennen…",projectExported:"{fileName} wurde generiert: einschließlich .spine-Projekt und {images}-Bilder, Spine {version}",collectingImages:"Zusammenstellung von Bildern, die derzeit vom Partikelsystem verwendet werden ...",imagesExported:"{fileName} wurde generiert: {folder}/ enthält {images}-Bilder",connectorChecking:"Lokaler Spine-Anschluss wird erkannt...",connectorOffline:"Der lokale Spine-Connector läuft nicht",spineNotFound:"Der Connector läuft, aber Spine wurde nicht gefunden",notAuthorized:"Der Connector läuft, aber diese Website ist nicht autorisiert",connectorReady:"Connector verfügbar · Spine bereit",connectorBusy:"Spine-Projekt wird neu berechnet und erstellt",connectorGenerate:"Spine-{version}-Projekt mit lokalem Spine erstellen",unknown:"unbekannt",checking:"Prüfung",offline:"Offline",notFound:"Spine nicht gefunden",unauthorized:"Nicht autorisiert",projectTransferTitle:"Exportieren Sie das Spine-Paket",projectTransferDetail:"Partikelanimation wird neu berechnet...",projectTransferDownload:"Das Spine-Projektpaket wurde heruntergeladen",generatingJson:"Generieren von Spine JSON…",preparingProjectFiles:"Projektbilder zusammenstellen...",uploading:"Daten werden in den Spine-Connector hochgeladen...",spineProcessing:"Spine konvertiert das Projekt, bitte warten...",downloadingProject:"Das generierte Spine-Projektpaket wird heruntergeladen ...",handingToBrowser:"Übergabe an den Browser zum Download..."},transfer:zD,scene:jD,modifiers:HD,spine:GD,help:WD,errors:qD,language:KD},ZD={title:"Spine Particle Editor - Yeomai",resizeTimeline:"Drag to resize the timeline",systems:"Systems",particlesBones:"Particles (bones)",rootBone:"Root bone",hudTip:"Scroll to zoom · Drag with left mouse to pan"},QD={label:"Language",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},eO={close:"Close",reset:"Reset",add:"Add",remove:"Remove",delete:"Delete",clear:"Clear",cancel:"Cancel",confirm:"Confirm",none:"None",enabled:"Enabled",disabled:"Disabled",fixed:"Fixed",random:"Random",curve:"Curve",followExport:"Follow export",linear:"Linear",bezier:"Bézier",above:"Above",below:"Below",left:"Left",right:"Right",seconds:"s",frames:"f"},tO={settings:"Settings",undo:"Undo (Ctrl+Z)",pan:"Pan canvas (Q)",translate:"Move (W)",rotate:"Rotate (E)",scale:"Scale (R)",zoomIn:"Zoom in",zoomOut:"Zoom out",fitView:"Fit canvas",toggleGrid:"Toggle grid",resetView:"Reset view",background:"Background",backgroundSettings:"Background settings",changeBackground:"Replace image",uploadBackground:"Upload image",clearBackground:"Clear background",noBackground:"No image",backgroundX:"Background X offset",backgroundY:"Background Y offset",backgroundOpacity:"Background opacity",opacity:"Opacity",help:"Help",openHelp:"Open help"},iO={title:"Settings",layout:"Layout",parameterPanelPosition:"Parameter panel position",panelOnRight:"Show parameter panel on the right",history:"History",maxUndo:"Maximum undo steps",canvasGuides:"Canvas guides",emitter:"Emitter point",bones:"Bone links",bonePointSize:"Bone point size",boneAxisSize:"Axis size",skinMesh:"Skin mesh",enableTicks:"Show ticks",tickFontSize:"Tick text size",tickWidth:"Tick line width",axisColor:"Axis color",showAxisLabels:"Show tick values",cacheNote:"Settings are saved automatically in this browser"},nO={title:"Configuration",save:"Save Config",saveTitle:"Save the complete editor configuration (Ctrl+S)",load:"Load Config",loadTitle:"Load an editor configuration file",presets:"Preset list",selectPreset:"Select preset",noPresets:"No presets",saved:"Configuration saved locally",loading:"Loading configuration…",loaded:"Loaded: {name}",presetLoading:"Loading preset…",presetLoaded:"Preset loaded: {name}",presetNamingError:"{message}. Check the preset file name.",presetTransferTitle:"Load Preset",presetDownloading:"Downloading {file}…",presetParsing:"Parsing preset configuration…",presetRestoring:"Parsing and restoring preset resources…",presetComplete:"Preset loaded",presetListError:"Unable to read preset list",presetReadError:"Unable to read preset: {file}"},sO={bezierHint:"Drag square handles · Double-click empty space to add · Double-click a node to delete",linearHint:"Double-click empty space to add · Double-click a node to delete · Drag nodes to adjust",resetTitle:"Restore default curve"},rO={addTitle:"Double-click the color bar to add a stop",color:"Stop color",colorValue:"Stop color value",position:"Stop position",addMiddle:"Add color in the middle",delete:"Delete selected stop",hint:"Double-click to add · Drag a stop to move · Double-click a stop to delete"},oO={angleOffset:"Angle offset",value:"Value",lower:"Min",upper:"Max",rangeLower:"Range min",rangeUpper:"Range max",curveInput:"Curve input →",direction:"Emission direction"},aO={title:"Texture Pivot",zoomOut:"Zoom out",zoomIn:"Zoom in",expand:"Open full-screen pivot editor",interaction:"Click/drag to set pivot · Right-drag to pan · Scroll to zoom",previewAlt:"Pivot preview",noImage:"No image selected",resetCenter:"Center (50%, 50%)",coordinates:"Pivot coordinates (%)",rotationTest:"Pivot rotation test",static:"Static",spin:"Spin",swing:"Swing",rotationAlt:"Rotation test",topLeft:"Top left",top:"Top",topRight:"Top right",left:"Left",center:"Center",right:"Right",bottomLeft:"Bottom left",bottom:"Bottom",bottomRight:"Bottom right"},lO={chooseSequence:"Choose sequence images",chooseLocal:"Choose local image",subfolder:"Subfolder",name:"Name",restore:"Restore {name}",deleteResource:"Delete image resource",imageMode:"Image mode",fixed:"Single image",sequence:"Sequence",playbackMode:"Playback",onceHide:"Once, hide at end",onceHold:"Once, hold last frame",loopForward:"Loop forward",loopReverse:"Loop reverse",playbackFps:"Playback FPS",chooseSequenceMulti:"Choose sequence images (multiple)",weight:"Weight %",unlockWeight:"Unlock weight",lockWeight:"Lock current weight",pivot:"Texture Pivot",collapsePivot:"Collapse pivot editor",expandPivot:"Expand pivot editor",pivotModal:"Full-screen texture pivot editor",pivotModalDesc:"Click or drag on the texture to set the exact particle rotation center",pivotZoomHint:"Zoom from 100% to 400% to align tips or roots precisely:",confirmPivot:"Apply and save pivot",noSequence:"No sequence selected",firstFrame:"Frame 1",firstImage:"first image",lastImage:"last image",pivotOn:"Enabled: X {x}% | Y {y}%",pivotOff:"Disabled, using image center (50%, 50%)",pivotCustom:"Custom pivot: X {x}% | Y {y}%",frameCountOne:"1 frame · {name}",frameCountMany:"{count} frames · {first} → {last}",sequenceSelected:"{count} frames selected, playing {first} to {last}"},cO={play:"Play (D)",pause:"Pause (D)",toStart:"Go to first frame (S)",previous:"Previous frame",next:"Next frame",toEnd:"Go to last frame",continuousLoop:"Continuous loop playback",abLoop:"Independent A/B range loop",abLoopShort:"AB Loop",abRange:"A/B loop range",playbackStart:"Custom playback start frame",playbackEnd:"Custom playback end frame",startFrame:"Playback start frame",endFrame:"Playback end frame",frame:"Frame",emission:"Emitting",particleLife:"Particles alive",spineAnimation:"Spine animation",ownerAnimation:"Owner animation",setOwnerAnimation:"Set the animation that owns this particle system",chooseOwnerAnimation:"Choose owner animation",animationName:"Animation name",renameAnimation:"Rename current animation",rename:"Rename",newAnimation:"+ New",keepOneAnimation:"At least one animation is required",spinePreview:"Spine preview animation",noSpineAnimation:"No Spine animation available",none:"None",systemName:"System {index}",dragLoopDuration:"Drag to change loop duration",dragEmissionDuration:"Drag to change emission duration",dragSpineStart:"Drag to change animation start time",noAnimationData:"No animation data",animationNameEmpty:"Animation name cannot be empty",animationNameDuplicate:"Animation name already exists",animationRenameFailed:"Unable to rename animation",zoomIn:"Zoom in",zoomOut:"Zoom out",zoomFit:"Fit",frameStatus:"Frame {current} / {total}"},dO={title:"Emission",reset:"Reset emission settings",stream:"Stream",burst:"Burst",normalStream:"Standard stream",loopStream:"Loop stream",rate:"Emission rate",duration:"Emission duration",loopDuration:"Emission duration (f)",generateStart:"Generate loop start animation",generateEnd:"Generate loop end animation",customDuration:"Custom duration",auto:"Auto {frames}f",startLoopDuration:"Loop start duration",endLoopDuration:"Loop end duration",loopWarning:"Bone and path following are unavailable in loop stream mode and will be reset when entering or leaving it.",burstCount:"Burst count",delay:"Delay",shapeTitle:"Emitter Shape",shapeReset:"Reset emitter shape settings",shape:"Shape",point:"Point",circle:"Circle",rect:"Rectangle",cone:"Cone",path:"Path",innerDiameter:"Inner diameter",outerDiameter:"Outer diameter",innerRadius:"Inner radius",outerRadius:"Outer radius",coneDirection:"Cone direction",coneAngle:"Cone opening angle",innerWidth:"Inner width",innerHeight:"Inner height",outerWidth:"Outer width",outerHeight:"Outer height",selectPath:"Spawn path",noPath:"No path (point emission)",birthDistribution:"Birth distribution",evenDistribution:"Even spacing",randomDistribution:"Random",emissionAngle:"Emission angle",radial:"Radial (outward)",pathNormal:"Path normal",pathTangent:"Path tangent",fixedAngle:"Fixed angle",baseAngle:"Base angle",randomRange:"Random range",showShape:"Show shape"},uO={title:"Particle Attributes",reset:"Reset particle attribute settings",initialParams:"Initial particle values",initialLife:"Initial life",randomSample:"Random sample →",initialSpeed:"Initial speed",initialScale:"Initial scale",uniform:"Uniform",separateXY:"Separate XY",scaleX:"Scale X",scaleY:"Scale Y",initialRotation:"Initial rotation",lifecycleTitle:"Values over particle life",speedOverLife:"Speed over life",speedMultiplier:"Speed multiplier",lifeTo:"Lifetime →",scaleOverLife:"Scale over life",scaleMultiplier:"Scale multiplier",multiplierX:"Multiplier X",multiplierY:"Multiplier Y",rotationOverLife:"Rotation over life",rotationSpeed:"Rotation speed"},hO={title:"Appearance & Resources",reset:"Reset appearance and resource settings",opacity:"Opacity",curveMode:"Curve mode",transparent:"0 (transparent)",opaque:"1 (opaque)",renderLayer:"Render layer (Spine slot)",top:"Topmost",spineSlot:"Spine slot",selectSpine:"Select Spine",noSpine:"No Spine available",noSlot:"No slot selected",reselect:"Reselect",selectSlot:"Select slot",searchSlots:"Search slots or attachments…",searchSlotsAria:"Search slots",emptySlot:"Empty slot",noMatchingSlots:"No matching slots",above:"Above slot image",below:"Below slot image",followAttachment:"Follow attachment visibility",previewOnly:"Render layer changes only affect the editor preview and are not exported.",imageResources:"Image Resources",addImage:"Add image resource",scale:"Scale",color:"Color",fixedColor:"Fixed color",randomColor:"Random color",lifetime:"Over lifetime",normal:"Normal",add:"Add",multiply:"Multiply",screen:"Screen",fixedColorValue:"Fixed color value",randomColorHint:"Each particle samples a color from the gradient at birth and keeps it for its lifetime",independentAlpha:"Independent opacity",off:"Off"},fO={slotLabelAbove:"{spine} / {slot} · above image",slotLabelBelow:"{spine} / {slot} · below image",resolvedAbove:"Render above {slot} and below the following slot",resolvedBetween:"Render between {previous} and {slot}",warningNoSpine:"No loaded Spine resource. Particles are temporarily rendered on top.",warningNoSelection:"No Spine selected. Particles are temporarily rendered on top.",warningMissingSpine:"The target Spine no longer exists. Particles are temporarily rendered on top.",warningNotReady:"The target Spine is not ready. Particles are temporarily rendered on top.",warningMissingSlot:"The target slot no longer exists. Particles are temporarily rendered on top.",warningFirstSlot:"This is the first slot, so particles cannot render below it and are temporarily shown on top."},pO={completed:"Completed",failed:"Operation failed"},mO={title:"Scene Objects",addParticle:"Add particle system",addParticleShort:"+ Particle",addCollider:"Add collider",addColliderShort:"+ Collider",addPath:"Add path",addPathShort:"+ Path",addSpine:"Add Spine",copyTitle:"Duplicate selected scene object",showParticle:"Show particle system",hideParticle:"Hide particle system",showCollider:"Show collider",hideCollider:"Hide collider",showPath:"Show path",hidePath:"Hide path",showSpine:"Show Spine",hideSpine:"Hide Spine",particle:"Particle",subEmitter:"Sub-emitter",collision:"Collision",path:"Path",deleteParticle:"Delete particle system",deleteCollider:"Delete collider",deletePath:"Delete path",deleteSpine:"Delete Spine",empty:"No scene objects",name:"Name",positionX:"Position X",positionY:"Position Y",offsetX:"Offset X",offsetY:"Offset Y",rotation:"Rotation",scaleX:"Scale X",scaleY:"Scale Y",seed:"Random seed",seedTitle:"Controls random attributes, resource selection, and modifier sampling",randomizeSeed:"Generate a new global random seed",seedHint:"Controls initial random values, resource selection, and modifier sampling. The same seed reproduces the same result.",colliderTitle:"Collider Properties",colliderName:"Collider name",type:"Type",circle:"Circle",ellipse:"Ellipse",rect:"Rectangle",polygon:"Polygon",custom:"Custom",enabled:"Enabled",xPosition:"X position",yPosition:"Y position",scaleXShort:"Scale X",scaleYShort:"Scale Y",radius:"Radius",radiusX:"X radius",radiusY:"Y radius",width:"Width",height:"Height",sides:"Sides",collisionResponse:"Collision response",physics:"Physics (bounce / friction)",pause:"Pause in place",destroy:"Destroy immediately",elasticity:"Elasticity (0-1)",friction:"Friction (0-1)",followPath:"Follow a path",targetPath:"Target path",notSelected:"(Not selected)",moveDuration:"Move duration (s)",followDirection:"Orient along path",moveProgressCurve:"Movement progress curve",moveProgressHelp:"X: elapsed / duration · Y: path progress (0 = start, 1 = end)",pathTitle:"Path Properties",pathName:"Path name",closedPath:"Closed path",pathColor:"Path color",pathHelp:"Controls:",pathHelpItems:["Double-click empty space or a curve to add an anchor","Double-click an anchor to delete it","Double-click, hold on the second click, and drag to create handles","Drag anchors to move them and handles to reshape the curve","Shift + handle drag: symmetric handles","Alt + handle drag: independent handles","Ctrl + click / box select: add nodes","Alt + click / box select: remove nodes","Alt + click empty space: clear selection","Move multiple selected anchors together"],applyPresetShape:"Apply preset shape",choosePreset:"Choose preset…",square:"Square",star:"Star",applyPreset:"Apply preset",clearAnchors:"Clear anchors",panelHint:"Use the buttons above to create a scene object"},gO={title:"Modifiers",reset:"Reset modifiers",damping:"Damping",enableNoise:"Enable movement noise",strength:"Strength",noiseRange:"Wander range",noiseSpeed:"Time speed",noiseHint:"Strength controls influence · Wander range controls maximum offset · Time speed controls variation rate",enableGravity:"Enable gravity",gravityStrength:"Gravity strength",strengthMin:"Strength min",strengthMax:"Strength max",direction:"Direction",gravityOverLife:"Gravity over lifetime",windOverLife:"Wind over lifetime",axisStrength:"Y: strength 0–1",directionHint:"0° right · -90° down · Negative strength reverses direction",enableWind:"Enable wind",windStrength:"Wind strength",enableForceField:"Enable force field",centerX:"Center X",centerY:"Center Y",forceStrength:"Force strength",forceRadius:"Force radius",falloffMode:"Falloff",constant:"Constant",linearFalloff:"Linear (zero at edge)",inverseFalloff:"Inverse distance (strongest at center)",forceHint:"Positive attracts · Negative repels · Drag the force circle on the canvas",showShape:"Show shape",enableVortex:"Enable vortex",vortexHint:"Positive counter-clockwise · Negative clockwise",enableAttraction:"Enable attraction",attractionX:"Attraction point X",attractionY:"Attraction point Y",attractionRadius:"Arrival radius",attractionDuration:"Attraction duration",delay:"Delay",delayMode:"Delay mode",globalTime:"Global time",particleLife:"Per particle life",attractionPath:"Attraction path",straight:"Straight",attractionHint:"Starts attraction after the delay · Dies on reaching the red radius · Drag the attraction circle on the canvas",enableTrail:"Enable trail",trailImages:"Trail Images",addTrailImage:"Add trail image resource",trailRotation:"Rotation",trailBones:"Trail bones",trailRatio:"Trail ratio (%)",trailLength:"Trail length",randomRange:"Random range",lengthRatio:"Length ratio (%)",lengthMin:"Length min (%)",lengthMax:"Length max (%)",trailWidth:"Trail width",widthRatio:"Width ratio (%)",widthMin:"Width min (%)",widthMax:"Width max (%)",widthScale:"Width scale",followParticle:"Follow particle",lifeLengthCurve:"Length over lifetime",shapeCurve:"Shape curve (head to tail width)",colorMode:"Color mode",blendMode:"Blend mode",fixedColor:"Fixed color",alphaMode:"Opacity mode",opacity:"Opacity",gridRows:"Grid rows",gridCols:"Grid columns",trailHint:"Each particle creates a sibling trail bone group according to the resource ratio. Random length and width are fixed at birth and reproducible with the same seed.",enableFollow:"Enable emitter following",followMode:"Follow mode",noFollow:"None",followPath:"Follow path",selectedBone:"Selected bone",emitterAngleMode:"Emitter angle mode",fixedAngle:"Fixed angle",followMoveDirection:"Follow movement direction",moveProgressCurve:"Movement progress curve (0→1)",moveDuration:"Move duration (s)",followSpace:"Follow space",localSpace:"Local space (move emitter)",worldSpace:"World space (move spawn point)",moveDirection:"Movement direction",forward:"Forward (start → end)",reverse:"Reverse (end → start)",followOffset:"Start offset (0-1)",followSpaceHint:"Local space moves the entire emitter. World space moves only the spawn point; existing particles stay in world position.",followTarget:"Follow target: ",noValidBone:"No valid bone is bound. Select a bone in the Spine hierarchy first.",rebind:"Rebind",bind:"Bind",selectedBoneLabel:"Selected bone: ",boneLocalSpace:"Local space (follow bone)",boneWorldSpace:"World space (keep particle position)",offsetX:"Position offset X",offsetY:"Position offset Y",rotationOffset:"Rotation offset",scaleOffsetX:"Scale offset X",scaleOffsetY:"Scale offset Y",boneFollowHint:"The emitter follows only the selected Spine bone position. Particle transforms use the particle system settings and offsets above.",enableCollision:"Enable collision",collisionObjects:"Collision objects",colliderDisabled:"{name} (disabled)",clearCollider:"Remove collider {name}",addCollider:"Add a scene collider",noAvailableColliders:"No colliders available",noCollidersSelected:"No collider selected. Current particles will not collide.",available:"Available",disabled:"Disabled",collisionHint:"Only enabled scene colliders added here participate in this particle system's collisions.",enableSubEmitter:"Enable sub-emitters",triggerTiming:"Choose trigger event",birth:"Birth",death:"Death",collision:"Collision",chooseTarget:"Choose target particle system",noTarget:"None (particle system)",deleteSubEmitter:"Delete this sub-emitter",probability:"Trigger probability",collisionLimit:"Collision trigger limit",inherit:"Inherit",colorInheritMode:"Color inheritance",add:"Add",replace:"Replace",addSubEmitter:"+ Add sub-emitter",inheritNone:"None (default)",inheritAll:"All attributes",inheritColor:"Color",inheritScale:"Size",inheritRotation:"Rotation",inheritLife:"Lifetime"},vO={title:"Spine Properties",name:"Spine name",xPosition:"X position",yPosition:"Y position",rotation:"Rotation",scaleX:"Scale X",scaleY:"Scale Y",startTime:"Start time",resources:"Spine Resources",chooseFolder:"Choose folder and load",folderHint:"Reads JSON / SKEL, Atlas, and all textures from the folder. Assets can still be replaced individually below.",choose:"Choose",chooseMultiple:"Choose multiple",loading:"Loading…",load:"↧ Load",clear:"Clear",supportNote:"Supports Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Runtime loaded on demand · Fully local",currentResource:"Current asset {version}",animations:"Spine Animations",noAnimations:"No animations available",timelineAnimation:"Timeline animation",no:"None",hierarchy:"Hierarchy",clearBoneTitle:"Click to clear bone selection",noBoneTitle:"No bone selected",clearBone:"Clear selected bone: {name}",currentBone:"Current bone: ",clearSlotTitle:"Click to clear slot selection",noSlotTitle:"No slot selected",clearSlot:"Clear selected slot: {name}",currentSlot:"Current slot: ",notSelected:"Not selected",expandAll:"Expand all",collapseAll:"Collapse all",bones:"Bones",slots:"Slots",notLoaded:"Spine not loaded",searchBones:"Search bones",searchBonesPlaceholder:"Search bone names…",clearSearch:"Clear search",clearBoneSearch:"Clear bone search",noMatchingBones:"No matching bones",expandChildren:"Expand child bones",collapseChildren:"Collapse child bones",notLoadedSlots:"Spine slots not loaded",searchSlots:"Search slots",searchSlotsPlaceholder:"Search slots or attachments…",clearSlotSearch:"Clear slot search",noMatchingSlots:"No matching slots",slotTitle:"{name} (bone: {bone}, attachment: {attachment})",empty:"Empty",textureSummary:"{count} textures: {names}",textureImages:"texture images",missingFolderAssets:"The selected folder is missing: {missing}",chooseAssets:"Select Spine data, Atlas, and all texture images"},bO={title:"Help",subtitle:"Quick start from creating particles to saving and exporting",close:"Close help",closeShort:"Close (Esc)",quickStart:"Quick Start",stepCreate:"Create objects: use + Particle / + Collider / + Path / + Spine in Scene Objects.",stepEdit:"Edit particles: select a particle system, then adjust Emission → Emitter Shape → Particle Attributes → Appearance & Resources → Modifiers.",stepPreview:"Preview: play, pause, step, or scrub on the timeline. Parameter changes are recalculated automatically.",stepExport:"Save and export: Save Config keeps the project; Export Spine JSON / images ZIP / .spine package produces the deliverable.",quickNote:"Reset beside each section restores that section's defaults. Settings are saved automatically in this browser.",commonOps:"Common Actions",eye:"Visibility",eyeDesc:"Show or hide an object independently. Hidden particle systems are not exported.",copyDesc:"Duplicate the selected object for parameter comparisons.",backgroundDesc:"Upload a reference image and adjust its position and opacity for canvas preview only.",settingsDesc:"Manage layout, canvas guides, tick display, and other editor settings.",undoDesc:"Ctrl+Z undoes one step. The maximum history size is configurable.",spineBoneDesc:"Search and select bones in the hierarchy for emitter following.",shortcuts:"Shortcuts",undoShortcut:"Undo",saveShortcut:"Save config",panShortcut:"Pan canvas",translateShortcut:"Move tool",rotateShortcut:"Rotate tool",scaleShortcut:"Scale tool",playShortcut:"Play / pause",startShortcut:"Go to first frame",shortcutNote:"Click the canvas before using Q / W / E / R. Single-key shortcuts are disabled while typing in inputs.",modules:"Module Guide",configTitle:"Configuration",saveConfigDesc:"Save all scene objects and parameters to a project JSON file. Ctrl+S is supported.",loadConfigDesc:"Load a local configuration and restore the complete project.",presetDesc:"Choose a preset from the dropdown. Open the dropdown to refresh the list.",configScope:"Scope",configScopeDesc:"The project includes objects and parameters. Interface settings are stored separately in the browser.",sceneTitle:"Scene Objects",particleDesc:"The core object. Set position, offset, rotation, scale, and random seed. The same seed reproduces the same result.",colliderDesc:"Circle, ellipse, rectangle, polygon, or custom shape with physics, pause, destroy, and path-following responses.",pathDesc:"Bézier path with anchors, handles, closing, color, and preset shapes.",spineDesc:"Load Spine data, Atlas, and textures; browse bones and slots, and use them for emitter following.",sceneCommonDesc:"Objects can be hidden and duplicated independently. Hidden particle systems are not exported.",emissionDesc:"Streaming, burst, delay, and three-part loop streaming with start, loop, and end sections.",burstDesc:"Emit a fixed number of particles once.",delayDesc:"Wait time before emission starts, shown at the left edge of the particle bar.",loopNote:"Loop streaming does not support bone or path following and resets those settings when enabled.",shapeDesc:"Point, circle, rectangle, cone, or path spawn areas. Circle/cone use inner and outer radii; rectangles use inner and outer dimensions.",angleDesc:"Fixed, random, radial, path normal, or path tangent.",initialDesc:"Life, speed, scale, and rotation support fixed, random, and curve modes. Rotation can follow emission direction.",overLifeDesc:"Speed, scale, and rotation can be controlled by lifetime curves.",alphaDesc:"Opacity can be fixed or curved. Curve mode can follow export, linear, or Bézier.",imageDesc:"Single images or sequence frames, weighted image selection, pivots, colors, blend modes, and independent opacity.",sequenceDesc:"Playback can hide after one pass, hold the last frame, loop forward, or loop in reverse.",noiseDesc:"Adds movement noise with strength, range, and speed controls.",gravityDesc:"Gravity, wind, and lifetime strength curves.",forceDesc:"Global force field, vortex, attraction, and collision.",trailDesc:"Independent trail resources with bones, length, width, shape, color, and opacity curves.",followDesc:"The emitter can follow a path or a Spine bone.",collisionDesc:"Choose scene colliders and particle collision response.",exportDesc:"Configure image path, Spine version, keyframe curves, FPS, frame alignment, bone pool, and empty animations.",exportButtonsDesc:"Export Spine JSON, an images ZIP, or a complete .spine project through the connector.",connectorTitle:"Spine Connector",connectorIntro:"The connector sends generated JSON and images to a locally installed and activated Spine editor and converts them into an editable .spine project.",prerequisite:"Requirements",prerequisiteDesc:"Install and activate Spine, then start the desktop connector.",download:"Download",webSide:"Website",webSideDesc:"When the connector reports ready, click Export .spine package.",authorization:"First authorization",authorizationDesc:"Approve the website origin once. The connector stores the local allowlist.",pathSetup:"Application path",pathSetupDesc:"The connector detects Spine automatically. Set the application path manually if detection fails.",downloadResult:"Output",downloadResultDesc:"The downloaded ZIP contains the .spine project and image folder.",version:"Version",versionDesc:"The connector matches Spine 3.8–4.3 from the JSON version.",security:"Security",securityDesc:"The connector listens only on the local machine and deletes temporary conversion files.",differenceTitle:"Config vs. export",differenceDesc:"Save Config preserves editable objects and parameters. Export Spine JSON includes only visible particle systems and bakes collisions, following, trails, and sub-emitters into editable animation data."},yO={confirmLoopFollowEnter:"Enabling loop stream disables particle following and resets its settings. Continue?",confirmLoopFollowExit:"Leaving loop stream disables particle following and resets its settings. Continue?",invalidJson:"The configuration file is not valid JSON",invalidConfigFormat:"This is not a SpineParticle editor configuration",unsupportedConfigVersion:"Unsupported configuration version: {version}",missingScene:"The configuration is missing complete scene data",missingEmbeddedSpine:"The configuration does not contain reusable Spine source assets",chooseJsonConfig:"Choose a .json configuration file",settingsInvalidJson:"The cached settings are not valid JSON",settingsFormat:"This is not a SpineParticle settings cache",settingsVersion:"Unsupported settings version: {version}",settingsMissing:"The settings cache is missing settings",noExportableImages:"The visible particle systems have no exportable images",invalidZipPath:"Invalid ZIP file path",spineFileType:"Spine data must be .json or .skel",atlasFileType:"Atlas files must use .atlas",chooseTexture:"Choose at least one texture image",binaryParseFailed:"Spine binary parsing failed (4.3: {v43}; legacy: {v42})",invalidSpineJson:"Invalid Spine JSON format",unsupportedSpineJsonVersion:"Unsupported Spine JSON version. Supported versions: {versions}",unsupportedSpineDataVersion:"Unsupported Spine data version. Supported versions: {versions}",embeddedReadFailed:"Unable to read embedded Spine file: {name}",missingImageWarning:"Image “{file}” is missing or has unreadable dimensions. Its path was kept.",missingTrailImageWarning:"Trail image “{file}” is missing. Its path was kept.",emptyCacheWarning:"“{name}” has no baked frame cache.",readExportImageFailed:"Unable to read export image: {name}",connectorOffline:"Local Spine connector was not detected. Start the connector first.",connectorHttpError:"Spine connector returned HTTP {status}",invalidTrailUV:"Trail mesh “{name}” has invalid UV data",missingTrailVertices:"Trail mesh “{name}” has no vertex data",trailIndexOutOfRange:"Trail mesh “{name}” has an out-of-range triangle index",invalidTrailHull:"Trail mesh “{name}” has an invalid hull size",trailHullIndexOutOfRange:"Trail mesh “{name}” has an out-of-range hull edge index",invalidInfluenceCount:"Trail mesh “{name}” has an invalid bone influence count",missingBoneReference:"Trail mesh “{name}” references a missing bone",invalidWeight:"Trail mesh “{name}” contains invalid weights",weightSum:"Trail mesh “{name}” vertex weights do not sum to 1",vertexCountMismatch:"Trail mesh “{name}” vertex count does not match its UV count",invalidInherit:"Bone “{name}” has inherit value “{inherit}” incompatible with Spine {version} JSON",trailBoneParent:"Trail bone “{name}” must be a direct child of the particle system bone, not a bone chain",trailSlotEmpty:"Weighted trail slot “{name}” cannot use an empty attachment. Hide the bones with zero scale instead.",spine38Version:"Spine 3.8 export must identify its version as 3.8",spine38Inherit:"Spine 3.8 bone “{name}” must use transform instead of inherit",spine38SlotColor:"Spine 3.8 slot color timelines must use color / twoColor",spine38AttachmentName:"Spine 3.8 hidden attachment frames must explicitly write name: null",spine38RotationAngle:"Spine 3.8 rotation timelines must use angle",spine38Curve:"Spine 3.8 does not support Spine 4.x array curves",unsupportedExportVersion:"Unsupported export version. Supported Spine versions: {versions}",exportVersionMismatch:"Export version mismatch: expected Spine {expected}, JSON reports Spine {actual}",exportMissingBones:"Export result contains no bones",missingAtlasTexture:"Atlas texture was not selected: {name}"},xO={app:ZD,language:QD,common:eO,toolbar:tO,settings:iO,config:nO,curve:sO,gradient:rO,attributeControl:oO,pivot:aO,image:lO,timeline:cO,emission:dO,attributes:uO,appearance:hO,renderLayer:fO,export:{title:"Export Settings",reset:"Reset export settings",imagesPath:"Image path (Spine Images Path)",spineVersion:"Spine version",keyframeCurve:"Keyframe interpolation",linear:"Linear",smoothBezier:"Smooth Bézier",bezierHelp:"Smooth Bézier fits continuous motion within the error tolerance; birth, death, attachment changes, and jumps still use stepped keys.",spine38Help:"Spine 3.8 does not support per-channel array Bézier curves. Export converts them to tolerance-reduced piecewise linear keys.",fps:"Export FPS",omitFps:"Omit fps",fpsHelp:"Changing FPS preserves real animation duration. “Omit fps” only removes the Spine fps metadata.",integerFrames:"Integer frame alignment",bonePool:"Bone object pool",excludeEmpty:"Exclude empty animations",baking:"Recalculating and baking animation",exportJsonTitle:"Export Spine {version} JSON",preparing:"Preparing export…",exportJson:"Export Spine JSON",exportImagesTitle:"Download the images used by the current particle systems as a ZIP",organizingImages:"Collecting images…",exportImages:"Export images ZIP",generatingProject:"Generating project…",exportSpine:"Export .spine package",authorize:"Authorize this site",authorizeTitle:"Authorize this site in the local connector",refreshConnector:"Check connector again",refresh:"Refresh",recalculating:"Recalculating particle animation…",exported:"Exported Spine {version}: {systems} particle systems, {animations} animations, {bones} bones{warning}",resourceWarning:"; {count} resource warnings (export continued without missing images)",timeout:"Baking timed out. Ensure the page is still running and try again.",preparingProject:"Collecting images and calling local Spine…",projectExported:"Generated {fileName}: .spine project with {images} images, Spine {version}",collectingImages:"Collecting images used by the current particle systems…",imagesExported:"Generated {fileName}: {images} images in {folder}/",connectorChecking:"Checking the local Spine connector…",connectorOffline:"Local Spine connector is not running",spineNotFound:"Connector is running, but Spine was not found",notAuthorized:"Connector is running, but this site is not authorized",connectorReady:"Connector available · Spine ready",connectorBusy:"Recalculating and generating the Spine project",connectorGenerate:"Generate a Spine {version} project with the local Spine",unknown:"Unknown",checking:"Checking",offline:"Offline",notFound:"Spine not found",unauthorized:"Not authorized",projectTransferTitle:"Export Spine Package",projectTransferDetail:"Recalculating particle animation…",projectTransferDownload:"Spine project download started",generatingJson:"Generating Spine JSON…",preparingProjectFiles:"Preparing project images…",uploading:"Uploading data to the Spine connector…",spineProcessing:"Spine is converting the project…",downloadingProject:"Downloading the generated Spine project…",handingToBrowser:"Starting browser download…"},transfer:pO,scene:mO,modifiers:gO,spine:vO,help:bO,errors:yO},wO={resizeTimeline:"Arrastra para ajustar la altura de la línea de tiempo",systems:"sistema",particlesBones:"Partículas (huesos)",rootBone:"hueso de la raíz",hudTip:"Zoom de rueda · Clic izquierdo para arrastrar el lienzo",title:"Editor de partículas Spine - Yeomai"},SO={close:"Cerrar",reset:"Restablecer",add:"Añadir",remove:"Quitar",delete:"Eliminar",clear:"Limpiar",cancel:"Cancelar",confirm:"Confirmar",none:"Ninguno",enabled:"Activado",disabled:"Desactivado",fixed:"Fijo",random:"Aleatorio",curve:"Curva",followExport:"Seguir exportación",linear:"Lineal",bezier:"Bézier",above:"Arriba",below:"Abajo",left:"Izquierda",right:"Derecha",seconds:"s",frames:"fotogramas"},CO={settings:"Ajustes",undo:"Deshacer (Ctrl+Z)",pan:"Mover lienzo (Q)",translate:"Mover (W)",rotate:"Girar (E)",scale:"Escalar (R)",zoomIn:"Acercar",zoomOut:"Alejar",fitView:"Ajustar al lienzo",toggleGrid:"Mostrar/ocultar cuadrícula",resetView:"Restablecer vista",background:"Fondo",backgroundSettings:"Ajustes del fondo",changeBackground:"Cambiar imagen",uploadBackground:"Subir imagen",clearBackground:"Borrar fondo",noBackground:"Sin imagen",backgroundX:"Desplazamiento X de la imagen de fondo",backgroundY:"Desplazamiento Y de la imagen de fondo",backgroundOpacity:"Transparencia de la imagen de fondo",opacity:"Opacidad",help:"Ayuda",openHelp:"Abrir ayuda"},AO={title:"Configuración del sistema",layout:"Diseño de interfaz",parameterPanelPosition:"Ubicación del panel de parámetros",panelOnRight:"El panel de parámetros se muestra a la derecha.",history:"Historial de operaciones",maxUndo:"Número máximo de pasos hacia atrás",canvasGuides:"Display auxiliar de lona",emitter:"punto de lanzamiento",bones:"Conexión ósea",bonePointSize:"Tamaño del dibujo de la punta del hueso",boneAxisSize:"Tamaño del dibujo del eje",skinMesh:"malla desollada",enableTicks:"Habilitar ticks",tickFontSize:"Escalar el tamaño del texto",tickWidth:"espesor de la marca de verificación",axisColor:"color del eje",showAxisLabels:"Mostrar valor de escala",cacheNote:"Toda la configuración del sistema se guarda automáticamente en el navegador actual."},TO={title:"Gestión de configuración",save:"Guardar configuración",saveTitle:"Guarde todas las configuraciones del editor (Ctrl+S)",load:"Cargar configuración",loadTitle:"Cargar la configuración del editor local",presets:"Lista preestablecida",selectPreset:"Seleccionar preajuste",noPresets:"Sin preajustes",saved:"La configuración se ha guardado localmente.",loading:"Cargando configuración…",loaded:"Cargado: {name}",presetLoading:"Cargando ajustes preestablecidos…",presetLoaded:"Preestablecido cargado: {name}",presetNamingError:"{message}, verifique el nombre de archivo predeterminado",presetTransferTitle:"Cargar preajuste",presetDownloading:"Descargando {file}…",presetParsing:"Analizando la configuración predeterminada...",presetRestoring:"Analizando y restaurando recursos predeterminados...",presetComplete:"Carga preestablecida completada",presetListError:"No se puede leer la lista preestablecida",presetReadError:"No se puede leer el ajuste preestablecido: {file}"},EO={bezierHint:"Arrastre el controlador cuadrado para ajustar el arco · Haga doble clic en un espacio en blanco para crear uno nuevo · Haga doble clic en un nodo para eliminarlo",linearHint:"Haga doble clic en un espacio en blanco para crear uno nuevo. Haga doble clic en un nodo para eliminarlo. Arrastra un nodo para ajustarlo.",resetTitle:"Restaurar curva predeterminada"},_O={addTitle:"Haga doble clic en la cinta para agregar una marca de color.",color:"Código de colores",colorValue:"Valor de color de la escala de color",position:"Posición de la marca de color",addMiddle:"Añade color en el medio.",delete:"Eliminar parche de color actual",hint:"Haga doble clic en la banda de color para agregar una nueva · Arrastre la marca de color para ajustar su posición · Haga doble clic en la marca de color para eliminarla"},MO={angleOffset:"Desplazamiento de ángulo",value:"valor numérico",lower:"límite inferior",upper:"límite superior",rangeLower:"Límite inferior del rango",rangeUpper:"Rango superior",curveInput:"Entrada de curva →",direction:"Dirección de lanzamiento"},PO={title:"punto de pivote del mapa",zoomOut:"alejar",zoomIn:"agrandar",expand:"Operación de zoom a pantalla completa",interaction:"Haga clic izquierdo/arrastre para establecer el punto de pivote · Haga clic derecho para arrastrar el lienzo · Rueda de desplazamiento para hacer zoom",previewAlt:"Vista previa del punto de pivote",noImage:"Ninguna imagen seleccionada",resetCenter:"Reposicionar en el medio (50%, 50%)",coordinates:"Coordenadas del punto del eje (%)",rotationTest:"Prueba de rotación del eje",static:"aún",spin:"rotación",swing:"balancearse",rotationAlt:"prueba de rotación",topLeft:"arriba a la izquierda",top:"Justo arriba",topRight:"arriba a la derecha",left:"derecha izquierda",center:"medio",right:"Bien",bottomLeft:"abajo a la izquierda",bottom:"Directamente debajo·abajo",bottomRight:"abajo a la derecha"},IO={chooseSequence:"Seleccionar imágenes de fotogramas de secuencia",chooseLocal:"Seleccionar imagen local",subfolder:"subcarpeta",name:"nombre",restore:"Restaurar {name}",deleteResource:"Eliminar recursos de imagen",imageMode:"Modo de imagen",fixed:"Imagen única",sequence:"Secuencia",playbackMode:"modo de juego",onceHide:"Una vez, ocultar al final",onceHold:"Una vez, mantener último fotograma",loopForward:"Bucle hacia delante",loopReverse:"Bucle inverso",playbackFps:"Velocidad de fotogramas de reproducción",chooseSequenceMulti:"Seleccionar fotogramas de secuencia (múltiples selecciones)",weight:"Peso %",unlockWeight:"Desbloquear bloqueo de proporción",lockWeight:"Bloquear la proporción actual",pivot:"Pivote de textura",collapsePivot:"Ajuste del punto de pivote de colapso",expandPivot:"Ampliar el ajuste del punto de pivote",pivotModal:"Refinamiento de imagen grande del punto del eje de rotación de la textura",pivotModalDesc:"Haga clic o arrastre a cualquier parte del mapa a continuación para establecer con precisión el centro de rotación/oscilación de las partículas.",pivotZoomHint:"Admite un aumento del 100 % al 400 % y apunta con precisión a la punta o la raíz:",confirmPivot:"Determinar y guardar el punto de pivote",noSequence:"No se ha seleccionado ningún cuadro de secuencia",firstFrame:"Cuadro 1",firstImage:"primera foto",lastImage:"última foto",pivotOn:"Abierto: X {x}% | Y {y}%",pivotOff:"No activado, el valor predeterminado está alrededor del centro de la imagen (50%, 50%)",pivotCustom:"Se ha personalizado el punto de pivote: X {x}% | Y {y}%",frameCountOne:"1 cuadro · {name}",frameCountMany:"Marco {count} · {first} → {last}",sequenceSelected:"El fotograma {count} ha sido seleccionado y reproducido en el orden {first}-{last}."},kO={play:"Reproducir(D)",pause:"Pausa (D)",toStart:"Volver al primer cuadro (S)",previous:"fotograma anterior",next:"siguiente fotograma",toEnd:"Ir al último fotograma",continuousLoop:"Reproducción en bucle continuo",abLoop:"Bucle independiente del rango A/B",abLoopShort:"Bucle AB",abRange:"Intervalo de ciclo AB",playbackStart:"Cuadro de inicio de reproducción personalizado",playbackEnd:"Fotograma final de reproducción personalizado",startFrame:"Reproducir cuadro de inicio",endFrame:"Reproducir fotograma final",frame:"marco",emission:"Emisión",particleLife:"Partículas activas",spineAnimation:"Animación de Spine",ownerAnimation:"Animación asociada",setOwnerAnimation:"Establecer la animación a la que pertenece el sistema de partículas actual.",chooseOwnerAnimation:"Seleccione la animación",animationName:"Nombre de la animación",renameAnimation:"Cambiar el nombre de la animación actual",rename:"Rebautizar",newAnimation:"+ Nuevo",keepOneAnimation:"Es necesario conservar al menos una animación.",spinePreview:"Animación de vista previa Spine",noSpineAnimation:"No hay animación Spine disponible",none:"ninguno",systemName:"Sistema {index}",dragLoopDuration:"Duración del segmento del bucle de arrastre",dragEmissionDuration:"Duración del arrastre",dragSpineStart:"Arrastre para ajustar la hora de inicio de la animación",noAnimationData:"Actualmente no hay datos de animación para mostrar.",animationNameEmpty:"El nombre de la animación no puede estar vacío.",animationNameDuplicate:"Los nombres de las animaciones no se pueden repetir.",animationRenameFailed:"No se puede modificar el nombre de la animación",zoomIn:"agrandar",zoomOut:"alejar",zoomFit:"Moderado",frameStatus:"Fotograma {current} / {total}"},RO={title:"Modo de emisión",reset:"Restablecer los parámetros del modo de transmisión",stream:"Continuo",burst:"Ráfaga",normalStream:"Continuo normal",loopStream:"Bucle continuo",rate:"Tasa de emisión",duration:"Duración de emisión",loopDuration:"Duración del lanzamiento (f)",generateStart:"Generar animación de bucle de inicio",generateEnd:"Generar animación de bucle final",customDuration:"Especificar duración",auto:"Automático {frames}f",startLoopDuration:"Duración del segmento de bucle inicial",endLoopDuration:"Duración del segmento de bucle final",loopWarning:"El modo de persistencia de bucle no admite el seguimiento de huesos ni el seguimiento de rutas; Las siguientes configuraciones de partículas se restaurarán a los valores predeterminados al entrar o salir.",burstCount:"Cantidad por ráfaga",delay:"Retardo",shapeTitle:"Forma del emisor",shapeReset:"Restablecer los parámetros de forma del emisor",shape:"forma",point:"Punto",circle:"Círculo",rect:"Rectángulo",cone:"Cono",path:"Ruta",innerDiameter:"diámetro interior",outerDiameter:"diámetro exterior",innerRadius:"radio interior",outerRadius:"radio exterior",coneDirection:"Orientación cónica",coneAngle:"Ángulo de apertura cónica",innerWidth:"ancho interior",innerHeight:"Alto por dentro",outerWidth:"Ancho exterior",outerHeight:"extra alto",selectPath:"Seleccionar ruta",noPath:"Sin camino (emisión puntual)",birthDistribution:"distribución de nacimientos",evenDistribution:"Distribución fija equiespaciada",randomDistribution:"distribución aleatoria",emissionAngle:"ángulo de lanzamiento",radial:"Radial (centro hacia afuera)",pathNormal:"perpendicular al camino",pathTangent:"a lo largo de la dirección del camino",fixedAngle:"ángulo fijo",baseAngle:"ángulo base",randomRange:"rango aleatorio",showShape:"mostrar forma"},FO={title:"Atributos de partículas",reset:"Restablecer parámetros de atributos de partículas",initialParams:"Valores iniciales",initialLife:"ciclo de vida inicial",randomSample:"Muestreo aleatorio →",initialSpeed:"velocidad inicial",initialScale:"escalamiento inicial",uniform:"unificado",separateXY:"separación XY",scaleX:"Ampliar X",scaleY:"Zoom Y",initialRotation:"rotación inicial",lifecycleTitle:"Cambios durante la vida útil",speedOverLife:"velocidad del ciclo de vida",speedMultiplier:"multiplicador de velocidad",lifeTo:"ciclo de vida →",scaleOverLife:"Escalar durante el ciclo de vida",scaleMultiplier:"Relación de zoom",multiplierX:"Aumento",multiplierY:"Ampliación Y",rotationOverLife:"Girar durante el ciclo de vida.",rotationSpeed:"Velocidad de rotación"},LO={title:"Apariencia y recursos",reset:"Restablecer parámetros de apariencia y recursos",opacity:"Opacidad",curveMode:"Modo curva",transparent:"0 (transparente)",opaque:"1 (opaco)",renderLayer:"Capa de renderizado (slot de Spine)",top:"nivel superior",spineSlot:"Ranura Spine",selectSpine:"Por favor seleccione Spine",noSpine:"Ninguno disponible Spine",noSlot:"Aún no se ha seleccionado ningún espacio",reselect:"Reseleccionar",selectSlot:"Seleccionar ranura",searchSlots:"Busque el nombre de la ranura o del accesorio...",searchSlotsAria:"Buscar espacios",emptySlot:"Ranura vacía",noMatchingSlots:"No hay ranura coincidente",above:"encima de esta imagen de tragamonedas",below:"debajo de esta imagen de tragamonedas",followAttachment:"Mostrar y ocultar con accesorios de tragamonedas",previewOnly:"Ajustar el nivel de visualización solo afecta la vista previa del editor y no afecta los datos exportados.",imageResources:"Recursos de imagen",addImage:"Agregar recursos de imagen",scale:"Zoom",color:"color",fixedColor:"color fijo",randomColor:"color aleatorio",lifetime:"ciclo vital",normal:"Normal",add:"Suma",multiply:"Multiplicación",screen:"Pantalla",fixedColorValue:"valor de color fijo",randomColorHint:"Cada partícula elige aleatoriamente un color de la cinta cuando nace y permanece sin cambios durante su ciclo de vida.",independentAlpha:"Opacidad independiente",off:"Desactivado"},DO={slotLabelAbove:"{spine} / {slot} · Imagen de arriba",slotLabelBelow:"{spine} / {slot} · Debajo de la imagen",resolvedAbove:"Representado encima de la imagen {slot} y debajo de su ranura.",resolvedBetween:"Representado entre {previous} y {slot}",warningNoSpine:"No hay ningún Spine cargado y las partículas se muestran temporalmente en la parte superior.",warningNoSelection:"Spine aún no se ha seleccionado y las partículas se muestran temporalmente en la parte superior.",warningMissingSpine:"El objetivo Spine no existe y las partículas se muestran temporalmente en la parte superior.",warningNotReady:"El objetivo Spine no está listo y las partículas se muestran temporalmente en la parte superior.",warningMissingSlot:"La ranura de destino no existe (es posible que el recurso haya sido reemplazado) y las partículas se muestran temporalmente en la parte superior.",warningFirstSlot:"Esta es la primera ranura y no se puede mostrar debajo de ella; las partículas se muestran temporalmente en la parte superior."},OO={completed:"Terminado",failed:"Operación fallida"},NO={title:"Objetos de escena",addParticle:"Agregar sistema de partículas",addParticleShort:"+partícula",addCollider:"Agregar colisionador",addColliderShort:"+colisión",addPath:"agregar ruta",addPathShort:"+ camino",addSpine:"Añadir Spine",copyTitle:"Copiar el objeto de escena seleccionado actualmente",showParticle:"Mostrar sistema de partículas",hideParticle:"Ocultar sistema de partículas",showCollider:"mostrar colisionadores",hideCollider:"Ocultar colisionador",showPath:"mostrar ruta",hidePath:"Ocultar ruta",showSpine:"Pantalla Spine",hideSpine:"Ocultar Spine",particle:"Partículas",subEmitter:"Subemisor",collision:"Colisión",path:"Ruta",deleteParticle:"Eliminar sistema de partículas",deleteCollider:"Eliminar colisionadores",deletePath:"eliminar ruta",deleteSpine:"Eliminar Spine",empty:"Aún no hay objetos en la escena.",name:"nombre",positionX:"Posición X",positionY:"Posición Y",offsetX:"Desplazamiento X",offsetY:"Desplazamiento Y",rotation:"Rotación",scaleX:"Escala X",scaleY:"Escala Y",seed:"Semilla aleatoria",seedTitle:"Controle todos los atributos aleatorios, la selección de recursos y el muestreo aleatorio de modificadores en el sistema de partículas.",randomizeSeed:"Generar una nueva semilla aleatoria global",seedHint:"Controlar los parámetros aleatorios iniciales, la selección de recursos y el muestreo aleatorio modificador; la misma semilla puede reproducir el mismo efecto",colliderTitle:"Propiedades del colisionador",colliderName:"Nombre del colisionador",type:"tipo",circle:"redondo",ellipse:"oval",rect:"rectángulo",polygon:"polígono",custom:"Personalizar",enabled:"permitir",xPosition:"Posición X",yPosition:"Posición Y",scaleXShort:"Escala X",scaleYShort:"Escala Y",radius:"radio",radiusX:"radio X",radiusY:"radio Y",width:"ancho",height:"alto",sides:"Número de lados",collisionResponse:"Respuesta de choque",physics:"Física (rebote/fricción)",pause:"Pausa (parar)",destroy:"Desaparecer (destruir inmediatamente)",elasticity:"Elasticidad (0-1)",friction:"Fricción (0-1)",followPath:"Sigue el camino",targetPath:"ruta de destino",notSelected:"(no seleccionado)",moveDuration:"Duración del movimiento (segundos)",followDirection:"dirección a lo largo del camino",moveProgressCurve:"Curva de progreso en movimiento",moveProgressHelp:"Eje horizontal: tiempo real/duración del movimiento; eje vertical: progreso del camino (0=punto inicial → 1=punto final)",pathTitle:"atributo de ruta",pathName:"nombre de la ruta",closedPath:"camino cerrado",pathColor:"color del camino",pathHelp:"Instrucciones de funcionamiento:",pathHelpItems:"Haga doble clic en el espacio en blanco/curva: cree un nuevo punto de anclaje, haga doble clic en el punto de anclaje: elimine el nodo, haga doble clic la segunda vez y arrastre: cree uno nuevo y extraiga el controlador, arrastre el punto de anclaje para mover la posición, arrastre el controlador para ajustar la curva, Mayús + controlador de arrastre: completamente simétrico en ambos lados, Alt+control de arrastre: controle independientemente un lado, Ctrl+clic/selección de marco: agregue nodos seleccionados, Alt+clic/selección de marco: reste nodos seleccionados, Alt+clic en el espacio en blanco: borre todas las selecciones, seleccione varios nodos y arrástrelos como un todo",applyPresetShape:"Aplicar una forma preestablecida",choosePreset:"Seleccione un preajuste...",square:"Cuadrado",star:"forma de estrella",applyPreset:"Aplicar preajuste",clearAnchors:"punto de anclaje claro",panelHint:"Utilice el botón en la esquina superior derecha para crear un objeto de escena."},$O={title:"Modificadores",reset:"Restablecer parámetros del modificador",damping:"Amortiguación",enableNoise:"Activar ruido de movimiento",strength:"fortaleza",noiseRange:"Rango de fluctuación",noiseSpeed:"Flujo de tiempo",noiseHint:"El control de intensidad afecta la proporción · El rango de fluctuación controla la desviación máxima · El flujo de tiempo controla la velocidad de cambio",enableGravity:"Activar gravedad",gravityStrength:"Fuerza de gravedad",strengthMin:"Fuerza mínima",strengthMax:"Fuerza máxima",direction:"dirección",gravityOverLife:"Gravedad durante el ciclo de vida.",windOverLife:"viento del ciclo de vida",axisStrength:"Eje vertical: intensidad 0~1",directionHint:"0° derecha · -90° abajo · La intensidad negativa invierte la dirección",enableWind:"Activar viento",windStrength:"fuerza del viento",enableForceField:"Activar campo de fuerza",centerX:"Centro X",centerY:"Centro Y",forceStrength:"Fuerza del campo de fuerza",forceRadius:"radio del campo de fuerza",falloffMode:"modo de decadencia",constant:"Constante (la velocidad no cambia dentro del rango)",linearFalloff:"Caída lineal (el borde es 0)",inverseFalloff:"Inversamente proporcional a la distancia (más fuerte en el centro)",forceHint:"Los números positivos se atraen hacia el centro, los números negativos se repelen hacia afuera y el círculo del campo de fuerza se puede arrastrar dentro del lienzo.",showShape:"mostrar forma",enableVortex:"Activar vórtice",vortexHint:"Números positivos en sentido antihorario · Números negativos en sentido horario",enableAttraction:"Activar atracción",attractionX:"Punto de adsorción X",attractionY:"Punto de adsorción Y",attractionRadius:"radio de adsorción",attractionDuration:"tiempo de adsorción",delay:"tiempo de retraso",delayMode:"Modo de retardo",globalTime:"tiempo unificado",particleLife:"vida de una sola partícula",attractionPath:"Método de adsorción",straight:"linea recta",attractionHint:"Después del retraso, la adsorción comienza desde la posición actual. Cuando alcance el rango rojo, morirá. El círculo de adsorción se puede arrastrar dentro del lienzo.",enableTrail:"Activar estela",trailImages:"Imágenes finales independientes",addTrailImage:"Agregar recursos de imágenes finales",trailRotation:"girar",trailBones:"Número de huesos posteriores",trailRatio:"Relación de seguimiento (%)",trailLength:"longitud de salida",randomRange:"rango aleatorio",lengthRatio:"Relación de longitud (%)",lengthMin:"Longitud mínima (%)",lengthMax:"Longitud máxima (%)",trailWidth:"Ancho de salida",widthRatio:"relación de ancho (%)",widthMin:"Ancho mínimo (%)",widthMax:"Ancho máximo (%)",widthScale:"escala de ancho",followParticle:"seguir partículas",lifeLengthCurve:"curva de longitud del ciclo de vida",shapeCurve:"Curva de forma (cabeza → ancho de cola)",colorMode:"modo de color",blendMode:"modo de fusión",fixedColor:"color fijo",alphaMode:"modo de transparencia",opacity:"transparencia",gridRows:"Número de filas de la cuadrícula",gridCols:"Número de columnas de la cuadrícula",trailHint:"Cada partícula genera un conjunto de huesos posteriores hermanos en proporción a los recursos; la longitud y el ancho aleatorios se determinan cuando nace la partícula, y la misma semilla se puede reproducir de manera estable",enableFollow:"Activar seguimiento del emisor",followMode:"modo de seguimiento",noFollow:"ninguno",followPath:"sigue el camino",selectedBone:"huesos seleccionados",emitterAngleMode:"Modo de ángulo del transmisor",fixedAngle:"ángulo fijo",followMoveDirection:"Sigue la dirección del movimiento.",moveProgressCurve:"Curva de progreso del movimiento (0→1)",moveDuration:"Duración del movimiento (s)",followSpace:"seguir el espacio",localSpace:"Espacio local (movimiento GEN)",worldSpace:"Espacio mundial (movimiento del punto de generación de partículas)",moveDirection:"dirección de movimiento",forward:"Adelante (punto inicial → punto final)",reverse:"Invertir (punto final → punto inicial)",followOffset:"Punto de partida compensado (0-1)",followSpaceHint:"El espacio local mueve todo el emisor; el espacio mundial solo mueve el punto de generación de nuevas partículas, y las partículas nacidas permanecen en la posición mundial.",followTarget:"Sigue el objetivo:",noValidBone:"Aún no se ha vinculado ningún hueso válido; seleccione primero el hueso en el árbol jerárquico Spine.",rebind:"reencuadernar",bind:"vinculante",selectedBoneLabel:"Hueso actualmente seleccionado:",boneLocalSpace:"Espacio local (se mueve con huesos)",boneWorldSpace:"Espacio mundial (las partículas mantienen su posición después de generarse)",offsetX:"Compensación de desplazamiento X",offsetY:"Compensación de desplazamiento Y",rotationOffset:"Desplazamiento de rotación",scaleOffsetX:"Compensación de escala X",scaleOffsetY:"Desplazamiento de escala Y",boneFollowHint:"El emisor solo sigue la posición del hueso Spine seleccionado y no hereda la rotación o escala de Spine; la transformación de partículas utiliza los propios parámetros del sistema de partículas y el desplazamiento superior.",enableCollision:"Activar colisión",collisionObjects:"Objetos de colisión participantes",colliderDisabled:"{name} (colisionadores desactivados)",clearCollider:"Borrar objeto de colisión {name}",addCollider:"Agregar objetos de colisión de escena",noAvailableColliders:"No hay objetos de colisión para agregar",noCollidersSelected:"No se selecciona ningún objeto de colisión y las partículas actuales no colisionarán.",available:"Disponible",disabled:"Desactivado",collisionHint:"Sólo los objetos de colisión de escena agregados y habilitados participarán en la colisión del sistema de partículas actual.",enableSubEmitter:"Activar subemisores",triggerTiming:"Elija el tiempo de activación",birth:"nacido",death:"morir",collision:"colisión",chooseTarget:"Seleccione el sistema de partículas objetivo",noTarget:"Ninguno (sistema de partículas)",deleteSubEmitter:"Eliminar este subemisor",probability:"probabilidad de emisión",collisionLimit:"Límite de colisión",inherit:"heredar",colorInheritMode:"Método de herencia de color",add:"Agregar",replace:"cubrir",addSubEmitter:"+ Se agregó un nuevo subemisor",inheritNone:"Ninguno (predeterminado)",inheritAll:"Todas las propiedades",inheritColor:"color",inheritScale:"tamaño",inheritRotation:"girar",inheritLife:"ciclo vital"},BO={title:"Propiedades de Spine",name:"Nombre Spine",xPosition:"Posición X",yPosition:"Posición Y",rotation:"Rotación",scaleX:"Escala X",scaleY:"Escala Y",startTime:"Tiempo inicial",resources:"Recursos de Spine",chooseFolder:"Seleccionar carpeta y cargar",folderHint:"Lea JSON / SKEL, Atlas y todas las texturas en una carpeta a la vez; Los recursos aún se pueden reemplazar individualmente a continuación.",choose:"elegir",chooseMultiple:"Seleccionar (múltiples opciones)",loading:"cargando…",load:"↧ Cargar",clear:"Claro",supportNote:"Soporte Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Carga bajo demanda cuando se está ejecutando la versión correspondiente · Local fuera de línea",currentResource:"Recurso actual {version}",animations:"Animaciones de Spine",noAnimations:"No hay animación disponible",timelineAnimation:"Reproducir animación en la línea de tiempo",no:"ninguno",hierarchy:"Jerarquía",clearBoneTitle:"Haga clic para borrar la selección de huesos",noBoneTitle:"No hay huesos seleccionados actualmente",clearBone:"Borrar huesos seleccionados: {name}",currentBone:"Esqueleto actual:",clearSlotTitle:"Haga clic para borrar la selección de ranuras",noSlotTitle:"Actualmente no hay ningún espacio seleccionado",clearSlot:"Borrar ranura seleccionada: {name}",currentSlot:"Ranura actual:",notSelected:"No seleccionado",expandAll:"Expandir todo",collapseAll:"Contraer todo",bones:"esqueleto",slots:"ranura",notLoaded:"No cargado Spine",searchBones:"buscar huesos",searchBonesPlaceholder:"Buscar nombre del hueso…",clearSearch:"Borrar búsqueda",clearBoneSearch:"Búsqueda ósea clara",noMatchingBones:"No se encontró ningún hueso coincidente",expandChildren:"Ampliar los huesos del niño",collapseChildren:"Colapso de huesos infantiles",notLoadedSlots:"Ranura Spine no cargada",searchSlots:"Buscar espacios",searchSlotsPlaceholder:"Busque el nombre de la ranura o del accesorio...",clearSlotSearch:"Borrar búsqueda de espacios",noMatchingSlots:"No se encontró ninguna ranura coincidente",slotTitle:"{name} (esqueleto: {bone}, accesorio: {attachment})",empty:"nulo",textureSummary:"{count}Zhang: {names}",textureImages:"Cuadros de textura",missingFolderAssets:"Falta la carpeta seleccionada: {missing}",chooseAssets:"Seleccione los datos Spine, Atlas y todas las imágenes de textura en secuencia"},UO={title:"Ayuda",subtitle:"Inicio rápido desde la creación de partículas hasta el guardado y la exportación",close:"Cerrar instrucciones",closeShort:"Cerrar (Esc)",quickStart:"inicio rápido",stepCreate:'Cree un objeto: use +Partículas / +Colisión / +Ruta / +Spine en el "Objeto de escena" a la izquierda para agregar un objeto de escena.',stepEdit:'Editar partículas: seleccione el sistema de partículas y ajuste "Modo de emisión → Forma del emisor → Propiedades de las partículas → Apariencia y recursos → Modificador".',stepPreview:"Compruebe el efecto: la línea de tiempo inferior se puede reproducir, pausar, cuadro por cuadro o arrastrar; se recalculará automáticamente después de modificar los parámetros.",stepExport:'Guardar y exportar: utilice "Guardar configuración" para conservar el proyecto; "Exportar Spine Json/paquete de imágenes/paquete .spine" para generar el producto terminado.',quickNote:'"Restablecer" en el lado derecho del título de cada grupo de módulos puede restaurar los parámetros predeterminados del grupo; La configuración del sistema se guardará automáticamente en el navegador actual.',commonOps:"Acciones comunes",eye:"ojos pequeños",eyeDesc:"Mostrar/ocultar objetos individualmente; Los sistemas de partículas ocultas no se exportan.",copyDesc:"Copia completamente el objeto seleccionado actualmente para facilitar la comparación de diferentes parámetros.",backgroundDesc:"Cargue la imagen de referencia y ajuste la posición y la transparencia solo para la vista previa del lienzo.",settingsDesc:"El diseño de la interfaz de administración, la pantalla auxiliar, la escala, etc. se guardan automáticamente en el navegador.",undoDesc:"Ctrl+Z retrocede un paso; el número máximo de pasos se puede ajustar en la configuración del sistema.",spineBoneDesc:"Busque y seleccione un hueso en el árbol jerárquico, que el emisor de partículas puede utilizar para seguir.",shortcuts:"Atajos",undoShortcut:"Deshacer el paso anterior",saveShortcut:"Guardar configuración",panShortcut:"Arrastrar lienzo",translateShortcut:"herramienta de desplazamiento",rotateShortcut:"herramienta rotativa",scaleShortcut:"herramienta de zoom",playShortcut:"reproducir/pausar",startShortcut:"Volver al primer fotograma",shortcutNote:"Q / W / E / R primero debe hacer clic en el lienzo; cuando el cursor está en el cuadro de entrada, la tecla de acceso directo de una sola tecla no se activará.",modules:"Guía de módulos",configTitle:"Gestión de configuración",saveConfigDesc:"Guarde todos los objetos y parámetros de la escena actual como archivos JSON del proyecto (también se admite Ctrl+S).",loadConfigDesc:"Seleccione el archivo de configuración local para restaurar el proyecto completo.",presetDesc:"Seleccione una Aplicación rápida predeterminada en el menú desplegable; haga clic en el menú desplegable para actualizar la lista.",configScope:"alcance",configScopeDesc:"La configuración contiene objetos y parámetros; La interfaz y la configuración del sistema se almacenan por separado en el navegador.",sceneTitle:"objeto de escena",particleDesc:"objeto central. Se pueden configurar posición, desplazamiento, rotación, escala y semilla aleatoria; la misma semilla puede reproducir el mismo efecto.",colliderDesc:"Círculo/elipse/rectángulo/polígono/personalizado, admite rebote físico, pausa, destrucción y movimiento a lo largo del camino.",pathDesc:"Ruta Bezier con soporte para puntos de anclaje, manijas de control, cierre, color y formas preestablecidas.",spineDesc:"Cargue datos Spine, Atlas y texturas, busque huesos y ranuras, y siga los emisores.",sceneCommonDesc:"Los objetos se pueden revelar y copiar de forma independiente; Los sistemas de partículas ocultas no se exportan.",emissionDesc:"Duración del bucle de tres etapas de disparo continuo, ráfaga, retraso e inicio/bucle/finalización.",burstDesc:"Emite un número específico de partículas a la vez.",delayDesc:"El tiempo de espera antes de que comience la emisión, correspondiente al extremo izquierdo de la barra de partículas.",loopNote:"La persistencia del bucle no admite el seguimiento de huesos ni de rutas, y las siguientes configuraciones se restaurarán al cambiar.",shapeDesc:"Área de generación de puntos, círculos, rectángulos, conos o caminos. Los círculos/conos admiten radios internos y externos, y los rectángulos admiten ancho y alto internos y externos.",angleDesc:"Fijo, aleatorio, radial, trayectoria normal o trayectoria tangente.",initialDesc:"El ciclo de vida, la velocidad, el escalado y la rotación admiten soporte fijo, aleatorio, curvo y la rotación puede seguir la dirección de lanzamiento.",overLifeDesc:"La ampliación de velocidad, la ampliación del zoom y la velocidad de rotación se pueden controlar mediante la curva del ciclo de vida.",alphaDesc:"Soportes de transparencia fijos o curvos; El modo de curva puede seguir la derivada, lineal o Bézier.",imageDesc:"Imagen única o fotograma de secuencia, aleatorización de peso de varias imágenes, punto de pivote, color, modo de fusión y transparencia independiente.",sequenceDesc:"Los métodos de reproducción incluyen ocultación de una sola vez, congelación de una sola vez, bucle de avance y bucle de retroceso.",noiseDesc:"Genere trazas de fluctuación y controle la intensidad, el alcance y la velocidad.",gravityDesc:"Curvas de intensidad de gravedad, viento y ciclo de vida.",forceDesc:"Campos de fuerza globales, vórtices, adsorción y colisiones.",trailDesc:"Activos finales independientes, número de huesos, longitud, ancho, forma, color y curvas de transparencia.",followDesc:"El emisor puede seguir un camino o hueso Spine.",collisionDesc:"Seleccione objetos de colisión de escena y respuestas de colisión de partículas.",exportDesc:"Establezca la ruta de la imagen, la versión Spine, la curva de fotogramas clave, FPS, los fotogramas enteros, el conjunto de huesos y la animación vacía.",exportButtonsDesc:"Puede exportar Spine JSON, imágenes ZIP o generar proyectos .spine a través del conector.",connectorTitle:"Instrucciones de uso del conector Spine",connectorIntro:"El conector entrega el JSON y las imágenes generadas por la página web al Spine que se ha instalado y activado en la máquina local, y los convierte en proyectos .spine editables.",prerequisite:"carga frontal",prerequisiteDesc:"La computadora tiene Spine instalado y activado, y se ha iniciado el conector de escritorio.",download:"descargar",webSide:"Página web",webSideDesc:'Después de que aparezca "Conector disponible · Spine está listo", haga clic en "Exportar paquete .spine".',authorization:"primera autorización",authorizationDesc:"La primera conexión debe verificar la fuente del sitio web y permitirla una vez; Esta máquina guarda la lista blanca de autorización.",pathSetup:"Configuración de ruta",pathSetupDesc:"El conector detectará automáticamente Spine; si no se puede encontrar, puede especificar manualmente la ruta de la aplicación.",downloadResult:"Descargar resultados",downloadResultDesc:"Obtenga el paquete ZIP, que contiene el proyecto .spine y el directorio de imágenes.",version:"Versión",versionDesc:"El conector coincide automáticamente con Spine 3.8~4.3 según la versión JSON.",security:"Seguridad",securityDesc:"Solo escuche la dirección local, la autorización se guarda en el conector y los archivos temporales se limpian después de la conversión.",differenceTitle:"¿Cuál es la diferencia entre configurar y exportar?",differenceDesc:'"Guardar configuración" guarda todos los objetos y parámetros que se pueden editar; "Exportar Spine Json" solo exporta el sistema de partículas mostrado y convierte los resultados de colisión, seguimiento, seguimiento y subemisor en datos de animación independientes.'},VO={confirmLoopFollowEnter:"Después de ingresar al modo de bucle continuo, la siguiente configuración de partículas no será válida y se restaurará al valor predeterminado. ¿Continuar?",confirmLoopFollowExit:"Después de salir del modo de persistencia del bucle, la siguiente configuración de partículas no será válida y se restaurará a sus valores predeterminados. ¿Continuar?",invalidJson:"El archivo de configuración no es válido JSON",invalidConfigFormat:"No es el perfil del editor SpineParticle",unsupportedConfigVersion:"Versión de configuración aún no compatible: {version}",missingScene:"Al archivo de configuración le faltan datos completos de la escena",missingEmbeddedSpine:"La configuración no contiene recursos originales Spine reutilizables",chooseJsonConfig:"Seleccione un archivo de configuración .json",settingsInvalidJson:"La caché de configuración del sistema no es válida JSON",settingsFormat:"No caché de configuración del sistema del editor SpineParticle",settingsVersion:"La versión de configuración del sistema aún no es compatible: {version}",settingsMissing:"A la caché de configuración del sistema le faltan configuraciones",noExportableImages:"No hay imágenes exportables para el sistema de partículas visible actualmente.",invalidZipPath:"ZIP Ruta de archivo no válida",spineFileType:"Los datos Spine solo admiten .json o .skel",atlasFileType:"Los archivos Atlas solo admiten .atlas",chooseTexture:"Por favor seleccione al menos una imagen de textura",binaryParseFailed:"Error en el análisis binario de Spine (4.3: {v43}; versión anterior: {v42})",invalidSpineJson:"Spine JSON Formato de archivo no válido",unsupportedSpineJsonVersion:"La versión Spine JSON no es compatible, solo se admite {versions}",unsupportedSpineDataVersion:"La versión de datos Spine no es compatible, solo se admite {versions}",embeddedReadFailed:"No se puede leer el archivo Spine incrustado: {name}",missingImageWarning:'Falta la imagen "{file}" o tiene dimensiones ilegibles, la ruta se conserva.',missingTrailImageWarning:'Falta la imagen final "{file}" y se ha conservado la ruta.',emptyCacheWarning:"No hay framebuffer disponible para '{name}'.",readExportImageFailed:"No se puede leer la imagen exportada: {name}",connectorOffline:"Conector local Spine no detectado, habilite el conector primero",connectorHttpError:"El conector Spine devuelve el error: HTTP {status}",invalidTrailUV:"Datos UV no válidos para la malla final '{name}'",missingTrailVertices:"A la malla final '{name}' le faltan datos de vértice",trailIndexOutOfRange:"Índice triangular de la malla final '{name}' fuera de límites",invalidTrailHull:'El número del contorno exterior de la malla final "{name}" no es válido',trailHullIndexOutOfRange:'El índice del borde del contorno exterior de la malla final "{name}" está fuera de límites',invalidInfluenceCount:"La malla final '{name}' contiene un número no válido de pesos óseos",missingBoneReference:"La malla final '{name}' hace referencia a un hueso inexistente",invalidWeight:'La cuadrícula final "{name}" contiene datos de peso no válidos',weightSum:"Los pesos de los vértices de la malla final '{name}' no suman 1",vertexCountMismatch:"La malla final '{name}' tiene un número inconsistente de vértices y UV",invalidInherit:"El valor heredado '{inherit}' para el hueso '{name}' no se ajusta al formato Spine {version} JSON",trailBoneParent:'El hueso posterior "{name}" debe colgarse directamente debajo del hueso del sistema de partículas y no puede formar una cadena ósea.',trailSlotEmpty:'La ranura de cola ponderada "{name}" no puede utilizar accesorios vacíos. La escala ósea correspondiente debe establecerse en 0 en la fase de no aparición o muerte.',spine38Version:"Spine 3.8 El ID de la versión exportada debe ser 3.8",spine38Inherit:'Spine 3.8 Bone "{name}" debería usar transformar y no puede usar heredar',spine38SlotColor:"La línea de tiempo de color de la ranura Spine 3.8 debe usar color/twoColor",spine38AttachmentName:"Spine 3.8 El fotograma oculto de la línea de tiempo del archivo adjunto debe tener un nombre escrito explícitamente: nulo",spine38RotationAngle:"Spine 3.8 Debes usar el ángulo para rotar el eje del tiempo",spine38Curve:"Spine 3.8 no admite el formato de curva de matriz 4.x",unsupportedExportVersion:"La versión exportada no es compatible, solo se admite Spine {versions}",exportVersionMismatch:"Versión de exportación inconsistente: establecida en Spine {expected}, JSON marcada como Spine {actual}",exportMissingBones:"Al resultado de la exportación le faltan huesos",missingAtlasTexture:"La textura a la que hace referencia Atlas no está seleccionada: {name}"},XO={label:"Idioma",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},YO={app:wO,common:SO,toolbar:CO,settings:AO,config:TO,curve:EO,gradient:_O,attributeControl:MO,pivot:PO,image:IO,timeline:kO,emission:RO,attributes:FO,appearance:LO,renderLayer:DO,export:{title:"Ajustes de exportación",reset:"Restablecer la configuración de exportación",imagesPath:"Ruta de imagen (Ruta de imágenes Spine)",spineVersion:"Versión de Spine",keyframeCurve:"Curva de interpolación de fotogramas clave",linear:"Lineal",smoothBezier:"Bézier suave (Suave Bézier)",bezierHelp:"Smooth Bezier ajusta el movimiento continuo dentro de la tolerancia al error; El nacimiento, la muerte, el cambio de apego y las mutaciones todavía utilizan fotogramas clave de pasos.",spine38Help:"Spine 3.8 no admite la matriz Bézier por canal de 4.x y se convierte a fotogramas clave lineales por partes con tolerancia reducida al exportar.",fps:"FPS de exportación",omitFps:"No escribas fps",fpsHelp:'Mantenga los segundos reales de la animación sin cambios al modificar FPS; "No escribir fps" solo omite los metadatos de fps de Spine.',integerFrames:"Alineación de marco entero",bonePool:"Conjunto de objetos óseos",excludeEmpty:"Excluir animaciones sin contenido",baking:"La animación se está recalculando y horneando.",exportJsonTitle:"Exportar Spine {version} JSON",preparing:"Preparándonos para exportar...",exportJson:"Exportar Spine JSON",exportImagesTitle:"Descargue por separado la imagen utilizada por el sistema de partículas actual ZIP",organizingImages:"Ordenando imágenes...",exportImages:"Exportar imágenes ZIP",generatingProject:"Generando proyecto...",exportSpine:"Exportar paquete .spine",authorize:"Autorizar sitio web actual",authorizeTitle:"Autorizar el sitio web actual en el conector nativo",refreshConnector:"Vuelva a comprobar el conector",refresh:"refrescar",recalculating:"Recalculando la animación de partículas...",exported:"Exportado Spine {version}: sistemas de partículas {systems}, animaciones {animations}, huesos de raíz {bones} {warning}",resourceWarning:";{count} sugerencias de recursos (las imágenes que faltan aún se exportan)",timeout:"Nuevo cálculo del tiempo de espera de la animación. Confirme que la página aún se está ejecutando e inténtelo nuevamente.",preparingProject:"Ordenando imágenes y llamando a esta máquina Spine…",projectExported:"Se ha generado {fileName}: incluye el proyecto .spine y las imágenes {images}, Spine {version}",collectingImages:"Cotejando imágenes utilizadas actualmente por el sistema de partículas...",imagesExported:"Se ha generado {fileName}: {folder}/ contiene imágenes {images}",connectorChecking:"Detectando el conector local Spine...",connectorOffline:"El conector local de Spine no está iniciado",spineNotFound:"El conector está iniciado, pero no se encontró Spine",notAuthorized:"El conector está iniciado, pero este sitio no está autorizado",connectorReady:"Conector disponible · Spine listo",connectorBusy:"Recalculando y generando el proyecto de Spine",connectorGenerate:"Generar proyecto Spine {version} con Spine local",unknown:"desconocido",checking:"Comprobando",offline:"Sin conexión",notFound:"Spine no encontrado",unauthorized:"No autorizado",projectTransferTitle:"Exportar paquete Spine",projectTransferDetail:"Recalculando la animación de partículas...",projectTransferDownload:"Se ha descargado el paquete del proyecto Spine.",generatingJson:"Generando Spine JSON…",preparingProjectFiles:"Recopilando imágenes del proyecto...",uploading:"Cargando datos al conector Spine...",spineProcessing:"Spine está convirtiendo el proyecto, espere...",downloadingProject:"Descargando el paquete de proyecto Spine generado...",handingToBrowser:"Entregando al navegador para descargar..."},transfer:OO,scene:NO,modifiers:$O,spine:BO,help:UO,errors:VO,language:XO},zO={resizeTimeline:"Faites glisser pour ajuster la hauteur de la timeline",systems:"système",particlesBones:"Particules (os)",rootBone:"os de la racine",hudTip:"Zoom sur la molette · Clic gauche pour faire glisser la toile",title:"Éditeur de particules Spine - Yeomai"},jO={close:"Fermer",reset:"Réinitialiser",add:"Ajouter",remove:"Retirer",delete:"Supprimer",clear:"Effacer",cancel:"Annuler",confirm:"Confirmer",none:"Aucun",enabled:"Activé",disabled:"Désactivé",fixed:"Fixe",random:"Aléatoire",curve:"Courbe",followExport:"Suivre l’export",linear:"Linéaire",bezier:"Bézier",above:"Au-dessus",below:"En dessous",left:"Gauche",right:"Droite",seconds:"s",frames:"images"},HO={settings:"Paramètres",undo:"Annuler (Ctrl+Z)",pan:"Déplacer le canevas (Q)",translate:"Déplacement (W)",rotate:"Rotation (E)",scale:"Échelle (R)",zoomIn:"Zoom avant",zoomOut:"Zoom arrière",fitView:"Ajuster le canevas",toggleGrid:"Afficher/masquer la grille",resetView:"Réinitialiser la vue",background:"Arrière-plan",backgroundSettings:"Paramètres de l’arrière-plan",changeBackground:"Remplacer l’image",uploadBackground:"Importer une image",clearBackground:"Effacer l’arrière-plan",noBackground:"Aucune image",backgroundX:"Décalage X de l'image d'arrière-plan",backgroundY:"Décalage Y de l'image d'arrière-plan",backgroundOpacity:"Transparence de l’image d’arrière-plan",opacity:"Opacité",help:"Aide",openHelp:"Ouvrir l’aide"},GO={title:"Paramètres système",layout:"Disposition de l'interface",parameterPanelPosition:"Emplacement du panneau de paramètres",panelOnRight:"Le panneau de paramètres est affiché à droite",history:"Historique des opérations",maxUndo:"Nombre maximum de pas en arrière",canvasGuides:"Affichage auxiliaire en toile",emitter:"point de lancement",bones:"Connexion osseuse",bonePointSize:"Taille du dessin de la pointe osseuse",boneAxisSize:"Taille du dessin des axes",skinMesh:"maille écorchée",enableTicks:"Activer les ticks",tickFontSize:"Taille du texte à l'échelle",tickWidth:"épaisseur de la graduation",axisColor:"couleur de l'axe",showAxisLabels:"Afficher la valeur de l'échelle",cacheNote:"L'ensemble des paramètres du système sont automatiquement enregistrés dans le navigateur actuel"},WO={title:"Configuration",save:"Enregistrer",saveTitle:"Enregistrez toutes les configurations de l'éditeur (Ctrl+S)",load:"Charger",loadTitle:"Charger la configuration de l'éditeur local",presets:"Liste des préréglages",selectPreset:"Choisir un préréglage",noPresets:"Aucun préréglage",saved:"La configuration a été enregistrée localement",loading:"Chargement de la configuration…",loaded:"Chargé : {name}",presetLoading:"Chargement des préréglages…",presetLoaded:"Préréglage chargé : {name}",presetNamingError:"{message}, veuillez vérifier le nom de fichier par défaut",presetTransferTitle:"Charger le préréglage",presetDownloading:"Téléchargement de {file}…",presetParsing:"Analyse de la configuration par défaut...",presetRestoring:"Analyse et restauration des ressources par défaut...",presetComplete:"Chargement du préréglage terminé",presetListError:"Impossible de lire la liste des préréglages",presetReadError:"Impossible de lire le préréglage : {file}"},qO={bezierHint:"Faites glisser la poignée carrée pour ajuster l'arc · Double-cliquez sur un espace vide pour en créer un nouveau · Double-cliquez sur un nœud pour le supprimer",linearHint:"Double-cliquez sur un espace vide pour en créer un nouveau. Double-cliquez sur un nœud pour le supprimer. Faites glisser un nœud pour l'ajuster.",resetTitle:"Restaurer la courbe par défaut"},KO={addTitle:"Double-cliquez sur le ruban pour ajouter une marque de couleur",color:"Code couleur",colorValue:"Valeur de couleur de l'échelle de couleurs",position:"Position de la marque de couleur",addMiddle:"Ajouter de la couleur au milieu",delete:"Supprimer le patch de couleur actuel",hint:"Double-cliquez sur la bande de couleur pour en ajouter une nouvelle · Faites glisser la marque de couleur pour ajuster sa position · Double-cliquez sur la marque de couleur pour la supprimer"},JO={angleOffset:"Décalage angulaire",value:"valeur numérique",lower:"limite inférieure",upper:"limite supérieure",rangeLower:"Limite inférieure de la plage",rangeUpper:"Gamme supérieure",curveInput:"Entrée de courbe →",direction:"Direction du lancement"},ZO={title:"point pivot de la carte",zoomOut:"dézoomer",zoomIn:"agrandir",expand:"Zoom en mode plein écran",interaction:"Clic gauche/glissez pour définir le point pivot · Clic droit pour faire glisser la toile · Molette de défilement pour zoomer",previewAlt:"Aperçu du point pivot",noImage:"Aucune image sélectionnée",resetCenter:"Repositionner au milieu (50 %, 50 %)",coordinates:"Coordonnées du point de l'axe (%)",rotationTest:"Test de rotation des axes",static:"toujours",spin:"rotation",swing:"balançoire",rotationAlt:"Essai de rotation",topLeft:"en haut à gauche",top:"Tout de suite",topRight:"en haut à droite",left:"Droite gauche",center:"milieu",right:"Droite",bottomLeft:"en bas à gauche",bottom:"Directement en dessous·en bas",bottomRight:"en bas à droite"},QO={chooseSequence:"Sélectionnez des images de séquence",chooseLocal:"Sélectionnez une image locale",subfolder:"sous-dossier",name:"nom",restore:"Restaurer {name}",deleteResource:"Supprimer les ressources d'images",imageMode:"Mode image",fixed:"Image fixe",sequence:"Séquence",playbackMode:"mode de lecture",onceHide:"Une fois, masquer à la fin",onceHold:"Une fois, conserver la dernière image",loopForward:"Boucle avant",loopReverse:"Boucle arrière",playbackFps:"Fréquence d'images de lecture",chooseSequenceMulti:"Sélectionner des images de séquence (sélections multiples)",weight:"Poids %",unlockWeight:"Déverrouiller le verrouillage des proportions",lockWeight:"Verrouiller la proportion actuelle",pivot:"Pivot de texture",collapsePivot:"Réduire l’ajustement du point pivot",expandPivot:"Développer l'ajustement du point pivot",pivotModal:"Point d'axe de rotation de texture, raffinement de grande image",pivotModalDesc:"Cliquez ou faites glisser n'importe où sur la carte ci-dessous pour définir avec précision le centre de rotation/oscillation des particules.",pivotZoomHint:"Prend en charge un grossissement de 100 % à 400 %, une visée précise vers la pointe ou la racine :",confirmPivot:"Déterminer et enregistrer le point pivot",noSequence:"Aucune image de séquence sélectionnée",firstFrame:"Cadre 1",firstImage:"première photo",lastImage:"dernière photo",pivotOn:"Ouvert : X {x}% | Y {y}%",pivotOff:"Non activé, la valeur par défaut se situe autour du centre de l'image (50 %, 50 %)",pivotCustom:"Le point pivot a été personnalisé : X {x}% | Y {y}%",frameCountOne:"1 cadre · {name}",frameCountMany:"Cadre {count} · {first} → {last}",sequenceSelected:"L'image {count} a été sélectionnée et lue dans l'ordre {first}-{last}."},eN={play:"Jouer(D)",pause:"Pause (D)",toStart:"Revenir à la première image (S)",previous:"image précédente",next:"image suivante",toEnd:"Passer à la dernière image",continuousLoop:"Lecture en boucle continue",abLoop:"Boucle indépendante de plage A/B",abLoopShort:"Boucle AB",abRange:"Intervalle de cycle AB",playbackStart:"Image de début de lecture personnalisée",playbackEnd:"Image de fin de lecture personnalisée",startFrame:"Lire l'image de début",endFrame:"Lire l'image de fin",frame:"cadre",emission:"Émission",particleLife:"Particules actives",spineAnimation:"Animation Spine",ownerAnimation:"Animation associée",setOwnerAnimation:"Définir l'animation à laquelle appartient le système de particules actuel",chooseOwnerAnimation:"Sélectionnez l'animation",animationName:"Nom de l'animation",renameAnimation:"Renommer l'animation actuelle",rename:"Rebaptiser",newAnimation:"+ Nouveau",keepOneAnimation:"Au moins une animation doit être conservée",spinePreview:"Animation d'aperçu Spine",noSpineAnimation:"Aucune animation Spine disponible",none:"aucun",systemName:"Système {index}",dragLoopDuration:"Durée du segment de boucle de glisser",dragEmissionDuration:"Durée du glissement",dragSpineStart:"Faites glisser pour ajuster l'heure de début de l'animation",noAnimationData:"Il n'y a actuellement aucune donnée d'animation à afficher.",animationNameEmpty:"Le nom de l'animation ne peut pas être vide",animationNameDuplicate:"Les noms d'animation ne peuvent pas être répétés",animationRenameFailed:"Impossible de modifier le nom de l'animation",zoomIn:"agrandir",zoomOut:"dézoomer",zoomFit:"Modéré",frameStatus:"Image {current} / {total}"},tN={title:"Mode d’émission",reset:"Réinitialiser les paramètres du mode de transmission",stream:"Continu",burst:"Rafale",normalStream:"Continu standard",loopStream:"Boucle continue",rate:"Taux d’émission",duration:"Durée d’émission",loopDuration:"Durée de lancement (f)",generateStart:"Générer une animation de boucle de démarrage",generateEnd:"Générer une animation de fin de boucle",customDuration:"Préciser la durée",auto:"Automatique {frames}f",startLoopDuration:"Durée du segment de démarrage de la boucle",endLoopDuration:"Durée du segment de fin de boucle",loopWarning:"Le mode de persistance de boucle ne prend pas en charge le suivi d'os et le suivi de chemin ; les paramètres de suivi des particules seront restaurés aux valeurs par défaut lors de l'entrée ou de la sortie.",burstCount:"Quantité par rafale",delay:"Délai",shapeTitle:"Forme de l’émetteur",shapeReset:"Réinitialiser les paramètres de forme de l'émetteur",shape:"forme",point:"Point",circle:"Cercle",rect:"Rectangle",cone:"Cône",path:"Chemin",innerDiameter:"diamètre intérieur",outerDiameter:"diamètre extérieur",innerRadius:"rayon intérieur",outerRadius:"rayon extérieur",coneDirection:"Orientation conique",coneAngle:"Angle d'ouverture conique",innerWidth:"largeur intérieure",innerHeight:"Haut à l'intérieur",outerWidth:"Largeur extérieure",outerHeight:"Très haut",selectPath:"Sélectionnez le chemin",noPath:"Pas de chemin (émission ponctuelle)",birthDistribution:"répartition des naissances",evenDistribution:"Distribution fixe équidistante",randomDistribution:"distribution aléatoire",emissionAngle:"angle de lancement",radial:"Radial (centre vers l'extérieur)",pathNormal:"perpendiculaire au chemin",pathTangent:"dans la direction du chemin",fixedAngle:"angle fixe",baseAngle:"angle de base",randomRange:"plage aléatoire",showShape:"montrer la forme"},iN={title:"Attributs des particules",reset:"Réinitialiser les paramètres d'attributs de particules",initialParams:"Valeurs initiales",initialLife:"cycle de vie initial",randomSample:"Échantillonnage aléatoire →",initialSpeed:"vitesse initiale",initialScale:"mise à l'échelle initiale",uniform:"unifié",separateXY:"Séparation XY",scaleX:"ZoomX",scaleY:"Zoom Y",initialRotation:"rotation initiale",lifecycleTitle:"Évolution pendant la durée de vie",speedOverLife:"vitesse du cycle de vie",speedMultiplier:"multiplicateur de vitesse",lifeTo:"cycle de vie →",scaleOverLife:"Échelle pendant le cycle de vie",scaleMultiplier:"Taux de zoom",multiplierX:"Grossissement",multiplierY:"Grossissement Y",rotationOverLife:"Rotation pendant le cycle de vie",rotationSpeed:"Vitesse de rotation"},nN={title:"Apparence et ressources",reset:"Réinitialiser les paramètres d'apparence et de ressources",opacity:"Opacité",curveMode:"Mode courbe",transparent:"0 (transparent)",opaque:"1(opaque)",renderLayer:"Calque de rendu (slot Spine)",top:"niveau supérieur",spineSlot:"Emplacement Spine",selectSpine:"Veuillez sélectionner Spine",noSpine:"Aucun disponible Spine",noSlot:"Aucun créneau sélectionné pour l'instant",reselect:"Sélectionner de nouveau",selectSlot:"Sélectionnez un emplacement",searchSlots:"Rechercher le nom de l'emplacement ou de l'accessoire…",searchSlotsAria:"Rechercher des créneaux",emptySlot:"Emplacement vide",noMatchingSlots:"Aucun emplacement correspondant",above:"au-dessus de cette photo de machine à sous",below:"sous cette photo de machine à sous",followAttachment:"Afficher et masquer avec les accessoires de machines à sous",previewOnly:"Le réglage du niveau d'affichage affecte uniquement l'aperçu de l'éditeur et n'affecte pas les données exportées.",imageResources:"Ressources d’image",addImage:"Ajouter des ressources d'images",scale:"Zoom",color:"couleur",fixedColor:"couleur fixe",randomColor:"couleur aléatoire",lifetime:"cycle de vie",normal:"Normal",add:"Ajout",multiply:"Multiplication",screen:"Écran",fixedColorValue:"valeur de couleur fixe",randomColorHint:"Chaque particule choisit au hasard une couleur sur le ruban à sa naissance et reste inchangée tout au long de son cycle de vie.",independentAlpha:"Opacité indépendante",off:"Désactivé"},sN={slotLabelAbove:"{spine} / {slot} · Photo ci-dessus",slotLabelBelow:"{spine} / {slot} · Sous la photo",resolvedAbove:"Rendu au-dessus de l'image {slot} et en dessous de son emplacement",resolvedBetween:"Rendu entre {previous} et {slot}",warningNoSpine:"Aucun Spine n'est chargé et les particules sont temporairement affichées en haut.",warningNoSelection:"Spine n'a pas encore été sélectionné et les particules sont temporairement affichées en haut.",warningMissingSpine:"La cible Spine n'existe pas et les particules sont temporairement affichées en haut.",warningNotReady:"La cible Spine n'est pas prête et les particules sont temporairement affichées en haut.",warningMissingSlot:"L'emplacement cible n'existe pas (la ressource a peut-être été remplacée) et les particules sont temporairement affichées en haut.",warningFirstSlot:"Il s'agit du premier emplacement et ne peut pas être affiché en dessous, les particules sont temporairement affichées en haut."},rN={completed:"Complété",failed:"L'opération a échoué"},oN={title:"Objets de scène",addParticle:"Ajouter un système de particules",addParticleShort:"+particule",addCollider:"Ajouter un collisionneur",addColliderShort:"+collision",addPath:"ajouter un chemin",addPathShort:"+ chemin",addSpine:"Ajouter Spine",copyTitle:"Copier l'objet de scène actuellement sélectionné",showParticle:"Afficher le système de particules",hideParticle:"Masquer le système de particules",showCollider:"montrer les collisionneurs",hideCollider:"Masquer le collisionneur",showPath:"montrer le chemin",hidePath:"Masquer le chemin",showSpine:"Affichage Spine",hideSpine:"Masquer Spine",particle:"Particules",subEmitter:"Sous-émetteur",collision:"Collision",path:"Chemin",deleteParticle:"Supprimer le système de particules",deleteCollider:"Supprimer les collisionneurs",deletePath:"supprimer le chemin",deleteSpine:"Supprimer Spine",empty:"Il n'y a pas encore d'objets dans la scène",name:"nom",positionX:"Position X",positionY:"Position Y",offsetX:"Décalage X",offsetY:"Décalage Y",rotation:"Rotation",scaleX:"Échelle X",scaleY:"Échelle Y",seed:"Graine aléatoire",seedTitle:"Contrôlez tous les attributs aléatoires, la sélection des ressources et l'échantillonnage aléatoire du modificateur dans le système de particules",randomizeSeed:"Générer une nouvelle graine aléatoire globale",seedHint:"Contrôler les paramètres aléatoires initiaux, la sélection des ressources et l'échantillonnage aléatoire du modificateur ; la même graine peut reproduire le même effet",colliderTitle:"Propriétés du collisionneur",colliderName:"Nom du collisionneur",type:"taper",circle:"rond",ellipse:"ovale",rect:"rectangle",polygon:"polygone",custom:"Personnaliser",enabled:"activer",xPosition:"Position X",yPosition:"Position Y",scaleXShort:"Échelle X",scaleYShort:"Échelle Y",radius:"rayon",radiusX:"Rayon X",radiusY:"Rayon Y",width:"largeur",height:"haut",sides:"Nombre de côtés",collisionResponse:"Réponse en cas d'accident",physics:"Physique (rebond/frottement)",pause:"Pause (arrêter)",destroy:"Disparaître (détruire immédiatement)",elasticity:"Élasticité (0-1)",friction:"Frictions (0-1)",followPath:"Suivez le chemin",targetPath:"chemin cible",notSelected:"(non sélectionné)",moveDuration:"Durée du mouvement (secondes)",followDirection:"direction le long du chemin",moveProgressCurve:"Courbe de progression en mouvement",moveProgressHelp:"Axe horizontal : temps réel/durée du mouvement ; axe vertical : progression du chemin (0=point de départ → 1=point final)",pathTitle:"attribut de chemin",pathName:"nom du chemin",closedPath:"chemin fermé",pathColor:"couleur du chemin",pathHelp:"Mode d'emploi :",pathHelpItems:"Double-cliquez sur l'espace vide/la courbe : créez un nouveau point d'ancrage, double-cliquez sur le point d'ancrage : supprimez le nœud, double-cliquez une deuxième fois et faites glisser : créez-en un nouveau et retirez la poignée, faites glisser le point d'ancrage pour déplacer la position, faites glisser la poignée pour ajuster la courbe, Maj + faites glisser la poignée : complètement symétrique des deux côtés, A lt+glissez la poignée : contrôlez indépendamment un côté, Ctrl+sélection clic/cadre : ajouter les nœuds sélectionnés, Alt+clic/sélection de cadre : soustraire la sélection nœuds, Alt+clic dans l'espace vide : effacez toutes les sélections, sélectionnez plusieurs nœuds et faites-les glisser dans leur ensemble",applyPresetShape:"Appliquer une forme prédéfinie",choosePreset:"Sélectionnez un préréglage...",square:"Carré",star:"forme d'étoile",applyPreset:"Appliquer le préréglage",clearAnchors:"point d'ancrage clair",panelHint:"Utilisez le bouton dans le coin supérieur droit pour créer un objet de scène"},aN={title:"Modificateurs",reset:"Réinitialiser les paramètres du modificateur",damping:"Amortissement",enableNoise:"Activer le bruit de mouvement",strength:"force",noiseRange:"Plage de fluctuation",noiseSpeed:"Débit temporel",noiseHint:"Le contrôle de l'intensité affecte la proportion · La plage de fluctuation contrôle l'écart maximum · Le flux temporel contrôle la vitesse de changement",enableGravity:"Activer la gravité",gravityStrength:"Force de gravité",strengthMin:"Force min.",strengthMax:"Force maximale",direction:"direction",gravityOverLife:"La gravité pendant le cycle de vie",windOverLife:"Vent du cycle de vie",axisStrength:"Axe vertical : intensité 0~1",directionHint:"0° à droite · -90° vers le bas · L'intensité négative inverse la direction",enableWind:"Activer le vent",windStrength:"force du vent",enableForceField:"Activer le champ de force",centerX:"Centre X",centerY:"Centre Y",forceStrength:"Intensité du champ de force",forceRadius:"rayon du champ de force",falloffMode:"mode de désintégration",constant:"Constante (la vitesse ne change pas dans la plage)",linearFalloff:"Atténuation linéaire (le bord est 0)",inverseFalloff:"Inversement proportionnel à la distance (le plus fort au centre)",forceHint:"Les nombres positifs attirent vers le centre, les nombres négatifs se repoussent vers l'extérieur et le cercle du champ de force peut être déplacé dans le canevas.",showShape:"montrer la forme",enableVortex:"Activer le tourbillon",vortexHint:"Nombres positifs dans le sens inverse des aiguilles d'une montre · Nombres négatifs dans le sens des aiguilles d'une montre",enableAttraction:"Activer l’attraction",attractionX:"Point d'adsorption X",attractionY:"Point d'adsorption Y",attractionRadius:"rayon d'adsorption",attractionDuration:"Temps d'adsorption",delay:"Temps de retard",delayMode:"Mode retard",globalTime:"temps unifié",particleLife:"durée de vie d'une seule particule",attractionPath:"Méthode d'adsorption",straight:"ligne droite",attractionHint:"Après un délai, l'adsorption démarre à partir de la position actuelle. Lorsqu'il atteint la zone rouge, il mourra. Le cercle d'adsorption peut être glissé dans la toile.",enableTrail:"Activer la traînée",trailImages:"Images indépendantes de fin",addTrailImage:"Ajouter des ressources d'image de fin",trailRotation:"tourner",trailBones:"Nombre d'os arrière",trailRatio:"Ratio de suivi (%)",trailLength:"Longueur de fuite",randomRange:"plage aléatoire",lengthRatio:"Rapport de longueur (%)",lengthMin:"Longueur minimale (%)",lengthMax:"Longueur maximale (%)",trailWidth:"Largeur de fuite",widthRatio:"rapport de largeur (%)",widthMin:"Largeur minimale (%)",widthMax:"Largeur maximale (%)",widthScale:"mise à l'échelle de la largeur",followParticle:"suivre les particules",lifeLengthCurve:"courbe de longueur du cycle de vie",shapeCurve:"Courbe de forme (largeur tête → queue)",colorMode:"mode couleur",blendMode:"mode de fusion",fixedColor:"couleur fixe",alphaMode:"mode transparence",opacity:"transparence",gridRows:"Nombre de lignes de grille",gridCols:"Nombre de colonnes de grille",trailHint:"Chaque particule génère un ensemble d’os frères et sœurs proportionnels aux ressources ; la longueur et la largeur aléatoires sont déterminées à la naissance de la particule, et la même graine peut être reproduite de manière stable",enableFollow:"Activer le suivi de l’émetteur",followMode:"mode suivi",noFollow:"aucun",followPath:"suivre le chemin",selectedBone:"os sélectionnés",emitterAngleMode:"Mode angle de l'émetteur",fixedAngle:"angle fixe",followMoveDirection:"Suivre la direction du mouvement",moveProgressCurve:"Courbe de progression du mouvement (0→1)",moveDuration:"Durée(s) du mouvement",followSpace:"suivre l'espace",localSpace:"Espace local (mouvement GEN)",worldSpace:"Espace mondial (mouvement du point de génération de particules)",moveDirection:"direction de déplacement",forward:"Suivant (point de départ → point final)",reverse:"Inverse (point final → point de départ)",followOffset:"Point de départ décalé (0-1)",followSpaceHint:"L'espace local déplace l'émetteur tout entier ; l'espace mondial ne déplace que le point d'apparition des nouvelles particules, et les particules nées restent à la position du monde.",followTarget:"Suivez la cible :",noValidBone:"Aucun os valide n'a encore été lié, veuillez d'abord sélectionner l'os dans l'arborescence hiérarchique Spine.",rebind:"relier",bind:"obligatoire",selectedBoneLabel:"Os actuellement sélectionné :",boneLocalSpace:"Espace local (se déplace avec les os)",boneWorldSpace:"Espace mondial (les particules conservent leur position après avoir été générées)",offsetX:"Décalage de déplacement X",offsetY:"Décalage de déplacement Y",rotationOffset:"Décalage de rotation",scaleOffsetX:"Décalage d'échelle X",scaleOffsetY:"Décalage d'échelle Y",boneFollowHint:"L'émetteur suit uniquement la position de l'os Spine sélectionné et n'hérite pas de la rotation ou de la mise à l'échelle de Spine ; la transformation des particules utilise les propres paramètres et le décalage supérieur du système de particules.",enableCollision:"Activer la collision",collisionObjects:"Objets de collision participants",colliderDisabled:"{name} (collisionneurs désactivés)",clearCollider:"Effacer l'objet de collision {name}",addCollider:"Ajouter des objets de collision de scène",noAvailableColliders:"Aucun objet de collision à ajouter",noCollidersSelected:"Aucun objet de collision n'est sélectionné et les particules actuelles n'entreront pas en collision.",available:"Disponible",disabled:"Désactivé",collisionHint:"Seuls les objets de collision de scène ajoutés et activés participeront à la collision du système de particules actuel.",enableSubEmitter:"Activer les sous-émetteurs",triggerTiming:"Choisissez l'heure de déclenchement",birth:"né",death:"mourir",collision:"collision",chooseTarget:"Sélectionnez le système de particules cible",noTarget:"Aucun (système de particules)",deleteSubEmitter:"Supprimer ce sous-émetteur",probability:"probabilité d'émission",collisionLimit:"Limite de collision",inherit:"hériter",colorInheritMode:"Méthode d'héritage des couleurs",add:"Ajouter",replace:"couverture",addSubEmitter:"+ Ajout d'un nouveau sous-émetteur",inheritNone:"Aucun (par défaut)",inheritAll:"Toutes les propriétés",inheritColor:"couleur",inheritScale:"taille",inheritRotation:"tourner",inheritLife:"cycle de vie"},lN={title:"Propriétés Spine",name:"Nom Spine",xPosition:"Position X",yPosition:"Position Y",rotation:"Rotation",scaleX:"Échelle X",scaleY:"Échelle Y",startTime:"Heure de début",resources:"Ressources Spine",chooseFolder:"Sélectionnez le dossier et chargez",folderHint:"Lisez JSON / SKEL, Atlas et toutes les textures d'un dossier en même temps ; les ressources peuvent toujours être remplacées individuellement ci-dessous.",choose:"choisir",chooseMultiple:"Sélectionner (choix multiples)",loading:"chargement…",load:"↧ Charger",clear:"Clair",supportNote:"Prise en charge de Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Chargement à la demande lorsque la version correspondante est en cours d'exécution · Local hors ligne",currentResource:"Ressource actuelle {version}",animations:"Animations Spine",noAnimations:"Aucune animation disponible",timelineAnimation:"Lire l'animation sur la chronologie",no:"aucun",hierarchy:"Hiérarchie",clearBoneTitle:"Cliquez pour effacer la sélection d'os",noBoneTitle:"Aucun os n'est actuellement sélectionné",clearBone:"Effacer les os sélectionnés : {name}",currentBone:"Squelette actuel :",clearSlotTitle:"Cliquez pour effacer la sélection d'emplacement",noSlotTitle:"Aucun emplacement n'est actuellement sélectionné",clearSlot:"Effacer l'emplacement sélectionné : {name}",currentSlot:"Emplacement actuel :",notSelected:"Non sélectionné",expandAll:"Tout développer",collapseAll:"Tout réduire",bones:"squelette",slots:"fente",notLoaded:"Non chargé Spine",searchBones:"Rechercher des os",searchBonesPlaceholder:"Rechercher le nom de l'os…",clearSearch:"Effacer la recherche",clearBoneSearch:"Recherche osseuse claire",noMatchingBones:"Aucun os correspondant trouvé",expandChildren:"Développer les os enfants",collapseChildren:"Réduire les os de l'enfant",notLoadedSlots:"Emplacement Spine non chargé",searchSlots:"Rechercher des créneaux",searchSlotsPlaceholder:"Rechercher le nom de l'emplacement ou de l'accessoire…",clearSlotSearch:"Effacer la recherche de créneau",noMatchingSlots:"Aucun emplacement correspondant trouvé",slotTitle:"{name} (squelette : {bone}, accessoire : {attachment})",empty:"nul",textureSummary:"{count} Zhang : {names}",textureImages:"Images de textures",missingFolderAssets:"Le dossier sélectionné est manquant : {missing}",chooseAssets:"Veuillez sélectionner les données Spine, Atlas et toutes les images de texture dans l'ordre"},cN={title:"Aide",subtitle:"Démarrage rapide de la création de particules à l'enregistrement et à l'exportation",close:"Fermer les instructions",closeShort:"Fermer (Échap)",quickStart:"démarrage rapide",stepCreate:"Créer un objet : utilisez +Particles / +Collision / +Path / +Spine dans « Objet de scène » à gauche pour ajouter un objet de scène.",stepEdit:`Modifier les particules : sélectionnez le système de particules et ajustez "Mode d'émission → Forme de l'émetteur → Propriétés des particules → Apparence et ressources → Modificateur".`,stepPreview:"Vérifiez l'effet : la chronologie inférieure peut être lue, mise en pause, image par image ou glissée ; il sera automatiquement recalculé après modification des paramètres.",stepExport:'Enregistrer et exporter : utilisez « Enregistrer la configuration » pour conserver le projet ; "Exporter le package Spine Json / images / .spine" pour sortir le produit fini.',quickNote:"« Réinitialiser » sur le côté droit du titre de chaque groupe de modules peut restaurer les paramètres par défaut du groupe ; les paramètres système seront automatiquement enregistrés dans le navigateur actuel.",commonOps:"Actions courantes",eye:"petits yeux",eyeDesc:"Afficher/masquer les objets individuellement ; les systèmes de particules cachées ne sont pas exportés.",copyDesc:"Copie entièrement l'objet actuellement sélectionné pour faciliter la comparaison des différents paramètres.",backgroundDesc:"Téléchargez l'image de référence et ajustez la position et la transparence pour l'aperçu du canevas uniquement.",settingsDesc:"La disposition de l'interface de gestion, l'affichage auxiliaire, la balance, etc. sont automatiquement enregistrés dans le navigateur.",undoDesc:"Ctrl+Z se rétracte d'un pas ; le nombre maximum d'étapes peut être ajusté dans les paramètres du système.",spineBoneDesc:"Recherchez et sélectionnez un os dans l'arborescence hiérarchique, qui peut être utilisé par l'émetteur de particules à suivre.",shortcuts:"Raccourcis",undoShortcut:"Annuler l'étape précédente",saveShortcut:"Enregistrer la configuration",panShortcut:"Faites glisser la toile",translateShortcut:"Outil de déplacement",rotateShortcut:"Outil rotatif",scaleShortcut:"Outil Zoom",playShortcut:"lecture/pause",startShortcut:"Revenir à la première image",shortcutNote:"Q / W / E / R devez d'abord cliquer sur la toile ; lorsque le curseur est dans la zone de saisie, la touche de raccourci à touche unique ne sera pas déclenchée.",modules:"Guide des modules",configTitle:"Gestion des configurations",saveConfigDesc:"Enregistrez tous les objets et paramètres de scène actuels en tant que fichiers de projet JSON (Ctrl+S est également pris en charge).",loadConfigDesc:"Sélectionnez le fichier de configuration local pour restaurer le projet complet.",presetDesc:"Sélectionnez une application rapide par défaut dans la liste déroulante ; cliquez sur la liste déroulante pour actualiser la liste.",configScope:"portée",configScopeDesc:"La configuration contient des objets et des paramètres ; les paramètres de l'interface et du système sont stockés séparément dans le navigateur.",sceneTitle:"objet de scène",particleDesc:"objet de base. La position, le décalage, la rotation, la mise à l'échelle et la graine aléatoire peuvent être définis ; la même graine peut reproduire le même effet.",colliderDesc:"Cercle/ellipse/rectangle/polygone/personnalisé, prend en charge le rebond physique, la pause, la destruction et le mouvement le long du chemin.",pathDesc:"Chemin de Bézier avec prise en charge des points d'ancrage, poignées de contrôle, fermeture, couleur et formes prédéfinies.",spineDesc:"Chargez les données Spine, Atlas et les textures, parcourez les os et les emplacements et suivez les émetteurs.",sceneCommonDesc:"Les objets peuvent être révélés et copiés indépendamment ; les systèmes de particules cachées ne sont pas exportés.",emissionDesc:"Tir continu, rafale, retard et durée de boucle en trois étapes de démarrage/boucle/fin.",burstDesc:"Émet un nombre spécifié de particules à la fois.",delayDesc:"Le temps d'attente avant le début de l'émission, correspondant à l'extrémité gauche de la barre de particules.",loopNote:"La persistance de la boucle ne prend pas en charge le suivi des os et des chemins, et les paramètres suivants seront restaurés lors du changement.",shapeDesc:"Zone d'apparition d'un point, d'un cercle, d'un rectangle, d'un cône ou d'un chemin. Les cercles/cônes prennent en charge les rayons internes et externes, et les rectangles prennent en charge la largeur et la hauteur internes et externes.",angleDesc:"Fixe, aléatoire, radial, trajectoire normale ou tangente à la trajectoire.",initialDesc:"Le cycle de vie, la vitesse, la mise à l'échelle et la rotation supportent la direction fixe, aléatoire, la courbe et la rotation peuvent suivre la direction de lancement.",overLifeDesc:"Le grossissement de la vitesse, le grossissement du zoom et la vitesse de rotation peuvent être contrôlés par la courbe du cycle de vie.",alphaDesc:"Supports de transparence fixes ou courbes ; Le mode courbe peut suivre dérivé, linéaire ou Bézier.",imageDesc:"Image unique ou image de séquence, randomisation du poids de plusieurs images, point pivot, couleur, mode de fusion et transparence indépendante.",sequenceDesc:"Les méthodes de lecture incluent le masquage ponctuel, le gel ponctuel, la boucle avant et la boucle inverse.",noiseDesc:"Générez des traces de gigue et contrôlez l’intensité, la portée et la vitesse.",gravityDesc:"Courbes d'intensité de gravité, de vent et de cycle de vie.",forceDesc:"Champs de force globaux, vortex, adsorption et collisions.",trailDesc:"Actifs de fin indépendants, nombre d’os, courbes de longueur, largeur, forme, couleur et transparence.",followDesc:"L'émetteur peut suivre un chemin ou un os Spine.",collisionDesc:"Sélectionnez les objets de collision de scène et les réponses aux collisions de particules.",exportDesc:"Définissez le chemin de l'image, la version Spine, la courbe d'images clés, FPS, les images entières, le pool d'os et l'animation vide.",exportButtonsDesc:"Vous pouvez exporter Spine JSON, des images ZIP ou générer des projets .spine via le connecteur.",connectorTitle:"Mode d'emploi du connecteur Spine",connectorIntro:"Le connecteur transmet le JSON et les images générées par la page Web au Spine qui a été installé et activé sur la machine locale, et les convertit en projets .spine modifiables.",prerequisite:"chargement initial",prerequisiteDesc:"L'ordinateur a Spine installé et activé, et le connecteur de bureau a été lancé.",download:"télécharger",webSide:"page web",webSideDesc:"Une fois que « Connecteur disponible · Spine est prêt » s'affiche, cliquez sur « Exporter le package .spine ».",authorization:"première autorisation",authorizationDesc:"La première connexion doit vérifier la source du site Web et l'autoriser une fois ; cette machine enregistre la liste blanche d'autorisation.",pathSetup:"Paramètres du chemin",pathSetupDesc:"Le connecteur détectera automatiquement Spine ; s'il est introuvable, vous pouvez spécifier manuellement le chemin de l'application.",downloadResult:"Télécharger les résultats",downloadResultDesc:"Obtenez le package ZIP, qui contient le projet .spine et le répertoire d'images.",version:"Version",versionDesc:"Le connecteur correspond automatiquement à Spine 3.8~4.3 selon la version JSON.",security:"Sécurité",securityDesc:"Écoutez uniquement l'adresse locale, l'autorisation est enregistrée dans le connecteur et les fichiers temporaires sont nettoyés après conversion.",differenceTitle:"Quelle est la différence entre configurer et exporter ?",differenceDesc:`« Enregistrer la configuration » enregistre tous les objets et paramètres pouvant être modifiés ; "Exporter Spine Json" exporte uniquement le système de particules affiché et intègre les résultats de collision, de suivi, de fuite et de sous-émetteur dans des données d'animation indépendantes.`},dN={confirmLoopFollowEnter:"Après être entré en mode continu de boucle, les paramètres de suivi des particules seront invalides et restaurés à leur valeur par défaut. Continuer?",confirmLoopFollowExit:"Après avoir quitté le mode de persistance de boucle, les paramètres de suivi des particules seront invalides et restaurés à leurs valeurs par défaut. Continuer?",invalidJson:"Le fichier de configuration n'est pas valide JSON",invalidConfigFormat:"Pas le profil de l'éditeur SpineParticle",unsupportedConfigVersion:"Version de configuration non encore prise en charge : {version}",missingScene:"Le fichier de configuration ne contient pas de données complètes sur la scène",missingEmbeddedSpine:"La configuration ne contient pas de ressources originales Spine réutilisables",chooseJsonConfig:"Veuillez sélectionner un fichier de configuration .json",settingsInvalidJson:"Le cache des paramètres système n'est pas valide JSON",settingsFormat:"Pas le cache des paramètres système de l'éditeur SpineParticle",settingsVersion:"La version de la configuration du système n'est pas encore prise en charge : {version}",settingsMissing:"Le cache des paramètres système ne contient pas de paramètres",noExportableImages:"Il n'y a pas d'images exportables pour le système de particules actuellement visible",invalidZipPath:"ZIP Chemin de fichier invalide",spineFileType:"Les données Spine ne prennent en charge que .json ou .skel",atlasFileType:"Les fichiers Atlas ne prennent en charge que .atlas",chooseTexture:"Veuillez sélectionner au moins une image de texture",binaryParseFailed:"Échec de l'analyse binaire Spine (4.3 : {v43} ; ancienne version : {v42})",invalidSpineJson:"Spine JSON Format de fichier invalide",unsupportedSpineJsonVersion:"La version Spine JSON n'est pas prise en charge, seul {versions} est pris en charge",unsupportedSpineDataVersion:"La version des données Spine n'est pas prise en charge, seul {versions} est pris en charge",embeddedReadFailed:"Impossible de lire le fichier Spine intégré : {name}",missingImageWarning:`L'image "{file}" est manquante ou présente des dimensions illisibles, chemin conservé.`,missingTrailImageWarning:`L'image de fin "{file}" est manquante et le chemin a été conservé.`,emptyCacheWarning:"Aucun framebuffer disponible pour '{name}'.",readExportImageFailed:"Impossible de lire l'image exportée : {name}",connectorOffline:"Connecteur local Spine non détecté, veuillez d'abord activer le connecteur",connectorHttpError:"Le connecteur Spine renvoie l'erreur : HTTP {status}",invalidTrailUV:"Données UV non valides pour le maillage final '{name}'",missingTrailVertices:"Le maillage final '{name}' ne contient pas de données de sommet",trailIndexOutOfRange:"Indice triangulaire du maillage final '{name}' hors limites",invalidTrailHull:`Le numéro de contour extérieur du maillage final "{name}" n'est pas valide`,trailHullIndexOutOfRange:`L'index du bord du contour extérieur du maillage final "{name}" est hors limites`,invalidInfluenceCount:"Le maillage final « {name} » contient un nombre non valide de poids d'os.",missingBoneReference:"Le maillage final '{name}' fait référence à un os inexistant",invalidWeight:'La grille finale "{name}" contient des données de poids non valides',weightSum:"Les poids des sommets du maillage final '{name}' ne totalisent pas 1",vertexCountMismatch:"Le maillage final '{name}' a un nombre incohérent de sommets et d'UV",invalidInherit:"La valeur héritée « {inherit} » pour l'os « {name} » n'est pas conforme au format Spine {version} JSON.",trailBoneParent:`L'os arrière "{name}" doit être directement suspendu sous l'os du système de particules et ne peut pas former de chaîne osseuse.`,trailSlotEmpty:`L'emplacement de queue pondéré "{name}" ne peut pas utiliser de pièces jointes vides. La mise à l'échelle osseuse correspondante doit être fixée à 0 en phase de non-apparition ou de mort.`,spine38Version:"Spine 3.8 L'ID de version exporté doit être 3.8",spine38Inherit:`Spine 3.8 Bone "{name}" doit utiliser la transformation et ne peut pas utiliser l'héritage`,spine38SlotColor:"La chronologie des couleurs de l'emplacement Spine 3.8 doit utiliser color / twoColor",spine38AttachmentName:"Spine 3.8 L'image cachée de la chronologie de la pièce jointe doit être explicitement écrite en nom : null",spine38RotationAngle:"Spine 3.8 Vous devez utiliser l'angle pour faire pivoter l'axe du temps",spine38Curve:"Spine 3.8 ne prend pas en charge le format de courbe de tableau 4.x",unsupportedExportVersion:"La version exportée n'est pas prise en charge, seul Spine {versions} est pris en charge",exportVersionMismatch:"Version d'exportation incohérente : définie sur Spine {expected}, JSON marquée comme Spine {actual}",exportMissingBones:"Le résultat de l'exportation ne contient pas d'os",missingAtlasTexture:"La texture référencée par Atlas n'est pas sélectionnée : {name}"},uN={label:"Langue",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},hN={app:zO,common:jO,toolbar:HO,settings:GO,config:WO,curve:qO,gradient:KO,attributeControl:JO,pivot:ZO,image:QO,timeline:eN,emission:tN,attributes:iN,appearance:nN,renderLayer:sN,export:{title:"Paramètres d’export",reset:"Réinitialiser les paramètres d'exportation",imagesPath:"Chemin de l'image (Chemin des images Spine)",spineVersion:"Version de Spine",keyframeCurve:"Courbe d'interpolation d'images clés",linear:"Linéaire",smoothBezier:"Bézier Lisse (Lisse Bézier)",bezierHelp:"Smooth Bezier s'adapte au mouvement continu dans la tolérance d'erreur ; la naissance, la mort, le changement d'attachement et les mutations utilisent toujours des images clés d'étape.",spine38Help:"Spine 3.8 ne prend pas en charge le tableau Bézier par canal de 4.x et est converti en images clés linéaires par morceaux à tolérance réduite lors de l'exportation.",fps:"FPS d’export",omitFps:"N'écrivez pas de fps",fpsHelp:`Conservez les secondes réelles de l'animation inchangées lors de la modification de FPS ; "Ne pas écrire de fps" omet uniquement les métadonnées fps de Spine.`,integerFrames:"Alignement du cadre entier",bonePool:"Pool d'objets osseux",excludeEmpty:"Exclure les animations sans contenu",baking:"L'animation est recalculée et cuite",exportJsonTitle:"Exporter Spine {version} JSON",preparing:"Préparation à l'exportation...",exportJson:"Exporter Spine JSON",exportImagesTitle:"Téléchargez séparément l'image utilisée par le système de particules actuel ZIP",organizingImages:"Tri des images...",exportImages:"Exporter les images ZIP",generatingProject:"Génération du projet...",exportSpine:"Exporter le package .spine",authorize:"Autoriser le site Web actuel",authorizeTitle:"Autoriser le site web actuel dans le connecteur natif",refreshConnector:"Revérifiez le connecteur",refresh:"rafraîchir",recalculating:"Recalcul de l'animation des particules...",exported:"Spine {version} exportés : systèmes de particules {systems}, animations {animations}, os racinaires {bones} {warning}",resourceWarning:";{count} astuces sur les ressources (les images manquantes sont toujours exportées)",timeout:"Recalcul du délai d'expiration de l'animation, veuillez confirmer que la page est toujours en cours d'exécution et réessayer",preparingProject:"Trier les images et appeler cette machine Spine…",projectExported:"{fileName} a été généré : y compris le projet .spine et les images {images}, Spine {version}",collectingImages:"Rassembler les images actuellement utilisées par le système de particules...",imagesExported:"{fileName} a été généré : {folder}/ contient des images {images}",connectorChecking:"Détection du connecteur Spine local...",connectorOffline:"Le connecteur Spine local n’est pas démarré",spineNotFound:"Le connecteur est démarré, mais Spine est introuvable",notAuthorized:"Le connecteur est démarré, mais ce site n’est pas autorisé",connectorReady:"Connecteur disponible · Spine prêt",connectorBusy:"Recalcul et génération du projet Spine",connectorGenerate:"Générer un projet Spine {version} avec Spine local",unknown:"inconnu",checking:"Vérification",offline:"Hors ligne",notFound:"Spine introuvable",unauthorized:"Non autorisé",projectTransferTitle:"Exporter le package Spine",projectTransferDetail:"Recalcul de l'animation des particules...",projectTransferDownload:"Le package du projet Spine a été téléchargé",generatingJson:"Génération de Spine JSON…",preparingProjectFiles:"Rassemblement des photos du projet...",uploading:"Téléchargement des données vers le connecteur Spine...",spineProcessing:"Spine est en train de convertir le projet, veuillez patienter...",downloadingProject:"Téléchargement du package de projet Spine généré...",handingToBrowser:"Passage au navigateur pour le téléchargement..."},transfer:rN,scene:oN,modifiers:aN,spine:lN,help:cN,errors:dN,language:uN},fN={resizeTimeline:"ドラッグしてタイムラインの高さを調整します",systems:"システム",particlesBones:"粒子(骨)",rootBone:"根の骨",hudTip:"ホイールズーム・左クリックでキャンバスをドラッグ",title:"Spineパーティクルエディター-Yeomai"},pN={close:"閉じる",reset:"リセット",add:"追加",remove:"削除",delete:"削除",clear:"クリア",cancel:"キャンセル",confirm:"確定",none:"なし",enabled:"有効",disabled:"無効",fixed:"固定",random:"ランダム",curve:"カーブ",followExport:"エクスポート設定に従う",linear:"リニア",bezier:"ベジェ",above:"上",below:"下",left:"左",right:"右",seconds:"秒",frames:"フレーム"},mN={settings:"設定",undo:"元に戻す (Ctrl+Z)",pan:"キャンバス移動 (Q)",translate:"移動 (W)",rotate:"回転 (E)",scale:"拡大縮小 (R)",zoomIn:"拡大",zoomOut:"縮小",fitView:"キャンバスに合わせる",toggleGrid:"グリッド切替",resetView:"ビューをリセット",background:"背景",backgroundSettings:"背景画像設定",changeBackground:"画像を変更",uploadBackground:"画像をアップロード",clearBackground:"背景をクリア",noBackground:"画像なし",backgroundX:"背景画像のXオフセット",backgroundY:"背景画像のYオフセット",backgroundOpacity:"背景画像の透明度",opacity:"不透明度",help:"ヘルプ",openHelp:"ヘルプを開く"},gN={title:"システム設定",layout:"インターフェースのレイアウト",parameterPanelPosition:"パラメータパネルの位置",panelOnRight:"パラメータパネルは右側に表示されます",history:"動作履歴",maxUndo:"戻る最大ステップ数",canvasGuides:"キャンバス補助ディスプレイ",emitter:"発射点",bones:"骨の接続",bonePointSize:"骨点描画サイズ",boneAxisSize:"軸描画サイズ",skinMesh:"スキンメッシュ",enableTicks:"ティックを有効にする",tickFontSize:"文字サイズの拡大縮小",tickWidth:"目盛りの太さ",axisColor:"軸の色",showAxisLabels:"表示スケール値",cacheNote:"システム設定全体が現在のブラウザに自動的に保存されます"},vN={title:"設定管理",save:"設定を保存",saveTitle:"すべてのエディタ設定を保存する (Ctrl+S)",load:"設定を読み込む",loadTitle:"ローカルエディタ設定をロードする",presets:"プリセットリスト",selectPreset:"プリセットを選択",noPresets:"プリセットなし",saved:"設定はローカルに保存されました",loading:"設定を読み込み中…",loaded:"ロード済み: {name}",presetLoading:"プリセットをロード中…",presetLoaded:"ロードされたプリセット: {name}",presetNamingError:"{message}、デフォルトのファイル名を確認してください",presetTransferTitle:"プリセットをロードする",presetDownloading:"{file}をダウンロード中…",presetParsing:"デフォルト設定を解析しています...",presetRestoring:"デフォルトのリソースを解析して復元しています...",presetComplete:"プリセットのロードが完了しました",presetListError:"プリセットリストを読み取れません",presetReadError:"プリセットを読み取れません: {file}"},bN={bezierHint:"四角いハンドルをドラッグして円弧を調整します。 · 空白スペースをダブルクリックして新しいスペースを作成します。 · ノードをダブルクリックして削除します。",linearHint:"空白スペースをダブルクリックして、新しいスペースを作成します。ノードをダブルクリックして削除します。ノードをドラッグして調整します。",resetTitle:"デフォルトのカーブを復元する"},yN={addTitle:"リボンをダブルクリックしてカラーマークを追加します",color:"カラーコード",colorValue:"カラースケールのカラー値",position:"カラーマーク位置",addMiddle:"真ん中に色を入れる",delete:"現在のカラーパッチを削除します",hint:"カラーバンドをダブルクリックして新規追加・カラーマークをドラッグして位置を調整・カラーマークをダブルクリックして削除"},xN={angleOffset:"角度オフセット",value:"数値",lower:"下限",upper:"上限",rangeLower:"範囲の下限",rangeUpper:"上限範囲",curveInput:"曲線入力→",direction:"発射方向"},wN={title:"マップのピボットポイント",zoomOut:"ズームアウト",zoomIn:"拡大する",expand:"全画面へのズーム操作",interaction:"左クリック/ドラッグしてピボット ポイントを設定します。 · 右クリックしてキャンバスをドラッグします。 · スクロール ホイールでズームします。",previewAlt:"ピボットポイントのプレビュー",noImage:"画像が選択されていません",resetCenter:"中央に再配置 (50%、50%)",coordinates:"軸点座標(%)",rotationTest:"軸回転試験",static:"まだ",spin:"回転",swing:"スイング",rotationAlt:"回転試験",topLeft:"左上",top:"すぐ上",topRight:"右上",left:"右左",center:"真ん中",right:"右",bottomLeft:"左下",bottom:"真下・底",bottomRight:"右下"},SN={chooseSequence:"連番フレーム画像を選択",chooseLocal:"ローカル画像を選択",subfolder:"サブフォルダー",name:"名前",restore:"{name}を復元する",deleteResource:"画像リソースを削除する",imageMode:"ピクチャーモード",fixed:"固定",sequence:"シーケンス",playbackMode:"プレイモード",onceHide:"1回・最終フレームで非表示",onceHold:"1回・最終フレームを保持",loopForward:"正方向ループ",loopReverse:"逆方向ループ",playbackFps:"再生フレームレート",chooseSequenceMulti:"シーケンスフレームの選択(複数選択)",weight:"重み %",unlockWeight:"プロポーションロックを解除する",lockWeight:"現在の比率をロックする",pivot:"テクスチャピボット",collapsePivot:"折り畳むピボットポイントの調整",expandPivot:"ピボットポイントの調整を拡張する",pivotModal:"テクスチャ回転軸ポイント大画面リファインメント",pivotModalDesc:"下のマップ上の任意の場所をクリックまたはドラッグして、パーティクルの回転/スイング中心を正確に設定します。",pivotZoomHint:"100% ~ 400% の倍率をサポートし、先端または根元を正確に狙うことができます。",confirmPivot:"ピボットポイントを決定して保存する",noSequence:"シーケンスフレームが選択されていません",firstFrame:"フレーム 1",firstImage:"最初の写真",lastImage:"最後の写真",pivotOn:"オープン済み: X {x}% | Y {y}%",pivotOff:"オンになっていません。デフォルトは画像の中心付近 (50%、50%)",pivotCustom:"ピボット ポイントがカスタマイズされました: X {x}% | Y {y}%",frameCountOne:"1フレーム・{name}",frameCountMany:"{count}フレーム・{first}→{last}",sequenceSelected:"{count} フレームが選択され、{first}-{last} の順序で再生されます"},CN={play:"プレイ(D)",pause:"一時停止(D)",toStart:"最初のフレームに戻る(S)",previous:"前のフレーム",next:"次のフレーム",toEnd:"最後のフレームに移動",continuousLoop:"連続ループ再生",abLoop:"独立した A/B 区間ループ",abLoopShort:"AB ループ",abRange:"AB サイクル間隔",playbackStart:"カスタム再生開始フレーム",playbackEnd:"カスタム再生終了フレーム",startFrame:"再生開始フレーム",endFrame:"再生終了フレーム",frame:"フレーム",emission:"放出中",particleLife:"パーティクル存在",spineAnimation:"Spine アニメーション",ownerAnimation:"所属アニメーション",setOwnerAnimation:"現在のパーティクル システムが属するアニメーションを設定します",chooseOwnerAnimation:"アニメーションを選択してください",animationName:"アニメ名",renameAnimation:"現在のアニメーションの名前を変更する",rename:"名前の変更",newAnimation:"+ 新しい",keepOneAnimation:"少なくとも 1 つのアニメーションを保持する必要があります",spinePreview:"Spine プレビュー アニメーション",noSpineAnimation:"利用できる Spine アニメーションはありません",none:"なし",systemName:"システム {index}",dragLoopDuration:"ドラッグループセグメントの継続時間",dragEmissionDuration:"ドラッグ時間",dragSpineStart:"ドラッグしてアニメーションの開始時間を調整します",noAnimationData:"現在、表示するアニメーション データがありません。",animationNameEmpty:"アニメーション名を空にすることはできません",animationNameDuplicate:"アニメーション名を繰り返すことはできません",animationRenameFailed:"アニメーション名は変更できません",zoomIn:"拡大する",zoomOut:"ズームアウト",zoomFit:"適度",frameStatus:"フレーム {current} / {total}"},AN={title:"エミッションモード",reset:"送信モードパラメータをリセット",stream:"ストリーム",burst:"バースト",normalStream:"通常ストリーム",loopStream:"ループストリーム",rate:"放出レート",duration:"放出時間",loopDuration:"発射持続時間 (f)",generateStart:"開始ループアニメーションを生成する",generateEnd:"ループ終了アニメーションを生成する",customDuration:"期間を指定する",auto:"自動{frames}f",startLoopDuration:"ループセグメントの開始時間",endLoopDuration:"ループセグメントの終了時間",loopWarning:"ループ永続モードは、ボーン追跡とパス追跡をサポートしていません。パーティクルの次の設定は、開始または終了時にデフォルト値に復元されます。",burstCount:"一度の放出数",delay:"遅延時間",shapeTitle:"エミッター形状",shapeReset:"エミッタ形状パラメータをリセット",shape:"形",point:"点",circle:"円",rect:"矩形",cone:"円錐",path:"パス",innerDiameter:"内径",outerDiameter:"外径",innerRadius:"内半径",outerRadius:"外半径",coneDirection:"テーパ方向",coneAngle:"テーパー開き角度",innerWidth:"内幅",innerHeight:"高い内側",outerWidth:"外幅",outerHeight:"エクストラハイ",selectPath:"パスの選択",noPath:"パスなし (ポイント放出)",birthDistribution:"出生分布",evenDistribution:"等間隔固定分布",randomDistribution:"ランダムな分布",emissionAngle:"打ち出し角",radial:"ラジアル(中心外側)",pathNormal:"パスに対して垂直",pathTangent:"パス方向に沿って",fixedAngle:"固定角度",baseAngle:"底角",randomRange:"ランダムな範囲",showShape:"形状を表示"},TN={title:"パーティクル属性",reset:"パーティクル属性パラメータをリセット",initialParams:"パーティクル初期値",initialLife:"初期ライフサイクル",randomSample:"ランダムサンプリング →",initialSpeed:"初速",initialScale:"初期スケーリング",uniform:"統一された",separateXY:"XY分離",scaleX:"ズームX",scaleY:"ズームY",initialRotation:"初期回転",lifecycleTitle:"ライフタイム中の変化",speedOverLife:"ライフサイクル速度",speedMultiplier:"スピードマルチプライヤー",lifeTo:"ライフサイクル →",scaleOverLife:"ライフサイクル中のスケーリング",scaleMultiplier:"ズーム倍率",multiplierX:"倍率",multiplierY:"倍率Y",rotationOverLife:"ライフサイクル中に回転する",rotationSpeed:"回転速度"},EN={title:"外観とリソース",reset:"外観とリソースのパラメータをリセットする",opacity:"不透明度",curveMode:"カーブモード",transparent:"0(透明)",opaque:"1(不透明)",renderLayer:"レンダー階層(Spine スロット)",top:"トップレベル",spineSlot:"Spineスロット",selectSpine:"Spineを選択してください",noSpine:"利用可能なものはありません",noSlot:"スロットがまだ選択されていません",reselect:"再選択",selectSlot:"スロットを選択",searchSlots:"スロット名またはアクセサリ名を検索してください…",searchSlotsAria:"スロットを検索する",emptySlot:"空のスロット",noMatchingSlots:"一致するスロットがありません",above:"このスロットの絵の上に",below:"このスロットの絵の下に",followAttachment:"スロットアクセサリの表示と非表示を切り替える",previewOnly:"表示レベルの調整はエディターのプレビューにのみ影響し、エクスポートされたデータには影響しません。",imageResources:"画像リソース",addImage:"画像リソースを追加する",scale:"ズーム",color:"色",fixedColor:"固定色",randomColor:"ランダムな色",lifetime:"ライフサイクル",normal:"通常",add:"加算",multiply:"乗算",screen:"スクリーン",fixedColorValue:"固定色の値",randomColorHint:"各パーティクルは、生成時にリボンからランダムに色を選択し、ライフ サイクルを通じて変更されません。",independentAlpha:"独立した不透明度",off:"オフ"},_N={slotLabelAbove:"{spine} / {slot} · 上の写真",slotLabelBelow:"{spine} / {slot} · 写真の下",resolvedAbove:"{slot} イメージの上とそのスロットの下にレンダリングされます",resolvedBetween:"{previous} と {slot} の間でレンダリング",warningNoSpine:"Spine はロードされておらず、パーティクルが一時的に上部に表示されます。",warningNoSelection:"Spine はまだ選択されておらず、パーティクルが一時的に上部に表示されます。",warningMissingSpine:"ターゲットの Spine が存在しないため、パーティクルが一時的に上に表示されます。",warningNotReady:"ターゲット Spine の準備ができていないため、パーティクルが一時的に上部に表示されます。",warningMissingSlot:"ターゲット スロットが存在せず (リソースが置き換えられた可能性があります)、パーティクルが一時的に上部に表示されます。",warningFirstSlot:"これは最初のスロットであり、その下に表示することはできません。パーティクルは一時的に上に表示されます。"},MN={completed:"完了",failed:"操作が失敗しました"},PN={title:"シーンオブジェクト",addParticle:"パーティクルシステムを追加",addParticleShort:"+粒子",addCollider:"コライダーの追加",addColliderShort:"+衝突",addPath:"パスを追加",addPathShort:"+ パス",addSpine:"Spineを追加",copyTitle:"現在選択されているシーン オブジェクトをコピーします",showParticle:"パーティクル システムを表示する",hideParticle:"パーティクル システムを非表示にする",showCollider:"コライダーを表示",hideCollider:"コライダーを非表示にする",showPath:"パスを表示",hidePath:"パスを非表示にする",showSpine:"表示 Spine",hideSpine:"隠す",particle:"パーティクル",subEmitter:"サブエミッター",collision:"コリジョン",path:"パス",deleteParticle:"パーティクル システムの削除",deleteCollider:"コライダーの削除",deletePath:"パスを削除する",deleteSpine:"Spineを削除",empty:"シーンにはまだオブジェクトがありません",name:"名前",positionX:"X 位置",positionY:"Y 位置",offsetX:"X オフセット",offsetY:"Y オフセット",rotation:"回転",scaleX:"X スケール",scaleY:"Y スケール",seed:"ランダムシード",seedTitle:"パーティクル システム内のすべてのランダム アトリビュート、リソースの選択、モディファイアのランダム サンプリングを制御します。",randomizeSeed:"新しいグローバルランダムシードを生成する",seedHint:"初期ランダムパラメータ、リソース選択、および修飾子のランダムサンプリングを制御します。同じ種で同じ効果が再現できる",colliderTitle:"コライダーのプロパティ",colliderName:"コライダー名",type:"タイプ",circle:"ラウンド",ellipse:"楕円形",rect:"矩形",polygon:"ポリゴン",custom:"カスタマイズ",enabled:"有効にする",xPosition:"X 位置",yPosition:"Y 位置",scaleXShort:"X スケール",scaleYShort:"Y スケール",radius:"半径",radiusX:"X半径",radiusY:"Y半径",width:"幅",height:"高い",sides:"辺の数",collisionResponse:"クラッシュレスポンス",physics:"物理学 (バウンス/摩擦)",pause:"一時停止(停止)",destroy:"消えます(すぐに破壊します)",elasticity:"弾力性 (0-1)",friction:"摩擦 (0-1)",followPath:"道をたどってください",targetPath:"ターゲットパス",notSelected:"(選択されていません)",moveDuration:"移動時間(秒)",followDirection:"パスに沿った方向",moveProgressCurve:"進行曲線の移動",moveProgressHelp:"横軸: リアルタイム/移動時間。縦軸: パスの進行状況 (0=開始点 → 1=終了点)",pathTitle:"パス属性",pathName:"パス名",closedPath:"閉じたパス",pathColor:"パスの色",pathHelp:"操作説明:",pathHelpItems:"空白スペース/曲線をダブルクリック: 新しいアンカーポイントを作成、アンカーポイントをダブルクリック: ノードを削除、2 回目のダブルクリックしてドラッグ: 新しいノードを作成してハンドルを引き出し、アンカーポイントをドラッグして位置を移動、ハンドルをドラッグして曲線を調整、Shift + ハンドルをドラッグ: 両側で完全に対称、Alt+ ハンドルをドラッグ: 片側を独立して制御、Ctrl+クリック/フレーム選択: 選択したノードを追加、Alt+クリック/フレーム選択:選択したノードを減算し、Alt キーを押しながら空白スペースをクリックします。すべての選択をクリアし、複数のノードを選択して全体としてドラッグします。",applyPresetShape:"プリセット形状を適用する",choosePreset:"プリセットを選択...",square:"四角",star:"星形",applyPreset:"プリセットを適用する",clearAnchors:"明確なアンカーポイント",panelHint:"右上隅のボタンを使用してシーン オブジェクトを作成します"},IN={title:"モディファイア",reset:"モディファイアパラメータをリセット",damping:"減衰",enableNoise:"移動ノイズを有効化",strength:"強さ",noiseRange:"変動幅",noiseSpeed:"時間流量",noiseHint:"強度制御は比率に影響を与える ・変動範囲は最大偏差を制御する ・時間の流れは変化速度を制御する",enableGravity:"重力を有効化",gravityStrength:"重力の強さ",strengthMin:"最小強度",strengthMax:"強度最大値",direction:"方向",gravityOverLife:"ライフサイクル中の重力",windOverLife:"ライフサイクルの風",axisStrength:"縦軸:強度0~1",directionHint:"右 0°、下 -90°、負の強度で方向を反転",enableWind:"風を有効化",windStrength:"風の強さ",enableForceField:"フォースフィールドを有効化",centerX:"センターX",centerY:"センターY",forceStrength:"力場の強さ",forceRadius:"力場の半径",falloffMode:"ディケイモード",constant:"一定(範囲内で速度が変化しない)",linearFalloff:"リニアフォールオフ(エッジは0)",inverseFalloff:"距離に反比例(中心が最も強くなる)",forceHint:"正の数は中心に向かって引き寄せられ、負の数は外側に反発し、力場の円をキャンバス内でドラッグできます。",showShape:"形状を表示",enableVortex:"渦を有効化",vortexHint:"正の数は反時計回り、負の数は時計回り",enableAttraction:"吸着を有効化",attractionX:"吸着点X",attractionY:"吸着点Y",attractionRadius:"吸着半径",attractionDuration:"吸着時間",delay:"遅延時間",delayMode:"ディレイモード",globalTime:"統一時間",particleLife:"単一粒子の寿命",attractionPath:"吸着法",straight:"直線",attractionHint:"遅延後、現在位置から吸着を開始します。赤い範囲に到達すると死亡します。吸着円はキャンバス内でドラッグすることができます。",enableTrail:"トレイルを有効化",trailImages:"独立した画像を後続する",addTrailImage:"末尾の画像リソースを追加する",trailRotation:"回転させる",trailBones:"後続ボーンの数",trailRatio:"トレーリング率(%)",trailLength:"トレーリングの長さ",randomRange:"ランダムな範囲",lengthRatio:"長さ比率(%)",lengthMin:"最小長さ (%)",lengthMax:"最大長さ(%)",trailWidth:"トレーリング幅",widthRatio:"幅比(%)",widthMin:"幅の最小値 (%)",widthMax:"最大幅(%)",widthScale:"幅のスケーリング",followParticle:"粒子を追跡する",lifeLengthCurve:"ライフサイクル長曲線",shapeCurve:"形状カーブ(ヘッド→テール幅)",colorMode:"カラーモード",blendMode:"ブレンドモード",fixedColor:"固定色",alphaMode:"透明度モード",opacity:"透明性",gridRows:"グリッド行数",gridCols:"グリッド列の数",trailHint:"各パーティクルは、リソースに応じて一連の兄弟末尾ボーンを生成します。パーティクル誕生時にランダムな長さと幅が決まり、同じ種を安定して再現できる",enableFollow:"エミッター追従を有効化",followMode:"フォローモード",noFollow:"なし",followPath:"道をたどってください",selectedBone:"選択されたボーン",emitterAngleMode:"送信機角度モード",fixedAngle:"固定角度",followMoveDirection:"進行方向に従ってください",moveProgressCurve:"動作進行曲線(0→1)",moveDuration:"移動時間(秒)",followSpace:"スペースに従ってください",localSpace:"ローカル空間(GEN動作)",worldSpace:"ワールド空間(パーティクル生成点の移動)",moveDirection:"進行方向",forward:"前進(始点→終点)",reverse:"リバース(終点→始点)",followOffset:"オフセット開始点(0-1)",followSpaceHint:"ローカル空間はエミッタ全体を移動します。ワールド空間は新しいパーティクルのスポーン ポイントを移動するだけで、生成されたパーティクルはワールド位置に留まります。",followTarget:"目標に従ってください:",noValidBone:"有効なボーンがまだバインドされていません。最初に Spine 階層ツリーでボーンを選択してください。",rebind:"再バインド",bind:"バインディング",selectedBoneLabel:"現在選択されているボーン:",boneLocalSpace:"ローカル空間(ボーンと一緒に動きます)",boneWorldSpace:"ワールド空間 (パーティクルは生成後に位置を維持します)",offsetX:"変位オフセットX",offsetY:"変位オフセットY",rotationOffset:"回転オフセット",scaleOffsetX:"スケールオフセットX",scaleOffsetY:"スケールオフセットY",boneFollowHint:"エミッタは、選択した Spine ボーンの位置のみに従い、Spine の回転やスケーリングを継承しません。パーティクル変換では、パーティクル システム独自のパラメータと上限オフセットが使用されます。",enableCollision:"コリジョンを有効化",collisionObjects:"参加している衝突オブジェクト",colliderDisabled:"{name} (コライダー無効)",clearCollider:"衝突オブジェクトをクリア {name}",addCollider:"シーン衝突オブジェクトを追加する",noAvailableColliders:"追加する衝突オブジェクトはありません",noCollidersSelected:"衝突オブジェクトが選択されていないため、現在のパーティクルは衝突しません。",available:"利用可能",disabled:"無効",collisionHint:"追加および有効化されたシーン衝突オブジェクトのみが、現在のパーティクル システムの衝突に参加します。",enableSubEmitter:"サブエミッターを有効化",triggerTiming:"トリガー時間を選択してください",birth:"生まれる",death:"死ぬ",collision:"衝突",chooseTarget:"ターゲットパーティクルシステムを選択してください",noTarget:"なし (パーティクル システム)",deleteSubEmitter:"このサブエミッタを削除します",probability:"放出確率",collisionLimit:"衝突限界",inherit:"継承する",colorInheritMode:"色の継承方法",add:"追加",replace:"カバー",addSubEmitter:"+ 新しいサブエミッターを追加",inheritNone:"なし (デフォルト)",inheritAll:"すべてのプロパティ",inheritColor:"色",inheritScale:"サイズ",inheritRotation:"回転させる",inheritLife:"ライフサイクル"},kN={title:"Spine プロパティ",name:"Spine 名前",xPosition:"X 位置",yPosition:"Y 位置",rotation:"回転",scaleX:"X スケール",scaleY:"Y スケール",startTime:"開始時間",resources:"Spine リソース",chooseFolder:"フォルダを選択してロードする",folderHint:"JSON / SKEL、Atlas、およびフォルダー内のすべてのテクスチャを一度に読み取ります。リソースは引き続き以下で個別に置き換えることができます。",choose:"選ぶ",chooseMultiple:"選択(複数の選択肢)",loading:"読み込み中…",load:"↧ ロード",clear:"クリア",supportNote:"Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSONをサポート · 対応するバージョンの実行時にオンデマンドでロード · ローカルオフライン",currentResource:"現在のリソース {version}",animations:"Spine アニメーション",noAnimations:"利用できるアニメーションはありません",timelineAnimation:"タイムライン上でアニメーションを再生する",no:"なし",hierarchy:"階層ツリー",clearBoneTitle:"クリックしてボーンの選択をクリアします",noBoneTitle:"現在ボーンが選択されていません",clearBone:"選択したボーンをクリア: {name}",currentBone:"現在のスケルトン:",clearSlotTitle:"クリックしてスロットの選択をクリアします",noSlotTitle:"現在スロットが選択されていません",clearSlot:"選択したスロットをクリア: {name}",currentSlot:"現在のスロット:",notSelected:"未選択",expandAll:"すべて展開",collapseAll:"すべて折りたたむ",bones:"スケルトン",slots:"スロット",notLoaded:"ロードされていません Spine",searchBones:"骨を探す",searchBonesPlaceholder:"ボーン名を検索…",clearSearch:"検索をクリア",clearBoneSearch:"クリアボーン検索",noMatchingBones:"一致するボーンが見つかりません",expandChildren:"子ボーンを展開する",collapseChildren:"子ボーンを折りたたむ",notLoadedSlots:"Spine スロットがロードされていません",searchSlots:"スロットを検索する",searchSlotsPlaceholder:"スロット名またはアクセサリ名を検索してください…",clearSlotSearch:"スロット検索をクリアする",noMatchingSlots:"一致するスロットが見つかりません",slotTitle:"{name}(スケルトン:{bone}、アタッチメント:{attachment})",empty:"ヌル",textureSummary:"{count} 張: {names}",textureImages:"テクスチャ画像",missingFolderAssets:"選択したフォルダーが見つかりません: {missing}",chooseAssets:"Spine データ、Atlas、およびすべてのテクスチャ画像を順番に選択してください"},RN={title:"ヘルプ",subtitle:"パーティクルの作成から保存、エクスポートまでクイックスタート",close:"指示を閉じる",closeShort:"閉じる (Esc)",quickStart:"クイックスタート",stepCreate:"オブジェクトの作成: 左側の「シーン オブジェクト」で +Particles / +Collision / +Path / +Spine を使用して、シーン オブジェクトを追加します。",stepEdit:"パーティクルの編集: パーティクル システムを選択し、「放出モード → エミッタ形状 → パーティクル プロパティ → 外観とリソース → モディファイア」を調整します。",stepPreview:"効果を確認します: 下部のタイムラインは再生、一時停止、フレームごと、またはドラッグできます。パラメータを変更すると、自動的に再計算されます。",stepExport:"保存とエクスポート: 「設定の保存」を使用してプロジェクトを保持します。 「Spine Json/images package/.spine packageをエクスポート」で完成品を出力します。",quickNote:"各モジュールグループのタイトルの右側にある「リセット」をクリックすると、グループのデフォルトパラメータを復元できます。システム設定は現在のブラウザに自動的に保存されます。",commonOps:"よく使う操作",eye:"小さな目",eyeDesc:"オブジェクトを個別に表示/非表示にします。非表示のパーティクル システムはエクスポートされません。",copyDesc:"現在選択されているオブジェクトを完全にコピーして、さまざまなパラメータの比較を容易にします。",backgroundDesc:"参照画像をアップロードし、キャンバスプレビューのみ位置と透明度を調整します。",settingsDesc:"管理インターフェイスのレイアウト、補助表示、スケールなどはブラウザに自動的に保存されます。",undoDesc:"Ctrl+Z は 1 ステップ後退します。最大ステップ数はシステム設定で調整できます。",spineBoneDesc:"階層ツリーでボーンを検索して選択します。これは、追跡するパーティクル エミッタで使用できます。",shortcuts:"ショートカット",undoShortcut:"前のステップを元に戻す",saveShortcut:"設定の保存",panShortcut:"キャンバスをドラッグする",translateShortcut:"変位ツール",rotateShortcut:"回転工具",scaleShortcut:"ズームツール",playShortcut:"再生/一時停止",startShortcut:"最初のフレームに戻る",shortcutNote:"Q / W / E / R は最初にキャンバスをクリックする必要があります。カーソルが入力ボックス内にある場合、単一キーのショートカット キーはトリガーされません。",modules:"機能モジュール",configTitle:"構成管理",saveConfigDesc:"現在のシーン オブジェクトとパラメータをすべてプロジェクト JSON ファイルとして保存します (Ctrl+S もサポートされています)。",loadConfigDesc:"ローカル構成ファイルを選択して、完全なプロジェクトを復元します。",presetDesc:"ドロップダウンからデフォルトのクイック適用を選択します。ドロップダウンをクリックしてリストを更新します。",configScope:"範囲",configScopeDesc:"設定にはオブジェクトとパラメータが含まれます。インターフェースとシステム設定はブラウザーに別々に保存されます。",sceneTitle:"シーンオブジェクト",particleDesc:"コアオブジェクト。位置、オフセット、回転、スケーリング、ランダム シードを設定できます。同じ種は同じ効果を再現できます。",colliderDesc:"円/楕円/長方形/多角形/カスタム、物理的なバウンス、一時停止、破壊、パスに沿った移動をサポートします。",pathDesc:"アンカー ポイント、コントロール ハンドル、クロージャー、カラー、プリセット形状をサポートするベジェ パス。",spineDesc:"Spine データ、Atlas およびテクスチャをロードし、ボーンとスロットを参照し、エミッタを追跡します。",sceneCommonDesc:"オブジェクトは個別に公開およびコピーできます。非表示のパーティクル システムはエクスポートされません。",emissionDesc:"連射、バースト、ディレイ、開始/ループ/終了の3段階ループ持続時間。",burstDesc:"指定した数のパーティクルを一度に放出します。",delayDesc:"パーティクル バーの左端に対応する、放出が開始されるまでの待ち時間。",loopNote:"ループ永続性はボーンとパスのフォローをサポートしていません。切り替え時に次の設定が復元されます。",shapeDesc:"点、円、長方形、円錐、またはパスの生成エリア。円/円錐は内部半径と外部半径をサポートし、長方形は内部と外部の幅と高さをサポートします。",angleDesc:"固定、ランダム、放射状、パス法線、またはパス接線。",initialDesc:"ライフサイクル、速度、スケーリング、回転は、固定、ランダム、カーブ、および回転をサポートしており、起動方向に従うことができます。",overLifeDesc:"ライフサイクルカーブにより速度倍率、ズーム倍率、回転速度を制御できます。",alphaDesc:"透明度は固定または曲線をサポートします。曲線モードは、派生、線形、またはベジェに従うことができます。",imageDesc:"単一の画像またはシーケンス フレーム、複数画像のウェイトのランダム化、ピボット ポイント、カラー、ブレンド モード、および独立した透明度。",sequenceDesc:"再生方法には、1 回の非表示、1 回のフリーズ、順方向ループ、および逆方向ループが含まれます。",noiseDesc:"ジッター トレースを生成し、強度、範囲、速度を制御します。",gravityDesc:"重力、風、ライフサイクルの強度曲線。",forceDesc:"グローバルな力場、渦、吸着、衝突。",trailDesc:"独立したトレーリング アセット、ボーン数、長さ、幅、形状、色、透明度のカーブ。",followDesc:"エミッタはパスまたは Spine ボーンをたどることができます。",collisionDesc:"シーン衝突オブジェクトとパーティクル衝突応答を選択します。",exportDesc:"画像パス、Spine バージョン、キーフレーム カーブ、FPS、整数フレーム、ボーン プール、空のアニメーションを設定します。",exportButtonsDesc:"コネクタを介して、Spine JSON、画像 ZIP をエクスポートしたり、.spine プロジェクトを生成したりできます。",connectorTitle:"Spine コネクタの使用説明書",connectorIntro:"コネクタは、JSON と Web ページによって生成されたイメージを、ローカル マシンにインストールされアクティブ化されている Spine に配信し、編集可能な .spine プロジェクトに変換します。",prerequisite:"フロントロード",prerequisiteDesc:"コンピューターには Spine がインストールされてアクティブ化されており、デスクトップ コネクタが起動されています。",download:"ダウンロード",webSide:"ウェブページ",webSideDesc:"「コネクタが利用可能・Spineの準備ができました」と表示されたら、「.spineパッケージをエクスポート」をクリックします。",authorization:"最初の認可",authorizationDesc:"最初の接続では、Web サイトのソースを確認し、一度許可する必要があります。このマシンは認証ホワイトリストを保存します。",pathSetup:"パスの設定",pathSetupDesc:"コネクタは Spine を自動的に検出します。見つからない場合は、アプリケーション パスを手動で指定できます。",downloadResult:"ダウンロード結果",downloadResultDesc:".spine プロジェクトとイメージ ディレクトリが含まれる ZIP パッケージを取得します。",version:"バージョン",versionDesc:"コネクタは、JSON バージョンに応じて、Spine 3.8 ~ 4.3 に自動的に一致します。",security:"安全性",securityDesc:"ローカル アドレスのみをリッスンし、認証はコネクタに保存され、一時ファイルは変換後にクリーンアップされます。",differenceTitle:"構成とエクスポートの違いは何ですか?",differenceDesc:"「設定の保存」では、編集可能なすべてのオブジェクトとパラメータが保存されます。 「Spine Json のエクスポート」は、表示されているパーティクル システムのみをエクスポートし、コリジョン、フォロー、トレーリング、サブエミッターの結果を独立したアニメーション データにベイクします。"},FN={confirmLoopFollowEnter:"ループ連続モードに入ると、パーティクル追従設定は無効になり、デフォルト値に戻ります。続く?",confirmLoopFollowExit:"ループ永続モードを終了すると、パーティクル追従設定は無効になり、デフォルト値に戻ります。続く?",invalidJson:"構成ファイルが有効ではありません JSON",invalidConfigFormat:"SpineParticle 編集者プロフィールではありません",unsupportedConfigVersion:"構成バージョンはまだサポートされていません: {version}",missingScene:"設定ファイルに完全なシーン データがありません",missingEmbeddedSpine:"構成には再利用可能な Spine の元のリソースが含まれていません",chooseJsonConfig:".json 構成ファイルを選択してください",settingsInvalidJson:"システム設定キャッシュが有効ではありません JSON",settingsFormat:"SpineParticle エディターのシステム設定キャッシュではありません",settingsVersion:"システム構成バージョンはまだサポートされていません: {version}",settingsMissing:"システム設定キャッシュに設定がありません",noExportableImages:"現在表示されているパーティクル システムにはエクスポート可能なイメージがありません",invalidZipPath:"ZIP 無効なファイル パス",spineFileType:"Spine データは .json または .skel のみをサポートします",atlasFileType:"アトラス ファイルは .atlas のみをサポートします",chooseTexture:"少なくとも 1 つのテクスチャ画像を選択してください",binaryParseFailed:"Spine バイナリ解析に失敗しました (4.3: {v43}、旧バージョン: {v42})",invalidSpineJson:"Spine JSON 無効なファイル形式です",unsupportedSpineJsonVersion:"Spine JSON バージョンはサポートされていません。{versions} のみがサポートされています",unsupportedSpineDataVersion:"Spine データ バージョンはサポートされていません。{versions} のみがサポートされています",embeddedReadFailed:"埋め込み Spine ファイルを読み取れません: {name}",missingImageWarning:"画像「{file}」が見つからないか、読み取り不能な寸法があり、パスは保存されています。",missingTrailImageWarning:"末尾のイメージ「{file}」がありませんが、パスは保存されています。",emptyCacheWarning:"「{name}」に使用できるフレームバッファがありません。",readExportImageFailed:"エクスポートされた画像を読み取れません: {name}",connectorOffline:"ローカルの Spine コネクタが検出されません。最初にコネクタを有効にしてください",connectorHttpError:"Spine コネクタがエラーを返します: HTTP {status}",invalidTrailUV:"後続メッシュ「{name}」の UV データが無効です",missingTrailVertices:"後続メッシュ '{name}' に頂点データがありません",trailIndexOutOfRange:"後続メッシュ「{name}」の三角形インデックスが範囲外です",invalidTrailHull:"後続メッシュ「{name}」の外側輪郭番号が無効です",trailHullIndexOutOfRange:"トレーリングメッシュ「{name}」の外側輪郭エッジインデックスが範囲外です",invalidInfluenceCount:"後続メッシュ '{name}' に無効な数のボーン ウェイトが含まれています",missingBoneReference:"後続メッシュ「{name}」が存在しないボーンを参照しています",invalidWeight:"後続グリッド「{name}」に無効な重量データが含まれています",weightSum:"後続メッシュ「{name}」の頂点の重みの合計が 1 になりません",vertexCountMismatch:"後続メッシュ「{name}」の頂点と UV の数が一貫していません",invalidInherit:"ボーン「{name}」の継承値「{inherit}」は、Spine {version} JSON 形式に準拠していません",trailBoneParent:"後続のボーン「{name}」はパーティクル システム ボーンの下に直接ぶら下げる必要があり、ボーン チェーンを形成することはできません。",trailSlotEmpty:"加重末尾スロット「{name}」では空のアタッチメントを使用できません。対応するボーン スケーリングは、非出現フェーズまたは死亡フェーズでは 0 に設定する必要があります。",spine38Version:"Spine 3.8 エクスポートされるバージョン ID は 3.8 である必要があります",spine38Inherit:"Spine 3.8 ボーン「{name}」は変換を使用する必要があり、継承は使用できません",spine38SlotColor:"Spine 3.8 スロット カラー タイムラインはカラー / twoColor を使用する必要があります",spine38AttachmentName:"Spine 3.8 添付ファイルのタイムラインの非表示フレームは明示的に記述する必要があります name: null",spine38RotationAngle:"Spine 3.8 時間軸を回転す​​るには角度を使用する必要があります",spine38Curve:"Spine 3.8 は 4.x 配列曲線形式をサポートしていません",unsupportedExportVersion:"エクスポートされたバージョンはサポートされていません。Spine {versions} のみがサポートされています",exportVersionMismatch:"一貫性のないエクスポート バージョン: Spine {expected}、JSON に設定され、Spine {actual} としてマークされます",exportMissingBones:"エクスポート結果にボーンがありません",missingAtlasTexture:"Atlas によって参照されるテクスチャが選択されていません: {name}"},LN={label:"言語",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},DN={app:fN,common:pN,toolbar:mN,settings:gN,config:vN,curve:bN,gradient:yN,attributeControl:xN,pivot:wN,image:SN,timeline:CN,emission:AN,attributes:TN,appearance:EN,renderLayer:_N,export:{title:"エクスポート設定",reset:"エクスポート設定をリセットする",imagesPath:"画像パス (Spine 画像パス)",spineVersion:"Spine バージョン",keyframeCurve:"キーフレーム補間カーブ",linear:"リニア",smoothBezier:"スムーズ ベジェ (スムーズ Bézier)",bezierHelp:"スムーズ ベジェは連続モーションを誤差許容範囲内に適合させます。誕生、死亡、アタッチメントの切り替え、突然変異では引き続きステップ キーフレームが使用されます。",spine38Help:"Spine 3.8 は 4.x のチャネルごとの配列ベジェをサポートしておらず、エクスポート時に許容差が低減された区分的線形キーフレームに変換されます。",fps:"エクスポート FPS",omitFps:"fpsは書かないでください",fpsHelp:"FPS を変更するときは、アニメーションの実際の秒数を変更しないでください。 「fps を書かない」は、Spine の fps メタデータのみを省略します。",integerFrames:"整数フレームの位置合わせ",bonePool:"ボーン オブジェクト プール",excludeEmpty:"内容のないアニメーションを除外する",baking:"アニメーションが再計算されてベイクされています",exportJsonTitle:"エクスポート Spine {version} JSON",preparing:"エクスポートの準備中...",exportJson:"Spine JSON を書き出す",exportImagesTitle:"現在のパーティクル システム ZIP で使用されているイメージを別途ダウンロードします。",organizingImages:"写真を並べ替えています...",exportImages:"画像 ZIP を書き出す",generatingProject:"プロジェクトを生成中...",exportSpine:".spine パッケージをエクスポートする",authorize:"現在の Web サイトを認証する",authorizeTitle:"ネイティブ コネクタで現在の Web サイトを承認する",refreshConnector:"コネクタを再確認してください",refresh:"リフレッシュする",recalculating:"パーティクル アニメーションを再計算しています...",exported:"エクスポートされた Spine {version}: {systems} パーティクル システム、{animations} アニメーション、{bones} ルート ボーン {warning}",resourceWarning:";{count} リソースのヒント (不足している画像もエクスポートされます)",timeout:"アニメーションのタイムアウトを再計算します。ページがまだ実行中であることを確認して、再試行してください。",preparingProject:"写真を並べ替えて、このマシンを Spine と呼び出します…",projectExported:"{fileName} が生成されました: .spine プロジェクトと {images} 画像、Spine {version} を含む",collectingImages:"現在パーティクル システムで使用されている画像を照合しています...",imagesExported:"{fileName} が生成されました: {folder}/ {images} 画像が含まれています",connectorChecking:"ローカルの Spine コネクタを検出しています...",connectorOffline:"ローカル Spine コネクタが起動していません",spineNotFound:"コネクタは起動していますが Spine が見つかりません",notAuthorized:"コネクタは起動していますが、このサイトは未認証です",connectorReady:"コネクタ使用可能 · Spine 準備完了",connectorBusy:"Spine プロジェクトを再計算して生成中",connectorGenerate:"ローカル Spine で Spine {version} プロジェクトを生成",unknown:"未知",checking:"確認中",offline:"未起動",notFound:"Spine が見つかりません",unauthorized:"未認証",projectTransferTitle:"Spine パッケージをエクスポートする",projectTransferDetail:"パーティクル アニメーションを再計算しています...",projectTransferDownload:"Spine プロジェクト パッケージがダウンロードされました",generatingJson:"Spine JSON を生成中…",preparingProjectFiles:"プロジェクトの写真を照合中...",uploading:"Spine コネクタにデータをアップロードしています...",spineProcessing:"Spine がプロジェクトを変換中です。お待​​ちください...",downloadingProject:"生成された Spine プロジェクト パッケージをダウンロードしています...",handingToBrowser:"ダウンロードのためにブラウザに引​​き渡しています..."},transfer:MN,scene:PN,modifiers:IN,spine:kN,help:RN,errors:FN,language:LN},ON={resizeTimeline:"드래그하여 타임라인 높이 조정",systems:"체계",particlesBones:"입자(뼈)",rootBone:"뿌리뼈",hudTip:"휠 확대/축소 · 캔버스를 드래그하려면 왼쪽 클릭",title:"Spine 파티클 에디터-Yeomai"},NN={close:"닫기",reset:"초기화",add:"추가",remove:"제거",delete:"삭제",clear:"지우기",cancel:"취소",confirm:"확인",none:"없음",enabled:"사용",disabled:"사용 안 함",fixed:"고정",random:"랜덤",curve:"곡선",followExport:"내보내기 설정 따르기",linear:"선형",bezier:"베지어",above:"위",below:"아래",left:"왼쪽",right:"오른쪽",seconds:"초",frames:"프레임"},$N={settings:"설정",undo:"실행 취소 (Ctrl+Z)",pan:"캔버스 이동 (Q)",translate:"이동 (W)",rotate:"회전 (E)",scale:"크기 조절 (R)",zoomIn:"확대",zoomOut:"축소",fitView:"캔버스에 맞추기",toggleGrid:"그리드 전환",resetView:"보기 초기화",background:"배경",backgroundSettings:"배경 이미지 설정",changeBackground:"이미지 교체",uploadBackground:"이미지 업로드",clearBackground:"배경 지우기",noBackground:"이미지 없음",backgroundX:"배경 이미지 X 오프셋",backgroundY:"배경 이미지 Y 오프셋",backgroundOpacity:"배경 이미지 투명도",opacity:"불투명도",help:"도움말",openHelp:"도움말 열기"},BN={title:"시스템 설정",layout:"인터페이스 레이아웃",parameterPanelPosition:"매개변수 패널 위치",panelOnRight:"매개변수 패널이 오른쪽에 표시됩니다.",history:"운영 이력",maxUndo:"뒤로 최대 단계 수",canvasGuides:"캔버스 보조 디스플레이",emitter:"발사 지점",bones:"뼈 연결",bonePointSize:"뼈점 도면 크기",boneAxisSize:"축 도면 크기",skinMesh:"스킨드 메쉬",enableTicks:"진드기 활성화",tickFontSize:"텍스트 크기 조정",tickWidth:"눈금 표시 두께",axisColor:"축 색상",showAxisLabels:"표시 스케일 값",cacheNote:"전체 시스템 설정이 현재 브라우저에 자동으로 저장됩니다."},UN={title:"설정 관리",save:"설정 저장",saveTitle:"모든 편집기 구성 저장(Ctrl+S)",load:"설정 불러오기",loadTitle:"로컬 편집기 구성 로드",presets:"프리셋 목록",selectPreset:"프리셋 선택",noPresets:"프리셋 없음",saved:"구성이 로컬에 저장되었습니다.",loading:"구성 로드 중…",loaded:"로드됨: {name}",presetLoading:"사전 설정 로드 중…",presetLoaded:"프리셋 로드됨: {name}",presetNamingError:"{message}, 기본 파일 이름을 확인하세요",presetTransferTitle:"사전 설정 로드",presetDownloading:"{file} 다운로드 중…",presetParsing:"기본 구성을 구문 분석하는 중...",presetRestoring:"기본 리소스를 구문 분석하고 복원하는 중...",presetComplete:"프리셋 로딩 완료",presetListError:"사전 설정 목록을 읽을 수 없습니다.",presetReadError:"사전 설정을 읽을 수 없습니다: {file}"},VN={bezierHint:"원호를 조정하려면 사각형 핸들을 드래그하세요. · 새 공간을 만들려면 빈 공간을 두 번 클릭하세요. · 삭제하려면 노드를 두 번 클릭하세요.",linearHint:"빈 공간을 더블클릭하면 새로운 공간이 생성됩니다. 삭제하려면 노드를 두 번 클릭하세요. 노드를 드래그하여 조정하세요.",resetTitle:"기본 곡선 복원"},XN={addTitle:"색상 표시를 추가하려면 리본을 두 번 클릭하세요.",color:"색상 코드",colorValue:"색상 스케일 색상 값",position:"컬러마크 위치",addMiddle:"중간에 색을 넣어주세요",delete:"현재 색상 패치 삭제",hint:"색상 밴드를 두 번 클릭하여 새 색상 추가 · 색상 표시를 드래그하여 위치 조정 · 색상 표시를 두 번 클릭하여 삭제"},YN={angleOffset:"각도 오프셋",value:"수치",lower:"하한",upper:"상한",rangeLower:"범위의 하한",rangeUpper:"상위 범위",curveInput:"곡선 입력 →",direction:"발사방향"},zN={title:"지도 피벗 포인트",zoomOut:"축소",zoomIn:"크게 하다",expand:"전체 화면으로 확대 작업",interaction:"피벗 포인트를 설정하려면 왼쪽 클릭/드래그 · 캔버스를 드래그하려면 마우스 오른쪽 버튼을 클릭 · 확대/축소하려면 휠 스크롤",previewAlt:"피벗 포인트 미리보기",noImage:"선택한 사진이 없습니다.",resetCenter:"중간에 재배치 (50%, 50%)",coordinates:"축점 좌표(%)",rotationTest:"축 회전 테스트",static:"아직",spin:"회전",swing:"그네",rotationAlt:"회전 테스트",topLeft:"왼쪽 위",top:"바로",topRight:"오른쪽 위",left:"오른쪽 왼쪽",center:"가운데",right:"오른쪽",bottomLeft:"왼쪽 아래",bottom:"바로 아래·아래",bottomRight:"오른쪽 아래"},jN={chooseSequence:"시퀀스 프레임 사진 선택",chooseLocal:"로컬 이미지 선택",subfolder:"하위 폴더",name:"이름",restore:"{name} 복원",deleteResource:"이미지 리소스 삭제",imageMode:"영상 모드",fixed:"고정",sequence:"시퀀스",playbackMode:"플레이 모드",onceHide:"1회·마지막 프레임에서 숨김",onceHold:"1회·마지막 프레임 유지",loopForward:"정방향 루프",loopReverse:"역방향 루프",playbackFps:"재생 프레임 속도",chooseSequenceMulti:"시퀀스 프레임 선택(다중 선택)",weight:"가중치 %",unlockWeight:"비율 잠금 해제",lockWeight:"현재 비율 잠금",pivot:"텍스처 피벗",collapsePivot:"피봇 포인트 조정 축소",expandPivot:"피봇 포인트 조정 확장",pivotModal:"텍스처 회전축 포인트 대형 화면 미세 조정",pivotModalDesc:"입자의 회전/스윙 중심을 정확하게 설정하려면 아래 지도의 아무 곳이나 클릭하거나 드래그하세요.",pivotZoomHint:"100% ~ 400% 배율 지원, 끝이나 뿌리를 정확하게 조준:",confirmPivot:"피봇 포인트 결정 및 저장",noSequence:"선택한 시퀀스 프레임이 없습니다.",firstFrame:"프레임 1",firstImage:"첫 번째 사진",lastImage:"마지막 사진",pivotOn:"열림: X {x}% | 와 {y}%",pivotOff:"켜지지 않음, 기본값은 이미지 중앙 주위(50%, 50%)입니다.",pivotCustom:"피벗 포인트가 사용자 정의되었습니다: X {x}% | 와 {y}%",frameCountOne:"1 프레임 · {name}",frameCountMany:"{count} 프레임 · {first} → {last}",sequenceSelected:"{count} 프레임을 선택하여 {first}~{last} 순서대로 재생하였습니다."},HN={play:"플레이(D)",pause:"일시정지(D)",toStart:"첫 번째 프레임으로 돌아가기(S)",previous:"이전 프레임",next:"다음 프레임",toEnd:"마지막 프레임으로 이동",continuousLoop:"연속 루프 재생",abLoop:"독립 A/B 구간 루프",abLoopShort:"AB 루프",abRange:"AB 사이클 간격",playbackStart:"사용자 정의 재생 시작 프레임",playbackEnd:"사용자 정의 재생 종료 프레임",startFrame:"재생 시작 프레임",endFrame:"종료 프레임 재생",frame:"액자",emission:"이미션 중",particleLife:"파티클 존재",spineAnimation:"Spine 애니메이션",ownerAnimation:"소속 애니메이션",setOwnerAnimation:"현재 입자 시스템이 속한 애니메이션을 설정합니다.",chooseOwnerAnimation:"애니메이션을 선택하세요",animationName:"애니메이션 이름",renameAnimation:"현재 애니메이션 이름 바꾸기",rename:"이름 바꾸기",newAnimation:"+ 신규",keepOneAnimation:"하나 이상의 애니메이션을 유지해야 합니다.",spinePreview:"Spine 미리보기 애니메이션",noSpineAnimation:"사용 가능한 Spine 애니메이션이 없습니다.",none:"없음",systemName:"시스템 {index}",dragLoopDuration:"드래그 루프 세그먼트 지속 시간",dragEmissionDuration:"드래그 시간",dragSpineStart:"드래그하여 애니메이션 시작 시간 조정",noAnimationData:"현재 표시할 애니메이션 데이터가 없습니다.",animationNameEmpty:"애니메이션 이름은 비워둘 수 없습니다.",animationNameDuplicate:"애니메이션 이름은 반복할 수 없습니다.",animationRenameFailed:"애니메이션 이름을 수정할 수 없습니다",zoomIn:"크게 하다",zoomOut:"축소",zoomFit:"보통의",frameStatus:"프레임 {current} / {total}"},GN={title:"이미션 모드",reset:"전송 모드 매개변수 재설정",stream:"스트림",burst:"버스트",normalStream:"일반 스트림",loopStream:"루프 스트림",rate:"이미션 속도",duration:"이미션 시간",loopDuration:"발사 기간(f)",generateStart:"시작 루프 애니메이션 생성",generateEnd:"끝 루프 애니메이션 생성",customDuration:"기간 지정",auto:"자동 {frames}f",startLoopDuration:"루프 세그먼트 지속 시간 시작",endLoopDuration:"종료 루프 세그먼트 기간",loopWarning:"루프 지속성 모드는 뼈대 따르기 및 경로 따르기를 지원하지 않습니다. 입자 추적 설정은 들어가거나 나갈 때 기본값으로 복원됩니다.",burstCount:"1회 생성 수",delay:"지연 시간",shapeTitle:"이미터 모양",shapeReset:"이미터 모양 매개변수 재설정",shape:"모양",point:"점",circle:"원",rect:"사각형",cone:"원뿔",path:"경로",innerDiameter:"내경",outerDiameter:"외경",innerRadius:"내부 반경",outerRadius:"외부 반경",coneDirection:"테이퍼 방향",coneAngle:"테이퍼 개방 각도",innerWidth:"내부 폭",innerHeight:"높은 내부",outerWidth:"외부 폭",outerHeight:"매우 높음",selectPath:"경로 선택",noPath:"경로 없음(점 방출)",birthDistribution:"출생 분포",evenDistribution:"등간격 고정 분포",randomDistribution:"무작위 분포",emissionAngle:"발사 각도",radial:"방사형(중심 바깥쪽)",pathNormal:"경로에 수직",pathTangent:"경로 방향을 따라",fixedAngle:"고정 각도",baseAngle:"기본 각도",randomRange:"무작위 범위",showShape:"모양을 보여주다"},WN={title:"파티클 속성",reset:"입자 속성 매개변수 재설정",initialParams:"파티클 초기값",initialLife:"초기 수명주기",randomSample:"무작위 샘플링 →",initialSpeed:"초기 속도",initialScale:"초기 스케일링",uniform:"통일된",separateXY:"XY 분리",scaleX:"줌 X",scaleY:"줌 Y",initialRotation:"초기 회전",lifecycleTitle:"수명에 따른 변화",speedOverLife:"수명 주기 속도",speedMultiplier:"속도 승수",lifeTo:"수명주기 →",scaleOverLife:"수명 주기 동안 확장",scaleMultiplier:"줌 비율",multiplierX:"확대",multiplierY:"배율 Y",rotationOverLife:"수명주기 동안 회전",rotationSpeed:"회전 속도"},qN={title:"외형과 리소스",reset:"모양 및 자원 매개변수 재설정",opacity:"불투명도",curveMode:"곡선 모드",transparent:"0(투명)",opaque:"1(불투명)",renderLayer:"렌더링 레이어(Spine 슬롯)",top:"최상위 수준",spineSlot:"Spine 슬롯",selectSpine:"Spine를 선택하세요",noSpine:"사용 가능한 항목 없음",noSlot:"아직 선택한 슬롯이 없습니다.",reselect:"재선택",selectSlot:"슬롯 선택",searchSlots:"슬롯 또는 액세서리 이름을 검색하세요…",searchSlotsAria:"슬롯 검색",emptySlot:"빈 슬롯",noMatchingSlots:"일치하는 슬롯 없음",above:"이 슬롯 사진 위에",below:"이 슬롯 사진 아래",followAttachment:"슬롯 액세서리로 표시 및 숨기기",previewOnly:"표시 수준을 조정하면 편집기 미리보기에만 영향을 미치고 내보낸 데이터에는 영향을 주지 않습니다.",imageResources:"이미지 리소스",addImage:"이미지 리소스 추가",scale:"줌",color:"색상",fixedColor:"고정된 색상",randomColor:"임의의 색상",lifetime:"수명주기",normal:"일반",add:"더하기",multiply:"곱하기",screen:"스크린",fixedColorValue:"고정된 색상 값",randomColorHint:"각 입자는 생성될 때 리본에서 무작위로 색상을 선택하고 수명 주기 동안 변경되지 않습니다.",independentAlpha:"독립 불투명도",off:"끄기"},KN={slotLabelAbove:"{spine} / {slot} · 위 사진",slotLabelBelow:"{spine} / {slot} · 사진 아래",resolvedAbove:"{slot} 이미지 위와 해당 슬롯 아래에 렌더링됨",resolvedBetween:"{previous}와 {slot} 사이에서 렌더링됨",warningNoSpine:"로드된 Spine가 없으며 입자가 일시적으로 상단에 표시됩니다.",warningNoSelection:"Spine는 아직 선택되지 않았으며 입자가 일시적으로 상단에 표시됩니다.",warningMissingSpine:"대상 Spine가 존재하지 않으며 입자가 일시적으로 상단에 표시됩니다.",warningNotReady:"대상 Spine가 준비되지 않았으며 입자가 일시적으로 상단에 표시됩니다.",warningMissingSlot:"대상 슬롯이 존재하지 않으며(리소스가 교체되었을 수 있음) 파티클이 일시적으로 상단에 표시됩니다.",warningFirstSlot:"이것은 첫 번째 슬롯으로 그 아래에 표시될 수 없으며 파티클은 일시적으로 위에 표시됩니다."},JN={completed:"완전한",failed:"작업 실패"},ZN={title:"장면 오브젝트",addParticle:"파티클 시스템 추가",addParticleShort:"+입자",addCollider:"충돌기 추가",addColliderShort:"+충돌",addPath:"경로 추가",addPathShort:"+ 경로",addSpine:"Spine 추가",copyTitle:"현재 선택된 장면 객체를 복사합니다.",showParticle:"입자 시스템 표시",hideParticle:"입자 시스템 숨기기",showCollider:"충돌체 표시",hideCollider:"충돌체 숨기기",showPath:"경로 표시",hidePath:"경로 숨기기",showSpine:"Spine 표시",hideSpine:"Spine 숨기기",particle:"파티클",subEmitter:"하위 이미터",collision:"충돌",path:"경로",deleteParticle:"입자 시스템 삭제",deleteCollider:"충돌체 삭제",deletePath:"경로 삭제",deleteSpine:"Spine 삭제",empty:"아직 장면에 객체가 없습니다.",name:"이름",positionX:"X 위치",positionY:"Y 위치",offsetX:"X 오프셋",offsetY:"Y 오프셋",rotation:"회전",scaleX:"X 크기",scaleY:"Y 크기",seed:"랜덤 시드",seedTitle:"입자 시스템의 모든 무작위 속성, 리소스 선택 및 수정자 무작위 샘플링을 제어합니다.",randomizeSeed:"새로운 전역 무작위 시드 생성",seedHint:"초기 무작위 매개변수, 자원 선택 및 수정자 무작위 샘플링을 제어합니다. 같은 씨앗은 같은 효과를 재현할 수 있습니다",colliderTitle:"충돌기 속성",colliderName:"충돌기 이름",type:"유형",circle:"둥근",ellipse:"타원형",rect:"구형",polygon:"다각형",custom:"사용자 정의",enabled:"~할 수 있게 하다",xPosition:"X 위치",yPosition:"Y 위치",scaleXShort:"X 크기",scaleYShort:"Y 크기",radius:"반지름",radiusX:"X 반경",radiusY:"Y 반경",width:"너비",height:"높은",sides:"면의 수",collisionResponse:"충돌 대응",physics:"물리학(바운스/마찰)",pause:"일시정지(중지)",destroy:"사라지다(즉시 파기)",elasticity:"탄력성 (0-1)",friction:"마찰(0-1)",followPath:"길을 따라가세요",targetPath:"대상 경로",notSelected:"(선택되지 않음)",moveDuration:"이동 시간(초)",followDirection:"경로를 따라 방향",moveProgressCurve:"이동 진행 곡선",moveProgressHelp:"가로축: 실시간/이동 기간; 세로축: 경로 진행(0=시작점 → 1=종료점)",pathTitle:"경로 속성",pathName:"경로 이름",closedPath:"닫힌 경로",pathColor:"경로 색상",pathHelp:"운영 지침:",pathHelpItems:"빈 공간/곡선 두 번 클릭: 새 앵커 포인트 만들기, 앵커 포인트 두 번 클릭: 노드 삭제, 두 번째로 두 번 클릭하고 드래그: 새 노드를 만들고 핸들을 당기고 앵커 포인트를 드래그하여 위치를 이동하고 핸들을 드래그하여 곡선을 조정합니다. Shift + 핸들 드래그: 양쪽에서 완전히 대칭, A lt+ 드래그 핸들: 한쪽을 독립적으로 제어, Ctrl+클릭/프레임 선택: 선택한 노드 추가, Alt+클릭/프레임 선택: 선택 항목 빼기 노드, 빈 공간에서 Alt+클릭: 모든 선택을 취소하고 여러 노드를 선택한 후 전체적으로 드래그합니다.",applyPresetShape:"사전 설정된 모양 적용",choosePreset:"사전 설정 선택...",square:"정사각형",star:"별 모양",applyPreset:"사전 설정 적용",clearAnchors:"앵커 포인트 지우기",panelHint:"오른쪽 상단에 있는 버튼을 사용하여 장면 개체를 만듭니다."},QN={title:"모디파이어",reset:"수정자 매개변수 재설정",damping:"감쇠",enableNoise:"이동 노이즈 사용",strength:"힘",noiseRange:"변동 범위",noiseSpeed:"시간 흐름율",noiseHint:"강도 제어는 비율에 영향을 미칩니다. · 변동 범위는 최대 편차를 제어합니다. · 시간 흐름은 변화 속도를 제어합니다.",enableGravity:"중력 사용",gravityStrength:"중력 강도",strengthMin:"강도 최소",strengthMax:"최대 강도",direction:"방향",gravityOverLife:"수명주기 동안의 중력",windOverLife:"라이프 사이클 바람",axisStrength:"수직축: 강도 0~1",directionHint:"오른쪽 0° · 아래쪽 -90° · 음의 강도는 방향을 바꿉니다.",enableWind:"바람 사용",windStrength:"바람의 세기",enableForceField:"힘장 사용",centerX:"센터 X",centerY:"센터 Y",forceStrength:"역장 강도",forceRadius:"역장 반경",falloffMode:"붕괴 모드",constant:"일정(속도는 범위 내에서 변하지 않습니다)",linearFalloff:"선형 폴오프(가장자리는 0)",inverseFalloff:"거리에 반비례(중앙에서 가장 강함)",forceHint:"양수는 중앙쪽으로 끌어당기고, 음수는 바깥쪽으로 밀어내며, 역장 원은 캔버스 내에서 드래그될 수 있습니다.",showShape:"모양을 보여주다",enableVortex:"소용돌이 사용",vortexHint:"양수는 시계 반대 방향 · 음수는 시계 방향",enableAttraction:"흡인 사용",attractionX:"흡착점 X",attractionY:"흡착점 Y",attractionRadius:"흡착반경",attractionDuration:"흡착시간",delay:"지연시간",delayMode:"지연 모드",globalTime:"통일된 시간",particleLife:"단일 입자 수명",attractionPath:"흡착방식",straight:"일직선",attractionHint:"지연 후 현재 위치부터 흡착이 시작됩니다. 빨간색 범위에 도달하면 죽습니다. 흡착 원은 캔버스 내에서 드래그할 수 있습니다.",enableTrail:"트레일 사용",trailImages:"후행 독립 사진",addTrailImage:"후행 이미지 리소스 추가",trailRotation:"회전하다",trailBones:"후행 뼈 수",trailRatio:"후행비율(%)",trailLength:"후행 길이",randomRange:"무작위 범위",lengthRatio:"길이 비율(%)",lengthMin:"최소 길이(%)",lengthMax:"최대 길이(%)",trailWidth:"후행 너비",widthRatio:"폭 비율(%)",widthMin:"최소 너비(%)",widthMax:"최대 너비(%)",widthScale:"너비 스케일링",followParticle:"입자를 따라가다",lifeLengthCurve:"수명주기 길이 곡선",shapeCurve:"형상 곡선(머리 → 꼬리 폭)",colorMode:"색상 모드",blendMode:"블렌드 모드",fixedColor:"고정된 색상",alphaMode:"투명도 모드",opacity:"투명도",gridRows:"그리드 행 수",gridCols:"그리드 열 수",trailHint:"각 입자는 리소스에 비례하여 형제 후행 뼈 세트를 생성합니다. 입자가 생성될 때 임의의 길이와 너비가 결정되어 동일한 시드를 안정적으로 재현할 수 있음",enableFollow:"이미터 추적 사용",followMode:"팔로우 모드",noFollow:"없음",followPath:"길을 따라가다",selectedBone:"선택된 뼈",emitterAngleMode:"송신기 각도 모드",fixedAngle:"고정 각도",followMoveDirection:"움직이는 방향을 따라가세요",moveProgressCurve:"이동 진행 곡선(0→1)",moveDuration:"이동 기간(초)",followSpace:"공간을 따라가다",localSpace:"로컬 공간(GEN 운동)",worldSpace:"월드 공간(입자 생성점 이동)",moveDirection:"움직이는 방향",forward:"앞으로(시작점 → 끝점)",reverse:"역방향(종료점 → 시작점)",followOffset:"오프셋 시작점(0-1)",followSpaceHint:"로컬 공간은 전체 방사체를 이동합니다. 월드 공간은 새 입자의 생성 지점만 이동하고 생성된 입자는 월드 위치에 유지됩니다.",followTarget:"목표를 따르십시오:",noValidBone:"유효한 뼈가 아직 바인딩되지 않았습니다. 먼저 Spine 계층 구조 트리에서 뼈를 선택하십시오.",rebind:"리바인드",bind:"제본",selectedBoneLabel:"현재 선택된 뼈대:",boneLocalSpace:"로컬 공간(뼈와 함께 이동)",boneWorldSpace:"월드 공간(파티클이 생성된 후 위치를 유지함)",offsetX:"변위 오프셋 X",offsetY:"변위 오프셋 Y",rotationOffset:"회전 오프셋",scaleOffsetX:"스케일 오프셋 X",scaleOffsetY:"스케일 오프셋 Y",boneFollowHint:"이미터는 선택한 Spine 뼈대의 위치만 따르며 Spine의 회전이나 크기 조정은 상속하지 않습니다. 입자 변환은 입자 시스템의 자체 매개변수와 상위 오프셋을 사용합니다.",enableCollision:"충돌 사용",collisionObjects:"참여 충돌 객체",colliderDisabled:"{name}(충돌기 비활성화)",clearCollider:"충돌 객체 지우기 {name}",addCollider:"장면 충돌 개체 추가",noAvailableColliders:"추가할 충돌 개체가 없습니다.",noCollidersSelected:"충돌 개체가 선택되지 않았으며 현재 입자는 충돌하지 않습니다.",available:"사용 가능",disabled:"장애가 있는",collisionHint:"추가되고 활성화된 장면 충돌 객체만 현재 입자 시스템의 충돌에 참여합니다.",enableSubEmitter:"하위 이미터 사용",triggerTiming:"트리거 시간 선택",birth:"태어나다",death:"주사위",collision:"충돌",chooseTarget:"대상 입자 시스템 선택",noTarget:"없음(입자 시스템)",deleteSubEmitter:"이 하위 이미터 삭제",probability:"방출 확률",collisionLimit:"충돌 한계",inherit:"상속하다",colorInheritMode:"색상 상속 방법",add:"추가하다",replace:"씌우다",addSubEmitter:"+ 새로운 하위 이미 터 추가",inheritNone:"없음(기본값)",inheritAll:"모든 속성",inheritColor:"색상",inheritScale:"크기",inheritRotation:"회전하다",inheritLife:"수명주기"},e$={title:"Spine 속성",name:"Spine 이름",xPosition:"X 위치",yPosition:"Y 위치",rotation:"회전",scaleX:"X 크기",scaleY:"Y 크기",startTime:"시작 시간",resources:"Spine 리소스",chooseFolder:"폴더를 선택하고 로드하세요.",folderHint:"JSON / SKEL, Atlas 및 폴더의 모든 텍스처를 한 번에 읽습니다. 아래에서 리소스를 개별적으로 교체할 수 있습니다.",choose:"선택하다",chooseMultiple:"선택(복수 선택)",loading:"로드 중…",load:"↧ 로드",clear:"분명한",supportNote:"Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON 지원 · 해당 버전이 실행 중일 때 요청 시 로드 · 로컬 오프라인",currentResource:"현재 자원 {version}",animations:"Spine 애니메이션",noAnimations:"사용할 수 있는 애니메이션이 없습니다.",timelineAnimation:"타임라인에서 애니메이션 재생",no:"없음",hierarchy:"계층 트리",clearBoneTitle:"뼈대 선택을 지우려면 클릭하세요.",noBoneTitle:"현재 선택된 뼈가 없습니다.",clearBone:"선택한 뼈 지우기: {name}",currentBone:"현재 스켈레톤:",clearSlotTitle:"슬롯 선택을 지우려면 클릭하세요.",noSlotTitle:"현재 선택된 슬롯이 없습니다.",clearSlot:"선택한 슬롯 지우기: {name}",currentSlot:"현재 슬롯:",notSelected:"선택되지 않음",expandAll:"모두 펼치기",collapseAll:"모두 접기",bones:"해골",slots:"슬롯",notLoaded:"로드되지 않음 Spine",searchBones:"뼈 검색",searchBonesPlaceholder:"뼈 이름 검색…",clearSearch:"검색 지우기",clearBoneSearch:"뼈 검색 지우기",noMatchingBones:"일치하는 뼈가 발견되지 않았습니다.",expandChildren:"자식 뼈 확장",collapseChildren:"자식 뼈 접기",notLoadedSlots:"Spine 슬롯이 로드되지 않았습니다.",searchSlots:"슬롯 검색",searchSlotsPlaceholder:"슬롯 또는 액세서리 이름을 검색하세요…",clearSlotSearch:"슬롯 검색 지우기",noMatchingSlots:"일치하는 슬롯을 찾을 수 없습니다.",slotTitle:"{name}(스켈레톤: {bone}, 부착물: {attachment})",empty:"null",textureSummary:"{count} 장: {names}",textureImages:"질감 사진",missingFolderAssets:"선택한 폴더가 없습니다: {missing}",chooseAssets:"Spine 데이터, Atlas 및 모든 텍스처 이미지를 순서대로 선택하십시오."},t$={title:"도움말",subtitle:"입자 생성부터 저장 및 내보내기까지 빠른 시작",close:"지침 닫기",closeShort:"닫기(Esc)",quickStart:"빠른 시작",stepCreate:'객체 생성: 왼쪽의 "Scene Object"에서 +Particles / +Collision / +Path / +Spine를 사용하여 장면 객체를 추가합니다.',stepEdit:'입자 편집: 입자 시스템을 선택하고 "방출 모드 → 방사체 모양 → 입자 속성 → 모양 및 리소스 → 수정자"를 조정합니다.',stepPreview:"효과 확인: 하단 타임라인은 프레임별로 재생, 일시 중지, 드래그할 수 있습니다. 매개변수를 수정하면 자동으로 다시 계산됩니다.",stepExport:'저장 및 내보내기: 프로젝트를 유지하려면 "구성 저장"을 사용하십시오. 완성된 제품을 출력하려면 "Spine Json / 이미지 패키지 / .spine 패키지를 내보내세요."',quickNote:'각 모듈 그룹 제목 오른쪽에 있는 "재설정"은 그룹의 기본 매개변수를 복원할 수 있습니다. 시스템 설정은 현재 브라우저에 자동으로 저장됩니다.',commonOps:"자주 쓰는 작업",eye:"작은 눈",eyeDesc:"개체를 개별적으로 표시하거나 숨깁니다. 숨겨진 입자 시스템은 내보내지지 않습니다.",copyDesc:"다양한 매개변수의 비교를 용이하게 하기 위해 현재 선택된 개체를 완전히 복사합니다.",backgroundDesc:"참조 이미지를 업로드하고 캔버스 미리보기 전용 위치와 투명도를 조정하세요.",settingsDesc:"관리 인터페이스 레이아웃, 보조 디스플레이, 규모 등은 브라우저에 자동으로 저장됩니다.",undoDesc:"Ctrl+Z는 한 단계 후퇴합니다. 최대 단계 수는 시스템 설정에서 조정할 수 있습니다.",spineBoneDesc:"파티클 이미터가 따라갈 수 있는 계층 구조 트리에서 뼈대를 검색하고 선택합니다.",shortcuts:"단축키",undoShortcut:"이전 단계 실행 취소",saveShortcut:"구성 저장",panShortcut:"캔버스 드래그",translateShortcut:"변위 도구",rotateShortcut:"회전 도구",scaleShortcut:"확대/축소 도구",playShortcut:"재생/일시 정지",startShortcut:"첫 번째 프레임으로 돌아가기",shortcutNote:"Q / W / E / R은 먼저 캔버스를 클릭해야 합니다. 커서가 입력 상자에 있으면 단일 키 단축키가 실행되지 않습니다.",modules:"기능 모듈",configTitle:"구성 관리",saveConfigDesc:"모든 현재 장면 객체와 매개변수를 프로젝트 JSON 파일로 저장합니다(Ctrl+S도 지원됨).",loadConfigDesc:"전체 프로젝트를 복원하려면 로컬 구성 파일을 선택하세요.",presetDesc:"드롭다운에서 기본 빠른 적용을 선택합니다. 목록을 새로 고치려면 드롭다운을 클릭하세요.",configScope:"범위",configScopeDesc:"구성에는 개체와 매개변수가 포함됩니다. 인터페이스와 시스템 설정은 브라우저에 별도로 저장됩니다.",sceneTitle:"장면 객체",particleDesc:"핵심 개체. 위치, 오프셋, 회전, 크기 조정 및 임의 시드를 설정할 수 있습니다. 동일한 씨앗은 동일한 효과를 재현할 수 있습니다.",colliderDesc:"원/타원/직사각형/다각형/사용자 정의는 경로를 따라 물리적 바운스, 일시 중지, 파괴 및 이동을 지원합니다.",pathDesc:"앵커 포인트, 제어 핸들, 클로저, 색상 및 사전 설정 모양을 지원하는 베지어 경로입니다.",spineDesc:"Spine 데이터, Atlas 및 텍스처를 로드하고, 뼈대와 슬롯을 찾아보고, 이미터를 따라갑니다.",sceneCommonDesc:"개체는 독립적으로 표시되고 복사될 수 있습니다. 숨겨진 입자 시스템은 내보내지지 않습니다.",emissionDesc:"연속 발사, 폭발, 지연 및 시작/루프/종료 3단계 루프 지속 시간.",burstDesc:"한 번에 지정된 수의 입자를 방출합니다.",delayDesc:"방출이 시작되기 전 대기 시간으로, 입자 막대의 왼쪽 끝에 해당합니다.",loopNote:"루프 지속성은 뼈대 및 경로 추적을 지원하지 않으며 전환 시 다음 설정이 복원됩니다.",shapeDesc:"점, 원, 직사각형, 원뿔 또는 경로 생성 영역. 원/원추는 내부 및 외부 반경을 지원하고 직사각형은 내부 및 외부 너비와 높이를 지원합니다.",angleDesc:"고정, 무작위, 방사형, 법선 경로 또는 경로 접선.",initialDesc:"수명 주기, 속도, 크기 조정 및 회전 지원은 고정, 무작위, 곡선 및 회전을 지원하여 출시 방향을 따를 수 있습니다.",overLifeDesc:"속도배율, 줌배율, 회전속도는 수명곡선에 따라 조절 가능합니다.",alphaDesc:"투명도는 고정 또는 곡선을 지원합니다. 곡선 모드는 파생, 선형 또는 베지어를 따를 수 있습니다.",imageDesc:"단일 이미지 또는 시퀀스 프레임, 다중 이미지 가중치 무작위화, 피벗 포인트, 색상, 혼합 모드 및 독립적인 투명도.",sequenceDesc:"재생 방법에는 단일 시간 숨기기, 단일 시간 고정, 정방향 루프 및 역방향 루프가 포함됩니다.",noiseDesc:"지터 추적을 생성하고 강도, 범위 및 속도를 제어합니다.",gravityDesc:"중력, 바람 및 수명주기 강도 곡선.",forceDesc:"전역 역장, 소용돌이, 흡착 및 충돌.",trailDesc:"독립적인 후행 자산, 뼈 수, 길이, 너비, 모양, 색상 및 투명도 곡선.",followDesc:"이미터는 경로 또는 Spine 뼈를 따를 수 있습니다.",collisionDesc:"장면 충돌 개체와 입자 충돌 반응을 선택합니다.",exportDesc:"이미지 경로, Spine 버전, 키프레임 곡선, FPS, 정수 프레임, 뼈 풀 및 빈 애니메이션을 설정합니다.",exportButtonsDesc:"커넥터를 통해 Spine JSON, 이미지 ZIP를 내보내거나 .spine 프로젝트를 생성할 수 있습니다.",connectorTitle:"Spine 커넥터 사용 지침",connectorIntro:"커넥터는 웹 페이지에서 생성된 JSON 및 이미지를 로컬 시스템에 설치 및 활성화된 Spine에 전달하고 이를 편집 가능한 .spine 프로젝트로 변환합니다.",prerequisite:"프론트로드",prerequisiteDesc:"컴퓨터에 Spine가 설치 및 활성화되었으며 데스크탑 커넥터가 실행되었습니다.",download:"다운로드",webSide:"웹페이지",webSideDesc:'"커넥터 사용 가능 · Spine가 준비되었습니다"가 표시되면 ".spine 패키지 내보내기"를 클릭합니다.',authorization:"첫 번째 승인",authorizationDesc:"첫 번째 연결에서는 웹사이트의 소스를 확인하고 한 번만 허용해야 합니다. 이 기계는 인증 화이트리스트를 저장합니다.",pathSetup:"경로 설정",pathSetupDesc:"커넥터는 Spine를 자동으로 감지합니다. 찾을 수 없는 경우 애플리케이션 경로를 수동으로 지정할 수 있습니다.",downloadResult:"결과 다운로드",downloadResultDesc:".spine 프로젝트 및 이미지 디렉터리가 포함된 ZIP 패키지를 가져옵니다.",version:"버전",versionDesc:"커넥터는 JSON 버전에 따라 Spine 3.8~4.3을 자동으로 일치시킵니다.",security:"안전",securityDesc:"로컬 주소만 듣고 인증은 커넥터에 저장되며 변환 후 임시 파일은 정리됩니다.",differenceTitle:"구성과 내보내기의 차이점은 무엇입니까?",differenceDesc:'"구성 저장"은 편집할 수 있는 모든 개체와 매개변수를 저장합니다. "Spine Json 내보내기"는 표시된 입자 시스템만 내보내고 충돌, 추적, 추적 및 하위 방사체 결과를 독립적인 애니메이션 데이터로 굽습니다.'},i$={confirmLoopFollowEnter:"루프 연속 모드에 들어가면 입자 추적 설정이 무효화되고 기본값으로 복원됩니다. 계속하다?",confirmLoopFollowExit:"루프 지속 모드를 종료한 후 입자 추적 설정이 무효화되고 기본값으로 복원됩니다. 계속하다?",invalidJson:"구성 파일이 유효하지 않습니다. JSON",invalidConfigFormat:"SpineParticle 편집자 프로필이 아닙니다.",unsupportedConfigVersion:"아직 지원되지 않는 구성 버전: {version}",missingScene:"구성 파일에 전체 장면 데이터가 누락되었습니다.",missingEmbeddedSpine:"구성에 재사용 가능한 Spine 원본 리소스가 포함되어 있지 않습니다.",chooseJsonConfig:".json 구성 파일을 선택하세요.",settingsInvalidJson:"시스템 설정 캐시가 유효하지 않습니다. JSON",settingsFormat:"SpineParticle 편집기 시스템 설정 캐시가 아님",settingsVersion:"시스템 구성 버전은 아직 지원되지 않습니다: {version}",settingsMissing:"시스템 설정 캐시에 설정이 없습니다.",noExportableImages:"현재 표시되는 입자 시스템에 대해 내보낼 수 있는 이미지가 없습니다.",invalidZipPath:"ZIP 잘못된 파일 경로",spineFileType:"Spine 데이터는 .json 또는 .skel만 지원합니다.",atlasFileType:"Atlas 파일은 .atlas만 지원합니다.",chooseTexture:"텍스처 이미지를 하나 이상 선택하세요.",binaryParseFailed:"Spine 바이너리 구문 분석 실패(4.3: {v43}, 이전 버전: {v42})",invalidSpineJson:"Spine JSON 잘못된 파일 형식",unsupportedSpineJsonVersion:"Spine JSON 버전은 지원되지 않으며 {versions}만 지원됩니다.",unsupportedSpineDataVersion:"Spine 데이터 버전은 지원되지 않으며 {versions}만 지원됩니다.",embeddedReadFailed:"내장된 Spine 파일을 읽을 수 없습니다: {name}",missingImageWarning:'이미지 "{file}"가 누락되었거나 크기를 읽을 수 없으며 경로가 유지됩니다.',missingTrailImageWarning:'후행 이미지 "{file}"가 누락되어 경로가 보존되었습니다.',emptyCacheWarning:"'{name}'에 사용할 수 있는 프레임 버퍼가 없습니다.",readExportImageFailed:"내보낸 이미지를 읽을 수 없습니다: {name}",connectorOffline:"로컬 Spine 커넥터가 감지되지 않습니다. 먼저 커넥터를 활성화하십시오.",connectorHttpError:"Spine 커넥터가 오류를 반환합니다: HTTP {status}",invalidTrailUV:"후행 메시 '{name}'에 대한 잘못된 UV ​​데이터",missingTrailVertices:"후행 메시 '{name}'에 정점 데이터가 누락되었습니다.",trailIndexOutOfRange:"후행 메시 '{name}'의 삼각형 인덱스가 범위를 벗어났습니다.",invalidTrailHull:'후행 메쉬 "{name}"의 외부 윤곽 번호가 잘못되었습니다.',trailHullIndexOutOfRange:'후행 메시 "{name}"의 외부 윤곽선 가장자리 인덱스가 범위를 벗어났습니다.',invalidInfluenceCount:"후행 메시 '{name}'에 잘못된 수의 뼈 가중치가 포함되어 있습니다.",missingBoneReference:"후행 메시 '{name}'는 존재하지 않는 뼈대를 참조합니다.",invalidWeight:'후행 그리드 "{name}"에 잘못된 중량 데이터가 포함되어 있습니다.',weightSum:"후행 메시 '{name}'의 정점 가중치의 합이 1이 아닙니다.",vertexCountMismatch:"후행 메시 '{name}'의 정점 수와 UV 수가 일치하지 않습니다.",invalidInherit:"뼈대 '{name}'의 상속 값 '{inherit}'가 Spine {version} JSON 형식을 따르지 않습니다.",trailBoneParent:'후행 뼈대 "{name}"는 입자 시스템 뼈 아래에 직접 매달려야 하며 뼈대 체인을 형성할 수 없습니다.',trailSlotEmpty:'가중 테일링 슬롯 "{name}"는 빈 부착물을 사용할 수 없습니다. 해당 뼈대 스케일링은 나타나지 않거나 사망하는 단계에서 0으로 설정되어야 합니다.',spine38Version:"Spine 3.8 내보낸 버전 ID는 3.8이어야 합니다.",spine38Inherit:'Spine 3.8 뼈 "{name}"는 변환을 사용해야 하며 상속을 사용할 수 없습니다.',spine38SlotColor:"Spine 3.8 슬롯 색상 타임라인은 color / twoColor를 사용해야 합니다.",spine38AttachmentName:"Spine 3.8 첨부 타임라인의 숨겨진 프레임에는 이름을 명시적으로 작성해야 합니다: null",spine38RotationAngle:"Spine 3.8 시간축을 회전하려면 각도를 사용해야 합니다.",spine38Curve:"Spine 3.8은 4.x 배열 곡선 형식을 지원하지 않습니다.",unsupportedExportVersion:"내보낸 버전은 지원되지 않으며 Spine {versions}만 지원됩니다.",exportVersionMismatch:"일관성 없는 내보내기 버전: Spine {expected}로 설정, JSON는 Spine {actual}로 표시됨",exportMissingBones:"내보내기 결과 뼈가 누락되었습니다.",missingAtlasTexture:"Atlas에서 참조하는 텍스처가 선택되지 않았습니다: {name}"},n$={label:"언어",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},s$={app:ON,common:NN,toolbar:$N,settings:BN,config:UN,curve:VN,gradient:XN,attributeControl:YN,pivot:zN,image:jN,timeline:HN,emission:GN,attributes:WN,appearance:qN,renderLayer:KN,export:{title:"내보내기 설정",reset:"내보내기 설정 재설정",imagesPath:"이미지 경로(Spine 이미지 경로)",spineVersion:"Spine 버전",keyframeCurve:"키프레임 보간 곡선",linear:"선의",smoothBezier:"부드러운 베지어(부드러운 Bézier)",bezierHelp:"Smooth Bezier는 오류 허용 범위 내에서 연속 동작을 맞춥니다. 탄생, 사망, 첨부 파일 전환 및 돌연변이는 여전히 단계 키프레임을 사용합니다.",spine38Help:"Spine 3.8은 4.x의 채널별 배열 베지어를 지원하지 않으며 내보낼 때 허용 오차가 감소된 조각별 선형 키프레임으로 변환됩니다.",fps:"내보내기 FPS",omitFps:"fps를 쓰지 마세요",fpsHelp:'FPS를 수정할 때 애니메이션의 실제 시간(초)을 변경하지 않고 유지하세요. "fps를 쓰지 마십시오"는 Spine의 fps 메타데이터만 생략합니다.',integerFrames:"정수 프레임 정렬",bonePool:"뼈 개체 풀",excludeEmpty:"콘텐츠가 없는 애니메이션 제외",baking:"애니메이션이 다시 계산되고 구워지고 있습니다.",exportJsonTitle:"Spine {version} JSON 내보내기",preparing:"수출 준비 중...",exportJson:"Spine JSON 내보내기",exportImagesTitle:"현재 파티클 시스템 ZIP에서 사용하는 이미지를 별도로 다운로드합니다.",organizingImages:"사진 정렬 중...",exportImages:"이미지 ZIP 내보내기",generatingProject:"프로젝트 생성 중...",exportSpine:".spine 패키지 내보내기",authorize:"현재 웹사이트 승인",authorizeTitle:"기본 커넥터에서 현재 웹사이트 승인",refreshConnector:"커넥터를 다시 확인하세요",refresh:"새로 고치다",recalculating:"입자 애니메이션을 다시 계산하는 중...",exported:"내보낸 Spine {version}: {systems} 입자 시스템, {animations} 애니메이션, {bones} 루트 뼈대 {warning}",resourceWarning:";{count} 리소스 팁(누락된 이미지는 계속 내보내집니다.)",timeout:"애니메이션 시간 초과를 다시 계산합니다. 페이지가 아직 실행 중인지 확인한 후 다시 시도하세요.",preparingProject:"사진을 정렬하고 이 기계를 Spine라고 부르는 중…",projectExported:"{fileName}가 생성되었습니다: .spine 프로젝트 및 {images} 사진, Spine {version} 포함",collectingImages:"현재 파티클 시스템에서 사용되는 사진을 조합하는 중...",imagesExported:"{fileName}가 생성되었습니다: {folder}/에는 {images} 사진이 포함되어 있습니다.",connectorChecking:"로컬 Spine 커넥터 감지 중...",connectorOffline:"로컬 Spine 커넥터가 실행 중이 아닙니다",spineNotFound:"커넥터는 실행 중이지만 Spine을 찾을 수 없습니다",notAuthorized:"커넥터는 실행 중이지만 이 사이트는 승인되지 않았습니다",connectorReady:"커넥터 사용 가능 · Spine 준비됨",connectorBusy:"Spine 프로젝트를 다시 계산하고 생성 중",connectorGenerate:"로컬 Spine으로 Spine {version} 프로젝트 생성",unknown:"알려지지 않은",checking:"확인 중",offline:"오프라인",notFound:"Spine 없음",unauthorized:"승인되지 않음",projectTransferTitle:"Spine 패키지 내보내기",projectTransferDetail:"입자 애니메이션을 다시 계산하는 중...",projectTransferDownload:"Spine 프로젝트 패키지가 다운로드되었습니다.",generatingJson:"Spine JSON 생성 중…",preparingProjectFiles:"프로젝트 사진을 대조하는 중...",uploading:"Spine 커넥터에 데이터 업로드 중...",spineProcessing:"Spine가 프로젝트를 변환하는 중입니다. 잠시 기다려 주세요...",downloadingProject:"생성된 Spine 프로젝트 패키지를 다운로드하는 중...",handingToBrowser:"다운로드를 위해 브라우저로 넘기는 중..."},transfer:JN,scene:ZN,modifiers:QN,spine:e$,help:t$,errors:i$,language:n$},r$={resizeTimeline:"Arraste para ajustar a altura da linha do tempo",systems:"sistema",particlesBones:"Partículas (ossos)",rootBone:"osso da raiz",hudTip:"Zoom da roda · Clique com o botão esquerdo para arrastar a tela",title:"Editor de Partículas Spine - Yeomai"},o$={close:"Fechar",reset:"Redefinir",add:"Adicionar",remove:"Remover",delete:"Excluir",clear:"Limpar",cancel:"Cancelar",confirm:"Confirmar",none:"Nenhum",enabled:"Ativado",disabled:"Desativado",fixed:"Fixo",random:"Aleatório",curve:"Curva",followExport:"Seguir exportação",linear:"Linear",bezier:"Bézier",above:"Acima",below:"Abaixo",left:"Esquerda",right:"Direita",seconds:"s",frames:"quadros"},a$={settings:"Configurações",undo:"Desfazer (Ctrl+Z)",pan:"Mover tela (Q)",translate:"Mover (W)",rotate:"Girar (E)",scale:"Escalar (R)",zoomIn:"Ampliar",zoomOut:"Reduzir",fitView:"Ajustar à tela",toggleGrid:"Alternar grade",resetView:"Redefinir visualização",background:"Fundo",backgroundSettings:"Configurações do fundo",changeBackground:"Trocar imagem",uploadBackground:"Enviar imagem",clearBackground:"Limpar fundo",noBackground:"Nenhuma imagem",backgroundX:"Deslocamento X da imagem de fundo",backgroundY:"Deslocamento Y da imagem de fundo",backgroundOpacity:"Transparência da imagem de fundo",opacity:"Opacidade",help:"Ajuda",openHelp:"Abrir ajuda"},l$={title:"Configurações do sistema",layout:"Layout da interface",parameterPanelPosition:"Localização do painel de parâmetros",panelOnRight:"O painel de parâmetros é mostrado à direita",history:"Histórico de operação",maxUndo:"Número máximo de passos para trás",canvasGuides:"Display auxiliar de tela",emitter:"ponto de lançamento",bones:"Conexão óssea",bonePointSize:"Tamanho do desenho do ponto ósseo",boneAxisSize:"Tamanho do desenho do eixo",skinMesh:"malha esfolada",enableTicks:"Habilitar ticks",tickFontSize:"Dimensionar o tamanho do texto",tickWidth:"espessura da marca",axisColor:"cor do eixo",showAxisLabels:"Exibir valor da escala",cacheNote:"Todas as configurações do sistema são salvas automaticamente no navegador atual"},c$={title:"Gerenciamento de configuração",save:"Salvar configuração",saveTitle:"Salve todas as configurações do editor (Ctrl+S)",load:"Carregar configuração",loadTitle:"Carregar configuração do editor local",presets:"Lista predefinida",selectPreset:"Selecionar predefinição",noPresets:"Nenhuma predefinição",saved:"A configuração foi salva localmente",loading:"Carregando configuração…",loaded:"Carregado: {name}",presetLoading:"Carregando predefinições…",presetLoaded:"Predefinição carregada: {name}",presetNamingError:"{message}, verifique a nomenclatura de arquivo padrão",presetTransferTitle:"Carregar predefinição",presetDownloading:"Baixando {file}…",presetParsing:"Analisando a configuração padrão...",presetRestoring:"Analisando e restaurando recursos padrão...",presetComplete:"Carregamento predefinido concluído",presetListError:"Não é possível ler a lista predefinida",presetReadError:"Não é possível ler a predefinição: {file}"},d$={bezierHint:"Arraste a alça quadrada para ajustar o arco · Clique duas vezes em um espaço em branco para criar um novo · Clique duas vezes em um nó para excluí-lo",linearHint:"Clique duas vezes em um espaço em branco para criar um novo. Clique duas vezes em um nó para excluí-lo. Arraste um nó para ajustá-lo.",resetTitle:"Restaurar curva padrão"},u$={addTitle:"Clique duas vezes na faixa de opções para adicionar uma marca colorida",color:"Código de cores",colorValue:"Valor de cor da escala de cores",position:"Posição da marca colorida",addMiddle:"Adicione cor no meio",delete:"Excluir patch de cor atual",hint:"Clique duas vezes na faixa colorida para adicionar uma nova · Arraste a marca colorida para ajustar sua posição · Clique duas vezes na marca colorida para excluí-la"},h$={angleOffset:"Deslocamento de ângulo",value:"valor numérico",lower:"limite inferior",upper:"limite superior",rangeLower:"Limite inferior do intervalo",rangeUpper:"Faixa superior",curveInput:"Entrada de curva →",direction:"Direção de lançamento"},f$={title:"ponto de articulação do mapa",zoomOut:"diminuir o zoom",zoomIn:"ampliar",expand:"Zoom para operação em tela cheia",interaction:"Clique com o botão esquerdo/arraste para definir o ponto de giro · Clique com o botão direito para arrastar a tela · Roda de rolagem para ampliar",previewAlt:"Visualização do ponto dinâmico",noImage:"Nenhuma imagem selecionada",resetCenter:"Reposicionar no meio (50%, 50%)",coordinates:"Coordenadas do ponto do eixo (%)",rotationTest:"Teste de rotação do eixo",static:"ainda",spin:"rotação",swing:"balanço",rotationAlt:"Teste de rotação",topLeft:"canto superior esquerdo",top:"Bem acima",topRight:"canto superior direito",left:"Direita esquerda",center:"meio",right:"Certo",bottomLeft:"canto inferior esquerdo",bottom:"Diretamente abaixo·inferior",bottomRight:"canto inferior direito"},p$={chooseSequence:"Selecione imagens de quadros de sequência",chooseLocal:"Selecione a imagem local",subfolder:"subpasta",name:"nome",restore:"Restaurar {name}",deleteResource:"Excluir recursos de imagem",imageMode:"Modo de imagem",fixed:"Imagem única",sequence:"Sequência",playbackMode:"modo de jogo",onceHide:"Uma vez, ocultar no final",onceHold:"Uma vez, manter último quadro",loopForward:"Loop para frente",loopReverse:"Loop reverso",playbackFps:"Taxa de quadros de reprodução",chooseSequenceMulti:"Selecione quadros de sequência (múltiplas seleções)",weight:"Peso %",unlockWeight:"Desbloquear bloqueio de proporção",lockWeight:"Bloquear a proporção atual",pivot:"Pivô da textura",collapsePivot:"Recolher ajuste do ponto de articulação",expandPivot:"Expandir o ajuste do ponto de articulação",pivotModal:"Eixo de rotação de textura ponto grande refinamento de imagem",pivotModalDesc:"Clique ou arraste em qualquer lugar no mapa abaixo para definir com precisão o centro de rotação/oscilação das partículas.",pivotZoomHint:"Suporta ampliação de 100% ~ 400%, mira precisa na ponta ou raiz:",confirmPivot:"Determinar e salvar o ponto de articulação",noSequence:"Nenhum quadro de sequência selecionado",firstFrame:"Quadro 1",firstImage:"primeira foto",lastImage:"última foto",pivotOn:"Aberto: X {x}% | Y {y}%",pivotOff:"Não ativado, o padrão é próximo ao centro da imagem (50%, 50%)",pivotCustom:"O ponto de articulação foi personalizado: X {x}% | Y {y}%",frameCountOne:"1 quadro · {name}",frameCountMany:"Quadro {count} · {first} → {last}",sequenceSelected:"O quadro {count} foi selecionado e reproduzido na ordem {first}-{last}"},m$={play:"Jogar(D)",pause:"Pausa (D)",toStart:"Volte para o primeiro quadro (S)",previous:"quadro anterior",next:"próximo quadro",toEnd:"Mover para o último quadro",continuousLoop:"Reprodução em loop contínuo",abLoop:"Loop independente do intervalo A/B",abLoopShort:"Loop AB",abRange:"Intervalo do ciclo AB",playbackStart:"Quadro inicial de reprodução personalizado",playbackEnd:"Quadro final de reprodução personalizado",startFrame:"Reproduzir quadro inicial",endFrame:"Reproduzir quadro final",frame:"quadro",emission:"Emissão",particleLife:"Partículas ativas",spineAnimation:"Animação Spine",ownerAnimation:"Animação associada",setOwnerAnimation:"Defina a animação à qual pertence o sistema de partículas atual",chooseOwnerAnimation:"Selecione a animação",animationName:"Nome da animação",renameAnimation:"Renomear a animação atual",rename:"Renomear",newAnimation:"+ Novo",keepOneAnimation:"Pelo menos uma animação precisa ser mantida",spinePreview:"Animação de visualização Spine",noSpineAnimation:"Nenhuma animação Spine disponível",none:"nenhum",systemName:"Sistema {index}",dragLoopDuration:"Duração do segmento do loop de arrastar",dragEmissionDuration:"Duração do arrasto",dragSpineStart:"Arraste para ajustar o horário de início da animação",noAnimationData:"Atualmente não há dados de animação para exibir.",animationNameEmpty:"O nome da animação não pode ficar vazio",animationNameDuplicate:"Os nomes das animações não podem ser repetidos",animationRenameFailed:"Não é possível modificar o nome da animação",zoomIn:"ampliar",zoomOut:"diminuir o zoom",zoomFit:"Moderado",frameStatus:"Quadro {current} / {total}"},g$={title:"Modo de emissão",reset:"Redefinir parâmetros do modo de transmissão",stream:"Contínuo",burst:"Explosão",normalStream:"Contínuo normal",loopStream:"Loop contínuo",rate:"Taxa de emissão",duration:"Duração da emissão",loopDuration:"Duração do lançamento (f)",generateStart:"Gerar animação de loop inicial",generateEnd:"Gerar animação de loop final",customDuration:"Especifique a duração",auto:"{frames}f automático",startLoopDuration:"Duração do segmento do loop inicial",endLoopDuration:"Duração do segmento do loop final",loopWarning:"O modo de persistência de loop não suporta seguimento de osso e seguimento de caminho; as configurações a seguir das partículas serão restauradas aos valores padrão ao entrar ou sair.",burstCount:"Quantidade por explosão",delay:"Atraso",shapeTitle:"Forma do emissor",shapeReset:"Redefinir parâmetros de formato do emissor",shape:"forma",point:"Ponto",circle:"Círculo",rect:"Retângulo",cone:"Cone",path:"Caminho",innerDiameter:"diâmetro interno",outerDiameter:"diâmetro externo",innerRadius:"raio interno",outerRadius:"raio externo",coneDirection:"Orientação cônica",coneAngle:"Ângulo de abertura cônico",innerWidth:"largura interna",innerHeight:"Alto por dentro",outerWidth:"Largura externa",outerHeight:"Extra alto",selectPath:"Selecione o caminho",noPath:"Sem caminho (emissão pontual)",birthDistribution:"distribuição de nascimentos",evenDistribution:"Distribuição fixa igualmente espaçada",randomDistribution:"distribuição aleatória",emissionAngle:"ângulo de lançamento",radial:"Radial (centro para fora)",pathNormal:"perpendicular ao caminho",pathTangent:"ao longo da direção do caminho",fixedAngle:"ângulo fixo",baseAngle:"ângulo base",randomRange:"intervalo aleatório",showShape:"mostrar forma"},v$={title:"Atributos das partículas",reset:"Redefinir parâmetros de atributos de partículas",initialParams:"Valores iniciais",initialLife:"ciclo de vida inicial",randomSample:"Amostragem aleatória →",initialSpeed:"velocidade inicial",initialScale:"dimensionamento inicial",uniform:"unificado",separateXY:"Separação XY",scaleX:"Ampliar X",scaleY:"Ampliar Y",initialRotation:"rotação inicial",lifecycleTitle:"Alterações durante o tempo de vida",speedOverLife:"velocidade do ciclo de vida",speedMultiplier:"multiplicador de velocidade",lifeTo:"ciclo de vida →",scaleOverLife:"Escala durante o ciclo de vida",scaleMultiplier:"Proporção de zoom",multiplierX:"Ampliação",multiplierY:"Ampliação Y",rotationOverLife:"Girar durante o ciclo de vida",rotationSpeed:"Velocidade de rotação"},b$={title:"Aparência e recursos",reset:"Redefinir parâmetros de aparência e recursos",opacity:"Opacidade",curveMode:"Modo curva",transparent:"0 (transparente)",opaque:"1 (opaco)",renderLayer:"Camada de renderização (slot Spine)",top:"nível superior",spineSlot:"Slot Spine",selectSpine:"Selecione Spine",noSpine:"Nenhum disponível Spine",noSlot:"Nenhum slot selecionado ainda",reselect:"Selecionar novamente",selectSlot:"Selecione o slot",searchSlots:"Pesquise o nome do slot ou acessório…",searchSlotsAria:"Espaços de pesquisa",emptySlot:"Espaço vazio",noMatchingSlots:"Nenhum slot correspondente",above:"no topo desta imagem do slot",below:"abaixo desta imagem do slot",followAttachment:"Mostre e oculte com acessórios de slot",previewOnly:"O ajuste do nível de exibição afeta apenas a visualização do editor e não afeta os dados exportados.",imageResources:"Recursos de imagem",addImage:"Adicione recursos de imagem",scale:"Zoom",color:"cor",fixedColor:"cor fixa",randomColor:"cor aleatória",lifetime:"vida útil",normal:"Normal",add:"Adição",multiply:"Multiplicação",screen:"Tela",fixedColorValue:"valor de cor fixo",randomColorHint:"Cada partícula escolhe aleatoriamente uma cor da fita quando nasce e permanece inalterada durante seu ciclo de vida.",independentAlpha:"Opacidade independente",off:"Desligado"},y$={slotLabelAbove:"{spine} / {slot} · Imagem acima",slotLabelBelow:"{spine} / {slot} · Abaixo da foto",resolvedAbove:"Renderizado acima da imagem {slot} e abaixo de seu slot",resolvedBetween:"Renderizado entre {previous} e {slot}",warningNoSpine:"Não há nenhum Spine carregado e as partículas são exibidas temporariamente no topo.",warningNoSelection:"Spine ainda não foi selecionado e as partículas são exibidas temporariamente no topo.",warningMissingSpine:"O alvo Spine não existe e as partículas são exibidas temporariamente no topo.",warningNotReady:"O alvo Spine não está pronto e as partículas são temporariamente exibidas no topo.",warningMissingSlot:"O slot alvo não existe (o recurso pode ter sido substituído) e as partículas são exibidas temporariamente no topo.",warningFirstSlot:"Este é o primeiro slot e não pode ser exibido abaixo dele; as partículas são exibidas temporariamente no topo."},x$={completed:"Concluído",failed:"Falha na operação"},w$={title:"Objetos da cena",addParticle:"Adicionar sistema de partículas",addParticleShort:"+partícula",addCollider:"Adicionar colisor",addColliderShort:"+colisão",addPath:"adicionar caminho",addPathShort:"+ caminho",addSpine:"Adicionar Spine",copyTitle:"Copie o objeto de cena atualmente selecionado",showParticle:"Mostrar sistema de partículas",hideParticle:"Ocultar sistema de partículas",showCollider:"mostrar colisores",hideCollider:"Ocultar colisor",showPath:"mostrar caminho",hidePath:"Ocultar caminho",showSpine:"Exibir Spine",hideSpine:"Ocultar Spine",particle:"Partículas",subEmitter:"Subemissor",collision:"Colisão",path:"Caminho",deleteParticle:"Excluir sistema de partículas",deleteCollider:"Excluir colisores",deletePath:"excluir caminho",deleteSpine:"Excluir Spine",empty:"Ainda não há objetos na cena",name:"nome",positionX:"Posição X",positionY:"Posição Y",offsetX:"Deslocamento X",offsetY:"Deslocamento Y",rotation:"Rotação",scaleX:"Escala X",scaleY:"Escala Y",seed:"Semente aleatória",seedTitle:"Controle todos os atributos aleatórios, seleção de recursos e modificador de amostragem aleatória no sistema de partículas",randomizeSeed:"Gere uma nova semente aleatória global",seedHint:"Controlar parâmetros aleatórios iniciais, seleção de recursos e amostragem aleatória modificadora; a mesma semente pode reproduzir o mesmo efeito",colliderTitle:"Propriedades do colisor",colliderName:"Nome do colisor",type:"tipo",circle:"redondo",ellipse:"oval",rect:"retângulo",polygon:"polígono",custom:"Personalizar",enabled:"habilitar",xPosition:"Posição X",yPosition:"Posição Y",scaleXShort:"Escala X",scaleYShort:"Escala Y",radius:"raio",radiusX:"Raio X",radiusY:"Raio Y",width:"largura",height:"alto",sides:"Número de lados",collisionResponse:"Resposta a falhas",physics:"Física (salto/fricção)",pause:"Pausa (parar)",destroy:"Desaparecer (destruir imediatamente)",elasticity:"Elasticidade (0-1)",friction:"Fricção (0-1)",followPath:"Siga o caminho",targetPath:"caminho de destino",notSelected:"(não selecionado)",moveDuration:"Duração do movimento (segundos)",followDirection:"direção ao longo do caminho",moveProgressCurve:"Curva de progresso móvel",moveProgressHelp:"Eixo horizontal: tempo real/duração do movimento; eixo vertical: progresso do caminho (0=ponto inicial → 1=ponto final)",pathTitle:"atributo de caminho",pathName:"nome do caminho",closedPath:"caminho fechado",pathColor:"cor do caminho",pathHelp:"Instruções de operação:",pathHelpItems:"Clique duas vezes no espaço/curva em branco: crie um novo ponto de ancoragem, clique duas vezes no ponto de ancoragem: exclua o nó, clique duas vezes na segunda vez e arraste: crie um novo e puxe a alça, arraste o ponto de ancoragem para mover a posição, arraste a alça para ajustar a curva, Shift + alça de arrastar: completamente simétrico em ambos os lados, A lt + alça de arrastar: controlar independentemente um lado, Ctrl + clicar/seleção de quadro: adicionar nós selecionados, Alt+clique/seleção de quadro: subtrair nós selecionados, Alt+clique no espaço em branco: limpe todas as seleções, selecione vários nós e arraste-os como um todo",applyPresetShape:"Aplicar uma forma predefinida",choosePreset:"Selecione uma predefinição...",square:"Quadrado",star:"forma de estrela",applyPreset:"Aplicar predefinição",clearAnchors:"ponto de ancoragem claro",panelHint:"Use o botão no canto superior direito para criar um objeto de cena"},S$={title:"Modificadores",reset:"Redefinir parâmetros modificadores",damping:"Amortecimento",enableNoise:"Ativar ruído de movimento",strength:"força",noiseRange:"Faixa de flutuação",noiseSpeed:"Taxa de fluxo de tempo",noiseHint:"O controle de intensidade afeta a proporção · A faixa de flutuação controla o desvio máximo · O fluxo de tempo controla a velocidade de mudança",enableGravity:"Ativar gravidade",gravityStrength:"Força da gravidade",strengthMin:"Força mínima",strengthMax:"Força máxima",direction:"direção",gravityOverLife:"Gravidade durante o ciclo de vida",windOverLife:"Vento do ciclo de vida",axisStrength:"Eixo vertical: intensidade 0 ~ 1",directionHint:"0° para a direita · -90° para baixo · Intensidade negativa inverte a direção",enableWind:"Ativar vento",windStrength:"força do vento",enableForceField:"Ativar campo de força",centerX:"Centro X",centerY:"Centro Y",forceStrength:"Força do campo de força",forceRadius:"raio do campo de força",falloffMode:"modo de decaimento",constant:"Constante (a velocidade não muda dentro da faixa)",linearFalloff:"Queda linear (a borda é 0)",inverseFalloff:"Inversamente proporcional à distância (mais forte no centro)",forceHint:"Os números positivos se atraem para o centro, os números negativos se repelem para fora e o círculo do campo de força pode ser arrastado dentro da tela.",showShape:"mostrar forma",enableVortex:"Ativar vórtice",vortexHint:"Números positivos no sentido anti-horário · Números negativos no sentido horário",enableAttraction:"Ativar atração",attractionX:"Ponto de adsorção X",attractionY:"Ponto de adsorção Y",attractionRadius:"raio de adsorção",attractionDuration:"Tempo de adsorção",delay:"Tempo de atraso",delayMode:"Modo de atraso",globalTime:"tempo unificado",particleLife:"vida de partícula única",attractionPath:"Método de adsorção",straight:"linha reta",attractionHint:"Após o atraso, a adsorção começa a partir da posição atual. Quando atingir a faixa vermelha, ele morrerá. O círculo de adsorção pode ser arrastado dentro da tela.",enableTrail:"Ativar rastro",trailImages:"Trailing de fotos independentes",addTrailImage:"Adicionar recursos de imagem finais",trailRotation:"girar",trailBones:"Número de ossos à direita",trailRatio:"Proporção final (%)",trailLength:"Comprimento final",randomRange:"intervalo aleatório",lengthRatio:"Proporção de comprimento (%)",lengthMin:"Comprimento mínimo (%)",lengthMax:"Comprimento máximo (%)",trailWidth:"Largura final",widthRatio:"proporção de largura (%)",widthMin:"Largura mínima (%)",widthMax:"Largura máxima (%)",widthScale:"escala de largura",followParticle:"siga partículas",lifeLengthCurve:"curva de comprimento do ciclo de vida",shapeCurve:"Curva de forma (cabeça → largura da cauda)",colorMode:"modo de cor",blendMode:"modo de mesclagem",fixedColor:"cor fixa",alphaMode:"modo de transparência",opacity:"transparência",gridRows:"Número de linhas da grade",gridCols:"Número de colunas da grade",trailHint:"Cada partícula gera um conjunto de ossos irmãos em proporção aos recursos; o comprimento e a largura aleatórios são determinados quando a partícula nasce, e a mesma semente pode ser reproduzida de forma estável",enableFollow:"Ativar seguimento do emissor",followMode:"modo de acompanhamento",noFollow:"nenhum",followPath:"siga o caminho",selectedBone:"ossos selecionados",emitterAngleMode:"Modo de ângulo do transmissor",fixedAngle:"ângulo fixo",followMoveDirection:"Siga a direção do movimento",moveProgressCurve:"Curva de progresso do movimento (0→1)",moveDuration:"Duração(ões) do movimento",followSpace:"siga o espaço",localSpace:"Espaço local (movimento GEN)",worldSpace:"Espaço mundial (movimento do ponto de geração de partículas)",moveDirection:"direção em movimento",forward:"Avançar (ponto inicial → ponto final)",reverse:"Reverso (ponto final → ponto inicial)",followOffset:"Ponto inicial do deslocamento (0-1)",followSpaceHint:"O espaço local move todo o emissor; o espaço mundial apenas move o ponto de geração de novas partículas, e as partículas nascidas permanecem na posição mundial.",followTarget:"Siga o alvo:",noValidBone:"Nenhum osso válido foi vinculado ainda. Selecione primeiro o osso na árvore hierárquica Spine.",rebind:"religar",bind:"vinculativo",selectedBoneLabel:"Osso atualmente selecionado:",boneLocalSpace:"Espaço local (move-se com ossos)",boneWorldSpace:"Espaço mundial (as partículas mantêm a posição após serem geradas)",offsetX:"Deslocamento de deslocamento X",offsetY:"Deslocamento de deslocamento Y",rotationOffset:"Deslocamento de rotação",scaleOffsetX:"Deslocamento de escala X",scaleOffsetY:"Deslocamento de escala Y",boneFollowHint:"O emissor segue apenas a posição do osso Spine selecionado e não herda a rotação ou escala de Spine; a transformação de partículas usa os próprios parâmetros e deslocamento superior do sistema de partículas.",enableCollision:"Ativar colisão",collisionObjects:"Objetos de colisão participantes",colliderDisabled:"{name} (colisores desativados)",clearCollider:"Limpar objeto de colisão {name}",addCollider:"Adicionar objetos de colisão de cena",noAvailableColliders:"Nenhum objeto de colisão para adicionar",noCollidersSelected:"Nenhum objeto de colisão é selecionado e as partículas atuais não colidirão.",available:"Disponível",disabled:"Desabilitado",collisionHint:"Somente objetos de colisão de cena adicionados e habilitados participarão da colisão do sistema de partículas atual.",enableSubEmitter:"Ativar subemissores",triggerTiming:"Escolha o tempo de disparo",birth:"nascer",death:"morrer",collision:"colisão",chooseTarget:"Selecione o sistema de partículas alvo",noTarget:"Nenhum (sistema de partículas)",deleteSubEmitter:"Exclua este subemissor",probability:"probabilidade de emissão",collisionLimit:"Limite de colisão",inherit:"herdar",colorInheritMode:"Método de herança de cores",add:"Adicionar",replace:"cobrir",addSubEmitter:"+ Adicionado novo subemissor",inheritNone:"Nenhum (padrão)",inheritAll:"Todas as propriedades",inheritColor:"cor",inheritScale:"tamanho",inheritRotation:"girar",inheritLife:"vida útil"},C$={title:"Propriedades do Spine",name:"Nome Spine",xPosition:"Posição X",yPosition:"Posição Y",rotation:"Rotação",scaleX:"Escala X",scaleY:"Escala Y",startTime:"Tempo inicial",resources:"Recursos Spine",chooseFolder:"Selecione a pasta e carregue",folderHint:"Leia JSON/SKEL, Atlas e todas as texturas em uma pasta de uma só vez; os recursos ainda podem ser substituídos individualmente abaixo.",choose:"escolher",chooseMultiple:"Selecione (múltiplas escolhas)",loading:"carregando…",load:"↧ Carregar",clear:"Claro",supportNote:"Suporte Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · Carregar sob demanda quando a versão correspondente estiver em execução · Offline local",currentResource:"Recurso atual {version}",animations:"Animações Spine",noAnimations:"Nenhuma animação disponível",timelineAnimation:"Reproduzir animação na linha do tempo",no:"nenhum",hierarchy:"Hierarquia",clearBoneTitle:"Clique para limpar a seleção de osso",noBoneTitle:"Nenhum osso está selecionado no momento",clearBone:"Limpar ossos selecionados: {name}",currentBone:"Esqueleto atual:",clearSlotTitle:"Clique para limpar a seleção de slot",noSlotTitle:"Nenhum slot está selecionado no momento",clearSlot:"Limpar slot selecionado: {name}",currentSlot:"Slot atual:",notSelected:"Não selecionado",expandAll:"Expandir tudo",collapseAll:"Recolher tudo",bones:"esqueleto",slots:"slot",notLoaded:"Não carregado Spine",searchBones:"Procure por ossos",searchBonesPlaceholder:"Pesquisar nome do osso…",clearSearch:"Limpar pesquisa",clearBoneSearch:"Limpar pesquisa óssea",noMatchingBones:"Nenhum osso correspondente encontrado",expandChildren:"Expandir ossos infantis",collapseChildren:"Recolher ossos infantis",notLoadedSlots:"Slot Spine não carregado",searchSlots:"Espaços de pesquisa",searchSlotsPlaceholder:"Pesquise o nome do slot ou acessório…",clearSlotSearch:"Limpar pesquisa de slots",noMatchingSlots:"Nenhum slot correspondente encontrado",slotTitle:"{name} (esqueleto: {bone}, anexo: {attachment})",empty:"nulo",textureSummary:"{count} Zhang: {names}",textureImages:"Imagens de textura",missingFolderAssets:"A pasta selecionada está faltando: {missing}",chooseAssets:"Selecione os dados Spine, Atlas e todas as imagens de textura em sequência"},A$={title:"Ajuda",subtitle:"Início rápido, desde a criação de partículas até o salvamento e exportação",close:"Fechar instruções",closeShort:"Fechar (Esc)",quickStart:"início rápido",stepCreate:'Crie um objeto: Use +Particles / +Collision / +Path / +Spine em "Scene Object" à esquerda para adicionar um objeto de cena.',stepEdit:'Editar partículas: Selecione o sistema de partículas e ajuste "Modo de emissão → Forma do emissor → Propriedades da partícula → Aparência e recursos → Modificador".',stepPreview:"Confira o efeito: A linha do tempo inferior pode ser reproduzida, pausada, quadro a quadro ou arrastada; será recalculado automaticamente após a modificação dos parâmetros.",stepExport:'Salvar e exportar: Use “Salvar configuração” para reter o projeto; "Exportar Spine Json/pacote de imagens/pacote .spine" para gerar o produto acabado.',quickNote:'"Reset" no lado direito do título de cada grupo de módulos pode restaurar os parâmetros padrão do grupo; as configurações do sistema serão salvas automaticamente no navegador atual.',commonOps:"Ações comuns",eye:"olhos pequenos",eyeDesc:"Mostrar/ocultar objetos individualmente; sistemas de partículas ocultas não são exportados.",copyDesc:"Copia completamente o objeto atualmente selecionado para facilitar a comparação de diferentes parâmetros.",backgroundDesc:"Carregue a imagem de referência e ajuste a posição e a transparência apenas para visualização da tela.",settingsDesc:"Layout da interface de gerenciamento, display auxiliar, balança, etc. são salvos automaticamente no navegador.",undoDesc:"Ctrl+Z retrai um passo; o número máximo de etapas pode ser ajustado nas configurações do sistema.",spineBoneDesc:"Pesquise e selecione um osso na árvore hierárquica, que pode ser usado pelo emissor de partículas a seguir.",shortcuts:"Atalhos",undoShortcut:"Desfazer a etapa anterior",saveShortcut:"Salvar configuração",panShortcut:"Arrastar tela",translateShortcut:"Ferramenta de deslocamento",rotateShortcut:"Ferramenta rotativa",scaleShortcut:"Ferramenta Zoom",playShortcut:"reproduzir/pausar",startShortcut:"Volte para o primeiro quadro",shortcutNote:"Q/W/E/R precisa clicar primeiro na tela; quando o cursor estiver na caixa de entrada, a tecla de atalho de tecla única não será acionada.",modules:"Guia dos módulos",configTitle:"Gerenciamento de configuração",saveConfigDesc:"Salve todos os objetos e parâmetros da cena atual como arquivos de projeto JSON (Ctrl+S também é suportado).",loadConfigDesc:"Selecione o arquivo de configuração local para restaurar o projeto completo.",presetDesc:"Selecione uma aplicação rápida padrão no menu suspenso; clique no menu suspenso para atualizar a lista.",configScope:"escopo",configScopeDesc:"A configuração contém objetos e parâmetros; as configurações da interface e do sistema são armazenadas separadamente no navegador.",sceneTitle:"objeto de cena",particleDesc:"objeto central. Posição, deslocamento, rotação, escala e semente aleatória podem ser definidos; a mesma semente pode reproduzir o mesmo efeito.",colliderDesc:"Círculo/elipse/retângulo/polígono/personalizado, suporta salto físico, pausa, destruição e movimento ao longo do caminho.",pathDesc:"Caminho Bézier com suporte para pontos de ancoragem, alças de controle, fechamento, cor e formas predefinidas.",spineDesc:"Carregue dados Spine, Atlas e texturas, navegue em ossos e slots e siga os emissores.",sceneCommonDesc:"Os objetos podem ser revelados e copiados de forma independente; sistemas de partículas ocultas não são exportados.",emissionDesc:"Disparo contínuo, explosão, atraso e duração de loop de três estágios de início/loop/fim.",burstDesc:"Emite um número especificado de partículas de uma só vez.",delayDesc:"O tempo de espera antes do início da emissão, correspondente à extremidade esquerda da barra de partículas.",loopNote:"A persistência de loop não oferece suporte ao seguimento de ossos e caminhos, e as configurações a seguir serão restauradas ao alternar.",shapeDesc:"Área de geração de ponto, círculo, retângulo, cone ou caminho. Círculos/cones suportam raios internos e externos, e retângulos suportam largura e altura internas e externas.",angleDesc:"Fixo, aleatório, radial, caminho normal ou caminho tangente.",initialDesc:"Ciclo de vida, velocidade, escala e suporte de rotação fixo, aleatório, curva e rotação podem seguir a direção de lançamento.",overLifeDesc:"A ampliação da velocidade, a ampliação do zoom e a velocidade de rotação podem ser controladas pela curva do ciclo de vida.",alphaDesc:"Suportes de transparência fixos ou curvos; o modo de curva pode seguir derivado, linear ou Bezier.",imageDesc:"Imagem única ou quadro de sequência, randomização de peso de várias imagens, ponto de articulação, cor, modo de mesclagem e transparência independente.",sequenceDesc:"Os métodos de reprodução incluem ocultação única, congelamento único, loop direto e loop reverso.",noiseDesc:"Gere traços de jitter e controle a intensidade, o alcance e a velocidade.",gravityDesc:"Curvas de gravidade, vento e intensidade do ciclo de vida.",forceDesc:"Campos de força globais, vórtices, adsorção e colisões.",trailDesc:"Ativos independentes, contagem de ossos, curvas de comprimento, largura, forma, cor e transparência.",followDesc:"O emissor pode seguir um caminho ou osso Spine.",collisionDesc:"Selecione objetos de colisão de cena e respostas de colisão de partículas.",exportDesc:"Defina o caminho da imagem, versão Spine, curva de quadro-chave, FPS, quadros inteiros, conjunto de ossos e animação vazia.",exportButtonsDesc:"Você pode exportar Spine JSON, imagens ZIP ou gerar projetos .spine por meio do conector.",connectorTitle:"Instruções de uso do conector Spine",connectorIntro:"O conector entrega o JSON e as imagens geradas pela página da web ao Spine que foi instalado e ativado na máquina local e os converte em projetos .spine editáveis.",prerequisite:"carregamento antecipado",prerequisiteDesc:"O computador tem Spine instalado e ativado e o conector de desktop foi iniciado.",download:"download",webSide:"página da Internet",webSideDesc:'Depois que "Conector disponível · Spine está pronto" for exibido, clique em "Exportar pacote .spine".',authorization:"primeira autorização",authorizationDesc:"A primeira conexão precisa verificar a origem do site e permitir uma vez; esta máquina salva a lista branca de autorização.",pathSetup:"Configurações de caminho",pathSetupDesc:"O conector detectará automaticamente Spine; se não puder ser encontrado, você poderá especificar manualmente o caminho do aplicativo.",downloadResult:"Baixar resultados",downloadResultDesc:"Obtenha o pacote ZIP, que contém o projeto .spine e o diretório de imagem.",version:"Versão",versionDesc:"O conector corresponde automaticamente a Spine 3.8~4.3 de acordo com a versão JSON.",security:"Segurança",securityDesc:"Ouça apenas o endereço local, a autorização é salva no conector e os arquivos temporários são limpos após a conversão.",differenceTitle:"Qual é a diferença entre configurar e exportar?",differenceDesc:'“Salvar configuração” salva todos os objetos e parâmetros que podem ser editados; "Exportar Spine Json" exporta apenas o sistema de partículas exibido e transforma os resultados de colisão, seguimento, rastreamento e subemissor em dados de animação independentes.'},T$={confirmLoopFollowEnter:"Depois de entrar no modo de loop contínuo, as configurações seguintes de partículas serão inválidas e restauradas para o valor padrão. Continuar?",confirmLoopFollowExit:"Depois de sair do modo de persistência de loop, as configurações a seguir serão inválidas e restauradas para seus valores padrão. Continuar?",invalidJson:"O arquivo de configuração não é válido JSON",invalidConfigFormat:"Não é o perfil do editor SpineParticle",unsupportedConfigVersion:"Versão de configuração ainda não suportada: {version}",missingScene:"O arquivo de configuração não contém dados completos da cena",missingEmbeddedSpine:"A configuração não contém recursos originais Spine reutilizáveis",chooseJsonConfig:"Selecione um arquivo de configuração .json",settingsInvalidJson:"O cache de configurações do sistema não é válido JSON",settingsFormat:"Não cache de configurações do sistema do Editor SpineParticle",settingsVersion:"A versão de configuração do sistema ainda não é suportada: {version}",settingsMissing:"Faltam configurações no cache de configurações do sistema",noExportableImages:"Não há imagens exportáveis ​​para o sistema de partículas atualmente visível",invalidZipPath:"ZIP Caminho de arquivo inválido",spineFileType:"Os dados Spine suportam apenas .json ou .skel",atlasFileType:"Arquivos Atlas suportam apenas .atlas",chooseTexture:"Selecione pelo menos uma imagem de textura",binaryParseFailed:"Falha na análise binária Spine (4.3: {v43}; versão antiga: {v42})",invalidSpineJson:"Spine JSON Formato de arquivo inválido",unsupportedSpineJsonVersion:"A versão Spine JSON não é suportada, apenas {versions} é compatível",unsupportedSpineDataVersion:"A versão de dados Spine não é suportada, apenas {versions} é compatível",embeddedReadFailed:"Não é possível ler o arquivo Spine incorporado: {name}",missingImageWarning:'A imagem "{file}" está ausente ou possui dimensões ilegíveis, caminho preservado.',missingTrailImageWarning:'A imagem final "{file}" está faltando e o caminho foi preservado.',emptyCacheWarning:"Nenhum framebuffer disponível para '{name}'.",readExportImageFailed:"Não é possível ler a imagem exportada: {name}",connectorOffline:"Conector Spine local não detectado, ative o conector primeiro",connectorHttpError:"O conector Spine retorna erro: HTTP {status}",invalidTrailUV:"Dados UV inválidos para malha final '{name}'",missingTrailVertices:"A malha final '{name}' está sem dados de vértice",trailIndexOutOfRange:"Índice triangular da malha final '{name}' fora dos limites",invalidTrailHull:'O número do contorno externo da malha final "{name}" é inválido',trailHullIndexOutOfRange:'O índice da borda do contorno externo da malha final "{name}" está fora dos limites',invalidInfluenceCount:"A malha final '{name}' contém um número inválido de pesos ósseos",missingBoneReference:"A malha final '{name}' faz referência a um osso inexistente",invalidWeight:'A grade final "{name}" contém dados de peso inválidos',weightSum:"Os pesos dos vértices da malha final '{name}' não somam 1",vertexCountMismatch:"A malha final '{name}' tem um número inconsistente de vértices e UVs",invalidInherit:"O valor herdado '{inherit}' para o osso '{name}' não está em conformidade com o formato Spine {version} JSON",trailBoneParent:'O osso final "{name}" deve ser pendurado diretamente sob o osso do sistema de partículas e não pode formar uma cadeia óssea.',trailSlotEmpty:'O slot de cauda ponderado "{name}" não pode usar anexos vazios. A escala óssea correspondente deve ser definida como 0 na fase de não aparecimento ou morte.',spine38Version:"Spine 3.8 O ID da versão exportada deve ser 3.8",spine38Inherit:'Spine 3.8 Bone "{name}" deve usar transformação e não pode usar herança',spine38SlotColor:"A linha do tempo de cores do slot Spine 3.8 deve usar color/twoColor",spine38AttachmentName:"Spine 3.8 O quadro oculto da linha do tempo do anexo deve ter um nome escrito explicitamente: null",spine38RotationAngle:"Spine 3.8 Você deve usar o ângulo para girar o eixo do tempo",spine38Curve:"Spine 3.8 não suporta formato de curva de matriz 4.x",unsupportedExportVersion:"A versão exportada não é suportada, apenas Spine {versions} é compatível",exportVersionMismatch:"Versão de exportação inconsistente: definida como Spine {expected}, JSON marcada como Spine {actual}",exportMissingBones:"O resultado da exportação está faltando ossos",missingAtlasTexture:"A textura referenciada por Atlas não está selecionada: {name}"},E$={label:"Idioma",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},_$={app:r$,common:o$,toolbar:a$,settings:l$,config:c$,curve:d$,gradient:u$,attributeControl:h$,pivot:f$,image:p$,timeline:m$,emission:g$,attributes:v$,appearance:b$,renderLayer:y$,export:{title:"Configurações de exportação",reset:"Redefinir configurações de exportação",imagesPath:"Caminho da imagem (caminho das imagens Spine)",spineVersion:"Versão do Spine",keyframeCurve:"Curva de interpolação de quadro-chave",linear:"Linear",smoothBezier:"Bézier Suave (Bézier Suave)",bezierHelp:"Smooth Bezier ajusta o movimento contínuo dentro da tolerância de erro; nascimento, morte, troca de apegos e mutações ainda usam quadros-chave de etapas.",spine38Help:"Spine 3.8 não oferece suporte à matriz Bezier por canal 4.x e é convertido em quadros-chave lineares por partes com tolerância reduzida na exportação.",fps:"FPS de exportação",omitFps:"Não escreva fps",fpsHelp:'Mantenha os segundos reais da animação inalterados ao modificar FPS; "Não escreva fps" omite apenas os metadados fps de Spine.',integerFrames:"Alinhamento de quadro inteiro",bonePool:"Conjunto de objetos ósseos",excludeEmpty:"Exclua animações sem conteúdo",baking:"A animação está sendo recalculada e preparada",exportJsonTitle:"Exportar Spine {version} JSON",preparing:"Preparando para exportar...",exportJson:"Exportar Spine JSON",exportImagesTitle:"Baixe separadamente a imagem usada pelo sistema de partículas atual ZIP",organizingImages:"Classificando fotos...",exportImages:"Exportar imagens ZIP",generatingProject:"Gerando projeto...",exportSpine:"Exportar pacote .spine",authorize:"Autorizar o site atual",authorizeTitle:"Autorize o site atual no conector nativo",refreshConnector:"Verifique novamente o conector",refresh:"atualizar",recalculating:"Recálculo da animação de partículas...",exported:"Spine {version} exportado: sistemas de partículas {systems}, animações {animations}, ossos de raiz {bones} {warning}",resourceWarning:";dicas de recursos {count} (as imagens ausentes ainda são exportadas)",timeout:"Recálculo do tempo limite da animação. Confirme se a página ainda está em execução e tente novamente",preparingProject:"Classificando fotos e chamando esta máquina de Spine…",projectExported:"{fileName} foi gerado: incluindo projeto .spine e imagens {images}, Spine {version}",collectingImages:"Comparando imagens atualmente usadas pelo sistema de partículas...",imagesExported:"{fileName} foi gerado: {folder}/ contém imagens {images}",connectorChecking:"Detectando conector Spine local...",connectorOffline:"O conector local do Spine não está em execução",spineNotFound:"O conector está ativo, mas o Spine não foi encontrado",notAuthorized:"O conector está ativo, mas este site não está autorizado",connectorReady:"Conector disponível · Spine pronto",connectorBusy:"Recalculando e gerando o projeto Spine",connectorGenerate:"Gerar projeto Spine {version} com o Spine local",unknown:"desconhecido",checking:"Verificando",offline:"Offline",notFound:"Spine não encontrado",unauthorized:"Não autorizado",projectTransferTitle:"Exportar pacote Spine",projectTransferDetail:"Recálculo da animação de partículas...",projectTransferDownload:"O pacote do projeto Spine foi baixado",generatingJson:"Gerando Spine JSON…",preparingProjectFiles:"Coletando fotos do projeto...",uploading:"Fazendo upload de dados para o conector Spine...",spineProcessing:"Spine está convertendo o projeto, aguarde...",downloadingProject:"Baixando o pacote do projeto Spine gerado...",handingToBrowser:"Passando para o navegador para download..."},transfer:x$,scene:w$,modifiers:S$,spine:C$,help:A$,errors:T$,language:E$},M$={title:"Spine粒子编辑器-Yeomai",resizeTimeline:"拖动调整时间轴高度",systems:"系统",particlesBones:"粒子(骨骼)",rootBone:"根骨骼",hudTip:"滚轮缩放 · 左键拖动画布"},P$={label:"语言",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},I$={close:"关闭",reset:"重置",add:"添加",remove:"移除",delete:"删除",clear:"清除",cancel:"取消",confirm:"确定",none:"无",enabled:"启用",disabled:"禁用",fixed:"固定",random:"随机",curve:"曲线",followExport:"跟随导出",linear:"线性",bezier:"贝塞尔",above:"之上",below:"之下",left:"左侧",right:"右侧",seconds:"秒",frames:"帧"},k$={settings:"系统设置",undo:"撤回上一步 (Ctrl+Z)",pan:"拖动画布 (Q)",translate:"位移 (W)",rotate:"旋转 (E)",scale:"缩放 (R)",zoomIn:"放大",zoomOut:"缩小",fitView:"适配画布",toggleGrid:"切换网格",resetView:"重置视图",background:"背景图",backgroundSettings:"背景图显示设置",changeBackground:"更换图像",uploadBackground:"上传图像",clearBackground:"清除背景",noBackground:"未上传图像",backgroundX:"背景图 X 偏移",backgroundY:"背景图 Y 偏移",backgroundOpacity:"背景图透明度",opacity:"透明度",help:"使用说明",openHelp:"查看使用说明"},R$={title:"系统设置",layout:"界面布局",parameterPanelPosition:"参数面板位置",panelOnRight:"参数面板显示在右侧",history:"操作历史",maxUndo:"最大撤回步数",canvasGuides:"画布辅助显示",emitter:"发射点",bones:"骨骼连线",bonePointSize:"骨骼点绘制大小",boneAxisSize:"坐标轴绘制大小",skinMesh:"蒙皮网格",enableTicks:"启用刻度",tickFontSize:"刻度文字大小",tickWidth:"刻度线粗细",axisColor:"坐标轴颜色",showAxisLabels:"显示刻度数值",cacheNote:"整个系统设置会自动保存到当前浏览器"},F$={title:"配置管理",save:"保存配置",saveTitle:"保存全部编辑器配置 (Ctrl+S)",load:"加载配置",loadTitle:"加载本地编辑器配置",presets:"预设列表",selectPreset:"选择预设",noPresets:"无预设文件",saved:"配置已保存到本地",loading:"正在加载配置…",loaded:"已加载:{name}",presetLoading:"正在加载预设…",presetLoaded:"已加载预设:{name}",presetNamingError:"{message},请检查预设文件命名",presetTransferTitle:"加载预设",presetDownloading:"正在下载 {file}…",presetParsing:"正在解析预设配置…",presetRestoring:"正在解析并恢复预设资源…",presetComplete:"预设加载完成",presetListError:"无法读取预设列表",presetReadError:"无法读取预设:{file}"},L$={bezierHint:"拖动方形手柄调整弧度 · 双击空白新建 · 双击节点删除",linearHint:"双击空白新建 · 双击节点删除 · 拖动节点调整",resetTitle:"恢复默认曲线"},D$={addTitle:"双击色带添加色标",color:"色标颜色",colorValue:"色标颜色值",position:"色标位置",addMiddle:"在中间新增颜色",delete:"删除当前色标",hint:"双击色带新增 · 拖动色标调整位置 · 双击色标删除"},O$={angleOffset:"角度偏移",value:"数值",lower:"下限",upper:"上限",rangeLower:"范围下限",rangeUpper:"范围上限",curveInput:"曲线输入 →",direction:"发射方向"},N$={title:"贴图轴点",zoomOut:"缩小",zoomIn:"放大",expand:"放大到全屏操作",interaction:"左键点击/拖动设置轴点 · 右键拖动画布 · 滚轮缩放",previewAlt:"轴点预览",noImage:"未选择图片",resetCenter:"复位居中 (50%, 50%)",coordinates:"轴点坐标(%)",rotationTest:"轴心旋转测试",static:"静止",spin:"自转",swing:"摆动",rotationAlt:"旋转测试",topLeft:"左上",top:"正上",topRight:"右上",left:"正左",center:"正中",right:"正右",bottomLeft:"左下",bottom:"正下·底部",bottomRight:"右下"},$$={chooseSequence:"选择序列帧图片",chooseLocal:"选择本地图片",subfolder:"子文件夹",name:"名称",restore:"恢复 {name}",deleteResource:"删除图片资源",imageMode:"图片模式",fixed:"固定",sequence:"序列帧",playbackMode:"播放模式",onceHide:"单次-尾帧消失",onceHold:"单次-尾帧固定",loopForward:"正向循环",loopReverse:"反向循环",playbackFps:"播放帧率",chooseSequenceMulti:"选择序列帧(多选)",weight:"占比%",unlockWeight:"解除占比锁定",lockWeight:"锁定当前占比",pivot:"贴图轴点",collapsePivot:"收起轴点调整",expandPivot:"展开轴点调整",pivotModal:"贴图旋转轴点大图精修",pivotModalDesc:"在下方贴图上任意点击或拖拽,精确设置粒子的旋转/摆动中心",pivotZoomHint:"支持 100% ~ 400% 放大,精确对准尖端或根部:",confirmPivot:"确定并保存轴点",noSequence:"未选择序列帧",firstFrame:"第 1 帧",firstImage:"第一张图片",lastImage:"最后一张图片",pivotOn:"已开启:X {x}% | Y {y}%",pivotOff:"未开启,默认围绕图片正中心 (50%, 50%)",pivotCustom:"轴点已自定义:X {x}% | Y {y}%",frameCountOne:"1 帧 · {name}",frameCountMany:"{count} 帧 · {first} → {last}",sequenceSelected:"已选择 {count} 帧,按 {first}-{last} 顺序播放"},B$={play:"播放 (D)",pause:"暂停 (D)",toStart:"回到第一帧 (S)",previous:"前一帧",next:"后一帧",toEnd:"移动到最后一帧",continuousLoop:"持续循环播放",abLoop:"独立 A/B 区间循环",abLoopShort:"AB 循环",abRange:"AB 循环区间",playbackStart:"自定义播放起始帧",playbackEnd:"自定义播放结束帧",startFrame:"播放起始帧",endFrame:"播放结束帧",frame:"帧",emission:"持续发射",particleLife:"粒子存在",spineAnimation:"Spine 动画",ownerAnimation:"所属动画",setOwnerAnimation:"设置当前粒子系统所属的动画",chooseOwnerAnimation:"选择所属动画",animationName:"动画名称",renameAnimation:"重命名当前动画",rename:"重命名",newAnimation:"+ 新增",keepOneAnimation:"至少需要保留一个动画",spinePreview:"Spine 预览动画",noSpineAnimation:"无可用 Spine 动画",none:"无",systemName:"系统 {index}",dragLoopDuration:"拖动循环段时长",dragEmissionDuration:"拖动持续发射时长",dragSpineStart:"拖动调整动画开始时间",noAnimationData:"暂无可显示的动画数据",animationNameEmpty:"动画名称不能为空",animationNameDuplicate:"动画名称不能重复",animationRenameFailed:"无法修改动画名称",zoomIn:"放大",zoomOut:"缩小",zoomFit:"适中",frameStatus:"帧 {current} / {total}"},U$={title:"发射模式",reset:"重置发射模式参数",stream:"持续",burst:"爆发",normalStream:"常规持续",loopStream:"循环持续",rate:"发射速率",duration:"发射时长",loopDuration:"发射时长 (f)",generateStart:"生成开始循环动画",generateEnd:"生成结束循环动画",customDuration:"指定时长",auto:"自动 {frames}f",startLoopDuration:"开始循环段时长",endLoopDuration:"结束循环段时长",loopWarning:"循环持续模式不支持骨骼跟随和路径跟随;进入或退出时会将粒子跟随设置恢复默认值。",burstCount:"单次数量",delay:"延迟时间",shapeTitle:"发射器形状",shapeReset:"重置发射器形状参数",shape:"形状",point:"点",circle:"圆形",rect:"矩形",cone:"锥形",path:"路径",innerDiameter:"内径",outerDiameter:"外径",innerRadius:"内半径",outerRadius:"外半径",coneDirection:"锥形朝向",coneAngle:"锥形开口角度",innerWidth:"内宽",innerHeight:"内高",outerWidth:"外宽",outerHeight:"外高",selectPath:"选择路径",noPath:"无路径(点发射)",birthDistribution:"出生分布",evenDistribution:"等间距固定分布",randomDistribution:"随机分布",emissionAngle:"发射角度",radial:"径向(中心向外)",pathNormal:"垂直于路径",pathTangent:"沿路径方向",fixedAngle:"固定角度",baseAngle:"基准角度",randomRange:"随机范围",showShape:"显示形状"},V$={title:"粒子属性",reset:"重置粒子属性参数",initialParams:"粒子初始参数",initialLife:"初始生命周期",randomSample:"随机采样 →",initialSpeed:"初始速度",initialScale:"初始缩放",uniform:"统一",separateXY:"XY分离",scaleX:"缩放 X",scaleY:"缩放 Y",initialRotation:"初始旋转",lifecycleTitle:"粒子生命周期变化参数",speedOverLife:"生命周期内速度",speedMultiplier:"速度倍率",lifeTo:"生命周期 →",scaleOverLife:"生命周期内缩放",scaleMultiplier:"缩放倍率",multiplierX:"倍率 X",multiplierY:"倍率 Y",rotationOverLife:"生命周期内旋转",rotationSpeed:"旋转速度"},X$={title:"外观与资源",reset:"重置外观与资源参数",opacity:"透明度",curveMode:"曲线模式",transparent:"0(透明)",opaque:"1(不透明)",renderLayer:"渲染层级(Spine 插槽)",top:"最上层",spineSlot:"Spine 插槽",selectSpine:"请选择 Spine",noSpine:"无可用 Spine",noSlot:"尚未选择插槽",reselect:"重新选择",selectSlot:"选择插槽",searchSlots:"搜索插槽或附件名称…",searchSlotsAria:"搜索插槽",emptySlot:"空插槽",noMatchingSlots:"没有匹配的插槽",above:"在此插槽图片之上",below:"在此插槽图片之下",followAttachment:"随插槽附件显隐",previewOnly:"调整显示层级只影响编辑器预览,不影响导出数据。",imageResources:"图片资源",addImage:"新增图片资源",scale:"缩放",color:"颜色",fixedColor:"固定色",randomColor:"随机颜色",lifetime:"生命周期",normal:"正常",add:"相加",multiply:"相乘",screen:"滤色",fixedColorValue:"固定颜色值",randomColorHint:"每个粒子出生时从色带随机取色,生命周期内保持不变",independentAlpha:"独立透明度",off:"关闭"},Y$={slotLabelAbove:"{spine} / {slot} · 图片之上",slotLabelBelow:"{spine} / {slot} · 图片之下",resolvedAbove:"渲染在 {slot} 图片之上、其后插槽之下",resolvedBetween:"渲染在 {previous} 与 {slot} 之间",warningNoSpine:"没有已加载的 Spine,粒子临时显示在最上层。",warningNoSelection:"尚未选择 Spine,粒子临时显示在最上层。",warningMissingSpine:"目标 Spine 不存在,粒子临时显示在最上层。",warningNotReady:"目标 Spine 未就绪,粒子临时显示在最上层。",warningMissingSlot:"目标插槽不存在(资源可能已更换),粒子临时显示在最上层。",warningFirstSlot:"这是第一个插槽,无法显示在其下方,粒子临时显示在最上层。"},z$={completed:"已完成",failed:"操作失败"},j$={title:"场景对象",addParticle:"添加粒子系统",addParticleShort:"+粒子",addCollider:"添加碰撞体",addColliderShort:"+碰撞",addPath:"添加路径",addPathShort:"+路径",addSpine:"添加 Spine",copyTitle:"复制当前选中的场景对象",showParticle:"显示粒子系统",hideParticle:"隐藏粒子系统",showCollider:"显示碰撞体",hideCollider:"隐藏碰撞体",showPath:"显示路径",hidePath:"隐藏路径",showSpine:"显示 Spine",hideSpine:"隐藏 Spine",particle:"粒子",subEmitter:"子发射器",collision:"碰撞",path:"路径",deleteParticle:"删除粒子系统",deleteCollider:"删除碰撞体",deletePath:"删除路径",deleteSpine:"删除 Spine",empty:"场景中暂无对象",name:"名称",positionX:"位置X",positionY:"位置Y",offsetX:"偏移X",offsetY:"偏移Y",rotation:"旋转",scaleX:"缩放X",scaleY:"缩放Y",seed:"随机种子",seedTitle:"控制粒子系统内全部随机属性、资源选择与修改器随机采样",randomizeSeed:"生成新的全局随机种子",seedHint:"控制初始随机参数、资源选择和修改器随机采样;相同种子可复现相同效果",colliderTitle:"碰撞体属性",colliderName:"碰撞体名称",type:"类型",circle:"圆形",ellipse:"椭圆",rect:"矩形",polygon:"多边形",custom:"自定义",enabled:"启用",xPosition:"X 位置",yPosition:"Y 位置",scaleXShort:"缩放 X",scaleYShort:"缩放 Y",radius:"半径",radiusX:"X 半径",radiusY:"Y 半径",width:"宽度",height:"高度",sides:"边数",collisionResponse:"碰撞响应",physics:"物理(弹跳/摩擦)",pause:"暂停(停止不动)",destroy:"消失(立即销毁)",elasticity:"弹性 (0-1)",friction:"摩擦 (0-1)",followPath:"跟随路径移动",targetPath:"目标路径",notSelected:"(未选择)",moveDuration:"移动时长(秒)",followDirection:"方向沿路径",moveProgressCurve:"移动进度曲线",moveProgressHelp:"横轴:实时/移动时长 纵轴:路径进度(0=起点 → 1=终点)",pathTitle:"路径属性",pathName:"路径名称",closedPath:"闭合路径",pathColor:"路径颜色",pathHelp:"操作说明:",pathHelpItems:["双击空白处/曲线:新建锚点","双击锚点:删除节点","双击第二下按住拖动:新建并拉出手柄","拖动锚点移动位置,拖动手柄调整曲线","Shift+拖动手柄:两侧完全对称","Alt+拖动手柄:独立控制单侧","Ctrl+点击/框选:加选节点","Alt+点击/框选:减选节点","Alt+单击空白处:清除全部选中","选中多个节点后可整体拖动"],applyPresetShape:"应用预设形状",choosePreset:"选择预设...",square:"方形",star:"星形",applyPreset:"应用预设",clearAnchors:"清空锚点",panelHint:"使用右上角按钮创建场景对象"},H$={title:"修改器",reset:"重置修改器参数",damping:"阻尼",enableNoise:"开启移动噪声",strength:"强度",noiseRange:"波动范围",noiseSpeed:"时间流速",noiseHint:"强度控制影响比例 · 波动范围控制最大偏移 · 时间流速控制变化速度",enableGravity:"开启重力",gravityStrength:"重力强度",strengthMin:"强度 min",strengthMax:"强度 max",direction:"方向",gravityOverLife:"生命周期内重力",windOverLife:"生命周期内风力",axisStrength:"纵轴:强度 0~1",directionHint:"0° 向右 · -90° 向下 · 负强度会反转方向",enableWind:"开启风力",windStrength:"风力强度",enableForceField:"开启力场",centerX:"中心 X",centerY:"中心 Y",forceStrength:"力场强度",forceRadius:"力场半径",falloffMode:"衰减模式",constant:"恒定(范围内力度不变)",linearFalloff:"线性衰减(边缘为 0)",inverseFalloff:"距离反比(中心最强)",forceHint:"正数吸向中心 · 负数向外排斥 · 可在画布内拖动力场圆",showShape:"显示形状",enableVortex:"开启漩涡",vortexHint:"正数逆时针 · 负数顺时针",enableAttraction:"开启吸附",attractionX:"吸附点 X",attractionY:"吸附点 Y",attractionRadius:"吸附半径",attractionDuration:"吸附时长",delay:"延迟时间",delayMode:"延迟方式",globalTime:"统一时间",particleLife:"单粒子生命",attractionPath:"吸附方式",straight:"直线",attractionHint:"延迟后从当前位置开始吸附 · 到达红色范围即死亡 · 可在画布内拖动吸附圆",enableTrail:"开启拖尾",trailImages:"拖尾独立图片",addTrailImage:"增加拖尾图片资源",trailRotation:"旋转",trailBones:"拖尾骨骼数",trailRatio:"拖尾比例 (%)",trailLength:"拖尾长度",randomRange:"随机范围",lengthRatio:"长度比例 (%)",lengthMin:"长度最小 (%)",lengthMax:"长度最大 (%)",trailWidth:"拖尾宽度",widthRatio:"宽度比例 (%)",widthMin:"宽度最小 (%)",widthMax:"宽度最大 (%)",widthScale:"宽度缩放",followParticle:"跟随粒子",lifeLengthCurve:"生命周期长度曲线",shapeCurve:"形状曲线(首端 → 尾端宽度)",colorMode:"颜色模式",blendMode:"混合模式",fixedColor:"固定颜色",alphaMode:"透明度模式",opacity:"透明度",gridRows:"网格行数",gridCols:"网格列数",trailHint:"每个粒子按资源比例生成一组同级拖尾骨骼;随机长度与宽度在粒子出生时确定,相同种子可稳定复现",enableFollow:"开启发射器跟随",followMode:"跟随模式",noFollow:"无",followPath:"跟随路径",selectedBone:"选中的骨骼",emitterAngleMode:"发射器角度模式",fixedAngle:"固定角度",followMoveDirection:"跟随移动方向",moveProgressCurve:"移动进度曲线 (0→1)",moveDuration:"移动时长 (s)",followSpace:"跟随空间",localSpace:"局部空间(GEN 移动)",worldSpace:"世界空间(粒子生成点移动)",moveDirection:"移动方向",forward:"正向(起点 → 终点)",reverse:"反向(终点 → 起点)",followOffset:"偏移起始点 (0-1)",followSpaceHint:"局部空间会移动整个发射器;世界空间只移动新粒子的生成点,已出生粒子留在世界位置。",followTarget:"跟随目标:",noValidBone:"尚未绑定有效骨骼,请先在 Spine 层级树中选择骨骼。",rebind:"重新绑定",bind:"绑定",selectedBoneLabel:"当前选中骨骼:",boneLocalSpace:"本地空间(随骨骼移动)",boneWorldSpace:"世界空间(粒子生成后保持位置)",offsetX:"位移偏移 X",offsetY:"位移偏移 Y",rotationOffset:"旋转偏移",scaleOffsetX:"缩放偏移 X",scaleOffsetY:"缩放偏移 Y",boneFollowHint:"发射器只跟随所选 Spine 骨骼的位置,不继承 Spine 的旋转或缩放;粒子变换使用粒子系统自身参数和上方偏移。",enableCollision:"开启碰撞",collisionObjects:"参与的碰撞对象",colliderDisabled:"{name}(碰撞体已禁用)",clearCollider:"清除碰撞对象 {name}",addCollider:"加入场景碰撞对象",noAvailableColliders:"没有可加入的碰撞对象",noCollidersSelected:"未选择碰撞对象,当前粒子不会发生碰撞",available:"可用",disabled:"已禁用",collisionHint:"只有已加入且启用的场景碰撞对象会参与当前粒子系统的碰撞",enableSubEmitter:"开启子发射器",triggerTiming:"选择触发时机",birth:"出生",death:"死亡",collision:"碰撞",chooseTarget:"选择目标粒子系统",noTarget:"无(粒子系统)",deleteSubEmitter:"删除该子发射器",probability:"发射概率",collisionLimit:"碰撞次数限制",inherit:"继承",colorInheritMode:"颜色继承方式",add:"相加",replace:"覆盖",addSubEmitter:"+ 新增子发射器",inheritNone:"无(默认值)",inheritAll:"所有属性",inheritColor:"颜色",inheritScale:"大小",inheritRotation:"旋转",inheritLife:"生命周期"},G$={title:"Spine 属性",name:"Spine 名称",xPosition:"X 位置",yPosition:"Y 位置",rotation:"旋转",scaleX:"Scale X",scaleY:"Scale Y",startTime:"开始时间",resources:"Spine 资源",chooseFolder:"选择文件夹并加载",folderHint:"一次读取文件夹中的 JSON / SKEL、Atlas 和全部纹理;仍可在下方单独替换资源。",choose:"选择",chooseMultiple:"选择(多选)",loading:"加载中…",load:"↧ 加载",clear:"清除",supportNote:"支持 Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · 对应版本运行时按需加载 · 本地离线",currentResource:"当前资源 {version}",animations:"Spine 动画",noAnimations:"无可用动画",timelineAnimation:"时间轴播放动画",no:"无",hierarchy:"层级树",clearBoneTitle:"点击清除骨骼选择",noBoneTitle:"当前未选择骨骼",clearBone:"清除选中骨骼:{name}",currentBone:"当前骨骼:",clearSlotTitle:"点击清除插槽选择",noSlotTitle:"当前未选择插槽",clearSlot:"清除选中插槽:{name}",currentSlot:"当前插槽:",notSelected:"未选择",expandAll:"全部展开",collapseAll:"全部折叠",bones:"骨骼",slots:"插槽",notLoaded:"未加载 Spine",searchBones:"搜索骨骼",searchBonesPlaceholder:"搜索骨骼名称…",clearSearch:"清空搜索",clearBoneSearch:"清空骨骼搜索",noMatchingBones:"未找到匹配的骨骼",expandChildren:"展开子骨骼",collapseChildren:"折叠子骨骼",notLoadedSlots:"未加载 Spine 插槽",searchSlots:"搜索插槽",searchSlotsPlaceholder:"搜索插槽或附件名称…",clearSlotSearch:"清空插槽搜索",noMatchingSlots:"未找到匹配的插槽",slotTitle:"{name}(骨骼:{bone},附件:{attachment})",empty:"空",textureSummary:"{count} 张:{names}",textureImages:"纹理图片",missingFolderAssets:"所选文件夹缺少:{missing}",chooseAssets:"请依次选择 Spine 数据、Atlas 和全部纹理图片"},W$={title:"使用说明",subtitle:"从创建粒子到保存、导出的快速入门",close:"关闭使用说明",closeShort:"关闭 (Esc)",quickStart:"快速开始",stepCreate:"创建对象:在左侧“场景对象”中用 +粒子 / +碰撞 / +路径 / +Spine 添加场景对象。",stepEdit:"编辑粒子:选中粒子系统,依次调整“发射模式 → 发射器形状 → 粒子属性 → 外观与资源 → 修改器”。",stepPreview:"查看效果:底部时间轴可播放、暂停、逐帧或拖动;修改参数后会自动重新计算。",stepExport:"保存与导出:用“保存配置”保留工程;“导出 Spine Json / images 包 / .spine 包”输出成品。",quickNote:"每个模块组标题右侧的“重置”可恢复该组默认参数;系统设置会自动保存在当前浏览器。",commonOps:"常用操作",eye:"小眼睛",eyeDesc:"单独显示/隐藏对象;隐藏的粒子系统不会被导出。",copyDesc:"完整复制当前选中对象,方便对比不同参数。",backgroundDesc:"上传参考图并调整位置和透明度,只用于画布预览。",settingsDesc:"管理界面布局、辅助显示、刻度等,自动存入浏览器。",undoDesc:"Ctrl+Z 撤回一步;最大步数可在系统设置中调整。",spineBoneDesc:"在层级树搜索并选择骨骼,可用于粒子发射器跟随。",shortcuts:"快捷键",undoShortcut:"撤回上一步",saveShortcut:"保存配置",panShortcut:"拖动画布",translateShortcut:"位移工具",rotateShortcut:"旋转工具",scaleShortcut:"缩放工具",playShortcut:"播放 / 暂停",startShortcut:"回到第一帧",shortcutNote:"Q / W / E / R 需先点击画布;光标位于输入框时,单键快捷键不会触发。",modules:"功能模块详解",configTitle:"配置管理",saveConfigDesc:"把当前全部场景对象和参数保存为工程 JSON 文件(也支持 Ctrl+S)。",loadConfigDesc:"选择本地配置文件,恢复完整工程。",presetDesc:"从下拉中选择预设快速套用;点击下拉刷新列表。",configScope:"范围",configScopeDesc:"配置包含对象与参数;界面和系统设置单独存于浏览器。",sceneTitle:"场景对象",particleDesc:"核心对象。可设置位置、偏移、旋转、缩放和随机种子;相同种子可复现相同效果。",colliderDesc:"圆形/椭圆/矩形/多边形/自定义,支持物理弹跳、暂停、销毁,以及沿路径移动。",pathDesc:"贝塞尔路径,支持锚点、控制手柄、闭合、颜色和预设形状。",spineDesc:"加载 Spine 数据、Atlas 和纹理,浏览骨骼与插槽,并用于发射器跟随。",sceneCommonDesc:"对象可独立显隐和复制;隐藏的粒子系统不会导出。",emissionDesc:"持续发射、爆发、延迟,以及开始/循环/结束三段式循环持续。",burstDesc:"一次性发射指定数量的粒子。",delayDesc:"发射开始前的等待时间,对应粒子条左端。",loopNote:"循环持续不支持骨骼和路径跟随,切换时会恢复跟随设置。",shapeDesc:"点、圆形、矩形、锥形或路径出生区域。圆/锥支持内外半径,矩形支持内外宽高。",angleDesc:"固定、随机、径向、路径法线或路径切线。",initialDesc:"生命周期、速度、缩放和旋转支持固定、随机、曲线,旋转可跟随发射方向。",overLifeDesc:"速度倍率、缩放倍率、旋转速度可用生命周期曲线控制。",alphaDesc:"透明度支持固定或曲线;曲线模式可跟随导出、线性或贝塞尔。",imageDesc:"单图或序列帧、多图权重随机、轴点、颜色、混合模式和独立透明度。",sequenceDesc:"播放方式有单次隐藏、单次定格、正向循环、反向循环。",noiseDesc:"产生抖动轨迹,并控制强度、范围和速度。",gravityDesc:"重力、风力和生命周期强度曲线。",forceDesc:"全局力场、漩涡、吸附和碰撞。",trailDesc:"独立拖尾资源、骨骼数、长度、宽度、形状、颜色与透明度曲线。",followDesc:"发射器可跟随路径或 Spine 骨骼。",collisionDesc:"选择场景碰撞对象和粒子碰撞响应。",exportDesc:"设置图片路径、Spine 版本、关键帧曲线、FPS、整数帧、骨骼池和空动画。",exportButtonsDesc:"可导出 Spine JSON、images ZIP,或通过连接器生成 .spine 工程。",connectorTitle:"Spine 连接器使用说明",connectorIntro:"连接器把网页生成的 JSON 和图片交给本机已安装并激活的 Spine,转换成可编辑的 .spine 工程。",prerequisite:"前置",prerequisiteDesc:"电脑已安装并激活 Spine,并已启动桌面版连接器。",download:"下载",webSide:"网页端",webSideDesc:"显示“连接器可用 · Spine 已就绪”后,点击“导出 .spine 包”。",authorization:"首次授权",authorizationDesc:"首次连接需核对网站来源并允许一次;本机会保存授权白名单。",pathSetup:"路径设置",pathSetupDesc:"连接器会自动检测 Spine;找不到时可手动指定应用路径。",downloadResult:"下载结果",downloadResultDesc:"得到 ZIP 包,内含 .spine 工程和图片目录。",version:"版本",versionDesc:"连接器按 JSON 版本自动匹配 Spine 3.8~4.3。",security:"安全",securityDesc:"仅监听本机地址,授权保存在连接器,临时文件转换后清理。",differenceTitle:"配置与导出有什么区别?",differenceDesc:"“保存配置”保存全部可继续编辑的对象和参数;“导出 Spine Json”只导出显示中的粒子系统,并把碰撞、跟随、拖尾和子发射器结果烘焙为独立动画数据。"},q$={confirmLoopFollowEnter:"进入循环持续模式后,粒子跟随设置会失效并恢复默认值。是否继续?",confirmLoopFollowExit:"退出循环持续模式后,粒子跟随设置会失效并恢复默认值。是否继续?",invalidJson:"配置文件不是有效的 JSON",invalidConfigFormat:"不是 SpineParticle 编辑器配置文件",unsupportedConfigVersion:"暂不支持配置版本:{version}",missingScene:"配置文件缺少完整场景数据",missingEmbeddedSpine:"配置未包含可复用的 Spine 原始资源",chooseJsonConfig:"请选择 .json 配置文件",settingsInvalidJson:"系统设置缓存不是有效的 JSON",settingsFormat:"不是 SpineParticle 编辑器系统设置缓存",settingsVersion:"暂不支持系统配置版本:{version}",settingsMissing:"系统设置缓存缺少 settings",noExportableImages:"当前可见粒子系统没有可导出的图片",invalidZipPath:"ZIP 文件路径无效",spineFileType:"Spine 数据仅支持 .json 或 .skel",atlasFileType:"图集文件仅支持 .atlas",chooseTexture:"请至少选择一张纹理图片",binaryParseFailed:"Spine 二进制解析失败(4.3:{v43};旧版:{v42})",invalidSpineJson:"Spine JSON 文件格式无效",unsupportedSpineJsonVersion:"Spine JSON 版本不受支持,仅支持 {versions}",unsupportedSpineDataVersion:"Spine 数据版本不受支持,仅支持 {versions}",embeddedReadFailed:"无法读取内嵌 Spine 文件:{name}",missingImageWarning:"图片“{file}”缺失或尺寸不可读,已保留路径。",missingTrailImageWarning:"拖尾图片“{file}”缺失,已保留路径。",emptyCacheWarning:"“{name}”没有可用帧缓存。",readExportImageFailed:"无法读取导出图片:{name}",connectorOffline:"未检测到本地 Spine 连接器,请先启动连接器",connectorHttpError:"Spine 连接器返回错误:HTTP {status}",invalidTrailUV:"拖尾网格“{name}”的 UV 数据无效",missingTrailVertices:"拖尾网格“{name}”缺少顶点数据",trailIndexOutOfRange:"拖尾网格“{name}”的三角形索引越界",invalidTrailHull:"拖尾网格“{name}”的外轮廓数量无效",trailHullIndexOutOfRange:"拖尾网格“{name}”的外轮廓边索引越界",invalidInfluenceCount:"拖尾网格“{name}”包含无效骨骼权重数量",missingBoneReference:"拖尾网格“{name}”引用了不存在的骨骼",invalidWeight:"拖尾网格“{name}”包含无效权重数据",weightSum:"拖尾网格“{name}”的顶点权重之和不为 1",vertexCountMismatch:"拖尾网格“{name}”的顶点数量与 UV 不一致",invalidInherit:"骨骼“{name}”的 inherit 值“{inherit}”不符合 Spine {version} JSON 格式",trailBoneParent:"拖尾骨骼“{name}”必须直接挂在粒子系统骨骼下,不能组成骨骼链",trailSlotEmpty:"加权拖尾插槽“{name}”不能使用空附件,未出现或死亡阶段应将对应骨骼缩放设为 0",spine38Version:"Spine 3.8 导出的版本标识必须为 3.8",spine38Inherit:"Spine 3.8 骨骼“{name}”应使用 transform,不能使用 inherit",spine38SlotColor:"Spine 3.8 插槽颜色时间轴必须使用 color / twoColor",spine38AttachmentName:"Spine 3.8 附件时间轴的隐藏帧必须显式写入 name: null",spine38RotationAngle:"Spine 3.8 旋转时间轴必须使用 angle",spine38Curve:"Spine 3.8 不支持 4.x 数组曲线格式",unsupportedExportVersion:"导出版本不受支持,仅支持 Spine {versions}",exportVersionMismatch:"导出版本不一致:设置为 Spine {expected},JSON 标记为 Spine {actual}",exportMissingBones:"导出结果缺少骨骼",missingAtlasTexture:"Atlas 引用的纹理未选择:{name}"},K$={app:M$,language:P$,common:I$,toolbar:k$,settings:R$,config:F$,curve:L$,gradient:D$,attributeControl:O$,pivot:N$,image:$$,timeline:B$,emission:U$,attributes:V$,appearance:X$,renderLayer:Y$,export:{title:"导出设置",reset:"重置导出设置",imagesPath:"图片路径 (Spine Images Path)",spineVersion:"Spine 版本",keyframeCurve:"关键帧插值曲线",linear:"线性 (Linear)",smoothBezier:"平滑贝塞尔 (Smooth Bézier)",bezierHelp:"平滑贝塞尔会在误差允许范围内拟合连续运动;出生、死亡、附件切换和突变仍使用阶跃关键帧。",spine38Help:"Spine 3.8 不支持 4.x 的逐通道数组贝塞尔,导出时会转换为经过容差精简的分段线性关键帧。",fps:"导出 FPS",omitFps:"不写 fps",fpsHelp:"修改 FPS 时保持动画实际秒数不变;“不写 fps”只省略 Spine 的 fps 元数据。",integerFrames:"整数帧对齐",bonePool:"骨骼对象池",excludeEmpty:"排除无内容动画",baking:"正在重新计算并烘焙动画",exportJsonTitle:"导出 Spine {version} JSON",preparing:"正在准备导出…",exportJson:"导出Spine Json",exportImagesTitle:"单独下载当前粒子系统使用的图片 ZIP",organizingImages:"正在整理图片…",exportImages:"导出 images 包",generatingProject:"正在生成工程…",exportSpine:"导出 .spine 包",authorize:"授权当前网站",authorizeTitle:"在本机连接器中授权当前网站",refreshConnector:"重新检测连接器",refresh:"刷新",recalculating:"正在重新计算粒子动画…",exported:"已导出 Spine {version}:{systems} 个粒子系统、{animations} 个动画、{bones} 根骨骼{warning}",resourceWarning:";{count} 条资源提示(缺图仍已导出)",timeout:"重新计算动画超时,请确认页面仍在运行后重试",preparingProject:"正在整理图片并调用本机 Spine…",projectExported:"已生成 {fileName}:包含 .spine 工程和 {images} 张图片,Spine {version}",collectingImages:"正在整理当前粒子系统使用的图片…",imagesExported:"已生成 {fileName}:{folder}/ 内包含 {images} 张图片",connectorChecking:"正在检测本地 Spine 连接器…",connectorOffline:"本地 Spine 连接器未启动",spineNotFound:"连接器已启动,但未找到 Spine",notAuthorized:"连接器已启动,当前网站尚未授权",connectorReady:"连接器可用 · Spine 已就绪",connectorBusy:"正在重新计算并生成 Spine 工程",connectorGenerate:"调用本机 Spine 自动生成 {version} 工程",unknown:"未知",checking:"检测中",offline:"未启动",notFound:"未找到 Spine",unauthorized:"未授权",projectTransferTitle:"导出 Spine 包",projectTransferDetail:"正在重新计算粒子动画…",projectTransferDownload:"Spine 工程包已开始下载",generatingJson:"正在生成 Spine JSON…",preparingProjectFiles:"正在整理工程图片…",uploading:"正在上传数据到 Spine 连接器…",spineProcessing:"Spine 正在转换工程,请稍候…",downloadingProject:"正在下载生成的 Spine 工程包…",handingToBrowser:"正在交给浏览器下载…"},transfer:z$,scene:j$,modifiers:H$,spine:G$,help:W$,errors:q$},J$={resizeTimeline:"拖曳調整時間軸高度",systems:"系統",particlesBones:"粒子(骨骼)",rootBone:"根骨骼",hudTip:"滾輪縮放 · 左鍵拖動畫布",title:"Spine粒子編輯器-Yeomai"},Z$={close:"關閉",reset:"重設",add:"新增",remove:"移除",delete:"刪除",clear:"清除",cancel:"取消",confirm:"確定",none:"無",enabled:"啟用",disabled:"停用",fixed:"固定",random:"隨機",curve:"曲線",followExport:"跟隨匯出",linear:"線性",bezier:"貝茲",above:"上方",below:"下方",left:"左側",right:"右側",seconds:"秒",frames:"幀"},Q$={settings:"系統設定",undo:"復原上一步 (Ctrl+Z)",pan:"拖曳畫布 (Q)",translate:"位移 (W)",rotate:"旋轉 (E)",scale:"縮放 (R)",zoomIn:"放大",zoomOut:"縮小",fitView:"適合畫布",toggleGrid:"切換網格",resetView:"重設視圖",background:"背景圖",backgroundSettings:"背景圖顯示設定",changeBackground:"更換圖像",uploadBackground:"上傳圖像",clearBackground:"清除背景",noBackground:"未上傳圖像",backgroundX:"背景圖 X 偏移",backgroundY:"背景圖 Y 偏移",backgroundOpacity:"背景圖透明度",opacity:"透明度",help:"使用說明",openHelp:"查看使用說明"},eB={title:"系統設定",layout:"介面佈局",parameterPanelPosition:"參數面板位置",panelOnRight:"參數面板顯示在右側",history:"操作歷史",maxUndo:"最大撤回步數",canvasGuides:"畫布輔助顯示",emitter:"發射點",bones:"骨骼連線",bonePointSize:"骨骼點繪製大小",boneAxisSize:"座標軸繪製大小",skinMesh:"蒙皮網格",enableTicks:"啟用刻度",tickFontSize:"刻度文字大小",tickWidth:"刻度線粗細",axisColor:"座標軸顏色",showAxisLabels:"顯示刻度數值",cacheNote:"整個系統設定會自動儲存到目前瀏覽器"},tB={title:"設定管理",save:"儲存設定",saveTitle:"儲存全部編輯器配置 (Ctrl+S)",load:"載入設定",loadTitle:"載入本機編輯器配置",presets:"預設列表",selectPreset:"選擇預設",noPresets:"無預設檔案",saved:"配置已儲存至本機",loading:"正在加載配置…",loaded:"已載入:{name}",presetLoading:"正在載入預設…",presetLoaded:"已載入預設:{name}",presetNamingError:"{message},請檢查預設檔命名",presetTransferTitle:"載入預設",presetDownloading:"正在下載 {file}…",presetParsing:"正在解析預設配置…",presetRestoring:"正在解析並恢復預設資源…",presetComplete:"預設載入完成",presetListError:"無法讀取預設列表",presetReadError:"無法讀取預設:{file}"},iB={bezierHint:"拖曳方形手把調整弧度 · 雙擊空白新建 · 雙擊節點刪除",linearHint:"雙擊空白新建 · 雙擊節點刪除 · 拖曳節點調整",resetTitle:"恢復預設曲線"},nB={addTitle:"雙擊色帶添加色標",color:"色標顏色",colorValue:"色標顏色值",position:"色標位置",addMiddle:"在中間新增顏色",delete:"刪除目前色標",hint:"雙擊色帶新增 · 拖曳色標調整位置 · 雙擊色標刪除"},sB={angleOffset:"角度偏移",value:"數值",lower:"下限",upper:"上限",rangeLower:"範圍下限",rangeUpper:"範圍上限",curveInput:"曲線輸入 →",direction:"發射方向"},rB={title:"貼圖軸點",zoomOut:"縮小",zoomIn:"放大",expand:"放大到全螢幕操作",interaction:"左鍵點選/拖曳設定軸點 · 右鍵拖曳動畫布 · 滾輪縮放",previewAlt:"軸點預覽",noImage:"未選擇圖片",resetCenter:"復位中 (50%, 50%)",coordinates:"軸點座標(%)",rotationTest:"軸心旋轉測試",static:"靜止",spin:"自轉",swing:"擺動",rotationAlt:"旋轉測試",topLeft:"左上",top:"正上",topRight:"右上",left:"正左",center:"正中",right:"正右",bottomLeft:"左下",bottom:"正下·底部",bottomRight:"右下"},oB={chooseSequence:"選擇序列影格圖片",chooseLocal:"選擇本地圖片",subfolder:"子資料夾",name:"名稱",restore:"恢復 {name}",deleteResource:"刪除圖片資源",imageMode:"圖片模式",fixed:"固定",sequence:"序列幀",playbackMode:"播放模式",onceHide:"單次-尾幀消失",onceHold:"單次-尾幀固定",loopForward:"正向循環",loopReverse:"反向循環",playbackFps:"播放影格率",chooseSequenceMulti:"選擇序列幀(多選)",weight:"權重 %",unlockWeight:"解除佔比鎖定",lockWeight:"鎖定目前佔比",pivot:"貼圖軸點",collapsePivot:"收起軸點調整",expandPivot:"展開軸點調整",pivotModal:"貼圖旋轉軸點大圖精修",pivotModalDesc:"在下方貼圖上任意點擊或拖拽,精確設定粒子的旋轉/擺動中心",pivotZoomHint:"支援 100% ~ 400% 放大,精確對準尖端或根部:",confirmPivot:"確定並保存軸點",noSequence:"未選擇序列幀",firstFrame:"第 1 幀",firstImage:"第一張圖片",lastImage:"最後一張圖片",pivotOn:"已開啟:X {x}% | Y {y}%",pivotOff:"未開啟,預設圍繞圖片正中心 (50%, 50%)",pivotCustom:"軸點已自訂:X {x}% | Y {y}%",frameCountOne:"1 幀 · {name}",frameCountMany:"{count} 幀 · {first} → {last}",sequenceSelected:"已選擇 {count} 幀,按 {first}-{last} 順序播放"},aB={play:"播放 (D)",pause:"暫停 (D)",toStart:"回到第一幀 (S)",previous:"前一幀",next:"後一幀",toEnd:"移動到最後一幀",continuousLoop:"持續循環播放",abLoop:"獨立 A/B 區間循環",abLoopShort:"AB 循環",abRange:"AB 循環區間",playbackStart:"自訂播放起始幀",playbackEnd:"自訂播放結束幀",startFrame:"播放起始影格",endFrame:"播放結束影格",frame:"影格",emission:"持續發射",particleLife:"粒子存在",spineAnimation:"Spine 動畫",ownerAnimation:"所屬動畫",setOwnerAnimation:"設定目前粒子系統所屬的動畫",chooseOwnerAnimation:"選擇所屬動畫",animationName:"動畫名稱",renameAnimation:"重新命名當前動畫",rename:"重新命名",newAnimation:"+ 新增",keepOneAnimation:"至少需要保留一個動畫",spinePreview:"Spine 預覽動畫",noSpineAnimation:"無可用 Spine 動畫",none:"無",systemName:"系統 {index}",dragLoopDuration:"拖曳循環段時長",dragEmissionDuration:"拖曳持續發射時長",dragSpineStart:"拖曳調整動畫開始時間",noAnimationData:"暫無可顯示的動畫數據",animationNameEmpty:"動畫名稱不能為空",animationNameDuplicate:"動畫名稱不能重複",animationRenameFailed:"無法修改動畫名稱",zoomIn:"放大",zoomOut:"縮小",zoomFit:"適中",frameStatus:"幀 {current} / {total}"},lB={title:"發射模式",reset:"重置發射模式參數",stream:"持續",burst:"爆發",normalStream:"一般持續",loopStream:"循環持續",rate:"發射速率",duration:"發射時長",loopDuration:"發射時長 (f)",generateStart:"生成開始循環動畫",generateEnd:"生成結束循環動畫",customDuration:"指定時長",auto:"自動 {frames}f",startLoopDuration:"開始循環段時長",endLoopDuration:"結束循環段時長",loopWarning:"循環持續模式不支援骨骼跟隨和路徑跟隨;進入或退出時會將粒子跟隨設定恢復預設值。",burstCount:"單次數量",delay:"延遲時間",shapeTitle:"發射器形狀",shapeReset:"重置發射器形狀參數",shape:"形狀",point:"點",circle:"圓形",rect:"矩形",cone:"錐形",path:"路徑",innerDiameter:"內徑",outerDiameter:"外徑",innerRadius:"內半徑",outerRadius:"外半徑",coneDirection:"錐形朝向",coneAngle:"錐形開口角度",innerWidth:"內寬",innerHeight:"內高",outerWidth:"外寬",outerHeight:"外高",selectPath:"選擇路徑",noPath:"無路徑(點發射)",birthDistribution:"出生分佈",evenDistribution:"等間距固定分佈",randomDistribution:"隨機分佈",emissionAngle:"發射角度",radial:"徑向(中心向外)",pathNormal:"垂直於路徑",pathTangent:"沿路徑方向",fixedAngle:"固定角度",baseAngle:"基準角度",randomRange:"隨機範圍",showShape:"顯示形狀"},cB={title:"粒子屬性",reset:"重置粒子屬性參數",initialParams:"粒子初始參數",initialLife:"初始生命週期",randomSample:"隨機取樣 →",initialSpeed:"初始速度",initialScale:"初始縮放",uniform:"統一",separateXY:"XY分離",scaleX:"縮放 X",scaleY:"縮放 Y",initialRotation:"初始旋轉",lifecycleTitle:"粒子生命週期變化參數",speedOverLife:"生命週期內速度",speedMultiplier:"速度倍率",lifeTo:"生命週期 →",scaleOverLife:"生命週期內縮放",scaleMultiplier:"縮放倍率",multiplierX:"倍率 X",multiplierY:"倍率 Y",rotationOverLife:"生命週期內旋轉",rotationSpeed:"旋轉速度"},dB={title:"外觀與資源",reset:"重置外觀與資源參數",opacity:"透明度",curveMode:"曲線模式",transparent:"0(透明)",opaque:"1(不透明)",renderLayer:"渲染層級(Spine 插槽)",top:"最上層",spineSlot:"Spine 插槽",selectSpine:"請選擇 Spine",noSpine:"無可用 Spine",noSlot:"尚未選擇插槽",reselect:"重新選擇",selectSlot:"選擇插槽",searchSlots:"搜尋插槽或附件名稱…",searchSlotsAria:"搜尋插槽",emptySlot:"空插槽",noMatchingSlots:"沒有符合的插槽",above:"在此插槽圖片之上",below:"在此插槽圖片之下",followAttachment:"隨插槽附件顯隱",previewOnly:"調整顯示層級只會影響編輯器預覽,不影響匯出資料。",imageResources:"圖片資源",addImage:"新增圖片資源",scale:"縮放",color:"顏色",fixedColor:"固定色",randomColor:"隨機顏色",lifetime:"生命週期",normal:"正常",add:"相加",multiply:"相乘",screen:"濾色",fixedColorValue:"固定顏色值",randomColorHint:"每個粒子出生時從色帶隨機取色,生命週期內保持不變",independentAlpha:"獨立透明度",off:"關閉"},uB={slotLabelAbove:"{spine} / {slot} · 圖片之上",slotLabelBelow:"{spine} / {slot} · 圖片之下",resolvedAbove:"渲染在 {slot} 圖片之上、其後插槽之下",resolvedBetween:"渲染在 {previous} 與 {slot} 之間",warningNoSpine:"沒有已載入的 Spine,粒子暫時顯示在最上層。",warningNoSelection:"尚未選擇 Spine,粒子暫時顯示在最上層。",warningMissingSpine:"目標 Spine 不存在,粒子暫時顯示在最上層。",warningNotReady:"目標 Spine 未就緒,粒子暫時顯示在最上層。",warningMissingSlot:"目標插槽不存在(資源可能已更換),粒子暫時顯示在最上層。",warningFirstSlot:"這是第一個插槽,無法顯示在其下方,粒子暫時顯示在最上層。"},hB={completed:"已完成",failed:"操作失敗"},fB={title:"場景物件",addParticle:"加入粒子系統",addParticleShort:"+粒子",addCollider:"添加碰撞體",addColliderShort:"+碰撞",addPath:"新增路徑",addPathShort:"+路徑",addSpine:"加入 Spine",copyTitle:"複製目前選取的場景對象",showParticle:"顯示粒子系統",hideParticle:"隱藏粒子系統",showCollider:"顯示碰撞體",hideCollider:"隱藏碰撞體",showPath:"顯示路徑",hidePath:"隱藏路徑",showSpine:"顯示 Spine",hideSpine:"隱藏 Spine",particle:"粒子",subEmitter:"子發射器",collision:"碰撞",path:"路徑",deleteParticle:"刪除粒子系統",deleteCollider:"刪除碰撞體",deletePath:"刪除路徑",deleteSpine:"刪除 Spine",empty:"場景中暫無對象",name:"名稱",positionX:"X 位置",positionY:"Y 位置",offsetX:"X 偏移",offsetY:"Y 偏移",rotation:"旋轉",scaleX:"X 縮放",scaleY:"Y 縮放",seed:"隨機種子",seedTitle:"控製粒子系統內全部隨機屬性、資源選擇與修改器隨機取樣",randomizeSeed:"產生新的全域隨機種子",seedHint:"控制初始隨機參數、資源選擇和修改器隨機取樣;相同種子可重現相同效果",colliderTitle:"碰撞體屬性",colliderName:"碰撞體名稱",type:"類型",circle:"圓形",ellipse:"橢圓",rect:"長方形",polygon:"多邊形",custom:"自訂",enabled:"啟用",xPosition:"X 位置",yPosition:"Y 位置",scaleXShort:"X 縮放",scaleYShort:"Y 縮放",radius:"半徑",radiusX:"X 半徑",radiusY:"Y 半徑",width:"寬度",height:"高度",sides:"邊數",collisionResponse:"碰撞響應",physics:"物理(彈跳/摩擦)",pause:"暫停(停止不動)",destroy:"消失(立即銷毀)",elasticity:"彈性 (0-1)",friction:"摩擦 (0-1)",followPath:"跟隨路徑移動",targetPath:"目標路徑",notSelected:"(未選擇)",moveDuration:"移動時長(秒)",followDirection:"方向沿路徑",moveProgressCurve:"移動進度曲線",moveProgressHelp:"橫軸:即時/移動時長 縱軸:路徑進度(0=起點 → 1=終點)",pathTitle:"路徑屬性",pathName:"路徑名稱",closedPath:"閉合路徑",pathColor:"路徑顏色",pathHelp:"操作說明:",pathHelpItems:"雙擊空白處/曲線:新錨點,雙擊錨點:刪除節點,雙擊第二下按住拖曳:新建並拉出手柄,拖曳錨點移動位置,拖曳手柄調整曲線,Shift+拖曳手柄:兩側完全對稱,A lt+拖曳手把:獨立控制單側,Ctrl+點選/框選:加選節點,Alt+點選/框選:減選節點,Alt+點選空白處:清除全部選取,選取多個節點後可整體拖曳",applyPresetShape:"應用預設形狀",choosePreset:"選擇預設...",square:"方形",star:"星形",applyPreset:"應用預設",clearAnchors:"清空錨點",panelHint:"使用右上角按鈕建立場景對象"},pB={title:"修改器",reset:"重置修改器參數",damping:"阻尼",enableNoise:"開啟移動雜訊",strength:"強度",noiseRange:"波動範圍",noiseSpeed:"時間流速",noiseHint:"強度控制影響比例 · 波動範圍控制最大偏移 · 時間流速控制變化速度",enableGravity:"開啟重力",gravityStrength:"重力強度",strengthMin:"強度 min",strengthMax:"強度 max",direction:"方向",gravityOverLife:"生命週期內重力",windOverLife:"生命週期內風力",axisStrength:"縱軸:強度 0~1",directionHint:"0° 向右 · -90° 向下 · 負強度會反轉方向",enableWind:"開啟風力",windStrength:"風力強度",enableForceField:"開啟力場",centerX:"中心 X",centerY:"中心 Y",forceStrength:"力場強度",forceRadius:"力場半徑",falloffMode:"衰減模式",constant:"恆定(範圍內力道不變)",linearFalloff:"線性衰減(邊緣為 0)",inverseFalloff:"距離反比(中心最強)",forceHint:"正數吸向中心 · 負數向外排斥 · 可在畫布內拖動力場圓",showShape:"顯示形狀",enableVortex:"開啟漩渦",vortexHint:"正數逆時針 · 負數順時針",enableAttraction:"開啟吸附",attractionX:"吸附點 X",attractionY:"吸附點 Y",attractionRadius:"吸附半徑",attractionDuration:"吸附時長",delay:"延遲時間",delayMode:"延遲方式",globalTime:"統一時間",particleLife:"單粒子生命",attractionPath:"吸附方式",straight:"直線",attractionHint:"延遲後從當前位置開始吸附 · 到達紅色範圍即死亡 · 可在畫布內拖動吸附圓",enableTrail:"開啟拖尾",trailImages:"拖尾獨立圖片",addTrailImage:"增加拖尾圖片資源",trailRotation:"旋轉",trailBones:"拖尾骨骼數",trailRatio:"拖尾比例 (%)",trailLength:"拖尾長度",randomRange:"隨機範圍",lengthRatio:"長度比例 (%)",lengthMin:"長度最小 (%)",lengthMax:"長度最大 (%)",trailWidth:"拖尾寬度",widthRatio:"寬度比例 (%)",widthMin:"寬度最小 (%)",widthMax:"寬度最大 (%)",widthScale:"寬度縮放",followParticle:"跟隨粒子",lifeLengthCurve:"生命週期長度曲線",shapeCurve:"形狀曲線(首端 → 尾端寬度)",colorMode:"色彩模式",blendMode:"混合模式",fixedColor:"固定顏色",alphaMode:"透明度模式",opacity:"透明度",gridRows:"網格行數",gridCols:"網格列數",trailHint:"每個粒子依資源比例產生一組同級拖尾骨骼;隨機長度與寬度在粒子出生時確定,相同種子可穩定復現",enableFollow:"開啟發射器跟隨",followMode:"跟隨模式",noFollow:"無",followPath:"跟隨路徑",selectedBone:"選取的骨骼",emitterAngleMode:"發射器角度模式",fixedAngle:"固定角度",followMoveDirection:"跟著移動方向",moveProgressCurve:"移動進度曲線 (0→1)",moveDuration:"移動時長 (s)",followSpace:"跟隨空間",localSpace:"局部空間(GEN 移動)",worldSpace:"世界空間(粒子生成點移動)",moveDirection:"移動方向",forward:"正向(起點 → 終點)",reverse:"反向(終點 → 起點)",followOffset:"偏移起始點 (0-1)",followSpaceHint:"局部空間會移動整個發射器;世界空間只移動新粒子的生成點,已出生粒子留在世界位置。",followTarget:"跟隨目標:",noValidBone:"尚未綁定有效骨骼,請先在 Spine 層級樹中選擇骨骼。",rebind:"重新綁定",bind:"綁定",selectedBoneLabel:"目前選取骨骼:",boneLocalSpace:"本地空間(隨骨骼移動)",boneWorldSpace:"世界空間(粒子生成後保持位置)",offsetX:"位移偏移 X",offsetY:"位移偏移 Y",rotationOffset:"旋轉偏移",scaleOffsetX:"縮放偏移 X",scaleOffsetY:"縮放偏移 Y",boneFollowHint:"發射器只跟隨所選 Spine 骨骼的位置,不繼承 Spine 的旋轉或縮放;粒子變換使用粒子系統本身參數和上方偏移。",enableCollision:"開啟碰撞",collisionObjects:"參與的碰撞對象",colliderDisabled:"{name}(碰撞體已停用)",clearCollider:"清除碰撞物件 {name}",addCollider:"加入場景碰撞對象",noAvailableColliders:"沒有可加入的碰撞對象",noCollidersSelected:"未選擇碰撞對象,目前粒子不會發生碰撞",available:"可用",disabled:"已停用",collisionHint:"只有已加入且啟用的場景碰撞物件會參與目前粒子系統的碰撞",enableSubEmitter:"開啟子發射器",triggerTiming:"選擇觸發時機",birth:"出生",death:"死亡",collision:"碰撞",chooseTarget:"選擇目標粒子系統",noTarget:"無(粒子系統)",deleteSubEmitter:"刪除該子發射器",probability:"發射機率",collisionLimit:"碰撞次數限制",inherit:"繼承",colorInheritMode:"顏色繼承方式",add:"相加",replace:"覆蓋",addSubEmitter:"+ 新增子發射器",inheritNone:"無(預設值)",inheritAll:"所有屬性",inheritColor:"顏色",inheritScale:"大小",inheritRotation:"旋轉",inheritLife:"生命週期"},mB={title:"Spine 屬性",name:"Spine 名稱",xPosition:"X 位置",yPosition:"Y 位置",rotation:"旋轉",scaleX:"X 縮放",scaleY:"Y 縮放",startTime:"開始時間",resources:"Spine 資源",chooseFolder:"選擇資料夾並加載",folderHint:"一次讀取資料夾中的 JSON / SKEL、Atlas 和全部紋理;仍可在下方單獨取代資源。",choose:"選擇",chooseMultiple:"選擇(多選)",loading:"載入中…",load:"↧ 加載",clear:"清除",supportNote:"支援 Spine 3.8 / 4.0 / 4.1 / 4.2 / 4.3 JSON · 對應版本運行時按需載入 · 本地離線",currentResource:"目前資源 {version}",animations:"Spine 動畫",noAnimations:"無可用動畫",timelineAnimation:"時間軸播放動畫",no:"無",hierarchy:"階層樹",clearBoneTitle:"點擊清除骨骼選擇",noBoneTitle:"目前未選擇骨骼",clearBone:"清除選取骨骼:{name}",currentBone:"當前骨骼:",clearSlotTitle:"點選清除插槽選擇",noSlotTitle:"目前未選擇插槽",clearSlot:"清除選取插槽:{name}",currentSlot:"目前插槽:",notSelected:"未選擇",expandAll:"全部展開",collapseAll:"全部折疊",bones:"骨骼",slots:"插槽",notLoaded:"未載入 Spine",searchBones:"搜尋骨骼",searchBonesPlaceholder:"搜尋骨骼名稱…",clearSearch:"清空搜尋",clearBoneSearch:"清空骨骼搜索",noMatchingBones:"未找到匹配的骨骼",expandChildren:"展開子骨骼",collapseChildren:"折疊子骨骼",notLoadedSlots:"未載入 Spine 插槽",searchSlots:"搜尋插槽",searchSlotsPlaceholder:"搜尋插槽或附件名稱…",clearSlotSearch:"清空插槽搜尋",noMatchingSlots:"未找到符合的插槽",slotTitle:"{name}(骨骼:{bone},配件:{attachment})",empty:"空",textureSummary:"{count} 張:{names}",textureImages:"紋理圖片",missingFolderAssets:"所選資料夾缺少:{missing}",chooseAssets:"請依序選擇 Spine 資料、Atlas 和全部紋理圖片"},gB={title:"使用說明",subtitle:"從創建粒子到保存、導出的快速入門",close:"關閉使用說明",closeShort:"關閉 (Esc)",quickStart:"快速開始",stepCreate:"建立物件:在左側「場景物件」中以 +粒子 / +碰撞 / +路徑 / +Spine 新增場景物件。",stepEdit:"編輯粒子:選取粒子系統,依序調整「發射模式 → 發射器形狀 → 粒子屬性 → 外觀與資源 → 修改器」。",stepPreview:"查看效果:底部時間軸可播放、暫停、逐幀或拖曳;修改參數後會自動重新計算。",stepExport:"儲存與匯出:以「儲存設定」保留工程;「匯出 Spine Json / images 套件 / .spine 套件」輸出完成品。",quickNote:"每個模組組標題右側的「重設」可恢復此組預設參數;系統設定會自動儲存在目前瀏覽器。",commonOps:"常用操作",eye:"小眼睛",eyeDesc:"單獨顯示/隱藏物件;隱藏的粒子系統不會被匯出。",copyDesc:"完整複製目前選取對象,方便比較不同參數。",backgroundDesc:"上傳參考圖並調整位置和透明度,只用於畫布預覽。",settingsDesc:"管理介面佈局、輔助顯示、刻度等,自動存入瀏覽器。",undoDesc:"Ctrl+Z 撤回一步;最大步數可在系統設定中調整。",spineBoneDesc:"在層級樹搜尋並選擇骨骼,可用於粒子發射器跟隨。",shortcuts:"快速鍵",undoShortcut:"撤銷上一步",saveShortcut:"儲存配置",panShortcut:"拖曳動畫布",translateShortcut:"位移工具",rotateShortcut:"旋轉工具",scaleShortcut:"縮放工具",playShortcut:"播放 / 暫停",startShortcut:"回到第一幀",shortcutNote:"Q / W / E / R 需先點選畫布;遊標位於輸入框時,單鍵快速鍵不會觸發。",modules:"功能模組詳解",configTitle:"配置管理",saveConfigDesc:"把目前全部場景物件和參數儲存為工程​​ JSON 檔案(也支援 Ctrl+S)。",loadConfigDesc:"選擇本地設定文件,恢復完整工程。",presetDesc:"從下拉選擇預設快速套用;點選下拉刷新清單。",configScope:"範圍",configScopeDesc:"配置包含物件與參數;介面和系統設定單獨存於瀏覽器。",sceneTitle:"場景對象",particleDesc:"核心對象。可設定位置、偏移、旋轉、縮放和隨機種子;相同種子可重複相同效果。",colliderDesc:"圓形/橢圓/矩形/多邊形/自訂,支援實體彈跳、暫停、銷毀,以及沿路徑移動。",pathDesc:"貝塞爾路徑,支援錨點、控製手柄、閉合、顏色和預設形狀。",spineDesc:"載入 Spine 資料、Atlas 和紋理,瀏覽骨骼與插槽,並用於發射器跟隨。",sceneCommonDesc:"物件可獨立顯隱和複製;隱藏的粒子系統不會導出。",emissionDesc:"持續發射、爆發、延遲,以及開始/循環/結束三段式循環持續。",burstDesc:"一次性發射指定數量的粒子。",delayDesc:"發射開始前的等待時間,對應粒子條左端。",loopNote:"循環持續不支援骨骼和路徑跟隨,切換時會恢復跟隨設定。",shapeDesc:"點、圓形、長方形、錐形或路徑出生區域。圓/錐支持內外半徑,矩形支持內外寬高。",angleDesc:"固定、隨機、徑向、路徑法線或路徑切線。",initialDesc:"生命週期、速度、縮放和旋轉支援固定、隨機、曲線,旋轉可跟隨發射方向。",overLifeDesc:"速度倍率、縮放倍率、旋轉速度可用生命週期曲線控制。",alphaDesc:"透明度支援固定或曲線;曲線模式可跟隨導出、線性或貝塞爾。",imageDesc:"單圖或序列幀、多圖權重隨機、軸點、顏色、混合模式和獨立透明度。",sequenceDesc:"播放方式有單次隱藏、單次定格、正向循環、反向循環。",noiseDesc:"產生抖動軌跡,並控制強度、範圍和速度。",gravityDesc:"重力、風力和生命週期強度曲線。",forceDesc:"全局力場、漩渦、吸附和碰撞。",trailDesc:"獨立拖尾資源、骨骼數、長度、寬度、形狀、顏色與透明度曲線。",followDesc:"發射器可跟隨路徑或 Spine 骨骼。",collisionDesc:"選擇場景碰撞物件和粒子碰撞響應。",exportDesc:"設定圖片路徑、Spine 版本、關鍵影格曲線、FPS、整數影格、骨骼池和空白動畫。",exportButtonsDesc:"可導出 Spine JSON、images ZIP,或透過連接器產生 .spine 工程。",connectorTitle:"Spine 連接器使用說明",connectorIntro:"連接器把網頁產生的 JSON 和圖片交給本機已安裝並啟動的 Spine,轉換成可編輯的 .spine 工程。",prerequisite:"前置",prerequisiteDesc:"電腦已安裝並啟動 Spine,並已啟動桌面版連接器。",download:"下載",webSide:"網頁端",webSideDesc:"顯示「連接器可用 · Spine 已就緒」後,點選「匯出 .spine 套件」。",authorization:"首次授權",authorizationDesc:"首次連接需核對網站來源並允許一次;本機會保存授權白名單。",pathSetup:"路徑設定",pathSetupDesc:"連接器會自動偵測 Spine;找不到時可手動指定應用路徑。",downloadResult:"下載結果",downloadResultDesc:"得到 ZIP 包,內含 .spine 工程和圖片目錄。",version:"版本",versionDesc:"連接器按 JSON 版本自動匹配 Spine 3.8~4.3。",security:"安全",securityDesc:"僅監聽本機位址,授權保存在連接器,臨時檔案轉換後清理。",differenceTitle:"配置與匯出有什麼差別?",differenceDesc:"「儲存配置」儲存全部可繼續編輯的物件和參數;「匯出 Spine Json」只匯出顯示中的粒子系統,並把碰撞、跟隨、拖尾和子發射器結果烘焙為獨立動畫資料。"},vB={confirmLoopFollowEnter:"進入循環持續模式後,粒子跟隨設定會失效並恢復預設值。是否繼續?",confirmLoopFollowExit:"退出循環持續模式後,粒子跟隨設定會失效並恢復預設值。是否繼續?",invalidJson:"設定檔不是有效的 JSON",invalidConfigFormat:"不是 SpineParticle 編輯器設定檔",unsupportedConfigVersion:"暫不支援配置版本:{version}",missingScene:"設定檔缺少完整場景數據",missingEmbeddedSpine:"配置未包含可重複使用的 Spine 原始資源",chooseJsonConfig:"請選擇 .json 設定文件",settingsInvalidJson:"系統設定快取不是有效的 JSON",settingsFormat:"不是 SpineParticle 編輯器系統設定緩存",settingsVersion:"暫不支援系統配置版本:{version}",settingsMissing:"系統設定緩存缺少 settings",noExportableImages:"目前可見粒子系統沒有可匯出的圖片",invalidZipPath:"ZIP 檔案路徑無效",spineFileType:"Spine 資料僅支援 .json 或 .skel",atlasFileType:"圖集檔案僅支援 .atlas",chooseTexture:"請至少選擇一張紋理圖片",binaryParseFailed:"Spine 二進位解析失敗(4.3:{v43};舊版:{v42})",invalidSpineJson:"Spine JSON 檔案格式無效",unsupportedSpineJsonVersion:"Spine JSON 版本不受支持,僅支援 {versions}",unsupportedSpineDataVersion:"Spine 資料版本不受支持,僅支援 {versions}",embeddedReadFailed:"無法讀取內嵌 Spine 檔案:{name}",missingImageWarning:"圖片「{file}」缺失或尺寸不可讀,已保留路徑。",missingTrailImageWarning:"拖尾圖片「{file}」缺失,已保留路徑。",emptyCacheWarning:"“{name}”沒有可用幀快取。",readExportImageFailed:"無法讀取匯出圖:{name}",connectorOffline:"未偵測到本機 Spine 連接器,請先啟動連接器",connectorHttpError:"Spine 連接器回傳錯誤:HTTP {status}",invalidTrailUV:"拖尾網格「{name}」的 UV 資料無效",missingTrailVertices:"拖尾網格“{name}”缺少頂點數據",trailIndexOutOfRange:"拖尾網格「{name}」的三角形索引越界",invalidTrailHull:"拖尾網格「{name}」的外輪廓數量無效",trailHullIndexOutOfRange:"拖尾網格「{name}」的外輪廓邊索引越界",invalidInfluenceCount:"拖尾網格“{name}”包含無效骨骼權重數量",missingBoneReference:"拖尾網格“{name}”引用了不存在的骨骼",invalidWeight:"拖尾網格“{name}”包含無效權重數據",weightSum:"拖尾網格「{name}」的頂點權重總和不為 1",vertexCountMismatch:"拖尾網格「{name}」的頂點數量與 UV 不一致",invalidInherit:"骨骼「{name}」的 inherit 值「{inherit}」不符合 Spine {version} JSON 格式",trailBoneParent:"拖尾骨骼「{name}」必須直接掛在粒子系統骨骼下,無法組成骨骼鏈",trailSlotEmpty:"加權拖尾插槽「{name}」不能使用空白附件,未出現或死亡階段應將對應骨骼縮放設為 0",spine38Version:"Spine 3.8 導出的版本標識必須為 3.8",spine38Inherit:"Spine 3.8 骨骼「{name}」應使用 transform,不能使用 inherit",spine38SlotColor:"Spine 3.8 插槽顏色時間軸必須使用 color / twoColor",spine38AttachmentName:"Spine 3.8 附件時間軸的隱藏訊框必須明確寫入 name: null",spine38RotationAngle:"Spine 3.8 旋轉時間軸必須使用 angle",spine38Curve:"Spine 3.8 不支援 4.x 陣列曲線格式",unsupportedExportVersion:"匯出版本不受支持,僅支援 Spine {versions}",exportVersionMismatch:"匯出版本不一致:設定為 Spine {expected},JSON 標記為 Spine {actual}",exportMissingBones:"匯出結果缺少骨骼",missingAtlasTexture:"Atlas 引用的紋理未選擇:{name}"},bB={label:"語言",zhCN:"中文",zhTW:"繁體中文",en:"English",ja:"日本語",ko:"한국어",fr:"Français",de:"Deutsch",ptBR:"Português",es:"Español"},yB={app:J$,common:Z$,toolbar:Q$,settings:eB,config:tB,curve:iB,gradient:nB,attributeControl:sB,pivot:rB,image:oB,timeline:aB,emission:lB,attributes:cB,appearance:dB,renderLayer:uB,export:{title:"匯出設定",reset:"重置導出設定",imagesPath:"圖片路徑 (Spine Images Path)",spineVersion:"Spine 版本",keyframeCurve:"關鍵幀插值曲線",linear:"線性 (Linear)",smoothBezier:"平滑貝塞爾 (Smooth Bézier)",bezierHelp:"平滑貝塞爾會在誤差允許範圍內擬合連續運動;出生、死亡、附件切換和突變仍使用階躍關鍵幀。",spine38Help:"Spine 3.8 不支援 4.x 的逐通道數組貝塞爾,導出時會轉換為經過容差精簡的分段線性關鍵影格。",fps:"匯出 FPS",omitFps:"不寫 fps",fpsHelp:"修改 FPS 時保持動畫實際秒數不變;「不寫 fps」只省略 Spine 的 fps 元資料。",integerFrames:"整數幀對齊",bonePool:"骨骼物件池",excludeEmpty:"排除無內容動畫",baking:"正在重新計算並烘焙動畫",exportJsonTitle:"導出 Spine {version} JSON",preparing:"正在準備匯出…",exportJson:"匯出 Spine JSON",exportImagesTitle:"單獨下載目前粒子系統使用的圖片 ZIP",organizingImages:"正在整理圖片…",exportImages:"匯出圖片 ZIP",generatingProject:"正在生成工程…",exportSpine:"匯出 .spine 包",authorize:"授權目前網站",authorizeTitle:"在本機連接器中授權目前網站",refreshConnector:"重新偵測連接器",refresh:"重新整理",recalculating:"正在重新計算粒子動畫…",exported:"已匯出 Spine {version}:{systems} 個粒子系統、{animations} 個動畫、{bones} 根骨骼{warning}",resourceWarning:";{count} 條資源提示(缺圖仍已匯出)",timeout:"重新計算動畫超時,請確認頁面仍在運行後重試",preparingProject:"正在整理圖片並調用本機 Spine…",projectExported:"已產生 {fileName}:包含 .spine 工程和 {images} 張圖片,Spine {version}",collectingImages:"正在整理目前粒子系統使用的圖片…",imagesExported:"已產生 {fileName}:{folder}/ 內包含 {images} 張圖片",connectorChecking:"正在偵測本地 Spine 連接器…",connectorOffline:"本機 Spine 連接器未啟動",spineNotFound:"連接器已啟動,但找不到 Spine",notAuthorized:"連接器已啟動,但目前網站尚未授權",connectorReady:"連接器可用 · Spine 已就緒",connectorBusy:"正在重新計算並產生 Spine 專案",connectorGenerate:"使用本機 Spine 自動產生 {version} 專案",unknown:"未知",checking:"偵測中",offline:"未啟動",notFound:"找不到 Spine",unauthorized:"未授權",projectTransferTitle:"匯出 Spine 包",projectTransferDetail:"正在重新計算粒子動畫…",projectTransferDownload:"Spine 工程包已開始下載",generatingJson:"正在生成 Spine JSON…",preparingProjectFiles:"正在整理工程圖片…",uploading:"正在上傳資料到 Spine 連接器…",spineProcessing:"Spine 正在轉換工程,請稍候…",downloadingProject:"正在下載產生的 Spine 工程包…",handingToBrowser:"正在交給瀏覽器下載…"},transfer:hB,scene:fB,modifiers:pB,spine:mB,help:gB,errors:vB,language:bB},fC=[{code:"zh-CN",label:"中文"},{code:"zh-TW",label:"繁體中文"},{code:"en",label:"English"},{code:"ja",label:"日本語"},{code:"ko",label:"한국어"},{code:"fr",label:"Français"},{code:"de",label:"Deutsch"},{code:"pt-BR",label:"Português"},{code:"es",label:"Español"}],pC="spine-particle.locale";function xB(n){return fC.some(e=>e.code===n)}function wB(n,e){if(xB(n))return n;for(const t of e){const i=t.toLowerCase();if(i.startsWith("zh"))return i.includes("hant")||/-(tw|hk|mo)(-|$)/.test(i)?"zh-TW":"zh-CN";if(i.startsWith("ja"))return"ja";if(i.startsWith("ko"))return"ko";if(i.startsWith("fr"))return"fr";if(i.startsWith("de"))return"de";if(i.startsWith("pt"))return"pt-BR";if(i.startsWith("es"))return"es";if(i.startsWith("en"))return"en"}return"en"}function SB(){var t;let n=null;if(typeof window<"u")try{n=localStorage.getItem(pC)}catch{}const e=typeof navigator>"u"?[]:(t=navigator.languages)!=null&&t.length?[...navigator.languages]:[navigator.language];return wB(n,e)}const mC=SB(),ac=yD({legacy:!1,locale:mC,fallbackLocale:"en",messages:{"zh-CN":K$,"zh-TW":yB,en:xO,ja:DN,ko:s$,fr:hN,de:JD,"pt-BR":_$,es:YO}});function gC(n){if(ac.global.locale.value=n,typeof window<"u")try{localStorage.setItem(pC,n)}catch{}typeof document<"u"&&(document.documentElement.lang=n,document.title=ac.global.t("app.title"))}function Ye(n,e){return e?ac.global.t(n,e):ac.global.t(n)}gC(mC);const vC="SpineParticle.SystemSettings",bC=1,dp="SpineParticle.SystemSettings.v1";function pl(n,e,t,i){const s=Number(n);return Math.min(t,Math.max(e,Number.isFinite(s)?s:i))}function CB(n){return{parameterPanelOnRight:n.parameterPanelOnRight,undoLimit:n.undoLimit,showEmitter:n.showEmitter,showBones:n.showBones,bonePointDrawSize:n.bonePointDrawSize,boneAxisDrawSize:n.boneAxisDrawSize,showSkinMesh:n.showSkinMesh,tickEnabled:n.tickEnabled,axisFontSize:n.axisFontSize,tickWidth:n.tickWidth,showAxisLabels:n.showAxisLabels,axisColor:n.axisColor}}function AB(n,e){const t=s=>n[s]==null?!!e[s]:n[s]===!0,i=typeof n.axisColor=="string"&&/^#[0-9a-f]{6}$/i.test(n.axisColor)?n.axisColor:e.axisColor;return{parameterPanelOnRight:t("parameterPanelOnRight"),undoLimit:Math.round(pl(n.undoLimit,1,200,e.undoLimit)),showEmitter:t("showEmitter"),showBones:t("showBones"),bonePointDrawSize:pl(n.bonePointDrawSize,.1,10,e.bonePointDrawSize),boneAxisDrawSize:pl(n.boneAxisDrawSize,.1,10,e.boneAxisDrawSize),showSkinMesh:t("showSkinMesh"),tickEnabled:t("tickEnabled"),axisFontSize:Math.round(pl(n.axisFontSize,8,40,e.axisFontSize)),tickWidth:pl(n.tickWidth,1,5,e.tickWidth),showAxisLabels:t("showAxisLabels"),axisColor:i}}function TB(n){let e;try{e=JSON.parse(n)}catch{throw new Error(Ye("errors.settingsInvalidJson"))}const t=e;if(t.format!==vC)throw new Error(Ye("errors.settingsFormat"));if(t.version!==bC)throw new Error(Ye("errors.settingsVersion",{version:t.version??Ye("export.unknown")}));if(!t.settings||typeof t.settings!="object")throw new Error(Ye("errors.settingsMissing"));return t}function EB(n,e){Object.assign(n.settings,AB(e,n.settings))}let cd=null;function _B(n){cd==null||cd();try{const e=localStorage.getItem(dp);e&&EB(n,TB(e).settings)}catch{try{localStorage.removeItem(dp)}catch{}}cd=ei(()=>CB(n.settings),e=>{const t={format:vC,version:bC,savedAt:new Date().toISOString(),settings:e};try{localStorage.setItem(dp,JSON.stringify(t))}catch{}},{deep:!0})}function MB(n,e=0){if(n<=0)return 1;const t=Math.pow(10,Math.floor(Math.log10(n))),i=[1,2,5,10,20,50,100];let s=1;for(const r of i)if(r*t>=n){s=r*t;break}return Math.max(s,e)}function PB(n,e,t,i,s){if(!t)return;const r=t;r.clear();const o=n.settings;if(!o.tickEnabled){for(const S of s)S.visible=!1;return}const a=0,c=0,l=e.screen.width/n.editor.viewScale,d=e.screen.height/n.editor.viewScale,u=+("0x"+o.axisColor.replace("#",""));r.lineStyle(1.5,u,.35),r.moveTo(-l,c),r.lineTo(l,c),r.moveTo(a,-d),r.lineTo(a,d);const h=n.editor.viewScale,f=MB(50/h),p=l,m=d,g=Math.max(1,o.tickWidth);if(o.tickEnabled){for(let S=0;S<=l;S+=f){const E=Math.round(S/f)*f;E!==0&&(r.lineStyle(g,u,.25),r.moveTo(E,c-4),r.lineTo(E,c+4),r.moveTo(-E,c-4),r.lineTo(-E,c+4))}for(let S=0;S<=d;S+=f)Math.round(S/f)*f!==0&&(r.lineStyle(g,u,.25),r.moveTo(a-4,S),r.lineTo(a+4,S),r.moveTo(a-4,-S),r.lineTo(a+4,-S))}const v=e.screen.width/2+n.editor.viewX,y=e.screen.height*.5+n.editor.viewY,b=o.axisFontSize,w=+("0x"+o.axisColor.replace("#",""));for(;s.length<64;){const S=new Lg("",{fontFamily:"monospace",fontSize:b,fill:w});S.anchor.set(.5,.5),i.addChild(S),s.push(S)}let C=0;const T=o.showAxisLabels&&o.tickEnabled;for(let S=0;S<=l;S+=f){const E=Math.round(S/f)*f;if(E===0||!T||E>p)continue;const _=s[C++];if(!_)break;_.style.fontSize=b,_.text=String(E),_.position.set(v+E*h,y+9),_.visible=!0;const I=s[C++];if(!I)break;I.style.fontSize=b,I.text=String(-E),I.position.set(v-E*h,y+9),I.visible=!0}for(let S=0;S<=d;S+=f){const E=Math.round(S/f)*f;if(E===0||!T||E>m)continue;const _=s[C++];if(!_)break;_.style.fontSize=b,_.text=String(E),_.position.set(v+8,y-S*h),_.visible=!0;const I=s[C++];if(!I)break;I.style.fontSize=b,I.text=String(-E),I.position.set(v+8,y+S*h),I.visible=!0}for(;Cy.id===n.activeId);if(!s||s.visible===!1)return;const r=s.config;if(!r.showShape)return;const o=e.get(s.id),a=(o==null?void 0:o.x)??r.centerX??0,c=-((o==null?void 0:o.y)??r.centerY??0),l=r.shape;if(l==="point"||l==="path")return;const d=r.rootScaleX??1,u=r.rootScaleY??1,h=-((o==null?void 0:o.rotation)??r.rootRotation??0)*Math.PI/180,f=Math.cos(h),p=Math.sin(h),m=r.offsetX??0,g=r.offsetY??0,v=(y,b)=>{const w=y+m,C=-b-g,T=w*d,S=C*u;return[a+T*f-S*p,c+(T*p+S*f)]};if(l==="circle"){const y=au(r.innerRadius,r.outerRadius);i.lineStyle(2,3991658,.7);const b=48;for(const w of[y.outer,y.inner])if(!(w<=0))for(let C=0;C<=b;C++){const T=C/b*Math.PI*2,[S,E]=v(Math.cos(T)*w,Math.sin(T)*w);C===0?i.moveTo(S,E):i.lineTo(S,E)}}else if(l==="rect"){const y=AS(r);i.lineStyle(2,4885759,.7);for(const[b,w]of[[y.outerW,y.outerH],[y.innerW,y.innerH]]){if(b<=0||w<=0)continue;const C=b/2,T=w/2,S=v(-C,-T),E=v(C,-T),_=v(C,T),I=v(-C,T);i.moveTo(S[0],S[1]),i.lineTo(E[0],E[1]),i.lineTo(_[0],_[1]),i.lineTo(I[0],I[1]),i.lineTo(S[0],S[1])}}else if(l==="cone"){const y=au(r.innerRadius,r.outerRadius),b=r.coneAngle/2*Math.PI/180,w=r.coneDirection*Math.PI/180,C=v(Math.cos(w-b)*y.inner,Math.sin(w-b)*y.inner),T=v(Math.cos(w+b)*y.inner,Math.sin(w+b)*y.inner),S=v(Math.cos(w-b)*y.outer,Math.sin(w-b)*y.outer),E=v(Math.cos(w+b)*y.outer,Math.sin(w+b)*y.outer);i.lineStyle(2,3991658,.7),i.moveTo(C[0],C[1]),i.lineTo(S[0],S[1]),i.moveTo(T[0],T[1]),i.lineTo(E[0],E[1]),i.lineStyle(1,3991658,.5);const _=24;for(const I of[y.outer,y.inner])if(!(I<=0))for(let M=0;M<=_;M++){const k=w-b+2*b*M/_,[B,D]=v(Math.cos(k)*I,Math.sin(k)*I);M===0?i.moveTo(B,D):i.lineTo(B,D)}}}function RB(n,e){if(!e)return;const t=e;t.clear();const i=n.systems.find(c=>c.id===n.activeId);if((i==null?void 0:i.visible)===!1)return;const s=i==null?void 0:i.config;if(!(s!=null&&s.forceField)||!s.showForceFieldShape||s.forceRadius<=0)return;const r=s.forceCenterX,o=-s.forceCenterY,a=s.forceStrength>=0?5818367:16739194;t.lineStyle(2,a,.85),t.beginFill(a,.08),t.drawCircle(r,o,s.forceRadius),t.endFill(),t.lineStyle(1,a,.7),t.moveTo(r-9,o),t.lineTo(r+9,o),t.moveTo(r,o-9),t.lineTo(r,o+9),t.beginFill(a,.95),t.drawCircle(r,o,4),t.endFill()}function FB(n,e){if(!e)return;const t=e;t.clear();const i=n.systems.find(u=>u.id===n.activeId);if((i==null?void 0:i.visible)===!1)return;const s=i==null?void 0:i.config;if(!(s!=null&&s.vortex)||!s.showVortexShape||s.vortexRadius<=0)return;const r=s.vortexCenterX,o=-s.vortexCenterY,a=s.vortexStrength>=0?12156159:16753228;t.lineStyle(2,a,.9),t.beginFill(a,.07),t.drawCircle(r,o,s.vortexRadius),t.endFill(),t.beginFill(a,.95),t.drawCircle(r,o,4),t.endFill();const c=r+Math.min(s.vortexRadius*.65,50),l=s.vortexStrength>=0?-1:1,d=o+l*14;t.lineStyle(2,a,.9),t.moveTo(c,o+l*-8),t.lineTo(c,d),t.moveTo(c,d),t.lineTo(c-4,d-l*5),t.moveTo(c,d),t.lineTo(c+4,d-l*5)}function LB(n,e){if(!e)return;const t=e;t.clear();const i=n.systems.find(l=>l.id===n.activeId);if((i==null?void 0:i.visible)===!1)return;const s=i==null?void 0:i.config;if(!(s!=null&&s.attraction)||!s.showAttractionShape)return;const r=s.attractionCenterX,o=-s.attractionCenterY,a=Math.max(0,s.attractionRadius),c=16731487;a>0&&(t.lineStyle(2,c,.95),t.beginFill(c,.09),t.drawCircle(r,o,a),t.endFill()),t.lineStyle(1,c,.85),t.moveTo(r-10,o),t.lineTo(r+10,o),t.moveTo(r,o-10),t.lineTo(r,o+10),t.beginFill(c,1),t.drawCircle(r,o,a>0?4:6),t.endFill()}function DB(n,e,t){const i=n.rotation*Math.PI/180,s=Math.cos(i),r=Math.sin(i),o=Math.max(1e-4,Math.abs(n.scaleX??1)),a=Math.max(1e-4,Math.abs(n.scaleY??1));return{x:n.x+s*e*o-r*t*a,y:n.y+r*e*o+s*t*a}}function aa(n,e,t){const i=n.rotation*Math.PI/180,s=Math.cos(i),r=Math.sin(i),o=Math.max(1e-4,Math.abs(n.scaleX??1)),a=Math.max(1e-4,Math.abs(n.scaleY??1)),c=e-n.x,l=t-n.y;return{x:(s*c+r*l)/o,y:(-r*c+s*l)/a}}function yC(n,e,t="linear"){if(!n.length)return e;const i=[...n].sort((s,r)=>s.x-r.x);if(e<=i[0].x)return i[0].y;for(let s=1;sl.id===a.emitterFollowSpineId);!c||c.visible===!1||s.set(`${a.emitterFollowSpineId}:${a.emitterFollowBoneName}`,{spineId:a.emitterFollowSpineId,boneName:a.emitterFollowBoneName})}for(const o of s.values()){const a=e==null?void 0:e.getBoneWorldTransform(o.spineId,o.boneName);if(!a)continue;const c=a.x,l=-a.y;i.lineStyle(2,12881151,.95),i.beginFill(12881151,.2),i.drawCircle(c,l,8),i.endFill(),i.beginFill(15919103,1),i.drawCircle(c,l,3.5),i.endFill()}}function NB(n,e,t){if(!t)return;const i=t;if(i.clear(),!n.value)return;const s=e();if(!s)return;const r=s.x,o=-s.y,a=s.scaleX,c=s.scaleY,l=-s.rotation*Math.PI/180,d=Math.cos(l),u=Math.sin(l),h=(m,g)=>{const v=m*a,y=-g*c;return[r+v*d-y*u,o+(v*u+y*d)]},f=(m,g,v,y)=>{const b=h(m,g),w=h(v,y);i.moveTo(b[0],b[1]),i.lineTo(w[0],w[1])},p=26;if(i.lineStyle(2,3526911,.9),i.beginFill(3526911,.25),i.drawCircle(r,o,6),i.endFill(),n.value==="translate")i.lineStyle(2,3526911,.9),f(-p,0,p,0),f(0,-p,0,p),f(p-6,-4,p,0),f(p,0,p-6,4),f(-20,-4,-p,0),f(-p,0,-20,4),f(-4,p-6,0,p),f(0,p,4,p-6),f(-4,-20,0,-p),f(0,-p,4,-20);else if(n.value==="rotate"){i.lineStyle(2,3526911,.8);const m=48;for(let y=0;y<=m;y++){const b=y/m*Math.PI*2,[w,C]=h(Math.cos(b)*p,Math.sin(b)*p);y===0?i.moveTo(w,C):i.lineTo(w,C)}const[g,v]=h(0,p);i.beginFill(3526911,.95),i.drawCircle(g,v,4),i.endFill()}else if(n.value==="scale"){i.lineStyle(2,3526911,.9);const g=[[-p,-p],[p,-p],[p,p],[-p,p]].map(([v,y])=>h(v,y));i.moveTo(g[0][0],g[0][1]),i.lineTo(g[1][0],g[1][1]),i.lineTo(g[2][0],g[2][1]),i.lineTo(g[3][0],g[3][1]),i.lineTo(g[0][0],g[0][1]),i.beginFill(3526911,.9);for(const v of g)i.drawRect(v[0]-3,v[1]-3,6,6);i.endFill()}}function $B(n,e=16777215){const t=Number.parseInt(n.replace("#",""),16);return Number.isFinite(t)?t:e}function BB(n,e,t){if(!t)return;const i=t;i.clear();for(const s of e){if(s.visible===!1)continue;const r=n.activeObjectType==="collision"&&n.activeObjectId===s.id,o=s.enabled?r?16735858:13911899:5792116,a=s.rotation*Math.PI/180,c=Math.cos(a),l=Math.sin(a),d=Math.max(1e-4,Math.abs(s.scaleX??1)),u=Math.max(1e-4,Math.abs(s.scaleY??1)),h=(m,g)=>({x:s.x+c*m*d-l*g*u,y:-(s.y+l*m*d+c*g*u)});let f=[];if(s.shape==="circle"||s.shape==="ellipse"){const m=s.shape==="circle"?s.radius:s.radiusX,g=s.shape==="circle"?s.radius:s.radiusY;f=Array.from({length:49},(v,y)=>{const b=y/48*Math.PI*2;return h(Math.cos(b)*m,Math.sin(b)*g)})}else if(s.shape==="rect"){const m=s.width*.5,g=s.height*.5;f=[h(-m,-g),h(m,-g),h(m,g),h(-m,g),h(-m,-g)]}else{const m=Math.max(3,Math.min(16,Math.round(s.sides)));f=Array.from({length:m+1},(g,v)=>{const y=Math.PI*.5+v%m/m*Math.PI*2;return h(Math.cos(y)*s.width*.5,Math.sin(y)*s.height*.5)})}if(!f.length)continue;i.lineStyle(r?2.5:1.5,o,s.enabled?.95:.45),i.beginFill(o,r?.12:.055),i.moveTo(f[0].x,f[0].y);for(let m=1;mo.id===n.activeObjectId):null,r=(s==null?void 0:s.config.shape)==="path"&&!s.config.showShape?s.config.spawnPathId:0;for(const o of n.paths){if(o.id===r||o.visible===!1||!o.enabled||!o.points.length)continue;const a=n.activeObjectType==="path"&&n.activeObjectId===o.id,c=$B(o.color,16749374),l=(f,p)=>{const m=DB(o,f,p);return{x:m.x,y:-m.y}},d=o.points[0],u=l(d.x,d.y);i.lineStyle(a?2.5:1.8,c,a?1:.75),i.moveTo(u.x,u.y);const h=o.closed?o.points.length:o.points.length-1;for(let f=0;f{const m=l(f.x,f.y),g=l(f.x+f.inX,f.y+f.inY),v=l(f.x+f.outX,f.y+f.outY),y=Math.hypot(f.inX,f.inY)>.01,b=Math.hypot(f.outX,f.outY)>.01;i.lineStyle(1,11121867,.65),y&&(i.moveTo(m.x,m.y),i.lineTo(g.x,g.y)),b&&(i.moveTo(m.x,m.y),i.lineTo(v.x,v.y)),y&&(i.beginFill(14015724,.95),i.drawCircle(g.x,g.y,3),i.endFill()),b&&(i.beginFill(14015724,.95),i.drawCircle(v.x,v.y,3),i.endFill()),i.beginFill(e.has(p)?16777215:c,1),i.lineStyle(1.5,e.has(p)?6126847:16777215,.95),i.drawCircle(m.x,m.y,e.has(p)?5:4),i.endFill()})}}function VB(n,e,t,i){var o;const s=Number.isFinite(e.worldX)&&Number.isFinite(e.worldY),r=Number.isFinite(e.worldRotation);n.push({boneName:e.boneName,x:s?e.worldX:e.x,y:s?-e.worldY:e.y,rotation:r?-e.worldRotation:-e.rotation,parentX:t,parentY:i}),(o=e.trailState)!=null&&o.bones.length&&e.trailState.bones.forEach(a=>{const c=Number.isFinite(a.worldX)&&Number.isFinite(a.worldY),l=Number.isFinite(a.worldRotation);n.push({boneName:a.boneName,x:c?a.worldX:a.x,y:c?-a.worldY:a.y,rotation:l?-a.worldRotation:a.rotation,parentX:t,parentY:i,trail:!0})})}function Xy(n,e,t,i,s,r,o,a){const c=r*.62,l=e+i*r,d=t+s*r,u=Math.max(2.5,r*.32),h=Math.max(1.7,r*.22),f=l-i*u,p=d-s*u,m=-s,g=i;n.lineStyle(o,a,.95),n.moveTo(e-i*c,t-s*c),n.lineTo(f,p),n.lineStyle(0),n.beginFill(a,.95),n.drawPolygon([l,d,f+m*h,p+g*h,f-m*h,p-g*h]),n.endFill()}function XB(n,e,t){if(!t)return;const i=t;if(i.clear(),!e.settings.showBones)return;const s=0,r=0,o=Math.max(.25,Math.abs(e.editor.viewScale)||1),a=Math.min(10,Math.max(.1,Number(e.settings.bonePointDrawSize)||1)),c=Math.min(10,Math.max(.1,Number(e.settings.boneAxisDrawSize)||2)),l=2.5*a/o,d=4.5*c/o,u=Math.max(.65,c*.625)/o;for(const h of n){const f=h.trail?16731533:16747610;i.lineStyle(1,f,h.trail?.65:.35),i.moveTo(h.parentX??s,h.parentY??r),i.lineTo(h.x,h.y);const p=h.rotation*Math.PI/180,m=Math.cos(p),g=Math.sin(p);Xy(i,h.x,h.y,m,g,d,u,15684432),Xy(i,h.x,h.y,g,-m,d,u,5622123),i.beginFill(f,.9),i.drawCircle(h.x,h.y,l),i.endFill()}}function Xi(n){return n.map(e=>({...e,trailState:e.trailState?{...e.trailState,bones:e.trailState.bones.map(t=>({...t}))}:void 0}))}function YB(n){const e=new Map;for(const i of n)for(const s of i)e.has(s.boneName)||e.set(s.boneName,Xi([s])[0]);const t=[...e.keys()].sort((i,s)=>{const r=Number(i.replace(/^p_/,"")),o=Number(s.replace(/^p_/,""));return Number.isFinite(r)&&Number.isFinite(o)?r-o:i.localeCompare(s)});for(let i=0;i[r.boneName,r]));n[i]=t.map(r=>{const o=s.get(r);return o||{...Xi([e.get(r)])[0],alpha:0,imageVisible:!1,trailState:void 0,active:!0}})}}function zB(n){n.length<2||(n[n.length-1]=Xi(n[0]))}function jB(n,e){const t=Math.max(0,n.length-1),i=[];for(let s=0;s<=e;s++){const r=Math.min(t,Math.round(s/e*t));i.push(Xi(n[r]||[]))}return i}function up(n){return`${n.boneName}:${n.spawnId??"legacy"}`}function Yy(n){return{...Xi([n])[0],alpha:0,imageVisible:!1,trailState:void 0,active:!0}}function HB(n,e,t,i){const s=Math.min(n.length,i+1),r=n.slice(Math.max(0,n.length-s)),o=new Map;for(const l of e){if(l.imageVisible===!1||l.alpha<=0)continue;const d=up(l),u=new Map;let h=!1;for(let f=r.length-1;f>=0;f--){const p=r[f].find(m=>up(m)===d);if(p)h=!0,u.set(f,p);else if(h)break}o.set(d,u)}const a=Math.max(0,r.length-1),c=[];for(let l=0;l<=t;l++){const d=Math.min(a,Math.round(l/t*a));c.push(e.map(u=>{var f;if(u.imageVisible===!1||u.alpha<=0)return Xi([u])[0];const h=(f=o.get(up(u)))==null?void 0:f.get(d);return h?Xi([h])[0]:Yy(u)}))}return c[0]=c[0].map(Yy),c[c.length-1]=Xi(e),c}function zy(n,e){const t=n.length?1:0;for(let i=t;i{const b=y?[[]]:[];e.reset();for(let w=0;w0&&e.restartEmissionCycle();for(let C=0;C0;w++)e.update(r,"off"),y.push(e.capture());(v=y[y.length-1])!=null&&v.length&&y.push([]),zy(u,jB(y,a.end))}const g=Xi(u[u.length-1]||[]);for(u.length>i&&(u.length=i);u.length{var a;return String(((a=o==null?void 0:o.data)==null?void 0:a.name)||"")}):null}catch{return null}}getSlotLocalMatrix(e,t){var o,a,c;const i=(o=this.entries.get(e))==null?void 0:o.spine,s=(c=(a=i==null?void 0:i.skeleton)==null?void 0:a.findSlot)==null?void 0:c.call(a,t),r=s==null?void 0:s.bone;return r!=null&&r.active?new Bt(r.a,r.c,-r.b,-r.d,r.worldX,r.worldY):null}getSlotParentMatrix(e,t,i){const s=this.getSlotLocalMatrix(e,t);if(!s)return null;const r=-i.rotation*Math.PI/180,o=Math.cos(r),a=Math.sin(r);return new Bt(o*i.scaleX,a*i.scaleX,-a*i.scaleY,o*i.scaleY,i.x,-i.y).append(s)}attachSlotObject(e,t,i,s){var o;const r=(o=this.entries.get(e))==null?void 0:o.spine;if(!(r!=null&&r.addSlotObject))return!1;try{return r.addSlotObject(t,i,{followAttachmentTimeline:s}),!0}catch{return!1}}detachSlotObject(e,t,i){var r,o;const s=(r=this.entries.get(e))==null?void 0:r.spine;try{(o=s==null?void 0:s.removeSlotObject)==null||o.call(s,t,i)}catch{}}destroyEntry(e){var t,i;try{(i=(t=e.spine)==null?void 0:t.removeSlotObjects)==null||i.call(t)}catch{}this.container.removeChild(e.root),e.root.destroy({children:!0})}sync(e,t,i){var s;for(const[r,o]of this.entries)e.some(a=>a.id===r)||(this.destroyEntry(o),this.entries.delete(r));for(const r of e){const o=cF(r.id);let a=this.entries.get(r.id);if(a&&a.assetVersion!==r.assetVersion&&!o&&(this.destroyEntry(a),this.entries.delete(r.id),a=void 0),(!a||a.assetVersion!==r.assetVersion)&&o){a&&this.destroyEntry(a);const h=new _i,f=new o.SpineClass({skeletonData:o.skeletonData,autoUpdate:!1,darkTint:!1});o.skeletonData.defaultSkin&&f.skeleton.setSkin(o.skeletonData.defaultSkin),o.runtimeVersion==="4.3"?f.skeleton.setupPoseSlots():f.skeleton.setSlotsToSetupPose(),h.addChild(f),this.container.addChild(h),a={root:h,spine:f,runtimeVersion:o.runtimeVersion,assetVersion:r.assetVersion,animation:""},this.entries.set(r.id,a)}if(!a)continue;const c=a.root,l=a.spine,d=r.visible!==!1&&r.enabled;c.visible=d,c.renderable=d,c.position.set(r.x,-r.y),c.rotation=-r.rotation*Math.PI/180,c.scale.set(r.scaleX,r.scaleY),a.animation!==r.selectedAnimation&&(a.animation=r.selectedAnimation,a.runtimeVersion==="4.3"?l.skeleton.setupPose():l.skeleton.setToSetupPose(),l.state.clearTracks(),a.animation&&l.state.setAnimation(0,a.animation,!1));const u=a.runtimeVersion==="4.3"?l.state.getTrack(0):l.state.getCurrent(0);if(u){const h=((s=r.animations.find(p=>p.name===r.selectedAnimation))==null?void 0:s.duration)||0,f=Math.max(0,t/Math.max(1,i)-r.timeOffset);u.trackTime=h>0?Math.min(f,h):f}l.update(0)}}getBoneWorldTransform(e,t){const i=this.entries.get(e),s=i==null?void 0:i.spine.skeleton.findBone(t);if(!i||!s||!s.active)return null;const r=i.runtimeVersion==="4.3"?s.appliedPose:s,o=i.root,a=Math.cos(o.rotation),c=Math.sin(o.rotation),l=a*o.scale.x,d=-c*o.scale.y,u=c*o.scale.x,h=a*o.scale.y,f=l*r.a+d*r.c,p=l*r.b+d*r.d,m=u*r.a+h*r.c,g=u*r.b+h*r.d,v=o.position.x+l*r.worldX+d*r.worldY,y=o.position.y+u*r.worldX+h*r.worldY;return{x:v,y:-y,rotation:-Math.atan2(m,f)*180/Math.PI,scaleX:Math.max(1e-4,Math.hypot(f,m)),scaleY:Math.max(1e-4,Math.hypot(p,g))}}destroy(){for(const e of this.entries.values())this.destroyEntry(e);this.entries.clear(),this.container.removeFromParent(),this.container.destroy({children:!0})}}let xC=class{constructor(){A(this,"entries",{});A(this,"size",0)}add(e){let t=this.entries[e];return this.entries[e]=!0,t?!1:(this.size++,!0)}addAll(e){let t=this.size;for(var i=0,s=e.length;i1&&(this.r=1),this.g<0?this.g=0:this.g>1&&(this.g=1),this.b<0?this.b=0:this.b>1&&(this.b=1),this.a<0?this.a=0:this.a>1&&(this.a=1),this}static rgba8888ToColor(e,t){e.r=((t&4278190080)>>>24)/255,e.g=((t&16711680)>>>16)/255,e.b=((t&65280)>>>8)/255,e.a=(t&255)/255}static rgb888ToColor(e,t){e.r=((t&16711680)>>>16)/255,e.g=((t&65280)>>>8)/255,e.b=(t&255)/255}toRgb888(){const e=t=>("0"+(t*255).toString(16)).slice(-2);return+("0x"+e(this.r)+e(this.g)+e(this.b))}static fromString(e,t=new Vi){return t.setFromString(e)}},A(Vi,"WHITE",new Vi(1,1,1,1)),A(Vi,"RED",new Vi(1,0,0,1)),A(Vi,"GREEN",new Vi(0,1,0,1)),A(Vi,"BLUE",new Vi(0,0,1,1)),A(Vi,"MAGENTA",new Vi(1,0,1,1)),Vi);var ui;let Re=(ui=class{static clamp(e,t,i){return ei?i:e}static cosDeg(e){return Math.cos(e*ui.degRad)}static sinDeg(e){return Math.sin(e*ui.degRad)}static atan2Deg(e,t){return Math.atan2(e,t)*ui.degRad}static signum(e){return e>0?1:e<0?-1:0}static toInt(e){return e>0?Math.floor(e):Math.ceil(e)}static cbrt(e){let t=Math.pow(Math.abs(e),.3333333333333333);return e<0?-t:t}static randomTriangular(e,t){return ui.randomTriangularWith(e,t,(e+t)*.5)}static randomTriangularWith(e,t,i){let s=Math.random(),r=t-e;return s<=(i-e)/r?e+Math.sqrt(s*r*(i-e)):t-Math.sqrt((1-s)*r*(t-i))}static isPowerOfTwo(e){return e&&(e&e-1)===0}},A(ui,"PI",3.1415927),A(ui,"PI2",ui.PI*2),A(ui,"invPI2",1/ui.PI2),A(ui,"radiansToDegrees",180/ui.PI),A(ui,"radDeg",ui.radiansToDegrees),A(ui,"degreesToRadians",ui.PI/180),A(ui,"degRad",ui.degreesToRadians),ui);var Hn;let De=(Hn=class{static arrayCopy(e,t,i,s,r){for(let o=t,a=s;o=t?e:Hn.setArraySize(e,t,i)}static newArray(e,t){let i=new Array(e);for(let s=0;s0?this.items.pop():this.instantiator()}free(e){e.reset&&e.reset(),this.items.push(e)}freeAll(e){for(let t=0;t>1)*a;let c=t.bone.skeleton,l=t.deform,d=this.vertices,u=this.bones;if(!u){l.length>0&&(d=l);let m=t.bone,g=m.worldX,v=m.worldY,y=m.a,b=m.b,w=m.c,C=m.d;for(let T=i,S=o;S=this.regions.length&&(i=this.regions.length-1);let s=this.regions[i];t.region!=s&&(t.region=s,t.updateRegion())}getPath(e,t){let i=e,s=(this.start+t).toString();for(let r=this.digits-s.length;r>0;r--)i+="0";return i+=s,i}static nextID(){return sr._nextID++}},A(sr,"_nextID",0),sr);var Di;(function(n){n[n.hold=0]="hold",n[n.once=1]="once",n[n.loop=2]="loop",n[n.pingpong=3]="pingpong",n[n.onceReverse=4]="onceReverse",n[n.loopReverse=5]="loopReverse",n[n.pingpongReverse=6]="pingpongReverse"})(Di||(Di={}));const CC=[Di.hold,Di.once,Di.loop,Di.pingpong,Di.onceReverse,Di.loopReverse,Di.pingpongReverse];let jg=class{constructor(e,t,i){A(this,"name");A(this,"timelines",[]);A(this,"timelineIds",new xC);A(this,"duration");if(!e)throw new Error("name cannot be null.");this.name=e,this.setTimelines(t),this.duration=i}setTimelines(e){if(!e)throw new Error("timelines cannot be null.");this.timelines=e,this.timelineIds.clear();for(var t=0;t0&&(t%=this.duration));let l=this.timelines;for(let d=0,u=l.length;dt)return s-1;return i-1}static search(e,t,i){let s=e.length;for(let r=i;rt)return r-i;return s-i}},Rs=class extends ti{constructor(t,i,s){super(t,s);A(this,"curves");this.curves=De.newFloatArray(t+i*18),this.curves[t-1]=1}setLinear(t){this.curves[t]=0}setStepped(t){this.curves[t]=1}shrink(t){let i=this.getFrameCount()+t*18;if(this.curves.length>i){let s=De.newFloatArray(i);De.arrayCopy(this.curves,0,s,0,i),this.curves=s}}setBezier(t,i,s,r,o,a,c,l,d,u,h){let f=this.curves,p=this.getFrameCount()+t*18;s==0&&(f[i]=2+p);let m=(r-a*2+l)*.03,g=(o-c*2+d)*.03,v=((a-l)*3-r+u)*.006,y=((c-d)*3-o+h)*.006,b=m*2+v,w=g*2+y,C=(a-r)*.3+m+v*.16666667,T=(c-o)*.3+g+y*.16666667,S=r+C,E=o+T;for(let _=p+18;p<_;p+=2)f[p]=S,f[p+1]=E,C+=b,T+=w,b+=v,w+=y,S+=C,E+=T}getBezierValue(t,i,s,r){let o=this.curves;if(o[r]>t){let d=this.frames[i],u=this.frames[i+s];return u+(t-d)/(o[r]-d)*(o[r+1]-u)}let a=r+18;for(r+=2;r=t){let d=o[r-2],u=o[r-1];return u+(t-d)/(o[r]-d)*(o[r+1]-u)}i+=this.getFrameEntries();let c=o[a-2],l=o[a-1];return l+(t-c)/(this.frames[i]-c)*(this.frames[i+s]-l)}},is=class extends Rs{constructor(e,t,i){super(e,t,[i])}getFrameEntries(){return 2}setFrame(e,t,i){e<<=1,this.frames[e]=t,this.frames[e+1]=i}getCurveValue(e){let t=this.frames,i=t.length-2;for(let r=2;r<=i;r+=2)if(t[r]>e){i=r-2;break}let s=this.curves[i>>1];switch(s){case 0:let r=t[i],o=t[i+1];return o+(e-r)/(t[i+2]-r)*(t[i+2+1]-o);case 1:return t[i+1]}return this.getBezierValue(e,i,1,s-2)}getRelativeValue(e,t,i,s,r){if(e>2];switch(g){case 0:let v=d[m];h=d[m+1],f=d[m+2],p=d[m+3];let y=(s-v)/(d[m+4]-v);h+=(d[m+4+1]-h)*y,f+=(d[m+4+2]-f)*y,p+=(d[m+4+3]-p)*y;break;case 1:h=d[m+1],f=d[m+2],p=d[m+3];break;default:h=this.getBezierValue(s,m,1,g-2),f=this.getBezierValue(s,m,2,g+18-2),p=this.getBezierValue(s,m,3,g+36-2)}if(o==1)u.r=h,u.g=f,u.b=p;else{if(a==we.setup){let v=l.data.color;u.r=v.r,u.g=v.g,u.b=v.b}u.r+=(h-u.r)*o,u.g+=(f-u.g)*o,u.b+=(p-u.b)*o}}},OC=class extends is{constructor(t,i,s){super(t,i,ft.alpha+"|"+s);A(this,"slotIndex",0);this.slotIndex=s}apply(t,i,s,r,o,a,c){let l=t.slots[this.slotIndex];if(!l.bone.active)return;let d=l.color;if(s>3];switch(C){case 0:let T=d[w];f=d[w+1],p=d[w+2],m=d[w+3],g=d[w+4],v=d[w+5],y=d[w+6],b=d[w+7];let S=(s-T)/(d[w+8]-T);f+=(d[w+8+1]-f)*S,p+=(d[w+8+2]-p)*S,m+=(d[w+8+3]-m)*S,g+=(d[w+8+4]-g)*S,v+=(d[w+8+5]-v)*S,y+=(d[w+8+6]-y)*S,b+=(d[w+8+7]-b)*S;break;case 1:f=d[w+1],p=d[w+2],m=d[w+3],g=d[w+4],v=d[w+5],y=d[w+6],b=d[w+7];break;default:f=this.getBezierValue(s,w,1,C-2),p=this.getBezierValue(s,w,2,C+18-2),m=this.getBezierValue(s,w,3,C+36-2),g=this.getBezierValue(s,w,4,C+54-2),v=this.getBezierValue(s,w,5,C+72-2),y=this.getBezierValue(s,w,6,C+90-2),b=this.getBezierValue(s,w,7,C+108-2)}if(o==1)u.set(f,p,m,g),h.r=v,h.g=y,h.b=b;else{if(a==we.setup){u.setFromColor(l.data.color);let T=l.data.darkColor;h.r=T.r,h.g=T.g,h.b=T.b}u.add((f-u.r)*o,(p-u.g)*o,(m-u.b)*o,(g-u.a)*o),h.r+=(v-h.r)*o,h.g+=(y-h.g)*o,h.b+=(b-h.b)*o}}},$C=class extends Rs{constructor(t,i,s){super(t,i,[ft.rgb+"|"+s,ft.rgb2+"|"+s]);A(this,"slotIndex",0);this.slotIndex=s}getFrameEntries(){return 7}setFrame(t,i,s,r,o,a,c,l){t*=7,this.frames[t]=i,this.frames[t+1]=s,this.frames[t+2]=r,this.frames[t+3]=o,this.frames[t+4]=a,this.frames[t+5]=c,this.frames[t+6]=l}apply(t,i,s,r,o,a,c){let l=t.slots[this.slotIndex];if(!l.bone.active)return;let d=this.frames,u=l.color,h=l.darkColor;if(st){let l=this.frames[i];return s[r+1]*(t-l)/(s[r]-l)}let o=r+18;for(r+=2;r=t){let l=s[r-2],d=s[r-1];return d+(t-l)/(s[r]-l)*(s[r+1]-d)}let a=s[o-2],c=s[o-1];return c+(1-c)*(t-a)/(this.frames[i+this.getFrameEntries()]-a)}apply(t,i,s,r,o,a,c){let l=t.slots[this.slotIndex];if(!l.bone.active)return;let d=l.getAttachment();if(!d||!(d instanceof mr)||d.timelineAttachment!=this.attachment)return;let u=l.deform;u.length==0&&(a=we.setup);let h=this.vertices,f=h[0].length,p=this.frames;if(s=p[p.length-1]){let w=h[p.length-1];if(o==1)if(a==we.add){let C=d;if(C.bones)for(let T=0;Ts)this.apply(t,i,Number.MAX_VALUE,r,o,a,c),i=-1;else if(i>=l[d-1])return;if(s0&&l[u-1]==h;)u--}for(;u=l[u];u++)r.push(this.events[u])}},A(Mo,"propertyIds",[""+ft.event]),Mo);var Po;let Fl=(Po=class extends ti{constructor(t){super(t,Po.propertyIds);A(this,"drawOrders");this.drawOrders=new Array(t)}getFrameCount(){return this.frames.length}setFrame(t,i,s){this.frames[t]=i,this.drawOrders[t]=s}apply(t,i,s,r,o,a,c){if(c==ji.mixOut){a==we.setup&&De.arrayCopy(t.slots,0,t.drawOrder,0,t.slots.length);return}if(s>2];switch(m){case 0:let g=d[p];u=d[p+1],h=d[p+2],f=d[p+3];let v=(s-g)/(d[p+4]-g);u+=(d[p+4+1]-u)*v,h+=(d[p+4+2]-h)*v,f+=(d[p+4+3]-f)*v;break;case 1:u=d[p+1],h=d[p+2],f=d[p+3];break;default:u=this.getBezierValue(s,p,1,m-2),h=this.getBezierValue(s,p,2,m+18-2),f=this.getBezierValue(s,p,3,m+36-2)}if(a==we.setup){let g=l.data;l.mixRotate=g.mixRotate+(u-g.mixRotate)*o,l.mixX=g.mixX+(h-g.mixX)*o,l.mixY=g.mixY+(f-g.mixY)*o}else l.mixRotate+=(u-l.mixRotate)*o,l.mixX+=(h-l.mixX)*o,l.mixY+=(f-l.mixY)*o}},Wo=class extends is{constructor(t,i,s,r){super(t,i,r+"|"+s);A(this,"constraintIndex",0);this.constraintIndex=s}apply(t,i,s,r,o,a,c){let l;if(this.constraintIndex==-1){const d=s>=this.frames[0]?this.getCurveValue(s):0;for(const u of t.physicsConstraints)u.active&&this.global(u.data)&&this.set(u,this.getAbsoluteValue2(s,o,a,this.get(u),this.setup(u),d))}else l=t.physicsConstraints[this.constraintIndex],l.active&&this.set(l,this.getAbsoluteValue(s,o,a,this.get(l),this.setup(l)))}},jC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintInertia)}setup(e){return e.data.inertia}get(e){return e.inertia}set(e,t){e.inertia=t}global(e){return e.inertiaGlobal}},HC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintStrength)}setup(e){return e.data.strength}get(e){return e.strength}set(e,t){e.strength=t}global(e){return e.strengthGlobal}},GC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintDamping)}setup(e){return e.data.damping}get(e){return e.damping}set(e,t){e.damping=t}global(e){return e.dampingGlobal}},WC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintMass)}setup(e){return 1/e.data.massInverse}get(e){return 1/e.massInverse}set(e,t){e.massInverse=1/t}global(e){return e.massGlobal}},qC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintWind)}setup(e){return e.data.wind}get(e){return e.wind}set(e,t){e.wind=t}global(e){return e.windGlobal}},KC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintGravity)}setup(e){return e.data.gravity}get(e){return e.gravity}set(e,t){e.gravity=t}global(e){return e.gravityGlobal}},JC=class extends Wo{constructor(e,t,i){super(e,t,i,ft.physicsConstraintMix)}setup(e){return e.data.mix}get(e){return e.mix}set(e,t){e.mix=t}global(e){return e.mixGlobal}};var Io;let ZC=(Io=class extends ti{constructor(t,i){super(t,Io.propertyIds);A(this,"constraintIndex");this.constraintIndex=i}getFrameCount(){return this.frames.length}setFrame(t,i){this.frames[t]=i}apply(t,i,s,r,o,a,c){let l;if(this.constraintIndex!=-1&&(l=t.physicsConstraints[this.constraintIndex],!l.active))return;const d=this.frames;if(i>s)this.apply(t,i,Number.MAX_VALUE,[],o,a,c),i=-1;else if(i>=d[d.length-1])return;if(!(s=d[ti.search1(d,i)+1]))if(l!=null)l.reset();else for(const u of t.physicsConstraints)u.active&&u.reset()}},A(Io,"propertyIds",[ft.physicsConstraintReset.toString()]),Io);var Ji;let QC=(Ji=class extends ti{constructor(t,i,s){super(t,[ft.sequence+"|"+i+"|"+s.sequence.id]);A(this,"slotIndex");A(this,"attachment");this.slotIndex=i,this.attachment=s}getFrameEntries(){return Ji.ENTRIES}getSlotIndex(){return this.slotIndex}getAttachment(){return this.attachment}setFrame(t,i,s,r,o){let a=this.frames;t*=Ji.ENTRIES,a[t]=i,a[t+Ji.MODE]=s|r<<4,a[t+Ji.DELAY]=o}apply(t,i,s,r,o,a,c){let l=t.slots[this.slotIndex];if(!l.bone.active)return;let d=l.attachment,u=this.attachment;if(d!=u&&(!(d instanceof mr)||d.timelineAttachment!=u))return;if(c==ji.mixOut){a==we.setup&&(l.sequenceIndex=-1);return}let h=this.frames;if(s>4,y=this.attachment.sequence.regions.length,b=CC[m&15];if(b!=Di.hold)switch(v+=(s-p)/g+1e-5|0,b){case Di.once:v=Math.min(y-1,v);break;case Di.loop:v%=y;break;case Di.pingpong:{let w=(y<<1)-2;v=w==0?0:v%w,v>=y&&(v=w-v);break}case Di.onceReverse:v=Math.max(y-1-v,0);break;case Di.loopReverse:v=y-1-v%y;break;case Di.pingpongReverse:{let w=(y<<1)-2;v=w==0?0:(v+y-1)%w,v>=y&&(v=w-v)}}l.sequenceIndex=v}},A(Ji,"ENTRIES",3),A(Ji,"MODE",1),A(Ji,"DELAY",2),Ji);var rr;let WB=(rr=class{constructor(e){A(this,"data");A(this,"tracks",new Array);A(this,"timeScale",1);A(this,"unkeyedState",0);A(this,"events",new Array);A(this,"listeners",new Array);A(this,"queue",new KB(this));A(this,"propertyIDs",new xC);A(this,"animationsChanged",!1);A(this,"trackEntryPool",new fu(()=>new qB));this.data=e}static emptyAnimation(){return rr._emptyAnimation}update(e){e*=this.timeScale;let t=this.tracks;for(let i=0,s=t.length;i0){if(r.delay-=o,r.delay>0)continue;o=-r.delay,r.delay=0}let a=r.next;if(a){let c=r.trackLast-a.delay;if(c>=0){for(a.delay=0,a.trackTime+=r.timeScale==0?0:(c/r.timeScale+e)*a.timeScale,r.trackTime+=o,this.setCurrent(i,a,!0);a.mixingFrom;)a.mixTime+=e,a=a.mixingFrom;continue}}else if(r.trackLast>=r.trackEnd&&!r.mixingFrom){t[i]=null,this.queue.end(r),this.clearNext(r);continue}if(r.mixingFrom&&this.updateMixingFrom(r,e)){let c=r.mixingFrom;for(r.mixingFrom=null,c&&(c.mixingTo=null);c;)this.queue.end(c),c=c.mixingFrom}r.trackTime+=o}this.queue.drain()}updateMixingFrom(e,t){let i=e.mixingFrom;if(!i)return!0;let s=this.updateMixingFrom(i,t);return i.animationLast=i.nextAnimationLast,i.trackLast=i.nextTrackLast,e.nextTrackLast!=-1&&e.mixTime>=e.mixDuration?((i.totalAlpha==0||e.mixDuration==0)&&(e.mixingFrom=i.mixingFrom,i.mixingFrom!=null&&(i.mixingFrom.mixingTo=e),e.interruptAlpha=i.interruptAlpha,this.queue.end(i)),s):(i.trackTime+=t*i.timeScale,e.mixTime+=t,!1)}apply(e){if(!e)throw new Error("skeleton cannot be null.");this.animationsChanged&&this._animationsChanged();let t=this.events,i=this.tracks,s=!1;for(let h=0,f=i.length;h0)continue;s=!0;let m=h==0?we.first:p.mixBlend,g=p.alpha;p.mixingFrom?g*=this.applyMixingFrom(p,e,m):p.trackTime>=p.trackEnd&&!p.next&&(g=0);let v=g>=p.alphaAttachmentThreshold,y=p.animationLast,b=p.getAnimationTime(),w=b,C=t;p.reverse&&(w=p.animation.duration-w,C=null);let T=p.animation.timelines,S=T.length;if(h==0&&g==1||m==we.add){h==0&&(v=!0);for(let E=0;E1&&(r=1),i!=we.first&&(i=s.mixBlend));let o=r=s.alphaAttachmentThreshold):(a&&C instanceof Fl&&S==we.setup&&(T=ji.mixIn),C.apply(t,h,p,m,E,S,T))}}return e.mixDuration>0&&this.queueEvents(s,f),this.events.length=0,s.nextAnimationLast=f,s.nextTrackLast=s.trackTime,r}applyAttachmentTimeline(e,t,i,s,r){var o=t.slots[e.slotIndex];o.bone.active&&(i=0,b=m>=0;Math.abs(g)<=90&&Re.signum(g)!=Re.signum(p)&&(Math.abs(m-v)>180?(f+=360*Re.signum(m),b=y):v!=0?f-=360*Re.signum(m):b=y),b!=y&&(f+=360*Re.signum(m)),o[a]=f}o[a+1]=p,l.rotation=u+f*s}queueEvents(e,t){let i=e.animationStart,s=e.animationEnd,r=s-i,o=e.trackLast%r,a=this.events,c=0,l=a.length;for(;cs||this.queue.event(e,u)}let d=!1;if(e.loop)if(r==0)d=!0;else{const u=Math.floor(e.trackTime/r);d=u>0&&u>Math.floor(e.trackLast/r)}else d=t>=s&&e.animationLast=this.tracks.length)return;let t=this.tracks[e];if(!t)return;this.queue.end(t),this.clearNext(t);let i=t;for(;;){let s=i.mixingFrom;if(!s)break;this.queue.end(s),i.mixingFrom=null,i.mixingTo=null,i=s}this.tracks[t.trackIndex]=null,this.queue.drain()}setCurrent(e,t,i){let s=this.expandToIndex(e);this.tracks[e]=t,t.previous=null,s&&(i&&this.queue.interrupt(s),t.mixingFrom=s,s.mixingTo=t,t.mixTime=0,s.mixingFrom&&s.mixDuration>0&&(t.interruptAlpha*=Math.min(1,s.mixTime/s.mixDuration)),s.timelinesRotation.length=0),this.queue.start(t)}setAnimation(e,t,i=!1){let s=this.data.skeletonData.findAnimation(t);if(!s)throw new Error("Animation not found: "+t);return this.setAnimationWith(e,s,i)}setAnimationWith(e,t,i=!1){if(!t)throw new Error("animation cannot be null.");let s=!0,r=this.expandToIndex(e);r&&(r.nextTrackLast==-1?(this.tracks[e]=r.mixingFrom,this.queue.interrupt(r),this.queue.end(r),this.clearNext(r),r=r.mixingFrom,s=!1):this.clearNext(r));let o=this.trackEntry(e,t,i,r);return this.setCurrent(e,o,s),this.queue.drain(),o}addAnimation(e,t,i=!1,s=0){let r=this.data.skeletonData.findAnimation(t);if(!r)throw new Error("Animation not found: "+t);return this.addAnimationWith(e,r,i,s)}addAnimationWith(e,t,i=!1,s=0){if(!t)throw new Error("animation cannot be null.");let r=this.expandToIndex(e);if(r)for(;r.next;)r=r.next;let o=this.trackEntry(e,t,i,r);return r?(r.next=o,o.previous=r,s<=0&&(s=Math.max(s+r.getTrackComplete()-o.mixDuration,0))):(this.setCurrent(e,o,!0),this.queue.drain(),s<0&&(s=0)),o.delay=s,o}setEmptyAnimation(e,t=0){let i=this.setAnimationWith(e,rr.emptyAnimation(),!1);return i.mixDuration=t,i.trackEnd=t,i}addEmptyAnimation(e,t=0,i=0){let s=this.addAnimationWith(e,rr.emptyAnimation(),!1,i);return i<=0&&(s.delay=Math.max(s.delay+s.mixDuration-t,0)),s.mixDuration=t,s.trackEnd=t,s}setEmptyAnimations(e=0){let t=this.queue.drainDisabled;this.queue.drainDisabled=!0;for(let i=0,s=this.tracks.length;i0){r[c]=JB,o[c]=u;continue e}break}r[c]=fp}}}getCurrent(e){return e>=this.tracks.length?null:this.tracks[e]}addListener(e){if(!e)throw new Error("listener cannot be null.");this.listeners.push(e)}removeListener(e){let t=this.listeners.indexOf(e);t>=0&&this.listeners.splice(t,1)}clearListeners(){this.listeners.length=0}clearListenerNotifications(){this.queue.clear()}},A(rr,"_emptyAnimation",new jg("",[],0)),rr),qB=class{constructor(){A(this,"animation",null);A(this,"previous",null);A(this,"next",null);A(this,"mixingFrom",null);A(this,"mixingTo",null);A(this,"listener",null);A(this,"trackIndex",0);A(this,"loop",!1);A(this,"holdPrevious",!1);A(this,"reverse",!1);A(this,"shortestRotation",!1);A(this,"eventThreshold",0);A(this,"mixAttachmentThreshold",0);A(this,"alphaAttachmentThreshold",0);A(this,"mixDrawOrderThreshold",0);A(this,"animationStart",0);A(this,"animationEnd",0);A(this,"animationLast",0);A(this,"nextAnimationLast",0);A(this,"delay",0);A(this,"trackTime",0);A(this,"trackLast",0);A(this,"nextTrackLast",0);A(this,"trackEnd",0);A(this,"timeScale",0);A(this,"alpha",0);A(this,"mixTime",0);A(this,"_mixDuration",0);A(this,"interruptAlpha",0);A(this,"totalAlpha",0);A(this,"mixBlend",we.replace);A(this,"timelineMode",new Array);A(this,"timelineHoldMix",new Array);A(this,"timelinesRotation",new Array)}get mixDuration(){return this._mixDuration}set mixDuration(e){this._mixDuration=e}setMixDurationWithDelay(e,t){this._mixDuration=e,t<=0&&(this.previous!=null?t=Math.max(t+this.previous.getTrackComplete()-e,0):t=0),this.delay=t}reset(){this.next=null,this.previous=null,this.mixingFrom=null,this.mixingTo=null,this.animation=null,this.listener=null,this.timelineMode.length=0,this.timelineHoldMix.length=0,this.timelinesRotation.length=0}getAnimationTime(){if(this.loop){let e=this.animationEnd-this.animationStart;return e==0?this.animationStart:this.trackTime%e+this.animationStart}return Math.min(this.trackTime+this.animationStart,this.animationEnd)}setAnimationLast(e){this.animationLast=e,this.nextAnimationLast=e}isComplete(){return this.trackTime>=this.animationEnd-this.animationStart}resetRotationDirections(){this.timelinesRotation.length=0}getTrackComplete(){let e=this.animationEnd-this.animationStart;if(e!=0){if(this.loop)return e*(1+(this.trackTime/e|0));if(this.trackTime=0}},KB=class{constructor(e){A(this,"objects",[]);A(this,"drainDisabled",!1);A(this,"animState");this.animState=e}start(e){this.objects.push(an.start),this.objects.push(e),this.animState.animationsChanged=!0}interrupt(e){this.objects.push(an.interrupt),this.objects.push(e)}end(e){this.objects.push(an.end),this.objects.push(e),this.animState.animationsChanged=!0}dispose(e){this.objects.push(an.dispose),this.objects.push(e)}complete(e){this.objects.push(an.complete),this.objects.push(e)}event(e,t){this.objects.push(an.event),this.objects.push(e),this.objects.push(t)}drain(){if(this.drainDisabled)return;this.drainDisabled=!0;let e=this.objects;for(let t=0;t{d.width=parseInt(i[1]),d.height=parseInt(i[2])},s.format=()=>{},s.filter=d=>{d.minFilter=De.enumValue(Mi,i[1]),d.magFilter=De.enumValue(Mi,i[2])},s.repeat=d=>{i[1].indexOf("x")!=-1&&(d.uWrap=cr.Repeat),i[1].indexOf("y")!=-1&&(d.vWrap=cr.Repeat)},s.pma=d=>{d.pma=i[1]=="true"};var r={};r.xy=d=>{d.x=parseInt(i[1]),d.y=parseInt(i[2])},r.size=d=>{d.width=parseInt(i[1]),d.height=parseInt(i[2])},r.bounds=d=>{d.x=parseInt(i[1]),d.y=parseInt(i[2]),d.width=parseInt(i[3]),d.height=parseInt(i[4])},r.offset=d=>{d.offsetX=parseInt(i[1]),d.offsetY=parseInt(i[2])},r.orig=d=>{d.originalWidth=parseInt(i[1]),d.originalHeight=parseInt(i[2])},r.offsets=d=>{d.offsetX=parseInt(i[1]),d.offsetY=parseInt(i[2]),d.originalWidth=parseInt(i[3]),d.originalHeight=parseInt(i[4])},r.rotate=d=>{let u=i[1];u=="true"?d.degrees=90:u!="false"&&(d.degrees=parseInt(u))},r.index=d=>{d.index=parseInt(i[1])};let o=t.readLine();for(;o&&o.trim().length==0;)o=t.readLine();for(;!(!o||o.trim().length==0||t.readEntry(i,o)==0);)o=t.readLine();let a=null,c=null,l=null;for(;o!==null;)if(o.trim().length==0)a=null,o=t.readLine();else if(a){let d=new sA(a,o);for(;;){let u=t.readEntry(i,o=t.readLine());if(u==0)break;let h=r[i[0]];if(h)h(d);else{c||(c=[]),l||(l=[]),c.push(i[0]);let f=[];for(let p=0;p0&&l&&l.length>0&&(d.names=c,d.values=l,c=null,l=null),d.u=d.x/a.width,d.v=d.y/a.height,d.degrees==90?(d.u2=(d.x+d.height)/a.width,d.v2=(d.y+d.width)/a.height):(d.u2=(d.x+d.width)/a.width,d.v2=(d.y+d.height)/a.height),this.regions.push(d)}else{for(a=new n3(o.trim());t.readEntry(i,o=t.readLine())!=0;){let d=s[i[0]];d&&d(a)}this.pages.push(a)}}findRegion(e){for(let t=0;t=this.lines.length?null:this.lines[this.index++]}readEntry(e,t){if(!t||(t=t.trim(),t.length==0))return 0;let i=t.indexOf(":");if(i==-1)return 0;e[0]=t.substr(0,i).trim();for(let s=1,r=i+1;;s++){let o=t.indexOf(",",r);if(o==-1)return e[s]=t.substr(r).trim(),s;if(e[s]=t.substr(r,o-r).trim(),r=o+1,s==4)return 4}}},n3=class{constructor(e){A(this,"name");A(this,"minFilter",Mi.Nearest);A(this,"magFilter",Mi.Nearest);A(this,"uWrap",cr.ClampToEdge);A(this,"vWrap",cr.ClampToEdge);A(this,"texture",null);A(this,"width",0);A(this,"height",0);A(this,"pma",!1);A(this,"regions",new Array);this.name=e}setTexture(e){this.texture=e,e.setFilters(this.minFilter,this.magFilter),e.setWraps(this.uWrap,this.vWrap);for(let t of this.regions)t.texture=e}},sA=class extends t3{constructor(t,i){super();A(this,"page");A(this,"name");A(this,"x",0);A(this,"y",0);A(this,"offsetX",0);A(this,"offsetY",0);A(this,"originalWidth",0);A(this,"originalHeight",0);A(this,"index",0);A(this,"degrees",0);A(this,"names",null);A(this,"values",null);this.page=t,this.name=i,t.regions.push(this)}},yc=class Im extends mr{constructor(t,i){super(t);A(this,"region",null);A(this,"path");A(this,"regionUVs",[]);A(this,"uvs",[]);A(this,"triangles",[]);A(this,"color",new ut(1,1,1,1));A(this,"width",0);A(this,"height",0);A(this,"hullLength",0);A(this,"edges",[]);A(this,"parentMesh",null);A(this,"sequence",null);A(this,"tempColor",new ut(0,0,0,0));this.path=i}updateRegion(){if(!this.region)throw new Error("Region not set.");let t=this.regionUVs;(!this.uvs||this.uvs.length!=t.length)&&(this.uvs=De.newFloatArray(t.length));let i=this.uvs,s=this.uvs.length,r=this.region.u,o=this.region.v,a=0,c=0;if(this.region instanceof sA){let l=this.region,d=l.page,u=d.width,h=d.height;switch(l.degrees){case 90:r-=(l.originalHeight-l.offsetY-l.height)/u,o-=(l.originalWidth-l.offsetX-l.width)/h,a=l.originalHeight/u,c=l.originalWidth/h;for(let f=0;f= 0.");if(!t)throw new Error("name cannot be null.");this.index=e,this.name=t,this.parent=i}};var oi;(function(n){n[n.Normal=0]="Normal",n[n.OnlyTranslation=1]="OnlyTranslation",n[n.NoRotationOrReflection=2]="NoRotationOrReflection",n[n.NoScale=3]="NoScale",n[n.NoScaleOrReflection=4]="NoScaleOrReflection"})(oi||(oi={}));let qy=class{constructor(e,t,i){A(this,"data");A(this,"skeleton");A(this,"parent",null);A(this,"children",new Array);A(this,"x",0);A(this,"y",0);A(this,"rotation",0);A(this,"scaleX",0);A(this,"scaleY",0);A(this,"shearX",0);A(this,"shearY",0);A(this,"ax",0);A(this,"ay",0);A(this,"arotation",0);A(this,"ascaleX",0);A(this,"ascaleY",0);A(this,"ashearX",0);A(this,"ashearY",0);A(this,"a",0);A(this,"b",0);A(this,"c",0);A(this,"d",0);A(this,"worldY",0);A(this,"worldX",0);A(this,"inherit",oi.Normal);A(this,"sorted",!1);A(this,"active",!1);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("skeleton cannot be null.");this.data=e,this.skeleton=t,this.parent=i,this.setToSetupPose()}isActive(){return this.active}update(e){this.updateWorldTransformWith(this.ax,this.ay,this.arotation,this.ascaleX,this.ascaleY,this.ashearX,this.ashearY)}updateWorldTransform(){this.updateWorldTransformWith(this.x,this.y,this.rotation,this.scaleX,this.scaleY,this.shearX,this.shearY)}updateWorldTransformWith(e,t,i,s,r,o,a){this.ax=e,this.ay=t,this.arotation=i,this.ascaleX=s,this.ascaleY=r,this.ashearX=o,this.ashearY=a;let c=this.parent;if(!c){let f=this.skeleton;const p=f.scaleX,m=f.scaleY,g=(i+o)*Re.degRad,v=(i+90+a)*Re.degRad;this.a=Math.cos(g)*s*p,this.b=Math.cos(v)*r*p,this.c=Math.sin(g)*s*m,this.d=Math.sin(v)*r*m,this.worldX=e*p+f.x,this.worldY=t*m+f.y;return}let l=c.a,d=c.b,u=c.c,h=c.d;switch(this.worldX=l*e+d*t+c.worldX,this.worldY=u*e+h*t+c.worldY,this.inherit){case oi.Normal:{const f=(i+o)*Re.degRad,p=(i+90+a)*Re.degRad,m=Math.cos(f)*s,g=Math.cos(p)*r,v=Math.sin(f)*s,y=Math.sin(p)*r;this.a=l*m+d*v,this.b=l*g+d*y,this.c=u*m+h*v,this.d=u*g+h*y;return}case oi.OnlyTranslation:{const f=(i+o)*Re.degRad,p=(i+90+a)*Re.degRad;this.a=Math.cos(f)*s,this.b=Math.cos(p)*r,this.c=Math.sin(f)*s,this.d=Math.sin(p)*r;break}case oi.NoRotationOrReflection:{let f=1/this.skeleton.scaleX,p=1/this.skeleton.scaleY;l*=f,u*=p;let m=l*l+u*u,g=0;m>1e-4?(m=Math.abs(l*h*p-d*f*u)/m,d=u*m,h=l*m,g=Math.atan2(u,l)*Re.radDeg):(l=0,u=0,g=90-Math.atan2(h,d)*Re.radDeg);const v=(i+o-g)*Re.degRad,y=(i+a-g+90)*Re.degRad,b=Math.cos(v)*s,w=Math.cos(y)*r,C=Math.sin(v)*s,T=Math.sin(y)*r;this.a=l*b-d*C,this.b=l*w-d*T,this.c=u*b+h*C,this.d=u*w+h*T;break}case oi.NoScale:case oi.NoScaleOrReflection:{i*=Re.degRad;const f=Math.cos(i),p=Math.sin(i);let m=(l*f+d*p)/this.skeleton.scaleX,g=(u*f+h*p)/this.skeleton.scaleY,v=Math.sqrt(m*m+g*g);v>1e-5&&(v=1/v),m*=v,g*=v,v=Math.sqrt(m*m+g*g),this.inherit==oi.NoScale&&l*h-d*u<0!=(this.skeleton.scaleX<0!=this.skeleton.scaleY<0)&&(v=-v),i=Math.PI/2+Math.atan2(g,m);const y=Math.cos(i)*v,b=Math.sin(i)*v;o*=Re.degRad,a=(90+a)*Re.degRad;const w=Math.cos(o)*s,C=Math.cos(a)*r,T=Math.sin(o)*s,S=Math.sin(a)*r;this.a=m*w+y*T,this.b=m*C+y*S,this.c=g*w+b*T,this.d=g*C+b*S;break}}this.a*=this.skeleton.scaleX,this.b*=this.skeleton.scaleX,this.c*=this.skeleton.scaleY,this.d*=this.skeleton.scaleY}setToSetupPose(){let e=this.data;this.x=e.x,this.y=e.y,this.rotation=e.rotation,this.scaleX=e.scaleX,this.scaleY=e.scaleY,this.shearX=e.shearX,this.shearY=e.shearY,this.inherit=e.inherit}updateAppliedTransform(){let e=this.parent;if(!e){this.ax=this.worldX-this.skeleton.x,this.ay=this.worldY-this.skeleton.y,this.arotation=Math.atan2(this.c,this.a)*Re.radDeg,this.ascaleX=Math.sqrt(this.a*this.a+this.c*this.c),this.ascaleY=Math.sqrt(this.b*this.b+this.d*this.d),this.ashearX=0,this.ashearY=Math.atan2(this.a*this.b+this.c*this.d,this.a*this.d-this.b*this.c)*Re.radDeg;return}let t=e.a,i=e.b,s=e.c,r=e.d,o=1/(t*r-i*s),a=r*o,c=i*o,l=s*o,d=t*o,u=this.worldX-e.worldX,h=this.worldY-e.worldY;this.ax=u*a-h*c,this.ay=h*d-u*l;let f,p,m,g;if(this.inherit==oi.OnlyTranslation)f=this.a,p=this.b,m=this.c,g=this.d;else{switch(this.inherit){case oi.NoRotationOrReflection:{let C=Math.abs(t*r-i*s)/(t*t+s*s);i=-s*this.skeleton.scaleX*C/this.skeleton.scaleY,r=t*this.skeleton.scaleY*C/this.skeleton.scaleX,o=1/(t*r-i*s),a=r*o,c=i*o;break}case oi.NoScale:case oi.NoScaleOrReflection:let v=Re.cosDeg(this.rotation),y=Re.sinDeg(this.rotation);t=(t*v+i*y)/this.skeleton.scaleX,s=(s*v+r*y)/this.skeleton.scaleY;let b=Math.sqrt(t*t+s*s);b>1e-5&&(b=1/b),t*=b,s*=b,b=Math.sqrt(t*t+s*s),this.inherit==oi.NoScale&&o<0!=(this.skeleton.scaleX<0!=this.skeleton.scaleY<0)&&(b=-b);let w=Re.PI/2+Math.atan2(s,t);i=Math.cos(w)*b,r=Math.sin(w)*b,o=1/(t*r-i*s),a=r*o,c=i*o,l=s*o,d=t*o}f=a*this.a-c*this.c,p=a*this.b-c*this.d,m=d*this.c-l*this.a,g=d*this.d-l*this.b}if(this.ashearX=0,this.ascaleX=Math.sqrt(f*f+m*m),this.ascaleX>1e-4){let v=f*g-p*m;this.ascaleY=v/this.ascaleX,this.ashearY=-Math.atan2(f*p+m*g,v)*Re.radDeg,this.arotation=Math.atan2(m,f)*Re.radDeg}else this.ascaleX=0,this.ascaleY=Math.sqrt(p*p+g*g),this.ashearY=0,this.arotation=90-Math.atan2(g,p)*Re.radDeg}getWorldRotationX(){return Math.atan2(this.c,this.a)*Re.radDeg}getWorldRotationY(){return Math.atan2(this.d,this.b)*Re.radDeg}getWorldScaleX(){return Math.sqrt(this.a*this.a+this.c*this.c)}getWorldScaleY(){return Math.sqrt(this.b*this.b+this.d*this.d)}worldToLocal(e){let t=1/(this.a*this.d-this.b*this.c),i=e.x-this.worldX,s=e.y-this.worldY;return e.x=i*this.d*t-s*this.b*t,e.y=s*this.a*t-i*this.c*t,e}localToWorld(e){let t=e.x,i=e.y;return e.x=t*this.a+i*this.b+this.worldX,e.y=t*this.c+i*this.d+this.worldY,e}worldToParent(e){if(e==null)throw new Error("world cannot be null.");return this.parent==null?e:this.parent.worldToLocal(e)}parentToWorld(e){if(e==null)throw new Error("world cannot be null.");return this.parent==null?e:this.parent.localToWorld(e)}worldToLocalRotation(e){let t=Re.sinDeg(e),i=Re.cosDeg(e);return Math.atan2(this.a*t-this.c*i,this.d*i-this.b*t)*Re.radDeg+this.rotation-this.shearX}localToWorldRotation(e){e-=this.rotation-this.shearX;let t=Re.sinDeg(e),i=Re.cosDeg(e);return Math.atan2(i*this.c+t*this.d,i*this.a+t*this.b)*Re.radDeg}rotateWorld(e){e*=Re.degRad;const t=Math.sin(e),i=Math.cos(e),s=this.a,r=this.b;this.a=i*s-t*this.c,this.b=i*r-t*this.d,this.c=t*s+i*this.c,this.d=t*r+i*this.d}},fh=class{constructor(e,t,i){A(this,"name");A(this,"order");A(this,"skinRequired");this.name=e,this.order=t,this.skinRequired=i}},cA=class{constructor(e,t){A(this,"data");A(this,"intValue",0);A(this,"floatValue",0);A(this,"stringValue",null);A(this,"time",0);A(this,"volume",0);A(this,"balance",0);if(!t)throw new Error("data cannot be null.");this.time=e,this.data=t}},dA=class{constructor(e){A(this,"name");A(this,"intValue",0);A(this,"floatValue",0);A(this,"stringValue",null);A(this,"audioPath",null);A(this,"volume",0);A(this,"balance",0);this.name=e}},s3=class{constructor(e,t){A(this,"data");A(this,"bones");A(this,"target");A(this,"bendDirection",0);A(this,"compress",!1);A(this,"stretch",!1);A(this,"mix",1);A(this,"softness",0);A(this,"active",!1);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("skeleton cannot be null.");this.data=e,this.bones=new Array;for(let s=0;s180?f-=360:f<-180&&(f+=360);let g=e.ascaleX,v=e.ascaleY;if(s||r){switch(e.inherit){case oi.NoScale:case oi.NoScaleOrReflection:p=t-e.worldX,m=i-e.worldY}const y=e.data.length*g;if(y>1e-4){const b=p*p+m*m;if(s&&by*y){const w=(Math.sqrt(b)/y-1)*a+1;g*=w,o&&(v*=w)}}}e.updateWorldTransformWith(e.ax,e.ay,e.arotation+f*a,g,v,e.ashearX,e.ashearY)}apply2(e,t,i,s,r,o,a,c,l){if(e.inherit!=oi.Normal||t.inherit!=oi.Normal)return;let d=e.ax,u=e.ay,h=e.ascaleX,f=e.ascaleY,p=h,m=f,g=t.ascaleX,v=0,y=0,b=0;h<0?(h=-h,v=180,b=-1):(v=0,b=1),f<0&&(f=-f,b=-b),g<0?(g=-g,y=180):y=0;let w=t.ax,C=0,T=0,S=0,E=e.a,_=e.b,I=e.c,M=e.d,k=Math.abs(h-f)<=1e-4;!k||o?(C=0,T=E*w+e.worldX,S=I*w+e.worldY):(C=t.ay,T=E*w+_*C+e.worldX,S=I*w+M*C+e.worldY);let B=e.parent;if(!B)throw new Error("IK parent must itself have a parent.");E=B.a,_=B.b,I=B.c,M=B.d;let D=E*M-_*I,G=T-B.worldX,V=S-B.worldY;D=Math.abs(D)<=1e-4?0:1/D;let Y=(G*M-V*_)*D-d,L=(V*E-G*I)*D-u,N=Math.sqrt(Y*Y+L*L),F=t.data.length*g,$,X;if(N<1e-4){this.apply1(e,i,s,!1,o,!1,l),t.updateWorldTransformWith(w,C,0,t.ascaleX,t.ascaleY,t.ashearX,t.ashearY);return}G=i-B.worldX,V=s-B.worldY;let z=(G*M-V*_)*D-d,K=(V*E-G*I)*D-u,J=z*z+K*K;if(c!=0){c*=h*(g+1)*.5;let ve=Math.sqrt(J),Se=ve-N-F*h+c;if(Se>0){let fe=Math.min(1,Se/(c*2))-1;fe=(Se-c*(1-fe*fe))/ve,z-=fe*z,K-=fe*K,J=z*z+K*K}}e:if(k){F*=h;let ve=(J-N*N-F*F)/(2*N*F);ve<-1?(ve=-1,X=Math.PI*r):ve>1?(ve=1,X=0,o&&(E=(Math.sqrt(J)/(N+F)-1)*l+1,p*=E,a&&(m*=E))):X=Math.acos(ve)*r,E=N+F*ve,_=F*Math.sin(X),$=Math.atan2(K*E-z*_,z*E+K*_)}else{E=h*F,_=f*F;let ve=E*E,Se=_*_,fe=Math.atan2(K,z);I=Se*N*N+ve*J-ve*Se;let be=-2*Se*N,q=Se-ve;if(M=be*be-4*q*I,M>=0){let ne=Math.sqrt(M);be<0&&(ne=-ne),ne=-(be+ne)*.5;let ue=ne/q,xe=I/ne,ye=Math.abs(ue)=0){V=Math.sqrt(ue)*r,$=fe-Math.atan2(V,ye),X=Math.atan2(V/f,(ye-N)/h);break e}}let Z=Re.PI,se=N-E,j=se*se,H=0,O=0,U=N+E,W=U*U,ee=0;I=-E*N/(ve-Se),I>=-1&&I<=1&&(I=Math.acos(I),G=E*Math.cos(I)+N,V=_*Math.sin(I),M=G*G+V*V,MW&&(O=I,W=M,U=G,ee=V)),J<=(j+W)*.5?($=fe-Math.atan2(H*r,se),X=Z*r):($=fe-Math.atan2(ee*r,U),X=O*r)}let oe=Math.atan2(C,w)*b,le=e.arotation;$=($-oe)*Re.radDeg+v-le,$>180?$-=360:$<-180&&($+=360),e.updateWorldTransformWith(d,u,le+$*l,p,m,0,0),le=t.arotation,X=((X+oe)*Re.radDeg-t.ashearX)*b+y-le,X>180?X-=360:X<-180&&(X+=360),t.updateWorldTransformWith(w,C,le+X*l,t.ascaleX,t.ascaleY,t.ashearX,t.ashearY)}},uA=class extends fh{constructor(t){super(t,0,!1);A(this,"bones",new Array);A(this,"_target",null);A(this,"bendDirection",0);A(this,"compress",!1);A(this,"stretch",!1);A(this,"uniform",!1);A(this,"mix",0);A(this,"softness",0)}set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("BoneData not set.")}},hA=class extends fh{constructor(t){super(t,0,!1);A(this,"bones",new Array);A(this,"_target",null);A(this,"positionMode",Ms.Fixed);A(this,"spacingMode",Ai.Fixed);A(this,"rotateMode",No.Chain);A(this,"offsetRotation",0);A(this,"position",0);A(this,"spacing",0);A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0)}set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("SlotData not set.")}};var Ms;(function(n){n[n.Fixed=0]="Fixed",n[n.Percent=1]="Percent"})(Ms||(Ms={}));var Ai;(function(n){n[n.Length=0]="Length",n[n.Fixed=1]="Fixed",n[n.Percent=2]="Percent",n[n.Proportional=3]="Proportional"})(Ai||(Ai={}));var No;(function(n){n[n.Tangent=0]="Tangent",n[n.Chain=1]="Chain",n[n.ChainScale=2]="ChainScale"})(No||(No={}));var Yi;let r3=(Yi=class{constructor(e,t){A(this,"data");A(this,"bones");A(this,"target");A(this,"position",0);A(this,"spacing",0);A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0);A(this,"spaces",new Array);A(this,"positions",new Array);A(this,"world",new Array);A(this,"curves",new Array);A(this,"lengths",new Array);A(this,"segments",new Array);A(this,"active",!1);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("skeleton cannot be null.");this.data=e,this.bones=new Array;for(let s=0,r=e.bones.length;s0){w=u/w*p;for(let T=1;T0?Re.degRad:-.01745329277777778}for(let w=0,C=3;w0){let M=T.a,k=T.b,B=T.c,D=T.d,G=0,V=0,Y=0;if(a?G=m[C-1]:h[w+1]==0?G=m[C+2]:G=Math.atan2(I,_),G-=Math.atan2(B,M),b){V=Math.cos(G),Y=Math.sin(G);let L=T.data.length;g+=(L*(V*M-Y*B)-_)*i,v+=(L*(Y*M+V*B)-I)*i}else G+=y;G>Re.PI?G-=Re.PI2:G<-3.1415927&&(G+=Re.PI2),G*=i,V=Math.cos(G),Y=Math.sin(G),T.a=V*M-Y*B,T.b=V*k-Y*D,T.c=Y*M+V*B,T.d=Y*k+V*D}T.updateAppliedTransform()}}computeWorldPositions(e,t,i){let s=this.target,r=this.position,o=this.spaces,a=De.setArraySize(this.positions,t*3+2),c=this.world,l=e.closed,d=e.worldVerticesLength,u=d/6,h=Yi.NONE;if(!e.constantSpeed){let L=e.lengths;u-=l?1:2;let N=L[u];this.data.positionMode==Ms.Percent&&(r*=N);let F;switch(this.data.spacingMode){case Ai.Percent:F=N;break;case Ai.Proportional:F=N/t;break;default:F=1}c=De.setArraySize(this.world,8);for(let $=0,X=0,z=0;$N){h!=Yi.AFTER&&(h=Yi.AFTER,e.computeWorldVertices(s,d-6,4,c,0,2)),this.addAfterPosition(J-N,c,0,a,X);continue}for(;;z++){let oe=L[z];if(!(J>oe)){if(z==0)J/=oe;else{let le=L[z-1];J=(J-le)/(oe-le)}break}}z!=h&&(h=z,l&&z==u?(e.computeWorldVertices(s,d-4,4,c,0,2),e.computeWorldVertices(s,0,4,c,4,2)):e.computeWorldVertices(s,z*6+2,8,c,0,2)),this.addCurvePosition(J,c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7],a,X,i||$>0&&K==0)}return a}l?(d+=2,c=De.setArraySize(this.world,d),e.computeWorldVertices(s,2,d-4,c,0,2),e.computeWorldVertices(s,0,2,c,d-4,2),c[d-2]=c[0],c[d-1]=c[1]):(u--,d-=4,c=De.setArraySize(this.world,d),e.computeWorldVertices(s,2,d,c,0,2));let f=De.setArraySize(this.curves,u),p=0,m=c[0],g=c[1],v=0,y=0,b=0,w=0,C=0,T=0,S=0,E=0,_=0,I=0,M=0,k=0,B=0,D=0;for(let L=0,N=2;Lp){this.addAfterPosition(z-p,c,d-4,a,N);continue}for(;;F++){let K=f[F];if(!(z>K)){if(F==0)z/=K;else{let J=f[F-1];z=(z-J)/(K-J)}break}}if(F!=h){h=F;let K=F*6;for(m=c[K],g=c[K+1],v=c[K+2],y=c[K+3],b=c[K+4],w=c[K+5],C=c[K+6],T=c[K+7],S=(m-v*2+b)*.03,E=(g-y*2+w)*.03,_=((v-b)*3-m+C)*.006,I=((y-w)*3-g+T)*.006,M=S*2+_,k=E*2+I,B=(v-m)*.3+S+_*.16666667,D=(y-g)*.3+E+I*.16666667,Y=Math.sqrt(B*B+D*D),V[0]=Y,K=1;K<8;K++)B+=M,D+=k,M+=_,k+=I,Y+=Math.sqrt(B*B+D*D),V[K]=Y;B+=M,D+=k,Y+=Math.sqrt(B*B+D*D),V[8]=Y,B+=M+_,D+=k+I,Y+=Math.sqrt(B*B+D*D),V[9]=Y,$=0}for(z*=Y;;$++){let K=V[$];if(!(z>K)){if($==0)z/=K;else{let J=V[$-1];z=$+(z-J)/(K-J)}break}}this.addCurvePosition(z*.1,m,g,v,y,b,w,C,T,a,N,i||L>0&&X==0)}return a}addBeforePosition(e,t,i,s,r){let o=t[i],a=t[i+1],c=t[i+2]-o,l=t[i+3]-a,d=Math.atan2(l,c);s[r]=o+e*Math.cos(d),s[r+1]=a+e*Math.sin(d),s[r+2]=d}addAfterPosition(e,t,i,s,r){let o=t[i+2],a=t[i+3],c=o-t[i],l=a-t[i+1],d=Math.atan2(l,c);s[r]=o+e*Math.cos(d),s[r+1]=a+e*Math.sin(d),s[r+2]=d}addCurvePosition(e,t,i,s,r,o,a,c,l,d,u,h){if(e==0||isNaN(e)){d[u]=t,d[u+1]=i,d[u+2]=Math.atan2(r-i,s-t);return}let f=e*e,p=f*e,m=1-e,g=m*m,v=g*m,y=m*e,b=y*3,w=m*b,C=b*e,T=t*v+s*w+o*C+c*p,S=i*v+r*w+a*C+l*p;d[u]=T,d[u+1]=S,h&&(e<.001?d[u+2]=Math.atan2(r-i,s-t):d[u+2]=Math.atan2(S-(i*g+r*y*2+a*f),T-(t*g+s*y*2+o*f)))}},A(Yi,"NONE",-1),A(Yi,"BEFORE",-2),A(Yi,"AFTER",-3),A(Yi,"epsilon",1e-5),Yi),o3=class{constructor(e,t){A(this,"data");A(this,"_bone",null);A(this,"inertia",0);A(this,"strength",0);A(this,"damping",0);A(this,"massInverse",0);A(this,"wind",0);A(this,"gravity",0);A(this,"mix",0);A(this,"_reset",!0);A(this,"ux",0);A(this,"uy",0);A(this,"cx",0);A(this,"cy",0);A(this,"tx",0);A(this,"ty",0);A(this,"xOffset",0);A(this,"xVelocity",0);A(this,"yOffset",0);A(this,"yVelocity",0);A(this,"rotateOffset",0);A(this,"rotateVelocity",0);A(this,"scaleOffset",0);A(this,"scaleVelocity",0);A(this,"active",!1);A(this,"skeleton");A(this,"remaining",0);A(this,"lastTime",0);this.data=e,this.skeleton=t,this.bone=t.bones[e.bone.index],this.inertia=e.inertia,this.strength=e.strength,this.damping=e.damping,this.massInverse=e.massInverse,this.wind=e.wind,this.gravity=e.gravity,this.mix=e.mix}set bone(e){this._bone=e}get bone(){if(this._bone)return this._bone;throw new Error("Bone not set.")}reset(){this.remaining=0,this.lastTime=this.skeleton.time,this._reset=!0,this.xOffset=0,this.xVelocity=0,this.yOffset=0,this.yVelocity=0,this.rotateOffset=0,this.rotateVelocity=0,this.scaleOffset=0,this.scaleVelocity=0}setToSetupPose(){const e=this.data;this.inertia=e.inertia,this.strength=e.strength,this.damping=e.damping,this.massInverse=e.massInverse,this.wind=e.wind,this.gravity=e.gravity,this.mix=e.mix}isActive(){return this.active}update(e){const t=this.mix;if(t==0)return;const i=this.data.x>0,s=this.data.y>0,r=this.data.rotate>0||this.data.shearX>0,o=this.data.scaleX>0,a=this.bone,c=a.data.length;switch(e){case $r.none:return;case $r.reset:this.reset();case $r.update:const l=this.skeleton,d=Math.max(this.skeleton.time-this.lastTime,0);this.remaining+=d,this.lastTime=l.time;const u=a.worldX,h=a.worldY;if(this._reset)this._reset=!1,this.ux=u,this.uy=h;else{let f=this.remaining,p=this.inertia,m=this.data.step,g=this.skeleton.data.referenceScale,v=-1,y=this.data.limit*d,b=y*Math.abs(l.scaleY);if(y*=Math.abs(l.scaleX),i||s){if(i){const w=(this.ux-u)*p;this.xOffset+=w>y?y:w<-y?-y:w,this.ux=u}if(s){const w=(this.uy-h)*p;this.yOffset+=w>b?b:w<-b?-b:w,this.uy=h}if(f>=m){v=Math.pow(this.damping,60*m);const w=this.massInverse*m,C=this.strength,T=this.wind*g*l.scaleX,S=this.gravity*g*l.scaleY;do i&&(this.xVelocity+=(T-this.xOffset*C)*w,this.xOffset+=this.xVelocity*m,this.xVelocity*=v),s&&(this.yVelocity-=(S+this.yOffset*C)*w,this.yOffset+=this.yVelocity*m,this.yVelocity*=v),f-=m;while(f>=m)}i&&(a.worldX+=this.xOffset*t*this.data.x),s&&(a.worldY+=this.yOffset*t*this.data.y)}if(r||o){let w=Math.atan2(a.c,a.a),C=0,T=0,S=0,E=this.cx-a.worldX,_=this.cy-a.worldY;if(E>y?E=y:E<-y&&(E=-y),_>b?_=b:_<-b&&(_=-b),r){S=(this.data.rotate+this.data.shearX)*t;let I=Math.atan2(_+this.ty,E+this.tx)-w-this.rotateOffset*S;this.rotateOffset+=(I-Math.ceil(I*Re.invPI2-.5)*Re.PI2)*p,I=this.rotateOffset*S+w,C=Math.cos(I),T=Math.sin(I),o&&(I=c*a.getWorldScaleX(),I>0&&(this.scaleOffset+=(E*C+_*T)*p/I))}else{C=Math.cos(w),T=Math.sin(w);const I=c*a.getWorldScaleX();I>0&&(this.scaleOffset+=(E*C+_*T)*p/I)}if(f=this.remaining,f>=m){v==-1&&(v=Math.pow(this.damping,60*m));const I=this.massInverse*m,M=this.strength,k=this.wind,B=Wg.yDown?-this.gravity:this.gravity,D=c/g;for(;;)if(f-=m,o&&(this.scaleVelocity+=(k*C-B*T-this.scaleOffset*M)*I,this.scaleOffset+=this.scaleVelocity*m,this.scaleVelocity*=v),r){if(this.rotateVelocity-=((k*T+B*C)*D+this.rotateOffset*M)*I,this.rotateOffset+=this.rotateVelocity*m,this.rotateVelocity*=v,f0){let f=0;this.data.rotate>0&&(f=l*this.data.rotate,d=Math.sin(f),u=Math.cos(f),h=a.b,a.b=u*h-d*a.d,a.d=d*h+u*a.d),f+=l*this.data.shearX,d=Math.sin(f),u=Math.cos(f),h=a.a,a.a=u*h-d*a.c,a.c=d*h+u*a.c}else l*=this.data.rotate,d=Math.sin(l),u=Math.cos(l),h=a.a,a.a=u*h-d*a.c,a.c=d*h+u*a.c,h=a.b,a.b=u*h-d*a.d,a.d=d*h+u*a.d}if(o){const l=1+this.scaleOffset*t*this.data.scaleX;a.a*=l,a.c*=l}e!=$r.pose&&(this.tx=c*a.a,this.ty=c*a.c),a.updateAppliedTransform()}translate(e,t){this.ux-=e,this.uy-=t,this.cx-=e,this.cy-=t}rotate(e,t,i){const s=i*Re.degRad,r=Math.cos(s),o=Math.sin(s),a=this.cx-e,c=this.cy-t;this.translate(a*r-c*o-a,a*o+c*r-c)}},a3=class{constructor(e,t){A(this,"data");A(this,"bone");A(this,"color");A(this,"darkColor",null);A(this,"attachment",null);A(this,"attachmentState",0);A(this,"sequenceIndex",-1);A(this,"deform",new Array);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("bone cannot be null.");this.data=e,this.bone=t,this.color=new ut,this.darkColor=e.darkColor?new ut:null,this.setToSetupPose()}getSkeleton(){return this.bone.skeleton}getAttachment(){return this.attachment}setAttachment(e){this.attachment!=e&&((!(e instanceof mr)||!(this.attachment instanceof mr)||e.timelineAttachment!=this.attachment.timelineAttachment)&&(this.deform.length=0),this.attachment=e,this.sequenceIndex=-1)}setToSetupPose(){this.color.setFromColor(this.data.color),this.darkColor&&this.darkColor.setFromColor(this.data.darkColor),this.data.attachmentName?(this.attachment=null,this.setAttachment(this.bone.skeleton.getAttachment(this.data.index,this.data.attachmentName))):this.attachment=null}},l3=class{constructor(e,t){A(this,"data");A(this,"bones");A(this,"target");A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0);A(this,"mixScaleX",0);A(this,"mixScaleY",0);A(this,"mixShearY",0);A(this,"temp",new pu);A(this,"active",!1);if(!e)throw new Error("data cannot be null.");if(!t)throw new Error("skeleton cannot be null.");this.data=e,this.bones=new Array;for(let s=0;s0?Re.degRad:-.01745329277777778,p=this.data.offsetRotation*f,m=this.data.offsetShearY*f,g=this.bones;for(let v=0,y=g.length;vRe.PI?E-=Re.PI2:E<-3.1415927&&(E+=Re.PI2),E*=e;let _=Math.cos(E),I=Math.sin(E);b.a=_*w-I*T,b.b=_*C-I*S,b.c=I*w+_*T,b.d=I*C+_*S}if(a){let w=this.temp;c.localToWorld(w.set(this.data.offsetX,this.data.offsetY)),b.worldX+=(w.x-b.worldX)*t,b.worldY+=(w.y-b.worldY)*i}if(s!=0){let w=Math.sqrt(b.a*b.a+b.c*b.c);w!=0&&(w=(w+(Math.sqrt(l*l+u*u)-w+this.data.offsetScaleX)*s)/w),b.a*=w,b.c*=w}if(r!=0){let w=Math.sqrt(b.b*b.b+b.d*b.d);w!=0&&(w=(w+(Math.sqrt(d*d+h*h)-w+this.data.offsetScaleY)*r)/w),b.b*=w,b.d*=w}if(o>0){let w=b.b,C=b.d,T=Math.atan2(C,w),S=Math.atan2(h,d)-Math.atan2(u,l)-(T-Math.atan2(b.c,b.a));S>Re.PI?S-=Re.PI2:S<-3.1415927&&(S+=Re.PI2),S=T+(S+m)*o;let E=Math.sqrt(w*w+C*C);b.b=Math.cos(S)*E,b.d=Math.sin(S)*E}b.updateAppliedTransform()}}applyRelativeWorld(){let e=this.mixRotate,t=this.mixX,i=this.mixY,s=this.mixScaleX,r=this.mixScaleY,o=this.mixShearY,a=t!=0||i!=0,c=this.target,l=c.a,d=c.b,u=c.c,h=c.d,f=l*h-d*u>0?Re.degRad:-.01745329277777778,p=this.data.offsetRotation*f,m=this.data.offsetShearY*f,g=this.bones;for(let v=0,y=g.length;vRe.PI?E-=Re.PI2:E<-3.1415927&&(E+=Re.PI2),E*=e;let _=Math.cos(E),I=Math.sin(E);b.a=_*w-I*T,b.b=_*C-I*S,b.c=I*w+_*T,b.d=I*C+_*S}if(a){let w=this.temp;c.localToWorld(w.set(this.data.offsetX,this.data.offsetY)),b.worldX+=w.x*t,b.worldY+=w.y*i}if(s!=0){let w=(Math.sqrt(l*l+u*u)-1+this.data.offsetScaleX)*s+1;b.a*=w,b.c*=w}if(r!=0){let w=(Math.sqrt(d*d+h*h)-1+this.data.offsetScaleY)*r+1;b.b*=w,b.d*=w}if(o>0){let w=Math.atan2(h,d)-Math.atan2(u,l);w>Re.PI?w-=Re.PI2:w<-3.1415927&&(w+=Re.PI2);let C=b.b,T=b.d;w=Math.atan2(T,C)+(w-Re.PI/2+m)*o;let S=Math.sqrt(C*C+T*T);b.b=Math.cos(w)*S,b.d=Math.sin(w)*S}b.updateAppliedTransform()}}applyAbsoluteLocal(){let e=this.mixRotate,t=this.mixX,i=this.mixY,s=this.mixScaleX,r=this.mixScaleY,o=this.mixShearY,a=this.target,c=this.bones;for(let l=0,d=c.length;lt.data.name==e)??null}findTransformConstraint(e){if(!e)throw new Error("constraintName cannot be null.");return this.transformConstraints.find(t=>t.data.name==e)??null}findPathConstraint(e){if(!e)throw new Error("constraintName cannot be null.");return this.pathConstraints.find(t=>t.data.name==e)??null}findPhysicsConstraint(e){if(e==null)throw new Error("constraintName cannot be null.");return this.physicsConstraints.find(t=>t.data.name==e)??null}getBoundsRect(e){let t=new pu,i=new pu;return this.getBounds(t,i,void 0,e),{x:t.x,y:t.y,width:i.x,height:i.y}}getBounds(e,t,i=new Array(2),s=null){if(!e)throw new Error("offset cannot be null.");if(!t)throw new Error("size cannot be null.");let r=this.drawOrder,o=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,l=Number.NEGATIVE_INFINITY;for(let d=0,u=r.length;d=s.length&&(s.length=e+1),s[e]||(s[e]={}),s[e][t]=i}addSkin(e){for(let s=0;s= 0.");if(!t)throw new Error("name cannot be null.");if(!i)throw new Error("boneData cannot be null.");this.index=e,this.name=t,this.boneData=i}};var jr;(function(n){n[n.Normal=0]="Normal",n[n.Additive=1]="Additive",n[n.Multiply=2]="Multiply",n[n.Screen=3]="Screen"})(jr||(jr={}));let mA=class extends fh{constructor(t){super(t,0,!1);A(this,"bones",new Array);A(this,"_target",null);A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0);A(this,"mixScaleX",0);A(this,"mixScaleY",0);A(this,"mixShearY",0);A(this,"offsetRotation",0);A(this,"offsetX",0);A(this,"offsetY",0);A(this,"offsetScaleX",0);A(this,"offsetScaleY",0);A(this,"offsetShearY",0);A(this,"relative",!1);A(this,"local",!1)}set target(t){this._target=t}get target(){if(this._target)return this._target;throw new Error("BoneData not set.")}},Fm=class{constructor(e){A(this,"scale",1);A(this,"attachmentLoader");A(this,"linkedMeshes",new Array);this.attachmentLoader=e}readSkeletonData(e){let t=this.scale,i=new gu;i.name="";let s=new c3(e),r=s.readInt32(),o=s.readInt32();i.hash=o==0&&r==0?null:o.toString(16)+r.toString(16),i.version=s.readString(),i.x=s.readFloat(),i.y=s.readFloat(),i.width=s.readFloat(),i.height=s.readFloat(),i.referenceScale=s.readFloat()*t;let a=s.readBoolean();a&&(i.fps=s.readFloat(),i.imagesPath=s.readString(),i.audioPath=s.readString());let c=0;c=s.readInt(!0);for(let d=0;d>1&3,f.rotateMode=p>>3&3,(p&128)!=0&&(f.offsetRotation=s.readFloat()),f.position=s.readFloat(),f.positionMode==Ms.Fixed&&(f.position*=t),f.spacing=s.readFloat(),(f.spacingMode==Ai.Length||f.spacingMode==Ai.Fixed)&&(f.spacing*=t),f.mixRotate=s.readFloat(),f.mixX=s.readFloat(),f.mixY=s.readFloat(),i.pathConstraints.push(f)}c=s.readInt(!0);for(let d=0,u;d>4,e.readFloat())}s.push(T);break}}}}}let o=e.readInt(!0);if(o>0){let l=new Fl(o),d=i.slots.length;for(let u=0;u=0;y--)p[y]=-1;let m=De.newArray(d-f,0),g=0,v=0;for(let y=0;y=0;y--)p[y]==-1&&(p[y]=m[--v]);l.setFrame(u,h,p)}s.push(l)}let a=e.readInt(!0);if(a>0){let l=new Gg(a);for(let d=0;d>>1^-(i&1)}readStringRef(){let e=this.readInt(!0);return e==0?null:this.strings[e-1]}readString(){let e=this.readInt(!0);switch(e){case 0:return null;case 1:return""}e--;let t="";for(let i=0;i>4){case 12:case 13:t+=String.fromCharCode((s&31)<<6|this.readByte()&63),i+=2;break;case 14:t+=String.fromCharCode((s&15)<<12|(this.readByte()&63)<<6|this.readByte()&63),i+=3;break;default:t+=String.fromCharCode(s),i++}}return t}readFloat(){let e=this.buffer.getFloat32(this.index);return this.index+=4,e}readBoolean(){return this.readByte()!=0}},d3=class{constructor(e,t,i,s,r){A(this,"parent");A(this,"skinIndex");A(this,"slotIndex");A(this,"mesh");A(this,"inheritTimeline");this.mesh=e,this.skinIndex=t,this.slotIndex=i,this.parent=s,this.inheritTimeline=r}},u3=class{constructor(e=null,t=null,i=0){A(this,"bones");A(this,"vertices");A(this,"length");this.bones=e,this.vertices=t,this.length=i}};var Xs;(function(n){n[n.Region=0]="Region",n[n.BoundingBox=1]="BoundingBox",n[n.Mesh=2]="Mesh",n[n.LinkedMesh=3]="LinkedMesh",n[n.Path=4]="Path",n[n.Point=5]="Point",n[n.Clipping=6]="Clipping"})(Xs||(Xs={}));function Bi(n,e,t){let i=n.readFloat(),s=n.readFloat()*t;for(let r=0,o=0,a=e.getFrameCount()-1;e.setFrame(r,i,s),r!=a;r++){let c=n.readFloat(),l=n.readFloat()*t;switch(n.readByte()){case hs:e.setStepped(r);break;case fs:gt(n,e,o++,r,0,i,c,s,l,t)}i=c,s=l}return e}function pp(n,e,t){let i=n.readFloat(),s=n.readFloat()*t,r=n.readFloat()*t;for(let o=0,a=0,c=e.getFrameCount()-1;e.setFrame(o,i,s,r),o!=c;o++){let l=n.readFloat(),d=n.readFloat()*t,u=n.readFloat()*t;switch(n.readByte()){case hs:e.setStepped(o);break;case fs:gt(n,e,a++,o,0,i,l,s,d,t),gt(n,e,a++,o,1,i,l,r,u,t)}i=l,s=d,r=u}return e}function gt(n,e,t,i,s,r,o,a,c,l){e.setBezier(t,i,s,r,a,n.readFloat(),n.readFloat()*l,n.readFloat(),n.readFloat()*l,o,c)}const h3=0,f3=1,p3=2,m3=3,g3=4,v3=5,b3=6,y3=7,x3=8,w3=9,S3=10,C3=0,A3=1,T3=2,E3=3,_3=4,M3=5,P3=0,I3=1,k3=0,R3=1,F3=2,L3=0,D3=1,O3=2,N3=4,$3=5,B3=6,U3=7,V3=8,hs=1,fs=2;class ln{constructor(){A(this,"convexPolygons",new Array);A(this,"convexPolygonsIndices",new Array);A(this,"indicesArray",new Array);A(this,"isConcaveArray",new Array);A(this,"triangles",new Array);A(this,"polygonPool",new fu(()=>new Array));A(this,"polygonIndicesPool",new fu(()=>new Array))}triangulate(e){let t=e,i=e.length>>1,s=this.indicesArray;s.length=0;for(let a=0;a3;){let a=i-1,c=0,l=1;for(;;){e:if(!r[c]){let h=s[a]<<1,f=s[c]<<1,p=s[l]<<1,m=t[h],g=t[h+1],v=t[f],y=t[f+1],b=t[p],w=t[p+1];for(let C=(l+1)%i;C!=a;C=(C+1)%i){if(!r[C])continue;let T=s[C]<<1,S=t[T],E=t[T+1];if(ln.positiveArea(b,w,m,g,S,E)&&ln.positiveArea(m,g,v,y,S,E)&&ln.positiveArea(v,y,b,w,S,E))break e}break}if(l==0){do{if(!r[c])break;c--}while(c>0);break}a=c,c=l,l=(l+1)%i}o.push(s[(i+c-1)%i]),o.push(s[c]),o.push(s[(c+1)%i]),s.splice(c,1),r.splice(c,1),i--;let d=(i+c-1)%i,u=c==i?0:c;r[d]=ln.isConcave(d,i,t,s),r[u]=ln.isConcave(u,i,t,s)}return i==3&&(o.push(s[2]),o.push(s[0]),o.push(s[1])),o}decompose(e,t){let i=e,s=this.convexPolygons;this.polygonPool.freeAll(s),s.length=0;let r=this.convexPolygonsIndices;this.polygonIndicesPool.freeAll(r),r.length=0;let o=this.polygonIndicesPool.obtain();o.length=0;let a=this.polygonPool.obtain();a.length=0;let c=-1,l=0;for(let d=0,u=t.length;d0?(s.push(a),r.push(o)):(this.polygonPool.free(a),this.polygonIndicesPool.free(o)),a=this.polygonPool.obtain(),a.length=0,a.push(m),a.push(g),a.push(v),a.push(y),a.push(b),a.push(w),o=this.polygonIndicesPool.obtain(),o.length=0,o.push(h),o.push(f),o.push(p),l=ln.winding(m,g,v,y,b,w),c=h)}a.length>0&&(s.push(a),r.push(o));for(let d=0,u=s.length;d=0;d--)a=s[d],a.length==0&&(s.splice(d,1),this.polygonPool.free(a),o=r[d],r.splice(d,1),this.polygonIndicesPool.free(o));return s}static isConcave(e,t,i,s){let r=s[(t+e-1)%t]<<1,o=s[e]<<1,a=s[(e+1)%t]<<1;return!this.positiveArea(i[r],i[r+1],i[o],i[o+1],i[a],i[a+1])}static positiveArea(e,t,i,s,r,o){return e*(o-s)+i*(t-o)+r*(s-t)>=0}static winding(e,t,i,s,r,o){let a=i-e,c=s-t;return r*c-o*a+a*t-e*c>=0?1:-1}}class vu{constructor(){A(this,"triangulator",new ln);A(this,"clippingPolygon",new Array);A(this,"clipOutput",new Array);A(this,"clippedVertices",new Array);A(this,"clippedUVs",new Array);A(this,"clippedTriangles",new Array);A(this,"scratch",new Array);A(this,"clipAttachment",null);A(this,"clippingPolygons",null)}clipStart(e,t){if(this.clipAttachment)return 0;this.clipAttachment=t;let i=t.worldVerticesLength,s=De.setArraySize(this.clippingPolygon,i);t.computeWorldVertices(e,0,i,s,0,2);let r=this.clippingPolygon;vu.makeClockwise(r);let o=this.clippingPolygons=this.triangulator.decompose(r,this.triangulator.triangulate(r));for(let a=0,c=o.length;a>1,T=this.clipOutput,S=De.setArraySize(r,b+C*2);for(let _=0;_>1,X=this.clipOutput,z=De.setArraySize(l,D+$*f);for(let J=0;J>1,N=this.clipOutput,F=De.setArraySize(o,M+L*2),$=De.setArraySize(a,M+L*2);for(let z=0;z=2?(u=c,c=this.scratch):u=this.scratch,u.length=0,u.push(e),u.push(t),u.push(i),u.push(s),u.push(r),u.push(o),u.push(e),u.push(t),c.length=0;let h=a.length-4,f=a;for(let p=0;;p+=2){let m=f[p],g=f[p+1],v=m-f[p+2],y=g-f[p+3],b=c.length,w=u;for(let T=0,S=u.length-2;Tv*(g-M),B=y*(m-E)-v*(g-_);if(B>0){if(k){c.push(I),c.push(M);continue}let D=I-E,G=M-_,V=B/(D*y-G*v);if(V>=0&&V<=1)c.push(E+D*V),c.push(_+G*V);else{c.push(I),c.push(M);continue}}else if(k){let D=I-E,G=M-_,V=B/(D*y-G*v);if(V>=0&&V<=1)c.push(E+D*V),c.push(_+G*V),c.push(I),c.push(M);else{c.push(I),c.push(M);continue}}d=!0}if(b==c.length)return l.length=0,!0;if(c.push(c[0]),c.push(c[1]),p==h)break;let C=c;c=u,c.length=0,u=C}if(l!=c){l.length=0;for(let p=0,m=c.length-2;p>1;l0){let d=i.findPhysicsConstraint(a);if(!d)throw new Error("Physics constraint not found: "+a);l=i.physicsConstraints.indexOf(d)}for(let d in c){let u=c[d],h=u[0];if(!h)continue;let f=u.length;if(d=="reset"){const m=new ZC(f,l);for(let g=0;h!=null;h=u[g+1],g++)m.setFrame(g,ae(h,"time",0));r.push(m);continue}let p;if(d=="inertia")p=new jC(f,f,l);else if(d=="strength")p=new HC(f,f,l);else if(d=="damping")p=new GC(f,f,l);else if(d=="mass")p=new WC(f,f,l);else if(d=="wind")p=new qC(f,f,l);else if(d=="gravity")p=new KC(f,f,l);else if(d=="mix")p=new JC(f,f,l);else continue;r.push(Vn(u,p,0,1))}}if(e.attachments)for(let a in e.attachments){let c=e.attachments[a],l=i.findSkin(a);if(!l)throw new Error("Skin not found: "+a);for(let d in c){let u=c[d],h=i.findSlot(d);if(!h)throw new Error("Slot not found: "+d);let f=h.index;for(let p in u){let m=u[p],g=l.getAttachment(f,p);for(let v in m){let y=m[v],b=y[0];if(b){if(v=="deform"){let w=g.bones,C=g.vertices,T=w?C.length/3*2:C.length,S=new BC(y.length,y.length,f,g),E=ae(b,"time",0);for(let _=0,I=0;;_++){let M,k=ae(b,"vertices",null);if(!k)M=w?De.newFloatArray(T):C;else{M=De.newFloatArray(T);let V=ae(b,"offset",0);if(De.arrayCopy(k,0,M,V,k.length),s!=1)for(let Y=V,L=Y+k.length;Y=0;v--)h[v]==-1&&(h[v]=p[--g])}a.setFrame(l,ae(u,"time",0),h)}r.push(a)}if(e.events){let a=new Gg(e.events.length),c=0;for(let l=0;l"u"&&(Math.fround=(function(n){return function(e){return n[0]=e,n[0]}})(new Float32Array(1)));if(typeof window<"u"&&window.PIXI){let n=window.require;window.require=e=>{if(n)return n(e);if(e.startsWith("@pixi/"))return window.PIXI}}const zs=class zs extends e3{constructor(t){super(t.resource.source);A(this,"texture");this.texture=it.from(t)}static from(t){return zs.textureMap.has(t)?zs.textureMap.get(t):new zs(t)}setFilters(t,i){this.texture.baseTexture.scaleMode=zs.toPixiTextureFilter(t),this.texture.baseTexture.mipmap=zs.toPixiMipMap(t)}setWraps(t,i){this.texture.baseTexture.wrapMode=zs.toPixiTextureWrap(t)}dispose(){this.texture.destroy()}static toPixiTextureFilter(t){switch(t){case Mi.Nearest:case Mi.MipMapNearestLinear:case Mi.MipMapNearestNearest:return Gn.NEAREST;case Mi.Linear:case Mi.MipMapLinearLinear:case Mi.MipMapLinearNearest:return Gn.LINEAR;default:throw new Error(`Unknown texture filter: ${String(t)}`)}}static toPixiMipMap(t){switch(t){case Mi.Nearest:case Mi.Linear:return On.OFF;case Mi.MipMapNearestLinear:case Mi.MipMapNearestNearest:case Mi.MipMapLinearLinear:case Mi.MipMapLinearNearest:return On.ON;default:throw new Error(`Unknown texture filter: ${String(t)}`)}}static toPixiTextureWrap(t){switch(t){case cr.ClampToEdge:return Jn.CLAMP;case cr.MirroredRepeat:return Jn.MIRRORED_REPEAT;case cr.Repeat:return Jn.REPEAT;default:throw new Error(`Unknown texture wrap: ${String(t)}`)}}static toPixiBlending(t){switch(t){case jr.Normal:return Qe.NORMAL;case jr.Additive:return Qe.ADD;case jr.Multiply:return Qe.MULTIPLY;case jr.Screen:return Qe.SCREEN;default:throw new Error(`Unknown blendMode: ${String(t)}`)}}};A(zs,"textureMap",new Map);let Yo=zs;const js=class js extends ec{constructor(){const t=new Fg;t.getBuffer("aVertexPosition").static=!1,t.getBuffer("aTextureCoord").static=!1;const i=new ru(it.EMPTY);super(t,i);A(this,"name","");A(this,"warnedTwoTint",!1)}updateFromSpineData(t,i,s,r,o,a,c,l){var v,y;this.texture=t.texture;const d=o/(l?12:8)*2,u=this.geometry.getBuffer("aTextureCoord");((v=u.data)==null?void 0:v.length)!==d&&(u.data=new Float32Array(d));const h=this.geometry.getBuffer("aVertexPosition");((y=h.data)==null?void 0:y.length)!==d&&(h.data=new Float32Array(d));let f=0,p=u.data,m=h.data;for(let b=0;bnew Lm);A(this,"beforeUpdateWorldTransforms",()=>{});A(this,"afterUpdateWorldTransforms",()=>{});A(this,"_autoUpdate",!1);A(this,"_ticker",nn.shared);A(this,"meshesCache",new Map);A(this,"lightColor",new ut);A(this,"darkColor",new ut);A(this,"_boundsProvider");A(this,"_boundsPoint",new At);A(this,"_boundsSpineID",-1);A(this,"_boundsSpineDirty",!0);A(this,"slotsObject",new Map);A(this,"verticesCache",De.newFloatArray(1024));A(this,"clippingSlotToPixiMasks",{});A(this,"currentClippingSlot");const s=t instanceof gu?t:t.skeletonData;this.skeleton=new Wg(s);const r=new l3(s);this.state=new n3(r),(t==null?void 0:t.darkTint)!==void 0||(i==null?void 0:i.slotMeshFactory)===void 0?(this.darkTint=(t==null?void 0:t.darkTint)===void 0?this.skeleton.slots.some(o=>!!o.data.darkColor):t==null?void 0:t.darkTint,this.darkTint&&(this.slotMeshFactory=()=>new Ll)):this.initializeMeshFactory(i==null?void 0:i.slotMeshFactory),t!=null&&t.ticker&&(this._ticker=t.ticker),this.autoUpdate=(t==null?void 0:t.autoUpdate)??!0,this.boundsProvider=t.boundsProvider}get debug(){return this._debug}set debug(t){this._debug&&this._debug.unregisterSpine(this),t&&t.registerSpine(this),this._debug=t}get autoUpdate(){return this._autoUpdate}set autoUpdate(t){t&&!this._autoUpdate?this._ticker.add(this.internalUpdate,this):!t&&this._autoUpdate&&this._ticker.remove(this.internalUpdate,this),this._autoUpdate=t}get ticker(){return this._ticker}set ticker(t){t=t??nn.shared,this._ticker!==t&&(this._autoUpdate&&(this._ticker.remove(this.internalUpdate,this),t.add(this.internalUpdate,this)),this._ticker=t)}get boundsProvider(){return this._boundsProvider}set boundsProvider(t){this._boundsProvider=t,t?(this._boundsSpineID=-1,this._boundsSpineDirty=!0,this.interactiveChildren=!1):(this.interactiveChildren=!0,this.hitArea=null),this.hasNeverUpdated||this.calculateBounds()}initializeMeshFactory(t){if(t){this.slotMeshFactory=t;const i=this.slotMeshFactory();i instanceof Ll&&(this.darkTint=!0),i.destroy()}else for(let i=0;inew Ll,this.darkTint=!0;break}}update(t){this.internalUpdate(0,t)}internalUpdate(t,i){this.hasNeverUpdated=!1;const s=i??this._ticker.deltaMS/1e3;this.state.update(s),this.state.apply(this.skeleton),this.beforeUpdateWorldTransforms(this),this.skeleton.update(s),this.skeleton.updateWorldTransform($r.update),this.afterUpdateWorldTransforms(this)}updateTransform(){var t;this.renderMeshes(),this.sortChildren(),(t=this.debug)==null||t.renderDebug(this),super.updateTransform()}destroy(t){var i;this.autoUpdate&&(this.autoUpdate=!1),this._ticker=null;for(const[,s]of this.meshesCache)s==null||s.destroy();this.state.clearListeners(),this.debug=void 0,this.meshesCache.clear(),this.slotsObject.clear();for(let s in this.clippingSlotToPixiMasks)(i=this.clippingSlotToPixiMasks[s].mask)==null||i.destroy(),delete this.clippingSlotToPixiMasks[s];super.destroy(t)}resetMeshes(){for(const[,t]of this.meshesCache)t.zIndex=-1,t.visible=!1}_calculateBounds(){this.hasNeverUpdated&&(this.internalUpdate(0,0),this.renderMeshes())}hasMeshForSlot(t){return this.meshesCache.has(t)}getMeshForSlot(t){if(this.hasMeshForSlot(t)){let i=this.meshesCache.get(t);return i.visible=!0,i}else{let i=this.slotMeshFactory();return this.addChild(i),this.meshesCache.set(t,i),i}}getSlotFromRef(t){let i;if(typeof t=="number"?i=this.skeleton.slots[t]:typeof t=="string"?i=this.skeleton.findSlot(t):i=t,!i)throw new Error(`No slot found with the given slot reference: ${t}`);return i}addSlotObject(t,i,s){var a;let r=this.getSlotFromRef(t);const o=(a=this.slotsObject.get(r))==null?void 0:a.container;if(!(o&&o===i)){for(const[c,{container:l}]of this.slotsObject)if(c!==r&&l===i){this.removeSlotObject(c,i);break}o&&this.removeChild(o),this.slotsObject.set(r,{container:i,followAttachmentTimeline:(s==null?void 0:s.followAttachmentTimeline)||!1,followSlotColor:(s==null?void 0:s.followSlotColor)||!1}),this.addChild(i)}}getSlotObject(t){const i=this.slotsObject.get(this.getSlotFromRef(t));return i?i.container:void 0}removeSlotObject(t,i){var o;let s=this.getSlotFromRef(t),r=(o=this.slotsObject.get(s))==null?void 0:o.container;r&&(i&&i!==r||(this.removeChild(r),this.slotsObject.delete(s)))}removeSlotObjects(){for(const[,t]of this.slotsObject)t.container.removeFromParent();this.slotsObject.clear()}updateSlotObject(t,i,s){const{container:r,followAttachmentTimeline:o}=t,a=o?!!i.attachment:!0;if(r.visible=this.skeleton.drawOrder.includes(i)&&a,r.visible){let c=i.bone;const l=r.localTransform;l.a=c.a,l.b=c.c,l.c=-c.b,l.d=-c.d,l.tx=c.worldX,l.ty=c.worldY,r.transform.setFromMatrix(l),r.zIndex=s,r.alpha=this.skeleton.color.a*i.color.a,t.followSlotColor&&this.setSlotObjectTint(r,255*this.skeleton.color.r*i.color.r<<16|255*this.skeleton.color.g*i.color.g<<8|255*this.skeleton.color.b*i.color.b)}}setSlotObjectTint(t,i){const s=t;"tint"in s&&(s.tint=i);for(const r of s.children??[])this.setSlotObjectTint(r,i)}updateAndSetPixiMask(t,i){var a,c;const s=t.attachment;if(s&&s instanceof Oa){const l=(a=this.clippingSlotToPixiMasks)[c=t.data.name]||(a[c]={slot:t,vertices:new Array});l.maskComputed=!1,this.currentClippingSlot=l;return}let r=this.currentClippingSlot;const o=this.slotsObject.get(t);if(r&&o){let l=r.mask;if(l||(l=Jy.obtain(),r.mask=l,this.addChild(l)),!r.maskComputed){let d=r.slot,u=d.attachment;r.maskComputed=!0;const h=u.worldVerticesLength,f=r.vertices;u.computeWorldVertices(d,0,h,f,0,2),l.clear().lineStyle(0).beginFill(0).drawPolygon(f).endFill()}o.container.mask=l}else o!=null&&o.container.mask&&(o.container.mask=null);if(r&&r.slot.attachment.endSlot==t.data&&(this.currentClippingSlot=void 0),i){for(const l in this.clippingSlotToPixiMasks){const d=this.clippingSlotToPixiMasks[l];(!(d.slot.attachment instanceof Oa)||!d.maskComputed)&&d.mask&&(this.removeChild(d.mask),Jy.free(d.mask),d.mask=void 0)}this.currentClippingSlot=void 0}}renderMeshes(){var r,o;this.resetMeshes();let t=null,i=null;const s=this.skeleton.drawOrder;for(let a=0,c=s.length,l=0;a>1)*p,y>this.verticesCache.length&&(this.verticesCache=De.newFloatArray(y)),b.computeWorldVertices(d,0,b.worldVerticesLength,this.verticesCache,0,p),t=b.triangles,i=b.uvs,v=(o=b.region)==null?void 0:o.texture}else if(m instanceof Oa){Et.clipper.clipStart(d,m);continue}else{this.hasMeshForSlot(d)&&(this.getMeshForSlot(d).visible=!1),Et.clipper.clipEndWithSlot(d);continue}if(v!=null){const x=d.bone.skeleton.color,C=d.color,T=x.a*C.a*g.a;this.lightColor.set(x.r*C.r*g.r,x.g*C.g*g.g,x.b*C.b*g.b,T),d.darkColor!=null?this.darkColor.set(d.darkColor.r,d.darkColor.g,d.darkColor.b,1):this.darkColor.set(0,0,0,1);let S,E,_,I;if(Et.clipper.isClipping())Et.clipper.clipTriangles(this.verticesCache,t,t.length,i,this.lightColor,this.darkColor,f),S=Et.clipper.clippedVertices,E=S.length,_=Et.clipper.clippedTriangles,I=_.length;else{const k=this.verticesCache;for(let B=2,D=0,G=y;Bnew Ki);Wg.yDown=!0;const dd="spineTextureAtlasLoader",n4={extension:Oe.Asset,resolver:{test:n=>un(n,".atlas"),parse:n=>{var t,i;const e=n.split(".");return{resolution:parseFloat(((i=(t=Ve.RETINA_PREFIX)==null?void 0:t.exec(n))==null?void 0:i[1])??"1"),format:e[e.length-2],src:n}}},loader:{name:dd,extension:{type:Oe.LoadParser,priority:Cn.Normal,name:dd},test(n){return un(n,".atlas")},async load(n){const e=await Ve.ADAPTER.fetch(n);if(!e.ok)throw new Error(`[${dd}] Failed to fetch ${n}: ${e.status} ${e.statusText}`);return await e.text()},testParse(n,e){const t=un(e.src,".atlas"),i=typeof n=="string",s=e.loadParser===dd;return Promise.resolve((t||s)&&i)},unload(n){n.dispose()},async parse(n,e,t){var c;const i=e.data||{};let s=hi.dirname(e.src);s&&s.lastIndexOf("/")!==s.length-1&&(s+="/");const r=new nA(n);if(i.images instanceof rt||typeof i.images=="string"){const l=i.images;i.images={},i.images[r.pages[0].name]=l}const o=[];let a=!0;for(const l of t.parsers)if(l.name=="loadTextures"){a=(c=l.config)==null?void 0:c.preferCreateImageBitmap;break}Ts.setPreferences({preferCreateImageBitmap:!1});for(const l of r.pages){const d=l.name,u=i!=null&&i.images?i.images[d]:void 0;if(u instanceof rt)l.setTexture(Yo.from(u));else{const h=u??hi.normalize([...s.split(hi.sep),d].join(hi.sep)),f={src:eu(h,e.src),data:{...i.imageMetadata,alphaMode:l.pma?ki.PMA:ki.UNPACK}},p=t.load(f).then(m=>{l.setTexture(Yo.from(m.baseTexture))});o.push(p)}}return await Promise.all(o),Ts.setPreferences({preferCreateImageBitmap:a}),r}}};He.add(n4);const ud="spineSkeletonLoader";function s4(n){return n.hasOwnProperty("bones")}function r4(n){return n instanceof Uint8Array}const o4={extension:Oe.Asset,loader:{name:ud,extension:{type:Oe.LoadParser,priority:Cn.Normal,name:ud},test(n){return un(n,".skel")},async load(n){const e=await Ve.ADAPTER.fetch(n);if(!e.ok)throw new Error(`[${ud}] Failed to fetch ${n}: ${e.status} ${e.statusText}`);return new Uint8Array(await e.arrayBuffer())},testParse(n,e){const t=un(e.src,".json")&&s4(n),i=un(e.src,".skel")&&r4(n),s=e.loadParser===ud;return Promise.resolve(t||i||s)}}};He.add(o4);class a4 extends Is{constructor(t=!1){super();A(this,"_buffer");A(this,"_indexBuffer");this._buffer=new Wt(void 0,t,!1),this._indexBuffer=new Wt(void 0,t,!0),this.addAttribute("aVertexPosition",this._buffer,2,!1,je.FLOAT).addAttribute("aTextureCoord",this._buffer,2,!1,je.FLOAT).addAttribute("aColor",this._buffer,4,!0,je.UNSIGNED_BYTE).addAttribute("aDarkColor",this._buffer,4,!0,je.UNSIGNED_BYTE).addAttribute("aTextureId",this._buffer,1,!0,je.FLOAT).addIndex(this._indexBuffer)}}const l4=` +`;class H3 extends es{constructor(t){const i={uSampler:t??it.EMPTY,alpha:1,uTextureMatrix:Bt.IDENTITY,uColor:new Float32Array([1,1,1,1]),uDarkColor:new Float32Array([0,0,0,0])},s={tint:16777215,darkTint:0,alpha:1,pluginName:"darkTintBatch"};super(As.from(z3,j3),i);A(this,"uvMatrix");A(this,"batchable");A(this,"pluginName");A(this,"_tintRGB");A(this,"_darkTintRGB");A(this,"_colorDirty");A(this,"_alpha");A(this,"_tintColor");A(this,"_darkTintColor");this._colorDirty=!1,this.uvMatrix=new _g(i.uSampler),this.batchable=!0,this.pluginName=s.pluginName,this._tintColor=new Rt(s.tint),this._darkTintColor=new Rt(s.darkTint),this._tintRGB=this._tintColor.toLittleEndianNumber(),this._darkTintRGB=this._darkTintColor.toLittleEndianNumber(),this._alpha=s.alpha,this._colorDirty=!0}get texture(){return this.uniforms.uSampler}set texture(t){this.uniforms.uSampler!==t&&(!this.uniforms.uSampler.baseTexture.alphaMode!=!t.baseTexture.alphaMode&&(this._colorDirty=!0),this.uniforms.uSampler=t,this.uvMatrix.texture=t)}set alpha(t){t!==this._alpha&&(this._alpha=t,this._colorDirty=!0)}get alpha(){return this._alpha}set tint(t){t!==this.tint&&(this._tintColor.setValue(t),this._tintRGB=this._tintColor.toLittleEndianNumber(),this._colorDirty=!0)}get tint(){return this._tintColor.value}set darkTint(t){t!==this.darkTint&&(this._darkTintColor.setValue(t),this._darkTintRGB=this._darkTintColor.toLittleEndianNumber(),this._colorDirty=!0)}get darkTint(){return this._darkTintColor.value}get tintValue(){return this._tintColor.toNumber()}get darkTintValue(){return this._darkTintColor.toNumber()}update(){this._colorDirty&&(this._colorDirty=!1,Rt.shared.setValue(this._tintColor).premultiply(this._alpha,!0).toArray(this.uniforms.uColor),Rt.shared.setValue(this._darkTintColor).premultiply(this._alpha,!0).premultiply(1,!1).toArray(this.uniforms.uDarkColor)),this.uvMatrix.update()&&(this.uniforms.uTextureMatrix=this.uvMatrix.mapCoord)}}class G3 extends ec{constructor(t){super(new Y3,new H3(t),void 0,void 0);A(this,"_darkTintRGB",0)}get darkTint(){return"darkTint"in this.shader?this.shader.darkTint:null}set darkTint(t){this.shader.darkTint=t}get darkTintValue(){return this.shader.darkTintValue}_renderToBatch(t){const i=this.geometry,s=this.shader;s.uvMatrix&&(s.uvMatrix.update(),this.calculateUvs()),this.calculateVertices(),this.indices=i.indexBuffer.data,this._tintRGB=s._tintRGB,this._darkTintRGB=s._darkTintRGB,this._texture=s.texture;const r=this.material.pluginName;t.batch.setObjectRenderer(t.plugins[r]),t.plugins[r].render(this)}}const wi=class wi extends G3{constructor(){super();A(this,"name","")}updateFromSpineData(t,i,s,r,o,a,c,l){var v,y;this.texture=t.texture;const d=o/(l?12:8)*2,u=this.geometry.getBuffer("aTextureCoord");((v=u.data)==null?void 0:v.length)!==d&&(u.data=new Float32Array(d));const h=this.geometry.getBuffer("aVertexPosition");((y=h.data)==null?void 0:y.length)!==d&&(h.data=new Float32Array(d));let f=0,p=u.data,m=h.data;for(let b=0;bnew Lm);A(this,"beforeUpdateWorldTransforms",()=>{});A(this,"afterUpdateWorldTransforms",()=>{});A(this,"_autoUpdate",!1);A(this,"_ticker",nn.shared);A(this,"meshesCache",new Map);A(this,"lightColor",new ut);A(this,"darkColor",new ut);A(this,"_boundsProvider");A(this,"_boundsPoint",new At);A(this,"_boundsSpineID",-1);A(this,"_boundsSpineDirty",!0);A(this,"slotsObject",new Map);A(this,"verticesCache",De.newFloatArray(1024));A(this,"clippingSlotToPixiMasks",{});A(this,"currentClippingSlot");const s=t instanceof gu?t:t.skeletonData;this.skeleton=new Wg(s);const r=new QB(s);this.state=new WB(r),(t==null?void 0:t.darkTint)!==void 0||(i==null?void 0:i.slotMeshFactory)===void 0?(this.darkTint=(t==null?void 0:t.darkTint)===void 0?this.skeleton.slots.some(o=>!!o.data.darkColor):t==null?void 0:t.darkTint,this.darkTint&&(this.slotMeshFactory=()=>new Ll)):this.initializeMeshFactory(i==null?void 0:i.slotMeshFactory),t!=null&&t.ticker&&(this._ticker=t.ticker),this.autoUpdate=(t==null?void 0:t.autoUpdate)??!0,this.boundsProvider=t.boundsProvider}get debug(){return this._debug}set debug(t){this._debug&&this._debug.unregisterSpine(this),t&&t.registerSpine(this),this._debug=t}get autoUpdate(){return this._autoUpdate}set autoUpdate(t){t&&!this._autoUpdate?this._ticker.add(this.internalUpdate,this):!t&&this._autoUpdate&&this._ticker.remove(this.internalUpdate,this),this._autoUpdate=t}get ticker(){return this._ticker}set ticker(t){t=t??nn.shared,this._ticker!==t&&(this._autoUpdate&&(this._ticker.remove(this.internalUpdate,this),t.add(this.internalUpdate,this)),this._ticker=t)}get boundsProvider(){return this._boundsProvider}set boundsProvider(t){this._boundsProvider=t,t?(this._boundsSpineID=-1,this._boundsSpineDirty=!0,this.interactiveChildren=!1):(this.interactiveChildren=!0,this.hitArea=null),this.hasNeverUpdated||this.calculateBounds()}initializeMeshFactory(t){if(t){this.slotMeshFactory=t;const i=this.slotMeshFactory();i instanceof Ll&&(this.darkTint=!0),i.destroy()}else for(let i=0;inew Ll,this.darkTint=!0;break}}update(t){this.internalUpdate(0,t)}internalUpdate(t,i){this.hasNeverUpdated=!1;const s=i??this._ticker.deltaMS/1e3;this.state.update(s),this.state.apply(this.skeleton),this.beforeUpdateWorldTransforms(this),this.skeleton.update(s),this.skeleton.updateWorldTransform($r.update),this.afterUpdateWorldTransforms(this)}updateTransform(){var t;this.renderMeshes(),this.sortChildren(),(t=this.debug)==null||t.renderDebug(this),super.updateTransform()}destroy(t){var i;this.autoUpdate&&(this.autoUpdate=!1),this._ticker=null;for(const[,s]of this.meshesCache)s==null||s.destroy();this.state.clearListeners(),this.debug=void 0,this.meshesCache.clear(),this.slotsObject.clear();for(let s in this.clippingSlotToPixiMasks)(i=this.clippingSlotToPixiMasks[s].mask)==null||i.destroy(),delete this.clippingSlotToPixiMasks[s];super.destroy(t)}resetMeshes(){for(const[,t]of this.meshesCache)t.zIndex=-1,t.visible=!1}_calculateBounds(){this.hasNeverUpdated&&(this.internalUpdate(0,0),this.renderMeshes())}hasMeshForSlot(t){return this.meshesCache.has(t)}getMeshForSlot(t){if(this.hasMeshForSlot(t)){let i=this.meshesCache.get(t);return i.visible=!0,i}else{let i=this.slotMeshFactory();return this.addChild(i),this.meshesCache.set(t,i),i}}getSlotFromRef(t){let i;if(typeof t=="number"?i=this.skeleton.slots[t]:typeof t=="string"?i=this.skeleton.findSlot(t):i=t,!i)throw new Error(`No slot found with the given slot reference: ${t}`);return i}addSlotObject(t,i,s){var a;let r=this.getSlotFromRef(t);const o=(a=this.slotsObject.get(r))==null?void 0:a.container;if(!(o&&o===i)){for(const[c,{container:l}]of this.slotsObject)if(c!==r&&l===i){this.removeSlotObject(c,i);break}o&&this.removeChild(o),this.slotsObject.set(r,{container:i,followAttachmentTimeline:(s==null?void 0:s.followAttachmentTimeline)||!1,followSlotColor:(s==null?void 0:s.followSlotColor)||!1}),this.addChild(i)}}getSlotObject(t){const i=this.slotsObject.get(this.getSlotFromRef(t));return i?i.container:void 0}removeSlotObject(t,i){var o;let s=this.getSlotFromRef(t),r=(o=this.slotsObject.get(s))==null?void 0:o.container;r&&(i&&i!==r||(this.removeChild(r),this.slotsObject.delete(s)))}removeSlotObjects(){for(const[,t]of this.slotsObject)t.container.removeFromParent();this.slotsObject.clear()}updateSlotObject(t,i,s){const{container:r,followAttachmentTimeline:o}=t,a=o?!!i.attachment:!0;if(r.visible=this.skeleton.drawOrder.includes(i)&&a,r.visible){let c=i.bone;const l=r.localTransform;l.a=c.a,l.b=c.c,l.c=-c.b,l.d=-c.d,l.tx=c.worldX,l.ty=c.worldY,r.transform.setFromMatrix(l),r.zIndex=s,r.alpha=this.skeleton.color.a*i.color.a,t.followSlotColor&&this.setSlotObjectTint(r,255*this.skeleton.color.r*i.color.r<<16|255*this.skeleton.color.g*i.color.g<<8|255*this.skeleton.color.b*i.color.b)}}setSlotObjectTint(t,i){const s=t;"tint"in s&&(s.tint=i);for(const r of s.children??[])this.setSlotObjectTint(r,i)}updateAndSetPixiMask(t,i){var a,c;const s=t.attachment;if(s&&s instanceof Oa){const l=(a=this.clippingSlotToPixiMasks)[c=t.data.name]||(a[c]={slot:t,vertices:new Array});l.maskComputed=!1,this.currentClippingSlot=l;return}let r=this.currentClippingSlot;const o=this.slotsObject.get(t);if(r&&o){let l=r.mask;if(l||(l=Jy.obtain(),r.mask=l,this.addChild(l)),!r.maskComputed){let d=r.slot,u=d.attachment;r.maskComputed=!0;const h=u.worldVerticesLength,f=r.vertices;u.computeWorldVertices(d,0,h,f,0,2),l.clear().lineStyle(0).beginFill(0).drawPolygon(f).endFill()}o.container.mask=l}else o!=null&&o.container.mask&&(o.container.mask=null);if(r&&r.slot.attachment.endSlot==t.data&&(this.currentClippingSlot=void 0),i){for(const l in this.clippingSlotToPixiMasks){const d=this.clippingSlotToPixiMasks[l];(!(d.slot.attachment instanceof Oa)||!d.maskComputed)&&d.mask&&(this.removeChild(d.mask),Jy.free(d.mask),d.mask=void 0)}this.currentClippingSlot=void 0}}renderMeshes(){var r,o;this.resetMeshes();let t=null,i=null;const s=this.skeleton.drawOrder;for(let a=0,c=s.length,l=0;a>1)*p,y>this.verticesCache.length&&(this.verticesCache=De.newFloatArray(y)),b.computeWorldVertices(d,0,b.worldVerticesLength,this.verticesCache,0,p),t=b.triangles,i=b.uvs,v=(o=b.region)==null?void 0:o.texture}else if(m instanceof Oa){Et.clipper.clipStart(d,m);continue}else{this.hasMeshForSlot(d)&&(this.getMeshForSlot(d).visible=!1),Et.clipper.clipEndWithSlot(d);continue}if(v!=null){const w=d.bone.skeleton.color,C=d.color,T=w.a*C.a*g.a;this.lightColor.set(w.r*C.r*g.r,w.g*C.g*g.g,w.b*C.b*g.b,T),d.darkColor!=null?this.darkColor.set(d.darkColor.r,d.darkColor.g,d.darkColor.b,1):this.darkColor.set(0,0,0,1);let S,E,_,I;if(Et.clipper.isClipping())Et.clipper.clipTriangles(this.verticesCache,t,t.length,i,this.lightColor,this.darkColor,f),S=Et.clipper.clippedVertices,E=S.length,_=Et.clipper.clippedTriangles,I=_.length;else{const k=this.verticesCache;for(let B=2,D=0,G=y;Bnew Ki);Wg.yDown=!0;const dd="spineTextureAtlasLoader",W3={extension:Oe.Asset,resolver:{test:n=>un(n,".atlas"),parse:n=>{var t,i;const e=n.split(".");return{resolution:parseFloat(((i=(t=Ve.RETINA_PREFIX)==null?void 0:t.exec(n))==null?void 0:i[1])??"1"),format:e[e.length-2],src:n}}},loader:{name:dd,extension:{type:Oe.LoadParser,priority:Cn.Normal,name:dd},test(n){return un(n,".atlas")},async load(n){const e=await Ve.ADAPTER.fetch(n);if(!e.ok)throw new Error(`[${dd}] Failed to fetch ${n}: ${e.status} ${e.statusText}`);return await e.text()},testParse(n,e){const t=un(e.src,".atlas"),i=typeof n=="string",s=e.loadParser===dd;return Promise.resolve((t||s)&&i)},unload(n){n.dispose()},async parse(n,e,t){var c;const i=e.data||{};let s=hi.dirname(e.src);s&&s.lastIndexOf("/")!==s.length-1&&(s+="/");const r=new nA(n);if(i.images instanceof rt||typeof i.images=="string"){const l=i.images;i.images={},i.images[r.pages[0].name]=l}const o=[];let a=!0;for(const l of t.parsers)if(l.name=="loadTextures"){a=(c=l.config)==null?void 0:c.preferCreateImageBitmap;break}Ts.setPreferences({preferCreateImageBitmap:!1});for(const l of r.pages){const d=l.name,u=i!=null&&i.images?i.images[d]:void 0;if(u instanceof rt)l.setTexture(Yo.from(u));else{const h=u??hi.normalize([...s.split(hi.sep),d].join(hi.sep)),f={src:eu(h,e.src),data:{...i.imageMetadata,alphaMode:l.pma?ki.PMA:ki.UNPACK}},p=t.load(f).then(m=>{l.setTexture(Yo.from(m.baseTexture))});o.push(p)}}return await Promise.all(o),Ts.setPreferences({preferCreateImageBitmap:a}),r}}};He.add(W3);const ud="spineSkeletonLoader";function q3(n){return n.hasOwnProperty("bones")}function K3(n){return n instanceof Uint8Array}const J3={extension:Oe.Asset,loader:{name:ud,extension:{type:Oe.LoadParser,priority:Cn.Normal,name:ud},test(n){return un(n,".skel")},async load(n){const e=await Ve.ADAPTER.fetch(n);if(!e.ok)throw new Error(`[${ud}] Failed to fetch ${n}: ${e.status} ${e.statusText}`);return new Uint8Array(await e.arrayBuffer())},testParse(n,e){const t=un(e.src,".json")&&q3(n),i=un(e.src,".skel")&&K3(n),s=e.loadParser===ud;return Promise.resolve(t||i||s)}}};He.add(J3);class Z3 extends Is{constructor(t=!1){super();A(this,"_buffer");A(this,"_indexBuffer");this._buffer=new Wt(void 0,t,!1),this._indexBuffer=new Wt(void 0,t,!0),this.addAttribute("aVertexPosition",this._buffer,2,!1,je.FLOAT).addAttribute("aTextureCoord",this._buffer,2,!1,je.FLOAT).addAttribute("aColor",this._buffer,4,!0,je.UNSIGNED_BYTE).addAttribute("aDarkColor",this._buffer,4,!0,je.UNSIGNED_BYTE).addAttribute("aTextureId",this._buffer,1,!0,je.FLOAT).addIndex(this._indexBuffer)}}const Q3=` precision highp float; attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; @@ -1239,7 +1239,7 @@ void main(void){ vDarkColor = aDarkColor * tint; } -`,c4=` +`,e4=` varying vec2 vTextureCoord; varying vec4 vColor; varying vec4 vDarkColor; @@ -1254,4 +1254,4 @@ void main(void){ gl_FragColor.a = color.a * vColor.a; gl_FragColor.rgb = ((color.a - 1.0) * vDarkColor.a + 1.0 - color.rgb) * vDarkColor.rgb + color.rgb * vColor.rgb; } -`;class gA extends kr{constructor(e){super(e),this.shaderGenerator=new yw(l4,c4),this.geometryClass=a4,this.vertexSize=7}packInterleavedGeometry(e,t,i,s,r){const{uint32View:o,float32View:a}=t,c=s/this.vertexSize,l=e.uvs,d=e.indices,u=e.vertexData,h=e._texture.baseTexture._batchLocation,f=Math.min(e.worldAlpha,1),p=Rt.shared.setValue(e._tintRGB).toPremultiplied(f,!0),m=Rt.shared.setValue(e._darkTintRGB).premultiply(f,!0).toPremultiplied(1,!1);for(let g=0;g0){let o=function(l){return Promise.all(l.map(d=>Promise.resolve(d).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),c=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));s=o(t.map(l=>{if(l=p4(l),l in Zy)return;Zy[l]=!0;const d=l.endsWith(".css"),u=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const h=document.createElement("link");if(h.rel=d?"stylesheet":f4,d||(h.as="script"),h.crossOrigin="",h.href=l,c&&h.setAttribute("nonce",c),document.head.appendChild(h),d)return new Promise((f,p)=>{h.addEventListener("load",f),h.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}function r(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return s.then(o=>{for(const a of o||[])a.status==="rejected"&&r(a.reason);return e().catch(r)})};async function bA(){const[n,e]=await Promise.all([Qy(()=>import("./index-DxBJZqWf.js"),[]),Qy(()=>import("./index-Cxn3bPhQ.js"),__vite__mapDeps([0,1]))]);return{core:n,pixi:e}}async function m4(n,e,t){const{core:i,pixi:s}=await bA(),r=new i.TextureAtlas(e);return qg(r,t,s.SpineTexture),{skeletonData:new i.SkeletonJson(new i.AtlasAttachmentLoader(r)).readSkeletonData(n),SpineClass:s.Spine}}async function g4(n,e,t){const{core:i,pixi:s}=await bA(),r=new i.TextureAtlas(e);return qg(r,t,s.SpineTexture),{skeletonData:new i.SkeletonBinary(new i.AtlasAttachmentLoader(r)).readSkeletonData(n),SpineClass:s.Spine}}function Br(n,e,t){const i=Number(n[e]);return Number.isFinite(i)?i:t}function dn(n,e,t,i){n[e]==null&&(n[e]=Br(n,t,i))}function Kg(n,e,t){if(typeof n.curve!="number")return;const i=Br(n,"time",0),r=Br(e,"time",0)-i,o=n.curve,a=Br(n,"c2",0),c=Br(n,"c3",1),l=Br(n,"c4",1);n.curve=t.flatMap(([d,u])=>[i+r*o,d+(u-d)*a,i+r*c,d+(u-d)*l]),delete n.c2,delete n.c3,delete n.c4}function Hr(n,e){if(Array.isArray(n))for(let t=0;t[Br(i,r,o),Br(s,r,o)]))}}function v4(n){if(Array.isArray(n))for(let e=0;eNumber.parseInt(i.slice(r,r+2),16)/255);return e?s:s.slice(0,3)}function ex(n,e){if(Array.isArray(n))for(let t=0;t[a,o[c]]))}}function b4(n){for(const e of n.bones||[])e.inherit==null&&e.transform!=null&&(e.inherit=e.transform);for(const e of n.transform||[])dn(e,"mixRotate","rotateMix",1),dn(e,"mixX","translateMix",1),e.mixY==null&&(e.mixY=e.mixX),dn(e,"mixScaleX","scaleMix",1),e.mixScaleY==null&&(e.mixScaleY=e.mixScaleX),dn(e,"mixShearY","shearMix",1);for(const e of n.path||[])dn(e,"mixRotate","rotateMix",1),dn(e,"mixX","translateMix",1),e.mixY==null&&(e.mixY=e.mixX)}function y4(n){for(const e of n.skins||[])for(const t of Object.values(e.attachments||{}))for(const i of Object.values(t||{}))i.parent!=null&&i.timelines==null&&i.deform!=null&&(i.timelines=i.deform)}function x4(n){for(const e of Object.values(n.slots||{}))e.color&&!e.rgba&&(e.rgba=e.color,delete e.color),e.twoColor&&!e.rgba2&&(e.rgba2=e.twoColor,delete e.twoColor),ex(e.rgba,!1),ex(e.rgba2,!0)}function w4(n){for(const e of Object.values(n.bones||{})){for(const t of e.rotate||[])dn(t,"value","angle",0);Hr(e.rotate,[{key:"value",fallback:0}]),Hr(e.translate,[{key:"x",fallback:0},{key:"y",fallback:0}]),Hr(e.scale,[{key:"x",fallback:1},{key:"y",fallback:1}]),Hr(e.shear,[{key:"x",fallback:0},{key:"y",fallback:0}])}}function S4(n){for(const e of Object.values(n.ik||{}))Hr(e,[{key:"mix",fallback:1},{key:"softness",fallback:0}])}function C4(n){for(const e of Object.values(n.transform||{})){for(const t of e)dn(t,"mixRotate","rotateMix",1),dn(t,"mixX","translateMix",1),t.mixY==null&&(t.mixY=t.mixX),dn(t,"mixScaleX","scaleMix",1),t.mixScaleY==null&&(t.mixScaleY=t.mixScaleX),dn(t,"mixShearY","shearMix",1);Hr(e,[{key:"mixRotate",fallback:1},{key:"mixX",fallback:1},{key:"mixY",fallback:1},{key:"mixScaleX",fallback:1},{key:"mixScaleY",fallback:1},{key:"mixShearY",fallback:1}])}}function A4(n){for(const e of Object.values(n.path||{})){for(const i of["position","spacing"]){const s=e[i];for(const r of s||[])dn(r,"value",i,0);Hr(s,[{key:"value",fallback:0}])}const t=e.mix;for(const i of t||[])dn(i,"mixRotate","rotateMix",1),dn(i,"mixX","translateMix",1),i.mixY==null&&(i.mixY=i.mixX);Hr(t,[{key:"mixRotate",fallback:1},{key:"mixX",fallback:1},{key:"mixY",fallback:1}])}}function T4(n){if(!n.deform)return;const e=n.attachments||(n.attachments={});for(const[t,i]of Object.entries(n.deform)){const s=e[t]||(e[t]={});for(const[r,o]of Object.entries(i)){const a=s[r]||(s[r]={});for(const[c,l]of Object.entries(o)){const d=a[c]||(a[c]={});d.deform=l,v4(l)}}}delete n.deform}function yA(n){b4(n),y4(n);for(const e of Object.values(n.animations||{}))x4(e),w4(e),S4(e),C4(e),A4(e),T4(e),!e.drawOrder&&e.draworder&&(e.drawOrder=e.draworder);return n}function E4(n){return n.replace(/\\/g,"/").split("/").pop()||n}async function _4(n){const e=await Promise.all(n.map(async t=>{const i=URL.createObjectURL(t);try{return[E4(t.name).toLowerCase(),await it.fromURL(i)]}finally{URL.revokeObjectURL(i)}}));return new Map(e)}function M4(n){const e=new Map;return n.bones.map(t=>{var r;const i=((r=t.parent)==null?void 0:r.name)||null,s=i?(e.get(i)||0)+1:0;return e.set(t.name,s),{name:t.name,parent:i,depth:s}})}function P4(n){return n.slots.map(e=>{var t;return{name:e.name,order:Number(e.index)||0,bone:((t=e.boneData)==null?void 0:t.name)||"",attachment:e.attachmentName||""}})}async function xA(n,e,t){var o;if(!/\.(json|skel)$/i.test(n.name))throw new Error(Ye("errors.spineFileType"));if(!/\.atlas$/i.test(e.name))throw new Error(Ye("errors.atlasFileType"));if(!t.length)throw new Error(Ye("errors.chooseTexture"));const i=await e.text(),s=await _4(t),r=[...s.values()];try{let a,c,l=null,d;if(/\.skel$/i.test(n.name)){const u=await n.arrayBuffer();try{({skeletonData:a,SpineClass:c}=await g4(u,i,s)),d="4.3"}catch(h){try{({skeletonData:a,SpineClass:c}=h4(u,i,s)),d="4.2"}catch(f){const p=h instanceof Error?h.message:String(h),m=f instanceof Error?f.message:String(f);throw new Error(Ye("errors.binaryParseFailed",{v43:p,v42:m}))}}l=lu(a.version)}else{let u;try{u=JSON.parse(await n.text())}catch{throw new Error(Ye("errors.invalidSpineJson"))}if(l=lu((o=u==null?void 0:u.skeleton)==null?void 0:o.spine),!l)throw new Error(Ye("errors.unsupportedSpineJsonVersion",{versions:ym()}));d=hF(l),l==="3.8"&&yA(u);const h=d==="4.3"?await m4(u,i,s):u4(u,i,s);a=h.skeletonData,c=h.SpineClass}if(!l)throw new Error(Ye("errors.unsupportedSpineDataVersion",{versions:ym()}));return{skeletonData:a,textures:r,runtimeVersion:d,SpineClass:c,dataVersion:l,animations:a.animations.map(u=>({name:u.name,duration:u.duration})),bones:M4(a),slots:P4(a)}}catch(a){for(const c of r)c.destroy(!0);throw a}}function Id(n){return new Promise((e,t)=>{const i=new FileReader;i.onload=()=>e(String(i.result||"")),i.onerror=()=>t(i.error),i.readAsDataURL(n)})}async function I4(n,e,t){return{skeleton:{name:n.name,dataUrl:await Id(n)},atlas:{name:e.name,dataUrl:await Id(e)},textures:await Promise.all(t.map(async i=>({name:i.name,dataUrl:await Id(i)})))}}async function gp(n){const e=await fetch(n.dataUrl);if(!e.ok)throw new Error(Ye("errors.embeddedReadFailed",{name:n.name}));return new File([await e.blob()],n.name)}async function k4(n){return{skeleton:await gp(n.skeleton),atlas:await gp(n.atlas),textures:await Promise.all(n.textures.map(gp))}}const wA="SpineParticle.EditorConfig",SA=1;function CA(n){return{backgroundX:n.backgroundX,backgroundY:n.backgroundY,backgroundOpacity:n.backgroundOpacity,backgroundImageName:n.backgroundImageName,backgroundImageData:n.backgroundImageData,showGrid:n.showGrid,exportSettings:Zt(n.exportSettings)}}function R4(n){return JSON.parse(JSON.stringify(n,(e,t)=>{if(!(e==="texture"||e==="trailTexture"||e==="frames"))return t}))}function AA(n){const e=Zt(n);return delete e.tags,delete e.selectedTag,e}function F4(n){const e=CA(n.settings),t=n.timeline.playbackEnd>=Math.max(1,n.timeline.totalFrames-1);return R4({format:wA,version:SA,savedAt:new Date().toISOString(),editor:Zt(n.editor),settings:e,timeline:{fps:n.timeline.fps,loop:n.timeline.loop,playbackStart:n.timeline.playbackStart,playbackEnd:n.timeline.playbackEnd,playbackEndAuto:t,abLoop:n.timeline.abLoop,animations:[...n.timeline.animations]},selection:{type:n.activeObjectType,id:n.activeObjectId},scene:{systems:n.systems.map(i=>({...Zt(i),frames:void 0})),colliders:n.colliders.map(AA),paths:Zt(n.paths),spines:Zt(n.spines)}})}function L4(n,e,t,i){const s=Math.max(1,i);let r=0;for(const o of n){const a=o.config,c=Math.max(0,Number(a.lifeMin)||0),l=Math.max(0,Number(a.lifeMax)||0),d=a.lifeMode==="fixed"?c:Math.max(c,l),u=a.mode==="stream"?a.streamBehavior==="loop"?Wn(a,s).total/s:Math.max(1/s,Number(a.duration)||0):0;let h=Math.max(0,Number(a.delay)||0)+u+d;a.mode==="stream"&&a.streamBehavior==="loop"&&(h=Math.max(0,Number(a.delay)||0)+Wn(a,s).total/s),r=Math.max(r,h)}for(const o of t){const a=o.animations.find(c=>c.name===o.selectedAnimation);a&&(r=Math.max(r,Math.max(0,Number(o.timeOffset)||0)+Math.max(0,a.duration||0)))}for(const o of e)o.followPath&&o.followPathId&&(r=Math.max(r,Math.max(0,o.followDuration)||0));return RS(r,s)}function D4(){return`SpineParticle-${new Date().toISOString().replace(/[-:]/g,"").replace(/\.\d{3}Z$/,"").replace("T","-")}.json`}function TA(n){const e=F4(n),t=new Blob([JSON.stringify(e,null,2)],{type:"application/json;charset=utf-8"}),i=URL.createObjectURL(t),s=document.createElement("a");return s.href=i,s.download=D4(),document.body.appendChild(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(i),0),e}function EA(n){let e;try{e=JSON.parse(n)}catch{throw new Error(Ye("errors.invalidJson"))}const t=e;if(t.format!==wA)throw new Error(Ye("errors.invalidConfigFormat"));if(t.version!==SA)throw new Error(Ye("errors.unsupportedConfigVersion",{version:t.version??Ye("export.unknown")}));if(!t.scene||!Array.isArray(t.scene.systems)||!Array.isArray(t.scene.colliders)||!Array.isArray(t.scene.paths)||!Array.isArray(t.scene.spines))throw new Error(Ye("errors.missingScene"));return t}async function O4(n){const e=new Map,t=s=>{const r=s==="/particles/star.png"?"/images/star.png":s==="/trails/trail.png"?"/images/trail.png":s||"/images/star.png";let o=e.get(r);return o||(o=it.fromURL(r).then(a=>Ur(a)),e.set(r,o)),o},i=await t("/images/star.png");await Promise.all(n.map(async s=>{var o;const r=lr(s.config);r.texture=i,await Promise.all(r.imageResources.map(async a=>{a.texture=await t(a.previewUrl||"/images/star.png"),await Promise.all(a.sequenceFrames.map(async c=>{c.texture=await t(c.previewUrl||a.previewUrl||"/images/star.png")}))})),await Promise.all(r.trailResources.map(async a=>{a.texture=await t(a.previewUrl||"/images/trail.png")})),r.trailTexture=((o=r.trailResources[0])==null?void 0:o.texture)||null,s.frames=[]}))}async function N4(n){const e=new Map;try{for(const t of n){if(!t.sourceBundle)continue;const i=await k4(t.sourceBundle);e.set(t.id,await xA(i.skeleton,i.atlas,i.textures))}return e}catch(t){for(const i of e.values())for(const s of i.textures)s.destroy(!0);throw t}}function $4(n,e){const t=(e==null?void 0:e.type)||"particle",i=Number(e==null?void 0:e.id)||0;(t==="particle"?n.systems.some(r=>r.id===i):t==="collision"?n.colliders.some(r=>r.id===i):t==="path"?n.paths.some(r=>r.id===i):n.spines.some(r=>r.id===i))?n.selectSceneObject(t,i):n.systems[0]?n.selectSceneObject("particle",n.systems[0].id):n.colliders[0]?n.selectSceneObject("collision",n.colliders[0].id):n.paths[0]?n.selectSceneObject("path",n.paths[0].id):n.spines[0]?n.selectSceneObject("spine",n.spines[0].id):(n.activeObjectType="particle",n.activeObjectId=0,n.activeId=0)}async function B4(n,e){var h,f,p,m,g,v,y,b,x;const t=EA(JSON.stringify(e)),i=Zt(t.scene.systems),s=t.scene.colliders.map(AA),r=Zt(t.scene.paths),o=Zt(t.scene.spines);for(const C of o)C.sourceBundle==null&&(C.sourceBundle=null),C.dataVersion==null&&(C.dataVersion=""),Array.isArray(C.slots)||(C.slots=[]),typeof C.selectedBone!="string"&&(C.selectedBone=""),typeof C.selectedSlot!="string"&&(C.selectedSlot="");await O4(i);const a=await N4(o),c=new Map(n.spines.map(C=>[C.id,C.assetVersion]));for(const C of n.spines)bc(C.id);n.systems=i,n.colliders=s,n.paths=r,n.spines=o,Object.assign(n.editor,Zt(t.editor||{}));const l=t.settings;if(l)for(const C of["backgroundX","backgroundY","backgroundOpacity","backgroundImageName","backgroundImageData","showGrid"])Object.prototype.hasOwnProperty.call(l,C)&&(n.settings[C]=l[C]);n.settings.exportSettings=MS((h=t.settings)==null?void 0:h.exportSettings),n.settings.undoLimit=Math.min(200,Math.max(1,Math.round(Number(n.settings.undoLimit)||20))),n.timeline.fps=Math.max(1,Math.round(Number((f=t.timeline)==null?void 0:f.fps)||30));const d=Math.max(1,Math.floor(Number((p=t.timeline)==null?void 0:p.playbackEnd)||Number.MAX_SAFE_INTEGER)),u=((m=t.timeline)==null?void 0:m.playbackEndAuto)??d>=L4(i,s,o,n.timeline.fps);n.timeline.abLoop=((g=t.timeline)==null?void 0:g.abLoop)===!0,n.timeline.loop=((v=t.timeline)==null?void 0:v.loop)!==!1,n.timeline.animations=Array.isArray((y=t.timeline)==null?void 0:y.animations)&&t.timeline.animations.length?[...new Set(t.timeline.animations.filter(C=>typeof C=="string"&&C.trim()).map(C=>C.trim()))]:["animation"];for(const C of n.spines){const T=a.get(C.id);if(C.assetVersion=Math.max(Number(C.assetVersion)||0,c.get(C.id)||0)+1,!T){C.status="empty",C.error=C.skeletonFileName?Ye("errors.missingEmbeddedSpine"):"",C.animations=[],C.bones=[],C.slots=[],C.selectedAnimation="";continue}ch(C.id,T),C.dataVersion=T.dataVersion,C.animations=T.animations,C.bones=T.bones,C.slots=T.slots,T.animations.some(S=>S.name===C.selectedAnimation)||(C.selectedAnimation=((b=T.animations[0])==null?void 0:b.name)||""),C.status="ready",C.error=""}n.syncSceneSequences(),$4(n,t.selection),n.timeline.playbackStart=Math.max(0,Math.floor(Number((x=t.timeline)==null?void 0:x.playbackStart)||0)),n.timeline.playbackEnd=d,n.timeline.frame=0,n.timeline.recorded=!1,n.timeline.playing=!0;for(const C of n.systems)n.timeline.animations.includes(C.animation)||(C.animation=n.timeline.animations[0]);return n.recalcTotalFrames(),u&&(n.timeline.playbackEnd=n.timeline.totalFrames-1),n.timeline.frame=n.timeline.playbackStart,t}async function _A(n,e){return B4(n,EA(e))}async function U4(n,e){if(!/\.json$/i.test(e.name))throw new Error(Ye("errors.chooseJsonConfig"));return _A(n,await e.text())}const ph=zo({undoCount:0});let xu=null,tr=null,Wr=[],ml=null,ir=null,wu=!1;function Jg(n){return{systems:n.systems.map(t=>{const i=Zt(t);return i.frames=void 0,i}),colliders:Zt(n.colliders),paths:Zt(n.paths),spines:Zt(n.spines),animations:[...n.timeline.animations],settings:CA(n.settings)}}function Zg(n){return JSON.stringify(n,(e,t)=>e==="texture"||e==="trailTexture"?null:typeof t=="string"&&t.startsWith("data:")&&t.length>256?`${t.length}:${t.slice(0,96)}:${t.slice(-48)}`:t)}function MA(n,e=Jg(n),t=Zg(e)){const i=new Map;for(const s of e.spines){const r=dF(s.id);r&&i.set(s.id,r)}return{data:e,signature:t,spineAssets:i}}function Su(n){if(n){for(const e of n.spineAssets.values())lF(e);n.spineAssets.clear()}}function PA(n){for(;Wr.length>n;)Su(Wr.shift()||null);ph.undoCount=Wr.length}function IA(){const n=xu;if(!n||!tr||wu)return;const e=Jg(n),t=Zg(e);t!==tr.signature&&(Wr.push(tr),tr=MA(n,e,t),PA(n.settings.undoLimit))}function V4(){wu||(ir&&clearTimeout(ir),ir=setTimeout(()=>{ir=null,IA()},250))}function X4(n){const e=n.activeObjectId;return n.activeObjectType==="particle"?n.systems.some(t=>t.id===e):n.activeObjectType==="collision"?n.colliders.some(t=>t.id===e):n.activeObjectType==="path"?n.paths.some(t=>t.id===e):n.spines.some(t=>t.id===e)}function Y4(n){var t,i;if(!X4(n)){const s=n.systems[0],r=n.colliders[0],o=n.paths[0],a=n.spines[0];s?(n.activeObjectType="particle",n.activeObjectId=s.id):r?(n.activeObjectType="collision",n.activeObjectId=r.id):o?(n.activeObjectType="path",n.activeObjectId=o.id):(n.activeObjectType="spine",n.activeObjectId=(a==null?void 0:a.id)||0)}const e=n.activeObjectType==="particle"?n.systems.find(s=>s.id===n.activeObjectId):n.systems.find(s=>s.id===n.activeId);n.activeId=(e==null?void 0:e.id)||((t=n.systems[0])==null?void 0:t.id)||0,n.timeline.animation=(e==null?void 0:e.animation)||((i=n.systems[0])==null?void 0:i.animation)||n.timeline.animations[0]||"animation"}function z4(n,e){const t=tr;wu=!0;try{for(const i of n.spines)bc(i.id);n.systems=Zt(e.data.systems),n.colliders=Zt(e.data.colliders),n.paths=Zt(e.data.paths),n.spines=Zt(e.data.spines),n.timeline.animations=[...e.data.animations],Object.assign(n.settings,Zt(e.data.settings));for(const[i,s]of e.spineAssets)ch(i,s);for(const i of n.systems)i.frames=[];n.timeline.recorded=!1,n.timeline.playing=!1,Y4(n),n.recalcTotalFrames(),tr=e}finally{wu=!1,Su(t)}}function j4(n){if(!(xu===n&&ml)){ml==null||ml(),ir&&clearTimeout(ir),Su(tr);for(const e of Wr)Su(e);Wr=[],xu=n,tr=MA(n),ph.undoCount=0,ml=ei(()=>Zg(Jg(n)),V4,{flush:"post"})}}function H4(n,e){const t=Math.min(200,Math.max(1,Math.round(Number(e)||20)));n.settings.undoLimit=t,PA(t)}function kA(){const n=xu;if(!n||!tr)return!1;ir&&(clearTimeout(ir),ir=null),IA();const e=Wr.pop();return e?(z4(n,e),ph.undoCount=Wr.length,!0):!1}function G4(n){const e=n instanceof HTMLElement?n:null;return!!(e!=null&&e.closest('input, textarea, select, [contenteditable="true"]'))}function W4(n){function e(i){var r;const s=i.target instanceof Node?i.target:null;n.canvasFocused.value=!!s&&!!((r=n.canvasElement.value)!=null&&r.contains(s))}function t(i){const s=i.key.toLowerCase();if((i.ctrlKey||i.metaKey)&&!i.altKey&&s==="s"){i.preventDefault(),i.stopPropagation(),n.save();return}if((i.ctrlKey||i.metaKey)&&!i.altKey&&s==="z"){i.preventDefault(),i.stopPropagation(),n.undo();return}if(i.ctrlKey||i.metaKey||i.altKey||G4(i.target))return;if(s==="d"){i.preventDefault(),n.togglePlay();return}if(s==="s"){i.preventDefault(),n.toStart();return}if(!n.canvasFocused.value)return;const r={q:"",w:"translate",e:"rotate",r:"scale"};s in r&&(i.preventDefault(),n.setTool(r[s]))}Sn(()=>{document.addEventListener("pointerdown",e,!0),window.addEventListener("keydown",t,!0)}),Za(()=>{document.removeEventListener("pointerdown",e,!0),window.removeEventListener("keydown",t,!0)})}const q4={class:"help-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"help-title"},K4={class:"help-head"},J4={id:"help-title"},Z4=["aria-label","title"],Q4={class:"help-body"},eU={class:"help-section help-start"},tU={class:"help-note"},iU={class:"help-grid"},nU={class:"help-section"},sU={class:"help-list"},rU={class:"help-section"},oU={class:"shortcut-list"},aU={class:"help-note"},lU={class:"help-doc-title"},cU=["aria-expanded"],dU={class:"mtitle"},uU={class:"caret"},hU={class:"help-module-body"},fU={class:"help-list"},pU=["aria-expanded"],mU={class:"mtitle"},gU={class:"caret"},vU={class:"help-module-body"},bU={class:"help-list"},yU=["aria-expanded"],xU={class:"mtitle"},wU={class:"caret"},SU={class:"help-module-body"},CU={class:"help-list"},AU=["aria-expanded"],TU={class:"mtitle"},EU={class:"caret"},_U={class:"help-module-body"},MU={class:"help-list"},PU=["aria-expanded"],IU={class:"mtitle"},kU={class:"caret"},RU={class:"help-module-body"},FU={class:"help-list"},LU=["aria-expanded"],DU={class:"mtitle"},OU={class:"caret"},NU={class:"help-module-body"},$U={class:"help-list"},BU=["aria-expanded"],UU={class:"mtitle"},VU={class:"caret"},XU={class:"help-module-body"},YU={class:"help-list"},zU=["aria-expanded"],jU={class:"mtitle"},HU={class:"caret"},GU={class:"help-module-body"},WU={class:"help-list"},qU=["aria-expanded"],KU={class:"mtitle"},JU={class:"caret"},ZU={class:"help-module-body"},QU={class:"connector-intro"},e5={class:"help-list"},t5={class:"help-section help-export"},i5=qt({__name:"HelpDialog",props:{show:{type:Boolean}},emits:["close"],setup(n,{emit:e}){const t=e,i=$e(Array.from({length:9},()=>!1));function s(){t("close")}function r(o){o.key==="Escape"&&s()}return Sn(()=>window.addEventListener("keydown",r)),eo(()=>window.removeEventListener("keydown",r)),(o,a)=>n.show?(Q(),te("div",{key:0,class:"help-overlay",role:"presentation",onClick:tt(s,["self"])},[w("section",q4,[w("header",K4,[w("div",null,[w("h2",J4,R(o.$t("help.title")),1),w("p",null,R(o.$t("help.subtitle")),1)]),w("button",{class:"help-close","aria-label":o.$t("help.close"),title:o.$t("help.closeShort"),onClick:s},"✕",8,Z4)]),w("div",Q4,[w("section",eU,[w("h3",null,R(o.$t("help.quickStart")),1),w("ol",null,[w("li",null,R(o.$t("help.stepCreate")),1),w("li",null,R(o.$t("help.stepEdit")),1),w("li",null,R(o.$t("help.stepPreview")),1),w("li",null,R(o.$t("help.stepExport")),1)]),w("p",tU,R(o.$t("help.quickNote")),1)]),w("div",iU,[w("section",nU,[w("h3",null,R(o.$t("help.commonOps")),1),w("dl",sU,[w("div",null,[w("dt",null,R(o.$t("help.eye")),1),w("dd",null,R(o.$t("help.eyeDesc")),1)]),w("div",null,[a[9]||(a[9]=w("dt",null,"+Copy",-1)),w("dd",null,R(o.$t("help.copyDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("toolbar.background")),1),w("dd",null,R(o.$t("help.backgroundDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("toolbar.settings")),1),w("dd",null,R(o.$t("help.settingsDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.undoShortcut")),1),w("dd",null,R(o.$t("help.undoDesc")),1)]),w("div",null,[a[10]||(a[10]=w("dt",null,"Spine Bone",-1)),w("dd",null,R(o.$t("help.spineBoneDesc")),1)])])]),w("section",rU,[w("h3",null,R(o.$t("help.shortcuts")),1),w("div",oU,[w("div",null,[a[11]||(a[11]=w("kbd",null,"Ctrl/⌘",-1)),a[12]||(a[12]=w("span",null,"+",-1)),a[13]||(a[13]=w("kbd",null,"Z",-1)),w("em",null,R(o.$t("help.undoShortcut")),1)]),w("div",null,[a[14]||(a[14]=w("kbd",null,"Ctrl/⌘",-1)),a[15]||(a[15]=w("span",null,"+",-1)),a[16]||(a[16]=w("kbd",null,"S",-1)),w("em",null,R(o.$t("help.saveShortcut")),1)]),w("div",null,[a[17]||(a[17]=w("kbd",null,"Q",-1)),w("em",null,R(o.$t("help.panShortcut")),1)]),w("div",null,[a[18]||(a[18]=w("kbd",null,"W",-1)),w("em",null,R(o.$t("help.translateShortcut")),1)]),w("div",null,[a[19]||(a[19]=w("kbd",null,"E",-1)),w("em",null,R(o.$t("help.rotateShortcut")),1)]),w("div",null,[a[20]||(a[20]=w("kbd",null,"R",-1)),w("em",null,R(o.$t("help.scaleShortcut")),1)]),w("div",null,[a[21]||(a[21]=w("kbd",null,"D",-1)),w("em",null,R(o.$t("help.playShortcut")),1)]),w("div",null,[a[22]||(a[22]=w("kbd",null,"S",-1)),w("em",null,R(o.$t("help.startShortcut")),1)])]),w("p",aU,R(o.$t("help.shortcutNote")),1)])]),w("div",lU,R(o.$t("help.modules")),1),w("section",{class:Ie(["help-section help-module",{open:i.value[0]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[0]?"true":"false",onClick:a[0]||(a[0]=c=>i.value[0]=!i.value[0])},[a[23]||(a[23]=w("span",{class:"mnum"},"1",-1)),w("span",dU,R(o.$t("help.configTitle")),1),w("span",uU,R(i.value[0]?"▾":"▸"),1)],8,cU),me(w("div",hU,[w("dl",fU,[w("div",null,[w("dt",null,R(o.$t("config.save")),1),w("dd",null,R(o.$t("help.saveConfigDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("config.load")),1),w("dd",null,R(o.$t("help.loadConfigDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("config.selectPreset")),1),w("dd",null,R(o.$t("help.presetDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.configScope")),1),w("dd",null,R(o.$t("help.configScopeDesc")),1)])])],512),[[Fi,i.value[0]]])],2),w("section",{class:Ie(["help-section help-module",{open:i.value[1]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[1]?"true":"false",onClick:a[1]||(a[1]=c=>i.value[1]=!i.value[1])},[a[24]||(a[24]=w("span",{class:"mnum"},"2",-1)),w("span",mU,R(o.$t("help.sceneTitle")),1),w("span",gU,R(i.value[1]?"▾":"▸"),1)],8,pU),me(w("div",vU,[w("dl",bU,[w("div",null,[w("dt",null,R(o.$t("scene.particle")),1),w("dd",null,R(o.$t("help.particleDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("scene.collision")),1),w("dd",null,R(o.$t("help.colliderDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("scene.path")),1),w("dd",null,R(o.$t("help.pathDesc")),1)]),w("div",null,[a[25]||(a[25]=w("dt",null,"Spine",-1)),w("dd",null,R(o.$t("help.spineDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.commonOps")),1),w("dd",null,R(o.$t("help.sceneCommonDesc")),1)])])],512),[[Fi,i.value[1]]])],2),w("section",{class:Ie(["help-section help-module",{open:i.value[2]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[2]?"true":"false",onClick:a[2]||(a[2]=c=>i.value[2]=!i.value[2])},[a[26]||(a[26]=w("span",{class:"mnum"},"3",-1)),w("span",xU,R(o.$t("emission.title")),1),w("span",wU,R(i.value[2]?"▾":"▸"),1)],8,yU),me(w("div",SU,[w("dl",CU,[w("div",null,[w("dt",null,R(o.$t("emission.stream")),1),w("dd",null,R(o.$t("help.emissionDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("emission.burst")),1),w("dd",null,R(o.$t("help.burstDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("emission.delay")),1),w("dd",null,R(o.$t("help.delayDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("modifiers.showShape")),1),w("dd",null,R(o.$t("help.loopNote")),1)])])],512),[[Fi,i.value[2]]])],2),w("section",{class:Ie(["help-section help-module",{open:i.value[3]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[3]?"true":"false",onClick:a[3]||(a[3]=c=>i.value[3]=!i.value[3])},[a[27]||(a[27]=w("span",{class:"mnum"},"4",-1)),w("span",TU,R(o.$t("emission.shapeTitle")),1),w("span",EU,R(i.value[3]?"▾":"▸"),1)],8,AU),me(w("div",_U,[w("dl",MU,[w("div",null,[w("dt",null,R(o.$t("emission.shape")),1),w("dd",null,R(o.$t("help.shapeDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("emission.emissionAngle")),1),w("dd",null,R(o.$t("help.angleDesc")),1)])])],512),[[Fi,i.value[3]]])],2),w("section",{class:Ie(["help-section help-module",{open:i.value[4]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[4]?"true":"false",onClick:a[4]||(a[4]=c=>i.value[4]=!i.value[4])},[a[28]||(a[28]=w("span",{class:"mnum"},"5",-1)),w("span",IU,R(o.$t("attributes.title")),1),w("span",kU,R(i.value[4]?"▾":"▸"),1)],8,PU),me(w("div",RU,[w("dl",FU,[w("div",null,[w("dt",null,R(o.$t("attributes.initialParams")),1),w("dd",null,R(o.$t("help.initialDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("attributes.lifecycleTitle")),1),w("dd",null,R(o.$t("help.overLifeDesc")),1)])])],512),[[Fi,i.value[4]]])],2),w("section",{class:Ie(["help-section help-module",{open:i.value[5]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[5]?"true":"false",onClick:a[5]||(a[5]=c=>i.value[5]=!i.value[5])},[a[29]||(a[29]=w("span",{class:"mnum"},"6",-1)),w("span",DU,R(o.$t("appearance.title")),1),w("span",OU,R(i.value[5]?"▾":"▸"),1)],8,LU),me(w("div",NU,[w("dl",$U,[w("div",null,[w("dt",null,R(o.$t("appearance.opacity")),1),w("dd",null,R(o.$t("help.alphaDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("appearance.imageResources")),1),w("dd",null,R(o.$t("help.imageDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("image.sequence")),1),w("dd",null,R(o.$t("help.sequenceDesc")),1)])])],512),[[Fi,i.value[5]]])],2),w("section",{class:Ie(["help-section help-module",{open:i.value[6]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[6]?"true":"false",onClick:a[6]||(a[6]=c=>i.value[6]=!i.value[6])},[a[30]||(a[30]=w("span",{class:"mnum"},"7",-1)),w("span",UU,R(o.$t("modifiers.title")),1),w("span",VU,R(i.value[6]?"▾":"▸"),1)],8,BU),me(w("div",XU,[w("dl",YU,[w("div",null,[w("dt",null,R(o.$t("modifiers.enableNoise")),1),w("dd",null,R(o.$t("help.noiseDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("modifiers.enableGravity"))+" / "+R(o.$t("modifiers.enableWind")),1),w("dd",null,R(o.$t("help.gravityDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("modifiers.enableForceField"))+" / "+R(o.$t("modifiers.enableVortex"))+" / "+R(o.$t("modifiers.enableAttraction")),1),w("dd",null,R(o.$t("help.forceDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("modifiers.enableTrail")),1),w("dd",null,R(o.$t("help.trailDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("modifiers.enableFollow")),1),w("dd",null,R(o.$t("help.followDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("modifiers.enableCollision"))+" / "+R(o.$t("modifiers.damping")),1),w("dd",null,R(o.$t("help.collisionDesc")),1)])])],512),[[Fi,i.value[6]]])],2),w("section",{class:Ie(["help-section help-module",{open:i.value[7]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[7]?"true":"false",onClick:a[7]||(a[7]=c=>i.value[7]=!i.value[7])},[a[31]||(a[31]=w("span",{class:"mnum"},"8",-1)),w("span",jU,R(o.$t("export.title")),1),w("span",HU,R(i.value[7]?"▾":"▸"),1)],8,zU),me(w("div",GU,[w("dl",WU,[w("div",null,[w("dt",null,R(o.$t("export.imagesPath")),1),w("dd",null,R(o.$t("help.exportDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("export.spineVersion")),1),a[32]||(a[32]=w("dd",null,"3.8 / 4.0 / 4.1 / 4.2 / 4.3",-1))]),w("div",null,[w("dt",null,R(o.$t("export.keyframeCurve")),1),w("dd",null,R(o.$t("export.bezierHelp")),1)]),w("div",null,[w("dt",null,R(o.$t("export.fps")),1),w("dd",null,R(o.$t("export.fpsHelp")),1)]),w("div",null,[w("dt",null,R(o.$t("export.title")),1),w("dd",null,R(o.$t("help.exportButtonsDesc")),1)])])],512),[[Fi,i.value[7]]])],2),w("section",{class:Ie(["help-section help-module help-connector",{open:i.value[8]}])},[w("button",{type:"button",class:"help-module-head","aria-expanded":i.value[8]?"true":"false",onClick:a[8]||(a[8]=c=>i.value[8]=!i.value[8])},[a[33]||(a[33]=w("span",{class:"mnum"},"9",-1)),w("span",KU,R(o.$t("help.connectorTitle")),1),w("span",JU,R(i.value[8]?"▾":"▸"),1)],8,qU),me(w("div",ZU,[w("p",QU,R(o.$t("help.connectorIntro")),1),w("dl",e5,[w("div",null,[w("dt",null,R(o.$t("help.prerequisite")),1),w("dd",null,R(o.$t("help.prerequisiteDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.download")),1),a[34]||(a[34]=w("dd",null,[w("a",{class:"dl-link",href:"/downloads/connector/SpineParticleConnector-windows-x64.exe",download:""},[bt("Windows"),w("br"),w("small",null,"SpineParticleConnector-windows-x64.exe")]),w("a",{class:"dl-link",href:"/downloads/connector/SpineParticleConnector-macos-universal.zip",download:""},[bt("macOS (Universal)"),w("br"),w("small",null,"SpineParticleConnector-macos-universal.zip")])],-1))]),w("div",null,[w("dt",null,R(o.$t("help.webSide")),1),w("dd",null,R(o.$t("help.webSideDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.authorization")),1),w("dd",null,R(o.$t("help.authorizationDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.pathSetup")),1),w("dd",null,R(o.$t("help.pathSetupDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.downloadResult")),1),w("dd",null,R(o.$t("help.downloadResultDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.version")),1),w("dd",null,R(o.$t("help.versionDesc")),1)]),w("div",null,[w("dt",null,R(o.$t("help.security")),1),w("dd",null,R(o.$t("help.securityDesc")),1)])])],512),[[Fi,i.value[8]]])],2),w("section",t5,[w("h3",null,R(o.$t("help.differenceTitle")),1),w("p",null,R(o.$t("help.differenceDesc")),1)])])])])):Ce("",!0)}}),li=(n,e)=>{const t=n.__vccOpts||n;for(const[i,s]of e)t[i]=s;return t},n5=li(i5,[["__scopeId","data-v-4bb9bc76"]]);function Na(n){const e=()=>{window.removeEventListener("pointermove",n),window.removeEventListener("pointerup",e),window.removeEventListener("pointercancel",e)};window.addEventListener("pointermove",n),window.addEventListener("pointerup",e),window.addEventListener("pointercancel",e)}function In(n,e,t){const i=n.holder.value,s=n.app(),r=i.getBoundingClientRect(),o=Math.max(1e-4,n.store.editor.viewScale),a=e-r.left,c=t-r.top;return{x:(a-s.screen.width/2-n.store.editor.viewX)/o,y:-(c-s.screen.height*.5-n.store.editor.viewY)/o}}function s5(n,e){const t=n.holder.value,i=n.app(),s=n.store,r=t.getBoundingClientRect(),o=e.clientX-r.left,a=e.clientY-r.top,c=e.deltaY<0?1.12:1/1.12,l=s.editor.viewScale,d=Math.max(.01,l*c),u=i.screen.width/2,h=i.screen.height*.5,f=s.editor.viewX,p=s.editor.viewY,m=(o-u-f)/l,g=(a-h-p)/l;s.editor.viewX=o-u-m*d,s.editor.viewY=a-h-g*d,s.editor.viewScale=d}function r5(n,e,t){const i=n.store,s=i.editor.viewX,r=i.editor.viewY;Na(o=>{i.editor.viewX=s+(o.clientX-e),i.editor.viewY=r+(o.clientY-t)})}function RA(n,e){const t=Math.max(.01,n.store.editor.viewScale*e);n.store.editor.viewScale=t}function o5(n){RA(n,1.2)}function a5(n){RA(n,1/1.2)}function l5(n){n.store.editor.viewScale=1,n.store.editor.viewX=0,n.store.editor.viewY=0}function c5(n){n.store.editor.viewScale=1,n.store.editor.viewX=0,n.store.editor.viewY=0}function d5(n){n.store.settings.showGrid=!n.store.settings.showGrid}const u5={class:"topbar"},h5=["title"],f5=["disabled","title"],p5={class:"tool-group"},m5=["title"],g5=["title"],v5=["title"],b5=["title"],y5={class:"tool-group"},x5=["title"],w5=["title"],S5=["title"],C5=["title"],A5=["title"],T5=["title"],E5={key:0,class:"background-panel"},_5=["disabled"],M5=["title"],P5={class:"background-position-row"},I5=["aria-label"],k5=["aria-label"],R5={class:"background-opacity-row"},F5=["aria-label"],L5={class:"language-picker"},D5=["value","aria-label"],O5=["value"],N5=["title"],$5={class:"zoom-pct"},B5=qt({__name:"StageToolbar",props:{ctx:{},activeTool:{},showSettings:{type:Boolean},showHelp:{type:Boolean}},emits:["update:activeTool","update:showSettings","update:showHelp","clear-background","background-file"],setup(n,{emit:e}){const t=n,i=e,s=Go(),{t:r,locale:o}=fn(),a=$e(!1),c=$e(null),l=Fe(()=>s.settings.backgroundImageName);function d(y){i("update:activeTool",t.activeTool===y?"":y)}function u(){a.value=!a.value,a.value&&i("update:showSettings",!1)}function h(){const y=!t.showSettings;i("update:showSettings",y),y&&(a.value=!1)}function f(){i("update:showHelp",!0),a.value=!1,i("update:showSettings",!1)}function p(y){i("background-file",y)}function m(y=!0){c.value&&(c.value.value=""),i("clear-background",y)}function g(){kA()}function v(y){const b=y.target.value;gC(b)}return(y,b)=>(Q(),te("div",u5,[w("button",{class:"settings-btn",onClick:h,title:P(r)("toolbar.settings")},R(P(r)("toolbar.settings")),9,h5),w("button",{class:"undo-btn",disabled:P(ph).undoCount===0,onClick:g,title:P(r)("toolbar.undo")},"↶",8,f5),w("div",p5,[w("button",{class:Ie(["tool-btn",{on:n.activeTool===""}]),onClick:b[0]||(b[0]=x=>d("")),title:P(r)("toolbar.pan")},"✋",10,m5),w("button",{class:Ie(["tool-btn",{on:n.activeTool==="translate"}]),onClick:b[1]||(b[1]=x=>d("translate")),title:P(r)("toolbar.translate")},"✥",10,g5),w("button",{class:Ie(["tool-btn",{on:n.activeTool==="rotate"}]),onClick:b[2]||(b[2]=x=>d("rotate")),title:P(r)("toolbar.rotate")},"⟳",10,v5),w("button",{class:Ie(["tool-btn",{on:n.activeTool==="scale"}]),onClick:b[3]||(b[3]=x=>d("scale")),title:P(r)("toolbar.scale")},"⤢",10,b5)]),w("div",y5,[w("button",{class:"tool-btn",onClick:b[4]||(b[4]=x=>P(o5)(n.ctx)),title:P(r)("toolbar.zoomIn")},"+",8,x5),w("button",{class:"tool-btn",onClick:b[5]||(b[5]=x=>P(a5)(n.ctx)),title:P(r)("toolbar.zoomOut")},"-",8,w5),w("button",{class:"tool-btn",onClick:b[6]||(b[6]=x=>P(l5)(n.ctx)),title:P(r)("toolbar.fitView")},"⤢",8,S5),w("button",{class:Ie(["tool-btn",{on:P(s).settings.showGrid}]),onClick:b[7]||(b[7]=x=>P(d5)(n.ctx)),title:P(r)("toolbar.toggleGrid")},"▦",10,C5),w("button",{class:"tool-btn",onClick:b[8]||(b[8]=x=>P(c5)(n.ctx)),title:P(r)("toolbar.resetView")},"⟳",8,A5)]),w("div",{class:"background-menu",onClick:b[14]||(b[14]=tt(()=>{},["stop"]))},[w("button",{class:Ie(["background-btn",{on:a.value}]),title:P(r)("toolbar.backgroundSettings"),onClick:u},R(P(r)("toolbar.background")),11,T5),a.value?(Q(),te("div",E5,[w("button",{class:"background-upload",onClick:b[9]||(b[9]=x=>{var C;return(C=c.value)==null?void 0:C.click()})},R(l.value?P(r)("toolbar.changeBackground"):P(r)("toolbar.uploadBackground")),1),w("button",{class:"background-clear",disabled:!l.value,onClick:b[10]||(b[10]=x=>m())},R(P(r)("toolbar.clearBackground")),9,_5),w("input",{ref_key:"backgroundFileInput",ref:c,class:"background-file-input",type:"file",accept:"image/png,image/jpeg,image/webp",onChange:p},null,544),w("div",{class:"background-file-name",title:l.value},R(l.value||P(r)("toolbar.noBackground")),9,M5),w("div",P5,[w("label",null,[b[15]||(b[15]=w("span",null,"X",-1)),me(w("input",{"onUpdate:modelValue":b[11]||(b[11]=x=>P(s).settings.backgroundX=x),type:"number",step:"1","aria-label":P(r)("toolbar.backgroundX")},null,8,I5),[[Je,P(s).settings.backgroundX,void 0,{number:!0}]])]),w("label",null,[b[16]||(b[16]=w("span",null,"Y",-1)),me(w("input",{"onUpdate:modelValue":b[12]||(b[12]=x=>P(s).settings.backgroundY=x),type:"number",step:"1","aria-label":P(r)("toolbar.backgroundY")},null,8,k5),[[Je,P(s).settings.backgroundY,void 0,{number:!0}]])])]),w("label",R5,[w("span",null,R(P(r)("toolbar.opacity")),1),me(w("input",{"onUpdate:modelValue":b[13]||(b[13]=x=>P(s).settings.backgroundOpacity=x),type:"range",min:"0",max:"1",step:"0.01","aria-label":P(r)("toolbar.backgroundOpacity")},null,8,F5),[[Je,P(s).settings.backgroundOpacity,void 0,{number:!0}]]),w("b",null,R(Math.round(P(s).settings.backgroundOpacity*100))+"%",1)])])):Ce("",!0)]),w("label",L5,[w("span",null,R(P(r)("language.label")),1),w("select",{value:P(o),"aria-label":P(r)("language.label"),onChange:v},[(Q(!0),te(_e,null,Pt(P(fC),x=>(Q(),te("option",{key:x.code,value:x.code},R(x.label),9,O5))),128))],40,D5)]),w("button",{class:Ie(["help-btn",{on:n.showHelp}]),title:P(r)("toolbar.openHelp"),onClick:f},R(P(r)("toolbar.help")),11,N5),w("span",$5,R(Math.round(P(s).editor.viewScale*100))+"%",1)]))}}),U5=li(B5,[["__scopeId","data-v-6411b316"]]),V5={key:0,class:"settings-panel"},X5={class:"sp-head"},Y5={class:"sp-section-title"},z5={class:"sp-switch-row"},j5={class:"sp-switch-control"},H5=["aria-label"],G5={class:"sp-section-title"},W5={class:"sp-row"},q5=["aria-label"],K5={class:"sp-section-title"},J5={class:"sp-chk"},Z5={class:"sp-chk"},Q5={class:"sp-row"},e8=["aria-label"],t8={class:"sp-row"},i8=["aria-label"],n8={class:"sp-chk"},s8={class:"sp-chk"},r8={class:"sp-row"},o8={class:"sp-row"},a8={class:"sp-row"},l8={class:"sp-hex"},c8={class:"sp-chk"},d8={class:"sp-cache-note"},u8=qt({__name:"StageSettingsPanel",props:{show:{type:Boolean}},emits:["close"],setup(n,{emit:e}){const t=e,i=Go(),{t:s}=fn();function r(a){H4(i,Number(a.target.value))}function o(){i.settings.bonePointDrawSize=Math.min(10,Math.max(.1,Number(i.settings.bonePointDrawSize)||1)),i.settings.boneAxisDrawSize=Math.min(10,Math.max(.1,Number(i.settings.boneAxisDrawSize)||2))}return(a,c)=>n.show?(Q(),te("div",V5,[w("div",X5,[bt(R(P(s)("settings.title"))+" ",1),w("button",{class:"sp-close",onClick:c[0]||(c[0]=l=>t("close"))},"✕")]),w("div",Y5,R(P(s)("settings.layout")),1),w("label",z5,[w("span",null,R(P(s)("settings.parameterPanelPosition")),1),w("span",j5,[me(w("input",{type:"checkbox","onUpdate:modelValue":c[1]||(c[1]=l=>P(i).settings.parameterPanelOnRight=l),"aria-label":P(s)("settings.panelOnRight")},null,8,H5),[[Ct,P(i).settings.parameterPanelOnRight]]),c[15]||(c[15]=w("span",{class:"sp-switch-ui","aria-hidden":"true"},null,-1)),w("b",null,R(P(i).settings.parameterPanelOnRight?P(s)("common.right"):P(s)("common.left")),1)])]),c[16]||(c[16]=w("div",{class:"sp-divider"},null,-1)),w("div",G5,R(P(s)("settings.history")),1),w("label",W5,[w("span",null,R(P(s)("settings.maxUndo")),1),me(w("input",{class:"sp-num sp-undo-limit",type:"number",min:"1",max:"200","onUpdate:modelValue":c[2]||(c[2]=l=>P(i).settings.undoLimit=l),"aria-label":P(s)("settings.maxUndo"),onChange:r},null,40,q5),[[Je,P(i).settings.undoLimit,void 0,{number:!0}]])]),c[17]||(c[17]=w("div",{class:"sp-divider"},null,-1)),w("div",K5,R(P(s)("settings.canvasGuides")),1),w("label",J5,[me(w("input",{type:"checkbox","onUpdate:modelValue":c[3]||(c[3]=l=>P(i).settings.showEmitter=l)},null,512),[[Ct,P(i).settings.showEmitter]]),bt(R(P(s)("settings.emitter")),1)]),w("label",Z5,[me(w("input",{type:"checkbox","onUpdate:modelValue":c[4]||(c[4]=l=>P(i).settings.showBones=l)},null,512),[[Ct,P(i).settings.showBones]]),bt(R(P(s)("settings.bones")),1)]),P(i).settings.showBones?(Q(),te(_e,{key:0},[w("label",Q5,[w("span",null,R(P(s)("settings.bonePointSize")),1),me(w("input",{class:"sp-num",type:"number",min:"0.1",max:"10",step:"0.1","onUpdate:modelValue":c[5]||(c[5]=l=>P(i).settings.bonePointDrawSize=l),"aria-label":P(s)("settings.bonePointSize"),onChange:o},null,40,e8),[[Je,P(i).settings.bonePointDrawSize,void 0,{number:!0}]])]),w("label",t8,[w("span",null,R(P(s)("settings.boneAxisSize")),1),me(w("input",{class:"sp-num",type:"number",min:"0.1",max:"10",step:"0.1","onUpdate:modelValue":c[6]||(c[6]=l=>P(i).settings.boneAxisDrawSize=l),"aria-label":P(s)("settings.boneAxisSize"),onChange:o},null,40,i8),[[Je,P(i).settings.boneAxisDrawSize,void 0,{number:!0}]])])],64)):Ce("",!0),w("label",n8,[me(w("input",{type:"checkbox","onUpdate:modelValue":c[7]||(c[7]=l=>P(i).settings.showSkinMesh=l)},null,512),[[Ct,P(i).settings.showSkinMesh]]),bt(R(P(s)("settings.skinMesh")),1)]),c[18]||(c[18]=w("div",{class:"sp-divider"},null,-1)),w("label",s8,[me(w("input",{type:"checkbox","onUpdate:modelValue":c[8]||(c[8]=l=>P(i).settings.tickEnabled=l)},null,512),[[Ct,P(i).settings.tickEnabled]]),bt(R(P(s)("settings.enableTicks")),1)]),P(i).settings.tickEnabled?(Q(),te(_e,{key:1},[w("label",r8,[w("span",null,R(P(s)("settings.tickFontSize")),1),me(w("input",{type:"range",min:"8",max:"40",step:"1","onUpdate:modelValue":c[9]||(c[9]=l=>P(i).settings.axisFontSize=l)},null,512),[[Je,P(i).settings.axisFontSize,void 0,{number:!0}]]),me(w("input",{type:"number",min:"8",max:"40","onUpdate:modelValue":c[10]||(c[10]=l=>P(i).settings.axisFontSize=l),class:"sp-num"},null,512),[[Je,P(i).settings.axisFontSize,void 0,{number:!0}]])]),w("label",o8,[w("span",null,R(P(s)("settings.tickWidth")),1),me(w("input",{type:"range",min:"1",max:"5",step:"0.5","onUpdate:modelValue":c[11]||(c[11]=l=>P(i).settings.tickWidth=l)},null,512),[[Je,P(i).settings.tickWidth,void 0,{number:!0}]]),me(w("input",{type:"number",min:"1",max:"5","onUpdate:modelValue":c[12]||(c[12]=l=>P(i).settings.tickWidth=l),class:"sp-num"},null,512),[[Je,P(i).settings.tickWidth,void 0,{number:!0}]])]),w("label",a8,[w("span",null,R(P(s)("settings.axisColor")),1),me(w("input",{type:"color","onUpdate:modelValue":c[13]||(c[13]=l=>P(i).settings.axisColor=l),class:"sp-colr"},null,512),[[Je,P(i).settings.axisColor]]),w("span",l8,R(P(i).settings.axisColor),1)]),w("label",c8,[me(w("input",{type:"checkbox","onUpdate:modelValue":c[14]||(c[14]=l=>P(i).settings.showAxisLabels=l)},null,512),[[Ct,P(i).settings.showAxisLabels]]),bt(R(P(s)("settings.showAxisLabels")),1)])],64)):Ce("",!0),w("div",d8,R(P(s)("settings.cacheNote")),1)])):Ce("",!0)}}),h8=li(u8,[["__scopeId","data-v-c1ded952"]]);class vp{constructor(){A(this,"sprite",null);A(this,"texture",null);A(this,"loadVersion",0)}createSprite(e){const t=new to(it.EMPTY);return t.anchor.set(.5),t.visible=!1,e.addChild(t),this.sprite=t,t}applyTransform(e,t,i){this.sprite&&(this.sprite.position.set(Number(e)||0,-(Number(t)||0)),this.sprite.alpha=Math.min(1,Math.max(0,Number(i)||0)))}async syncTexture(e){const t=++this.loadVersion;if(!e){this.sprite&&(this.sprite.texture=it.EMPTY,this.sprite.visible=!1),this.texture&&this.texture.destroy(!0),this.texture=null;return}try{const i=await it.fromURL(e);if(t!==this.loadVersion||!this.sprite){i.destroy(!0);return}const s=this.texture;this.texture=i,this.sprite.texture=i,this.sprite.visible=!0,s&&s.destroy(!0)}catch(i){console.error("背景图恢复失败",i)}}static clearStoreBackground(e,t){e.settings.backgroundImageData="",e.settings.backgroundImageName="",t&&(e.settings.backgroundX=0,e.settings.backgroundY=0,e.settings.backgroundOpacity=1)}static async handleFileChange(e,t){var r;const i=t.target,s=(r=i.files)==null?void 0:r[0];if(s)try{e.settings.backgroundImageData=await Id(s),e.settings.backgroundImageName=s.name}catch(o){console.error("背景图加载失败",o)}finally{i.value=""}}destroy(){this.loadVersion++,this.texture&&this.texture.destroy(!0),this.texture=null,this.sprite=null}}class f8{constructor(e){A(this,"selectedNodes",new Set);A(this,"suppressNextDoubleClick",!1);this.ctx=e}resetSelection(){this.selectedNodes.clear()}activePath(){const e=this.ctx.store;if(e.activeObjectType!=="path")return null;const t=e.paths.find(i=>i.id===e.activeObjectId)||null;return(t==null?void 0:t.visible)===!1?null:t}pathInsertIndex(e,t,i){if(e.points.length<2)return e.points.length;const s=e.closed?e.points.length:e.points.length-1;let r=e.points.length,o=1/0;for(let a=0;aMath.hypot(c.x-s.x,c.y-s.y)<=r);if(o>=0){t.points.splice(o,1),this.selectedNodes.clear();return}const a=this.pathInsertIndex(t,s.x,s.y);t.points.splice(a,0,{x:s.x,y:s.y,inX:0,inY:0,outX:0,outY:0}),this.selectedNodes.clear(),this.selectedNodes.add(a)}onPointerDown(e){const t=this.activePath();if(!t||!t.enabled)return!1;const i=In(this.ctx,e.clientX,e.clientY),s=aa(t,i.x,i.y),r=9/Math.max(.01,this.ctx.store.editor.viewScale);if(e.detail>=2){if(t.points.findIndex(u=>Math.hypot(u.x-s.x,u.y-s.y)<=r)>=0)return!0;const l={x:s.x,y:s.y,inX:0,inY:0,outX:0,outY:0},d=this.pathInsertIndex(t,s.x,s.y);return t.points.splice(d,0,l),this.selectedNodes.clear(),this.selectedNodes.add(d),this.suppressNextDoubleClick=!0,Na(u=>{const h=In(this.ctx,u.clientX,u.clientY),f=aa(t,h.x,h.y);l.outX=f.x-l.x,l.outY=f.y-l.y,l.inX=-l.outX,l.inY=-l.outY}),!0}let o=null;for(const c of this.selectedNodes){const l=t.points[c];l&&(Math.hypot(l.x+l.inX-s.x,l.y+l.inY-s.y)<=r&&(o={index:c,side:"in"}),Math.hypot(l.x+l.outX-s.x,l.y+l.outY-s.y)<=r&&(o={index:c,side:"out"}))}if(o){const c=t.points[o.index],l=o.side==="in"?Math.hypot(c.outX,c.outY):Math.hypot(c.inX,c.inY);return Na(u=>{const h=In(this.ctx,u.clientX,u.clientY),f=aa(t,h.x,h.y),p=f.x-c.x,m=f.y-c.y;if(o.side==="in"?(c.inX=p,c.inY=m):(c.outX=p,c.outY=m),!u.altKey){const g=Math.max(1e-4,Math.hypot(p,m)),v=u.shiftKey?g:l;o.side==="in"?(c.outX=-p/g*v,c.outY=-m/g*v):(c.inX=-p/g*v,c.inY=-m/g*v)}}),!0}const a=t.points.findIndex(c=>Math.hypot(c.x-s.x,c.y-s.y)<=r);if(a>=0){if(e.altKey)return this.selectedNodes.delete(a),!0;e.ctrlKey||e.metaKey?this.selectedNodes.add(a):this.selectedNodes.has(a)||(this.selectedNodes.clear(),this.selectedNodes.add(a));const c=s,l=[...this.selectedNodes].map(u=>({index:u,x:t.points[u].x,y:t.points[u].y}));return Na(u=>{const h=In(this.ctx,u.clientX,u.clientY),f=aa(t,h.x,h.y);for(const p of l)t.points[p.index].x=p.x+f.x-c.x,t.points[p.index].y=p.y+f.y-c.y}),!0}if(e.altKey&&!e.ctrlKey&&!e.metaKey)return this.selectedNodes.clear(),!0;if(e.ctrlKey||e.metaKey||e.altKey){const c=s,l=e.altKey,d=u=>{const h=In(this.ctx,u.clientX,u.clientY),f=aa(t,h.x,h.y),p=Math.min(c.x,f.x),m=Math.max(c.x,f.x),g=Math.min(c.y,f.y),v=Math.max(c.y,f.y);t.points.forEach((y,b)=>{y.x>=p&&y.x<=m&&y.y>=g&&y.y<=v&&(l?this.selectedNodes.delete(b):this.selectedNodes.add(b))}),window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",d)};return window.addEventListener("pointerup",d),window.addEventListener("pointercancel",d),!0}return!1}}class p8{constructor(e,t){this.ctx=e,this.getTool=t}onColliderPointerDown(e){const t=this.ctx.store;if(t.activeObjectType!=="collision")return!1;const i=t.colliders.find(y=>y.id===t.activeObjectId);if(!(i!=null&&i.enabled)||i.visible===!1)return!1;const s=In(this.ctx,e.clientX,e.clientY),r=i.rotation*Math.PI/180,o=Math.cos(r),a=Math.sin(r),c=Math.max(1e-4,Math.abs(i.scaleX??1)),l=Math.max(1e-4,Math.abs(i.scaleY??1)),d=s.x-i.x,u=s.y-i.y,h=(o*d+a*u)/c,f=(-a*d+o*u)/l;if(!(i.shape==="circle"?Math.hypot(h,f)<=i.radius:i.shape==="ellipse"?Math.hypot(h/Math.max(1,i.radiusX),f/Math.max(1,i.radiusY))<=1:Math.abs(h)<=i.width*.5&&Math.abs(f)<=i.height*.5))return!1;const m=i.x,g=i.y,v=s;return Na(y=>{const b=In(this.ctx,y.clientX,y.clientY);i.x=m+b.x-v.x,i.y=g+b.y-v.y}),!0}onForceFieldDown(e){const t=this.ctx.store.systems.find(d=>d.id===this.ctx.store.activeId);if((t==null?void 0:t.visible)===!1)return!1;const i=t==null?void 0:t.config;if(!(i!=null&&i.forceField)||!i.showForceFieldShape||i.forceRadius<=0)return!1;const s=In(this.ctx,e.clientX,e.clientY);if(Math.hypot(s.x-i.forceCenterX,s.y-i.forceCenterY)>i.forceRadius)return!1;const o=i.forceCenterX,a=i.forceCenterY;this.ctx.holder.value&&(this.ctx.holder.value.style.cursor="grabbing");const c=d=>{const u=In(this.ctx,d.clientX,d.clientY);i.forceCenterX=o+u.x-s.x,i.forceCenterY=a+u.y-s.y},l=()=>{this.ctx.holder.value&&(this.ctx.holder.value.style.cursor=""),window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l)};return window.addEventListener("pointermove",c),window.addEventListener("pointerup",l),window.addEventListener("pointercancel",l),e.preventDefault(),!0}onAttractionDown(e){const t=this.ctx.store.systems.find(u=>u.id===this.ctx.store.activeId);if((t==null?void 0:t.visible)===!1)return!1;const i=t==null?void 0:t.config;if(!(i!=null&&i.attraction)||!i.showAttractionShape)return!1;const s=In(this.ctx,e.clientX,e.clientY),r=Math.max(i.attractionRadius,12/Math.max(1e-4,this.ctx.store.editor.viewScale));if(Math.hypot(s.x-i.attractionCenterX,s.y-i.attractionCenterY)>r)return!1;const a=i.attractionCenterX,c=i.attractionCenterY;this.ctx.holder.value&&(this.ctx.holder.value.style.cursor="grabbing");const l=u=>{const h=In(this.ctx,u.clientX,u.clientY);i.attractionCenterX=a+h.x-s.x,i.attractionCenterY=c+h.y-s.y},d=()=>{this.ctx.holder.value&&(this.ctx.holder.value.style.cursor=""),window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",d)};return window.addEventListener("pointermove",l),window.addEventListener("pointerup",d),window.addEventListener("pointercancel",d),e.preventDefault(),!0}selectedTransformTarget(){const e=this.ctx.store,t=e.activeObjectId;if(e.activeObjectType==="particle"){const r=e.systems.find(a=>a.id===t);if(!r||r.visible===!1)return null;const o=r.config;return{x:o.centerX,y:o.centerY,rotation:o.rootRotation,scaleX:o.rootScaleX??1,scaleY:o.rootScaleY??1,setPosition:(a,c)=>{o.centerX=a,o.centerY=c},setRotation:a=>{o.rootRotation=a},setScale:(a,c)=>{o.rootScaleX=a,o.rootScaleY=c}}}const s=(e.activeObjectType==="collision"?e.colliders:e.activeObjectType==="path"?e.paths:e.spines).find(r=>r.id===t);return!s||s.visible===!1?null:{x:Number(s.x)||0,y:Number(s.y)||0,rotation:Number(s.rotation)||0,scaleX:Math.max(.05,Number(s.scaleX)||1),scaleY:Math.max(.05,Number(s.scaleY)||1),setPosition:(r,o)=>{s.x=r,s.y=o},setRotation:r=>{s.rotation=r},setScale:(r,o)=>{s.scaleX=r,s.scaleY=o}}}onGizmoDown(e){const t=this.selectedTransformTarget();if(!t)return;const i=this.ctx.app(),s=this.ctx.store,r=s.editor.viewScale,o=this.ctx.holder.value.getBoundingClientRect(),a=o.left+i.screen.width/2+s.editor.viewX+t.x*r,c=o.top+i.screen.height*.5+s.editor.viewY+-t.y*r,l=e.clientX,d=e.clientY,u=this.getTool(),h=t.x,f=t.y,p=t.rotation,m=t.scaleX,g=t.scaleY,v=Math.hypot(l-a,d-c)||1,y=Math.atan2(d-c,l-a);Na(x=>{const C=(x.clientX-l)/r,T=(x.clientY-d)/r;if(u==="translate")t.setPosition(h+C,f-T);else if(u==="rotate"){const S=Math.atan2(x.clientY-c,x.clientX-a);t.setRotation(p-(S-y)*180/Math.PI)}else if(u==="scale"){const E=Math.hypot(x.clientX-a,x.clientY-c)/v;t.setScale(Math.max(.05,m*E),Math.max(.05,g*E))}})}}function tx(n,e,t,i,s){const r=1-s;return r*r*r*n+3*r*r*s*e+3*r*s*s*t+s*s*s*i}function ix(n,e,t){const i=n.rotation*Math.PI/180,s=Math.cos(i),r=Math.sin(i),o=Math.max(1e-4,Math.abs(n.scaleX??1)),a=Math.max(1e-4,Math.abs(n.scaleY??1));return{x:n.x+s*e*o-r*t*a,y:n.y+r*e*o+s*t*a}}function Qg(n,e){if(!n.points.length)return null;if(n.points.length===1)return{...ix(n,n.points[0].x,n.points[0].y),angle:n.rotation};const t=n.closed?n.points.length:n.points.length-1,i=[];let s=0;for(let p=0;p0&&v===0)continue;const y=v/20,b=tx(m.x,m.x+m.outX,g.x+g.inX,g.x,y),x=tx(m.y,m.y+m.outY,g.y+g.inY,g.y,y),C=ix(n,b,x),T=i[i.length-1];T&&(s+=Math.hypot(C.x-T.x,C.y-T.y)),i.push({...C,distance:s})}}const r=Math.min(1,Math.max(0,e))*s;let o=i.findIndex(p=>p.distance>=r);o<0&&(o=i.length-1);const a=i[o],c=i[Math.max(0,o-1)],l=i[Math.min(i.length-1,o+1)],d=c.distance,u=o>0?(r-d)/Math.max(1e-4,a.distance-d):0,h=c.x+(a.x-c.x)*Math.min(1,Math.max(0,u)),f=c.y+(a.y-c.y)*Math.min(1,Math.max(0,u));return{x:h,y:f,angle:Math.atan2(l.y-c.y,l.x-c.x)*180/Math.PI}}function m8(n,e,t){if(e.renderLayerMode!=="slot")return null;const i=n.find(o=>o.id===e.renderLayerSpineId&&o.enabled&&o.status==="ready");if(!i)return null;const s=i.slots||[],r=s.find(o=>o.name===e.renderLayerSlotName);if(!r)return null;if(e.renderLayerSlotPosition==="below"){let o="";if(t!=null&&t.length){const a=t.indexOf(r.name);if(a===0)return null;a>0&&(o=t[a-1])}if(!o){const a=s.filter(c=>c.orderl.order-c.order)[0];if(!a)return null;o=a.name}return{spineId:i.id,slotName:o,targetSlotName:r.name,followAttachment:!1}}return{spineId:i.id,slotName:r.name,targetSlotName:r.name,followAttachment:e.renderLayerFollowAttachment}}function Cu(n,e,t,i=Math.max(1e-4,Math.abs(n.rootScaleX)),s=Math.max(1e-4,Math.abs(n.rootScaleY))){const r=-n.rootRotation*Math.PI/180,o=Math.cos(r),a=Math.sin(r),c=e-n.centerX,l=-t+n.centerY;return{x:(o*c+a*l)/i,y:(-a*c+o*l)/s}}function g8(n,e,t){const i=Qg(e,t);if(!i)return null;const s=Cu(n,i.x,i.y),r=i.angle*Math.PI/180,o=Cu(n,i.x+Math.cos(r),i.y+Math.sin(r)),a=Math.atan2(o.y-s.y,o.x-s.x)*180/Math.PI;return{...s,angle:a}}function v8(n,e){return n.colliders.map(t=>{if(!t.followPath||!t.followPathId)return t;const i=n.paths.find(d=>d.id===t.followPathId&&d.enabled);if(!(i!=null&&i.points.length))return t;const s=Math.max(.05,Number(t.followDuration)||2),r=Math.min(1,Math.max(0,e/s)),o=Array.isArray(t.followCurve)?t.followCurve:[{x:0,y:0},{x:1,y:1}],a=t.followCurveMode==="跟随导出"?n.settings.exportSettings.keyframeCurve==="bezier"?"bezier":"linear":t.followCurveMode==="贝塞尔"?"bezier":"linear",c=Math.min(1,Math.max(0,yC(o,r,a))),l=Qg(i,c);return l?{...t,x:l.x,y:l.y,rotation:t.rotation+(t.followPathRotation?l.angle:0)}:t})}class b8{constructor(){A(this,"emitters",new Map);A(this,"configs",new Map);A(this,"store",null);A(this,"eventsSuspended",!1);A(this,"subEmitterState",new Map);A(this,"slotGroups",new Map)}sync(e,t,i,s,r=null){this.store=e;for(const[c,l]of this.emitters){const d=e.systems.find(u=>u.id===c);(!d||this.configs.get(c)!==d.config)&&(l.removeFromParent(),l.destroy({children:!0}),this.emitters.delete(c),this.configs.delete(c))}for(const c of e.systems){i&&!c.config.texture&&(c.config.texture=i);const l=lr(c.config);if(s)for(const u of l.trailResources)!u.texture&&(u.previewUrl==="/images/trail.png"||u.previewUrl==="/trails/trail.png")&&(u.texture=s);if(i)for(const u of l.imageResources)!u.texture&&u.textureName==="star"&&(u.texture=i);if(this.emitters.has(c.id))continue;const d=new oy(c.config);d.onParticleEvent=u=>this.handleParticleEvent(c.id,u),t.addChild(d),this.emitters.set(c.id,d),this.configs.set(c.id,c.config)}const o=Xa(e.systems);for(const c of e.systems){const l=this.emitters.get(c.id);if(!l)continue;l.onParticleEvent||(l.onParticleEvent=u=>this.handleParticleEvent(c.id,u));const d=o.has(c.id);this.subEmitterState.get(c.id)!==d&&(d&&l.clear(),this.subEmitterState.set(c.id,d)),l.setAutoEmission(!d)}const a=new Set;for(const c of e.systems){const l=this.emitters.get(c.id);if(!l)continue;const d=r&&c.config.renderLayerMode==="slot"?r.getDrawOrder(c.config.renderLayerSpineId):null,u=m8(e.spines,c.config,d),h=u&&r?this.ensureSlotGroup(u,r,c.config):null;h?(a.add(h.key),l.parent!==h.compensator&&h.compensator.addChild(l)):l.parent!==t&&t.addChild(l)}for(const[c,l]of[...this.slotGroups])if(!a.has(c)){for(const d of[...l.compensator.children])d instanceof oy&&d.parent===l.compensator&&t.addChild(d);r==null||r.detachSlotObject(l.spineId,l.slotName,l.wrapper),l.wrapper.removeFromParent(),l.wrapper.removeChild(l.compensator),l.compensator.destroy(),l.wrapper.destroy(),this.slotGroups.delete(c)}}ensureSlotGroup(e,t,i){const s=`${e.spineId}:${e.targetSlotName}:${i.renderLayerSlotPosition}`;let r=this.slotGroups.get(s);if(!r){const o=new _i,a=new _i;o.addChild(a),r={key:s,spineId:e.spineId,slotName:e.slotName,wrapper:o,compensator:a,followAttachment:i.renderLayerFollowAttachment,attached:!1},this.slotGroups.set(s,r)}return(!r.attached||!r.wrapper.parent||r.slotName!==e.slotName)&&(r.wrapper.parent&&t.detachSlotObject(r.spineId,r.slotName,r.wrapper),r.slotName=e.slotName,r.attached=t.attachSlotObject(r.spineId,r.slotName,r.wrapper,e.followAttachment)),r.attached?r:null}updateRenderCompensation(e,t){if(t)for(const i of this.slotGroups.values()){if(!i.attached||!i.wrapper.parent)continue;const s=e.spines.find(o=>o.id===i.spineId);if(!s)continue;const r=t.getSlotParentMatrix(i.spineId,i.slotName,s);r&&(r.invert(),i.compensator.transform.setFromMatrix(r))}}suspendEvents(e){this.eventsSuspended=e}handleParticleEvent(e,t){if(this.eventsSuspended)return;const i=this.store;if(!i)return;const s=i.systems.find(o=>o.id===e),r=s==null?void 0:s.config;if(!(!(r!=null&&r.eventEnabled)||!Array.isArray(r.events)||!r.events.length)&&!(t.depth>=2))for(const o of r.events){if(o.event!==t.kind||o.event==="collision"&&t.collisionCount>o.collisionLimit||o.targetSystemId<=0||o.targetSystemId===e)continue;const a=Math.min(1,Math.max(0,Number(o.probability)||0));if(a<=0)continue;const c=(Math.imul(o.id+1,2654435761)^Math.imul(t.depth+1,2246822507))>>>0;if(Pr(r.seed>>>0,t.spawnId+1,c)>=a)continue;const d=this.emitters.get(o.targetSystemId);if(!d)continue;const u=Array.isArray(o.inherit)?o.inherit:[],h=u.length?{attributes:u,colorMode:o.colorInheritMode==="replace"?"replace":"add",data:{colorHex:t.colorHex,scaleX:t.scaleX,scaleY:t.scaleY,rotation:t.rotation,life:t.maxLife}}:void 0;d.spawnEventParticle(t.worldX,t.worldY,t.depth+1,h)}}destroy(e){for(const t of this.slotGroups.values()){for(const i of[...t.compensator.children])t.compensator.removeChild(i);t.wrapper.removeFromParent(),t.compensator.destroy(),t.wrapper.destroy()}this.slotGroups.clear();for(const[t,i]of this.emitters)i.removeFromParent(),i.destroy({children:!0}),this.emitters.delete(t),this.configs.delete(t)}}async function y8(){const[n,e]=await Promise.all([it.fromURL("/images/star.png"),it.fromURL("/images/trail.png")]);return{dotTex:n,trailTex:e}}function x8(n,e,t){for(const i of n.systems){i.config.texture=e;const s=lr(i.config);if(t)for(const r of s.trailResources)!r.texture&&(r.previewUrl==="/images/trail.png"||r.previewUrl==="/trails/trail.png")&&(r.texture=t);for(const r of s.imageResources)!r.texture&&r.textureName==="star"&&(r.texture=e)}}const w8={class:"stage-wrap"},S8={key:0,class:"hud"},C8={class:"hud-number hud-system-count"},A8={class:"hud-number hud-particle-count"},T8={class:"hud-tip"},E8=qt({__name:"Stage",setup(n){const e=Go(),t=$e(null),i=$e(null),s=$e(!1),r=$e(!1),o=$e(""),a=$e(!1);e.settings.undoLimit>0||(e.settings.undoLimit=20),e.settings.parameterPanelOnRight==null&&(e.settings.parameterPanelOnRight=!0),Number.isFinite(e.settings.backgroundX)||(e.settings.backgroundX=0),Number.isFinite(e.settings.backgroundY)||(e.settings.backgroundY=0),Number.isFinite(e.settings.backgroundOpacity)||(e.settings.backgroundOpacity=1),e.settings.backgroundImageName==null&&(e.settings.backgroundImageName=""),e.settings.backgroundImageData==null&&(e.settings.backgroundImageData=""),e.settings.showEmitter==null&&(e.settings.showEmitter=!0),e.settings.showBones==null&&(e.settings.showBones=!1),e.settings.bonePointDrawSize>0||(e.settings.bonePointDrawSize=1),e.settings.boneAxisDrawSize>0||(e.settings.boneAxisDrawSize=2),e.settings.showSkinMesh==null&&(e.settings.showSkinMesh=!1),e.settings.showGrid==null&&(e.settings.showGrid=!0);let c=null,l=null,d=null,u=null,h=null,f=null,p=null,m=null,g=null,v=null,y=null,b=null,x=null,C=null,T=null,S=[],E=0,_=0,I=0,M=0,k=null,B=null;const D=new vp,G=new b8,V={store:e,holder:t,app:()=>c},Y=new f8(V),L=new p8(V,()=>o.value);let N=[];const F=new Map;function $(){l=new _i,c.stage.addChild(l),C=new _i,c.stage.addChild(C),D.createSprite(l),x=new Ki,l.addChild(x),T=new i3,l.addChild(T.container),u=new Ki,l.addChild(u),d=new Ki,l.addChild(d),f=new Ki,l.addChild(f),p=new Ki,l.addChild(p),m=new Ki,l.addChild(m),g=new Ki,l.addChild(g),v=new Ki,l.addChild(v),y=new Ki,l.addChild(y),b=new Ki,l.addChild(b),h=new Ki,l.addChild(h)}function X(be){if(be.button===0){if(o.value&&L.selectedTransformTarget()){L.onGizmoDown(be);return}Y.onPointerDown(be)||L.onColliderPointerDown(be)||L.onAttractionDown(be)||L.onForceFieldDown(be)||r5(V,be.clientX,be.clientY)}}function z(be){Y.onStageDoubleClick(be)}function K(be){s5(V,be)}function J(be=!0){vp.clearStoreBackground(e,be)}async function oe(be){await vp.handleFileChange(e,be)}W4({canvasElement:t,canvasFocused:a,undo:kA,save:()=>TA(e),togglePlay:()=>e.togglePlay(),toStart:()=>e.toStart(),setTool:be=>{o.value=be}});function le(){l&&G.sync(e,l,k,B,T)}function ve(be,q,Z,se){const j=Math.max(2,Math.floor(se)||2);if(be.config.mode==="stream"&&be.config.streamBehavior==="loop"){jy(be,q,Z,j);return}q.reset();const H=1/Math.max(1,Z),O=[];for(let U=0;U=q)continue;const H=G.emitters.get(j.id);H&&ve(j,H,be,q)}}finally{G.suspendEvents(!1)}e.systems.every(j=>{var H;return(((H=j.frames)==null?void 0:H.length)||0)>=q})&&(e.timeline.recorded=!0)}function fe(){var Z,se,j,H;M=requestAnimationFrame(fe);const be=performance.now()/1e3;let q=be-E;if(E=be,q>.1&&(q=.1),c&&l){l.scale.set(e.editor.viewScale),l.position.set(c.screen.width/2+e.editor.viewX,c.screen.height*.5+e.editor.viewY),D.applyTransform(e.settings.backgroundX,e.settings.backgroundY,e.settings.backgroundOpacity),$B(e,c,x,C,S);const O=Math.max(1,e.timeline.fps),U=e.timeline.frame,W=U/O;T==null||T.sync(e.spines,U,O),le(),G.updateRenderCompensation(e,T),N=v8(e,W);for(const Le of e.systems){const Ee=G.emitters.get(Le.id);if(!Ee)continue;Ee.setFollowExportCurveMode(e.settings.exportSettings.keyframeCurve==="bezier"?"贝塞尔":"线性");const Ze=Le.visible!==!1;Ee.visible=Ze,Ee.renderable=Ze;const Te=Le.config;Ee.scale.set(Te.rootScaleX,Te.rootScaleY);const vi=new Set(Te.collisionColliderIds);Ee.setColliders(Te.collision?N.filter(Ut=>vi.has(Ut.id)):[]),Ee.setEmitterFollowSpawn(0,0,0);let lt={x:Te.centerX,y:Te.centerY,rotation:Te.rootRotation};const ce=Te.emitterFollow&&Te.emitterFollowMode==="bone"?e.spines.find(Ut=>Ut.id===Te.emitterFollowSpineId&&Ut.enabled&&Ut.status==="ready"):null,he=ce&&(T==null?void 0:T.getBoneWorldTransform(ce.id,Te.emitterFollowBoneName))||null,nt=Te.emitterFollow&&Te.emitterFollowMode==="path"?e.paths.find(Ut=>Ut.id===Te.emitterFollowPathId&&Ut.enabled):null,Ft=Math.max(.05,Te.emitterFollowDuration),Nt=Math.min(1,Math.max(0,W/Ft)),ct=Math.min(1,Math.max(0,yC(Te.emitterFollowCurve,Nt))),rn=Math.min(1,Math.max(0,Te.emitterFollowOffset)),Nn=Te.emitterFollowDirection==="reverse"?(1-rn)*(1-ct):rn+(1-rn)*ct,jt=nt?Qg(nt,Nn):null;if(he){const Ut=Te.emitterFollowBoneOffsetX,on=Te.emitterFollowBoneOffsetY,fi=he.x+Ut,$n=he.y+on,Fs=Te.rootRotation+Te.emitterFollowBoneRotation,An=Math.max(1e-4,Math.abs(Te.rootScaleX*Te.emitterFollowBoneScaleX)),pn=Math.max(1e-4,Math.abs(Te.rootScaleY*Te.emitterFollowBoneScaleY));if(lt={x:fi,y:$n,rotation:Fs},Te.emitterFollowSpace==="local")Ee.position.set(fi,-$n),Ee.rotation=-Fs*Math.PI/180,Ee.scale.set(An,pn),Ee.setSimulationTransform(fi,$n,Fs,An,pn);else{Ee.position.set(Te.centerX,-Te.centerY),Ee.rotation=-Te.rootRotation*Math.PI/180,Ee.scale.set(An,pn),Ee.setSimulationTransform(Te.centerX,Te.centerY,Te.rootRotation,An,pn);const br=Cu(Te,fi,$n,An,pn),yr=-(Fs-Te.rootRotation);Ee.setEmitterFollowSpawn(br.x,br.y,yr)}}else if(jt){const Ut=jt.angle+(Te.emitterFollowDirection==="reverse"?180:0),on=Te.emitterAngleMode==="direction"?Ut:Te.rootRotation;if(lt={x:jt.x,y:jt.y,rotation:on},Te.emitterFollowSpace==="local")Ee.position.set(jt.x,-jt.y),Ee.rotation=-on*Math.PI/180,Ee.setSimulationTransform(jt.x,jt.y,on);else{Ee.position.set(Te.centerX,-Te.centerY),Ee.rotation=-Te.rootRotation*Math.PI/180,Ee.setSimulationTransform(Te.centerX,Te.centerY,Te.rootRotation);const fi=Cu(Te,jt.x,jt.y),$n=Te.emitterAngleMode==="direction"?-(Ut-Te.rootRotation):0;Ee.setEmitterFollowSpawn(fi.x,fi.y,$n)}}else Ee.position.set(Te.centerX,-Te.centerY),Ee.rotation=-Te.rootRotation*Math.PI/180,Ee.setSimulationTransform(Te.centerX,Te.centerY,Te.rootRotation);const $i=Te.shape==="path"&&Te.spawnPathId>0&&e.paths.find(Ut=>Ut.id===Te.spawnPathId&&Ut.enabled&&Ut.points.length>0)||null;Ee.setSpawnPathSampler($i?Ut=>g8(Te,$i,Ut):null,($i==null?void 0:$i.closed)===!0),F.set(Le.id,lt)}let ee=0;const ne=[],ue=e.settings.showBones&&e.activeObjectType==="particle"?e.activeObjectId:0,xe=(Le,Ee,Ze)=>{!Le||Le.id!==ue||Le.visible===!1||KB(ne,Ze,Ee.position.x,Ee.position.y)},ye=e.timeline,Ne=e.playbackRange,Be=ye.fps,de=1/Math.max(1,Be);let ge=I,Ge=0;if(ye.playing?(_+=q,Ge=Math.floor(_/de),Ge>0&&(_-=Ge*de)):(_=0,Se(Be)),ye.playing&&Ge>0)for(let Le=0;Lelt.id===e.activeId),Ze=(Ee==null?void 0:Ee.config.mode)==="stream"&&Ee.config.streamBehavior==="loop"?IS(Ee.config,Be):null,vi=ye.loop&&ye.abLoop&&(Ze==null?void 0:Ze.start)===Ne.start&&Ze.end===Ne.end?Ne.end-1:Ne.end;if(ye.frame>vi)if(ye.loop)ye.frame=Ne.start;else{ye.frame=Ne.end,ye.playing=!1;break}}else{G.suspendEvents(!0);try{const Ee=Xa(e.systems);for(const Ze of e.systems){const Te=G.emitters.get(Ze.id);if(!Te)continue;!Ee.has(Ze.id)&&Ze.config.mode==="stream"&&Ze.config.streamBehavior==="loop"?(Z=Ze.frames)!=null&&Z.length||jy(Ze,Te,Be,ye.totalFrames):ye.frame===0&&Te.reset()}}finally{G.suspendEvents(!1)}for(const[Ee,Ze]of G.emitters){const Te=e.systems.find(nt=>nt.id===Ee),vi=(Te==null?void 0:Te.config.mode)==="stream"&&Te.config.streamBehavior==="loop",lt=vi?(se=Te.frames)==null?void 0:se[ye.frame]:void 0,ce=ye.frame===0&&!vi,he=ce?[]:lt||Ze.update(de);if(ce?Ze.apply([]):lt&&Ze.apply(lt),(Te==null?void 0:Te.visible)!==!1)for(const nt of he)nt.active&&xe(Te,Ze,nt);ee+=he.length}for(const Ee of e.systems){if(!Ee.config.texture)continue;Ee.frames=Ee.frames||[];const Ze=G.emitters.get(Ee.id);Ze&&!(Ee.config.mode==="stream"&&Ee.config.streamBehavior==="loop")&&(Ee.frames[ye.frame]=Ze.capture())}ye.frame++,ye.frame>=ye.totalFrames&&(ye.frame=Ne.start,ye.recorded=!0)}else{ye.playing||(ge=ye.frame);for(const Le of e.systems){const Ee=G.emitters.get(Le.id),Ze=ye.playing?I:ye.frame,Te=(H=Le.frames)==null?void 0:H[Ze],vi=Le.config.mode==="stream"&&Le.config.streamBehavior==="loop"&&!!Te;if((ye.recorded||vi)&&Ee&&Te){Ee.apply(Te);for(const lt of Te)lt.active&&(xe(Le,Ee,lt),ee++)}else if(Ee){const lt=ye.frame===0?[]:Ee.update(0);if(ye.frame===0&&Ee.apply([]),Le.visible!==!1)for(const ce of lt)ce.active&&xe(Le,Ee,ce);ee+=Ee.activeCount}}}I=ge,T==null||T.sync(e.spines,ge,Be);for(const[,Le]of G.emitters)Le.drawTrailMeshDebug(e.settings.showSkinMesh);WB(e,N,v),qB(e,Y.selectedNodes,y),jB(e,T,u),BB(e,F,d),UB(e,F,f),VB(e,p),XB(e,m),YB(e,g),HB(o,L.selectedTransformTarget.bind(L),b),JB(ne,e,h),i.value&&(i.value.systems=e.systems.length,i.value.particles=ee)}}return Sn(async()=>{const be=t.value;c=new tS({width:be.clientWidth||800,height:be.clientHeight||600,backgroundAlpha:0,antialias:!0}),be.appendChild(c.view),$(),ei(()=>e.settings.backgroundImageData,Z=>D.syncTexture(Z),{immediate:!0});const q=await y8();k=q.dotTex,B=q.trailTex,x8(e,k,B),i.value={systems:e.systems.length,particles:0},e.timeline.recorded=!1,e.timeline.frame=0,_=0,I=0,e.timeline.playing=!0,e.timeline.loop=!0;for(const Z of e.systems)Z.frames=[];e.recalcTotalFrames(),E=performance.now()/1e3,fe(),ei(()=>e.systems.map(Z=>JSON.stringify(Z.config,(se,j)=>se==="texture"||se==="trailTexture"||se==="previewUrl"?void 0:j)).join("|")+`|colliders:${JSON.stringify(e.colliders)}|paths:${JSON.stringify(e.paths)}`,()=>{e.recalcTotalFrames(),e.timeline.recorded=!1,e.timeline.frame=0;for(const Z of e.systems)Z.frames=[];e.timeline.playing=!0,e.timeline.loop=!0}),j4(e)}),Za(()=>{cancelAnimationFrame(M),T==null||T.destroy(),T=null,D.destroy(),l&&c&&G.destroy(l),c&&(c.destroy(!0,{children:!0}),c=null)}),ei(()=>[e.activeObjectType,e.activeObjectId],()=>Y.resetSelection()),(be,q)=>(Q(),te("div",w8,[w("div",{ref_key:"holder",ref:t,class:Ie(["stage-holder",{grid:P(e).settings.showGrid}]),tabindex:"0",onWheel:tt(K,["prevent"]),onPointerdown:X,onDblclick:tt(z,["prevent"])},null,34),Ae(U5,{ctx:V,"active-tool":o.value,"show-settings":s.value,"show-help":r.value,"onUpdate:activeTool":q[0]||(q[0]=Z=>o.value=Z),"onUpdate:showSettings":q[1]||(q[1]=Z=>s.value=Z),"onUpdate:showHelp":q[2]||(q[2]=Z=>r.value=Z),onClearBackground:J,onBackgroundFile:oe},null,8,["active-tool","show-settings","show-help"]),Ae(h8,{show:s.value,onClose:q[3]||(q[3]=Z=>s.value=!1)},null,8,["show"]),Ae(n5,{show:r.value,onClose:q[4]||(q[4]=Z=>r.value=!1)},null,8,["show"]),i.value?(Q(),te("div",S8,[bt(R(be.$t("app.systems"))+": ",1),w("b",C8,R(i.value.systems),1),bt(" · "+R(be.$t("app.particlesBones"))+": ",1),w("b",A8,R(i.value.particles),1),bt(" · "+R(be.$t("app.rootBone"))+": ",1),q[5]||(q[5]=w("b",null,"root",-1)),w("span",T8,R(be.$t("app.hudTip")),1)])):Ce("",!0)]))}}),_8=li(E8,[["__scopeId","data-v-1023341a"]]),M8=[{x:0,y:0},{x:1,y:1}],Dm=[{x:0,y:1},{x:1,y:1}],P8=[{x:0,y:0},{x:.2,y:1},{x:.8,y:1},{x:1,y:0}],Om=[{x:0,y:0},{x:.1,y:1},{x:.9,y:1},{x:1,y:0}],Nm=[{x:0,y:1},{x:1,y:1}],$m=[{x:0,y:1},{x:1,y:1}],di=zo({visible:!1,title:"",detail:"",progress:0,indeterminate:!1,failed:!1});let hd=0;function I8(n){return new Promise(e=>window.setTimeout(e,n))}function FA(n,e){const t=++hd,i=performance.now();Object.assign(di,{visible:!0,title:n,detail:e,progress:0,indeterminate:!1,failed:!1});const s=(o,a)=>{t===hd&&(di.indeterminate=o==null,o!=null&&(di.progress=Math.min(100,Math.max(0,o))),a&&(di.detail=a))},r=async(o,a)=>{if(t!==hd)return;di.failed=o,di.indeterminate=!1,di.progress=o?di.progress:100,di.detail=a,await I8(Math.max(180,(o?850:450)-(performance.now()-i))),t===hd&&(di.visible=!1)};return{update:s,paint:()=>new Promise(o=>requestAnimationFrame(()=>o())),finish:(o=Ye("transfer.completed"))=>r(!1,o),fail:(o=Ye("transfer.failed"))=>r(!0,o)}}async function k8(n,e){if(!n.body)return e(null),n.text();const t=Number(n.headers.get("content-length")),i=Number.isFinite(t)&&t>0,s=n.body.getReader(),r=new TextDecoder;let o=0,a="";for(e(i?0:null);;){const{done:c,value:l}=await s.read();if(c)break;o+=l.byteLength,a+=r.decode(l,{stream:!0}),e(i?Math.min(1,o/t):null)}return a+=r.decode(),i&&e(1),a}const R8="3.8";function kn(n,e,t){n[e]==null&&n[t]!=null&&(n[e]=n[t]),delete n[t]}function Bm(n){if(!n||typeof n!="object")return;if(Array.isArray(n)){for(const t of n)Bm(t);return}const e=n;Array.isArray(e.curve)&&delete e.curve;for(const t of Object.values(e))Bm(t)}function F8(n){for(const e of n.bones)kn(e,"transform","inherit");for(const e of n.transform||[])kn(e,"rotateMix","mixRotate"),e.translateMix==null&&(e.translateMix=e.mixX??e.mixY),e.scaleMix==null&&(e.scaleMix=e.mixScaleX??e.mixScaleY),kn(e,"shearMix","mixShearY"),delete e.mixX,delete e.mixY,delete e.mixScaleX,delete e.mixScaleY;for(const e of n.path||[])kn(e,"rotateMix","mixRotate"),e.translateMix==null&&(e.translateMix=e.mixX??e.mixY),delete e.mixX,delete e.mixY;for(const e of n.skins)for(const t of Object.values(e.attachments||{}))for(const i of Object.values(t||{}))i.parent!=null&&kn(i,"deform","timelines")}function L8(n){for(const e of Object.values(n.slots||{}))kn(e,"color","rgba"),kn(e,"twoColor","rgba2")}function D8(n){for(const e of Object.values(n.bones||{}))for(const t of e.rotate||[])kn(t,"angle","value")}function O8(n){for(const e of Object.values(n.transform||{}))for(const t of e)kn(t,"rotateMix","mixRotate"),t.translateMix==null&&(t.translateMix=t.mixX??t.mixY),t.scaleMix==null&&(t.scaleMix=t.mixScaleX??t.mixScaleY),kn(t,"shearMix","mixShearY"),delete t.mixX,delete t.mixY,delete t.mixScaleX,delete t.mixScaleY}function N8(n){for(const e of Object.values(n.path||{})){for(const t of["position","spacing"])for(const i of e[t]||[])kn(i,t,"value");for(const t of e.mix||[])kn(t,"rotateMix","mixRotate"),t.translateMix==null&&(t.translateMix=t.mixX??t.mixY),delete t.mixX,delete t.mixY}}function $8(n){if(!n.attachments)return;const e=n.deform||(n.deform={});for(const[t,i]of Object.entries(n.attachments)){const s=e[t]||(e[t]={});for(const[r,o]of Object.entries(i)){const a=s[r]||(s[r]={});for(const[c,l]of Object.entries(o))l.deform&&(a[c]=l.deform)}}delete n.attachments}function B8(n){n.skeleton.spine=R8,F8(n);for(const e of Object.values(n.animations))L8(e),D8(e),O8(e),N8(e),$8(e);return Bm(n.animations),n}function U8(n,e,t,i,s=!1){if(s){let c=0;for(let l=0;l[...s].sort((a,c)=>a-c);let o=!0;for(;o;){o=!1;const a=r();for(let c=0;cf&&(f=m,h=p)}h>=0&&(s.add(h),o=!0)}}return r().map(a=>n[a])}function nx(n,e,t,i,s){const r=t-e+1;if(r<2)return 0;const o=s?e:t,a=s?e+1:t-1,c=s?e+2:t-2,l=Math.abs(n[a].frame-n[o].frame);if(r>=3&&l>0&&Math.abs(Math.abs(n[c].frame-n[a].frame)-l)<1e-6){const u=n[o].values[i],h=n[a].values[i],f=n[c].values[i];return s?(-3*u+4*h-f)/(2*l):(3*u-4*h+f)/(2*l)}const d=n[a].frame-n[o].frame;return d?(n[a].values[i]-n[o].values[i])/d:0}function sx(n,e,t){const i=n[t].frame-n[e].frame,s=[];for(let r=0;rh.values[r])),l=Math.max(...n.slice(e,t+1).map(h=>h.values[r])),d=o+nx(n,e,t,r,!0)*i/3,u=a-nx(n,e,t,r,!1)*i/3;s.push([Math.max(c,Math.min(l,d)),Math.max(c,Math.min(l,u))])}return{values:s}}function V8(n,e,t,i,s){const r=1-s;return r*r*r*n+3*r*r*s*e+3*r*s*s*t+s*s*s*i}function X8(n,e,t,i,s,r=!1){if(r){let l=0;for(let d=0;d[...s].sort((c,l)=>c-l);let o=!0;for(;o;){o=!1;const c=r();for(let l=0;lm&&(m=v,p=g)}p>=0&&(s.add(p),o=!0)}}const a=r();return{samples:a.map(c=>n[c]),controls:a.slice(0,-1).map((c,l)=>sx(n,c,a[l+1]))}}function Y8(n){if(!n.length)return[];const e=[n[0]];for(let t=1;t180;)i-=360;for(;i-e[t-1]<-180;)i+=360;e.push(i)}return e}function mi(n){if(!Number.isFinite(n))return 0;const e=Math.round(n*1e5)/1e5;return Object.is(e,-0)?0:e}function z8(n,e,t,i){const s=Math.max(2,Math.min(16,Math.round(Number(n.trailGridRows)||2))),r=Math.max(2,Math.min(32,Math.round(Number(n.trailGridCols)||2))),o=Math.max(2,t.length),a=e.lengthMode==="random"?Math.max(1,Number(e.lengthMin)||0,Number(e.lengthMax)||0):Math.max(.001,Number(e.length)||100),c=e.widthSizeMode==="random"?Math.max(1,Number(e.widthMin)||0,Number(e.widthMax)||0):Math.max(.001,Number(e.width)||100),l=(Number(e.rotation)||0)*Math.PI/180,d=Math.cos(l),u=Math.sin(l),h=[],f=[],p=[],m=[],g=[];for(let b=0;b=0;b--)g.push({col:b,row:s-1});for(let b=s-2;b>=1;b--)g.push({col:0,row:b});const v=g.length;for(let b=1;b|\s]+/g,"_").replace(/^_+|_+$/g,"")||e}function OA(n,e){let t=n,i=2;for(;e.has(t);)t=`${n}_${i++}`;return e.add(t),t}function H8(n){return n.replace(/\.[^./\\]+$/,"")}function NA(n,e){return H8([n,e].filter(Boolean).join("/").replace(/\\/g,"/").replace(/\/{2,}/g,"/").replace(/^\.\//,""))}function G8(n){var i,s;const e=Number(((i=n==null?void 0:n.orig)==null?void 0:i.width)??(n==null?void 0:n.width))||0,t=Number(((s=n==null?void 0:n.orig)==null?void 0:s.height)??(n==null?void 0:n.height))||0;return{width:e,height:t}}function pd(n){return Math.round(Math.max(0,Math.min(1,n))*255).toString(16).padStart(2,"0")}function cx(n,e){return[(n>>16&255)/255,(n>>8&255)/255,(n&255)/255,Math.max(0,Math.min(1,e))]}function Dl(n,e){return mi(n/e)}function W8(n,e){const t=n.config,i=t.lifeMode==="fixed"?Math.max(0,Number(t.lifeMin)||0):Math.max(0,Number(t.lifeMin)||0,Number(t.lifeMax)||0),s=Math.max(0,Number(t.delay)||0);let r;return t.mode!=="stream"?r=s+i:t.streamBehavior!=="loop"?r=s+Math.max(1/e,Number(t.duration)||0)+i:r=s+Wn(t,e).total/e,Math.max(1,Math.ceil(r*e)+1)}function q8(n,e,t){const i=n.config;if(i.mode!=="stream"||i.streamBehavior!=="loop")return new Set;const s=IS(i,e),r=Math.max(1,t)/Math.max(1,e);return new Set([Math.round(s.start*r),Math.round(s.end*r)])}function Au(n,e){return e?n.boneName:`${n.spawnId??"legacy"}_${n.boneName}`}function K8(n,e,t,i){const s=new Set;for(const r of n)for(const o of r)s.add(Au(o,e));return[...s].sort().map((r,o)=>({key:r,name:OA(`${i}_${o}`,t),states:n.map(a=>a.find(c=>Au(c,e)===r)||null)}))}function dx(n,e){const t=new Set(e.states.map(i=>i==null?void 0:i.resourceId).filter(i=>typeof i=="number"));return n.config.imageResources.filter(i=>t.has(i.id))}function J8(n,e,t,i){const s=e*t/i,r=Math.min(n.states.length-1,Math.max(0,Math.floor(s))),o=Math.min(n.states.length-1,r+1),a=n.states[r],c=n.states[o];if(!a||!c||Au(a,!0)!==Au(c,!0)||a.spawnId!==c.spawnId)return a;const l=s-r;if(l<=1e-6)return a;const d=(h,f)=>(h??0)+((f??h??0)-(h??0))*l,u=a.trailState&&c.trailState&&a.trailState.resourceId===c.trailState.resourceId?{...a.trailState,width:d(a.trailState.width,c.trailState.width),alpha:d(a.trailState.alpha,c.trailState.alpha),bones:a.trailState.bones.map((h,f)=>{const p=c.trailState.bones[f]||h;return{...h,worldX:d(h.worldX??h.x,p.worldX??p.x),worldY:d(h.worldY??h.y,p.worldY??p.y),worldRotation:d(h.worldRotation??-h.rotation,p.worldRotation??-p.rotation)}})}:a.trailState;return{...a,worldX:d(a.worldX,c.worldX),worldY:d(a.worldY,c.worldY),worldRotation:d(a.worldRotation,c.worldRotation),worldScaleX:d(a.worldScaleX,c.worldScaleX),worldScaleY:d(a.worldScaleY,c.worldScaleY),alpha:d(a.alpha,c.alpha),trailState:u}}function ux(n,e){return!n||n==="跟随导出"?e.keyframeCurve:n==="贝塞尔"?"bezier":"linear"}function ca(n,e,t,i,s,r=new Set,o=new Set,a=s.keyframeCurve){if(!n.length)return[];const c=new Set(r);for(const u of o)c.add(u);const l=a==="bezier"&&s.spineVersion!=="3.8"?DA(n,i,c,o):{samples:LA(n,i,c,o),controls:[]},d=l.samples.map(u=>{const h={time:Dl(u.frame,e)};return t.forEach((f,p)=>{h[f]=mi(u.values[p])}),o.has(u.frame)&&(h.curve="stepped"),h});for(let u=0;u0&&s&&e.add(t-1),i&&e.add(t))}return e}function Q8(n){const e=new Set;for(let t=0;t0&&s&&e.add(t-1),i&&e.add(t))}return e}function iV(n,e){var i;if(!n.shapeEnabled||!((i=n.shapeCurve)!=null&&i.length))return 1;const t=[...n.shapeCurve].sort((s,r)=>s.x-r.x);if(e<=t[0].x)return Math.max(0,t[0].y);for(let s=1;s{(o!==r||i.has(a))&&(s.push(t(o,a)),r=o)}),s}function sV(n,e,t){const i=n.imageMode==="sequence"?n.sequenceFrames[e]:void 0,s=(i==null?void 0:i.name)||n.textureName||`image_${n.id}`,r=(i==null?void 0:i.texture)||n.texture,o=G8(r);(!o.width||!o.height)&&t.push({code:"missing-image",message:Ye("errors.missingImageWarning",{file:s})});const a=o.width||1,c=o.height||1;return{path:NA(n.textureFolder,s),x:mi((.5-n.anchorX)*a),y:mi((n.anchorY-.5)*c),width:mi(a),height:mi(c)}}function hx(n,e){const t=[];for(const s of e){const r=s.imageMode==="sequence"?Math.max(1,s.sequenceFrames.length):1;for(let o=0;o1;return new Map(t.map((s,r)=>[s,i?`${n}_${r}`:n]))}function rV(n,e,t,i,s=i.keyframeCurve,r=new Set,o=new Set){if(!n.length)return[];const a=new Set;for(let h=1;h({frame:f,values:h})),l=1/255,d=s==="bezier"&&i.spineVersion!=="3.8"?DA(c,[l,l,l,.01],a,r):{samples:LA(c,[l,l,l,.01],a,r),controls:[]},u=d.samples.map(h=>{const f={time:Dl(h.frame,t),color:`${pd(h.values[0])}${pd(h.values[1])}${pd(h.values[2])}${pd(h.values[3])}`};return r.has(h.frame)&&(f.curve="stepped"),f});if(d.controls.length)for(let h=0;h({time:Dl(p,s),name:f??null}),c);d.length&&(l.attachment=d);const u=rV(i,t,s,r,o,a,c);u.length&&(l.rgba=u)}function px(n){var m;const e=n.settings,t=Math.max(1,Number(n.timeline.fps)||30),i=Math.max(1,Math.round(e.fps||30)),s=e.integerFrameAlignment?i:t,r=[],o=n.systems.filter(g=>g.visible!==!1),a=Xa(n.systems),c={skeleton:{hash:"",spine:e.spineVersion,x:0,y:0,width:0,height:0,images:e.imagesPath||"./images/"},bones:[{name:"root"}],slots:[],skins:[{name:"default",attachments:{}}],animations:{}};e.omitFps||(c.skeleton.fps=i);const l=c.skins[0].attachments,d=new Set(["root"]),u=[...new Set([...n.timeline.animations.length?n.timeline.animations:["animation"],...o.map(g=>g.animation||"animation")])],h=new Map;for(const g of o){const v=((m=g.frames)==null?void 0:m.length)||0,y=a.has(g.id)?v:Math.min(v,W8(g,t)),b=(g.frames||[]).slice(0,y);b.length||r.push({code:"empty-cache",message:Ye("errors.emptyCacheWarning",{name:g.config.name})});const x=OA(j8(g.config.name,`system_${g.id}`),d);c.bones.push({name:x,parent:"root"});const C=K8(b,e.bonePool,d,x),T=Math.max(0,(y-1)/t),S=Math.max(1,Math.ceil(T*s)+1),E=q8(g,t,s),_=h.get(g.animation)||[];_.push({system:g,tracks:C,targetFrames:S,boundaryFrames:E,attachmentPrefix:x}),h.set(g.animation,_);for(const I of C){c.bones.push({name:I.name,parent:x});const M=dx(g,I),k=new Set(M.map(Y=>Y.blend)),B=[],D=[];for(const Y of k){const L=`${I.name}_${Y}`;B.push(L),c.slots.push({name:L,bone:I.name,color:"ffffff00",blend:rx[Y]});const N=l[L]||(l[L]={}),F=M.filter(X=>X.blend===Y),$=hx(x,F);for(const X of F){const z=X.imageMode==="sequence"?Math.max(1,X.sequenceFrames.length):1;for(let K=0;K{var K;return((K=z==null?void 0:z.trailState)==null?void 0:K.resourceId)===Y.id}))continue;const L=Math.max(2,Math.min(16,Math.round(Y.boneCount||3))),N=[];for(let z=0;zc.bones.findIndex(K=>K.name===z)),X=NA("",Y.textureName||`trail_${Y.id}`);(l[F]||(l[F]={}))[`trail_${Y.id}`]=z8(g.config,Y,$,X),Y.texture||r.push({code:"missing-image",message:Ye("errors.missingTrailImageWarning",{file:Y.textureName||Y.id})})}const G=new Set([...B,...D]),V=c.slots.filter(Y=>G.has(String(Y.name)));V.length&&(c.slots=c.slots.filter(Y=>!V.includes(Y)),c.slots.push(...V.filter(Y=>D.includes(String(Y.name))),...V.filter(Y=>B.includes(String(Y.name)))))}}for(const g of u){const v=h.get(g)||[],y={bones:{},slots:{}};let b=!1;for(const{system:x,tracks:C,targetFrames:T,boundaryFrames:S,attachmentPrefix:E}of v)for(const _ of C){const I=Array.from({length:T},(J,oe)=>J8(_,oe,t,s)),M=I.map(J=>!!(J!=null&&J.active)),k=[],B=[],D=[];I.forEach((J,oe)=>{J!=null&&J.active&&(k.push({frame:oe,values:[J.worldX??J.x,J.worldY??J.y]}),B.push(J.worldRotation??J.rotation),D.push({frame:oe,values:[J.worldScaleX??J.scaleX,J.worldScaleY??J.scaleY]}))});const G=Y8(B),V=k.map((J,oe)=>({frame:J.frame,values:[G[oe]??0]})),Y=Z8(I);for(const J of S)Y.add(J);const L=Q8(I),N={},F=ca(k,s,["x","y"],[ox,ox],e,Y,L),$=ca(V,s,["value"],[lx],e,Y,L),X=ca(D,s,["x","y"],[fd,fd],e,Y,L);F.length&&(N.translate=F),$.length&&(N.rotate=$),X.length&&(N.scale=X),Object.keys(N).length&&(y.bones[_.name]=N,b=!0);const z=dx(x,_),K=new Set(z.map(J=>J.blend));for(const J of K){const oe=z.filter(Z=>Z.blend===J),le=hx(E,oe),ve=[],Se=[];let fe=16777215;for(let Z=0;ZU.id===se.resourceId):void 0,H=!!se&&M[Z]&&se.imageVisible!==!1&&(j==null?void 0:j.blend)===J;se&&(j==null?void 0:j.blend)===J&&(fe=se.colorHex);const O=H?le.get(`${j.id}_${se.imageFrameIndex??0}`):void 0;ve.push(O??null),Se.push(cx(fe,H?se.alpha:0))}const be=oe.filter(Z=>Z.independentAlpha==="curve").map(Z=>ux(Z.alphaCurveMode,e)),q=be.length?be.includes("bezier")?"bezier":"linear":ux(x.config.alphaMode==="curve"?x.config.curveMode:void 0,e);fx(y,`${_.name}_${J}`,ve,Se,s,e,q,L,S),ve.some(Boolean)&&(b=!0)}if(x.config.trail)for(const J of x.config.trailResources){const oe=Math.max(2,Math.min(16,Math.round(J.boneCount||3))),le=I.map(O=>{var U;return((U=O==null?void 0:O.trailState)==null?void 0:U.resourceId)===J.id?O.trailState:void 0}),ve=le.find(O=>!!O);if(!ve)continue;const Se=tV(le),fe=eV(le),be=J.widthSizeMode==="random"?Math.max(1,Number(J.widthMin)||0,Number(J.widthMax)||0):Math.max(.001,Number(J.width)||100);let q=ve;const Z=le.map(O=>(O&&(q=O),q));for(let O=0;O{const Le=ge==null?void 0:ge.bones[Math.min(ge.bones.length-1,O)];if(!Le)return;const Ee={x:Le.worldX??Le.x,y:Le.worldY??Le.y,rotation:Le.worldRotation??-Le.rotation};U.push({frame:Ge,values:[Ee.x,Ee.y]}),W.push({frame:Ge,values:[Ee.rotation]}),ee.push({frame:Ge,values:[1,Math.max(0,ge.width/be)*ue]})});const xe=`${_.name}_trail_${J.id}_${O}`,ye={},Ne=ca(U,s,["x","y"],[ax,ax],e,ne,fe),Be=ca(W,s,["value"],[lx],e,ne,fe),de=ca(ee,s,["x","y"],[fd,fd],e,ne,fe);Ne.length&&(ye.translate=Ne),Be.length&&(ye.rotate=Be),de.length&&(ye.scale=de),Object.keys(ye).length&&(y.bones[xe]=ye)}const se=le.map(()=>`trail_${J.id}`);let j=ve.colorHex;const H=le.map(O=>(O&&(j=O.colorHex),cx(j,O?O.alpha:0)));fx(y,`${_.name}_trail_${J.id}`,se,H,s,e,e.keyframeCurve,fe,S),b=!0}}(b||!e.excludeEmptyAnimations)&&(c.animations[g]=y)}!Object.keys(c.animations).length&&!e.excludeEmptyAnimations&&(c.animations.animation={bones:{},slots:{}});const f=e.spineVersion==="3.8"?B8(c):c,p=JSON.stringify(f,null,2);return{json:f,text:p,warnings:r,particleSystemCount:o.length,animationCount:Object.keys(f.animations).length,boneCount:f.bones.length}}function oV(n,e){const t=new Blob([n.text],{type:"application/json;charset=utf-8"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=/\.json$/i.test(e)?e:`${e||"SpineParticle"}.json`,s.style.display="none",document.body.appendChild(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(i),1e3)}class BQ{constructor(){A(this,"array",[])}add(e){const t=this.contains(e);return this.array[e|0]=e|0,!t}contains(e){return this.array[e|0]!==void 0}remove(e){this.array[e|0]=void 0}clear(){this.array.length=0}}class aV{constructor(){A(this,"entries",{});A(this,"size",0)}add(e){const t=this.entries[e];return this.entries[e]=!0,t?!1:(this.size++,!0)}addAll(e){const t=this.size;for(let i=0,s=e.length;i1&&(this.r=1),this.g<0?this.g=0:this.g>1&&(this.g=1),this.b<0?this.b=0:this.b>1&&(this.b=1),this.a<0?this.a=0:this.a>1&&(this.a=1),this}static rgba8888ToColor(e,t){e.r=((t&4278190080)>>>24)/255,e.g=((t&16711680)>>>16)/255,e.b=((t&65280)>>>8)/255,e.a=(t&255)/255}static rgb888ToColor(e,t){e.r=((t&16711680)>>>16)/255,e.g=((t&65280)>>>8)/255,e.b=(t&255)/255}toRgb888(){const e=t=>`0${(t*255).toString(16)}`.slice(-2);return+`0x${e(this.r)}${e(this.g)}${e(this.b)}`}static fromString(e,t=new bn){return t.setFromString(e)}};A(bn,"WHITE",new bn(1,1,1,1)),A(bn,"RED",new bn(1,0,0,1)),A(bn,"GREEN",new bn(0,1,0,1)),A(bn,"BLUE",new bn(0,0,1,1)),A(bn,"MAGENTA",new bn(1,0,1,1));let at=bn;const ni=class ni{static clamp(e,t,i){return ei?i:e}static cosDeg(e){return Math.cos(e*ni.degRad)}static sinDeg(e){return Math.sin(e*ni.degRad)}static atan2Deg(e,t){return Math.atan2(e,t)*ni.radDeg}static signum(e){return e>0?1:e<0?-1:0}static toInt(e){return e>0?Math.floor(e):Math.ceil(e)}static cbrt(e){const t=Math.pow(Math.abs(e),.3333333333333333);return e<0?-t:t}static randomTriangular(e,t){return ni.randomTriangularWith(e,t,(e+t)*.5)}static randomTriangularWith(e,t,i){const s=Math.random(),r=t-e;return s<=(i-e)/r?e+Math.sqrt(s*r*(i-e)):t-Math.sqrt((1-s)*r*(t-i))}static isPowerOfTwo(e){return e&&(e&e-1)===0}};A(ni,"epsilon",1e-5),A(ni,"epsilon2",ni.epsilon*ni.epsilon),A(ni,"PI",3.1415927),A(ni,"PI2",ni.PI*2),A(ni,"invPI2",1/ni.PI2),A(ni,"radiansToDegrees",180/ni.PI),A(ni,"radDeg",ni.radiansToDegrees),A(ni,"degreesToRadians",ni.PI/180),A(ni,"degRad",ni.degreesToRadians);let ke=ni;const En=class En{apply(e,t,i){return t===void 0||i===void 0?this.applyInternal(e):e+(t-e)*this.applyInternal(i)}};A(En,"linear",new class extends En{applyInternal(e){return e}}),A(En,"smooth",new class extends En{applyInternal(e){return e*e*(3-2*e)}}),A(En,"slowFast",new class extends En{applyInternal(e){return e*e}}),A(En,"fastSlow",new class extends En{applyInternal(e){return(e-1)*(e-1)*-1+1}}),A(En,"circle",new class extends En{applyInternal(e){return e<=.5?(e*=2,(1-Math.sqrt(1-e*e))/2):(e--,e*=2,(Math.sqrt(1-e*e)+1)/2)}});let $a=En;class lV extends $a{constructor(t){super();A(this,"power",2);this.power=t}applyInternal(t){return t<=.5?Math.pow(t*2,this.power)/2:Math.pow((t-1)*2,this.power)/(this.power%2===0?-2:2)+1}}class UQ extends lV{constructor(e){super(e)}applyInternal(e){return Math.pow(e-1,this.power)*(this.power%2===0?-1:1)+1}}const Dr=class Dr{static arrayCopy(e,t,i,s,r){for(let o=t,a=s;o=t?e:Dr.setArraySize(e,t,i)}static newArray(e,t){const i=[];for(let s=0;s0?this.items.pop():this.instantiator()}free(e){var t;(t=e.reset)==null||t.call(e),this.items.push(e)}freeAll(e){for(let t=0;tthis.maxDelta&&(this.delta=this.maxDelta),this.lastTime=e,this.frameCount++,this.frameTime>1&&(this.framesPerSecond=this.frameCount/this.frameTime,this.frameTime=0,this.frameCount=0)}}class YQ{constructor(e=32){A(this,"values");A(this,"addedValues",0);A(this,"lastValue",0);A(this,"mean",0);A(this,"dirty",!0);this.values=new Array(e)}hasEnoughData(){return this.addedValues>=this.values.length}addValue(e){this.addedValuesthis.values.length-1&&(this.lastValue=0),this.dirty=!0}getMean(){if(this.hasEnoughData()){if(this.dirty){let e=0;for(let t=0;t{d.width=parseInt(i[1]),d.height=parseInt(i[2])},s.format=()=>{},s.filter=d=>{d.minFilter=Ke.enumValue(ja,i[1]),d.magFilter=Ke.enumValue(ja,i[2])},s.repeat=d=>{i[1].indexOf("x")!==-1&&(d.uWrap=Ha.Repeat),i[1].indexOf("y")!==-1&&(d.vWrap=Ha.Repeat)},s.pma=d=>{d.pma=i[1]==="true"};var r={};r.xy=d=>{d.x=parseInt(i[1]),d.y=parseInt(i[2])},r.size=d=>{d.width=parseInt(i[1]),d.height=parseInt(i[2])},r.bounds=d=>{d.x=parseInt(i[1]),d.y=parseInt(i[2]),d.width=parseInt(i[3]),d.height=parseInt(i[4])},r.offset=d=>{d.offsetX=parseInt(i[1]),d.offsetY=parseInt(i[2])},r.orig=d=>{d.originalWidth=parseInt(i[1]),d.originalHeight=parseInt(i[2])},r.offsets=d=>{d.offsetX=parseInt(i[1]),d.offsetY=parseInt(i[2]),d.originalWidth=parseInt(i[3]),d.originalHeight=parseInt(i[4])},r.rotate=d=>{const u=i[1];u==="true"?d.degrees=90:u!=="false"&&(d.degrees=parseInt(u))},r.index=d=>{d.index=parseInt(i[1])};let o=t.readLine();for(;o&&o.trim().length===0;)o=t.readLine();for(;!(!o||o.trim().length===0||t.readEntry(i,o)===0);)o=t.readLine();let a=null,c=null,l=null;for(;o!==null;)if(o.trim().length===0)a=null,o=t.readLine();else if(a){const d=new BA(a,o);for(;;){const u=t.readEntry(i,o=t.readLine());if(u===0)break;const h=r[i[0]];if(h)h(d);else{c||(c=[]),l||(l=[]),c.push(i[0]);const f=[];for(let p=0;p0&&l&&l.length>0&&(d.names=c,d.values=l,c=null,l=null),d.u=d.x/a.width,d.v=d.y/a.height,d.degrees===90?(d.u2=(d.x+d.height)/a.width,d.v2=(d.y+d.width)/a.height):(d.u2=(d.x+d.width)/a.width,d.v2=(d.y+d.height)/a.height),this.regions.push(d)}else{for(a=new hV(o.trim());t.readEntry(i,o=t.readLine())!==0;){const d=s[i[0]];d&&d(a)}this.pages.push(a)}}findRegion(e){for(let t=0;t=this.lines.length?null:this.lines[this.index++]}readEntry(e,t){if(!t||(t=t.trim(),t.length===0))return 0;const i=t.indexOf(":");if(i===-1)return 0;e[0]=t.substr(0,i).trim();for(let s=1,r=i+1;;s++){const o=t.indexOf(",",r);if(o===-1)return e[s]=t.substr(r).trim(),s;if(e[s]=t.substr(r,o-r).trim(),r=o+1,s===4)return 4}}}class hV{constructor(e){A(this,"name");A(this,"minFilter",ja.Nearest);A(this,"magFilter",ja.Nearest);A(this,"uWrap",Ha.ClampToEdge);A(this,"vWrap",Ha.ClampToEdge);A(this,"texture",null);A(this,"width",0);A(this,"height",0);A(this,"pma",!1);A(this,"regions",[]);this.name=e}setTexture(e){this.texture=e,e.setFilters(this.minFilter,this.magFilter),e.setWraps(this.uWrap,this.vWrap);for(const t of this.regions)t.texture=e}}class BA extends $A{constructor(t,i){super();A(this,"page");A(this,"name");A(this,"x",0);A(this,"y",0);A(this,"offsetX",0);A(this,"offsetY",0);A(this,"originalWidth",0);A(this,"originalHeight",0);A(this,"index",0);A(this,"degrees",0);A(this,"names",null);A(this,"values",null);this.page=t,this.name=i,t.regions.push(this)}}const ku=class ku{constructor(e){A(this,"name");A(this,"timelineAttachment");A(this,"timelineSlots",ku.empty);if(!e)throw new Error("name cannot be null.");this.name=e,this.timelineAttachment=this}isTimelineActive(e,t,i){let s=e[t];if(s.bone.isActive()){const r=(i?s.getAppliedPose():s.getPose()).getAttachment();if(r!=null&&r.timelineAttachment===this)return!0}for(let r=0,o=this.timelineSlots.length;r>1)*c;const l=i.appliedPose.deform;let d=this.vertices;const u=this.bones;if(!u){l.length>0&&(d=l);const m=i.bone.appliedPose,g=m.worldX,v=m.worldY,y=m.a,b=m.b,x=m.c,C=m.d;for(let T=s,S=a;S=this.regions.length&&(t=this.regions.length-1),t}getUVs(e){return this.uvs[e]}hasPathSuffix(){return this.pathSuffix}getPath(e,t){if(!this.pathSuffix)return e;let i=e;const s=(this.start+t).toString();for(let r=this.digits-s.length;r>0;r--)i+="0";return i+=s,i}static nextID(){return Ca._nextID++}};A(Ca,"_nextID",0);let Wa=Ca;var Oi;(function(n){n[n.hold=0]="hold",n[n.once=1]="once",n[n.loop=2]="loop",n[n.pingpong=3]="pingpong",n[n.onceReverse=4]="onceReverse",n[n.loopReverse=5]="loopReverse",n[n.pingpongReverse=6]="pingpongReverse"})(Oi||(Oi={}));const UA=[Oi.hold,Oi.once,Oi.loop,Oi.pingpong,Oi.onceReverse,Oi.loopReverse,Oi.pingpongReverse];class ev{constructor(e,t,i){A(this,"name");A(this,"timelines",[]);A(this,"timelineIds");A(this,"bones");A(this,"color",new at(1,1,1,1));A(this,"duration");if(!e)throw new Error("name cannot be null.");this.name=e,this.duration=i,this.timelineIds=new aV,this.bones=[],this.setTimelines(t)}setTimelines(e){if(!e)throw new Error("timelines cannot be null.");this.timelines=e;const t=e.length;this.timelineIds.clear(),this.bones.length=0;const i=new Set,s=e;for(let r=0;r0&&(t%=this.duration));const u=this.timelines;for(let h=0,f=u.length;ht)return r-i;return s-i}};function fV(n){return typeof n=="object"&&n!==null&&typeof n.slotIndex=="number"}class qo extends zt{constructor(t,i,...s){super(t,...s);A(this,"curves");this.curves=Ke.newFloatArray(t+i*18),this.curves[t-1]=1}setLinear(t){this.curves[t]=0}setStepped(t){this.curves[t]=1}shrink(t){const i=this.getFrameCount()+t*18;if(this.curves.length>i){const s=Ke.newFloatArray(i);Ke.arrayCopy(this.curves,0,s,0,i),this.curves=s}}setBezier(t,i,s,r,o,a,c,l,d,u,h){const f=this.curves;let p=this.getFrameCount()+t*18;s===0&&(f[i]=2+p);const m=(r-a*2+l)*.03,g=(o-c*2+d)*.03,v=((a-l)*3-r+u)*.006,y=((c-d)*3-o+h)*.006;let b=m*2+v,x=g*2+y,C=(a-r)*.3+m+v*.16666667,T=(c-o)*.3+g+y*.16666667,S=r+C,E=o+T;for(let _=p+18;p<_;p+=2)f[p]=S,f[p+1]=E,C+=b,T+=x,b+=v,x+=y,S+=C,E+=T}getBezierValue(t,i,s,r){const o=this.curves;if(o[r]>t){const d=this.frames[i],u=this.frames[i+s];return u+(t-d)/(o[r]-d)*(o[r+1]-u)}const a=r+18;for(r+=2;r=t){const d=o[r-2],u=o[r-1];return u+(t-d)/(o[r]-d)*(o[r+1]-u)}i+=this.getFrameEntries();const c=o[a-2],l=o[a-1];return l+(t-c)/(this.frames[i]-c)*(this.frames[i+s]-l)}}class nr extends qo{constructor(e,t,i){super(e,t,i)}getFrameEntries(){return 2}setFrame(e,t,i){e<<=1,this.frames[e]=t,this.frames[e+1]=i}getCurveValue(e){const t=this.frames;let i=t.length-2;for(let r=2;r<=i;r+=2)if(t[r]>e){i=r-2;break}const s=this.curves[i>>1];switch(s){case 0:{const r=t[i],o=t[i+1];return o+(e-r)/(t[i+2]-r)*(t[i+2+1]-o)}case 1:return t[i+1]}return this.getBezierValue(e,i,1,s-2)}getRelativeValue(e,t,i,s,r,o){if(e>2];switch(f){case 0:{const p=u[h];c=u[h+1],l=u[h+2],d=u[h+3];const m=(i-p)/(u[h+4]-p);c+=(u[h+4+1]-c)*m,l+=(u[h+4+2]-l)*m,d+=(u[h+4+3]-d)*m;break}case 1:c=u[h+1],l=u[h+2],d=u[h+3];break;default:c=this.getBezierValue(i,h,1,f-2),l=this.getBezierValue(i,h,2,f+18-2),d=this.getBezierValue(i,h,3,f+36-2)}if(s!==1)if(r===We.setup){const p=e.data.setupPose.color;c=p.r+(c-p.r)*s,l=p.g+(l-p.g)*s,d=p.b+(d-p.b)*s}else c=a.r+(c-a.r)*s,l=a.g+(l-a.g)*s,d=a.b+(d-a.b)*s;a.r=c<0?0:c>1?1:c,a.g=l<0?0:l>1?1:l,a.b=d<0?0:d>1?1:d}}class QA extends nr{constructor(t,i,s){super(t,i,`${ot.alpha}|${s}`);A(this,"slotIndex",0);this.slotIndex=s}apply(t,i,s,r,o,a,c,l,d){const u=t.slots[this.slotIndex];if(!u.bone.active)return;const h=(d?u.appliedPose:u.pose).color;let f=0;const p=this.frames;if(s1?1:f}}class eT extends mh{constructor(e,t,i){super(e,t,i,`${ot.rgb}|${i}`,`${ot.alpha}|${i}`,`${ot.rgb2}|${i}`)}getFrameEntries(){return 8}setFrame(e,t,i,s,r,o,a,c,l){e<<=3,this.frames[e]=t,this.frames[e+1]=i,this.frames[e+2]=s,this.frames[e+3]=r,this.frames[e+4]=o,this.frames[e+5]=a,this.frames[e+6]=c,this.frames[e+7]=l}apply1(e,t,i,s,r,o){const a=t.color,c=t.darkColor;let l=0,d=0,u=0;const h=this.frames;if(i>3];switch(y){case 0:{const b=h[v];f=h[v+1],p=h[v+2],m=h[v+3],g=h[v+4],l=h[v+5],d=h[v+6],u=h[v+7];const x=(i-b)/(h[v+8]-b);f+=(h[v+8+1]-f)*x,p+=(h[v+8+2]-p)*x,m+=(h[v+8+3]-m)*x,g+=(h[v+8+4]-g)*x,l+=(h[v+8+5]-l)*x,d+=(h[v+8+6]-d)*x,u+=(h[v+8+7]-u)*x;break}case 1:f=h[v+1],p=h[v+2],m=h[v+3],g=h[v+4],l=h[v+5],d=h[v+6],u=h[v+7];break;default:f=this.getBezierValue(i,v,1,y-2),p=this.getBezierValue(i,v,2,y+18-2),m=this.getBezierValue(i,v,3,y+36-2),g=this.getBezierValue(i,v,4,y+54-2),l=this.getBezierValue(i,v,5,y+72-2),d=this.getBezierValue(i,v,6,y+90-2),u=this.getBezierValue(i,v,7,y+108-2)}if(s===1)a.set(f,p,m,g);else if(r===We.setup){const b=e.data.setupPose;let x=b.color;a.set(x.r+(f-x.r)*s,x.g+(p-x.g)*s,x.b+(m-x.b)*s,x.a+(g-x.a)*s),x=b.darkColor,l=x.r+(l-x.r)*s,d=x.g+(d-x.g)*s,u=x.b+(u-x.b)*s}else a.add((f-a.r)*s,(p-a.g)*s,(m-a.b)*s,(g-a.a)*s),l=c.r+(l-c.r)*s,d=c.g+(d-c.g)*s,u=c.b+(u-c.b)*s;c.r=l<0?0:l>1?1:l,c.g=d<0?0:d>1?1:d,c.b=u<0?0:u>1?1:u}}class tT extends mh{constructor(e,t,i){super(e,t,i,`${ot.rgb}|${i}`,`${ot.rgb2}|${i}`)}getFrameEntries(){return 7}setFrame(e,t,i,s,r,o,a,c){e*=7,this.frames[e]=t,this.frames[e+1]=i,this.frames[e+2]=s,this.frames[e+3]=r,this.frames[e+4]=o,this.frames[e+5]=a,this.frames[e+6]=c}apply1(e,t,i,s,r,o){const a=t.color,c=t.darkColor;let l=0,d=0,u=0,h=0,f=0,p=0;const m=this.frames;if(i1?1:l,a.g=d<0?0:d>1?1:d,a.b=u<0?0:u>1?1:u,c.r=h<0?0:h>1?1:h,c.g=f<0?0:f>1?1:f,c.b=p<0?0:p>1?1:p}}class Ol extends zt{constructor(t,i){super(t,`${ot.attachment}|${i}`);A(this,"slotIndex",0);A(this,"attachmentNames");this.slotIndex=i,this.attachmentNames=new Array(t),this.instant=!0}getFrameCount(){return this.frames.length}setFrame(t,i,s){this.frames[t]=i,this.attachmentNames[t]=s}apply(t,i,s,r,o,a,c,l,d){const u=t.slots[this.slotIndex];if(!u.bone.active)return;const h=d?u.appliedPose:u.pose;l||st){const l=this.frames[i];return s[r+1]*(t-l)/(s[r]-l)}const o=r+18;for(r+=2;r=t){const l=s[r-2],d=s[r-1];return d+(t-l)/(s[r]-l)*(s[r+1]-d)}const a=s[o-2],c=s[o-1];return c+(1-c)*(t-a)/(this.frames[i+this.getFrameEntries()]-a)}apply(t,i,s,r,o,a,c,l,d){const u=t.slots;if(!this.attachment.isTimelineActive(u,this.slotIndex,d))return;const h=this.attachment.timelineSlots,f=this.frames;if(s=f[f.length-1])g=0,p=this.vertices[f.length-1],m=null;else{const y=zt.search(f,s);g=this.getCurvePercent(s,y),p=this.vertices[y],m=this.vertices[y+1]}const v=this.vertices[0].length;this.applyToSlot(u[this.slotIndex],d,p,m,g,v,o,a,c);for(const y of h)this.applyToSlot(u[y],d,p,m,g,v,o,a,c)}applyBeforeFirst(t,i,s,r){if(!t.bone.active)return;const o=i?t.appliedPose:t.pose;if(o.attachment==null||o.attachment.timelineAttachment!==this.attachment)return;const a=o.deform;switch(a.length===0&&(r=We.setup),r){case We.setup:a.length=0;break;case We.first:{if(s===1){a.length=0;return}const c=this.vertices[0].length;a.length=c;const l=a,d=o.attachment;if(d.bones===null){const u=d.vertices;for(let h=0;h>4,d=c.attachment.sequence.regions.length;const u=UA[o&15];if(u!==Oi.hold)switch(l+=(s-r)/a+1e-5|0,u){case Oi.once:l=Math.min(d-1,l);break;case Oi.loop:l%=d;break;case Oi.pingpong:{const h=(d<<1)-2;l=h===0?0:l%h,l>=d&&(l=h-l);break}case Oi.onceReverse:l=Math.max(d-1-l,0);break;case Oi.loopReverse:l=d-1-l%d;break;case Oi.pingpongReverse:{const h=(d<<1)-2;l=h===0?0:(l+d-1)%h,l>=d&&(l=h-l)}}c.sequenceIndex=l}};A(_n,"ENTRIES",3),A(_n,"MODE",1),A(_n,"DELAY",2);let _u=_n;const Fu=class Fu extends zt{constructor(t){super(t,...Fu.propertyIds);A(this,"events");this.events=new Array(t),this.instant=!0}getFrameCount(){return this.frames.length}setFrame(t,i){this.frames[t]=i.time,this.events[t]=i}apply(t,i,s,r,o,a,c,l,d){if(!r)return;const u=this.frames,h=this.frames.length;if(i>s)this.apply(null,i,Number.MAX_VALUE,r,0,a,!1,!1,!1),i=-1;else if(i>=u[h-1])return;if(s0&&u[f-1]===p;)f--}for(;f=u[f];f++)r.push(this.events[f])}};A(Fu,"propertyIds",[`${ot.event}`]);let cc=Fu;const Aa=class Aa extends zt{constructor(t){super(t,...Aa.propertyIds);A(this,"drawOrders");this.drawOrders=new Array(t),this.instant=!0}getFrameCount(){return this.frames.length}setFrame(t,i,s){this.frames[t]=i,this.drawOrders[t]=s}apply(t,i,s,r,o,a,c,l,d){const u=d?t.drawOrder.appliedPose:t.drawOrder.pose,h=t.slots;if(l||s>2];switch(y){case 0:{const x=f[v];p=f[v+1],m=f[v+2],g=f[v+3];const C=(s-x)/(f[v+4]-x);p+=(f[v+4+1]-p)*C,m+=(f[v+4+2]-m)*C,g+=(f[v+4+3]-g)*C;break}case 1:p=f[v+1],m=f[v+2],g=f[v+3];break;default:p=this.getBezierValue(s,v,1,y-2),m=this.getBezierValue(s,v,2,y+18-2),g=this.getBezierValue(s,v,3,y+36-2)}const b=a===We.setup?u.data.setupPose:h;c?(h.mixRotate=b.mixRotate+p*o,h.mixX=b.mixX+m*o,h.mixY=b.mixY+g*o):(h.mixRotate=b.mixRotate+(p-b.mixRotate)*o,h.mixX=b.mixX+(m-b.mixX)*o,h.mixY=b.mixY+(g-b.mixY)*o)}}class ro extends xc{constructor(e,t,i,s){super(e,t,i,s)}apply(e,t,i,s,r,o,a,c,l){if(a&&!this.additive&&(a=!1),this.constraintIndex===-1){const d=i>=this.frames[0]?this.getCurveValue(i):0,u=e.physics;for(const h of u)if(h.active&&this.global(h.data)){const f=l?h.appliedPose:h.pose;this.set(f,this.getAbsoluteValue(i,r,o,a,this.get(f),this.get(h.data.setupPose),d))}}else{const d=e.constraints[this.constraintIndex];if(d.active){const u=l?d.appliedPose:d.pose;this.set(u,this.getAbsoluteValue(i,r,o,a,this.get(u),this.get(d.data.setupPose)))}}}}class lT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintInertia)}get(e){return e.inertia}set(e,t){e.inertia=t}global(e){return e.inertiaGlobal}}class cT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintStrength)}get(e){return e.strength}set(e,t){e.strength=t}global(e){return e.strengthGlobal}}class dT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintDamping)}get(e){return e.damping}set(e,t){e.damping=t}global(e){return e.dampingGlobal}}class uT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintMass)}get(e){return 1/e.massInverse}set(e,t){e.massInverse=1/t}global(e){return e.massGlobal}}class hT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintWind),this.additive=!0}get(e){return e.wind}set(e,t){e.wind=t}global(e){return e.windGlobal}}class fT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintGravity),this.additive=!0}get(e){return e.gravity}set(e,t){e.gravity=t}global(e){return e.gravityGlobal}}class pT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintMix)}get(e){return e.mix}set(e,t){e.mix=t}global(e){return e.mixGlobal}}const Lu=class Lu extends zt{constructor(t,i){super(t,...Lu.propertyIds);A(this,"constraintIndex");this.constraintIndex=i,this.instant=!0}getFrameCount(){return this.frames.length}setFrame(t,i){this.frames[t]=i}apply(t,i,s,r,o,a,c,l,d){let u;if(this.constraintIndex!==-1&&(u=t.constraints[this.constraintIndex],!u.active))return;const h=this.frames;if(i>s)this.apply(t,i,Number.MAX_VALUE,[],o,a,!1,!1,!1),i=-1;else if(i>=h[h.length-1])return;if(!(s=h[zt.search(h,i)+1]))if(u!=null)u.reset(t);else for(const f of t.physics)f.active&&f.reset(t)}};A(Lu,"propertyIds",[ot.physicsConstraintReset.toString()]);let Mu=Lu;class mT extends xc{constructor(e,t,i){super(e,t,i,ot.sliderTime)}apply(e,t,i,s,r,o,a,c,l){const d=e.constraints[this.constraintIndex];if(d.active){const u=l?d.appliedPose:d.pose;u.time=this.getAbsoluteValue(i,r,o,a,u.time,d.data.setupPose.time)}}}class gT extends xc{constructor(e,t,i){super(e,t,i,ot.sliderMix),this.additive=!0}apply(e,t,i,s,r,o,a,c,l){const d=e.constraints[this.constraintIndex];if(d.active){const u=l?d.appliedPose:d.pose;u.mix=this.getAbsoluteValue(i,r,o,a,u.mix,d.data.setupPose.mix)}}}const Bl=class Bl{constructor(e){A(this,"data");A(this,"tracks",[]);A(this,"timeScale",1);A(this,"unkeyedState",0);A(this,"events",[]);A(this,"listeners",[]);A(this,"queue",new vV(this));A(this,"propertyIds",new Map);A(this,"animationsChanged",!1);A(this,"trackEntryPool",new cV(()=>new gV));this.data=e}update(e){e*=this.timeScale;const t=this.tracks;for(let i=0,s=t.length;i0){if(r.delay-=o,r.delay>0)continue;o=-r.delay,r.delay=0}let a=r.next;if(a){const c=r.trackLast-a.delay;if(c>=0){for(a.delay=0,a.trackTime+=r.timeScale===0?0:(c/r.timeScale+e)*a.timeScale,r.trackTime+=o,this.setTrack(i,a,!0);a.mixingFrom;)a.mixTime+=e,a=a.mixingFrom;continue}}else if(r.trackLast>=r.trackEnd&&!r.mixingFrom){t[i]=null,this.queue.end(r),this.clearNext(r);continue}if(r.mixingFrom&&this.updateMixingFrom(r,e)){let c=r.mixingFrom;for(r.mixingFrom=null,c&&(c.mixingTo=null);c;)this.queue.end(c),c=c.mixingFrom}r.trackTime+=o}this.queue.drain()}updateMixingFrom(e,t){const i=e.mixingFrom;if(!i)return!0;const s=this.updateMixingFrom(i,t);if(i.animationLast=i.nextAnimationLast,i.trackLast=i.nextTrackLast,e.nextTrackLast!==-1&&e.mixTime>=e.mixDuration){if(i.totalAlpha===0||e.mixDuration===0){if(e.mixingFrom=i.mixingFrom,i.mixingFrom!=null&&(i.mixingFrom.mixingTo=e),i.totalAlpha===0)for(let r=e;r.mixingTo!=null;r=r.mixingTo)r.keepHold=!0;this.queue.end(i)}return s}return i.trackTime+=t*i.timeScale,e.mixTime+=t,!1}apply(e){if(!e)throw new Error("skeleton cannot be null.");this.animationsChanged&&this._animationsChanged();const t=this.events,i=this.tracks;let s=!1;for(let a=0,c=i.length;a0)continue;s=!0;let d=l.alpha;l.mixingFrom?d*=this.applyMixingFrom(l,e):l.trackTime>=l.trackEnd&&!l.next&&(d=0);let u=l.animationLast,h=l.getAnimationTime(),f=h,p=t;l.reverse&&(f=l.animation.duration-f,p=null);const m=l.animation.timelines,g=m.length;if(a===0&&d===1)for(let v=0;v=l.alphaAttachmentThreshold,b=l.additive,x=b||l.shortestRotation,C=!x&&l.timelinesRotation.length!==g<<1;C&&(l.timelinesRotation.length=g<<1);for(let T=0;T0?c/a:o,d=i.animation.timelines,u=d.length,h=i.timelineMode,f=i.timelineHoldMix,p=r=i.alphaAttachmentThreshold);else{const B=!m||!(_ instanceof qr)||M===We.current;_.apply(t,x,T,S,k,M,g,B,!1)}}return i.reverse&&r0&&this.queueEvents(i,C),this.events.length=0,i.nextAnimationLast=C,i.nextTrackLast=i.trackTime,r}applyAttachmentTimeline(e,t,i,s,r){const o=t.slots[e.slotIndex];if(!o.bone.active||!r&&o.attachmentState===this.unkeyedState+wx)return;let a=i=0,C=v>=0;Math.abs(y)<=90&&ke.signum(y)!==ke.signum(g)&&(Math.abs(v-b)>180?(m+=360*ke.signum(v),C=x):b!==0?m-=360*ke.signum(v):C=x),C!==x&&(m+=360*ke.signum(v)),o[a]=m}o[a+1]=g,d.rotation=f+m*s}queueEvents(e,t){const i=e.animationStart,s=e.animationEnd,r=s-i,o=e.reverse;let a=e.trackLast%r;o&&(a=r-a);const c=this.events;let l=0,d=c.length;for(;l=i&&h.time<=s&&this.queue.event(e,h)}let u=!1;if(e.loop)if(r===0)u=!0;else{const h=Math.floor(e.trackTime/r);u=h>0&&h>Math.floor(e.trackLast/r)}else u=t>=s&&e.animationLast=i&&h.time<=s&&this.queue.event(e,h)}}eventsReverse(e,t,i){const s=e.animation.duration,r=s-t,o=s-i,a=e.animation.timelines;for(let c=0,l=e.animation.timelines.length;c=o){for(let p=0;p=r)break;this.events.push(u[p])}}else{for(let m=0;m=r);m++)this.events.push(u[m]);let p=0;for(;p=o);p++);for(;p= 0.");if(e>=this.tracks.length)return;const t=this.tracks[e];if(!t)return;this.queue.end(t),this.clearNext(t);let i=t;for(;;){const s=i.mixingFrom;if(!s)break;this.queue.end(s),i.mixingFrom=null,i.mixingTo=null,i=s}this.tracks[t.trackIndex]=null,this.queue.drain()}setTrack(e,t,i){const s=this.expandToIndex(e);this.tracks[e]=t,t.previous=null,s&&(s.next=null,i&&this.queue.interrupt(s),t.mixingFrom=s,s.mixingTo=t,t.mixTime=0,s.timelinesRotation.length=0),this.queue.start(t)}setAnimation(e,t,i=!1){return typeof t=="string"?this.setAnimation1(e,t,i):this.setAnimation2(e,t,i)}setAnimation1(e,t,i=!1){const s=this.data.skeletonData.findAnimation(t);if(!s)throw new Error(`Animation not found: ${t}`);return this.setAnimation2(e,s,i)}setAnimation2(e,t,i=!1){if(e<0)throw new Error("trackIndex must be >= 0.");if(!t)throw new Error("animation cannot be null.");let s=!0,r=this.expandToIndex(e);r&&(r.nextTrackLast===-1&&r.animation===t?(this.tracks[e]=r.mixingFrom,this.queue.interrupt(r),this.queue.end(r),this.clearNext(r),r=r.mixingFrom,s=!1):this.clearNext(r));const o=this.trackEntry(e,t,i,r);return this.setTrack(e,o,s),this.queue.drain(),o}addAnimation(e,t,i=!1,s=0){return typeof t=="string"?this.addAnimation1(e,t,i,s):this.addAnimation2(e,t,i,s)}addAnimation1(e,t,i=!1,s=0){const r=this.data.skeletonData.findAnimation(t);if(!r)throw new Error(`Animation not found: ${t}`);return this.addAnimation2(e,r,i,s)}addAnimation2(e,t,i=!1,s=0){if(e<0)throw new Error("trackIndex must be >= 0.");if(!t)throw new Error("animation cannot be null.");let r=this.expandToIndex(e);if(r)for(;r.next;)r=r.next;const o=this.trackEntry(e,t,i,r);return r?(r.next=o,o.previous=r,s<=0&&(s=Math.max(s+r.getTrackComplete()-o.mixDuration,0))):(this.setTrack(e,o,!0),this.queue.drain(),s<0&&(s=0)),o.delay=s,o}setEmptyAnimation(e,t=0){const i=this.setAnimation(e,Bl.emptyAnimation,!1);return i.mixDuration=t,i.trackEnd=t,i}addEmptyAnimation(e,t=0,i=0){const s=this.addAnimation(e,Bl.emptyAnimation,!1,i);return i<=0&&(s.delay=Math.max(s.delay+s.mixDuration-t,0)),s.mixDuration=t,s.trackEnd=t,s}setEmptyAnimations(e=0){const t=this.queue.drainDisabled;this.queue.drainDisabled=!0;for(let i=0,s=this.tracks.length;i0&&(o[h]=v);break}}c&&(g=g&~md|r[h]&md),r[h]=g}}from(e,t,i){const s=this.propertyIds;let r=bV;for(let o=0,a=i.length;o= 0.");return e>=this.tracks.length?null:this.tracks[e]}addListener(e){if(!e)throw new Error("listener cannot be null.");this.listeners.push(e)}removeListener(e){const t=this.listeners.indexOf(e);t>=0&&this.listeners.splice(t,1)}clearListeners(){this.listeners.length=0}clearListenerNotifications(){this.queue.clear()}};A(Bl,"emptyAnimation",new ev("",[],0));let gx=Bl;class gV{constructor(){A(this,"animation",null);A(this,"previous",null);A(this,"next",null);A(this,"mixingFrom",null);A(this,"mixingTo",null);A(this,"listener",null);A(this,"trackIndex",0);A(this,"loop",!1);A(this,"additive",!1);A(this,"reverse",!1);A(this,"shortestRotation",!1);A(this,"keepHold",!1);A(this,"eventThreshold",0);A(this,"mixAttachmentThreshold",0);A(this,"alphaAttachmentThreshold",0);A(this,"mixDrawOrderThreshold",0);A(this,"animationStart",0);A(this,"animationEnd",0);A(this,"animationLast",0);A(this,"nextAnimationLast",0);A(this,"delay",0);A(this,"trackTime",0);A(this,"trackLast",0);A(this,"nextTrackLast",0);A(this,"trackEnd",0);A(this,"timeScale",0);A(this,"alpha",0);A(this,"mixTime",0);A(this,"mixDuration",0);A(this,"totalAlpha",0);A(this,"mixInterpolation",$a.linear);A(this,"timelineMode",[]);A(this,"timelineHoldMix",[]);A(this,"timelinesRotation",[])}setMixDuration(e,t){this.mixDuration=e,t!==void 0&&(t<=0&&(t=this.previous==null?0:Math.max(t+this.previous.getTrackComplete()-e,0)),this.delay=t)}setMixInterpolation(e){if(!e)throw new Error("mixInterpolation cannot be null.");this.mixInterpolation=e}mix(){if(this.mixDuration===0)return 1;let e=this.mixTime/this.mixDuration;return e>=1?1:this.mixInterpolation===$a.linear?e:(e=this.mixInterpolation.apply(e),e<0?0:e>1?1:e)}reset(){this.next=null,this.previous=null,this.mixingFrom=null,this.mixingTo=null,this.mixInterpolation=$a.linear,this.animation=null,this.listener=null,this.timelineMode.length=0,this.timelineHoldMix.length=0,this.timelinesRotation.length=0}getAnimationTime(){if(!this.loop)return Math.min(this.trackTime+this.animationStart,this.animationEnd);const e=this.animationEnd-this.animationStart;return e===0?this.animationStart:this.trackTime%e+this.animationStart}setAnimationLast(e){this.animationLast=e,this.nextAnimationLast=e}isComplete(){return this.trackTime>=this.animationEnd-this.animationStart}resetRotationDirections(){this.timelinesRotation.length=0}getTrackComplete(){const e=this.animationEnd-this.animationStart;if(e!==0){if(this.loop)return e*(1+(this.trackTime/e|0));if(this.trackTime=0}}class vV{constructor(e){A(this,"objects",[]);A(this,"drainDisabled",!1);A(this,"animState");this.animState=e}start(e){this.objects.push(cn.start),this.objects.push(e),this.animState.animationsChanged=!0}interrupt(e){this.objects.push(cn.interrupt),this.objects.push(e)}end(e){this.objects.push(cn.end),this.objects.push(e),this.animState.animationsChanged=!0}dispose(e){this.objects.push(cn.dispose),this.objects.push(e)}complete(e){this.objects.push(cn.complete),this.objects.push(e)}event(e,t){this.objects.push(cn.event),this.objects.push(e),this.objects.push(t)}drain(){var e,t,i,s,r,o;if(!this.drainDisabled){this.drainDisabled=!0;for(let a=0;a= 0.");if(!i)throw new Error("name cannot be null.");this.index=t,this.parent=s}copy(t){const i=new vh(this.index,this.name,t);return i.length=this.length,i.setupPose.set(this.setupPose),i}}var ri;(function(n){n[n.Normal=0]="Normal",n[n.OnlyTranslation=1]="OnlyTranslation",n[n.NoRotationOrReflection=2]="NoRotationOrReflection",n[n.NoScale=3]="NoScale",n[n.NoScaleOrReflection=4]="NoScaleOrReflection"})(ri||(ri={}));class Um{constructor(){A(this,"bone");A(this,"x",0);A(this,"y",0);A(this,"rotation",0);A(this,"scaleX",0);A(this,"scaleY",0);A(this,"shearX",0);A(this,"shearY",0);A(this,"inherit",ri.Normal);A(this,"a",0);A(this,"b",0);A(this,"c",0);A(this,"d",0);A(this,"worldY",0);A(this,"worldX",0);A(this,"world",0);A(this,"local",0)}set(e){if(e==null)throw new Error("pose cannot be null.");this.x=e.x,this.y=e.y,this.rotation=e.rotation,this.scaleX=e.scaleX,this.scaleY=e.scaleY,this.shearX=e.shearX,this.shearY=e.shearY,this.inherit=e.inherit}setPosition(e,t){this.x=e,this.y=t}setScale(e,t){this.scaleX=e,this.scaleY=t===void 0?e:t}getInherit(){return this.inherit}setInherit(e){if(e==null)throw new Error("inherit cannot be null.");this.inherit=e}update(e,t){this.world!==e._update&&this.updateWorldTransform(e)}updateWorldTransform(e){this.local===e._update?this.updateLocalTransform(e):this.world=e._update;const t=this.rotation,i=this.scaleX,s=this.scaleY,r=this.shearX,o=this.shearY;if(!this.bone.parent){const h=e.scaleX,f=e.scaleY,p=(t+r)*ke.degRad,m=(t+90+o)*ke.degRad;this.a=Math.cos(p)*i*h,this.b=Math.cos(m)*s*h,this.c=Math.sin(p)*i*f,this.d=Math.sin(m)*s*f,this.worldX=this.x*h+e.x,this.worldY=this.y*f+e.y;return}const a=this.bone.parent.appliedPose;let c=a.a,l=a.b,d=a.c,u=a.d;switch(this.worldX=c*this.x+l*this.y+a.worldX,this.worldY=d*this.x+u*this.y+a.worldY,this.inherit){case ri.Normal:{const h=(t+r)*ke.degRad,f=(t+90+o)*ke.degRad,p=Math.cos(h)*i,m=Math.cos(f)*s,g=Math.sin(h)*i,v=Math.sin(f)*s;this.a=c*p+l*g,this.b=c*m+l*v,this.c=d*p+u*g,this.d=d*m+u*v;return}case ri.OnlyTranslation:{const h=e.scaleX,f=e.scaleY,p=(t+r)*ke.degRad,m=(t+90+o)*ke.degRad;this.a=Math.cos(p)*i*h,this.b=Math.cos(m)*s*h,this.c=Math.sin(p)*i*f,this.d=Math.sin(m)*s*f;break}case ri.NoRotationOrReflection:{const h=e.scaleX,f=e.scaleY,p=1/h,m=1/f;c*=p,d*=m;let g=c*c+d*d,v=0;g>ke.epsilon2?(g=Math.abs(c*u*m-l*p*d)/g,l=d*g,u=c*g,v=t-ke.atan2Deg(d,c)):(c=0,d=0,v=t-90+ke.atan2Deg(u,l));const y=(v+r)*ke.degRad,b=(v+o+90)*ke.degRad,x=Math.cos(y)*i,C=Math.cos(b)*s,T=Math.sin(y)*i,S=Math.sin(b)*s;this.a=(c*x-l*T)*h,this.b=(c*C-l*S)*h,this.c=(d*x+u*T)*f,this.d=(d*C+u*S)*f;break}case ri.NoScale:case ri.NoScaleOrReflection:{const h=e.scaleX,f=e.scaleY,p=1/h,m=1/f,g=t*ke.degRad,v=Math.cos(g),y=Math.sin(g);let b=(c*v+l*y)*p,x=(d*v+u*y)*m;const C=1/Math.sqrt(b*b+x*x);b*=C,x*=C;let T=-x,S=b;this.inherit===ri.NoScale&&c*u-l*d<0!=(h<0!=f<0)&&(T=-T,S=-S);const E=r*ke.degRad,_=(90+o)*ke.degRad,I=Math.cos(E)*i,M=Math.cos(_)*s,k=Math.sin(E)*i,B=Math.sin(_)*s;this.a=(b*I+T*k)*h,this.b=(b*M+T*B)*h,this.c=(x*I+S*k)*f,this.d=(x*M+S*B)*f;break}}}updateLocalTransform(e){this.local=0,this.world=e._update;const t=e.scaleX,i=e.scaleY;if(!this.bone.parent){const v=1/t,y=1/i;this.x=(this.worldX-e.x)*v,this.y=(this.worldY-e.y)*y,this.set5(this.a*v,this.b*v,this.c*y,this.d*y,0);return}const s=this.bone.parent.appliedPose;let r=s.a,o=s.b,a=s.c,c=s.d;const l=r*c-o*a,d=1/(r*c-o*a),u=c*d,h=o*d,f=a*d,p=r*d,m=this.worldX-s.worldX,g=this.worldY-s.worldY;switch(this.x=m*u-g*h,this.y=g*p-m*f,this.inherit){case ri.Normal:this.set5(u*this.a-h*this.c,u*this.b-h*this.d,p*this.c-f*this.a,p*this.d-f*this.b,0);break;case ri.OnlyTranslation:{const v=1/t,y=1/i;this.set5(this.a*v,this.b*v,this.c*y,this.d*y,0);break}case ri.NoRotationOrReflection:{const v=1/t,y=1/i;r*=v,a*=y;const b=this.a*v,x=this.b*v,C=this.c*y,T=this.d*y,S=1/(r*r+a*a),E=1/Math.abs(l*v*y);this.set5((r*b+a*C)*S,(r*x+a*T)*S,(r*C-a*b)*E,(r*T-a*x)*E,ke.atan2Deg(a,r));break}case ri.NoScale:case ri.NoScaleOrReflection:{const v=1/t,y=1/i,b=this.a*v,x=this.b*v,C=this.c*y,T=this.d*y;let S=c*this.a-o*this.c,E=r*this.c-a*this.a;l<0&&(S=-S,E=-E);let _=ke.atan2Deg(E,S);this.rotation=_,_*=ke.degRad;const I=Math.cos(_),M=Math.sin(_);let k=(r*I+o*M)*v,B=(a*I+c*M)*y;const D=1/Math.sqrt(k*k+B*B);k*=D,B*=D;const G=this.inherit===ri.NoScale&&l<0!=(t<0!=i<0)?-1:1;this.set4(k*b+B*C,k*x+B*T,(k*C-B*b)*G,(k*T-B*x)*G)}}}set4(e,t,i,s){const r=e*e+i*i,o=t*t+s*s;r>ke.epsilon2?(this.shearX=ke.atan2Deg(i,e),this.scaleX=Math.sqrt(r)):(this.shearX=0,this.scaleX=0),this.scaleY=Math.sqrt(o),o>ke.epsilon2?(this.shearY=ke.atan2Deg(s,t),e*s-t*i<0?(this.scaleY=-this.scaleY,this.shearY+=90):this.shearY-=90,this.shearY>180?this.shearY-=360:this.shearY<=-180&&(this.shearY+=360)):this.shearY=0}set5(e,t,i,s,r){this.shearX=0;const o=e*e+i*i,a=t*t+s*s;if(o>ke.epsilon2){const c=ke.atan2Deg(i,e);this.rotation=c+r,this.scaleX=Math.sqrt(o),this.scaleY=Math.sqrt(a),a>ke.epsilon2?(this.shearY=ke.atan2Deg(s,t),e*s-t*i<0?(this.scaleY=-this.scaleY,this.shearY+=90-c):this.shearY-=90+c,this.shearY>180?this.shearY-=360:this.shearY<=-180&&(this.shearY+=360)):this.shearY=0}else this.scaleX=0,this.scaleY=Math.sqrt(a),this.shearY=0,this.rotation=a>ke.epsilon2?ke.atan2Deg(s,t)-90+r:r}validateLocalTransform(e){this.local===e._update&&this.updateLocalTransform(e)}modifyLocal(e){this.local===e._update&&this.updateLocalTransform(e),this.world=0,this.resetWorld(e,e._update)}modifyWorld(e){const t=e._update;this.local=t,this.world=t,this.resetWorld(e,t)}resetWorld(e,t){const i=this.bone.children;for(let s=0,r=i.length;s1&&t.constrained(this.bones[1].bone)}isSourceActive(){return this.target.active}static apply(t,i,s,r,o,a,c,l,d,u){typeof s=="number"?Lr.apply1(t,i,s,r,o,a,c,l):Lr.apply2(t,i,s,r,o,a,c,l,d,u)}static apply1(t,i,s,r,o,a,c,l){i.modifyLocal(t);const d=i.bone.parent.appliedPose;let u=d.a,h=d.b,f=d.c,p=d.d,m=-i.shearX-i.rotation,g=0,v=0;switch(i.inherit){case ri.OnlyTranslation:g=(s-i.worldX)*ke.signum(t.scaleX),v=(r-i.worldY)*ke.signum(t.scaleY);break;case ri.NoRotationOrReflection:{const y=Math.abs(u*p-h*f)/Math.max(ke.epsilon,u*u+f*f),b=u/t.scaleX,x=f/t.scaleY;h=-x*y*t.scaleX,p=b*y*t.scaleY,m+=ke.atan2Deg(x,b)}default:{const y=s-d.worldX,b=r-d.worldY,x=u*p-h*f;Math.abs(x)<=ke.epsilon?(g=0,v=0):(g=(y*p-b*h)/x-i.x,v=(b*u-y*f)/x-i.y)}}if(m+=ke.atan2Deg(v,g),i.scaleX<0&&(m+=180),m>180?m-=360:m<=-180&&(m+=360),i.rotation+=m*l,o||a){switch(i.inherit){case ri.NoScale:case ri.NoScaleOrReflection:g=s-i.worldX,v=r-i.worldY}const y=i.bone.data.length*i.scaleX;if(y>ke.epsilon){const b=g*g+v*v;if(o&&by*y){const x=(Math.sqrt(b)/y-1)*l+1;switch(i.scaleX*=x,c){case en.Uniform:i.scaleY*=x;break;case en.Volume:i.scaleY/=x<.7?.25+.642857*x:x}}}}}static apply2(t,i,s,r,o,a,c,l,d,u){if(i.inherit!==ri.Normal||s.inherit!==ri.Normal)return;i.modifyLocal(t),s.modifyLocal(t);let h=i.x,f=i.y,p=i.scaleX,m=i.scaleY,g=s.scaleX,v=0,y=0,b=0;p<0?(p=-p,v=180,b=-1):(v=0,b=1),m<0&&(m=-m,b=-b),g<0?(g=-g,y=180):y=0;let x=0,C=0,T=i.a,S=i.b,E=i.c,_=i.d;const I=Math.abs(p-m)<=ke.epsilon;!I||c?(s.y=0,x=T*s.x+i.worldX,C=E*s.x+i.worldY):(x=T*s.x+S*s.y+i.worldX,C=E*s.x+_*s.y+i.worldY);const M=i.bone.parent.appliedPose;T=M.a,S=M.b,E=M.c,_=M.d;let k=T*_-S*E,B=x-M.worldX,D=C-M.worldY;k=Math.abs(k)<=ke.epsilon?0:1/k;const G=(B*_-D*S)*k-h,V=(D*T-B*E)*k-f;let Y=Math.sqrt(G*G+V*V),L=s.bone.data.length*g,N,F;if(Y0){let le=Math.min(1,oe/(d*2))-1;le=(oe-d*(1-le*le))/J,$-=le*$,X-=le*X,z=$*$+X*X}}e:if(I){L*=p;let J=(z-Y*Y-L*L)/(2*Y*L);if(J<-1)J=-1,F=Math.PI*a;else if(J>1){if(J=1,F=0,c)switch(T=(Math.sqrt(z)/(Y+L)-1)*u+1,i.scaleX*=T,l){case en.Uniform:i.scaleY*=T;break;case en.Volume:i.scaleY/=T<.7?.25+.642857*T:T}}else F=Math.acos(J)*a;T=Y+L*J,S=L*Math.sin(F),N=Math.atan2(X*T-$*S,$*T+X*S)}else{T=p*L,S=m*L;const J=T*T,oe=S*S,le=Math.atan2(X,$);E=oe*Y*Y+J*z-J*oe;const ve=-2*oe*Y,Se=oe-J;if(_=ve*ve-4*Se*E,_>=0){let U=Math.sqrt(_);ve<0&&(U=-U),U=-(ve+U)*.5;let W=U/Se,ee=E/U;const ne=Math.abs(W)=0){D=Math.sqrt(W)*a,N=le-Math.atan2(D,ne),F=Math.atan2(D/m,(ne-Y)/p);break e}}let fe=ke.PI,be=Y-T,q=be*be,Z=0,se=0,j=Y+T,H=j*j,O=0;E=-T*Y/(J-oe),E>=-1&&E<=1&&(E=Math.acos(E),B=T*Math.cos(E)+Y,D=S*Math.sin(E),_=B*B+D*D,_H&&(se=E,H=_,j=B,O=D)),z<=(q+H)*.5?(N=le-Math.atan2(Z*a,be),F=fe*a):(N=le-Math.atan2(O*a,j),F=se*a)}const K=Math.atan2(s.y,s.x)*b;N=(N-K)*ke.radDeg+v-i.rotation,N>180?N-=360:N<=-180&&(N+=360),i.rotation+=N*u,F=((F+K)*ke.radDeg-s.shearX)*b+y-s.rotation,F>180?F-=360:F<=-180&&(F+=360),s.rotation+=F*u}}class kd extends Sc{constructor(t){super(t,new Vm);A(this,"bones",[]);A(this,"_target",null);A(this,"_scaleYMode",en.None)}set target(t){this._target=t}get target(){if(!this._target)throw new Error("target cannot be null.");return this._target}set scaleYMode(t){this._scaleYMode=t}get scaleYMode(){if(this._scaleYMode==null)throw new Error("scaleYMode cannot be null.");return this._scaleYMode}create(t){return new Lr(this,t)}}class Xm{constructor(){A(this,"position",0);A(this,"spacing",0);A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0)}set(e){this.position=e.position,this.spacing=e.spacing,this.mixRotate=e.mixRotate,this.mixX=e.mixX,this.mixY=e.mixY}}class Rd extends Sc{constructor(t){super(t,new Xm);A(this,"bones",[]);A(this,"_slot",null);A(this,"positionMode",Ps.Fixed);A(this,"spacingMode",Ti.Fixed);A(this,"rotateMode",$o.Chain);A(this,"offsetRotation",0)}set slot(t){this._slot=t}get slot(){if(this._slot)return this._slot;throw new Error("SlotData not set.")}create(t){return new Ym(this,t)}}var Ps;(function(n){n[n.Fixed=0]="Fixed",n[n.Percent=1]="Percent"})(Ps||(Ps={}));var Ti;(function(n){n[n.Length=0]="Length",n[n.Fixed=1]="Fixed",n[n.Percent=2]="Percent",n[n.Proportional=3]="Proportional"})(Ti||(Ti={}));var $o;(function(n){n[n.Tangent=0]="Tangent",n[n.Chain=1]="Chain",n[n.ChainScale=2]="ChainScale"})($o||($o={}));const zn=class zn extends wc{constructor(t,i){super(t,new Xm,new Xm);A(this,"data");A(this,"bones");A(this,"slot");A(this,"spaces",[]);A(this,"positions",[]);A(this,"world",[]);A(this,"curves",[]);A(this,"lengths",[]);A(this,"segments",[]);if(!i)throw new Error("skeleton cannot be null.");this.data=t,this.bones=[];for(const s of this.data.bones)this.bones.push(i.bones[s.index].constrainedPose);this.slot=i.slots[t.slot.index]}copy(t){var i=new zn(this.data,t);return i.pose.set(this.pose),i}update(t,i){const s=this.slot.appliedPose.attachment;if(!(s instanceof dc))return;const r=this.appliedPose,o=r.mixRotate,a=r.mixX,c=r.mixY;if(o===0&&a===0&&c===0)return;const l=this.data,d=l.rotateMode===$o.Tangent,u=l.rotateMode===$o.ChainScale,h=this.bones,f=h.length,p=d?f:f+1,m=Ke.setArraySize(this.spaces,p),g=u?this.lengths=Ke.setArraySize(this.lengths,f):[],v=r.spacing;switch(l.spacingMode){case Ti.Percent:if(u)for(let S=0,E=p-1;S0){S=p/S*v;for(let E=1;E0?ke.degRad:-ke.degRad}for(let S=0,E=3;S0){let D=_.a,G=_.b,V=_.c,Y=_.d,L=0,N=0,F=0;if(d?L=y[E-1]:m[S+1]===0?L=y[E+2]:L=Math.atan2(B,k),L-=Math.atan2(V,D),T){N=Math.cos(L),F=Math.sin(L);const $=_.bone.data.length;b+=($*(N*D-F*V)-k)*o,x+=($*(F*D+N*V)-B)*o}else L+=C;L>ke.PI?L-=ke.PI2:L<-ke.PI&&(L+=ke.PI2),L*=o,N=Math.cos(L),F=Math.sin(L),_.a=N*D-F*V,_.b=N*G-F*Y,_.c=F*D+N*V,_.d=F*G+N*Y}}}computeWorldPositions(t,i,s,r){const o=this.slot;let a=this.appliedPose.position,c=this.spaces,l=Ke.setArraySize(this.positions,s*3+2),d=this.world;const u=i.closed;let h=i.worldVerticesLength,f=h/6,p=zn.NONE;if(!i.constantSpeed){const F=i.lengths;f-=u?1:2;const $=F[f];this.data.positionMode===Ps.Percent&&(a*=$);let X;switch(this.data.spacingMode){case Ti.Percent:X=$;break;case Ti.Proportional:X=$/s;break;default:X=1}d=Ke.setArraySize(this.world,8);for(let z=0,K=0,J=0;z$){p!==zn.AFTER&&(p=zn.AFTER,i.computeWorldVertices(t,o,h-6,4,d,0,2)),this.addAfterPosition(le-$,d,0,l,K);continue}for(;;J++){const ve=F[J];if(!(le>ve)){if(J===0)le/=ve;else{const Se=F[J-1];le=(le-Se)/(ve-Se)}break}}J!==p&&(p=J,u&&J===f?(i.computeWorldVertices(t,o,h-4,4,d,0,2),i.computeWorldVertices(t,o,0,4,d,4,2)):i.computeWorldVertices(t,o,J*6+2,8,d,0,2)),this.addCurvePosition(le,d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],l,K,r||z>0&&oe===0)}return l}u?(h+=2,d=Ke.setArraySize(this.world,h),i.computeWorldVertices(t,o,2,h-4,d,0,2),i.computeWorldVertices(t,o,0,2,d,h-4,2),d[h-2]=d[0],d[h-1]=d[1]):(f--,h-=4,d=Ke.setArraySize(this.world,h),i.computeWorldVertices(t,o,2,h,d,0,2));const m=Ke.setArraySize(this.curves,f);let g=0,v=d[0],y=d[1],b=0,x=0,C=0,T=0,S=0,E=0,_=0,I=0,M=0,k=0,B=0,D=0,G=0,V=0;for(let F=0,$=2;Fg){this.addAfterPosition(J-g,d,h-4,l,$);continue}for(;;X++){const oe=m[X];if(!(J>oe)){if(X===0)J/=oe;else{const le=m[X-1];J=(J-le)/(oe-le)}break}}if(X!==p){p=X;let oe=X*6;for(v=d[oe],y=d[oe+1],b=d[oe+2],x=d[oe+3],C=d[oe+4],T=d[oe+5],S=d[oe+6],E=d[oe+7],_=(v-b*2+C)*.03,I=(y-x*2+T)*.03,M=((b-C)*3-v+S)*.006,k=((x-T)*3-y+E)*.006,B=_*2+M,D=I*2+k,G=(b-v)*.3+_+M*.16666667,V=(x-y)*.3+I+k*.16666667,N=Math.sqrt(G*G+V*V),L[0]=N,oe=1;oe<8;oe++)G+=B,V+=D,B+=M,D+=k,N+=Math.sqrt(G*G+V*V),L[oe]=N;G+=B,V+=D,N+=Math.sqrt(G*G+V*V),L[8]=N,G+=B+M,V+=D+k,N+=Math.sqrt(G*G+V*V),L[9]=N,z=0}for(J*=N;;z++){const oe=L[z];if(!(J>oe)){if(z===0)J/=oe;else{const le=L[z-1];J=z+(J-le)/(oe-le)}break}}this.addCurvePosition(J*.1,v,y,b,x,C,T,S,E,l,$,r||F>0&&K===0)}return l}addBeforePosition(t,i,s,r,o){const a=i[s],c=i[s+1],l=i[s+2]-a,d=i[s+3]-c,u=Math.atan2(d,l);r[o]=a+t*Math.cos(u),r[o+1]=c+t*Math.sin(u),r[o+2]=u}addAfterPosition(t,i,s,r,o){const a=i[s+2],c=i[s+3],l=a-i[s],d=c-i[s+1],u=Math.atan2(d,l);r[o]=a+t*Math.cos(u),r[o+1]=c+t*Math.sin(u),r[o+2]=u}addCurvePosition(t,i,s,r,o,a,c,l,d,u,h,f){if(t===0||Number.isNaN(t)){u[h]=i,u[h+1]=s,u[h+2]=Math.atan2(o-s,r-i);return}const p=t*t,m=p*t,g=1-t,v=g*g,y=v*g,b=g*t,x=b*3,C=g*x,T=x*t,S=i*y+r*C+a*T+l*m,E=s*y+o*C+c*T+d*m;u[h]=S,u[h+1]=E,f&&(t<.001?u[h+2]=Math.atan2(o-s,r-i):u[h+2]=Math.atan2(E-(s*v+o*b*2+c*p),S-(i*v+r*b*2+a*p)))}sort(t){const i=this.slot.data.index,s=this.slot.bone;t.skin!=null&&this.sortPathSlot(t,t.skin,i,s),t.data.defaultSkin!=null&&t.data.defaultSkin!==t.skin&&this.sortPathSlot(t,t.data.defaultSkin,i,s),this.sortPath(t,this.slot.pose.attachment,s);const r=this.bones,o=this.bones.length;for(let a=0;a0,a=this.data.y>0,c=this.data.rotate>0||this.data.shearX>0,l=this.data.scaleX>0,d=this.bone;let u=d.bone.data.length,h=this.data.step,f=0;if(i!==Ao.none){switch(d.modifyWorld(t),i){case Ao.reset:this.reset(t);case Ao.update:{const p=Math.max(t.time-this.lastTime,0),m=this.remaining;this.remaining+=p,this.lastTime=t.time;const g=d.worldX,v=d.worldY;if(this._reset)this._reset=!1,this.ux=g,this.uy=v;else{let y=this.remaining,b=s.inertia,x=t.data.referenceScale,C=-1,T=0,S=0,E=this.data.limit*p,_=E*Math.abs(t.scaleY);if(E*=Math.abs(t.scaleX),o||a){if(o){const I=(this.ux-g)*b;this.xOffset+=I>E?E:I<-E?-E:I,this.ux=g}if(a){const I=(this.uy-v)*b;this.yOffset+=I>_?_:I<-_?-_:I,this.uy=v}if(y>=h){const I=this.xOffset,M=this.yOffset;C=s.damping**(60*h),T=h*s.massInverse,S=s.strength;const k=x*s.wind,B=x*s.gravity,D=(k*t.windX+B*t.gravityX)*t.scaleX,G=(k*t.windY+B*t.gravityY)*t.scaleY;do o&&(this.xVelocity+=(D-this.xOffset*S)*T,this.xOffset+=this.xVelocity*h,this.xVelocity*=C),a&&(this.yVelocity-=(G+this.yOffset*S)*T,this.yOffset+=this.yVelocity*h,this.yVelocity*=C),y-=h;while(y>=h);this.xLag=this.xOffset-I,this.yLag=this.yOffset-M}f=Math.max(0,1-y/h),o&&(d.worldX+=(this.xOffset-this.xLag*f)*r*this.data.x),a&&(d.worldY+=(this.yOffset-this.yLag*f)*r*this.data.y)}if(c||l){let I=Math.atan2(d.c,d.a),M=0,k=0,B=0,D=this.cx-d.worldX,G=this.cy-d.worldY;if(D>E?D=E:D<-E&&(D=-E),G>_?G=_:G<-_&&(G=-_),y=this.remaining,c){B=(this.data.rotate+this.data.shearX)*r,f=this.rotateLag*Math.max(0,1-m/h);let V=Math.atan2(G+this.ty,D+this.tx)-I-(this.rotateOffset-f)*B;this.rotateOffset+=(V-Math.ceil(V*ke.invPI2-.5)*ke.PI2)*b,V=(this.rotateOffset-f)*B+I,M=Math.cos(V),k=Math.sin(V),l&&(V=u*d.getWorldScaleX(),V>0&&(this.scaleOffset+=(D*M+G*k)*b/V))}else{M=Math.cos(I),k=Math.sin(I);const V=u*d.getWorldScaleX()-this.scaleLag*Math.max(0,1-m/h);V>0&&(this.scaleOffset+=(D*M+G*k)*b/V)}if(y>=h){C===-1&&(C=s.damping**(60*h),T=h*s.massInverse,S=s.strength);const V=s.wind*t.windX+s.gravity*t.gravityX,Y=(s.wind*t.windY+s.gravity*t.gravityY)*Hm.yDir,L=this.rotateOffset,N=this.scaleOffset,F=u/x;for(;;)if(y-=h,l&&(this.scaleVelocity+=(V*M-Y*k-this.scaleOffset*S)*T,this.scaleOffset+=this.scaleVelocity*h,this.scaleVelocity*=C),c){if(this.rotateVelocity-=((V*k+Y*M)*F+this.rotateOffset*S)*T,this.rotateOffset+=this.rotateVelocity*h,this.rotateVelocity*=C,y0){let y=0;this.data.rotate>0&&(y=p*this.data.rotate,m=Math.sin(y),g=Math.cos(y),v=d.b,d.b=g*v-m*d.d,d.d=m*v+g*d.d),y+=p*this.data.shearX,m=Math.sin(y),g=Math.cos(y),v=d.a,d.a=g*v-m*d.c,d.c=m*v+g*d.c}else p*=this.data.rotate,m=Math.sin(p),g=Math.cos(p),v=d.a,d.a=g*v-m*d.c,d.c=m*v+g*d.c,v=d.b,d.b=g*v-m*d.d,d.d=m*v+g*d.d}if(l){let p=1+(this.scaleOffset-this.scaleLag*f)*r*this.data.scaleX;switch(d.a*=p,d.c*=p,this.data.scaleYMode){case en.Uniform:d.b*=p,d.d*=p;break;case en.Volume:p=Math.abs(p),p=p>=.7?1/p:4-3.67347*p,d.b*=p,d.d*=p}}i!==Ao.pose&&(this.tx=u*d.a,this.ty=u*d.c)}}sort(t){const i=this.bone.bone;t.sortBone(i),t._updateCache.push(this),t.sortReset(i.children),t.constrained(i)}isSourceActive(){return this.bone.bone.active}}class Fd extends Sc{constructor(t){super(t,new zm);A(this,"_bone",null);A(this,"x",0);A(this,"y",0);A(this,"rotate",0);A(this,"scaleX",0);A(this,"shearX",0);A(this,"limit",0);A(this,"step",0);A(this,"inertiaGlobal",!1);A(this,"strengthGlobal",!1);A(this,"dampingGlobal",!1);A(this,"massGlobal",!1);A(this,"windGlobal",!1);A(this,"gravityGlobal",!1);A(this,"mixGlobal",!1);A(this,"_scaleYMode",en.None)}set bone(t){this._bone=t}get bone(){if(this._bone)return this._bone;throw new Error("BoneData not set.")}get scaleYMode(){return this._scaleYMode}set scaleYMode(t){if(t==null)throw new Error("scaleYMode cannot be null.");this._scaleYMode=t}create(t){return new bh(this,t)}}typeof Math.fround>"u"&&(Math.fround=(n=>e=>(n[0]=e,n[0]))(new Float32Array(1)));class Gm{constructor(){A(this,"time",0);A(this,"mix",0)}set(e){this.time=e.time,this.mix=e.mix}}const Ul=class Ul extends wc{constructor(t,i){super(t,new Gm,new Gm);A(this,"bone",null);if(!i)throw new Error("skeleton cannot be null.");t.bone!=null&&(this.bone=i.bones[t.bone.index])}copy(t){var i=new Ul(this.data,t);return i.pose.set(this.pose),i}update(t,i){const s=this.appliedPose;if(s.mix===0)return;const r=this.data,o=r.animation,a=this.bone;if(a!==null){if(!a.active)return;r.local&&a.appliedPose.validateLocalTransform(t),s.time=r.offset+(r.property.value(t,a.appliedPose,r.local,Ul.offsets)-r.property.offset)*r.scale,r.loop?s.time=o.duration+s.time%o.duration:s.time=Math.max(0,s.time)}const c=t.bones,l=o.bones;for(let d=0,u=o.bones.length;d=s.length&&(s.length=e+1),s[e]||(s[e]={}),s[e][t]=i}addSkin(e){for(let i=0;i= 0.");if(!s)throw new Error("boneData cannot be null.");this.index=t,this.boneData=s}}var Pu;(function(n){n[n.Normal=0]="Normal",n[n.Additive=1]="Additive",n[n.Multiply=2]="Multiply",n[n.Screen=3]="Screen"})(Pu||(Pu={}));class Km{constructor(){A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0);A(this,"mixScaleX",0);A(this,"mixScaleY",0);A(this,"mixShearY",0)}set(e){this.mixRotate=e.mixRotate,this.mixX=e.mixX,this.mixY=e.mixY,this.mixScaleX=e.mixScaleX,this.mixScaleY=e.mixScaleY,this.mixShearY=e.mixShearY}}class av extends wc{constructor(t,i){super(t,new Km,new Km);A(this,"bones");A(this,"source");if(!i)throw new Error("skeleton cannot be null.");this.bones=[];for(const r of t.bones)this.bones.push(i.bones[r.index].constrainedPose);const s=i.bones[t.source.index];if(s==null)throw new Error("source cannot be null.");this.source=s}copy(t){var i=new av(this.data,t);return i.pose.set(this.pose),i}update(t,i){const s=this.appliedPose;if(s.mixRotate===0&&s.mixX===0&&s.mixY===0&&s.mixScaleX===0&&s.mixScaleY===0&&s.mixShearY===0)return;const r=this.data,o=r.localSource,a=r.localTarget,c=r.additive,l=r.clamp,d=r.offsets,u=this.source.appliedPose;o&&u.validateLocalTransform(t);const h=r.properties,f=r.properties.length,p=this.bones;for(let m=0,g=this.bones.length;m0?s[Mt.ROTATION]:-s[Mt.ROTATION]);return a<0&&(a+=360),a}}class ST extends il{mix(e){return e.mixRotate}apply(e,t,i,s,r,o){if(r)i.rotation+=(o?s:s-i.rotation)*t.mixRotate;else{const a=e.scaleX,c=e.scaleY,l=1/a,d=1/c,u=i.a*l,h=i.b*l,f=i.c*d,p=i.d*d;s*=ke.degRad,o||(s-=Math.atan2(f,u)),s>ke.PI?s-=ke.PI2:s<-ke.PI&&(s+=ke.PI2),s*=t.mixRotate;const m=Math.cos(s),g=Math.sin(s);i.a=(m*u-g*f)*a,i.b=(m*h-g*p)*a,i.c=(g*u+m*f)*c,i.d=(g*h+m*p)*c}}}class Zm extends tl{value(e,t,i,s){return i?t.x+s[Mt.X]:(s[Mt.X]*t.a+s[Mt.Y]*t.b+t.worldX)/e.scaleX}}class CT extends il{mix(e){return e.mixX}apply(e,t,i,s,r,o){r?i.x+=(o?s:s-i.x)*t.mixX:(o||(s-=i.worldX/e.scaleX),i.worldX+=s*t.mixX*e.scaleX)}}class Qm extends tl{value(e,t,i,s){return i?t.y+s[Mt.Y]:(s[Mt.X]*t.c+s[Mt.Y]*t.d+t.worldY)/e.scaleY}}class AT extends il{mix(e){return e.mixY}apply(e,t,i,s,r,o){r?i.y+=(o?s:s-i.y)*t.mixY:(o||(s-=i.worldY/e.scaleY),i.worldY+=s*t.mixY*e.scaleY)}}class eg extends tl{value(e,t,i,s){if(i)return t.scaleX+s[Mt.SCALEX];const r=t.a/e.scaleX,o=t.c/e.scaleY;return Math.sqrt(r*r+o*o)+s[Mt.SCALEX]}}class TT extends il{mix(e){return e.mixScaleX}apply(e,t,i,s,r,o){if(r)o?i.scaleX*=1+(s-1)*t.mixScaleX:i.scaleX!==0&&(i.scaleX+=(s-i.scaleX)*t.mixScaleX);else if(o){const a=1+(s-1)*t.mixScaleX;i.a*=a,i.c*=a}else{let a=i.a/e.scaleX,c=i.c/e.scaleY,l=Math.sqrt(a*a+c*c);l!==0&&(l=1+(s-l)*t.mixScaleX/l,i.a*=l,i.c*=l)}}}class tg extends tl{value(e,t,i,s){if(i)return t.scaleY+s[Mt.SCALEY];const r=t.b/e.scaleX,o=t.d/e.scaleY;return Math.sqrt(r*r+o*o)+s[Mt.SCALEY]}}class ET extends il{mix(e){return e.mixScaleY}apply(e,t,i,s,r,o){if(r)o?i.scaleY*=1+(s-1)*t.mixScaleY:i.scaleY!==0&&(i.scaleY+=(s-i.scaleY)*t.mixScaleY);else if(o){const a=1+(s-1)*t.mixScaleY;i.b*=a,i.d*=a}else{let a=i.b/e.scaleX,c=i.d/e.scaleY,l=Math.sqrt(a*a+c*c);l!==0&&(l=1+(s-l)*t.mixScaleY/l,i.b*=l,i.d*=l)}}}class ig extends tl{value(e,t,i,s){if(i)return t.shearY+s[Mt.SHEARY];const r=1/e.scaleX,o=1/e.scaleY;return(Math.atan2(t.d*o,t.b*r)-Math.atan2(t.c*o,t.a*r))*ke.radDeg-90+s[Mt.SHEARY]}}class _T extends il{mix(e){return e.mixShearY}apply(e,t,i,s,r,o){if(r)o||(s-=i.shearY),i.shearY+=s*t.mixShearY;else{const a=e.scaleX,c=e.scaleY,l=i.b/a,d=i.d/c,u=Math.atan2(d,l);s=(s+90)*ke.degRad,o?s-=ke.PI/2:(s-=u-Math.atan2(i.c/c,i.a/a),s>ke.PI?s-=ke.PI2:s<-ke.PI&&(s+=ke.PI2)),s=u+s*t.mixShearY;const h=Math.sqrt(l*l+d*d);i.b=Math.cos(s)*h*a,i.d=Math.sin(s)*h*c}}}class qQ{constructor(e){A(this,"scale",1);A(this,"attachmentLoader");A(this,"linkedMeshes",[]);this.attachmentLoader=e}readSkeletonData(e){const t=this.scale,i=new xT;i.name="";const s=new xV(e),r=s.readInt32(),o=s.readInt32();i.hash=o===0&&r===0?null:o.toString(16)+r.toString(16),i.version=s.readString(),i.x=s.readFloat(),i.y=s.readFloat(),i.width=s.readFloat(),i.height=s.readFloat(),i.referenceScale=s.readFloat()*t;const a=s.readBoolean();a&&(i.fps=s.readFloat(),i.imagesPath=s.readString(),i.audioPath=s.readString());let c=0;c=s.readInt(!0);for(let p=0;p>5;for(let x=0,C;x>1&1,v.spacingMode=y>>2&3,v.rotateMode=y>>4&3,(y&128)!==0&&(v.offsetRotation=s.readFloat());const b=v.setupPose;b.position=s.readFloat(),v.positionMode===Ps.Fixed&&(b.position*=t),b.spacing=s.readFloat(),(v.spacingMode===Ti.Length||v.spacingMode===Ti.Fixed)&&(b.spacing*=t),b.mixRotate=s.readFloat(),b.mixX=s.readFloat(),b.mixY=s.readFloat(),d.push(v);break}case zV:{const v=new Fd(m);v.bone=l[s.readInt(!0)];let y=s.readByte();if(v.skinRequired=(y&1)!==0,(y&2)!==0&&(v.x=s.readFloat()),(y&4)!==0&&(v.y=s.readFloat()),(y&8)!==0&&(v.rotate=s.readFloat()),(y&16)!==0){let x=s.readFloat();x<-2?(v.scaleYMode=en.Volume,x=-2-x):x<0&&(v.scaleYMode=en.Uniform,x=-1-x),v.scaleX=x}(y&32)!==0&&(v.shearX=s.readFloat()),v.limit=((y&64)!==0?s.readFloat():5e3)*t,v.step=1/s.readUnsignedByte();const b=v.setupPose;b.inertia=s.readFloat(),b.strength=s.readFloat(),b.damping=s.readFloat(),b.massInverse=(y&128)!==0?s.readFloat():1,b.wind=s.readFloat(),b.gravity=s.readFloat(),y=s.readByte(),(y&1)!==0&&(v.inertiaGlobal=!0),(y&2)!==0&&(v.strengthGlobal=!0),(y&4)!==0&&(v.dampingGlobal=!0),(y&8)!==0&&(v.massGlobal=!0),(y&16)!==0&&(v.windGlobal=!0),(y&32)!==0&&(v.gravityGlobal=!0),(y&64)!==0&&(v.mixGlobal=!0),b.mix=(y&128)!==0?s.readFloat():1,d.push(v);break}case jV:{const v=new Eo(m),y=s.readByte();if(v.skinRequired=(y&1)!==0,v.loop=(y&2)!==0,v.additive=(y&4)!==0,(y&8)!==0){const b=s.readFloat();a&&(y&64)!==0?v.max=b:v.setupPose.time=b}if((y&16)!==0&&(v.setupPose.mix=(y&32)!==0?s.readFloat():1),(y&64)!==0){v.local=(y&128)!==0,v.bone=l[s.readInt(!0)];const b=s.readFloat();let x=1;switch(s.readByte()){case 0:v.property=new Jm;break;case 1:{x=t,v.property=new Zm;break}case 2:{x=t,v.property=new Qm;break}case 3:v.property=new eg;break;case 4:v.property=new tg;break;case 5:v.property=new ig;break;default:continue}v.property.offset=b*x,v.offset=s.readFloat(),v.scale=s.readFloat()/x}d.push(v);break}}}const h=this.readSkin(s,i,!0,a);h&&(i.defaultSkin=h,i.skins.push(h));{let p=i.skins.length;for(Ke.setArraySize(i.skins,c=p+s.readInt(!0));p0){y=[];for(let S=0;S>4,e.readFloat())}r.push(I);break}}}}}const a=i.slots.length,c=e.readInt(!0);if(c>0){const f=new qr(c);for(let p=0;p0){const f=new cc(d);for(let p=0;p>>1^-(i&1)}readStringRef(){const e=this.readInt(!0);return e===0?null:this.strings[e-1]}readString(){let e=this.readInt(!0);switch(e){case 0:return null;case 1:return""}e--;let t="";for(let i=0;i>4){case 12:case 13:t+=String.fromCharCode((s&31)<<6|this.readByte()&63),i+=2;break;case 14:t+=String.fromCharCode((s&15)<<12|(this.readByte()&63)<<6|this.readByte()&63),i+=3;break;default:t+=String.fromCharCode(s),i++}}return t}readFloat(){const e=this.buffer.getFloat32(this.index);return this.index+=4,e}readBoolean(){return this.readByte()!==0}}let wV=class{constructor(e,t,i,s,r,o){A(this,"source");A(this,"skinIndex");A(this,"slotIndex");A(this,"sourceIndex");A(this,"mesh");A(this,"inheritTimelines");this.mesh=e,this.skinIndex=t,this.slotIndex=i,this.sourceIndex=s,this.source=r,this.inheritTimelines=o}};class Cx{constructor(e=null,t,i=0){A(this,"bones");A(this,"vertices");A(this,"length");this.bones=e,this.vertices=t,this.length=i}}var Ys;(function(n){n[n.Region=0]="Region",n[n.BoundingBox=1]="BoundingBox",n[n.Mesh=2]="Mesh",n[n.LinkedMesh=3]="LinkedMesh",n[n.Path=4]="Path",n[n.Point=5]="Point",n[n.Clipping=6]="Clipping"})(Ys||(Ys={}));function pi(n,e,t,i){t instanceof nr?SV(n,e,t,i):CV(n,e,t,i)}function SV(n,e,t,i){let s=n.readFloat(),r=n.readFloat()*i;for(let o=0,a=0,c=t.getFrameCount()-1;t.setFrame(o,s,r),o!==c;o++){const l=n.readFloat(),d=n.readFloat()*i;switch(n.readByte()){case ps:t.setStepped(o);break;case ms:vt(n,t,a++,o,0,s,l,r,d,i)}s=l,r=d}e.push(t)}function CV(n,e,t,i){let s=n.readFloat(),r=n.readFloat()*i,o=n.readFloat()*i;for(let a=0,c=0,l=t.getFrameCount()-1;t.setFrame(a,s,r,o),a!==l;a++){const d=n.readFloat(),u=n.readFloat()*i,h=n.readFloat()*i;switch(n.readByte()){case ps:t.setStepped(a);break;case ms:vt(n,t,c++,a,0,s,d,r,u,i),vt(n,t,c++,a,1,s,d,o,h,i)}s=d,r=u,o=h}e.push(t)}function Ax(n,e){const t=n.readInt(!0);if(t===0)return null;const i=new Array(e).fill(-1),s=new Array(e-t);let r=0,o=0;for(let a=0;a=0;a--)i[a]===-1&&(i[a]=s[--o]);return i}function vt(n,e,t,i,s,r,o,a,c,l){e.setBezier(t,i,s,r,a,n.readFloat(),n.readFloat()*l,n.readFloat(),n.readFloat()*l,o,c)}const AV=0,TV=1,EV=2,_V=3,MV=4,PV=5,IV=6,kV=7,RV=8,FV=9,LV=10,DV=0,OV=1,NV=2,$V=3,BV=4,UV=5,VV=0,XV=1,YV=2,zV=3,jV=4,HV=0,GV=1,WV=0,qV=1,KV=2,JV=0,ZV=1,QV=2,eX=4,tX=5,iX=6,nX=7,sX=8,rX=0,oX=1,ps=1,ms=2;class aX{constructor(e){A(this,"attachmentLoader");A(this,"scale",1);A(this,"linkedMeshes",[]);this.attachmentLoader=e}readSkeletonData(e){const t=this.scale,i=new xT,s=typeof e=="string"?JSON.parse(e):e,r=s.skeleton;if(r&&(i.hash=r.hash,i.version=r.spine,i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height,i.referenceScale=re(r,"referenceScale",100)*t,i.fps=r.fps,i.imagesPath=r.images??null,i.audioPath=r.audio??null),s.bones)for(let o=0;o0&&l.properties.push(T)}l.offsets[Mt.ROTATION]=re(o,"rotation",0),l.offsets[Mt.X]=re(o,"x",0)*t,l.offsets[Mt.Y]=re(o,"y",0)*t,l.offsets[Mt.SCALEX]=re(o,"scaleX",0),l.offsets[Mt.SCALEY]=re(o,"scaleY",0),l.offsets[Mt.SHEARY]=re(o,"shearY",0);const b=l.setupPose;h&&(b.mixRotate=re(o,"mixRotate",1)),f&&(b.mixX=re(o,"mixX",1)),p&&(b.mixY=re(o,"mixY",b.mixX)),m&&(b.mixScaleX=re(o,"mixScaleX",1)),g&&(b.mixScaleY=re(o,"mixScaleY",b.mixScaleX)),v&&(b.mixShearY=re(o,"mixShearY",1)),i.constraints.push(l);break}case"path":{const l=new Rd(a);l.skinRequired=c;for(let f=0;f0){const h=i.findConstraint(l,Fd);if(!h)throw new Error(`Physics constraint not found: ${l}`);u=i.constraints.indexOf(h)}for(const h in d){const f=d[h];let p=f[0];if(!p)continue;const m=f.length;let g,v=0;if(h==="reset"){const y=new Mu(m,u);for(let b=0;p!=null;p=f[b+1],b++)y.setFrame(b,re(p,"time",0));r.push(y);continue}switch(h){case"inertia":g=new lT(m,m,u);break;case"strength":g=new cT(m,m,u);break;case"damping":g=new dT(m,m,u);break;case"mass":g=new uT(m,m,u);break;case"wind":g=new hT(m,m,u);break;case"gravity":g=new fT(m,m,u);break;case"mix":{v=1,g=new pT(m,m,u);break}default:continue}gn(r,f,g,v,1)}}if(e.slider)for(const l in e.slider){const d=e.slider[l],u=i.findConstraint(l,Eo);if(!u)throw new Error(`Slider not found: ${l}`);const h=i.constraints.indexOf(u);for(const f in d){const p=d[f];if(!p[0])continue;const g=p.length;switch(f){case"time":gn(r,p,new mT(g,g,h),1,1);break;case"mix":gn(r,p,new gT(g,g,h),1,1);break}}}if(e.attachments)for(const l in e.attachments){const d=e.attachments[l],u=i.findSkin(l);if(!u)throw new Error(`Skin not found: ${l}`);for(const h in d){const f=d[h],p=i.findSlot(h);if(!p)throw new Error(`Attachment slot not found: ${h}`);const m=p.index;for(const g in f){const v=f[g],y=u.getAttachment(m,g);if(!y)throw new Error(`Timeline attachment not found: ${g}`);for(const b in v){const x=v[b];let C=x[0];if(C){if(b==="deform"){const T=y.bones,S=y.vertices,E=T?S.length/3*2:S.length,_=new iT(x.length,x.length,m,y);let I=re(C,"time",0);for(let M=0,k=0;;M++){let B;const D=re(C,"vertices",null);if(!D)B=T?Ke.newFloatArray(E):S;else{B=Ke.newFloatArray(E);const L=re(C,"offset",0);if(Ke.arrayCopy(D,0,B,L,D.length),s!==1)for(let N=L,F=N+D.length;N=0;l--)r[l]===-1&&(r[l]=o[--c]);return r}function wt(n,e,t,i,s,r,o,a,c,l){if(n==="stepped")return e.setStepped(i),t;const d=s<<2,u=n[d],h=n[d+1]*l,f=n[d+2],p=n[d+3]*l;return e.setBezier(t,i,s,r,a,u,h,f,p,o,c),t+1}function re(n,e,t){return n[e]!==void 0?n[e]:t}class cX{newRegionAttachment(e,t,i,s){return new hh(t,i)}newMeshAttachment(e,t,i,s){return new yc(t,i)}newBoundingBoxAttachment(e,t){return new eA(t)}newPathAttachment(e,t){return new lc(t)}newPointAttachment(e,t){return new oA(t)}newClippingAttachment(e,t){return new Oa(t)}}class dX{sequence(e){for(let t=0;t!Number.isInteger(d)||d<0||d>=o))throw new Error(Ye("errors.trailIndexOutOfRange",{name:e}));const a=Number(n.hull)||0;if(!Number.isInteger(a)||a<0||a>o)throw new Error(Ye("errors.invalidTrailHull",{name:e}));if(Array.isArray(n.edges)&&n.edges.some(d=>!Number.isInteger(d)||d<0||d>=o*2||d%2))throw new Error(Ye("errors.trailHullIndexOutOfRange",{name:e}));if(s.length===i.length)return;let c=0,l=0;for(;c=t)throw new Error(Ye("errors.missingBoneReference",{name:e}));if(![p,m,g].every(Number.isFinite)||g<0)throw new Error(Ye("errors.invalidWeight",{name:e}));u+=g}if(Math.abs(u-1)>.001)throw new Error(Ye("errors.weightSum",{name:e}));l++}if(c!==s.length||l!==o)throw new Error(Ye("errors.vertexCountMismatch",{name:e}))}function fX(n,e){var r,o,a,c;const t=Array.isArray(n.bones)?n.bones:[],i=new Map(t.map(l=>[String(l.name||""),l])),s=new Set;for(const l of t){if(l.inherit!=null&&!uX.has(l.inherit))throw new Error(Ye("errors.invalidInherit",{name:l.name||"",inherit:l.inherit,version:e}));if(/_trail_\d+_\d+$/.test(String(l.name||""))){const d=i.get(String(l.parent||""));if(!d||/_trail_\d+_\d+$/.test(String(d.name||"")))throw new Error(Ye("errors.trailBoneParent",{name:l.name||""}))}}for(const l of Array.isArray(n.skins)?n.skins:[]){const d=(l==null?void 0:l.attachments)||{};for(const u of Object.keys(d))for(const h of Object.keys(d[u]||{})){const f=d[u][h];(f==null?void 0:f.type)==="mesh"&&(hX(f,h,t.length),((r=f.vertices)==null?void 0:r.length)!==((o=f.uvs)==null?void 0:o.length)&&s.add(u))}}for(const l of Object.values(n.animations||{}))for(const d of s){const u=(c=(a=l==null?void 0:l.slots)==null?void 0:a[d])==null?void 0:c.attachment;if(Array.isArray(u)&&u.some(h=>!(h!=null&&h.name)))throw new Error(Ye("errors.trailSlotEmpty",{name:d}))}}function pX(n){var e;if(String(((e=n==null?void 0:n.skeleton)==null?void 0:e.spine)||"")!=="3.8")throw new Error(Ye("errors.spine38Version"));for(const t of n.bones||[])if(t.inherit!=null)throw new Error(Ye("errors.spine38Inherit",{name:t.name||""}));for(const t of Object.values(n.animations||{})){for(const s of Object.values(t.slots||{})){if(s.rgba||s.rgba2)throw new Error(Ye("errors.spine38SlotColor"));for(const r of s.attachment||[])if(!Object.prototype.hasOwnProperty.call(r,"name"))throw new Error(Ye("errors.spine38AttachmentName"))}for(const s of Object.values(t.bones||{}))for(const r of s.rotate||[])if(r.value!=null||r.angle==null)throw new Error(Ye("errors.spine38RotationAngle"));const i=[t];for(;i.length;){const s=i.pop();if(!(!s||typeof s!="object")){if(!Array.isArray(s)&&Array.isArray(s.curve))throw new Error(Ye("errors.spine38Curve"));i.push(...Object.values(s))}}}}function Ex(n,e){var o;const t=JSON.parse(n),i=lu((o=t==null?void 0:t.skeleton)==null?void 0:o.spine);if(!i)throw new Error(Ye("errors.unsupportedExportVersion",{versions:ym()}));if(e&&i!==e)throw new Error(Ye("errors.exportVersionMismatch",{expected:e,actual:i}));fX(t,i),i==="3.8"&&pX(t);const s=i==="3.8"?yA(JSON.parse(JSON.stringify(t))):t,r=i==="4.3"?new aX(new dX).readSkeletonData(s):new bu(new cX).readSkeletonData(s);if(!r.bones.length)throw new Error(Ye("errors.exportMissingBones"));return{version:i,bones:r.bones.length,slots:r.slots.length,animations:r.animations.length}}const MT="http://127.0.0.1:27843";class Iu extends Error{constructor(t,i="CONNECTOR_ERROR",s){super(t);A(this,"code");A(this,"pairUrl");this.name="SpineConnectorError",this.code=i,this.pairUrl=s}}function ng(n,e){return String(n||"").trim().replace(/[\\/:*?"<>|]+/g,"_").replace(/^\.+/,"")||e}function mX(n,e){const t=/\.([a-z0-9]{2,5})$/i.exec(n);return t?`.${t[1].toLowerCase()}`:e.includes("jpeg")?".jpg":e.includes("webp")?".webp":e.includes("gif")?".gif":".png"}function gX(n,e,t){const i=String(n||"").replace(/\\/g,"/").split("/").filter(Boolean).map(r=>ng(r,"images")),s=ng(e.replace(/\.[^./\\]+$/,""),"image");return[...i,`${s}${mX(e,t)}`].join("/")}async function yp(n,e,t){if(!n)return null;const i=await fetch(n);if(!i.ok)throw new Error(Ye("errors.readExportImageFailed",{name:t}));const s=await i.blob(),r=new Uint8Array(await s.arrayBuffer());let o="";const a=32768;for(let c=0;co.finally(()=>{i++,e==null||e(i,t.length)});for(const o of n.filter(a=>a.visible!==!1)){for(const a of o.config.imageResources)if(a.imageMode==="sequence"&&a.sequenceFrames.length)for(const c of a.sequenceFrames)t.push(s(yp(c.previewUrl,a.textureFolder,c.name||a.textureName)));else t.push(s(yp(a.previewUrl,a.textureFolder,a.textureName)));if(o.config.trail)for(const a of o.config.trailResources)t.push(s(yp(a.previewUrl,"",a.textureName)))}const r=new Map;for(const o of await Promise.all(t))o&&!r.has(o.path)&&r.set(o.path,o);return[...r.values()]}async function vX(){try{const n=await fetch(`${MT}/v1/health`,{cache:"no-store"});if(!n.ok)throw new Error(`HTTP ${n.status}`);return{available:!0,...await n.json()}}catch(n){return{available:!1,authorized:!1,error:n instanceof Error?n.message:String(n)}}}async function bX(n,e){const t=await PT(n.systems,(s,r)=>{e==null||e({phase:"images",progress:r?s/r:1})}),i=JSON.stringify({schemaVersion:1,projectName:n.projectName,spineVersion:n.spineVersion,skeletonJson:n.skeletonJson,images:t});return new Promise((s,r)=>{const o=new XMLHttpRequest;o.open("POST",`${MT}/v1/convert`),o.responseType="blob",o.setRequestHeader("Content-Type","application/json"),o.upload.onprogress=a=>{e==null||e({phase:"upload",progress:a.lengthComputable&&a.total>0?a.loaded/a.total:null})},o.upload.onloadend=()=>e==null?void 0:e({phase:"processing",progress:null}),o.onprogress=a=>{e==null||e({phase:"download",progress:a.lengthComputable&&a.total>0?a.loaded/a.total:null})},o.onerror=()=>r(new Iu(Ye("errors.connectorOffline"),"CONNECTOR_OFFLINE")),o.onload=async()=>{const a=o.response;if(o.status<200||o.status>=300){let d={};try{d=JSON.parse(await a.text())}catch{}r(new Iu(Ye("errors.connectorHttpError",{status:o.status}),d.code,d.pairUrl));return}const c=o.getResponseHeader("X-Spine-File-Name");let l=`${ng(n.projectName,"SpineParticle")}.zip`;if(c)try{l=decodeURIComponent(c)}catch{}s({blob:a,fileName:l,spineEditorVersion:o.getResponseHeader("X-Spine-Editor-Version")||n.spineVersion,imageCount:t.length})},o.send(i)})}function yX(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=/\.zip$/i.test(e)?e:`${e}.zip`,i.style.display="none",document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(t),1e3)}const xX=Array.from({length:256},(n,e)=>{let t=e;for(let i=0;i<8;i++)t=t&1?3988292384^t>>>1:t>>>1;return t>>>0});function wX(n){let e=4294967295;for(const t of n)e=xX[(e^t)&255]^e>>>8;return(e^4294967295)>>>0}function SX(n){const e=String(n||"").replace(/\\/g,"/").split("/").filter(t=>t&&t!==".");if(!e.length||e.some(t=>t===".."))throw new Error(Ye("errors.invalidZipPath"));return e.join("/")}function CX(n=new Date){const e=Math.max(1980,n.getFullYear());return{time:n.getHours()<<11|n.getMinutes()<<5|Math.floor(n.getSeconds()/2),date:e-1980<<9|n.getMonth()+1<<5|n.getDate()}}function xp(n){const e=new Uint8Array(n);return{bytes:e,view:new DataView(e.buffer)}}function _x(n){const e=new Uint8Array(n.reduce((i,s)=>i+s.length,0));let t=0;for(const i of n)e.set(i,t),t+=i.length;return e}function AX(n){const e=new TextEncoder,t=[],i=[],s=CX();let r=0;for(const c of n){const l=e.encode(SX(c.name)),d=wX(c.data),u=xp(30);u.view.setUint32(0,67324752,!0),u.view.setUint16(4,20,!0),u.view.setUint16(6,2048,!0),u.view.setUint16(10,s.time,!0),u.view.setUint16(12,s.date,!0),u.view.setUint32(14,d,!0),u.view.setUint32(18,c.data.length,!0),u.view.setUint32(22,c.data.length,!0),u.view.setUint16(26,l.length,!0),t.push(u.bytes,l,c.data);const h=xp(46);h.view.setUint32(0,33639248,!0),h.view.setUint16(4,20,!0),h.view.setUint16(6,20,!0),h.view.setUint16(8,2048,!0),h.view.setUint16(12,s.time,!0),h.view.setUint16(14,s.date,!0),h.view.setUint32(16,d,!0),h.view.setUint32(20,c.data.length,!0),h.view.setUint32(24,c.data.length,!0),h.view.setUint16(28,l.length,!0),h.view.setUint32(42,r,!0),i.push(h.bytes,l),r+=u.bytes.length+l.length+c.data.length}const o=_x(i),a=xp(22);return a.view.setUint32(0,101010256,!0),a.view.setUint16(8,n.length,!0),a.view.setUint16(10,n.length,!0),a.view.setUint32(12,o.length,!0),a.view.setUint32(16,r,!0),new Blob([_x([...t,o,a.bytes])],{type:"application/zip"})}function TX(n){const e=atob(n),t=new Uint8Array(e.length);for(let i=0;ii===".."||/^[a-z]+:/i.test(i))?"images":t.join("/")}function _X(n){return String(n||"SpineParticle").replace(/\.json$/i,"").replace(/[\\/:*?"<>|]+/g,"_").replace(/^\.+/,"")||"SpineParticle"}async function MX(n){const e=await PT(n.systems);if(!e.length)throw new Error(Ye("errors.noExportableImages"));const t=EX(n.imagesPath);return{blob:AX(e.map(s=>({name:`${t}/${s.path}`,data:TX(s.dataBase64)}))),imageCount:e.length,folder:t}}function PX(n,e){const t=`${_X(e)}-images.zip`,i=URL.createObjectURL(n),s=document.createElement("a");return s.href=i,s.download=t,s.style.display="none",document.body.appendChild(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(i),1e3),t}function IX(n){const{t:e}=fn();n.settings.exportSettings=MS(n.settings.exportSettings);const t=Fe(()=>n.settings.exportSettings),i=$e(!1),s=$e(null),r=$e(""),o=$e(!1),a=$e(null),c=$e(""),l=$e(""),d=Fe(()=>{const E=a.value;return E?E.available?E.spineFound?E.authorized?e("export.connectorReady"):e("export.notAuthorized"):e("export.spineNotFound"):e("export.connectorOffline"):e("export.connectorChecking")}),u=Fe(()=>{var E,_,I,M,k,B;return{ready:!!((E=a.value)!=null&&E.available)&&!!((_=a.value)!=null&&_.spineFound)&&!!((I=a.value)!=null&&I.authorized),warning:!!((M=a.value)!=null&&M.available)&&(!((k=a.value)!=null&&k.spineFound)||!((B=a.value)!=null&&B.authorized))}}),h=Fe(()=>{var E,_,I;return!!((E=a.value)!=null&&E.available)&&!!((_=a.value)!=null&&_.spineFound)&&!!((I=a.value)!=null&&I.authorized)}),f=Fe(()=>{const E=a.value;return!(E!=null&&E.available)||!E.spineFound||E.authorized||typeof window>"u"?"":`http://127.0.0.1:27843/pair?origin=${encodeURIComponent(window.location.origin)}`}),p=Fe(()=>{const E=a.value;return E?E.available?E.spineFound?E.authorized?"":e("export.unauthorized"):e("export.notFound"):e("export.offline"):e("export.checking")}),m=Fe(()=>i.value?e("export.connectorBusy"):p.value?`${e("common.disabled")}: ${p.value}`:e("export.connectorGenerate",{version:t.value.spineVersion}));Sn(()=>{y(),g=window.setInterval(y,3e3)});let g,v=0;eo(()=>{g!==void 0&&window.clearInterval(g)});async function y(){const E=++v,_=await vX();if(E!==v)return;a.value=_;const I=l.value;(I==="CONNECTOR_OFFLINE"?_.available:I==="SPINE_NOT_FOUND"?_.available&&_.spineFound:I==="ORIGIN_NOT_ALLOWED"?_.available&&_.spineFound&&_.authorized:!!I&&_.available&&_.spineFound&&_.authorized)&&(l.value="",c.value="",o.value&&(o.value=!1,r.value=""))}function b(){return new Promise(E=>requestAnimationFrame(()=>E()))}async function x(E){n.timeline.playing=!1,n.timeline.frame=0,n.timeline.recorded=!1;for(const M of n.systems)M.frames=void 0;n.recalcTotalFrames(),await b(),n.timeline.playing=!0;const _=n.timeline.totalFrames/Math.max(1,n.timeline.fps)*1e3,I=performance.now()+Math.max(8e3,_*2.5+3e3);for(;!n.timeline.recorded;){if(performance.now()>I)throw new Error(e("export.timeout"));E==null||E(Math.min(.98,n.timeline.frame/Math.max(1,n.timeline.totalFrames-1))),await new Promise(M=>setTimeout(M,50))}E==null||E(1)}async function C(){if(!i.value){i.value=!0,s.value="json",o.value=!1,l.value="",c.value="",r.value=e("export.recalculating");try{await x();const E=px({systems:n.systems,timeline:n.timeline,settings:t.value});Ex(E.text,t.value.spineVersion),oV(E,t.value.fileName);const _=E.warnings.length?e("export.resourceWarning",{count:E.warnings.length}):"";r.value=e("export.exported",{version:t.value.spineVersion,systems:E.particleSystemCount,animations:E.animationCount,bones:E.boneCount,warning:_})}catch(E){o.value=!0,r.value=E instanceof Error?E.message:String(E)}finally{i.value=!1,s.value=null}}}async function T(){if(i.value)return;i.value=!0,s.value="spine",o.value=!1,l.value="",c.value="",r.value=e("export.recalculating");const E=FA(e("export.projectTransferTitle"),e("export.projectTransferDetail"));try{await E.paint(),await x(k=>E.update(k*18,e("export.recalculating"))),E.update(20,e("export.generatingJson"));const _=px({systems:n.systems,timeline:n.timeline,settings:t.value});Ex(_.text,t.value.spineVersion),r.value=e("export.preparingProject");const I=t.value.fileName.replace(/\.json$/i,"")||"SpineParticle",M=await bX({projectName:I,spineVersion:t.value.spineVersion,skeletonJson:_.text,systems:n.systems},({phase:k,progress:B})=>{k==="images"?E.update(B==null?null:22+B*18,e("export.preparingProjectFiles")):k==="upload"?E.update(B==null?null:40+B*30,e("export.uploading")):k==="processing"?E.update(null,e("export.spineProcessing")):E.update(B==null?null:82+B*16,e("export.downloadingProject"))});E.update(99,e("export.handingToBrowser")),yX(M.blob,M.fileName),r.value=e("export.projectExported",{fileName:M.fileName,images:M.imageCount,version:M.spineEditorVersion}),await y(),await E.finish(e("export.projectTransferDownload"))}catch(_){const I=_ instanceof Error?_.message:String(_);o.value=!0,l.value=_ instanceof Iu?_.code:"",_ instanceof Iu&&_.pairUrl&&(c.value=_.pairUrl),r.value=I,await y(),await E.fail(I)}finally{i.value=!1,s.value=null}}async function S(){if(!i.value){i.value=!0,s.value="images",o.value=!1,l.value="",c.value="",r.value=e("export.collectingImages");try{const E=await MX({systems:n.systems,imagesPath:t.value.imagesPath}),_=PX(E.blob,t.value.fileName);r.value=e("export.imagesExported",{fileName:_,folder:E.folder,images:E.imageCount})}catch(E){o.value=!0,r.value=E instanceof Error?E.message:String(E)}finally{i.value=!1,s.value=null}}}return{exportSettings:t,exportBusy:i,exportTarget:s,exportMessage:r,exportError:o,connectorHealth:a,connectorPairUrl:c,connectorExportErrorCode:l,connectorStatusText:d,connectorStatusClass:u,connectorReady:h,connectorAuthorizationUrl:f,connectorDisabledReason:p,connectorButtonTitle:m,connectorHealthTimer:g,connectorHealthRequestId:v,refreshConnectorHealth:y,nextPaint:b,prepareExportFrames:x,exportSpineJson:C,exportSpineProject:T,exportSpineImages:S}}function kX(n){const e=$e(null),t=$e(""),i=$e([]),s=$e(!1),r=$e(""),o=$e(!1);function a(){TA(n),o.value=!1,r.value=Ye("config.saved")}async function c(u){var p;const h=u.target,f=(p=h.files)==null?void 0:p[0];if(f){r.value=Ye("config.loading"),o.value=!1;try{await U4(n,f),r.value=Ye("config.loaded",{name:f.name})}catch(m){o.value=!0,r.value=m instanceof Error?m.message:String(m)}finally{h.value=""}}}async function l(){try{const u=await fetch(`/Preset/index.json?t=${Date.now()}`,{cache:"no-store"});if(!u.ok)throw new Error(Ye("config.presetListError"));const h=await u.json();i.value=Array.isArray(h)?h.filter(f=>!!f&&typeof f.name=="string"&&typeof f.file=="string"):[]}catch{i.value=[]}}async function d(){const u=t.value;if(!u)return;s.value=!0,o.value=!1,r.value=Ye("config.presetLoading");const h=FA(Ye("config.presetTransferTitle"),Ye("config.presetDownloading",{file:u}));try{await h.paint();const f=await fetch(`/Preset/${encodeURIComponent(u)}`,{cache:"no-store"});if(!f.ok)throw new Error(Ye("config.presetReadError",{file:u}));const p=await k8(f,m=>{h.update(m==null?null:m*55,Ye("config.presetDownloading",{file:u}))});h.update(58,Ye("config.presetParsing")),h.update(70,Ye("config.presetRestoring")),await _A(n,p),r.value=Ye("config.presetLoaded",{name:u.replace(/\.json$/i,"")}),await h.finish(Ye("config.presetComplete"))}catch(f){o.value=!0;const p=f instanceof Error?f.message:String(f);r.value=Ye("config.presetNamingError",{message:p}),await h.fail(p)}finally{s.value=!1,t.value=""}}return Sn(l),{configFileInput:e,selectedPreset:t,presetOptions:i,presetLoading:s,configMessage:r,configError:o,saveConfig:a,onConfigFileChange:c,refreshPresets:l,loadSelectedPreset:d}}function RX(n){const e=$e(null),t=$e(null),i=$e(null),s=$e(null),r=$e(null);function o(){var $;const N=($=n.value)==null?void 0:$.config;if(!N)return;const F=Math.max(0,...N.trailResources.map(X=>X.id))+1;N.trailResources.push({id:F,texture:null,textureName:"trail",previewUrl:"/images/trail.png",weight:100,locked:!1,rotation:0,colorMode:"particle",color:"#ffffff",colorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}],blend:"normal",alphaMode:"particle",alpha:1,alphaCurve:Nm.map(X=>({...X})),boneCount:3,trailRatio:100,lengthMode:"fixed",length:100,lengthMin:100,lengthMax:100,widthSizeMode:"fixed",width:100,widthMin:100,widthMax:100,widthMode:"particle",lifeLengthEnabled:!1,lifeLengthCurve:Dm.map(X=>({...X})),shapeEnabled:!1,shapeCurve:$m.map(X=>({...X}))}),p()}function a(N){var F;r.value=N,(F=s.value)==null||F.click()}function c(N,F){var z;const $=(z=n.value)==null?void 0:z.config;if(!$)return;const X=N==="trailGridCols"?32:16;$[N]=Math.min(X,Math.max(2,Math.round(Number(F)||2)))}function l(N,F){var X;const $=(X=n.value)==null?void 0:X.config.trailResources.find(z=>z.id===N);$&&($.boneCount=Math.min(16,Math.max(2,Math.round(Number(F)||2))))}function d(N,F){var X;const $=(X=n.value)==null?void 0:X.config.trailResources.find(z=>z.id===N);$&&($.rotation=Math.max(-360,Math.min(360,Number(F)||0)))}async function u(N){var J,oe;const F=N.target,$=(J=F.files)==null?void 0:J[0],X=(oe=n.value)==null?void 0:oe.config,z=X==null?void 0:X.trailResources.find(le=>le.id===r.value);if(!$||!z){F.value="";return}const K=await E($);z.texture=Ur(await it.fromURL(K)),z.previewUrl=K,z.textureName=$.name.replace(/\.[^.]+$/,"")||"trail",F.value="",r.value=null}async function h(N){var X;const F=(X=n.value)==null?void 0:X.config,$=F==null?void 0:F.trailResources.find(z=>z.id===N);$&&($.texture=Ur(await it.fromURL("/images/trail.png")),$.previewUrl="/images/trail.png",$.textureName="trail",$.weight=100,$.locked=!1,$.rotation=0,$.boneCount=3,$.trailRatio=100,$.lengthMode="fixed",$.length=100,$.lengthMin=100,$.lengthMax=100,$.widthSizeMode="fixed",$.width=100,$.widthMin=100,$.widthMax=100,$.widthMode="particle",$.lifeLengthEnabled=!1,$.lifeLengthCurve=Dm.map(z=>({...z})),$.shapeEnabled=!1,$.shapeCurve=$m.map(z=>({...z})),$.colorMode="particle",$.color="#ffffff",$.colorGradient=[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}],$.blend="normal",$.alphaMode="particle",$.alpha=1,$.alphaCurve=Nm.map(z=>({...z})),p())}function f(N){var X;const F=(X=n.value)==null?void 0:X.config.trailResources;if(!F||F.length<=1)return;const $=F.findIndex(z=>z.id===N);$>=0&&F.splice($,1),p()}function p(){var z;const N=(z=n.value)==null?void 0:z.config.trailResources;if(!(N!=null&&N.length))return;if(N.length===1){N[0].weight=100,N[0].locked=!1;return}const F=N.filter(K=>K.locked),$=N.filter(K=>!K.locked);let X=F.reduce((K,J)=>K+Math.max(0,Number(J.weight)||0),0);X>100&&(G(F,100,!0),X=100),G($,100-X)}function m(N,F){var oe;const $=(oe=n.value)==null?void 0:oe.config.trailResources;if(!($!=null&&$.length))return;if($.length===1){$[0].weight=100,$[0].locked=!1;return}const X=$.find(le=>le.id===N);if(!X||X.locked)return;const z=$.filter(le=>le.id!==N&&le.locked).reduce((le,ve)=>le+Math.max(0,Number(ve.weight)||0),0),K=Math.max(0,100-z),J=$.filter(le=>le.id!==N&&!le.locked);X.weight=D(Math.min(K,Math.max(0,Number(F)||0))),J.length?G(J,K-X.weight,!0):X.weight=D(K)}function g(N){var X;const F=(X=n.value)==null?void 0:X.config.trailResources;if(!F||F.length===1)return;const $=F.find(z=>z.id===N);$&&($.locked=!$.locked)}function v(N,F){const $=F.target;N.color=I($.value,N.color),$.value=N.color}function y(N,F){v(N,F),F.target.blur()}function b(){var $;const N=($=n.value)==null?void 0:$.config;if(!N)return;const F=Math.max(0,...N.imageResources.map(X=>X.id))+1;N.imageResources.push({id:F,texture:N.texture,textureName:"star",textureFolder:"",previewUrl:"/images/star.png",imageMode:"fixed",sequencePlayback:"loop-forward",sequenceFps:30,sequenceFrames:[],weight:100,locked:!1,scale:1,anchorX:.5,anchorY:.5,colorMode:"fixed",colorStart:"#ffffff",colorEnd:"#ff4d4d",colorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ff4d4d"}],blend:"normal",independentAlpha:"off",alpha:1,alphaCurveMode:"跟随导出",alphaCurve:Om.map(X=>({...X}))}),V()}function x(N){var F;i.value=N,(F=e.value)==null||F.click()}function C(N){var F;i.value=N,(F=t.value)==null||F.click()}async function T(N){var oe,le;const F=N.target,$=(oe=F.files)==null?void 0:oe[0],X=(le=n.value)==null?void 0:le.config,z=X==null?void 0:X.imageResources.find(ve=>ve.id===i.value);if(!$||!z){F.value="";return}const K=await E($),J=Ur(await it.fromURL(K));z.texture=J,z.previewUrl=K,z.textureFolder="",z.textureName=$.name.replace(/\.[^.]+$/,"")||"particle",F.value="",i.value=null}async function S(N){var K;const F=N.target,$=Array.from(F.files||[]).sort((J,oe)=>J.name.localeCompare(oe.name,void 0,{numeric:!0,sensitivity:"base"})),X=(K=n.value)==null?void 0:K.config,z=X==null?void 0:X.imageResources.find(J=>J.id===i.value);if(!$.length||!z){F.value="";return}z.sequenceFrames=await Promise.all($.map(async J=>{const oe=await E(J);return{name:J.name,previewUrl:oe,texture:Ur(await it.fromURL(oe))}})),z.imageMode="sequence",F.value="",i.value=null}function E(N){return new Promise((F,$)=>{const X=new FileReader;X.onload=()=>F(String(X.result||"")),X.onerror=()=>$(X.error),X.readAsDataURL(N)})}function _(N){var X;const F=(X=n.value)==null?void 0:X.config,$=F==null?void 0:F.imageResources.find(z=>z.id===N);!F||!$||($.texture=F.texture,$.textureName="star",$.textureFolder="",$.previewUrl="/images/star.png",$.imageMode="fixed",$.sequencePlayback="loop-forward",$.sequenceFps=30,$.sequenceFrames=[],$.scale=1,$.anchorX=.5,$.anchorY=.5,$.colorMode="fixed",$.colorStart="#ffffff",$.colorEnd="#ff4d4d",$.colorGradient=[{position:0,color:"#ffffff"},{position:1,color:"#ff4d4d"}],$.blend="normal",$.independentAlpha="off",$.alpha=1,$.alphaCurveMode="跟随导出",$.alphaCurve=Om.map(z=>({...z})),$.locked=!1,V())}function I(N,F){let $=N.trim().replace(/^#/,"");return/^[0-9a-f]{3}$/i.test($)&&($=$.split("").map(X=>X+X).join("")),/^[0-9a-f]{6}$/i.test($)?`#${$.toLowerCase()}`:F}function M(N,F){const $=F.target;N.colorStart=I($.value,N.colorStart),$.value=N.colorStart}function k(N,F){M(N,F),F.target.blur()}function B(N){var X;const F=(X=n.value)==null?void 0:X.config.imageResources;if(!F||F.length<=1)return;const $=F.findIndex(z=>z.id===N);$>=0&&F.splice($,1),V()}function D(N){return Math.round(N)}function G(N,F,$=!1){if(!N.length)return;const X=Math.max(0,D(F)),z=$?N.reduce((J,oe)=>J+Math.max(0,Number(oe.weight)||0),0):0;let K=0;N.forEach((J,oe)=>{const le=oe===N.length-1,ve=D(le?X-K:z>0?X*Math.max(0,Number(J.weight)||0)/z:X/N.length);J.weight=ve,K+=ve})}function V(){var z;const N=(z=n.value)==null?void 0:z.config.imageResources;if(!(N!=null&&N.length))return;if(N.length===1){N[0].weight=100,N[0].locked=!1;return}const F=N.filter(K=>K.locked),$=N.filter(K=>!K.locked);let X=F.reduce((K,J)=>K+Math.max(0,Number(J.weight)||0),0);X>100&&(G(F,100,!0),X=100),G($,100-X)}function Y(N,F){var oe;const $=(oe=n.value)==null?void 0:oe.config.imageResources;if(!($!=null&&$.length))return;if($.length===1){$[0].weight=100,$[0].locked=!1;return}const X=$.find(le=>le.id===N);if(!X||X.locked)return;const z=$.filter(le=>le.id!==N&&le.locked).reduce((le,ve)=>le+Math.max(0,Number(ve.weight)||0),0),K=Math.max(0,100-z),J=$.filter(le=>le.id!==N&&!le.locked);if(X.weight=D(Math.min(K,Math.max(0,Number(F)||0))),!J.length){X.weight=D(K);return}G(J,K-X.weight,!0)}function L(N){var X;const F=(X=n.value)==null?void 0:X.config.imageResources;if(!F||F.length===1)return;const $=F.find(z=>z.id===N);$&&($.locked=!$.locked)}return{textureFileInput:e,sequenceFileInput:t,pendingResourceId:i,trailTextureFileInput:s,pendingTrailResourceId:r,addTrailResource:o,openTrailTexturePicker:a,onTrailRigChange:c,onTrailResourceBoneCountChange:l,onTrailResourceRotationChange:d,onTrailTextureFile:u,resetTrailTexture:h,removeTrailResource:f,rebalanceTrailWeights:p,setTrailResourceWeight:m,toggleTrailResourceLock:g,setTrailColor:v,commitTrailColor:y,addImageResource:b,openTexturePicker:x,openSequencePicker:C,onTextureFile:T,onSequenceFiles:S,readFileAsDataUrl:E,resetTexture:_,normalizeHex:I,setResourceFixedColor:M,commitResourceFixedColor:k,removeImageResource:B,roundWeight:D,distributeImageWeights:G,rebalanceImageWeights:V,setResourceWeight:Y,toggleResourceLock:L}}function FX(){const n=Go(),{t:e}=fn(),{exportSettings:t,exportBusy:i,exportTarget:s,exportMessage:r,exportError:o,connectorPairUrl:a,connectorStatusText:c,connectorStatusClass:l,connectorReady:d,connectorAuthorizationUrl:u,connectorDisabledReason:h,connectorButtonTitle:f,refreshConnectorHealth:p,exportSpineJson:m,exportSpineProject:g,exportSpineImages:v}=IX(n),{configFileInput:y,selectedPreset:b,presetOptions:x,presetLoading:C,configMessage:T,configError:S,saveConfig:E,onConfigFileChange:_,refreshPresets:I,loadSelectedPreset:M}=kX(n);function k(ie){return ie==="跟随导出"?t.value.keyframeCurve==="bezier"?"bezier":"linear":ie==="贝塞尔"?"bezier":"linear"}n.systems.length||n.addSystem();const B=Fe(()=>{const ie=n.systems.findIndex(pe=>pe.id===n.activeId);return ie>=0?ie:0}),D=Fe(()=>n.systems[B.value]||null),{textureFileInput:G,sequenceFileInput:V,trailTextureFileInput:Y,addTrailResource:L,openTrailTexturePicker:N,onTrailRigChange:F,onTrailResourceBoneCountChange:$,onTrailResourceRotationChange:X,onTrailTextureFile:z,resetTrailTexture:K,removeTrailResource:J,setTrailResourceWeight:oe,toggleTrailResourceLock:le,setTrailColor:ve,commitTrailColor:Se,addImageResource:fe,openTexturePicker:be,openSequencePicker:q,onTextureFile:Z,onSequenceFiles:se,resetTexture:j,setResourceFixedColor:H,commitResourceFixedColor:O,removeImageResource:U,setResourceWeight:W,toggleResourceLock:ee}=RX(D),ne=Fe(()=>D.value?PS(D.value.config,n.timeline.fps):30),ue=Fe(()=>{var pe;const ie=(pe=D.value)==null?void 0:pe.config;return ie?Math.max(1,Math.ceil(Number(ie.loopDurationFrames)||1)):1}),xe=Fe(()=>n.activeObjectType),ye=Fe(()=>n.activeObjectType==="collision"&&n.colliders.find(ie=>ie.id===n.activeObjectId)||null),Ne=Fe(()=>n.activeObjectType==="path"&&n.paths.find(ie=>ie.id===n.activeObjectId)||null),Be=Fe(()=>n.activeObjectType==="spine"&&n.spines.find(ie=>ie.id===n.activeObjectId)||null),de=Fe(()=>n.activeObjectType==="particle"?n.systems.some(ie=>ie.id===n.activeObjectId):n.activeObjectType==="collision"?n.colliders.some(ie=>ie.id===n.activeObjectId):n.activeObjectType==="path"?n.paths.some(ie=>ie.id===n.activeObjectId):n.spines.some(ie=>ie.id===n.activeObjectId)),ge=Fe(()=>{const ie=n.spines.find(pe=>pe.selectedBone&&pe.bones.some(Me=>Me.name===pe.selectedBone));return ie?{spine:ie,boneName:ie.selectedBone}:null}),Ge=Fe(()=>{var Me;const ie=(Me=D.value)==null?void 0:Me.config;if(!ie||ie.emitterFollowMode!=="bone")return null;const pe=n.spines.find(st=>st.id===ie.emitterFollowSpineId);return!pe||!pe.bones.some(st=>st.name===ie.emitterFollowBoneName)?null:{spine:pe,boneName:ie.emitterFollowBoneName}}),Le=$e(!1),Ee=$e(""),Ze=Fe(()=>n.spines.filter(ie=>ie.enabled&&ie.visible!==!1&&ie.status==="ready")),Te=Fe(()=>n.spines.find(ie=>{var pe;return ie.id===((pe=D.value)==null?void 0:pe.config.renderLayerSpineId)})||null),vi=Fe(()=>{const ie=Te.value;return!!ie&&ie.enabled&&ie.visible!==!1&&ie.status==="ready"}),lt=Fe(()=>{var ie;return[...((ie=Te.value)==null?void 0:ie.slots)||[]].sort((pe,Me)=>pe.order-Me.order)}),ce=Fe(()=>{const ie=Ee.value.trim().toLocaleLowerCase();return ie?lt.value.filter(pe=>pe.name.toLocaleLowerCase().includes(ie)||pe.attachment.toLocaleLowerCase().includes(ie)):lt.value}),he=Fe(()=>lt.value.find(ie=>{var pe;return ie.name===((pe=D.value)==null?void 0:pe.config.renderLayerSlotName)})||null),nt=Fe(()=>{const ie=he.value;return ie&<.value.filter(pe=>pe.orderMe.order-pe.order)[0]||null}),Ft=Fe(()=>{var st;const ie=(st=D.value)==null?void 0:st.config,pe=Te.value,Me=he.value;return!ie||!pe||!Me?"":e(ie.renderLayerSlotPosition==="below"?"renderLayer.slotLabelBelow":"renderLayer.slotLabelAbove",{spine:pe.name,slot:Me.name})}),Nt=Fe(()=>{var Me;const ie=(Me=D.value)==null?void 0:Me.config,pe=he.value;return!ie||!pe?"":ie.renderLayerSlotPosition==="above"?e("renderLayer.resolvedAbove",{slot:pe.name}):nt.value?e("renderLayer.resolvedBetween",{previous:nt.value.name,slot:pe.name}):""}),ct=Fe(()=>{var Me;const ie=(Me=D.value)==null?void 0:Me.config;if(!ie||ie.renderLayerMode!=="slot")return"";if(!Ze.value.length)return e("renderLayer.warningNoSpine");if(!ie.renderLayerSpineId)return e("renderLayer.warningNoSelection");const pe=Te.value;return pe?!pe.enabled||pe.status!=="ready"?e("renderLayer.warningNotReady"):ie.renderLayerSlotName?he.value?ie.renderLayerSlotPosition==="below"&&!nt.value?e("renderLayer.warningFirstSlot"):"":e("renderLayer.warningMissingSlot"):"":e("renderLayer.warningMissingSpine")});function rn(){var pe;const ie=(pe=D.value)==null?void 0:pe.config;ie&&(ie.renderLayerMode="slot",!ie.renderLayerSpineId&&Ze.value.length&&(ie.renderLayerSpineId=Ze.value[0].id),Le.value=!ie.renderLayerSlotName)}function Nn(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;pe&&(pe.renderLayerSpineId=Math.max(0,Math.round(Number(ie.target.value)||0)),pe.renderLayerSlotName="",Le.value=!0)}function jt(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;pe&&(pe.renderLayerSlotName=ie.name,Le.value=!1,Ee.value="")}function $i(){var pe;const ie=(pe=D.value)==null?void 0:pe.config;ie&&(ie.renderLayerSlotName="",ie.renderLayerSlotPosition="above")}const Ut=$e(!1),on=Fe(()=>{var pe;const ie=new Set(((pe=D.value)==null?void 0:pe.config.collisionColliderIds)||[]);return n.colliders.filter(Me=>ie.has(Me.id))}),fi=Fe(()=>{var pe;const ie=new Set(((pe=D.value)==null?void 0:pe.config.collisionColliderIds)||[]);return n.colliders.filter(Me=>!ie.has(Me.id))});ei(()=>{var ie,pe;return[(ie=D.value)==null?void 0:ie.id,(pe=D.value)==null?void 0:pe.config.collision]},()=>{Ut.value=!1}),ei(()=>{var ie;return(ie=D.value)==null?void 0:ie.id},()=>{Le.value=!1,Ee.value=""});function $n(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;!pe||pe.collisionColliderIds.includes(ie)||(pe.collisionColliderIds.push(ie),Ut.value=!1)}function Fs(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;pe&&(pe.collisionColliderIds=pe.collisionColliderIds.filter(st=>st!==ie))}ha(()=>{for(const ie of n.systems)ie.visible==null&&(ie.visible=!0);for(const ie of n.colliders)ie.visible==null&&(ie.visible=!0);for(const ie of n.paths)ie.visible==null&&(ie.visible=!0);for(const ie of n.spines)ie.visible==null&&(ie.visible=!0)}),ha(()=>{if(!D.value)return;const ie=lr(D.value.config);ie.lifeMode==="curve"&&(ie.lifeMode="random"),ie.speedMode==="curve"&&(ie.speedMode="random"),ie.scaleMode==="curve"&&(ie.scaleMode="random"),ie.initialRotationMode==="curve"&&(ie.initialRotationMode="random"),ie.mode==="stream"&&!(ie.duration>0)&&(ie.duration=1),ie.streamBehavior==="loop"&&(ie.emitterFollow||ie.emitterFollowMode!=="none")&&Jo(ie)}),ha(()=>{const ie=new Set(n.colliders.map(Me=>Me.id)),pe=new Set(n.systems.map(Me=>Me.id));for(const Me of n.systems){const st=lr(Me.config),ci=st.collisionColliderIds.filter(mn=>ie.has(mn));ci.length!==st.collisionColliderIds.length&&(st.collisionColliderIds=ci),st.spawnPathId>0&&!n.paths.some(mn=>mn.id===st.spawnPathId)&&(st.spawnPathId=0,(st.emissionAngleMode==="path-normal"||st.emissionAngleMode==="path-tangent")&&(st.emissionAngleMode="fixed"));const ea=kS(n.systems,Me.id);for(const mn of st.events||[])mn.targetSystemId>0&&(mn.targetSystemId===Me.id||ea.has(mn.targetSystemId)||!pe.has(mn.targetSystemId))&&(mn.targetSystemId=0);if(st.emitterFollowMode!=="bone")continue;const wh=n.spines.find(mn=>mn.id===st.emitterFollowSpineId);!!(wh!=null&&wh.bones.some(mn=>mn.name===st.emitterFollowBoneName))||(st.emitterFollowMode="none",st.emitterFollowSpineId=0,st.emitterFollowBoneName="")}}),ha(()=>{for(const ie of n.systems){const pe=lr(ie.config);pe.renderLayerMode!=="slot"||!pe.renderLayerSpineId||n.spines.some(Me=>Me.id===pe.renderLayerSpineId)||(pe.renderLayerSpineId=0,pe.renderLayerSlotName="")}}),ha(()=>{for(const ie of n.colliders)ie.followPathId==null&&(ie.followPathId=0),ie.followDuration>0||(ie.followDuration=2),ie.followPathRotation==null&&(ie.followPathRotation=!1),["跟随导出","线性","贝塞尔"].includes(ie.followCurveMode)||(ie.followCurveMode="跟随导出"),(!Array.isArray(ie.followCurve)||ie.followCurve.length<2)&&(ie.followCurve=[{x:0,y:0},{x:1,y:1}])});const An=zo({config:!0,scene:!1,emitMode:!0,shape:!0,attr:!0,look:!0,mods:!0,export:!1});function pn(ie){An[ie]=!An[ie]}function br(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;pe&&(pe.mode=ie,ie==="stream"&&!(pe.duration>0)&&(pe.duration=1))}function yr(ie){var st;const pe=(st=D.value)==null?void 0:st.config;if(!pe)return;const Me=Math.min(1800,Math.max(1,Math.ceil(Number(ie)||1)));pe.loopDurationFrames=Me}function Jo(ie){const pe=tc();ie.emitterFollow=!1,ie.emitterFollowMode="none",ie.emitterFollowPathId=pe.emitterFollowPathId,ie.emitterFollowSpineId=pe.emitterFollowSpineId,ie.emitterFollowBoneName=pe.emitterFollowBoneName,ie.emitterFollowBoneOffsetX=pe.emitterFollowBoneOffsetX,ie.emitterFollowBoneOffsetY=pe.emitterFollowBoneOffsetY,ie.emitterFollowBoneRotation=pe.emitterFollowBoneRotation,ie.emitterFollowBoneScaleX=pe.emitterFollowBoneScaleX,ie.emitterFollowBoneScaleY=pe.emitterFollowBoneScaleY,ie.emitterAngleMode=pe.emitterAngleMode,ie.emitterFollowCurve=pe.emitterFollowCurve.map(Me=>({...Me})),ie.emitterFollowDuration=pe.emitterFollowDuration,ie.emitterFollowSpace=pe.emitterFollowSpace,ie.emitterFollowDirection=pe.emitterFollowDirection,ie.emitterFollowOffset=pe.emitterFollowOffset}function nl(ie){var ci;const pe=(ci=D.value)==null?void 0:ci.config;if(!pe||pe.streamBehavior===ie)return;const Me=ie==="loop",st=e(Me?"errors.confirmLoopFollowEnter":"errors.confirmLoopFollowExit");window.confirm(st)&&(Jo(pe),pe.streamBehavior=ie,Me||(pe.generateLoopStartAnimation=!1,pe.generateLoopEndAnimation=!1))}function Cc(ie,pe){var ci;const Me=(ci=D.value)==null?void 0:ci.config;if(!Me)return;const st=pe.target.checked;ie==="start"?Me.generateLoopStartAnimation=st:Me.generateLoopEndAnimation=st}function Ac(ie,pe){var ci;const Me=(ci=D.value)==null?void 0:ci.config;if(!Me)return;const st=Math.min(1800,Math.max(1,Math.ceil(Number(pe.target.value)||30)));ie==="start"?Me.loopStartDurationFrames=st:Me.loopEndDurationFrames=st}function sl(ie,pe){var ci;const Me=(ci=D.value)==null?void 0:ci.config;if(!Me)return;const st=pe.target.checked;ie==="start"?Me.loopStartUseCustomDuration=st:Me.loopEndUseCustomDuration=st}function Tc(ie,pe){const Me=ie.target.value;if(pe.emitterFollowMode=Me,Me!=="bone"){pe.emitterFollowSpineId=0,pe.emitterFollowBoneName="";return}Zo(pe)}function Zo(ie){const pe=ge.value;if(!pe){ie.emitterFollowMode="none",ie.emitterFollowSpineId=0,ie.emitterFollowBoneName="";return}ie.emitterFollowMode="bone",ie.emitterFollowSpineId=pe.spine.id,ie.emitterFollowBoneName=pe.boneName}const Ec={emitMode:["mode","rate","streamBehavior","loopDurationFrames","generateLoopStartAnimation","loopStartUseCustomDuration","loopStartDurationFrames","generateLoopEndAnimation","loopEndUseCustomDuration","loopEndDurationFrames","burstCount","burstLoop","delay","duration"],shape:["shape","showShape","shapeRangeVersion","innerRadius","outerRadius","innerRectW","innerRectH","outerRectW","outerRectH","spawnPathId","spawnPathDistribution","radius","rectW","rectH","emissionAngleMode","direction","spread","coneDirection","coneAngle"],attr:["lifeMin","lifeMax","lifeMode","lifeCurve","speedMin","speedMax","speedMode","speedCurve","scaleMin","scaleMax","scaleMode","scaleAxisMode","scaleYMin","scaleYMax","scaleCurve","scaleYCurve","scaleEndRatio","initialRotationMode","initialRotationMin","initialRotationMax","initialRotationCurve","rotationSpeedMin","rotationSpeedMax","speedOverLifeEnabled","speedOverLifeMode","speedOverLifeMin","speedOverLifeMax","speedOverLifeCurve","scaleOverLifeEnabled","scaleOverLifeMode","scaleOverLifeAxisMode","scaleOverLifeMin","scaleOverLifeMax","scaleYOverLifeMin","scaleYOverLifeMax","scaleOverLifeCurve","scaleYOverLifeCurve","rotationOverLifeEnabled","rotationOverLifeMode","rotationOverLifeCurve"],look:["texture","imageResources","imageWeightVersion","alpha","alphaEnd","colorStart","colorEnd","colorOverLife","blend","alphaMode","curveMode","alphaCurve","textureName","textureFolder","alphaScale","anchorX","anchorY","independentAlpha","renderLayerMode","renderLayerSpineId","renderLayerSlotName","renderLayerSlotPosition","renderLayerFollowAttachment"],mods:["noise","noiseAmt","noiseRange","noiseSpeed","useGravity","gravity","gravityMode","gravityMin","gravityMax","gravityDirection","gravityCurve","wind","windX","windY","windMode","windMin","windMax","windDirection","windCurve","forceField","forceStrength","forceRadius","forceCenterX","forceCenterY","forceFalloff","showForceFieldShape","vortex","vortexStrength","vortexRadius","vortexCenterX","vortexCenterY","vortexFalloff","showVortexShape","attraction","attractionCenterX","attractionCenterY","attractionRadius","attractionDuration","attractionDelay","attractionDelayMode","attractionPath","showAttractionShape","trail","trailConfigVersion","trailResources","trailResourceVersion","trailTexture","trailTextureName","trailPreviewUrl","trailColorMode","trailColor","trailColorGradient","trailAlphaMode","trailAlpha","trailAlphaCurve","trailBoneCount","trailLength","trailWidth","trailWidthMode","trailLifeLengthEnabled","trailLifeLengthCurve","trailShapeEnabled","trailShapeCurve","trailGridRows","trailGridCols","collision","collisionColliderIds","pathFollow","eventEnabled","events","emitterFollow","emitterFollowMode","emitterFollowPathId","emitterFollowSpineId","emitterFollowBoneName","emitterFollowBoneOffsetX","emitterFollowBoneOffsetY","emitterFollowBoneRotation","emitterFollowBoneScaleX","emitterFollowBoneScaleY","emitterAngleMode","emitterFollowCurve","emitterFollowDuration","emitterFollowSpace","emitterFollowDirection","emitterFollowOffset","damping"]};function yh(ie){var st;const pe=(st=D.value)==null?void 0:st.config;if(ie==="export"){n.settings.exportSettings=Dg();return}if(!pe)return;const Me=tc();for(const ci of Ec[ie])pe[ci]=Me[ci]}function rl(){t.value.fps=Math.min(240,Math.max(1,Math.round(Number(t.value.fps)||30)))}function xr(ie){var pe;n.selectSystem(((pe=n.systems[ie])==null?void 0:pe.id)??0)}function Qo(){n.addSystem()}function xh(){n.addCollider()}function _c(){n.addPath()}function FT(){n.addSpine()}function LT(){n.duplicateSelectedObject()}function Ls(ie,pe,Me=0,st=0,ci=0,ea=0){return{x:ie,y:pe,inX:Me,inY:st,outX:ci,outY:ea}}function DT(){const ie=Ne.value;if(!(!ie||!ie.preset))if(ie.preset==="circle"){const Me=60.751328;ie.points=[Ls(110,0,0,-Me,0,Me),Ls(0,110,Me,0,-Me,0),Ls(-110,0,0,Me,0,-Me),Ls(0,-110,-Me,0,Me,0)],ie.closed=!0}else if(ie.preset==="square")ie.points=[Ls(-100,-100),Ls(100,-100),Ls(100,100),Ls(-100,100)],ie.closed=!0;else{const pe=ie.preset==="star"?10:6;ie.points=Array.from({length:pe},(Me,st)=>{const ci=ie.preset==="star"&&st%2?50:110,ea=-Math.PI*.5+st/pe*Math.PI*2;return Ls(Math.cos(ea)*ci,Math.sin(ea)*ci)}),ie.closed=!0}}function OT(){Ne.value&&(Ne.value.points=[])}function NT(){D.value&&(D.value.config.seed=Math.floor(Math.random()*999999)+1)}function $T(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;!pe||ie==="direction"||(pe.speedOverLifeMode=ie,ie==="curve"&&pe.speedOverLifeMin===pe.speedOverLifeMax&&(pe.speedOverLifeMin=0,pe.speedOverLifeMax=1))}function lv(){var pe;const ie=(pe=D.value)==null?void 0:pe.config;!ie||ie.scaleOverLifeMode!=="curve"||(ie.scaleOverLifeMin===ie.scaleOverLifeMax&&(ie.scaleOverLifeMin=0,ie.scaleOverLifeMax=1),ie.scaleYOverLifeMin===ie.scaleYOverLifeMax&&(ie.scaleYOverLifeMin=0,ie.scaleYOverLifeMax=1))}function BT(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;!pe||ie==="direction"||(pe.scaleOverLifeMode=ie,lv())}const UT={point:{emissionAngleMode:"random",direction:0,spread:360},circle:{innerRadius:0,outerRadius:100,emissionAngleMode:"fixed",direction:-90,spread:0},rect:{innerRectW:0,innerRectH:0,outerRectW:200,outerRectH:100,emissionAngleMode:"fixed",direction:-90,spread:0},cone:{innerRadius:0,outerRadius:100,coneAngle:90,coneDirection:90,emissionAngleMode:"random",direction:90,spread:90},path:{spawnPathId:0,spawnPathDistribution:"fixed",emissionAngleMode:"fixed",direction:0,spread:0}};function VT(){var Me;const ie=(Me=D.value)==null?void 0:Me.config;if(!ie)return;const pe=UT[ie.shape];pe&&Object.assign(ie,pe)}function XT(){var pe;const ie=(pe=D.value)==null?void 0:pe.config;!ie||ie.spawnPathId>0||(ie.emissionAngleMode==="path-normal"||ie.emissionAngleMode==="path-tangent")&&(ie.emissionAngleMode="fixed")}return{store:n,exportSettings:t,exportBusy:i,exportTarget:s,exportMessage:r,exportError:o,connectorPairUrl:a,connectorStatusText:c,connectorStatusClass:l,connectorReady:d,connectorAuthorizationUrl:u,connectorDisabledReason:h,connectorButtonTitle:f,refreshConnectorHealth:p,exportSpineJson:m,exportSpineProject:g,exportSpineImages:v,configFileInput:y,selectedPreset:b,presetOptions:x,presetLoading:C,configMessage:T,configError:S,saveConfig:E,onConfigFileChange:_,refreshPresets:I,loadSelectedPreset:M,resolvedCurveEditorMode:k,sys:D,textureFileInput:G,sequenceFileInput:V,trailTextureFileInput:Y,addTrailResource:L,openTrailTexturePicker:N,onTrailRigChange:F,onTrailResourceBoneCountChange:$,onTrailResourceRotationChange:X,onTrailTextureFile:z,resetTrailTexture:K,removeTrailResource:J,setTrailResourceWeight:oe,toggleTrailResourceLock:le,setTrailColor:ve,commitTrailColor:Se,addImageResource:fe,openTexturePicker:be,openSequencePicker:q,onTextureFile:Z,onSequenceFiles:se,resetTexture:j,setResourceFixedColor:H,commitResourceFixedColor:O,removeImageResource:U,setResourceWeight:W,toggleResourceLock:ee,automaticLoopDuration:ne,loopDurationFrames:ue,activeObjectType:xe,activeCollider:ye,activePath:Ne,activeSpine:Be,canCopyObject:de,selectedSpineBone:ge,boundSpineBone:Ge,renderLayerSlotPickerOpen:Le,renderLayerSlotSearch:Ee,renderLayerReadySpines:Ze,renderLayerSpineReady:vi,renderLayerSlots:lt,renderLayerFilteredSlots:ce,renderLayerSlotLabel:Ft,renderLayerResolvedLabel:Nt,renderLayerWarning:ct,setRenderLayerSlotMode:rn,selectRenderLayerSpine:Nn,pickRenderLayerSlot:jt,clearRenderLayerSlot:$i,collisionPickerOpen:Ut,selectedCollisionBodies:on,availableCollisionBodies:fi,addCollisionBody:$n,removeCollisionBody:Fs,collapsed:An,toggle:pn,setEmitMode:br,setLoopDurationFrames:yr,setStreamBehavior:nl,setLoopSection:Cc,setLoopSectionDuration:Ac,setLoopCustomDuration:sl,onEmitterFollowModeChange:Tc,bindSelectedBone:Zo,resetModule:yh,normalizeExportFps:rl,select:xr,addSys:Qo,addCollider:xh,addPath:_c,addSpine:FT,copySelectedObject:LT,applyPathPreset:DT,clearPathAnchors:OT,randomizeSeed:NT,setSpeedOverLifeMode:$T,prepareScaleOverLifeCurve:lv,setScaleOverLifeMode:BT,onShapeChange:VT,onSpawnPathChange:XT,LINEAR_CURVE:M8,FLAT_CURVE:Dm,ALPHA_CURVE:P8,RESOURCE_ALPHA_CURVE:Om,TRAIL_ALPHA_CURVE:Nm,TRAIL_SHAPE_CURVE:$m}}const IT=Symbol("particle-panel");function LX(){const n=FX();return l1(IT,n),n}function oo(){const n=Ro(IT);if(!n)throw new Error("Particle panel sections require a ParticlePanel parent");return n}const DX={class:"group config-management"},OX={class:"caret"},NX={class:"group-body config-management-body"},$X={class:"config-toolbar"},BX=["title"],UX=["title"],VX=["aria-label","disabled"],XX={value:""},YX=["value"],zX=qt({__name:"ProjectConfigSection",setup(n){const{configFileInput:e,selectedPreset:t,presetOptions:i,presetLoading:s,configMessage:r,configError:o,saveConfig:a,onConfigFileChange:c,refreshPresets:l,loadSelectedPreset:d,collapsed:u,toggle:h,select:f}=oo(),{t:p}=fn(),m={"1.粒子扫过.json":"presets.particleSweep","2.长条方块.json":"presets.barBlocks","3.力场拖尾.json":"presets.forceTrail","4.雷电序列帧.json":"presets.lightningSequence","5.贴图轴点.json":"presets.texturePivot","6.子发射器.json":"presets.subEmitter"};function g(v){const y=m[v.file];return y?p(y):v.name}return(v,y)=>(Q(),te("div",DX,[w("div",{class:"group-head",onClick:y[0]||(y[0]=b=>P(h)("config"))},[w("span",OX,R(P(u).config?"▸":"▾"),1),w("span",null,R(v.$t("config.title")),1)]),me(w("div",NX,[w("div",$X,[w("button",{title:v.$t("config.saveTitle"),onClick:y[1]||(y[1]=(...b)=>P(a)&&P(a)(...b))},R(v.$t("config.save")),9,BX),w("button",{title:v.$t("config.loadTitle"),onClick:y[2]||(y[2]=b=>{var x;return(x=P(e))==null?void 0:x.click()})},R(v.$t("config.load")),9,UX),me(w("select",{"onUpdate:modelValue":y[3]||(y[3]=b=>Qt(t)?t.value=b:null),"aria-label":v.$t("config.presets"),disabled:!P(i).length||P(s),onPointerdown:y[4]||(y[4]=(...b)=>P(l)&&P(l)(...b)),onFocus:y[5]||(y[5]=(...b)=>P(l)&&P(l)(...b)),onChange:y[6]||(y[6]=(...b)=>P(d)&&P(d)(...b))},[w("option",XX,R(P(i).length?v.$t("config.selectPreset"):v.$t("config.noPresets")),1),(Q(!0),te(_e,null,Pt(P(i),b=>(Q(),te("option",{key:b.file,value:b.file},R(g(b)),9,YX))),128))],40,VX),[[St,P(t)]]),w("input",{ref_key:"configFileInput",ref:e,hidden:"",type:"file",accept:".json,application/json",onChange:y[7]||(y[7]=(...b)=>P(c)&&P(c)(...b))},null,544)]),P(r)?(Q(),te("div",{key:0,class:Ie(["config-message",{error:P(o)}])},R(P(r)),3)):Ce("",!0)],512),[[Fi,!P(u).config]])]))}}),jX=li(zX,[["__scopeId","data-v-09679738"]]),HX={class:"ns-label"},GX=["min","max","step","value","disabled"],WX=["min","max","step","value","disabled"],qX=qt({__name:"NumSlider",props:{label:{},modelValue:{},min:{},max:{},step:{},disabled:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:e}){const t=n,i=e,s=$e(String(t.modelValue));ei(()=>t.modelValue,c=>{s.value=String(c)});function r(c){const l=parseFloat(c.target.value);Number.isNaN(l)||i("update:modelValue",l)}function o(c){s.value=c.target.value;const l=parseFloat(s.value);Number.isNaN(l)||i("update:modelValue",l)}function a(){const c=parseFloat(s.value);Number.isNaN(c)&&(s.value=String(t.modelValue))}return(c,l)=>(Q(),te("div",{class:Ie(["ns",{disabled:n.disabled}])},[w("span",HX,R(n.label),1),w("input",{type:"range",class:"ns-range",min:n.min,max:n.max,step:n.step,value:n.modelValue,disabled:n.disabled,onInput:r},null,40,GX),w("input",{type:"number",class:"ns-num",min:n.min,max:n.max,step:n.step,value:s.value,disabled:n.disabled,onInput:o,onBlur:a},null,40,WX)],2))}}),Ue=li(qX,[["__scopeId","data-v-7c2fbed0"]]),KX={class:"ce"},JX={class:"ce-editor"},ZX={class:"ce-grid"},QX=["x1","x2","y2"],eY=["y1","x2","y2"],tY=["x","y","width","height"],iY=["d"],nY={key:0,class:"ce-handles"},sY=["x1","y1","x2","y2"],rY=["cx","cy","onPointerdown"],oY=["x1","y1","x2","y2"],aY=["cx","cy","onPointerdown"],lY=["cx","cy"],cY=["cx","cy","onPointerdown","onDblclick"],dY={class:"ce-nav"},uY={class:"ce-tip"},hY=["title"],Ar=8,fY=qt({__name:"CurveEditor",props:{modelValue:{},defaultValue:{default:()=>[{x:0,y:0},{x:1,y:1}]},mode:{default:"linear"}},emits:["update:modelValue"],setup(n,{emit:e}){const t=n,i=e,s=$e(null),r=$e(300),o=$e(110);let a=null;function c(){if(!s.value)return;const M=s.value.getBoundingClientRect();r.value=M.width,o.value=M.height}function l(M){return Ar+M*(r.value-Ar*2)}function d(M){return Ar+(1-M)*(o.value-Ar*2)}function u(){return[...t.modelValue].sort((M,k)=>M.x-k.x)}function h(M){i("update:modelValue",[...M].sort((k,B)=>k.x-B.x))}function f(){h(t.defaultValue.map(M=>({...M})))}const p=Fe(()=>u());function m(M){const k=p.value[M],B=p.value[Math.max(0,M-1)];return{x:k.x-(k.x-B.x)/3,y:k.y-(k.y-B.y)/3}}function g(M){const k=p.value[M],B=p.value[Math.min(p.value.length-1,M+1)];return{x:k.x+(B.x-k.x)/3,y:k.y+(B.y-k.y)/3}}function v(M){const k=p.value[M],B=m(M);return{x:k.x+(k.inX??B.x-k.x),y:k.y+(k.inY??B.y-k.y)}}function y(M){const k=p.value[M],B=g(M);return{x:k.x+(k.outX??B.x-k.x),y:k.y+(k.outY??B.y-k.y)}}const b=Fe(()=>{if(!p.value.length)return"";let M=`M ${l(p.value[0].x)} ${d(p.value[0].y)}`;for(let k=1;kMath.abs(G.x-k)>.02);D.push({x:k,y:B}),h(D)}let S={t:0,i:-1,x:0,y:0};function E(M,k){M.stopPropagation();const B=u().findIndex(Y=>Math.abs(Y.x-p.value[k].x)<1e-6&&Math.abs(Y.y-p.value[k].y)<1e-6);if(B<0)return;const D=Date.now();if(D-S.t<300&&S.i===k&&Math.abs(M.clientX-S.x)<8&&Math.abs(M.clientY-S.y)<8){S={t:0,i:-1,x:0,y:0},I(k);return}S={t:D,i:k,x:M.clientX,y:M.clientY};const G=Y=>{(Math.abs(Y.clientX-M.clientX)>8||Math.abs(Y.clientY-M.clientY)>8)&&(S={t:0,i:-1,x:0,y:0});const{x:L,y:N}=x(Y.clientX,Y.clientY),F=u();F[B]={x:L,y:N},h(F)},V=()=>{window.removeEventListener("pointermove",G),window.removeEventListener("pointerup",V)};window.addEventListener("pointermove",G),window.addEventListener("pointerup",V)}function _(M,k,B){M.stopPropagation();const D=V=>{const Y=x(V.clientX,V.clientY),L=u(),N=L[k],F=B==="in"?L[Math.max(0,k-1)].x:N.x,$=B==="in"?N.x:L[Math.min(L.length-1,k+1)].x,X=Math.min($,Math.max(F,Y.x)),z=Math.round((X-N.x)*100)/100,K=Math.round((Y.y-N.y)*100)/100;L[k]=B==="in"?{...N,inX:z,inY:K}:{...N,outX:z,outY:K},h(L)},G=()=>{window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",G)};window.addEventListener("pointermove",D),window.addEventListener("pointerup",G)}function I(M,k){k==null||k.stopPropagation();const B=u();B.length<=2||(C=Date.now(),h(B.filter((D,G)=>G!==M)))}return Sn(()=>{c(),a=new ResizeObserver(c),s.value&&a.observe(s.value)}),Za(()=>{a==null||a.disconnect()}),(M,k)=>(Q(),te("div",KX,[w("div",JX,[(Q(),te("svg",{ref_key:"svg",ref:s,class:"ce-svg",onDblclick:T},[w("g",ZX,[(Q(),te(_e,null,Pt([.25,.5,.75],B=>w("line",{key:"v"+B,x1:l(B),y1:"0",x2:l(B),y2:d(0)},null,8,QX)),64)),(Q(),te(_e,null,Pt([.25,.5,.75],B=>w("line",{key:"h"+B,x1:"0",y1:d(B),x2:l(1),y2:d(B)},null,8,eY)),64))]),w("rect",{x:l(0),y:d(1),width:l(1)-l(0),height:d(0)-d(1),class:"ce-frame",fill:"none"},null,8,tY),w("path",{d:b.value,class:"ce-line",fill:"none"},null,8,iY),n.mode==="bezier"?(Q(),te("g",nY,[(Q(!0),te(_e,null,Pt(p.value,(B,D)=>(Q(),te(_e,{key:"handles-"+D},[D>0?(Q(),te("line",{key:0,x1:l(B.x),y1:d(B.y),x2:l(v(D).x),y2:d(v(D).y)},null,8,sY)):Ce("",!0),D>0?(Q(),te("circle",{key:1,cx:l(v(D).x),cy:d(v(D).y),r:"4",onPointerdown:G=>_(G,D,"in")},null,40,rY)):Ce("",!0),D_(G,D,"out")},null,40,aY)):Ce("",!0)],64))),128))])):Ce("",!0),(Q(!0),te(_e,null,Pt(p.value,(B,D)=>(Q(),te("g",{key:D},[w("circle",{cx:l(B.x),cy:d(B.y),r:"5",class:"ce-node"},null,8,lY),w("circle",{cx:l(B.x),cy:d(B.y),r:"9",class:"ce-hit",onPointerdown:G=>E(G,D),onDblclick:G=>I(D,G)},null,40,cY)]))),128))],544)),w("div",dY,[w("span",uY,R(n.mode==="bezier"?M.$t("curve.bezierHint"):M.$t("curve.linearHint")),1)])]),w("button",{class:"ce-reset",type:"button",title:M.$t("curve.resetTitle"),onClick:f},R(M.$t("common.reset")),9,hY)]))}}),ys=li(fY,[["__scopeId","data-v-8f475293"]]),pY={class:"spine-editor"},mY={class:"editor-title"},gY={class:"field wide"},vY={class:"grid three"},bY={class:"field"},yY={class:"field"},xY={class:"field"},wY={class:"grid three"},SY={class:"field"},CY={class:"field"},AY={class:"field"},TY={class:"section-title"},EY=["disabled"],_Y={class:"folder-hint"},MY={class:"asset-row"},PY=["title"],IY={class:"asset-row"},kY=["title"],RY={class:"asset-row"},FY=["title"],LY={class:"asset-actions"},DY=["disabled"],OY={class:"runtime-note"},NY={key:0},$Y={key:0,class:"error"},BY={class:"section-box"},UY={class:"section-title"},VY={key:0,class:"empty"},XY={key:1,class:"field wide"},YY={value:""},zY=["value"],jY={class:"section-box"},HY={class:"tree-title-row"},GY={class:"section-title"},WY=["disabled","title"],qY=["disabled","title"],KY={class:"tree-tabs"},JY={key:0,class:"empty"},ZY={key:1,class:"bone-search"},QY=["aria-label","placeholder"],ez=["title","aria-label"],tz={key:2,class:"empty"},iz={key:3,class:"bone-tree"},nz=["onClick","onKeydown"],sz=["title","onClick"],rz={key:1,class:"bone-leaf"},oz={class:"bone-name"},az={key:0,class:"empty"},lz={key:1,class:"bone-search"},cz=["aria-label","placeholder"],dz=["title","aria-label"],uz={key:2,class:"empty"},hz={key:3,class:"bone-tree slot-tree"},fz=["title","onClick","onKeydown"],pz={class:"slot-order"},mz={class:"bone-name"},gz={class:"slot-attachment"},vz=qt({__name:"SpineObjectPanel",props:{spineObject:{}},setup(n){const e=n,{t}=fn(),i=Go(),s=$e(null),r=$e(null),o=$e(null),a=$e(null),c=$e(new Set),l=$e(""),d=$e("bone"),u=$e(""),h=$e(null),f=$e(null),p=$e([]);e.spineObject.selectedBone==null&&(e.spineObject.selectedBone=""),e.spineObject.selectedSlot==null&&(e.spineObject.selectedSlot=""),Array.isArray(e.spineObject.slots)||(e.spineObject.slots=[]),e.spineObject.sourceBundle==null&&(e.spineObject.sourceBundle=null),e.spineObject.dataVersion==null&&(e.spineObject.dataVersion="");const m=Fe(()=>{var X;return((X=h.value)==null?void 0:X.name)||e.spineObject.skeletonFileName}),g=Fe(()=>{var X;return((X=f.value)==null?void 0:X.name)||e.spineObject.atlasFileName}),v=Fe(()=>p.value.length?p.value.map(X=>X.name):e.spineObject.textureFileNames),y=Fe(()=>v.value.length?t("spine.textureSummary",{count:v.value.length,names:v.value.join(", ")}):"PNG / JPEG / WebP..."),b=Fe(()=>new Set(e.spineObject.bones.map(X=>X.parent).filter(X=>!!X))),x=Fe(()=>new Map(e.spineObject.bones.map(X=>[X.name,X]))),C=Fe(()=>e.spineObject.bones.filter(X=>{var J;const z=l.value.trim().toLocaleLowerCase();if(z)return X.name.toLocaleLowerCase().includes(z);let K=X.parent;for(;K;){if(c.value.has(K))return!1;K=((J=x.value.get(K))==null?void 0:J.parent)||null}return!0})),T=Fe(()=>b.value.size>0&&[...b.value].every(X=>c.value.has(X))),S=Fe(()=>{const X=u.value.trim().toLocaleLowerCase(),z=[...e.spineObject.slots].sort((K,J)=>K.order-J.order);return X?z.filter(K=>K.name.toLocaleLowerCase().includes(X)||K.attachment.toLocaleLowerCase().includes(X)):z});function E(X){const z=e.spineObject.selectedBone===X;for(const K of i.spines)K.selectedBone="";z||(e.spineObject.selectedBone=X)}function _(X){const z=e.spineObject.selectedSlot===X;for(const K of i.spines)K.selectedSlot="";z||(e.spineObject.selectedSlot=X)}function I(X){c.value.has(X)?c.value.delete(X):c.value.add(X)}function M(){c.value=T.value?new Set:new Set(b.value)}function k(X){var z;return((z=X.target.files)==null?void 0:z[0])||null}function B(X){h.value=k(X)}function D(X){f.value=k(X)}function G(X){p.value=Array.from(X.target.files||[])}function V(X){return X.name.replace(/\.[^.]+$/,"").toLocaleLowerCase()}async function Y(X){const z=Array.from(X.target.files||[]);if(!z.length)return;const K=z.filter(fe=>/\.(json|skel)$/i.test(fe.name)),J=z.filter(fe=>/\.atlas$/i.test(fe.name)),oe=z.filter(fe=>/\.(png|jpe?g|webp|wepb)$/i.test(fe.name)),le=J.map(fe=>({atlas:fe,skeleton:K.find(be=>V(be)===V(fe))})).find(fe=>fe.skeleton),ve=(le==null?void 0:le.skeleton)||K[0]||null,Se=(le==null?void 0:le.atlas)||J[0]||null;if(h.value=ve,f.value=Se,p.value=oe,!ve||!Se||!oe.length){const fe=[!ve&&"JSON / SKEL",!Se&&"Atlas",!oe.length&&t("spine.textureImages")].filter(Boolean).join(", ");e.spineObject.status="error",e.spineObject.error=t("spine.missingFolderAssets",{missing:fe});return}await F()}function L(){i.recalcTotalFrames()}function N(){L(),i.timeline.frame=0}async function F(){var K;const X=h.value,z=f.value;if(!X||!z||!p.value.length){e.spineObject.status="error",e.spineObject.error=t("spine.chooseAssets");return}e.spineObject.status="loading",e.spineObject.error="";try{const J=await xA(X,z,p.value);ch(e.spineObject.id,J),e.spineObject.skeletonFileName=X.name,e.spineObject.atlasFileName=z.name,e.spineObject.textureFileNames=p.value.map(oe=>oe.name),e.spineObject.dataVersion=J.dataVersion,e.spineObject.animations=J.animations,e.spineObject.bones=J.bones,e.spineObject.slots=J.slots,e.spineObject.selectedBone="",e.spineObject.selectedSlot="",l.value="",u.value="",c.value=new Set,e.spineObject.selectedAnimation=((K=J.animations[0])==null?void 0:K.name)||"",e.spineObject.assetVersion++,e.spineObject.status="ready",L(),i.timeline.frame=0;try{e.spineObject.sourceBundle=await I4(X,z,p.value)}catch(oe){e.spineObject.sourceBundle=null,console.warn("Spine 配置资源嵌入失败",oe)}}catch(J){e.spineObject.status="error",e.spineObject.error=J instanceof Error?J.message:String(J)}}function $(){bc(e.spineObject.id),h.value=null,f.value=null,p.value=[],s.value&&(s.value.value=""),r.value&&(r.value.value=""),o.value&&(o.value.value=""),a.value&&(a.value.value=""),e.spineObject.skeletonFileName="",e.spineObject.atlasFileName="",e.spineObject.textureFileNames=[],e.spineObject.dataVersion="",e.spineObject.sourceBundle=null,e.spineObject.animations=[],e.spineObject.bones=[],e.spineObject.slots=[],e.spineObject.selectedBone="",e.spineObject.selectedSlot="",l.value="",u.value="",c.value=new Set,e.spineObject.selectedAnimation="",e.spineObject.assetVersion++,e.spineObject.status="empty",e.spineObject.error="",L()}return(X,z)=>(Q(),te("div",pY,[w("div",mY,R(X.$t("spine.title")),1),w("label",gY,[w("span",null,R(X.$t("spine.name")),1),me(w("input",{"onUpdate:modelValue":z[0]||(z[0]=K=>n.spineObject.name=K)},null,512),[[Je,n.spineObject.name]])]),w("div",vY,[w("label",bY,[w("span",null,R(X.$t("spine.xPosition")),1),me(w("input",{"onUpdate:modelValue":z[1]||(z[1]=K=>n.spineObject.x=K),type:"number"},null,512),[[Je,n.spineObject.x,void 0,{number:!0}]])]),w("label",yY,[w("span",null,R(X.$t("spine.yPosition")),1),me(w("input",{"onUpdate:modelValue":z[2]||(z[2]=K=>n.spineObject.y=K),type:"number"},null,512),[[Je,n.spineObject.y,void 0,{number:!0}]])]),w("label",xY,[w("span",null,R(X.$t("spine.rotation")),1),me(w("input",{"onUpdate:modelValue":z[3]||(z[3]=K=>n.spineObject.rotation=K),type:"number"},null,512),[[Je,n.spineObject.rotation,void 0,{number:!0}]])])]),w("div",wY,[w("label",SY,[z[20]||(z[20]=w("span",null,"Scale X",-1)),me(w("input",{"onUpdate:modelValue":z[4]||(z[4]=K=>n.spineObject.scaleX=K),type:"number",step:"0.05"},null,512),[[Je,n.spineObject.scaleX,void 0,{number:!0}]])]),w("label",CY,[z[21]||(z[21]=w("span",null,"Scale Y",-1)),me(w("input",{"onUpdate:modelValue":z[5]||(z[5]=K=>n.spineObject.scaleY=K),type:"number",step:"0.05"},null,512),[[Je,n.spineObject.scaleY,void 0,{number:!0}]])]),w("label",AY,[w("span",null,R(X.$t("spine.startTime")),1),me(w("input",{"onUpdate:modelValue":z[6]||(z[6]=K=>n.spineObject.timeOffset=K),type:"number",min:"0",step:"0.033333",onChange:L},null,544),[[Je,n.spineObject.timeOffset,void 0,{number:!0}]])])]),z[22]||(z[22]=w("div",{class:"divider"},null,-1)),w("div",TY,R(X.$t("spine.resources")),1),w("input",{ref_key:"skeletonInput",ref:s,hidden:"",type:"file",accept:".json,.skel,application/json,application/octet-stream",onChange:B},null,544),w("input",{ref_key:"atlasInput",ref:r,hidden:"",type:"file",accept:".atlas,text/plain",onChange:D},null,544),w("input",{ref_key:"textureInput",ref:o,hidden:"",type:"file",multiple:"",accept:".png,.jpg,.jpeg,.webp,.wepb,image/png,image/jpeg,image/webp",onChange:G},null,544),w("input",{ref_key:"folderInput",ref:a,hidden:"",type:"file",multiple:"",webkitdirectory:"",directory:"",onChange:Y},null,544),w("button",{class:"folder-select",disabled:n.spineObject.status==="loading",onClick:z[7]||(z[7]=K=>{var J;return(J=a.value)==null?void 0:J.click()})},R(X.$t("spine.chooseFolder")),9,EY),w("div",_Y,R(X.$t("spine.folderHint")),1),w("div",MY,[w("div",{class:"asset-name",title:m.value},R(m.value||"JSON / SKEL..."),9,PY),w("button",{onClick:z[8]||(z[8]=K=>{var J;return(J=s.value)==null?void 0:J.click()})},R(X.$t("spine.choose")),1)]),w("div",IY,[w("div",{class:"asset-name",title:g.value},R(g.value||"Atlas..."),9,kY),w("button",{onClick:z[9]||(z[9]=K=>{var J;return(J=r.value)==null?void 0:J.click()})},R(X.$t("spine.choose")),1)]),w("div",RY,[w("div",{class:"asset-name",title:v.value.join(", ")},R(y.value),9,FY),w("button",{onClick:z[10]||(z[10]=K=>{var J;return(J=o.value)==null?void 0:J.click()})},R(X.$t("spine.chooseMultiple")),1)]),w("div",LY,[w("button",{class:"load",disabled:n.spineObject.status==="loading",onClick:F},R(n.spineObject.status==="loading"?X.$t("spine.loading"):X.$t("spine.load")),9,DY),w("button",{class:"clear",onClick:$},R(X.$t("spine.clear")),1)]),w("div",OY,[bt(R(X.$t("spine.supportNote"))+" ",1),n.spineObject.dataVersion?(Q(),te("span",NY," · "+R(X.$t("spine.currentResource",{version:n.spineObject.dataVersion})),1)):Ce("",!0)]),n.spineObject.error?(Q(),te("div",$Y,R(n.spineObject.error),1)):Ce("",!0),w("div",BY,[w("div",UY,R(X.$t("spine.animations")),1),n.spineObject.animations.length?(Q(),te("label",XY,[w("span",null,R(X.$t("spine.timelineAnimation")),1),me(w("select",{"onUpdate:modelValue":z[11]||(z[11]=K=>n.spineObject.selectedAnimation=K),onChange:N},[w("option",YY,R(X.$t("spine.no")),1),(Q(!0),te(_e,null,Pt(n.spineObject.animations,K=>(Q(),te("option",{key:K.name,value:K.name},R(K.name)+"("+R(K.duration.toFixed(2))+"s) ",9,zY))),128))],544),[[St,n.spineObject.selectedAnimation]])])):(Q(),te("div",VY,R(X.$t("spine.noAnimations")),1))]),w("div",jY,[w("div",HY,[w("div",GY,R(X.$t("spine.hierarchy")),1),d.value==="bone"?(Q(),te("button",{key:0,class:Ie(["selected-bone",{active:n.spineObject.selectedBone}]),disabled:!n.spineObject.selectedBone,title:n.spineObject.selectedBone?X.$t("spine.clearBoneTitle"):X.$t("spine.noBoneTitle"),onClick:z[12]||(z[12]=K=>n.spineObject.selectedBone="")},[n.spineObject.selectedBone?(Q(),te(_e,{key:0},[bt(R(X.$t("spine.clearBone",{name:""})),1),w("strong",null,R(n.spineObject.selectedBone),1)],64)):(Q(),te(_e,{key:1},[bt(R(X.$t("spine.currentBone")),1),w("strong",null,R(X.$t("spine.notSelected")),1)],64))],10,WY)):(Q(),te("button",{key:1,class:Ie(["selected-bone",{active:n.spineObject.selectedSlot}]),disabled:!n.spineObject.selectedSlot,title:n.spineObject.selectedSlot?X.$t("spine.clearSlotTitle"):X.$t("spine.noSlotTitle"),onClick:z[13]||(z[13]=K=>n.spineObject.selectedSlot="")},[n.spineObject.selectedSlot?(Q(),te(_e,{key:0},[bt(R(X.$t("spine.clearSlot",{name:""})),1),w("strong",null,R(n.spineObject.selectedSlot),1)],64)):(Q(),te(_e,{key:1},[bt(R(X.$t("spine.currentSlot")),1),w("strong",null,R(X.$t("spine.notSelected")),1)],64))],10,qY)),d.value==="bone"&&n.spineObject.bones.length?(Q(),te("button",{key:2,class:"tree-action",onClick:M},R(T.value?X.$t("spine.expandAll"):X.$t("spine.collapseAll")),1)):Ce("",!0)]),w("div",KY,[w("button",{class:Ie({on:d.value==="bone"}),onClick:z[14]||(z[14]=K=>d.value="bone")},R(X.$t("spine.bones")),3),w("button",{class:Ie({on:d.value==="slot"}),onClick:z[15]||(z[15]=K=>d.value="slot")},R(X.$t("spine.slots")),3)]),d.value==="bone"?(Q(),te(_e,{key:0},[n.spineObject.bones.length?(Q(),te("div",ZY,[me(w("input",{"onUpdate:modelValue":z[16]||(z[16]=K=>l.value=K),type:"search","aria-label":X.$t("spine.searchBones"),placeholder:X.$t("spine.searchBonesPlaceholder")},null,8,QY),[[Je,l.value,void 0,{trim:!0}]]),l.value?(Q(),te("button",{key:0,title:X.$t("spine.clearSearch"),"aria-label":X.$t("spine.clearBoneSearch"),onClick:z[17]||(z[17]=K=>l.value="")},"✕",8,ez)):Ce("",!0)])):(Q(),te("div",JY,R(X.$t("spine.notLoaded")),1)),n.spineObject.bones.length&&!C.value.length?(Q(),te("div",tz,R(X.$t("spine.noMatchingBones")),1)):n.spineObject.bones.length?(Q(),te("div",iz,[(Q(!0),te(_e,null,Pt(C.value,K=>(Q(),te("div",{key:K.name,class:Ie(["bone",{selected:n.spineObject.selectedBone===K.name}]),style:Vt({paddingLeft:`${6+K.depth*16}px`}),role:"button",tabindex:"0",onClick:J=>E(K.name),onKeydown:Gr(tt(J=>E(K.name),["prevent"]),["enter"])},[b.value.has(K.name)?(Q(),te("button",{key:0,class:"bone-toggle",title:c.value.has(K.name)?X.$t("spine.expandChildren"):X.$t("spine.collapseChildren"),onClick:tt(J=>I(K.name),["stop"])},R(c.value.has(K.name)?"▸":"▾"),9,sz)):(Q(),te("span",rz,"•")),w("span",oz,R(K.name),1)],46,nz))),128))])):Ce("",!0)],64)):(Q(),te(_e,{key:1},[n.spineObject.slots.length?(Q(),te("div",lz,[me(w("input",{"onUpdate:modelValue":z[18]||(z[18]=K=>u.value=K),type:"search","aria-label":X.$t("spine.searchSlots"),placeholder:X.$t("spine.searchSlotsPlaceholder")},null,8,cz),[[Je,u.value,void 0,{trim:!0}]]),u.value?(Q(),te("button",{key:0,title:X.$t("spine.clearSearch"),"aria-label":X.$t("spine.clearSlotSearch"),onClick:z[19]||(z[19]=K=>u.value="")},"✕",8,dz)):Ce("",!0)])):(Q(),te("div",az,R(X.$t("spine.notLoadedSlots")),1)),n.spineObject.slots.length&&!S.value.length?(Q(),te("div",uz,R(X.$t("spine.noMatchingSlots")),1)):n.spineObject.slots.length?(Q(),te("div",hz,[(Q(!0),te(_e,null,Pt(S.value,K=>(Q(),te("div",{key:K.name,class:Ie(["bone slot-row",{selected:n.spineObject.selectedSlot===K.name}]),role:"button",tabindex:"0",title:X.$t("spine.slotTitle",{name:K.name,bone:K.bone||"-",attachment:K.attachment||X.$t("spine.empty")}),onClick:J=>_(K.name),onKeydown:Gr(tt(J=>_(K.name),["prevent"]),["enter"])},[w("span",pz,R(K.order+1),1),w("span",mz,R(K.name),1),w("span",gz,R(K.attachment||X.$t("spine.empty")),1)],42,fz))),128))])):Ce("",!0)],64))])]))}}),bz=li(vz,[["__scopeId","data-v-35137928"]]),yz={class:"group"},xz={class:"caret"},wz={class:"scene-actions"},Sz=["title"],Cz=["title"],Az=["title"],Tz=["title"],Ez=["disabled","title"],_z={class:"group-body"},Mz={class:"tree scene-tree"},Pz=["onClick"],Iz={key:0,class:"sub-branch"},kz={key:1,class:"tdot"},Rz={class:"tlabel"},Fz=["title","aria-label","onClick"],Lz={viewBox:"0 0 24 24","aria-hidden":"true"},Dz={key:0,class:"eye-slash",d:"M4 4l16 16"},Oz=["title","onClick"],Nz=["onClick"],$z={class:"tlabel"},Bz=["title","aria-label","onClick"],Uz={viewBox:"0 0 24 24","aria-hidden":"true"},Vz={key:0,class:"eye-slash",d:"M4 4l16 16"},Xz={class:"scene-object-kind"},Yz=["title","onClick"],zz=["onClick"],jz={class:"tlabel"},Hz=["title","aria-label","onClick"],Gz={viewBox:"0 0 24 24","aria-hidden":"true"},Wz={key:0,class:"eye-slash",d:"M4 4l16 16"},qz={class:"scene-object-kind"},Kz=["title","onClick"],Jz=["onClick"],Zz={class:"tlabel"},Qz=["title","aria-label","onClick"],e6={viewBox:"0 0 24 24","aria-hidden":"true"},t6={key:0,class:"eye-slash",d:"M4 4l16 16"},i6=["title","onClick"],n6={key:0,class:"empty"},s6={class:"row"},r6={class:"seed-row scene-seed"},o6={for:"system-seed"},a6=["title"],l6=["title"],c6={class:"seed-hint"},d6={class:"object-editor-title"},u6={class:"field-block"},h6={class:"field-grid"},f6={class:"field-block"},p6={value:"circle"},m6={value:"ellipse"},g6={value:"rect"},v6={value:"polygon"},b6={value:"custom"},y6={class:"field-block check-field"},x6={class:"field-grid"},w6={class:"compact-field"},S6={class:"compact-field"},C6={class:"field-grid"},A6={class:"compact-field"},T6={class:"compact-field"},E6={key:1,class:"field-grid"},_6={class:"compact-field"},M6={class:"compact-field"},P6={key:2,class:"field-grid"},I6={class:"compact-field"},k6={class:"compact-field"},R6={class:"field-block"},F6={value:"physics"},L6={value:"pause"},D6={value:"destroy"},O6={key:4,class:"field-grid"},N6={class:"compact-field"},$6={class:"compact-field"},B6={class:"collider-follow-section"},U6={class:"follow-path"},V6={class:"field-block"},X6={value:0},Y6=["value"],z6={class:"field-grid"},j6={class:"compact-field"},H6={class:"compact-field"},G6={value:"跟随导出"},W6={value:"线性"},q6={value:"贝塞尔"},K6={class:"follow-path"},J6={class:"collider-curve-title"},Z6={class:"object-editor-title"},Q6={class:"field-block"},ej={class:"field-grid"},tj={class:"compact-field"},ij={class:"compact-field"},nj={class:"field-grid"},sj={class:"compact-field"},rj={class:"compact-field"},oj={class:"setting-line"},aj={class:"setting-line"},lj={class:"path-help"},cj={class:"field-block"},dj={value:""},uj={value:"circle"},hj={value:"square"},fj={value:"polygon"},pj={value:"star"},mj={key:4,class:"panel-hint"},gj=qt({__name:"SceneObjectsSection",setup(n){const{store:e,resolvedCurveEditorMode:t,sys:i,activeObjectType:s,activeCollider:r,activePath:o,activeSpine:a,canCopyObject:c,collapsed:l,toggle:d,addSys:u,addCollider:h,addPath:f,addSpine:p,copySelectedObject:m,applyPathPreset:g,clearPathAnchors:v,randomizeSeed:y,LINEAR_CURVE:b}=oo(),x=Fe(()=>{const C=new Map(e.systems.map(M=>[M.id,M])),T=new Map;for(const M of e.systems)if(M.config.eventEnabled!==!1)for(const k of M.config.events||[])k.targetSystemId<=0||k.targetSystemId===M.id||!C.has(k.targetSystemId)||T.has(k.targetSystemId)||T.set(k.targetSystemId,M.id);const S=new Map;for(const[M,k]of T){const B=S.get(k);B?B.push(M):S.set(k,[M])}const E=[],_=new Set,I=(M,k)=>{if(!_.has(M.id)){_.add(M.id),E.push({system:M,depth:k});for(const B of S.get(M.id)||[]){const D=C.get(B);D&&I(D,k+1)}}};for(const M of e.systems)T.has(M.id)||I(M,0);for(const M of e.systems)_.has(M.id)||I(M,0);return E});return(C,T)=>(Q(),te("div",yz,[w("div",{class:"group-head scene-head",onClick:T[5]||(T[5]=S=>P(d)("scene"))},[w("span",xz,R(P(l).scene?"▸":"▾"),1),w("span",null,R(C.$t("scene.title")),1),w("div",wz,[w("button",{class:"scene-add",title:C.$t("scene.addParticle"),onClick:T[0]||(T[0]=tt((...S)=>P(u)&&P(u)(...S),["stop"]))},R(C.$t("scene.addParticleShort")),9,Sz),w("button",{class:"scene-add",title:C.$t("scene.addCollider"),onClick:T[1]||(T[1]=tt((...S)=>P(h)&&P(h)(...S),["stop"]))},R(C.$t("scene.addColliderShort")),9,Cz),w("button",{class:"scene-add",title:C.$t("scene.addPath"),onClick:T[2]||(T[2]=tt((...S)=>P(f)&&P(f)(...S),["stop"]))},R(C.$t("scene.addPathShort")),9,Az),w("button",{class:"scene-add",title:C.$t("scene.addSpine"),onClick:T[3]||(T[3]=tt((...S)=>P(p)&&P(p)(...S),["stop"]))},"+Spine",8,Tz),w("button",{class:"scene-add",disabled:!P(c),title:C.$t("scene.copyTitle"),onClick:T[4]||(T[4]=tt((...S)=>P(m)&&P(m)(...S),["stop"]))},"+Copy",8,Ez)])]),me(w("div",_z,[w("div",Mz,[(Q(!0),te(_e,null,Pt(x.value,S=>(Q(),te("div",{key:`particle-${S.system.id}`,class:Ie(["tree-item scene-object-item",{on:P(s)==="particle"&&S.system.id===P(e).activeObjectId,"scene-object-child":S.depth>0}]),style:Vt(S.depth>0?{paddingLeft:`${S.depth*18}px`}:void 0),onClick:E=>P(e).selectSystem(S.system.id)},[S.depth>0?(Q(),te("span",Iz,"└")):(Q(),te("span",kz,"●")),w("span",Rz,R(S.system.config.name||"ParticleSystem"),1),w("button",{class:Ie(["scene-object-eye",{off:S.system.visible===!1}]),title:S.system.visible===!1?C.$t("scene.showParticle"):C.$t("scene.hideParticle"),"aria-label":S.system.visible===!1?C.$t("scene.showParticle"):C.$t("scene.hideParticle"),onClick:tt(E=>S.system.visible=S.system.visible===!1,["stop"])},[(Q(),te("svg",Lz,[T[50]||(T[50]=w("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"},null,-1)),T[51]||(T[51]=w("circle",{cx:"12",cy:"12",r:"2.8"},null,-1)),S.system.visible===!1?(Q(),te("path",Dz)):Ce("",!0)]))],10,Fz),w("span",{class:Ie(["scene-object-kind",{"sub-emitter-kind":S.depth>0}])},R(S.depth>0?C.$t("scene.subEmitter"):C.$t("scene.particle")),3),w("button",{class:"scene-object-delete",title:C.$t("scene.deleteParticle"),onClick:tt(E=>P(e).removeSystem(S.system.id),["stop"])},"✕",8,Oz)],14,Pz))),128)),(Q(!0),te(_e,null,Pt(P(e).colliders,S=>(Q(),te("div",{key:`collision-${S.id}`,class:Ie(["tree-item scene-object-item",{on:P(s)==="collision"&&S.id===P(e).activeObjectId}]),onClick:E=>P(e).selectSceneObject("collision",S.id)},[T[54]||(T[54]=w("span",{class:"tdot collision-dot"},"■",-1)),w("span",$z,R(S.name),1),w("button",{class:Ie(["scene-object-eye",{off:S.visible===!1}]),title:S.visible===!1?C.$t("scene.showCollider"):C.$t("scene.hideCollider"),"aria-label":S.visible===!1?C.$t("scene.showCollider"):C.$t("scene.hideCollider"),onClick:tt(E=>S.visible=S.visible===!1,["stop"])},[(Q(),te("svg",Uz,[T[52]||(T[52]=w("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"},null,-1)),T[53]||(T[53]=w("circle",{cx:"12",cy:"12",r:"2.8"},null,-1)),S.visible===!1?(Q(),te("path",Vz)):Ce("",!0)]))],10,Bz),w("span",Xz,R(C.$t("scene.collision")),1),w("button",{class:"scene-object-delete",title:C.$t("scene.deleteCollider"),onClick:tt(E=>P(e).removeCollider(S.id),["stop"])},"✕",8,Yz)],10,Nz))),128)),(Q(!0),te(_e,null,Pt(P(e).paths,S=>(Q(),te("div",{key:`path-${S.id}`,class:Ie(["tree-item scene-object-item",{on:P(s)==="path"&&S.id===P(e).activeObjectId}]),onClick:E=>P(e).selectSceneObject("path",S.id)},[T[57]||(T[57]=w("span",{class:"tdot path-dot"},"◇",-1)),w("span",jz,R(S.name),1),w("button",{class:Ie(["scene-object-eye",{off:S.visible===!1}]),title:S.visible===!1?C.$t("scene.showPath"):C.$t("scene.hidePath"),"aria-label":S.visible===!1?C.$t("scene.showPath"):C.$t("scene.hidePath"),onClick:tt(E=>S.visible=S.visible===!1,["stop"])},[(Q(),te("svg",Gz,[T[55]||(T[55]=w("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"},null,-1)),T[56]||(T[56]=w("circle",{cx:"12",cy:"12",r:"2.8"},null,-1)),S.visible===!1?(Q(),te("path",Wz)):Ce("",!0)]))],10,Hz),w("span",qz,R(C.$t("scene.path")),1),w("button",{class:"scene-object-delete",title:C.$t("scene.deletePath"),onClick:tt(E=>P(e).removePath(S.id),["stop"])},"✕",8,Kz)],10,zz))),128)),(Q(!0),te(_e,null,Pt(P(e).spines,S=>(Q(),te("div",{key:`spine-${S.id}`,class:Ie(["tree-item scene-object-item",{on:P(s)==="spine"&&S.id===P(e).activeObjectId}]),onClick:E=>P(e).selectSceneObject("spine",S.id)},[T[60]||(T[60]=w("span",{class:"tdot spine-dot"},"◆",-1)),w("span",Zz,R(S.name),1),w("button",{class:Ie(["scene-object-eye",{off:S.visible===!1}]),title:S.visible===!1?C.$t("scene.showSpine"):C.$t("scene.hideSpine"),"aria-label":S.visible===!1?C.$t("scene.showSpine"):C.$t("scene.hideSpine"),onClick:tt(E=>S.visible=S.visible===!1,["stop"])},[(Q(),te("svg",e6,[T[58]||(T[58]=w("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"},null,-1)),T[59]||(T[59]=w("circle",{cx:"12",cy:"12",r:"2.8"},null,-1)),S.visible===!1?(Q(),te("path",t6)):Ce("",!0)]))],10,Qz),T[61]||(T[61]=w("span",{class:"scene-object-kind"},"Spine",-1)),w("button",{class:"scene-object-delete",title:C.$t("scene.deleteSpine"),onClick:tt(E=>P(e).removeSpine(S.id),["stop"])},"✕",8,i6)],10,Jz))),128)),!P(e).systems.length&&!P(e).colliders.length&&!P(e).paths.length&&!P(e).spines.length?(Q(),te("div",n6,R(C.$t("scene.empty")),1)):Ce("",!0)]),P(s)==="particle"&&P(i)?(Q(),te(_e,{key:0},[w("label",s6,[w("span",null,R(C.$t("scene.name")),1),me(w("input",{"onUpdate:modelValue":T[6]||(T[6]=S=>P(i).config.name=S),class:"inp"},null,512),[[Je,P(i).config.name]])]),Ae(Ue,{label:C.$t("scene.positionX"),min:-2e3,max:2e3,step:1,modelValue:P(i).config.centerX,"onUpdate:modelValue":T[7]||(T[7]=S=>P(i).config.centerX=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.positionY"),min:-2e3,max:2e3,step:1,modelValue:P(i).config.centerY,"onUpdate:modelValue":T[8]||(T[8]=S=>P(i).config.centerY=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.offsetX"),min:-2e3,max:2e3,step:1,modelValue:P(i).config.offsetX,"onUpdate:modelValue":T[9]||(T[9]=S=>P(i).config.offsetX=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.offsetY"),min:-2e3,max:2e3,step:1,modelValue:P(i).config.offsetY,"onUpdate:modelValue":T[10]||(T[10]=S=>P(i).config.offsetY=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.rotation"),min:-360,max:360,step:1,modelValue:P(i).config.rootRotation,"onUpdate:modelValue":T[11]||(T[11]=S=>P(i).config.rootRotation=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.scaleX"),min:.05,max:10,step:.05,modelValue:P(i).config.rootScaleX,"onUpdate:modelValue":T[12]||(T[12]=S=>P(i).config.rootScaleX=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.scaleY"),min:.05,max:10,step:.05,modelValue:P(i).config.rootScaleY,"onUpdate:modelValue":T[13]||(T[13]=S=>P(i).config.rootScaleY=S)},null,8,["label","modelValue"]),w("div",r6,[w("label",o6,R(C.$t("scene.seed")),1),me(w("input",{id:"system-seed",class:"seed-input",type:"number",min:"0",step:"1","onUpdate:modelValue":T[14]||(T[14]=S=>P(i).config.seed=S),title:C.$t("scene.seedTitle")},null,8,a6),[[Je,P(i).config.seed,void 0,{number:!0}]]),w("button",{class:"seed-random",title:C.$t("scene.randomizeSeed"),onClick:T[15]||(T[15]=(...S)=>P(y)&&P(y)(...S))},"⚄",8,l6)]),w("div",c6,R(C.$t("scene.seedHint")),1)],64)):P(r)?(Q(),te(_e,{key:1},[w("div",d6,R(C.$t("scene.colliderTitle")),1),w("label",u6,[w("span",null,R(C.$t("scene.colliderName")),1),me(w("input",{"onUpdate:modelValue":T[16]||(T[16]=S=>P(r).name=S),class:"inp"},null,512),[[Je,P(r).name]])]),w("div",h6,[w("label",f6,[w("span",null,R(C.$t("scene.type")),1),me(w("select",{"onUpdate:modelValue":T[17]||(T[17]=S=>P(r).shape=S),class:"inp"},[w("option",p6,R(C.$t("scene.circle")),1),w("option",m6,R(C.$t("scene.ellipse")),1),w("option",g6,R(C.$t("scene.rect")),1),w("option",v6,R(C.$t("scene.polygon")),1),w("option",b6,R(C.$t("scene.custom")),1)],512),[[St,P(r).shape]])]),w("label",y6,[w("span",null,R(C.$t("scene.enabled")),1),me(w("input",{"onUpdate:modelValue":T[18]||(T[18]=S=>P(r).enabled=S),type:"checkbox"},null,512),[[Ct,P(r).enabled]])])]),w("div",x6,[w("label",w6,[w("span",null,R(C.$t("scene.xPosition")),1),me(w("input",{"onUpdate:modelValue":T[19]||(T[19]=S=>P(r).x=S),type:"number",class:"inp"},null,512),[[Je,P(r).x,void 0,{number:!0}]])]),w("label",S6,[w("span",null,R(C.$t("scene.yPosition")),1),me(w("input",{"onUpdate:modelValue":T[20]||(T[20]=S=>P(r).y=S),type:"number",class:"inp"},null,512),[[Je,P(r).y,void 0,{number:!0}]])])]),Ae(Ue,{label:C.$t("scene.rotation"),min:-360,max:360,step:1,modelValue:P(r).rotation,"onUpdate:modelValue":T[21]||(T[21]=S=>P(r).rotation=S)},null,8,["label","modelValue"]),w("div",C6,[w("label",A6,[w("span",null,R(C.$t("scene.scaleXShort")),1),me(w("input",{"onUpdate:modelValue":T[22]||(T[22]=S=>P(r).scaleX=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(r).scaleX,void 0,{number:!0}]])]),w("label",T6,[w("span",null,R(C.$t("scene.scaleYShort")),1),me(w("input",{"onUpdate:modelValue":T[23]||(T[23]=S=>P(r).scaleY=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(r).scaleY,void 0,{number:!0}]])])]),P(r).shape==="circle"?(Q(),It(Ue,{key:0,label:C.$t("scene.radius"),min:1,max:1e3,step:1,modelValue:P(r).radius,"onUpdate:modelValue":T[24]||(T[24]=S=>P(r).radius=S)},null,8,["label","modelValue"])):P(r).shape==="ellipse"?(Q(),te("div",E6,[w("label",_6,[w("span",null,R(C.$t("scene.radiusX")),1),me(w("input",{"onUpdate:modelValue":T[25]||(T[25]=S=>P(r).radiusX=S),type:"number",min:"1",class:"inp"},null,512),[[Je,P(r).radiusX,void 0,{number:!0}]])]),w("label",M6,[w("span",null,R(C.$t("scene.radiusY")),1),me(w("input",{"onUpdate:modelValue":T[26]||(T[26]=S=>P(r).radiusY=S),type:"number",min:"1",class:"inp"},null,512),[[Je,P(r).radiusY,void 0,{number:!0}]])])])):(Q(),te("div",P6,[w("label",I6,[w("span",null,R(C.$t("scene.width")),1),me(w("input",{"onUpdate:modelValue":T[27]||(T[27]=S=>P(r).width=S),type:"number",min:"1",class:"inp"},null,512),[[Je,P(r).width,void 0,{number:!0}]])]),w("label",k6,[w("span",null,R(C.$t("scene.height")),1),me(w("input",{"onUpdate:modelValue":T[28]||(T[28]=S=>P(r).height=S),type:"number",min:"1",class:"inp"},null,512),[[Je,P(r).height,void 0,{number:!0}]])])])),P(r).shape==="polygon"||P(r).shape==="custom"?(Q(),It(Ue,{key:3,label:C.$t("scene.sides"),min:3,max:16,step:1,modelValue:P(r).sides,"onUpdate:modelValue":T[29]||(T[29]=S=>P(r).sides=S)},null,8,["label","modelValue"])):Ce("",!0),w("label",R6,[w("span",null,R(C.$t("scene.collisionResponse")),1),me(w("select",{"onUpdate:modelValue":T[30]||(T[30]=S=>P(r).response=S),class:"inp"},[w("option",F6,R(C.$t("scene.physics")),1),w("option",L6,R(C.$t("scene.pause")),1),w("option",D6,R(C.$t("scene.destroy")),1)],512),[[St,P(r).response]])]),P(r).response==="physics"?(Q(),te("div",O6,[w("label",N6,[w("span",null,R(C.$t("scene.elasticity")),1),me(w("input",{"onUpdate:modelValue":T[31]||(T[31]=S=>P(r).elasticity=S),type:"number",min:"0",max:"1",step:"0.01",class:"inp"},null,512),[[Je,P(r).elasticity,void 0,{number:!0}]])]),w("label",$6,[w("span",null,R(C.$t("scene.friction")),1),me(w("input",{"onUpdate:modelValue":T[32]||(T[32]=S=>P(r).friction=S),type:"number",min:"0",max:"1",step:"0.01",class:"inp"},null,512),[[Je,P(r).friction,void 0,{number:!0}]])])])):Ce("",!0),w("div",B6,[w("label",U6,[me(w("input",{"onUpdate:modelValue":T[33]||(T[33]=S=>P(r).followPath=S),type:"checkbox"},null,512),[[Ct,P(r).followPath]]),bt(R(C.$t("scene.followPath")),1)]),P(r).followPath?(Q(),te(_e,{key:0},[w("label",V6,[w("span",null,R(C.$t("scene.targetPath")),1),me(w("select",{"onUpdate:modelValue":T[34]||(T[34]=S=>P(r).followPathId=S),class:"inp"},[w("option",X6,R(C.$t("scene.notSelected")),1),(Q(!0),te(_e,null,Pt(P(e).paths,S=>(Q(),te("option",{key:S.id,value:S.id},R(S.name),9,Y6))),128))],512),[[St,P(r).followPathId,void 0,{number:!0}]])]),w("div",z6,[w("label",j6,[w("span",null,R(C.$t("scene.moveDuration")),1),me(w("input",{"onUpdate:modelValue":T[35]||(T[35]=S=>P(r).followDuration=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(r).followDuration,void 0,{number:!0}]])]),w("label",H6,[w("span",null,R(C.$t("appearance.curveMode")),1),me(w("select",{"onUpdate:modelValue":T[36]||(T[36]=S=>P(r).followCurveMode=S),class:"inp"},[w("option",G6,R(C.$t("common.followExport")),1),w("option",W6,R(C.$t("common.linear")),1),w("option",q6,R(C.$t("common.bezier")),1)],512),[[St,P(r).followCurveMode]])])]),w("label",K6,[me(w("input",{"onUpdate:modelValue":T[37]||(T[37]=S=>P(r).followPathRotation=S),type:"checkbox"},null,512),[[Ct,P(r).followPathRotation]]),bt(R(C.$t("scene.followDirection")),1)]),w("div",J6,[bt(R(C.$t("scene.moveProgressCurve"))+" ",1),w("small",null,R(C.$t("scene.moveProgressHelp")),1)]),Ae(ys,{"model-value":P(r).followCurve||P(b),"default-value":P(b),mode:P(t)(P(r).followCurveMode),"onUpdate:modelValue":T[38]||(T[38]=S=>P(r).followCurve=S)},null,8,["model-value","default-value","mode"])],64)):Ce("",!0)])],64)):P(o)?(Q(),te(_e,{key:2},[w("div",Z6,R(C.$t("scene.pathTitle")),1),w("label",Q6,[w("span",null,R(C.$t("scene.pathName")),1),me(w("input",{"onUpdate:modelValue":T[39]||(T[39]=S=>P(o).name=S),class:"inp"},null,512),[[Je,P(o).name]])]),w("div",ej,[w("label",tj,[w("span",null,R(C.$t("scene.xPosition")),1),me(w("input",{"onUpdate:modelValue":T[40]||(T[40]=S=>P(o).x=S),type:"number",class:"inp"},null,512),[[Je,P(o).x,void 0,{number:!0}]])]),w("label",ij,[w("span",null,R(C.$t("scene.yPosition")),1),me(w("input",{"onUpdate:modelValue":T[41]||(T[41]=S=>P(o).y=S),type:"number",class:"inp"},null,512),[[Je,P(o).y,void 0,{number:!0}]])])]),Ae(Ue,{label:C.$t("scene.rotation"),min:-360,max:360,step:1,modelValue:P(o).rotation,"onUpdate:modelValue":T[42]||(T[42]=S=>P(o).rotation=S)},null,8,["label","modelValue"]),w("div",nj,[w("label",sj,[w("span",null,R(C.$t("scene.scaleXShort")),1),me(w("input",{"onUpdate:modelValue":T[43]||(T[43]=S=>P(o).scaleX=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(o).scaleX,void 0,{number:!0}]])]),w("label",rj,[w("span",null,R(C.$t("scene.scaleYShort")),1),me(w("input",{"onUpdate:modelValue":T[44]||(T[44]=S=>P(o).scaleY=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(o).scaleY,void 0,{number:!0}]])])]),w("label",oj,[w("span",null,R(C.$t("scene.closedPath")),1),me(w("input",{"onUpdate:modelValue":T[45]||(T[45]=S=>P(o).closed=S),type:"checkbox"},null,512),[[Ct,P(o).closed]])]),w("label",aj,[w("span",null,R(C.$t("scene.pathColor")),1),me(w("input",{"onUpdate:modelValue":T[46]||(T[46]=S=>P(o).color=S),type:"color",class:"path-color"},null,512),[[Je,P(o).color]])]),w("div",lj,[w("span",null,R(C.$t("scene.pathHelp")),1),w("ul",null,[w("li",null,R(C.$t("scene.pathHelpItems.0")),1),w("li",null,R(C.$t("scene.pathHelpItems.1")),1),w("li",null,R(C.$t("scene.pathHelpItems.2")),1),w("li",null,R(C.$t("scene.pathHelpItems.3")),1),w("li",null,R(C.$t("scene.pathHelpItems.4")),1),w("li",null,R(C.$t("scene.pathHelpItems.5")),1),w("li",null,R(C.$t("scene.pathHelpItems.6")),1),w("li",null,R(C.$t("scene.pathHelpItems.7")),1),w("li",null,R(C.$t("scene.pathHelpItems.8")),1),w("li",null,R(C.$t("scene.pathHelpItems.9")),1)])]),w("label",cj,[w("span",null,R(C.$t("scene.applyPresetShape")),1),me(w("select",{"onUpdate:modelValue":T[47]||(T[47]=S=>P(o).preset=S),class:"inp"},[w("option",dj,R(C.$t("scene.choosePreset")),1),w("option",uj,R(C.$t("scene.circle")),1),w("option",hj,R(C.$t("scene.square")),1),w("option",fj,R(C.$t("scene.polygon")),1),w("option",pj,R(C.$t("scene.star")),1)],512),[[St,P(o).preset]])]),w("button",{class:"path-action primary",onClick:T[48]||(T[48]=(...S)=>P(g)&&P(g)(...S))},R(C.$t("scene.applyPreset")),1),w("button",{class:"path-action",onClick:T[49]||(T[49]=(...S)=>P(v)&&P(v)(...S))},R(C.$t("scene.clearAnchors")),1)],64)):P(a)?(Q(),It(bz,{key:3,"spine-object":P(a)},null,8,["spine-object"])):(Q(),te("div",mj,R(C.$t("scene.panelHint")),1))],512),[[Fi,!P(l).scene]])]))}}),vj=li(gj,[["__scopeId","data-v-5573409f"]]),bj={class:"group"},yj={class:"caret"},xj=["title"],wj={class:"group-body"},Sj={class:"segs"},Cj={class:"segs stream-behavior-segs"},Aj={key:2,class:"stream-loop-options"},Tj={class:"loop-section-row"},Ej={class:"switch-row"},_j=["checked"],Mj={key:0,class:"loop-duration-control"},Pj={class:"switch-row loop-duration-toggle"},Ij=["checked"],kj={class:"loop-section-duration"},Rj=["value","aria-label"],Fj={key:1},Lj={key:2,class:"loop-auto-duration"},Dj={class:"loop-section-row"},Oj={class:"switch-row"},Nj=["checked"],$j={key:0,class:"loop-duration-control"},Bj={class:"switch-row loop-duration-toggle"},Uj=["checked"],Vj={class:"loop-section-duration"},Xj=["value","aria-label"],Yj={key:1},zj={key:2,class:"loop-auto-duration"},jj={key:3,class:"modifier-hint stream-loop-hint"},Hj={class:"group"},Gj={class:"caret"},Wj=["title"],qj={class:"group-body"},Kj={class:"row"},Jj={value:"point"},Zj={value:"circle"},Qj={value:"rect"},eH={value:"cone"},tH={value:"path"},iH={class:"row"},nH={value:0},sH=["value","disabled"],rH={key:0,class:"row"},oH={value:"fixed"},aH={value:"random"},lH={class:"row"},cH={value:"fixed"},dH={value:"random"},uH={key:0,value:"radial"},hH={key:1,value:"path-normal"},fH={key:2,value:"path-tangent"},pH={key:6,class:"switch-row"},mH=qt({__name:"EmissionSection",setup(n){const{store:e,sys:t,automaticLoopDuration:i,loopDurationFrames:s,collapsed:r,toggle:o,setEmitMode:a,setLoopDurationFrames:c,setStreamBehavior:l,setLoopSection:d,setLoopSectionDuration:u,setLoopCustomDuration:h,resetModule:f,select:p,onShapeChange:m,onSpawnPathChange:g}=oo();return(v,y)=>(Q(),te(_e,null,[w("div",bj,[w("div",{class:"group-head",onClick:y[1]||(y[1]=b=>P(o)("emitMode"))},[w("span",yj,R(P(r).emitMode?"▸":"▾"),1),w("span",null,R(v.$t("emission.title")),1),w("button",{class:"group-reset",title:v.$t("emission.reset"),onClick:y[0]||(y[0]=tt(b=>P(f)("emitMode"),["stop"]))},R(v.$t("common.reset")),9,xj)]),me(w("div",wj,[w("div",Sj,[w("button",{class:Ie(["seg",{on:P(t).config.mode==="stream"}]),onClick:y[2]||(y[2]=b=>P(a)("stream"))},R(v.$t("emission.stream")),3),w("button",{class:Ie(["seg",{on:P(t).config.mode==="burst"}]),onClick:y[3]||(y[3]=b=>P(a)("burst"))},R(v.$t("emission.burst")),3)]),P(t).config.mode==="stream"?(Q(),te(_e,{key:0},[w("div",Cj,[w("button",{class:Ie(["seg",{on:P(t).config.streamBehavior==="normal"}]),onClick:y[4]||(y[4]=b=>P(l)("normal"))},R(v.$t("emission.normalStream")),3),w("button",{class:Ie(["seg",{on:P(t).config.streamBehavior==="loop"}]),onClick:y[5]||(y[5]=b=>P(l)("loop"))},R(v.$t("emission.loopStream")),3)]),Ae(Ue,{label:v.$t("emission.rate"),min:1,max:300,step:1,modelValue:P(t).config.rate,"onUpdate:modelValue":y[6]||(y[6]=b=>P(t).config.rate=b)},null,8,["label","modelValue"]),P(t).config.streamBehavior==="normal"?(Q(),It(Ue,{key:0,label:v.$t("emission.duration"),min:1/30,max:60,step:1/30,modelValue:P(t).config.duration,"onUpdate:modelValue":y[7]||(y[7]=b=>P(t).config.duration=b)},null,8,["label","modelValue"])):(Q(),It(Ue,{key:1,label:v.$t("emission.loopDuration"),min:1,max:1800,step:1,"model-value":P(s),"onUpdate:modelValue":P(c)},null,8,["label","model-value","onUpdate:modelValue"])),P(t).config.streamBehavior==="loop"?(Q(),te("div",Aj,[w("div",Tj,[w("label",Ej,[w("input",{type:"checkbox",checked:P(t).config.generateLoopStartAnimation,onChange:y[8]||(y[8]=b=>P(d)("start",b))},null,40,_j),y[36]||(y[36]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(v.$t("emission.generateStart")),1)]),P(t).config.generateLoopStartAnimation?(Q(),te("div",Mj,[w("label",Pj,[w("input",{type:"checkbox",checked:P(t).config.loopStartUseCustomDuration,onChange:y[9]||(y[9]=b=>P(h)("start",b))},null,40,Ij),y[37]||(y[37]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(v.$t("emission.customDuration")),1)]),w("label",kj,[P(t).config.loopStartUseCustomDuration?(Q(),te("input",{key:0,value:P(t).config.loopStartDurationFrames,type:"number",min:"1",max:"1800",step:"1","aria-label":v.$t("emission.startLoopDuration"),onChange:y[10]||(y[10]=b=>P(u)("start",b))},null,40,Rj)):Ce("",!0),P(t).config.loopStartUseCustomDuration?(Q(),te("span",Fj,"f")):(Q(),te("span",Lj,R(v.$t("emission.auto",{frames:P(i)})),1))])])):Ce("",!0)]),w("div",Dj,[w("label",Oj,[w("input",{type:"checkbox",checked:P(t).config.generateLoopEndAnimation,onChange:y[11]||(y[11]=b=>P(d)("end",b))},null,40,Nj),y[38]||(y[38]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(v.$t("emission.generateEnd")),1)]),P(t).config.generateLoopEndAnimation?(Q(),te("div",$j,[w("label",Bj,[w("input",{type:"checkbox",checked:P(t).config.loopEndUseCustomDuration,onChange:y[12]||(y[12]=b=>P(h)("end",b))},null,40,Uj),y[39]||(y[39]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(v.$t("emission.customDuration")),1)]),w("label",Vj,[P(t).config.loopEndUseCustomDuration?(Q(),te("input",{key:0,value:P(t).config.loopEndDurationFrames,type:"number",min:"1",max:"1800",step:"1","aria-label":v.$t("emission.endLoopDuration"),onChange:y[13]||(y[13]=b=>P(u)("end",b))},null,40,Xj)):Ce("",!0),P(t).config.loopEndUseCustomDuration?(Q(),te("span",Yj,"f")):(Q(),te("span",zj,R(v.$t("emission.auto",{frames:P(i)})),1))])])):Ce("",!0)])])):Ce("",!0),P(t).config.streamBehavior==="loop"?(Q(),te("div",jj,R(v.$t("emission.loopWarning")),1)):Ce("",!0)],64)):(Q(),It(Ue,{key:1,label:v.$t("emission.burstCount"),min:1,max:1e3,step:1,modelValue:P(t).config.burstCount,"onUpdate:modelValue":y[14]||(y[14]=b=>P(t).config.burstCount=b)},null,8,["label","modelValue"])),Ae(Ue,{label:v.$t("emission.delay"),min:0,max:5,step:.1,modelValue:P(t).config.delay,"onUpdate:modelValue":y[15]||(y[15]=b=>P(t).config.delay=b)},null,8,["label","modelValue"])],512),[[Fi,!P(r).emitMode]])]),w("div",Hj,[w("div",{class:"group-head",onClick:y[17]||(y[17]=b=>P(o)("shape"))},[w("span",Gj,R(P(r).shape?"▸":"▾"),1),w("span",null,R(v.$t("emission.shapeTitle")),1),w("button",{class:"group-reset",title:v.$t("emission.shapeReset"),onClick:y[16]||(y[16]=tt(b=>P(f)("shape"),["stop"]))},R(v.$t("common.reset")),9,Wj)]),me(w("div",qj,[w("label",Kj,[w("span",null,R(v.$t("emission.shape")),1),me(w("select",{"onUpdate:modelValue":y[18]||(y[18]=b=>P(t).config.shape=b),class:"inp",onChange:y[19]||(y[19]=(...b)=>P(m)&&P(m)(...b))},[w("option",Jj,R(v.$t("emission.point")),1),w("option",Zj,R(v.$t("emission.circle")),1),w("option",Qj,R(v.$t("emission.rect")),1),w("option",eH,R(v.$t("emission.cone")),1),w("option",tH,R(v.$t("emission.path")),1)],544),[[St,P(t).config.shape]])]),P(t).config.shape==="circle"||P(t).config.shape==="cone"?(Q(),te(_e,{key:0},[Ae(Ue,{label:P(t).config.shape==="cone"?v.$t("emission.innerDiameter"):v.$t("emission.innerRadius"),min:0,max:P(t).config.outerRadius,step:1,modelValue:P(t).config.innerRadius,"onUpdate:modelValue":y[20]||(y[20]=b=>P(t).config.innerRadius=b)},null,8,["label","max","modelValue"]),Ae(Ue,{label:P(t).config.shape==="cone"?v.$t("emission.outerDiameter"):v.$t("emission.outerRadius"),min:P(t).config.innerRadius,max:300,step:1,modelValue:P(t).config.outerRadius,"onUpdate:modelValue":y[21]||(y[21]=b=>P(t).config.outerRadius=b)},null,8,["label","min","modelValue"])],64)):Ce("",!0),P(t).config.shape==="cone"?(Q(),te(_e,{key:1},[Ae(Ue,{label:v.$t("emission.coneDirection"),min:-360,max:360,step:1,modelValue:P(t).config.coneDirection,"onUpdate:modelValue":y[22]||(y[22]=b=>P(t).config.coneDirection=b)},null,8,["label","modelValue"]),Ae(Ue,{label:v.$t("emission.coneAngle"),min:1,max:360,step:1,modelValue:P(t).config.coneAngle,"onUpdate:modelValue":y[23]||(y[23]=b=>P(t).config.coneAngle=b)},null,8,["label","modelValue"])],64)):P(t).config.shape==="rect"?(Q(),te(_e,{key:2},[Ae(Ue,{label:v.$t("emission.innerWidth"),min:0,max:P(t).config.outerRectW,step:1,modelValue:P(t).config.innerRectW,"onUpdate:modelValue":y[24]||(y[24]=b=>P(t).config.innerRectW=b)},null,8,["label","max","modelValue"]),Ae(Ue,{label:v.$t("emission.innerHeight"),min:0,max:P(t).config.outerRectH,step:1,modelValue:P(t).config.innerRectH,"onUpdate:modelValue":y[25]||(y[25]=b=>P(t).config.innerRectH=b)},null,8,["label","max","modelValue"]),Ae(Ue,{label:v.$t("emission.outerWidth"),min:P(t).config.innerRectW,max:400,step:1,modelValue:P(t).config.outerRectW,"onUpdate:modelValue":y[26]||(y[26]=b=>P(t).config.outerRectW=b)},null,8,["label","min","modelValue"]),Ae(Ue,{label:v.$t("emission.outerHeight"),min:P(t).config.innerRectH,max:400,step:1,modelValue:P(t).config.outerRectH,"onUpdate:modelValue":y[27]||(y[27]=b=>P(t).config.outerRectH=b)},null,8,["label","min","modelValue"])],64)):P(t).config.shape==="path"?(Q(),te(_e,{key:3},[w("label",iH,[w("span",null,R(v.$t("emission.selectPath")),1),me(w("select",{"onUpdate:modelValue":y[28]||(y[28]=b=>P(t).config.spawnPathId=b),class:"inp",onChange:y[29]||(y[29]=(...b)=>P(g)&&P(g)(...b))},[w("option",nH,R(v.$t("emission.noPath")),1),(Q(!0),te(_e,null,Pt(P(e).paths,b=>(Q(),te("option",{key:b.id,value:b.id,disabled:!b.enabled},R(b.name),9,sH))),128))],544),[[St,P(t).config.spawnPathId,void 0,{number:!0}]])]),P(t).config.spawnPathId>0?(Q(),te("label",rH,[w("span",null,R(v.$t("emission.birthDistribution")),1),me(w("select",{"onUpdate:modelValue":y[30]||(y[30]=b=>P(t).config.spawnPathDistribution=b),class:"inp"},[w("option",oH,R(v.$t("emission.evenDistribution")),1),w("option",aH,R(v.$t("emission.randomDistribution")),1)],512),[[St,P(t).config.spawnPathDistribution]])])):Ce("",!0)],64)):Ce("",!0),y[41]||(y[41]=w("div",{class:"divider"},null,-1)),w("label",lH,[w("span",null,R(v.$t("emission.emissionAngle")),1),me(w("select",{"onUpdate:modelValue":y[31]||(y[31]=b=>P(t).config.emissionAngleMode=b),class:"inp"},[w("option",cH,R(v.$t("common.fixed")),1),w("option",dH,R(v.$t("common.random")),1),P(t).config.shape==="circle"||P(t).config.shape==="rect"||P(t).config.shape==="cone"?(Q(),te("option",uH,R(v.$t("emission.radial")),1)):Ce("",!0),P(t).config.shape==="path"&&P(t).config.spawnPathId>0?(Q(),te("option",hH,R(v.$t("emission.pathNormal")),1)):Ce("",!0),P(t).config.shape==="path"&&P(t).config.spawnPathId>0?(Q(),te("option",fH,R(v.$t("emission.pathTangent")),1)):Ce("",!0)],512),[[St,P(t).config.emissionAngleMode]])]),P(t).config.emissionAngleMode==="fixed"?(Q(),It(Ue,{key:4,label:v.$t("emission.fixedAngle"),min:-360,max:360,step:1,modelValue:P(t).config.direction,"onUpdate:modelValue":y[32]||(y[32]=b=>P(t).config.direction=b)},null,8,["label","modelValue"])):P(t).config.emissionAngleMode==="random"?(Q(),te(_e,{key:5},[Ae(Ue,{label:v.$t("emission.baseAngle"),min:-360,max:360,step:1,modelValue:P(t).config.direction,"onUpdate:modelValue":y[33]||(y[33]=b=>P(t).config.direction=b)},null,8,["label","modelValue"]),Ae(Ue,{label:v.$t("emission.randomRange"),min:0,max:360,step:1,modelValue:P(t).config.spread,"onUpdate:modelValue":y[34]||(y[34]=b=>P(t).config.spread=b)},null,8,["label","modelValue"])],64)):Ce("",!0),P(t).config.shape!=="point"?(Q(),te("label",pH,[me(w("input",{type:"checkbox","onUpdate:modelValue":y[35]||(y[35]=b=>P(t).config.showShape=b)},null,512),[[Ct,P(t).config.showShape]]),y[40]||(y[40]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(v.$t("emission.showShape")),1)])):Ce("",!0)],512),[[Fi,!P(r).shape]])])],64))}}),gH=li(mH,[["__scopeId","data-v-dec7323c"]]),vH={class:"pac"},bH={class:"pac-head"},yH={class:"pac-label"},xH={key:0,class:"pac-modes"},wH=["onClick"],SH={class:"pac-range"},CH={class:"pac-curve"},AH={class:"pac-axis"},TH=qt({__name:"ParticleAttributeControl",props:{label:{},mode:{},valueMin:{},valueMax:{},curve:{},defaultCurve:{default:()=>[{x:0,y:0},{x:1,y:1}]},min:{},max:{},step:{default:1},allowDirection:{type:Boolean,default:!1},allowCurve:{type:Boolean,default:!0},showModes:{type:Boolean,default:!0},curveLabel:{default:""}},emits:["update:mode","update:valueMin","update:valueMax","update:curve"],setup(n){const e=n,{t}=fn(),i=Fe(()=>{const s=[{label:t("common.fixed"),value:"fixed"},{label:t("common.random"),value:"random"}];return e.allowCurve&&s.push({label:t("common.curve"),value:"curve"}),e.allowDirection&&s.push({label:t("attributeControl.direction"),value:"direction"}),s});return(s,r)=>(Q(),te("div",vH,[w("div",bH,[w("span",yH,R(n.label),1),n.showModes?(Q(),te("div",xH,[(Q(!0),te(_e,null,Pt(i.value,o=>(Q(),te("button",{key:o.value,class:Ie(["pac-mode",{on:n.mode===o.value}]),onClick:a=>s.$emit("update:mode",o.value)},R(o.label),11,wH))),128))])):Ce("",!0)]),n.mode==="fixed"||n.mode==="direction"?(Q(),It(Ue,{key:0,label:n.mode==="direction"?s.$t("attributeControl.angleOffset"):s.$t("attributeControl.value"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMin,"onUpdate:modelValue":r[0]||(r[0]=o=>s.$emit("update:valueMin",o))},null,8,["label","min","max","step","model-value"])):n.mode==="random"?(Q(),te(_e,{key:1},[Ae(Ue,{label:s.$t("attributeControl.lower"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMin,"onUpdate:modelValue":r[1]||(r[1]=o=>s.$emit("update:valueMin",o))},null,8,["label","min","max","step","model-value"]),Ae(Ue,{label:s.$t("attributeControl.upper"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMax,"onUpdate:modelValue":r[2]||(r[2]=o=>s.$emit("update:valueMax",o))},null,8,["label","min","max","step","model-value"])],64)):(Q(),te(_e,{key:2},[w("div",SH,[Ae(Ue,{label:s.$t("attributeControl.rangeLower"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMin,"onUpdate:modelValue":r[3]||(r[3]=o=>s.$emit("update:valueMin",o))},null,8,["label","min","max","step","model-value"]),Ae(Ue,{label:s.$t("attributeControl.rangeUpper"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMax,"onUpdate:modelValue":r[4]||(r[4]=o=>s.$emit("update:valueMax",o))},null,8,["label","min","max","step","model-value"])]),w("div",CH,[Ae(ys,{"model-value":n.curve,"default-value":n.defaultCurve,"onUpdate:modelValue":r[5]||(r[5]=o=>s.$emit("update:curve",o))},null,8,["model-value","default-value"]),w("div",AH,[r[6]||(r[6]=w("span",null,"0",-1)),w("span",null,R(n.curveLabel||s.$t("attributeControl.curveInput")),1),r[7]||(r[7]=w("span",null,"1",-1))])])],64))]))}}),Us=li(TH,[["__scopeId","data-v-a3a8dde3"]]),EH={class:"group"},_H={class:"caret"},MH=["title"],PH={class:"group-body attr-body"},IH={class:"attr-section-title"},kH={class:"attr-axis-head"},RH={class:"axis-modes"},FH={class:"attr-section-title life-title"},LH={class:"life-item"},DH={class:"switch-row"},OH={class:"life-item"},NH={class:"switch-row"},$H={class:"axis-modes life-axis"},BH={class:"life-item"},UH={class:"switch-row"},VH=qt({__name:"ParticleAttributesSection",setup(n){const{sys:e,collapsed:t,toggle:i,resetModule:s,setSpeedOverLifeMode:r,prepareScaleOverLifeCurve:o,setScaleOverLifeMode:a,LINEAR_CURVE:c,FLAT_CURVE:l}=oo();return(d,u)=>(Q(),te("div",EH,[w("div",{class:"group-head",onClick:u[1]||(u[1]=h=>P(i)("attr"))},[w("span",_H,R(P(t).attr?"▸":"▾"),1),w("span",null,R(d.$t("attributes.title")),1),w("button",{class:"group-reset",title:d.$t("attributes.reset"),onClick:u[0]||(u[0]=tt(h=>P(s)("attr"),["stop"]))},R(d.$t("common.reset")),9,MH)]),me(w("div",PH,[w("div",IH,R(d.$t("attributes.initialParams")),1),Ae(Us,{label:d.$t("attributes.initialLife"),"allow-curve":!1,mode:P(e).config.lifeMode,"onUpdate:mode":u[2]||(u[2]=h=>P(e).config.lifeMode=h),"value-min":P(e).config.lifeMin,"onUpdate:valueMin":u[3]||(u[3]=h=>P(e).config.lifeMin=h),"value-max":P(e).config.lifeMax,"onUpdate:valueMax":u[4]||(u[4]=h=>P(e).config.lifeMax=h),curve:P(e).config.lifeCurve,"onUpdate:curve":u[5]||(u[5]=h=>P(e).config.lifeCurve=h),min:.1,max:10,step:.1,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"]),Ae(Us,{label:d.$t("attributes.initialSpeed"),"allow-curve":!1,mode:P(e).config.speedMode,"onUpdate:mode":u[6]||(u[6]=h=>P(e).config.speedMode=h),"value-min":P(e).config.speedMin,"onUpdate:valueMin":u[7]||(u[7]=h=>P(e).config.speedMin=h),"value-max":P(e).config.speedMax,"onUpdate:valueMax":u[8]||(u[8]=h=>P(e).config.speedMax=h),curve:P(e).config.speedCurve,"onUpdate:curve":u[9]||(u[9]=h=>P(e).config.speedCurve=h),min:0,max:1e3,step:1,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"]),w("div",kH,[w("span",null,R(d.$t("attributes.initialScale")),1),w("div",RH,[w("button",{class:Ie(["axis-mode",{on:P(e).config.scaleAxisMode==="uniform"}]),onClick:u[10]||(u[10]=h=>P(e).config.scaleAxisMode="uniform")},R(d.$t("attributes.uniform")),3),w("button",{class:Ie(["axis-mode",{on:P(e).config.scaleAxisMode==="separate"}]),onClick:u[11]||(u[11]=h=>P(e).config.scaleAxisMode="separate")},R(d.$t("attributes.separateXY")),3)])]),Ae(Us,{label:P(e).config.scaleAxisMode==="uniform"?d.$t("attributes.initialScale"):d.$t("attributes.scaleX"),"allow-curve":!1,mode:P(e).config.scaleMode,"onUpdate:mode":u[12]||(u[12]=h=>P(e).config.scaleMode=h),"value-min":P(e).config.scaleMin,"onUpdate:valueMin":u[13]||(u[13]=h=>P(e).config.scaleMin=h),"value-max":P(e).config.scaleMax,"onUpdate:valueMax":u[14]||(u[14]=h=>P(e).config.scaleMax=h),curve:P(e).config.scaleCurve,"onUpdate:curve":u[15]||(u[15]=h=>P(e).config.scaleCurve=h),min:0,max:5,step:.05,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"]),P(e).config.scaleAxisMode==="separate"?(Q(),It(Us,{key:0,label:d.$t("attributes.scaleY"),"show-modes":!1,"allow-curve":!1,mode:P(e).config.scaleMode,"onUpdate:mode":u[16]||(u[16]=h=>P(e).config.scaleMode=h),"value-min":P(e).config.scaleYMin,"onUpdate:valueMin":u[17]||(u[17]=h=>P(e).config.scaleYMin=h),"value-max":P(e).config.scaleYMax,"onUpdate:valueMax":u[18]||(u[18]=h=>P(e).config.scaleYMax=h),curve:P(e).config.scaleYCurve,"onUpdate:curve":u[19]||(u[19]=h=>P(e).config.scaleYCurve=h),min:0,max:5,step:.05,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"])):Ce("",!0),Ae(Us,{label:d.$t("attributes.initialRotation"),"allow-direction":"","allow-curve":!1,mode:P(e).config.initialRotationMode,"onUpdate:mode":u[20]||(u[20]=h=>P(e).config.initialRotationMode=h),"value-min":P(e).config.initialRotationMin,"onUpdate:valueMin":u[21]||(u[21]=h=>P(e).config.initialRotationMin=h),"value-max":P(e).config.initialRotationMax,"onUpdate:valueMax":u[22]||(u[22]=h=>P(e).config.initialRotationMax=h),curve:P(e).config.initialRotationCurve,"onUpdate:curve":u[23]||(u[23]=h=>P(e).config.initialRotationCurve=h),min:-360,max:360,step:1,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"]),w("div",FH,R(d.$t("attributes.lifecycleTitle")),1),w("div",LH,[w("label",DH,[me(w("input",{type:"checkbox","onUpdate:modelValue":u[24]||(u[24]=h=>P(e).config.speedOverLifeEnabled=h)},null,512),[[Ct,P(e).config.speedOverLifeEnabled]]),u[44]||(u[44]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(d.$t("attributes.speedOverLife")),1)]),P(e).config.speedOverLifeEnabled?(Q(),It(Us,{key:0,label:d.$t("attributes.speedMultiplier"),mode:P(e).config.speedOverLifeMode,"onUpdate:mode":P(r),"value-min":P(e).config.speedOverLifeMin,"onUpdate:valueMin":u[25]||(u[25]=h=>P(e).config.speedOverLifeMin=h),"value-max":P(e).config.speedOverLifeMax,"onUpdate:valueMax":u[26]||(u[26]=h=>P(e).config.speedOverLifeMax=h),curve:P(e).config.speedOverLifeCurve,"onUpdate:curve":u[27]||(u[27]=h=>P(e).config.speedOverLifeCurve=h),"default-curve":P(l),min:0,max:3,step:.05,"curve-label":d.$t("attributes.lifeTo")},null,8,["label","mode","onUpdate:mode","value-min","value-max","curve","default-curve","curve-label"])):Ce("",!0)]),w("div",OH,[w("label",NH,[me(w("input",{type:"checkbox","onUpdate:modelValue":u[28]||(u[28]=h=>P(e).config.scaleOverLifeEnabled=h),onChange:u[29]||(u[29]=(...h)=>P(o)&&P(o)(...h))},null,544),[[Ct,P(e).config.scaleOverLifeEnabled]]),u[45]||(u[45]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(d.$t("attributes.scaleOverLife")),1)]),P(e).config.scaleOverLifeEnabled?(Q(),te(_e,{key:0},[w("div",$H,[w("button",{class:Ie(["axis-mode",{on:P(e).config.scaleOverLifeAxisMode==="uniform"}]),onClick:u[30]||(u[30]=h=>P(e).config.scaleOverLifeAxisMode="uniform")},R(d.$t("attributes.uniform")),3),w("button",{class:Ie(["axis-mode",{on:P(e).config.scaleOverLifeAxisMode==="separate"}]),onClick:u[31]||(u[31]=h=>P(e).config.scaleOverLifeAxisMode="separate")},R(d.$t("attributes.separateXY")),3)]),Ae(Us,{label:P(e).config.scaleOverLifeAxisMode==="uniform"?d.$t("attributes.scaleMultiplier"):d.$t("attributes.multiplierX"),mode:P(e).config.scaleOverLifeMode,"onUpdate:mode":P(a),"value-min":P(e).config.scaleOverLifeMin,"onUpdate:valueMin":u[32]||(u[32]=h=>P(e).config.scaleOverLifeMin=h),"value-max":P(e).config.scaleOverLifeMax,"onUpdate:valueMax":u[33]||(u[33]=h=>P(e).config.scaleOverLifeMax=h),curve:P(e).config.scaleOverLifeCurve,"onUpdate:curve":u[34]||(u[34]=h=>P(e).config.scaleOverLifeCurve=h),"default-curve":P(l),min:0,max:3,step:.05,"curve-label":d.$t("attributes.lifeTo")},null,8,["label","mode","onUpdate:mode","value-min","value-max","curve","default-curve","curve-label"]),P(e).config.scaleOverLifeAxisMode==="separate"?(Q(),It(Us,{key:0,label:d.$t("attributes.multiplierY"),"show-modes":!1,mode:P(e).config.scaleOverLifeMode,"onUpdate:mode":u[35]||(u[35]=h=>P(e).config.scaleOverLifeMode=h),"value-min":P(e).config.scaleYOverLifeMin,"onUpdate:valueMin":u[36]||(u[36]=h=>P(e).config.scaleYOverLifeMin=h),"value-max":P(e).config.scaleYOverLifeMax,"onUpdate:valueMax":u[37]||(u[37]=h=>P(e).config.scaleYOverLifeMax=h),curve:P(e).config.scaleYOverLifeCurve,"onUpdate:curve":u[38]||(u[38]=h=>P(e).config.scaleYOverLifeCurve=h),"default-curve":P(l),min:0,max:3,step:.05,"curve-label":d.$t("attributes.lifeTo")},null,8,["label","mode","value-min","value-max","curve","default-curve","curve-label"])):Ce("",!0)],64)):Ce("",!0)]),w("div",BH,[w("label",UH,[me(w("input",{type:"checkbox","onUpdate:modelValue":u[39]||(u[39]=h=>P(e).config.rotationOverLifeEnabled=h)},null,512),[[Ct,P(e).config.rotationOverLifeEnabled]]),u[46]||(u[46]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(d.$t("attributes.rotationOverLife")),1)]),P(e).config.rotationOverLifeEnabled?(Q(),It(Us,{key:0,label:d.$t("attributes.rotationSpeed"),mode:P(e).config.rotationOverLifeMode,"onUpdate:mode":u[40]||(u[40]=h=>P(e).config.rotationOverLifeMode=h),"value-min":P(e).config.rotationSpeedMin,"onUpdate:valueMin":u[41]||(u[41]=h=>P(e).config.rotationSpeedMin=h),"value-max":P(e).config.rotationSpeedMax,"onUpdate:valueMax":u[42]||(u[42]=h=>P(e).config.rotationSpeedMax=h),curve:P(e).config.rotationOverLifeCurve,"onUpdate:curve":u[43]||(u[43]=h=>P(e).config.rotationOverLifeCurve=h),"default-curve":P(c),min:-720,max:720,step:10,"curve-label":d.$t("attributes.lifeTo")},null,8,["label","mode","value-min","value-max","curve","default-curve","curve-label"])):Ce("",!0)])],512),[[Fi,!P(t).attr]])]))}}),XH=li(VH,[["__scopeId","data-v-3bbf0b5e"]]),YH={class:"gradient-editor"},zH=["title"],jH=["title","onClick","onDblclick","onPointerdown"],HH={key:0,class:"gradient-controls"},GH=["value","aria-label"],WH=["value","aria-label"],qH={class:"gradient-position"},KH=["value","aria-label"],JH=["title"],ZH=["title","disabled"],QH={class:"gradient-hint"},eG=qt({__name:"ColorGradientEditor",props:{modelValue:{}},emits:["update:modelValue"],setup(n,{emit:e}){const t=n,i=e,s=$e(null),r=$e(0),o=Fe(()=>t.modelValue[r.value]||null),a=Fe(()=>[...t.modelValue].sort((E,_)=>E.position-_.position)),c=Fe(()=>{const E=a.value;return E.length?`linear-gradient(90deg, ${E.map(_=>`${_.color} ${l(_.position)*100}%`).join(", ")})`:"#ffffff"});ei(()=>t.modelValue.length,E=>{r.value>=E&&(r.value=Math.max(0,E-1))});function l(E){return Math.min(1,Math.max(0,Number(E)||0))}function d(){return t.modelValue.map(E=>({position:l(E.position),color:E.color}))}function u(E,_){const I=d();I[E]&&(I[E]={...I[E],..._},i("update:modelValue",I))}function h(E){u(r.value,{color:E.target.value})}function f(E){var M;const _=E.target,I=S(_.value,((M=o.value)==null?void 0:M.color)||"#ffffff");_.value=I,u(r.value,{color:I})}function p(E){const _=E.target;f(E),_.blur()}function m(E){const _=Number(E.target.value);Number.isFinite(_)&&u(r.value,{position:l(_/100)})}function g(E){const _=d();_.push({position:l(E),color:C(_,E)}),r.value=_.length-1,i("update:modelValue",_)}function v(E){if(!s.value)return;const _=s.value.getBoundingClientRect();g((E.clientX-_.left)/Math.max(1,_.width))}function y(){const E=a.value;let _=.5;if(E.length>1){let I=-1;for(let M=0;MI&&(I=k,_=(E[M].position+E[M+1].position)/2)}}g(_)}function b(E){if(t.modelValue.length<=2||E<0)return;const _=d().filter((I,M)=>M!==E);r.value=Math.min(E,_.length-1),i("update:modelValue",_)}function x(E,_){if(!s.value)return;r.value=_;const I=k=>{const B=s.value.getBoundingClientRect();u(_,{position:l((k.clientX-B.left)/Math.max(1,B.width))})},M=()=>{window.removeEventListener("pointermove",I),window.removeEventListener("pointerup",M),window.removeEventListener("pointercancel",M)};window.addEventListener("pointermove",I),window.addEventListener("pointerup",M),window.addEventListener("pointercancel",M),E.preventDefault()}function C(E,_){const I=[...E].sort((M,k)=>M.position-k.position);if(!I.length)return"#ffffff";if(_<=I[0].position)return I[0].color;if(_>=I[I.length-1].position)return I[I.length-1].color;for(let M=0;MB.position)continue;const D=(_-k.position)/Math.max(1e-4,B.position-k.position);return T(k.color,B.color,D)}return I[I.length-1].color}function T(E,_,I){const M=G=>{const V=parseInt(G.replace("#","").padEnd(6,"0").slice(0,6),16);return[V>>16&255,V>>8&255,V&255]},k=M(E),B=M(_),D=G=>Math.round(k[G]+(B[G]-k[G])*I);return`#${[D(0),D(1),D(2)].map(G=>G.toString(16).padStart(2,"0")).join("")}`}function S(E,_){let I=E.trim().replace(/^#/,"");return/^[0-9a-f]{3}$/i.test(I)&&(I=I.split("").map(M=>M+M).join("")),/^[0-9a-f]{6}$/i.test(I)?`#${I.toLowerCase()}`:_}return(E,_)=>(Q(),te("div",YH,[w("div",{ref_key:"bar",ref:s,class:"gradient-bar",style:Vt({background:c.value}),title:E.$t("gradient.addTitle"),onDblclick:v},[(Q(!0),te(_e,null,Pt(n.modelValue,(I,M)=>(Q(),te("button",{key:M,type:"button",class:Ie(["gradient-stop",{selected:M===r.value}]),style:Vt({left:`${l(I.position)*100}%`,"--stop-color":I.color}),title:`${Math.round(l(I.position)*100)}% · ${I.color}`,onClick:tt(k=>r.value=M,["stop"]),onDblclick:tt(k=>b(M),["stop"]),onPointerdown:tt(k=>x(k,M),["stop"])},null,46,jH))),128))],44,zH),o.value?(Q(),te("div",HH,[w("input",{type:"color",class:"gradient-color",value:o.value.color,"aria-label":E.$t("gradient.color"),onInput:h},null,40,GH),w("input",{type:"text",class:"gradient-hex-input",value:o.value.color,"aria-label":E.$t("gradient.colorValue"),spellcheck:"false",onChange:f,onKeydown:Gr(p,["enter"])},null,40,WH),w("label",qH,[w("input",{type:"number",min:"0",max:"100",step:"1",value:Math.round(l(o.value.position)*100),"aria-label":E.$t("gradient.position"),onInput:m},null,40,KH),_[1]||(_[1]=w("span",null,"%",-1))]),w("button",{type:"button",class:"gradient-action",title:E.$t("gradient.addMiddle"),onClick:y},"+",8,JH),w("button",{type:"button",class:"gradient-action danger",title:E.$t("gradient.delete"),disabled:n.modelValue.length<=2,onClick:_[0]||(_[0]=I=>b(r.value))},"×",8,ZH)])):Ce("",!0),w("div",QH,R(E.$t("gradient.hint")),1)]))}}),kT=li(eG,[["__scopeId","data-v-cb6cfaf8"]]),tG={class:"pivot-toolbar"},iG={class:"pivot-hint"},nG={class:"pivot-zoom"},sG=["disabled","title"],rG=["disabled","title"],oG=["title"],aG=["title"],lG=["src","alt"],cG={key:2,class:"pivot-empty"},dG={class:"pivot-bottom"},uG={class:"pivot-card"},hG={class:"pivot-presets"},fG=["title","aria-label","onClick"],pG={class:"pivot-card"},mG={class:"pivot-card-head"},gG={class:"pivot-coords"},vG=["value"],bG=["value"],yG={class:"pivot-card-head pivot-rotate-head"},xG={class:"pivot-rotate-state"},wG={class:"pivot-rotate-body"},SG={class:"pivot-rotate-modes"},CG={class:"pivot-rotate-preview"},AG=["src","alt"],wp=1e3,TG=qt({__name:"PivotEditor",props:{previewUrl:{},anchorX:{},anchorY:{},large:{type:Boolean,default:!1}},emits:["update:anchorX","update:anchorY","fullscreen"],setup(n,{emit:e}){const t=n,i=e,{t:s}=fn(),r=Fe(()=>[{icon:"↖",label:s("pivot.topLeft"),x:0,y:0},{icon:"↑",label:s("pivot.top"),x:50,y:0},{icon:"↗",label:s("pivot.topRight"),x:100,y:0},{icon:"←",label:s("pivot.left"),x:0,y:50},{icon:"◯",label:s("pivot.center"),x:50,y:50},{icon:"→",label:s("pivot.right"),x:100,y:50},{icon:"↙",label:s("pivot.bottomLeft"),x:0,y:100},{icon:"↓",label:s("pivot.bottom"),x:50,y:100},{icon:"↘",label:s("pivot.bottomRight"),x:100,y:100}]),o=$e(null),a=$e(null),c=$e({w:0,h:0}),l=$e({w:1,h:1}),d=$e(100),u=$e({x:0,y:0}),h=$e(!1),f=$e("static");let p=null;const m=L=>Math.min(wp,Math.max(-wp,Number.isFinite(L)?L:0)),g=Fe(()=>m(t.anchorX*100).toFixed(1)),v=Fe(()=>m(t.anchorY*100).toFixed(1));function y(L,N){const F=l.value.w/Math.max(1,l.value.h);let $=L,X=$/F;return X>N&&(X=N,$=X*F),{w:Math.max(1,$),h:Math.max(1,X)}}const b=Fe(()=>{const L=t.large?26:12,N=Math.max(1,c.value.w-L*2),F=Math.max(1,c.value.h-L*2);return y(N,F)}),x=Fe(()=>({width:`${b.value.w}px`,height:`${b.value.h}px`,transform:`translate(${u.value.x}px, ${u.value.y}px) scale(${d.value/100})`})),C=Fe(()=>{const L=d.value/100;return{x:c.value.w/2+u.value.x+(m(t.anchorX*100)/100-.5)*b.value.w*L,y:c.value.h/2+u.value.y+(m(t.anchorY*100)/100-.5)*b.value.h*L}}),T=Fe(()=>{const L=t.large?128:72,N=y(L,L);return{width:`${N.w}px`,height:`${N.h}px`,transformOrigin:`${m(t.anchorX*100)}% ${m(t.anchorY*100)}%`}});function S(L,N){const F=wp/100;i("update:anchorX",Math.min(F,Math.max(-F,Number.isFinite(L)?L:0))),i("update:anchorY",Math.min(F,Math.max(-F,Number.isFinite(N)?N:0)))}function E(L){const N=a.value;if(!N)return;const F=N.getBoundingClientRect();F.width<=0||F.height<=0||S((L.clientX-F.left)/F.width,(L.clientY-F.top)/F.height)}function _(L){if(!t.previewUrl)return;if(L.button===2){I(L);return}if(L.button!==0)return;L.preventDefault(),E(L);const N=$=>E($),F=()=>{window.removeEventListener("pointermove",N),window.removeEventListener("pointerup",F),window.removeEventListener("pointercancel",F)};window.addEventListener("pointermove",N),window.addEventListener("pointerup",F),window.addEventListener("pointercancel",F)}function I(L){L.preventDefault(),h.value=!0;const N=L.clientX,F=L.clientY,$=u.value.x,X=u.value.y,z=J=>{u.value={x:$+J.clientX-N,y:X+J.clientY-F}},K=()=>{h.value=!1,window.removeEventListener("pointermove",z),window.removeEventListener("pointerup",K),window.removeEventListener("pointercancel",K)};window.addEventListener("pointermove",z),window.addEventListener("pointerup",K),window.addEventListener("pointercancel",K)}function M(L){const N=L.deltaY<0?1.12:.8928571428571428,F=Math.min(400,Math.max(100,Math.round(d.value*N)));if(F===d.value)return;const $=o.value;if(!$){d.value=F;return}const X=$.getBoundingClientRect(),z=L.clientX-X.left,K=L.clientY-X.top,J=F/d.value;u.value={x:u.value.x+(z-X.width/2-u.value.x)*(1-J),y:u.value.y+(K-X.height/2-u.value.y)*(1-J)},d.value=F}function k(L){const N=L.target;l.value={w:N.naturalWidth||1,h:N.naturalHeight||1}}function B(L){d.value=Math.min(400,Math.max(100,d.value+L))}function D(){S(.5,.5)}function G(L){S(L.x/100,L.y/100)}function V(L){return Math.abs(m(t.anchorX*100)-L.x)<.05&&Math.abs(m(t.anchorY*100)-L.y)<.05}function Y(L,N){const F=m(Number(N.target.value));i(L==="x"?"update:anchorX":"update:anchorY",F/100)}return ei(()=>t.previewUrl,()=>{l.value={w:1,h:1},u.value={x:0,y:0},d.value=100}),Sn(()=>{o.value&&(p=new ResizeObserver(L=>{var F;const N=(F=L[0])==null?void 0:F.contentRect;N&&(c.value={w:N.width,h:N.height})}),p.observe(o.value))}),eo(()=>{p==null||p.disconnect(),p=null}),(L,N)=>(Q(),te("div",{class:Ie(["pivot-editor",{"pivot-large":n.large}])},[w("div",tG,[w("div",iG,[N[9]||(N[9]=w("span",{class:"pivot-hint-icon"},"⊕",-1)),w("span",null,R(L.$t("pivot.title")),1)]),w("div",nG,[w("button",{type:"button",disabled:d.value<=100,title:L.$t("pivot.zoomOut"),onClick:N[0]||(N[0]=F=>B(-25))},"−",8,sG),w("span",null,R(d.value)+"%",1),w("button",{type:"button",disabled:d.value>=400,title:L.$t("pivot.zoomIn"),onClick:N[1]||(N[1]=F=>B(25))},"+",8,rG)]),n.large?Ce("",!0):(Q(),te("button",{key:0,type:"button",class:"pivot-expand",title:L.$t("pivot.expand"),onClick:N[2]||(N[2]=F=>L.$emit("fullscreen"))},"⤢",8,oG))]),w("div",{ref_key:"stageRef",ref:o,class:Ie(["pivot-stage",{panning:h.value}]),title:L.$t("pivot.interaction"),onPointerdown:_,onWheel:tt(M,["prevent"]),onContextmenu:N[3]||(N[3]=tt(()=>{},["prevent"]))},[n.previewUrl?(Q(),te("div",{key:0,ref_key:"boxRef",ref:a,class:"pivot-box",style:Vt(x.value)},[w("img",{src:n.previewUrl,alt:L.$t("pivot.previewAlt"),draggable:"false",onLoad:k},null,40,lG)],4)):Ce("",!0),n.previewUrl?(Q(),te(_e,{key:1},[w("div",{class:"pivot-cross vertical",style:Vt({left:`${C.value.x}px`})},null,4),w("div",{class:"pivot-cross horizontal",style:Vt({top:`${C.value.y}px`})},null,4),w("div",{class:"pivot-marker",style:Vt({left:`${C.value.x}px`,top:`${C.value.y}px`})},null,4),w("div",{class:"pivot-badge",style:Vt({left:`${C.value.x}px`,top:`${C.value.y}px`})},"X: "+R(g.value)+"% | Y: "+R(v.value)+"%",5)],64)):(Q(),te("div",cG,R(L.$t("pivot.noImage")),1))],42,aG),w("div",dG,[w("div",uG,[w("div",hG,[(Q(!0),te(_e,null,Pt(r.value,F=>(Q(),te("button",{key:F.label,type:"button",class:Ie(["pivot-preset",{on:V(F)}]),title:`${F.label}(${F.x}%, ${F.y}%)`,"aria-label":F.label,onClick:$=>G(F)},R(F.icon),11,fG))),128))]),w("button",{type:"button",class:"pivot-reset",onClick:D},"↺ "+R(L.$t("pivot.resetCenter")),1)]),w("div",pG,[w("div",mG,[w("span",null,[N[10]||(N[10]=w("span",{class:"pivot-card-icon"},"◎",-1)),bt(" "+R(L.$t("pivot.coordinates")),1)])]),w("div",gG,[w("label",null,[N[11]||(N[11]=bt("X: ",-1)),w("input",{type:"number",min:"-1000",max:"1000",step:"0.1",value:g.value,onInput:N[4]||(N[4]=F=>Y("x",F))},null,40,vG),N[12]||(N[12]=w("span",null,"%",-1))]),w("label",null,[N[13]||(N[13]=bt("Y: ",-1)),w("input",{type:"number",min:"-1000",max:"1000",step:"0.1",value:v.value,onInput:N[5]||(N[5]=F=>Y("y",F))},null,40,bG),N[14]||(N[14]=w("span",null,"%",-1))])]),n.large?(Q(),te(_e,{key:0},[w("div",yG,[w("span",null,[N[15]||(N[15]=w("span",{class:"pivot-card-icon"},"✥",-1)),bt(" "+R(L.$t("pivot.rotationTest")),1)]),w("span",xG,R(f.value==="static"?L.$t("pivot.static"):f.value==="spin"?L.$t("pivot.spin"):L.$t("pivot.swing")),1)]),w("div",wG,[w("div",SG,[w("button",{type:"button",class:Ie({on:f.value==="static"}),onClick:N[6]||(N[6]=F=>f.value="static")},R(L.$t("pivot.static")),3),w("button",{type:"button",class:Ie({on:f.value==="spin"}),onClick:N[7]||(N[7]=F=>f.value="spin")},"↻ "+R(L.$t("pivot.spin")),3),w("button",{type:"button",class:Ie({on:f.value==="swing"}),onClick:N[8]||(N[8]=F=>f.value="swing")},"⇄ "+R(L.$t("pivot.swing")),3)]),w("div",CG,[n.previewUrl?(Q(),te("img",{key:0,src:n.previewUrl,alt:L.$t("pivot.rotationAlt"),draggable:"false",class:Ie(f.value),style:Vt(T.value)},null,14,AG)):Ce("",!0)])])],64)):Ce("",!0)])])],2))}}),Mx=li(TG,[["__scopeId","data-v-a5622844"]]),EG={class:"image-card"},_G={class:"imgrow"},MG=["title"],PG=["src","alt"],IG={key:1,viewBox:"0 0 24 24",width:"22",height:"22",fill:"none",stroke:"#8a93bb","stroke-width":"1.6"},kG={class:"img-fields"},RG={key:0,class:"row"},FG={class:"row"},LG=["placeholder"],DG={class:"img-actions"},OG=["title"],NG=["title","disabled"],$G={class:"thumb-note"},BG={key:0,class:"row"},UG={value:"fixed"},VG={value:"sequence"},XG={class:"row"},YG={value:"once-hide"},zG={value:"once-hold"},jG={value:"loop-forward"},HG={value:"loop-reverse"},GG={class:"row"},WG={class:"sequence-note"},qG={class:"resource-weight-row"},KG=["disabled","title"],JG={key:0,viewBox:"0 0 24 24","aria-hidden":"true"},ZG={key:1,viewBox:"0 0 24 24","aria-hidden":"true"},QG={key:2,class:"pivot-toggle-row"},eW={class:"pivot-toggle-text"},tW={class:"pivot-toggle-title"},iW=["title"],nW=["title"],sW=["aria-label"],rW={class:"pivot-modal-head"},oW={class:"pivot-modal-info"},aW={class:"pivot-modal-title"},lW={class:"pivot-modal-badge"},cW={class:"pivot-modal-desc"},dW=["title"],uW={class:"pivot-modal-hint"},hW={class:"pivot-modal-actions"},Px="SpineParticle.PivotPanels.v1",fW=qt({__name:"ImageResourceCard",props:{resource:{},resourceCount:{},defaultFile:{},namePlaceholder:{default:"particle"},showFolder:{type:Boolean,default:!0},supportsSequence:{type:Boolean,default:!1},pivotKey:{}},emits:["pick","pickSequence","reset","remove","updateWeight","toggleLock"],setup(n,{emit:e}){const t=n,i=e,{t:s}=fn(),r=Fe(()=>{var _,I;if(t.resource.imageMode==="sequence"){const M=t.resource.sequenceFrames||[];if(!M.length)return s("image.noSequence");const k=((_=M[0])==null?void 0:_.name)||s("image.firstFrame"),B=((I=M[M.length-1])==null?void 0:I.name)||k;return M.length===1?s("image.frameCountOne",{name:k}):s("image.frameCountMany",{count:M.length,first:k,last:B})}const E=t.resource.textureName||t.defaultFile.replace(/\.[^.]+$/,"");return E.includes(".")?E:`${E}.png`}),o=Fe(()=>{var E,_;return t.resource.imageMode==="sequence"?((_=(E=t.resource.sequenceFrames)==null?void 0:E[0])==null?void 0:_.previewUrl)||"":t.resource.previewUrl});function a(){try{const E=JSON.parse(sessionStorage.getItem(Px)||"{}");return E&&typeof E=="object"?E:{}}catch{return{}}}const c=a(),l=Fe(()=>t.pivotKey||`particle-image:${t.resource.id}`),d=Fe(()=>typeof t.resource.anchorX=="number"&&typeof t.resource.anchorY=="number"),u=Fe(()=>Math.abs((t.resource.anchorX??.5)-.5)<1e-4&&Math.abs((t.resource.anchorY??.5)-.5)<1e-4),h=typeof c[l.value]=="boolean",f=$e(h?c[l.value]:!u.value);ei(f,E=>{c[l.value]=E;try{sessionStorage.setItem(Px,JSON.stringify(c))}catch{}}),ei(l,E=>{f.value=typeof c[E]=="boolean"?c[E]:!u.value}),ei(()=>u.value,E=>{E||(f.value=!0)},{immediate:!0});const p=$e(!1),m=$e(.5),g=$e(.5),v=Fe(()=>{const E=((t.resource.anchorX??.5)*100).toFixed(1),_=((t.resource.anchorY??.5)*100).toFixed(1);return f.value?s("image.pivotOn",{x:E,y:_}):u.value?s("image.pivotOff"):s("image.pivotCustom",{x:E,y:_})});function y(){m.value=t.resource.anchorX??.5,g.value=t.resource.anchorY??.5,p.value=!0}function b(){f.value||(t.resource.anchorX=.5,t.resource.anchorY=.5,p.value=!1)}function x(E){E&&(t.resource.anchorX=m.value,t.resource.anchorY=g.value),p.value=!1}function C(E){E.key==="Escape"&&p.value&&x(!1)}Sn(()=>window.addEventListener("keydown",C)),eo(()=>window.removeEventListener("keydown",C));const T=Fe(()=>{var M,k;const E=t.resource.sequenceFrames||[];if(!E.length)return s("image.noSequence");const _=((M=E[0])==null?void 0:M.name)||s("image.firstImage"),I=((k=E[E.length-1])==null?void 0:k.name)||s("image.lastImage");return s("image.sequenceSelected",{count:E.length,first:_,last:I})});function S(){t.supportsSequence&&t.resource.imageMode==="sequence"?i("pickSequence",t.resource.id):i("pick",t.resource.id)}return(E,_)=>(Q(),te(_e,null,[w("div",EG,[w("div",_G,[w("button",{class:"img-thumb",title:n.supportsSequence&&n.resource.imageMode==="sequence"?E.$t("image.chooseSequence"):E.$t("image.chooseLocal"),onClick:S},[o.value?(Q(),te("img",{key:0,src:o.value,alt:n.resource.textureName},null,8,PG)):(Q(),te("svg",IG,[..._[19]||(_[19]=[w("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"},null,-1),w("circle",{cx:"8.5",cy:"8.5",r:"1.6"},null,-1),w("path",{d:"M21 15l-5-5-9 9"},null,-1)])]))],8,MG),w("div",kG,[n.showFolder?(Q(),te("label",RG,[w("span",null,R(E.$t("image.subfolder")),1),me(w("input",{"onUpdate:modelValue":_[0]||(_[0]=I=>n.resource.textureFolder=I),type:"text",class:"inp",placeholder:"subfolder/"},null,512),[[Je,n.resource.textureFolder]])])):Ce("",!0),w("label",FG,[w("span",null,R(E.$t("image.name")),1),me(w("input",{"onUpdate:modelValue":_[1]||(_[1]=I=>n.resource.textureName=I),type:"text",class:"inp",placeholder:n.namePlaceholder},null,8,LG),[[Je,n.resource.textureName]])])]),w("div",DG,[w("button",{class:"mini-btn2",title:E.$t("image.restore",{name:n.defaultFile}),onClick:_[2]||(_[2]=I=>E.$emit("reset",n.resource.id))},"⟳",8,OG),w("button",{class:"mini-btn2",title:E.$t("image.deleteResource"),disabled:n.resourceCount===1,onClick:_[3]||(_[3]=I=>E.$emit("remove",n.resource.id))},"🗑",8,NG)])]),w("div",$G,R(r.value),1),n.supportsSequence?(Q(),te("label",BG,[w("span",null,R(E.$t("image.imageMode")),1),me(w("select",{"onUpdate:modelValue":_[4]||(_[4]=I=>n.resource.imageMode=I),class:"inp"},[w("option",UG,R(E.$t("image.fixed")),1),w("option",VG,R(E.$t("image.sequence")),1)],512),[[St,n.resource.imageMode]])])):Ce("",!0),n.supportsSequence&&n.resource.imageMode==="sequence"?(Q(),te(_e,{key:1},[w("label",XG,[w("span",null,R(E.$t("image.playbackMode")),1),me(w("select",{"onUpdate:modelValue":_[5]||(_[5]=I=>n.resource.sequencePlayback=I),class:"inp"},[w("option",YG,R(E.$t("image.onceHide")),1),w("option",zG,R(E.$t("image.onceHold")),1),w("option",jG,R(E.$t("image.loopForward")),1),w("option",HG,R(E.$t("image.loopReverse")),1)],512),[[St,n.resource.sequencePlayback]])]),w("label",GG,[w("span",null,R(E.$t("image.playbackFps")),1),me(w("input",{"onUpdate:modelValue":_[6]||(_[6]=I=>n.resource.sequenceFps=I),type:"number",min:"1",max:"120",step:"1",class:"inp"},null,512),[[Je,n.resource.sequenceFps,void 0,{number:!0}]])]),w("button",{class:"sequence-pick",onClick:_[7]||(_[7]=I=>E.$emit("pickSequence",n.resource.id))},R(E.$t("image.chooseSequenceMulti")),1),w("div",WG,R(T.value),1)],64)):Ce("",!0),w("div",qG,[Ae(Ue,{class:"resource-weight-control",label:E.$t("image.weight"),min:0,max:100,step:1,"model-value":n.resource.weight,disabled:n.resource.locked||n.resourceCount===1,"onUpdate:modelValue":_[8]||(_[8]=I=>E.$emit("updateWeight",n.resource.id,I))},null,8,["label","model-value","disabled"]),w("button",{class:Ie(["weight-lock",{on:n.resource.locked}]),disabled:n.resourceCount===1,title:n.resource.locked?E.$t("image.unlockWeight"):E.$t("image.lockWeight"),onClick:_[9]||(_[9]=I=>E.$emit("toggleLock",n.resource.id))},[n.resource.locked?(Q(),te("svg",JG,[..._[20]||(_[20]=[w("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"},null,-1),w("path",{d:"M8 10V7a4 4 0 0 1 8 0v3"},null,-1)])])):(Q(),te("svg",ZG,[..._[21]||(_[21]=[w("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"},null,-1),w("path",{d:"M16 10V7a4 4 0 0 0-7.5-2"},null,-1)])]))],10,KG)]),i_(E.$slots,"default",{},void 0),d.value?(Q(),te("div",QG,[_[23]||(_[23]=w("div",{class:"pivot-toggle-icon"},"◎",-1)),w("div",eW,[w("div",tW,R(E.$t("image.pivot")),1),w("div",{class:"pivot-toggle-sub",title:v.value},R(v.value),9,iW)]),w("label",{class:"pivot-switch",title:f.value?E.$t("image.collapsePivot"):E.$t("image.expandPivot")},[me(w("input",{"onUpdate:modelValue":_[10]||(_[10]=I=>f.value=I),type:"checkbox",onChange:b},null,544),[[Ct,f.value]]),_[22]||(_[22]=w("span",{class:"pivot-switch-ui"},null,-1))],8,nW)])):Ce("",!0),d.value&&f.value?(Q(),It(Mx,{key:3,"preview-url":o.value,"anchor-x":n.resource.anchorX??.5,"anchor-y":n.resource.anchorY??.5,"onUpdate:anchorX":_[11]||(_[11]=I=>n.resource.anchorX=I),"onUpdate:anchorY":_[12]||(_[12]=I=>n.resource.anchorY=I),onFullscreen:y},null,8,["preview-url","anchor-x","anchor-y"])):Ce("",!0)]),(Q(),It(u1,{to:"body"},[p.value?(Q(),te("div",{key:0,class:"pivot-modal-backdrop",onPointerdown:_[18]||(_[18]=tt(I=>x(!1),["self"]))},[w("div",{class:"pivot-modal",role:"dialog","aria-modal":"true","aria-label":E.$t("image.pivotModal")},[w("div",rW,[_[24]||(_[24]=w("div",{class:"pivot-modal-icon"},"◎",-1)),w("div",oW,[w("div",aW,[bt(R(E.$t("image.pivotModal"))+" ",1),w("span",lW,R(n.resource.textureName||n.defaultFile),1)]),w("div",cW,R(E.$t("image.pivotModalDesc")),1)]),w("button",{type:"button",class:"pivot-modal-close",title:E.$t("common.close"),onClick:_[13]||(_[13]=I=>x(!1))},"✕",8,dW)]),w("div",uW,R(E.$t("image.pivotZoomHint")),1),Ae(Mx,{large:"","preview-url":o.value,"anchor-x":m.value,"anchor-y":g.value,"onUpdate:anchorX":_[14]||(_[14]=I=>m.value=I),"onUpdate:anchorY":_[15]||(_[15]=I=>g.value=I)},null,8,["preview-url","anchor-x","anchor-y"]),w("div",hW,[w("button",{type:"button",class:"pivot-modal-cancel",onClick:_[16]||(_[16]=I=>x(!1))},R(E.$t("common.cancel")),1),w("button",{type:"button",class:"pivot-modal-confirm",onClick:_[17]||(_[17]=I=>x(!0))},R(E.$t("image.confirmPivot")),1)])],8,sW)],32)):Ce("",!0)]))],64))}}),RT=li(fW,[["__scopeId","data-v-89f1e08d"]]),pW={class:"group"},mW={class:"caret"},gW=["title"],vW={class:"group-body"},bW={class:"look-title"},yW={class:"seg"},xW={class:"row"},wW={value:"跟随导出"},SW={value:"线性"},CW={value:"贝塞尔"},AW={class:"curve-wrap"},TW={class:"curve-labels"},EW={class:"look-title"},_W={class:"seg"},MW={class:"row"},PW=["value"],IW={value:0},kW=["value"],RW={class:"render-layer-current"},FW=["title"],LW={key:0,class:"slot-picker"},DW=["placeholder","aria-label"],OW={class:"slot-list"},NW=["onClick"],$W={class:"slot-order"},BW={class:"slot-name"},UW={class:"slot-attachment"},VW={key:0,class:"modifier-hint"},XW={class:"seg"},YW={class:"switch-row render-layer-switch"},zW=["disabled"],jW={key:0,class:"modifier-hint"},HW={key:2,class:"modifier-hint render-layer-warning"},GW={class:"modifier-hint"},WW={class:"look-title image-title"},qW=["title"],KW={class:"row resource-color-row"},JW=["onUpdate:modelValue"],ZW={value:"fixed"},QW={value:"random"},eq={value:"lifetime"},tq=["onUpdate:modelValue"],iq={value:"normal"},nq={value:"add"},sq={value:"multiply"},rq={value:"screen"},oq={key:0,class:"row resource-color-picker"},aq=["onUpdate:modelValue"],lq=["value","aria-label","onChange","onKeydown"],cq={key:0,class:"random-color-hint"},dq={class:"resource-alpha-head"},uq={class:"alpha-modes"},hq=["onClick"],fq=["onClick"],pq=["onClick"],mq={class:"row"},gq=["onUpdate:modelValue"],vq={value:"跟随导出"},bq={value:"线性"},yq={value:"贝塞尔"},xq={class:"resource-alpha-curve"},wq=qt({__name:"ParticleAppearanceSection",setup(n){const{resolvedCurveEditorMode:e,sys:t,textureFileInput:i,sequenceFileInput:s,addImageResource:r,openTexturePicker:o,openSequencePicker:a,onTextureFile:c,onSequenceFiles:l,resetTexture:d,setResourceFixedColor:u,commitResourceFixedColor:h,removeImageResource:f,setResourceWeight:p,toggleResourceLock:m,collapsed:g,toggle:v,resetModule:y,select:b,renderLayerSlotPickerOpen:x,renderLayerSlotSearch:C,renderLayerReadySpines:T,renderLayerSpineReady:S,renderLayerFilteredSlots:E,renderLayerSlotLabel:_,renderLayerResolvedLabel:I,renderLayerWarning:M,setRenderLayerSlotMode:k,selectRenderLayerSpine:B,pickRenderLayerSlot:D,clearRenderLayerSlot:G,ALPHA_CURVE:V,RESOURCE_ALPHA_CURVE:Y}=oo();return(L,N)=>(Q(),te("div",pW,[w("div",{class:"group-head",onClick:N[1]||(N[1]=F=>P(v)("look"))},[w("span",mW,R(P(g).look?"▸":"▾"),1),w("span",null,R(L.$t("appearance.title")),1),w("button",{class:"group-reset",title:L.$t("appearance.reset"),onClick:N[0]||(N[0]=tt(F=>P(y)("look"),["stop"]))},R(L.$t("common.reset")),9,gW)]),me(w("div",vW,[w("div",bW,R(L.$t("appearance.opacity")),1),w("div",yW,[w("button",{class:Ie(["seg-btn",{active:P(t).config.alphaMode==="curve"}]),onClick:N[2]||(N[2]=F=>P(t).config.alphaMode="curve")},R(L.$t("common.curve")),3),w("button",{class:Ie(["seg-btn",{active:P(t).config.alphaMode==="fixed"}]),onClick:N[3]||(N[3]=F=>P(t).config.alphaMode="fixed")},R(L.$t("common.fixed")),3)]),P(t).config.alphaMode==="fixed"?(Q(),It(Ue,{key:0,label:L.$t("appearance.opacity"),min:0,max:1,step:.01,modelValue:P(t).config.alpha,"onUpdate:modelValue":N[4]||(N[4]=F=>P(t).config.alpha=F)},null,8,["label","modelValue"])):(Q(),te(_e,{key:1},[w("label",xW,[w("span",null,R(L.$t("appearance.curveMode")),1),me(w("select",{"onUpdate:modelValue":N[5]||(N[5]=F=>P(t).config.curveMode=F),class:"inp"},[w("option",wW,R(L.$t("common.followExport")),1),w("option",SW,R(L.$t("common.linear")),1),w("option",CW,R(L.$t("common.bezier")),1)],512),[[St,P(t).config.curveMode]])]),w("div",AW,[Ae(ys,{modelValue:P(t).config.alphaCurve,"onUpdate:modelValue":N[6]||(N[6]=F=>P(t).config.alphaCurve=F),"default-value":P(V),mode:P(e)(P(t).config.curveMode)},null,8,["modelValue","default-value","mode"]),w("div",TW,[w("span",null,R(L.$t("appearance.transparent")),1),w("span",null,R(L.$t("attributes.lifeTo")),1),w("span",null,R(L.$t("appearance.opaque")),1)])])],64)),w("div",EW,R(L.$t("appearance.renderLayer")),1),w("div",_W,[w("button",{class:Ie(["seg-btn",{active:P(t).config.renderLayerMode==="top"}]),onClick:N[7]||(N[7]=F=>P(t).config.renderLayerMode="top")},R(L.$t("appearance.top")),3),w("button",{class:Ie(["seg-btn",{active:P(t).config.renderLayerMode==="slot"}]),onClick:N[8]||(N[8]=(...F)=>P(k)&&P(k)(...F))},R(L.$t("appearance.spineSlot")),3)]),P(t).config.renderLayerMode==="slot"?(Q(),te(_e,{key:2},[w("label",MW,[N[19]||(N[19]=w("span",null,"Spine",-1)),w("select",{class:"inp",value:P(t).config.renderLayerSpineId,onChange:N[9]||(N[9]=(...F)=>P(B)&&P(B)(...F))},[w("option",IW,R(P(T).length?L.$t("appearance.selectSpine"):L.$t("appearance.noSpine")),1),(Q(!0),te(_e,null,Pt(P(T),F=>(Q(),te("option",{key:F.id,value:F.id},R(F.name),9,kW))),128))],40,PW)]),P(S)?(Q(),te(_e,{key:0},[w("div",RW,[w("span",{class:"render-layer-text",title:P(_)},R(P(_)||L.$t("appearance.noSlot")),9,FW),w("button",{class:"mini-btn",onClick:N[10]||(N[10]=F=>x.value=!P(x))},R(P(_)?L.$t("appearance.reselect"):L.$t("appearance.selectSlot")),1),P(t).config.renderLayerSlotName?(Q(),te("button",{key:0,class:"mini-btn ghost",onClick:N[11]||(N[11]=(...F)=>P(G)&&P(G)(...F))},R(L.$t("common.clear")),1)):Ce("",!0)]),P(x)?(Q(),te("div",LW,[me(w("input",{"onUpdate:modelValue":N[12]||(N[12]=F=>Qt(C)?C.value=F:null),class:"inp",type:"search",placeholder:L.$t("appearance.searchSlots"),"aria-label":L.$t("appearance.searchSlotsAria")},null,8,DW),[[Je,P(C),void 0,{trim:!0}]]),w("div",OW,[(Q(!0),te(_e,null,Pt(P(E),F=>(Q(),te("button",{key:F.name,class:Ie(["slot-item",{on:P(t).config.renderLayerSlotName===F.name}]),onClick:$=>P(D)(F)},[w("span",$W,R(F.order+1),1),w("span",BW,R(F.name),1),w("span",UW,R(F.attachment||L.$t("appearance.emptySlot")),1)],10,NW))),128)),P(E).length?Ce("",!0):(Q(),te("div",VW,R(L.$t("appearance.noMatchingSlots")),1))])])):Ce("",!0),P(t).config.renderLayerSlotName?(Q(),te(_e,{key:1},[w("div",XW,[w("button",{class:Ie(["seg-btn",{active:P(t).config.renderLayerSlotPosition==="above"}]),onClick:N[13]||(N[13]=F=>P(t).config.renderLayerSlotPosition="above")},R(L.$t("appearance.above")),3),w("button",{class:Ie(["seg-btn",{active:P(t).config.renderLayerSlotPosition==="below"}]),onClick:N[14]||(N[14]=F=>P(t).config.renderLayerSlotPosition="below")},R(L.$t("appearance.below")),3)]),w("label",YW,[me(w("input",{"onUpdate:modelValue":N[15]||(N[15]=F=>P(t).config.renderLayerFollowAttachment=F),type:"checkbox",disabled:P(t).config.renderLayerSlotPosition==="below"},null,8,zW),[[Ct,P(t).config.renderLayerFollowAttachment]]),N[20]||(N[20]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(L.$t("appearance.followAttachment")),1)]),P(I)?(Q(),te("div",jW,R(P(I)),1)):Ce("",!0)],64)):Ce("",!0),P(M)?(Q(),te("div",HW,R(P(M)),1)):Ce("",!0),w("div",GW,R(L.$t("appearance.previewOnly")),1)],64)):Ce("",!0)],64)):Ce("",!0),w("div",WW,[w("span",null,R(L.$t("appearance.imageResources")),1),w("button",{class:"image-add",title:L.$t("appearance.addImage"),onClick:N[16]||(N[16]=(...F)=>P(r)&&P(r)(...F))},"+",8,qW)]),(Q(!0),te(_e,null,Pt(P(t).config.imageResources,F=>(Q(),It(RT,{key:`${P(t).id}:${F.id}`,resource:F,"resource-count":P(t).config.imageResources.length,"pivot-key":`${P(t).id}:${F.id}`,"supports-sequence":"","default-file":"star.png",onPick:P(o),onPickSequence:P(a),onReset:P(d),onRemove:P(f),onUpdateWeight:P(p),onToggleLock:P(m)},{default:ju(()=>[Ae(Ue,{label:L.$t("appearance.scale"),min:.1,max:3,step:.05,modelValue:F.scale,"onUpdate:modelValue":$=>F.scale=$},null,8,["label","modelValue","onUpdate:modelValue"]),N[21]||(N[21]=w("div",{class:"resource-divider"},null,-1)),w("label",KW,[w("span",null,R(L.$t("appearance.color")),1),me(w("select",{"onUpdate:modelValue":$=>F.colorMode=$,class:"inp"},[w("option",ZW,R(L.$t("appearance.fixedColor")),1),w("option",QW,R(L.$t("appearance.randomColor")),1),w("option",eq,R(L.$t("appearance.lifetime")),1)],8,JW),[[St,F.colorMode]]),me(w("select",{"onUpdate:modelValue":$=>F.blend=$,class:"inp blend-select"},[w("option",iq,R(L.$t("appearance.normal")),1),w("option",nq,R(L.$t("appearance.add")),1),w("option",sq,R(L.$t("appearance.multiply")),1),w("option",rq,R(L.$t("appearance.screen")),1)],8,tq),[[St,F.blend]])]),F.colorMode==="fixed"?(Q(),te("label",oq,[w("span",null,R(L.$t("appearance.fixedColor")),1),me(w("input",{type:"color","onUpdate:modelValue":$=>F.colorStart=$,class:"colr"},null,8,aq),[[Je,F.colorStart]]),w("input",{type:"text",class:"hex-input",value:F.colorStart,spellcheck:"false","aria-label":L.$t("appearance.fixedColorValue"),onChange:$=>P(u)(F,$),onKeydown:Gr($=>P(h)(F,$),["enter"])},null,40,lq)])):(Q(),te(_e,{key:1},[Ae(kT,{modelValue:F.colorGradient,"onUpdate:modelValue":$=>F.colorGradient=$},null,8,["modelValue","onUpdate:modelValue"]),F.colorMode==="random"?(Q(),te("div",cq,R(L.$t("appearance.randomColorHint")),1)):Ce("",!0)],64)),w("div",dq,[w("span",null,R(L.$t("appearance.independentAlpha")),1),w("div",uq,[w("button",{class:Ie({on:F.independentAlpha==="off"}),onClick:$=>F.independentAlpha="off"},R(L.$t("appearance.off")),11,hq),w("button",{class:Ie({on:F.independentAlpha==="fixed"}),onClick:$=>F.independentAlpha="fixed"},R(L.$t("common.fixed")),11,fq),w("button",{class:Ie({on:F.independentAlpha==="curve"}),onClick:$=>F.independentAlpha="curve"},R(L.$t("common.curve")),11,pq)])]),F.independentAlpha==="fixed"?(Q(),It(Ue,{key:2,label:L.$t("appearance.opacity"),min:0,max:1,step:.01,modelValue:F.alpha,"onUpdate:modelValue":$=>F.alpha=$},null,8,["label","modelValue","onUpdate:modelValue"])):F.independentAlpha==="curve"?(Q(),te(_e,{key:3},[w("label",mq,[w("span",null,R(L.$t("appearance.curveMode")),1),me(w("select",{"onUpdate:modelValue":$=>F.alphaCurveMode=$,class:"inp"},[w("option",vq,R(L.$t("common.followExport")),1),w("option",bq,R(L.$t("common.linear")),1),w("option",yq,R(L.$t("common.bezier")),1)],8,gq),[[St,F.alphaCurveMode]])]),w("div",xq,[Ae(ys,{modelValue:F.alphaCurve,"onUpdate:modelValue":$=>F.alphaCurve=$,"default-value":P(Y),mode:P(e)(F.alphaCurveMode)},null,8,["modelValue","onUpdate:modelValue","default-value","mode"])])],64)):Ce("",!0)]),_:2},1032,["resource","resource-count","pivot-key","onPick","onPickSequence","onReset","onRemove","onUpdateWeight","onToggleLock"]))),128)),w("input",{ref_key:"textureFileInput",ref:i,class:"file-input",type:"file",accept:"image/png,image/jpeg,image/webp,image/gif",onChange:N[17]||(N[17]=(...F)=>P(c)&&P(c)(...F))},null,544),w("input",{ref_key:"sequenceFileInput",ref:s,class:"file-input",type:"file",multiple:"",accept:"image/png,image/jpeg,image/webp,image/gif",onChange:N[18]||(N[18]=(...F)=>P(l)&&P(l)(...F))},null,544)],512),[[Fi,!P(g).look]])]))}}),Sq=li(wq,[["__scopeId","data-v-86902cc8"]]),Cq={class:"group"},Aq={class:"caret"},Tq=["title"],Eq={class:"group-body"},_q={class:"modifier-item damping-item"},Mq={class:"modifier-item"},Pq={class:"switch-row modifier-switch"},Iq={key:0,class:"modifier-params"},kq={class:"modifier-hint"},Rq={class:"modifier-item"},Fq={class:"switch-row modifier-switch"},Lq={key:0,class:"modifier-params gravity-params"},Dq={class:"modifier-mode-row"},Oq={class:"gravity-curve-title"},Nq={class:"gravity-curve-axis"},$q={class:"modifier-hint"},Bq={class:"modifier-item"},Uq={class:"switch-row modifier-switch"},Vq={key:0,class:"modifier-params gravity-params"},Xq={class:"modifier-mode-row"},Yq={class:"gravity-curve-title"},zq={class:"gravity-curve-axis"},jq={class:"modifier-hint"},Hq={class:"modifier-item"},Gq={class:"switch-row modifier-switch"},Wq={key:0,class:"modifier-params"},qq={class:"row"},Kq={value:"constant"},Jq={value:"linear"},Zq={value:"inverse"},Qq={class:"modifier-hint"},e7={class:"switch-row"},t7={class:"modifier-item"},i7={class:"switch-row modifier-switch"},n7={key:0,class:"modifier-params"},s7={class:"row"},r7={value:"constant"},o7={value:"linear"},a7={value:"inverse"},l7={class:"modifier-hint"},c7={class:"switch-row"},d7={class:"modifier-item"},u7={class:"switch-row modifier-switch"},h7={key:0,class:"modifier-params"},f7={class:"row"},p7={value:"global"},m7={value:"particle"},g7={class:"row"},v7={value:"linear"},b7={value:"curve"},y7={class:"modifier-hint"},x7={class:"switch-row"},w7={class:"modifier-item"},S7={class:"switch-row modifier-switch"},C7={key:0,class:"modifier-params trail-params"},A7={class:"trail-section-head"},T7={class:"trail-section-title"},E7=["title"],_7={class:"row"},M7=["onUpdate:modelValue"],P7={value:"fixed"},I7={value:"random"},k7={class:"row"},R7=["onUpdate:modelValue"],F7={value:"fixed"},L7={value:"random"},D7={class:"row"},O7=["onUpdate:modelValue"],N7={value:"particle"},$7={value:"fixed"},B7={class:"switch-row trail-sub-switch"},U7=["onUpdate:modelValue"],V7={class:"switch-row trail-sub-switch"},X7=["onUpdate:modelValue"],Y7={class:"trail-mode-head"},z7={class:"alpha-modes"},j7=["onClick"],H7=["onClick"],G7=["onClick"],W7={class:"row"},q7=["onUpdate:modelValue"],K7={value:"normal"},J7={value:"add"},Z7={value:"multiply"},Q7={value:"screen"},e9={key:6,class:"row trail-fixed-color"},t9=["onUpdate:modelValue"],i9=["value","onChange","onKeydown"],n9={class:"trail-mode-head"},s9={class:"alpha-modes"},r9=["onClick"],o9=["onClick"],a9=["onClick"],l9={class:"trail-grid-row"},c9={class:"modifier-hint"},d9={class:"modifier-item"},u9={class:"switch-row modifier-switch"},h9=["disabled"],f9={key:0,class:"modifier-params emitter-follow-params"},p9={class:"field-block"},m9=["value"],g9={value:"none"},v9={value:"path"},b9={key:0,value:"bone"},y9={class:"field-block"},x9={value:0},w9=["value"],S9={class:"field-block"},C9={value:"fixed"},A9={value:"direction"},T9={class:"gravity-curve-title"},E9={class:"field-grid follow-grid"},_9={class:"compact-field"},M9={class:"compact-field"},P9={value:"local"},I9={value:"world"},k9={class:"field-block"},R9={value:"forward"},F9={value:"reverse"},L9={class:"modifier-hint"},D9={key:0,class:"bone-follow-target"},O9={key:1,class:"bone-follow-missing"},N9={class:"field-block"},$9={value:"local"},B9={value:"world"},U9={class:"field-grid follow-grid"},V9={class:"compact-field"},X9={class:"compact-field"},Y9={class:"bone-follow-transform-grid"},z9={class:"compact-field"},j9={class:"compact-field"},H9={class:"compact-field"},G9={class:"modifier-hint"},W9={class:"modifier-item"},q9={class:"switch-row modifier-switch"},K9={key:0,class:"modifier-params collision-filter-params"},J9={class:"collision-filter-title"},Z9={class:"collision-filter-tags"},Q9=["title"],eK=["aria-label","onClick"],tK=["disabled","title"],iK={key:0,class:"collision-filter-empty"},nK={key:1,class:"collision-filter-picker"},sK=["onClick"],rK={class:"modifier-hint"},oK={class:"modifier-item events-item"},aK={class:"switch-row modifier-switch"},lK={key:0,class:"event-rules"},cK={class:"event-selects"},dK=["onUpdate:modelValue","title"],uK={value:"birth"},hK={value:"death"},fK={value:"collision"},pK=["onUpdate:modelValue","title"],mK={value:0},gK=["value"],vK=["title","onClick"],bK={class:"event-probability"},yK=["onUpdate:modelValue"],xK={key:0,class:"event-probability event-collision-limit"},wK=["value","onInput"],SK={class:"event-probability event-inherit"},CK=["onClick"],AK={class:"inherit-summary"},TK={key:1,class:"event-probability event-color-mode"},EK=["onUpdate:modelValue"],_K={value:"add"},MK={value:"replace"},PK={class:"inherit-check"},IK={class:"inherit-check"},kK=["onClick"],RK={class:"inherit-check"},FK=qt({__name:"ParticleModifiersSection",setup(n){const{store:e,sys:t,trailTextureFileInput:i,addTrailResource:s,openTrailTexturePicker:r,onTrailRigChange:o,onTrailResourceBoneCountChange:a,onTrailResourceRotationChange:c,onTrailTextureFile:l,resetTrailTexture:d,removeTrailResource:u,setTrailResourceWeight:h,toggleTrailResourceLock:f,setTrailColor:p,commitTrailColor:m,selectedSpineBone:g,boundSpineBone:v,collisionPickerOpen:y,selectedCollisionBodies:b,availableCollisionBodies:x,addCollisionBody:C,removeCollisionBody:T,collapsed:S,toggle:E,onEmitterFollowModeChange:_,bindSelectedBone:I,resetModule:M,select:k,LINEAR_CURVE:B,FLAT_CURVE:D,TRAIL_ALPHA_CURVE:G,TRAIL_SHAPE_CURVE:V}=oo(),{t:Y}=fn(),L=Fe(()=>{var O;const j=(O=t.value)==null?void 0:O.id;if(!j)return[];const H=kS(e.systems,j);return e.systems.filter(U=>U.id!==j&&!H.has(U.id))}),N=Fe(()=>[{key:"color",label:Y("modifiers.inheritColor")},{key:"scale",label:Y("modifiers.inheritScale")},{key:"rotation",label:Y("modifiers.inheritRotation")},{key:"life",label:Y("modifiers.inheritLife")}]),F=$e(null),$=Fe(()=>{var O;const j=F.value,H=(O=t.value)==null?void 0:O.config.events;return!j||!Array.isArray(H)?null:H.find(U=>U.id===j.ruleId)||null});function X(j){return Array.isArray(j.inherit)||(j.inherit=[]),j.inherit}function z(j){const H=X(j);return H.length?H.length===N.value.length?Y("modifiers.inheritAll"):N.value.filter(O=>H.includes(O.key)).map(O=>O.label).join("、"):Y("modifiers.inheritNone")}function K(j,H){return X(j).includes(H)}function J(j,H){const O=X(j),U=O.indexOf(H);U>=0?O.splice(U,1):O.push(H)}function oe(j){X(j).splice(0)}function le(j){X(j).splice(0,X(j).length,...N.value.map(H=>H.key))}function ve(j,H){var xe;if(((xe=F.value)==null?void 0:xe.ruleId)===j.id){F.value=null;return}const O=H.currentTarget;if(!O)return;const U=O.getBoundingClientRect(),W=Math.max(168,U.width),ee=212,ne=Math.min(Math.max(8,U.left),Math.max(8,window.innerWidth-W-8));let ue=U.bottom+4;ue+ee>window.innerHeight-8&&(ue=Math.max(8,U.top-ee-4)),F.value={ruleId:j.id,left:ne,top:ue,width:W}}function Se(){F.value=null}function fe(){Se()}function be(j){j.key==="Escape"&&Se()}Sn(()=>{document.addEventListener("pointerdown",Se),window.addEventListener("scroll",fe,!0),window.addEventListener("resize",fe),window.addEventListener("keydown",be)}),eo(()=>{document.removeEventListener("pointerdown",Se),window.removeEventListener("scroll",fe,!0),window.removeEventListener("resize",fe),window.removeEventListener("keydown",be)});function q(){var O;const j=(O=t.value)==null?void 0:O.config;if(!j)return;Array.isArray(j.events)||(j.events=[]);const H=Math.max(0,...j.events.map(U=>U.id))+1;j.events.push({id:H,event:"birth",targetSystemId:0,probability:1,collisionLimit:1,inherit:[],colorInheritMode:"add"})}function Z(j){var H;(H=t.value)==null||H.config.events.splice(j,1)}function se(j,H){const O=H.target,U=Math.round(Number(O.value));j.collisionLimit=Math.min(4,Math.max(1,Number.isFinite(U)?U:1)),O.value=String(j.collisionLimit)}return(j,H)=>(Q(),te(_e,null,[w("div",Cq,[w("div",{class:"group-head",onClick:H[1]||(H[1]=O=>P(E)("mods"))},[w("span",Aq,R(P(S).mods?"▸":"▾"),1),w("span",null,R(j.$t("modifiers.title")),1),w("button",{class:"group-reset",title:j.$t("modifiers.reset"),onClick:H[0]||(H[0]=tt(O=>P(M)("mods"),["stop"]))},R(j.$t("common.reset")),9,Tq)]),me(w("div",Eq,[w("div",_q,[Ae(Ue,{label:j.$t("modifiers.damping"),min:0,max:2,step:.05,modelValue:P(t).config.damping,"onUpdate:modelValue":H[2]||(H[2]=O=>P(t).config.damping=O)},null,8,["label","modelValue"])]),w("div",Mq,[w("label",Pq,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[3]||(H[3]=O=>P(t).config.noise=O)},null,512),[[Ct,P(t).config.noise]]),H[74]||(H[74]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableNoise")),1)]),P(t).config.noise?(Q(),te("div",Iq,[Ae(Ue,{label:j.$t("modifiers.strength"),min:0,max:100,step:1,modelValue:P(t).config.noiseAmt,"onUpdate:modelValue":H[4]||(H[4]=O=>P(t).config.noiseAmt=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.noiseRange"),min:0,max:500,step:1,modelValue:P(t).config.noiseRange,"onUpdate:modelValue":H[5]||(H[5]=O=>P(t).config.noiseRange=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.noiseSpeed"),min:0,max:10,step:.1,modelValue:P(t).config.noiseSpeed,"onUpdate:modelValue":H[6]||(H[6]=O=>P(t).config.noiseSpeed=O)},null,8,["label","modelValue"]),w("div",kq,R(j.$t("modifiers.noiseHint")),1)])):Ce("",!0)]),w("div",Rq,[w("label",Fq,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[7]||(H[7]=O=>P(t).config.useGravity=O)},null,512),[[Ct,P(t).config.useGravity]]),H[75]||(H[75]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableGravity")),1)]),P(t).config.useGravity?(Q(),te("div",Lq,[w("div",Dq,[w("button",{class:Ie(["axis-mode",{on:P(t).config.gravityMode==="fixed"}]),onClick:H[8]||(H[8]=O=>P(t).config.gravityMode="fixed")},R(j.$t("common.fixed")),3),w("button",{class:Ie(["axis-mode",{on:P(t).config.gravityMode==="random"}]),onClick:H[9]||(H[9]=O=>P(t).config.gravityMode="random")},R(j.$t("common.random")),3)]),P(t).config.gravityMode==="fixed"?(Q(),It(Ue,{key:0,label:j.$t("modifiers.gravityStrength"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.gravityMin,"onUpdate:modelValue":H[10]||(H[10]=O=>P(t).config.gravityMin=O)},null,8,["label","modelValue"])):(Q(),te(_e,{key:1},[Ae(Ue,{label:j.$t("modifiers.strengthMin"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.gravityMin,"onUpdate:modelValue":H[11]||(H[11]=O=>P(t).config.gravityMin=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.strengthMax"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.gravityMax,"onUpdate:modelValue":H[12]||(H[12]=O=>P(t).config.gravityMax=O)},null,8,["label","modelValue"])],64)),Ae(Ue,{label:j.$t("modifiers.direction"),min:-360,max:360,step:1,modelValue:P(t).config.gravityDirection,"onUpdate:modelValue":H[13]||(H[13]=O=>P(t).config.gravityDirection=O)},null,8,["label","modelValue"]),w("div",Oq,[w("span",null,R(j.$t("modifiers.gravityOverLife")),1),w("span",null,R(j.$t("modifiers.axisStrength")),1)]),Ae(ys,{modelValue:P(t).config.gravityCurve,"onUpdate:modelValue":H[14]||(H[14]=O=>P(t).config.gravityCurve=O),"default-value":P(D)},null,8,["modelValue","default-value"]),w("div",Nq,[H[76]||(H[76]=w("span",null,"0",-1)),w("span",null,R(j.$t("attributes.lifeTo")),1),H[77]||(H[77]=w("span",null,"1",-1))]),w("div",$q,R(j.$t("modifiers.directionHint")),1)])):Ce("",!0)]),w("div",Bq,[w("label",Uq,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[15]||(H[15]=O=>P(t).config.wind=O)},null,512),[[Ct,P(t).config.wind]]),H[78]||(H[78]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableWind")),1)]),P(t).config.wind?(Q(),te("div",Vq,[w("div",Xq,[w("button",{class:Ie(["axis-mode",{on:P(t).config.windMode==="fixed"}]),onClick:H[16]||(H[16]=O=>P(t).config.windMode="fixed")},R(j.$t("common.fixed")),3),w("button",{class:Ie(["axis-mode",{on:P(t).config.windMode==="random"}]),onClick:H[17]||(H[17]=O=>P(t).config.windMode="random")},R(j.$t("common.random")),3)]),P(t).config.windMode==="fixed"?(Q(),It(Ue,{key:0,label:j.$t("modifiers.windStrength"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.windMin,"onUpdate:modelValue":H[18]||(H[18]=O=>P(t).config.windMin=O)},null,8,["label","modelValue"])):(Q(),te(_e,{key:1},[Ae(Ue,{label:j.$t("modifiers.strengthMin"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.windMin,"onUpdate:modelValue":H[19]||(H[19]=O=>P(t).config.windMin=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.strengthMax"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.windMax,"onUpdate:modelValue":H[20]||(H[20]=O=>P(t).config.windMax=O)},null,8,["label","modelValue"])],64)),Ae(Ue,{label:j.$t("modifiers.direction"),min:-360,max:360,step:1,modelValue:P(t).config.windDirection,"onUpdate:modelValue":H[21]||(H[21]=O=>P(t).config.windDirection=O)},null,8,["label","modelValue"]),w("div",Yq,[w("span",null,R(j.$t("modifiers.windOverLife")),1),w("span",null,R(j.$t("modifiers.axisStrength")),1)]),Ae(ys,{modelValue:P(t).config.windCurve,"onUpdate:modelValue":H[22]||(H[22]=O=>P(t).config.windCurve=O),"default-value":P(D)},null,8,["modelValue","default-value"]),w("div",zq,[H[79]||(H[79]=w("span",null,"0",-1)),w("span",null,R(j.$t("attributes.lifeTo")),1),H[80]||(H[80]=w("span",null,"1",-1))]),w("div",jq,R(j.$t("modifiers.directionHint")),1)])):Ce("",!0)]),w("div",Hq,[w("label",Gq,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[23]||(H[23]=O=>P(t).config.forceField=O)},null,512),[[Ct,P(t).config.forceField]]),H[81]||(H[81]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableForceField")),1)]),P(t).config.forceField?(Q(),te("div",Wq,[Ae(Ue,{label:j.$t("modifiers.centerX"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.forceCenterX,"onUpdate:modelValue":H[24]||(H[24]=O=>P(t).config.forceCenterX=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.centerY"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.forceCenterY,"onUpdate:modelValue":H[25]||(H[25]=O=>P(t).config.forceCenterY=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.forceStrength"),min:-300,max:300,step:1,modelValue:P(t).config.forceStrength,"onUpdate:modelValue":H[26]||(H[26]=O=>P(t).config.forceStrength=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.forceRadius"),min:1,max:2e3,step:1,modelValue:P(t).config.forceRadius,"onUpdate:modelValue":H[27]||(H[27]=O=>P(t).config.forceRadius=O)},null,8,["label","modelValue"]),w("label",qq,[w("span",null,R(j.$t("modifiers.falloffMode")),1),me(w("select",{"onUpdate:modelValue":H[28]||(H[28]=O=>P(t).config.forceFalloff=O),class:"inp"},[w("option",Kq,R(j.$t("modifiers.constant")),1),w("option",Jq,R(j.$t("modifiers.linearFalloff")),1),w("option",Zq,R(j.$t("modifiers.inverseFalloff")),1)],512),[[St,P(t).config.forceFalloff]])]),w("div",Qq,R(j.$t("modifiers.forceHint")),1),w("label",e7,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[29]||(H[29]=O=>P(t).config.showForceFieldShape=O)},null,512),[[Ct,P(t).config.showForceFieldShape]]),H[82]||(H[82]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.showShape")),1)])])):Ce("",!0)]),w("div",t7,[w("label",i7,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[30]||(H[30]=O=>P(t).config.vortex=O)},null,512),[[Ct,P(t).config.vortex]]),H[83]||(H[83]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableVortex")),1)]),P(t).config.vortex?(Q(),te("div",n7,[Ae(Ue,{label:j.$t("modifiers.centerX"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.vortexCenterX,"onUpdate:modelValue":H[31]||(H[31]=O=>P(t).config.vortexCenterX=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.centerY"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.vortexCenterY,"onUpdate:modelValue":H[32]||(H[32]=O=>P(t).config.vortexCenterY=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.forceStrength"),min:-300,max:300,step:1,modelValue:P(t).config.vortexStrength,"onUpdate:modelValue":H[33]||(H[33]=O=>P(t).config.vortexStrength=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.forceRadius"),min:1,max:2e3,step:1,modelValue:P(t).config.vortexRadius,"onUpdate:modelValue":H[34]||(H[34]=O=>P(t).config.vortexRadius=O)},null,8,["label","modelValue"]),w("label",s7,[w("span",null,R(j.$t("modifiers.falloffMode")),1),me(w("select",{"onUpdate:modelValue":H[35]||(H[35]=O=>P(t).config.vortexFalloff=O),class:"inp"},[w("option",r7,R(j.$t("modifiers.constant")),1),w("option",o7,R(j.$t("modifiers.linearFalloff")),1),w("option",a7,R(j.$t("modifiers.inverseFalloff")),1)],512),[[St,P(t).config.vortexFalloff]])]),w("div",l7,R(j.$t("modifiers.vortexHint")),1),w("label",c7,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[36]||(H[36]=O=>P(t).config.showVortexShape=O)},null,512),[[Ct,P(t).config.showVortexShape]]),H[84]||(H[84]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.showShape")),1)])])):Ce("",!0)]),w("div",d7,[w("label",u7,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[37]||(H[37]=O=>P(t).config.attraction=O)},null,512),[[Ct,P(t).config.attraction]]),H[85]||(H[85]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableAttraction")),1)]),P(t).config.attraction?(Q(),te("div",h7,[Ae(Ue,{label:j.$t("modifiers.attractionX"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.attractionCenterX,"onUpdate:modelValue":H[38]||(H[38]=O=>P(t).config.attractionCenterX=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.attractionY"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.attractionCenterY,"onUpdate:modelValue":H[39]||(H[39]=O=>P(t).config.attractionCenterY=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.attractionRadius"),min:0,max:2e3,step:1,modelValue:P(t).config.attractionRadius,"onUpdate:modelValue":H[40]||(H[40]=O=>P(t).config.attractionRadius=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.attractionDuration"),min:.05,max:30,step:.05,modelValue:P(t).config.attractionDuration,"onUpdate:modelValue":H[41]||(H[41]=O=>P(t).config.attractionDuration=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.delay"),min:0,max:30,step:.05,modelValue:P(t).config.attractionDelay,"onUpdate:modelValue":H[42]||(H[42]=O=>P(t).config.attractionDelay=O)},null,8,["label","modelValue"]),w("label",f7,[w("span",null,R(j.$t("modifiers.delayMode")),1),me(w("select",{"onUpdate:modelValue":H[43]||(H[43]=O=>P(t).config.attractionDelayMode=O),class:"inp"},[w("option",p7,R(j.$t("modifiers.globalTime")),1),w("option",m7,R(j.$t("modifiers.particleLife")),1)],512),[[St,P(t).config.attractionDelayMode]])]),w("label",g7,[w("span",null,R(j.$t("modifiers.attractionPath")),1),me(w("select",{"onUpdate:modelValue":H[44]||(H[44]=O=>P(t).config.attractionPath=O),class:"inp"},[w("option",v7,R(j.$t("modifiers.straight")),1),w("option",b7,R(j.$t("common.curve")),1)],512),[[St,P(t).config.attractionPath]])]),w("div",y7,R(j.$t("modifiers.attractionHint")),1),w("label",x7,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[45]||(H[45]=O=>P(t).config.showAttractionShape=O)},null,512),[[Ct,P(t).config.showAttractionShape]]),H[86]||(H[86]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.showShape")),1)])])):Ce("",!0)]),w("div",w7,[w("label",S7,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[46]||(H[46]=O=>P(t).config.trail=O)},null,512),[[Ct,P(t).config.trail]]),H[87]||(H[87]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableTrail")),1)]),P(t).config.trail?(Q(),te("div",C7,[w("div",A7,[w("div",T7,R(j.$t("modifiers.trailImages")),1),w("button",{class:"image-add",title:j.$t("modifiers.addTrailImage"),onClick:H[47]||(H[47]=(...O)=>P(s)&&P(s)(...O))},"+",8,E7)]),(Q(!0),te(_e,null,Pt(P(t).config.trailResources,O=>(Q(),It(RT,{key:O.id,resource:O,"resource-count":P(t).config.trailResources.length,"default-file":"trail.png","name-placeholder":"trail","show-folder":!1,onPick:P(r),onReset:P(d),onRemove:P(u),onUpdateWeight:P(h),onToggleLock:P(f)},{default:ju(()=>[H[90]||(H[90]=w("div",{class:"resource-divider"},null,-1)),Ae(Ue,{label:j.$t("modifiers.trailRotation"),min:-360,max:360,step:1,"model-value":O.rotation,"onUpdate:modelValue":U=>P(c)(O.id,U)},null,8,["label","model-value","onUpdate:modelValue"]),Ae(Ue,{label:j.$t("modifiers.trailBones"),min:2,max:16,step:1,"model-value":O.boneCount,"onUpdate:modelValue":U=>P(a)(O.id,U)},null,8,["label","model-value","onUpdate:modelValue"]),Ae(Ue,{label:j.$t("modifiers.trailRatio"),min:0,max:100,step:1,modelValue:O.trailRatio,"onUpdate:modelValue":U=>O.trailRatio=U},null,8,["label","modelValue","onUpdate:modelValue"]),w("label",_7,[w("span",null,R(j.$t("modifiers.trailLength")),1),me(w("select",{"onUpdate:modelValue":U=>O.lengthMode=U,class:"inp"},[w("option",P7,R(j.$t("common.fixed")),1),w("option",I7,R(j.$t("modifiers.randomRange")),1)],8,M7),[[St,O.lengthMode]])]),O.lengthMode==="fixed"?(Q(),It(Ue,{key:0,label:j.$t("modifiers.lengthRatio"),min:0,max:500,step:1,modelValue:O.length,"onUpdate:modelValue":U=>O.length=U},null,8,["label","modelValue","onUpdate:modelValue"])):(Q(),te(_e,{key:1},[Ae(Ue,{label:j.$t("modifiers.lengthMin"),min:0,max:500,step:1,modelValue:O.lengthMin,"onUpdate:modelValue":U=>O.lengthMin=U},null,8,["label","modelValue","onUpdate:modelValue"]),Ae(Ue,{label:j.$t("modifiers.lengthMax"),min:0,max:500,step:1,modelValue:O.lengthMax,"onUpdate:modelValue":U=>O.lengthMax=U},null,8,["label","modelValue","onUpdate:modelValue"])],64)),w("label",k7,[w("span",null,R(j.$t("modifiers.trailWidth")),1),me(w("select",{"onUpdate:modelValue":U=>O.widthSizeMode=U,class:"inp"},[w("option",F7,R(j.$t("common.fixed")),1),w("option",L7,R(j.$t("modifiers.randomRange")),1)],8,R7),[[St,O.widthSizeMode]])]),O.widthSizeMode==="fixed"?(Q(),It(Ue,{key:2,label:j.$t("modifiers.widthRatio"),min:0,max:500,step:1,modelValue:O.width,"onUpdate:modelValue":U=>O.width=U},null,8,["label","modelValue","onUpdate:modelValue"])):(Q(),te(_e,{key:3},[Ae(Ue,{label:j.$t("modifiers.widthMin"),min:0,max:500,step:1,modelValue:O.widthMin,"onUpdate:modelValue":U=>O.widthMin=U},null,8,["label","modelValue","onUpdate:modelValue"]),Ae(Ue,{label:j.$t("modifiers.widthMax"),min:0,max:500,step:1,modelValue:O.widthMax,"onUpdate:modelValue":U=>O.widthMax=U},null,8,["label","modelValue","onUpdate:modelValue"])],64)),w("label",D7,[w("span",null,R(j.$t("modifiers.widthScale")),1),me(w("select",{"onUpdate:modelValue":U=>O.widthMode=U,class:"inp"},[w("option",N7,R(j.$t("modifiers.followParticle")),1),w("option",$7,R(j.$t("common.fixed")),1)],8,O7),[[St,O.widthMode]])]),w("label",B7,[me(w("input",{type:"checkbox","onUpdate:modelValue":U=>O.lifeLengthEnabled=U},null,8,U7),[[Ct,O.lifeLengthEnabled]]),H[88]||(H[88]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.lifeLengthCurve")),1)]),O.lifeLengthEnabled?(Q(),It(ys,{key:4,modelValue:O.lifeLengthCurve,"onUpdate:modelValue":U=>O.lifeLengthCurve=U,"default-value":P(D)},null,8,["modelValue","onUpdate:modelValue","default-value"])):Ce("",!0),w("label",V7,[me(w("input",{type:"checkbox","onUpdate:modelValue":U=>O.shapeEnabled=U},null,8,X7),[[Ct,O.shapeEnabled]]),H[89]||(H[89]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.shapeCurve")),1)]),O.shapeEnabled?(Q(),It(ys,{key:5,modelValue:O.shapeCurve,"onUpdate:modelValue":U=>O.shapeCurve=U,"default-value":P(V)},null,8,["modelValue","onUpdate:modelValue","default-value"])):Ce("",!0),w("div",Y7,[w("span",null,R(j.$t("modifiers.colorMode")),1),w("div",z7,[w("button",{class:Ie(["axis-mode",{on:O.colorMode==="particle"}]),onClick:U=>O.colorMode="particle"},R(j.$t("modifiers.followParticle")),11,j7),w("button",{class:Ie(["axis-mode",{on:O.colorMode==="fixed"}]),onClick:U=>O.colorMode="fixed"},R(j.$t("common.fixed")),11,H7),w("button",{class:Ie(["axis-mode",{on:O.colorMode==="curve"}]),onClick:U=>O.colorMode="curve"},R(j.$t("common.curve")),11,G7)])]),w("label",W7,[w("span",null,R(j.$t("modifiers.blendMode")),1),me(w("select",{"onUpdate:modelValue":U=>O.blend=U,class:"inp"},[w("option",K7,R(j.$t("appearance.normal")),1),w("option",J7,R(j.$t("appearance.add")),1),w("option",Z7,R(j.$t("appearance.multiply")),1),w("option",Q7,R(j.$t("appearance.screen")),1)],8,q7),[[St,O.blend]])]),O.colorMode==="fixed"?(Q(),te("label",e9,[w("span",null,R(j.$t("modifiers.fixedColor")),1),me(w("input",{class:"colr",type:"color","onUpdate:modelValue":U=>O.color=U},null,8,t9),[[Je,O.color]]),w("input",{class:"hex-input",value:O.color,onChange:U=>P(p)(O,U),onKeydown:Gr(tt(U=>P(m)(O,U),["prevent"]),["enter"])},null,40,i9)])):O.colorMode==="curve"?(Q(),It(kT,{key:7,modelValue:O.colorGradient,"onUpdate:modelValue":U=>O.colorGradient=U},null,8,["modelValue","onUpdate:modelValue"])):Ce("",!0),w("div",n9,[w("span",null,R(j.$t("modifiers.alphaMode")),1),w("div",s9,[w("button",{class:Ie(["axis-mode",{on:O.alphaMode==="particle"}]),onClick:U=>O.alphaMode="particle"},R(j.$t("modifiers.followParticle")),11,r9),w("button",{class:Ie(["axis-mode",{on:O.alphaMode==="fixed"}]),onClick:U=>O.alphaMode="fixed"},R(j.$t("common.fixed")),11,o9),w("button",{class:Ie(["axis-mode",{on:O.alphaMode==="curve"}]),onClick:U=>O.alphaMode="curve"},R(j.$t("common.curve")),11,a9)])]),O.alphaMode==="fixed"?(Q(),It(Ue,{key:8,label:j.$t("modifiers.opacity"),min:0,max:1,step:.01,modelValue:O.alpha,"onUpdate:modelValue":U=>O.alpha=U},null,8,["label","modelValue","onUpdate:modelValue"])):Ce("",!0),O.alphaMode==="curve"?(Q(),It(ys,{key:9,modelValue:O.alphaCurve,"onUpdate:modelValue":U=>O.alphaCurve=U,"default-value":P(G)},null,8,["modelValue","onUpdate:modelValue","default-value"])):Ce("",!0)]),_:2},1032,["resource","resource-count","onPick","onReset","onRemove","onUpdateWeight","onToggleLock"]))),128)),w("input",{ref_key:"trailTextureFileInput",ref:i,class:"file-input",type:"file",accept:"image/png,image/jpeg,image/webp",onChange:H[48]||(H[48]=(...O)=>P(l)&&P(l)(...O))},null,544),w("div",l9,[Ae(Ue,{label:j.$t("modifiers.gridRows"),min:2,max:16,step:1,"model-value":P(t).config.trailGridRows,"onUpdate:modelValue":H[49]||(H[49]=O=>P(o)("trailGridRows",O))},null,8,["label","model-value"]),Ae(Ue,{label:j.$t("modifiers.gridCols"),min:2,max:32,step:1,"model-value":P(t).config.trailGridCols,"onUpdate:modelValue":H[50]||(H[50]=O=>P(o)("trailGridCols",O))},null,8,["label","model-value"])]),w("div",c9,R(j.$t("modifiers.trailHint")),1)])):Ce("",!0)]),w("div",d9,[w("label",u9,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[51]||(H[51]=O=>P(t).config.emitterFollow=O),disabled:P(t).config.streamBehavior==="loop"},null,8,h9),[[Ct,P(t).config.emitterFollow]]),H[91]||(H[91]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableFollow")),1)]),P(t).config.emitterFollow&&P(t).config.streamBehavior!=="loop"?(Q(),te("div",f9,[w("label",p9,[w("span",null,R(j.$t("modifiers.followMode")),1),w("select",{value:P(t).config.emitterFollowMode,class:"inp",onChange:H[52]||(H[52]=O=>P(_)(O,P(t).config))},[w("option",g9,R(j.$t("modifiers.noFollow")),1),w("option",v9,R(j.$t("modifiers.followPath")),1),P(g)||P(t).config.emitterFollowMode==="bone"?(Q(),te("option",b9,R(j.$t("modifiers.selectedBone")),1)):Ce("",!0)],40,m9)]),P(t).config.emitterFollowMode==="path"?(Q(),te(_e,{key:0},[w("label",y9,[w("span",null,R(j.$t("modifiers.followPath")),1),me(w("select",{"onUpdate:modelValue":H[53]||(H[53]=O=>P(t).config.emitterFollowPathId=O),class:"inp"},[w("option",x9,R(j.$t("modifiers.noFollow")),1),(Q(!0),te(_e,null,Pt(P(e).paths,O=>(Q(),te("option",{key:O.id,value:O.id},R(O.name),9,w9))),128))],512),[[St,P(t).config.emitterFollowPathId,void 0,{number:!0}]])]),w("label",S9,[w("span",null,R(j.$t("modifiers.emitterAngleMode")),1),me(w("select",{"onUpdate:modelValue":H[54]||(H[54]=O=>P(t).config.emitterAngleMode=O),class:"inp"},[w("option",C9,R(j.$t("modifiers.fixedAngle")),1),w("option",A9,R(j.$t("modifiers.followMoveDirection")),1)],512),[[St,P(t).config.emitterAngleMode]])]),w("div",T9,[w("span",null,R(j.$t("modifiers.moveProgressCurve")),1)]),Ae(ys,{modelValue:P(t).config.emitterFollowCurve,"onUpdate:modelValue":H[55]||(H[55]=O=>P(t).config.emitterFollowCurve=O),"default-value":P(B)},null,8,["modelValue","default-value"]),w("div",E9,[w("label",_9,[w("span",null,R(j.$t("modifiers.moveDuration")),1),me(w("input",{"onUpdate:modelValue":H[56]||(H[56]=O=>P(t).config.emitterFollowDuration=O),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(t).config.emitterFollowDuration,void 0,{number:!0}]])]),w("label",M9,[w("span",null,R(j.$t("modifiers.followSpace")),1),me(w("select",{"onUpdate:modelValue":H[57]||(H[57]=O=>P(t).config.emitterFollowSpace=O),class:"inp"},[w("option",P9,R(j.$t("modifiers.localSpace")),1),w("option",I9,R(j.$t("modifiers.worldSpace")),1)],512),[[St,P(t).config.emitterFollowSpace]])])]),w("label",k9,[w("span",null,R(j.$t("modifiers.moveDirection")),1),me(w("select",{"onUpdate:modelValue":H[58]||(H[58]=O=>P(t).config.emitterFollowDirection=O),class:"inp"},[w("option",R9,R(j.$t("modifiers.forward")),1),w("option",F9,R(j.$t("modifiers.reverse")),1)],512),[[St,P(t).config.emitterFollowDirection]])]),Ae(Ue,{label:j.$t("modifiers.followOffset"),min:0,max:1,step:.01,modelValue:P(t).config.emitterFollowOffset,"onUpdate:modelValue":H[59]||(H[59]=O=>P(t).config.emitterFollowOffset=O)},null,8,["label","modelValue"]),w("div",L9,R(j.$t("modifiers.followSpaceHint")),1)],64)):P(t).config.emitterFollowMode==="bone"?(Q(),te(_e,{key:1},[P(v)?(Q(),te("div",D9,[bt(R(j.$t("modifiers.followTarget")),1),w("strong",null,R(P(v).spine.name)+" / "+R(P(v).boneName),1)])):(Q(),te("div",O9,R(j.$t("modifiers.noValidBone")),1)),P(g)&&(!P(v)||P(g).spine.id!==P(v).spine.id||P(g).boneName!==P(v).boneName)?(Q(),te("button",{key:2,class:"bone-follow-rebind",onClick:H[60]||(H[60]=O=>P(I)(P(t).config))},R(P(v)?j.$t("modifiers.rebind"):j.$t("modifiers.bind"))+R(j.$t("modifiers.selectedBoneLabel"))+R(P(g).spine.name)+" / "+R(P(g).boneName),1)):Ce("",!0),P(v)?(Q(),te(_e,{key:3},[w("label",N9,[w("span",null,R(j.$t("modifiers.followSpace")),1),me(w("select",{"onUpdate:modelValue":H[61]||(H[61]=O=>P(t).config.emitterFollowSpace=O),class:"inp"},[w("option",$9,R(j.$t("modifiers.boneLocalSpace")),1),w("option",B9,R(j.$t("modifiers.boneWorldSpace")),1)],512),[[St,P(t).config.emitterFollowSpace]])]),w("div",U9,[w("label",V9,[w("span",null,R(j.$t("modifiers.offsetX")),1),me(w("input",{"onUpdate:modelValue":H[62]||(H[62]=O=>P(t).config.emitterFollowBoneOffsetX=O),type:"number",step:"1",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneOffsetX,void 0,{number:!0}]])]),w("label",X9,[w("span",null,R(j.$t("modifiers.offsetY")),1),me(w("input",{"onUpdate:modelValue":H[63]||(H[63]=O=>P(t).config.emitterFollowBoneOffsetY=O),type:"number",step:"1",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneOffsetY,void 0,{number:!0}]])])]),w("div",Y9,[w("label",z9,[w("span",null,R(j.$t("modifiers.rotationOffset")),1),me(w("input",{"onUpdate:modelValue":H[64]||(H[64]=O=>P(t).config.emitterFollowBoneRotation=O),type:"number",step:"1",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneRotation,void 0,{number:!0}]])]),w("label",j9,[w("span",null,R(j.$t("modifiers.scaleOffsetX")),1),me(w("input",{"onUpdate:modelValue":H[65]||(H[65]=O=>P(t).config.emitterFollowBoneScaleX=O),type:"number",step:"0.05",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneScaleX,void 0,{number:!0}]])]),w("label",H9,[w("span",null,R(j.$t("modifiers.scaleOffsetY")),1),me(w("input",{"onUpdate:modelValue":H[66]||(H[66]=O=>P(t).config.emitterFollowBoneScaleY=O),type:"number",step:"0.05",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneScaleY,void 0,{number:!0}]])])]),w("div",G9,R(j.$t("modifiers.boneFollowHint")),1)],64)):Ce("",!0)],64)):Ce("",!0)])):Ce("",!0)]),w("div",W9,[w("label",q9,[me(w("input",{type:"checkbox","onUpdate:modelValue":H[67]||(H[67]=O=>P(t).config.collision=O)},null,512),[[Ct,P(t).config.collision]]),H[92]||(H[92]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableCollision")),1)]),P(t).config.collision?(Q(),te("div",K9,[w("div",J9,R(j.$t("modifiers.collisionObjects")),1),w("div",Z9,[(Q(!0),te(_e,null,Pt(P(b),O=>(Q(),te("span",{key:O.id,class:Ie(["collision-filter-tag",{disabled:!O.enabled}]),title:O.enabled?O.name:j.$t("modifiers.colliderDisabled",{name:O.name})},[w("span",null,R(O.name),1),w("button",{type:"button","aria-label":j.$t("modifiers.clearCollider",{name:O.name}),onClick:U=>P(T)(O.id)},"×",8,eK)],10,Q9))),128)),w("button",{type:"button",class:Ie(["collision-filter-add",{active:P(y)}]),disabled:P(x).length===0,title:P(x).length?j.$t("modifiers.addCollider"):j.$t("modifiers.noAvailableColliders"),onClick:H[68]||(H[68]=O=>y.value=!P(y))},"+",10,tK)]),P(b).length===0?(Q(),te("div",iK,R(j.$t("modifiers.noCollidersSelected")),1)):Ce("",!0),P(y)&&P(x).length?(Q(),te("div",nK,[(Q(!0),te(_e,null,Pt(P(x),O=>(Q(),te("button",{key:O.id,type:"button",onClick:U=>P(C)(O.id)},[w("span",null,R(O.name),1),w("small",null,R(O.enabled?j.$t("modifiers.available"):j.$t("modifiers.disabled")),1)],8,sK))),128))])):Ce("",!0),w("div",rK,R(j.$t("modifiers.collisionHint")),1)])):Ce("",!0)]),w("div",oK,[w("label",aK,[me(w("input",{"onUpdate:modelValue":H[69]||(H[69]=O=>P(t).config.eventEnabled=O),type:"checkbox"},null,512),[[Ct,P(t).config.eventEnabled]]),H[93]||(H[93]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(j.$t("modifiers.enableSubEmitter")),1)]),P(t).config.eventEnabled?(Q(),te("div",lK,[(Q(!0),te(_e,null,Pt(P(t).config.events,(O,U)=>(Q(),te("div",{key:O.id,class:"event-card"},[w("div",cK,[me(w("select",{"onUpdate:modelValue":W=>O.event=W,class:"inp event-select",title:j.$t("modifiers.triggerTiming")},[w("option",uK,R(j.$t("modifiers.birth")),1),w("option",hK,R(j.$t("modifiers.death")),1),w("option",fK,R(j.$t("modifiers.collision")),1)],8,dK),[[St,O.event]]),me(w("select",{"onUpdate:modelValue":W=>O.targetSystemId=W,class:"inp event-target",title:j.$t("modifiers.chooseTarget")},[w("option",mK,R(j.$t("modifiers.noTarget")),1),(Q(!0),te(_e,null,Pt(L.value,W=>(Q(),te("option",{key:W.id,value:W.id},R(W.config.name||`ParticleSystem${W.id}`),9,gK))),128))],8,pK),[[St,O.targetSystemId,void 0,{number:!0}]]),w("button",{type:"button",class:"event-remove",title:j.$t("modifiers.deleteSubEmitter"),onClick:W=>Z(U)},"✕",8,vK)]),w("label",bK,[w("span",null,R(j.$t("modifiers.probability")),1),me(w("input",{"onUpdate:modelValue":W=>O.probability=W,type:"number",min:"0",max:"1",step:"0.01",class:"inp"},null,8,yK),[[Je,O.probability,void 0,{number:!0}]])]),O.event==="collision"?(Q(),te("label",xK,[w("span",null,R(j.$t("modifiers.collisionLimit")),1),w("input",{value:O.collisionLimit??1,type:"number",min:"1",max:"4",step:"1",class:"inp",onInput:W=>se(O,W)},null,40,wK)])):Ce("",!0),w("div",SK,[w("span",null,R(j.$t("modifiers.inherit")),1),w("button",{type:"button",class:"inherit-trigger",onPointerdown:H[70]||(H[70]=tt(()=>{},["stop"])),onClick:tt(W=>ve(O,W),["stop"])},[w("span",AK,R(z(O)),1),H[94]||(H[94]=w("i",null,"⌄",-1))],40,CK)]),K(O,"color")?(Q(),te("label",TK,[w("span",null,R(j.$t("modifiers.colorInheritMode")),1),me(w("select",{"onUpdate:modelValue":W=>O.colorInheritMode=W,class:"inp"},[w("option",_K,R(j.$t("modifiers.add")),1),w("option",MK,R(j.$t("modifiers.replace")),1)],8,EK),[[St,O.colorInheritMode]])])):Ce("",!0)]))),128)),w("button",{type:"button",class:"event-add",onClick:q},R(j.$t("modifiers.addSubEmitter")),1)])):Ce("",!0)])],512),[[Fi,!P(S).mods]])]),(Q(),It(u1,{to:"body"},[F.value&&$.value?(Q(),te("div",{key:0,class:"inherit-menu",style:Vt({left:`${F.value.left}px`,top:`${F.value.top}px`,width:`${F.value.width}px`}),onPointerdown:H[73]||(H[73]=tt(()=>{},["stop"]))},[w("button",{type:"button",class:"inherit-option",onClick:H[71]||(H[71]=O=>oe($.value))},[w("span",PK,R(X($.value).length===0?"✓":""),1),bt(R(j.$t("modifiers.inheritNone")),1)]),w("button",{type:"button",class:"inherit-option",onClick:H[72]||(H[72]=O=>le($.value))},[w("span",IK,R(X($.value).length===4?"✓":""),1),bt(R(j.$t("modifiers.inheritAll")),1)]),H[95]||(H[95]=w("div",{class:"inherit-divider"},null,-1)),(Q(!0),te(_e,null,Pt(N.value,O=>(Q(),te("button",{key:O.key,type:"button",class:"inherit-option",onClick:U=>J($.value,O.key)},[w("span",RK,R(K($.value,O.key)?"✓":""),1),bt(R(O.label),1)],8,kK))),128))],36)):Ce("",!0)]))],64))}}),LK=li(FK,[["__scopeId","data-v-f5ccc52c"]]),DK={class:"group"},OK={class:"caret"},NK=["title"],$K={class:"group-body export-settings"},BK={class:"export-field"},UK={class:"export-field"},VK={class:"export-field"},XK={value:"linear"},YK={value:"bezier"},zK={class:"export-help"},jK={key:0,class:"export-help"},HK={class:"export-fps-row"},GK={class:"export-field export-fps-field"},WK={class:"export-checkbox"},qK={class:"export-help"},KK={class:"export-switches"},JK={class:"switch-row export-switch"},ZK={class:"switch-row export-switch"},QK={class:"switch-row export-switch export-switch-last"},eJ=qt({__name:"ExportSettingsSection",setup(n){const{exportSettings:e,collapsed:t,toggle:i,resetModule:s,normalizeExportFps:r,select:o}=oo();return(a,c)=>(Q(),te("div",DK,[w("div",{class:"group-head",onClick:c[1]||(c[1]=l=>P(i)("export"))},[w("span",OK,R(P(t).export?"▸":"▾"),1),w("span",null,R(a.$t("export.title")),1),w("button",{class:"group-reset",title:a.$t("export.reset"),onClick:c[0]||(c[0]=tt(l=>P(s)("export"),["stop"]))},R(a.$t("common.reset")),9,NK)]),me(w("div",$K,[w("label",BK,[w("span",null,R(a.$t("export.imagesPath")),1),me(w("input",{"onUpdate:modelValue":c[2]||(c[2]=l=>P(e).imagesPath=l),class:"inp export-input",type:"text",placeholder:"./images/"},null,512),[[Je,P(e).imagesPath,void 0,{trim:!0}]])]),w("label",UK,[w("span",null,R(a.$t("export.spineVersion")),1),me(w("select",{"onUpdate:modelValue":c[3]||(c[3]=l=>P(e).spineVersion=l),class:"inp export-input"},[...c[11]||(c[11]=[k_('',5)])],512),[[St,P(e).spineVersion]])]),w("label",VK,[w("span",null,R(a.$t("export.keyframeCurve")),1),me(w("select",{"onUpdate:modelValue":c[4]||(c[4]=l=>P(e).keyframeCurve=l),class:"inp export-input"},[w("option",XK,R(a.$t("export.linear")),1),w("option",YK,R(a.$t("export.smoothBezier")),1)],512),[[St,P(e).keyframeCurve]])]),w("div",zK,R(a.$t("export.bezierHelp")),1),P(e).spineVersion==="3.8"?(Q(),te("div",jK,R(a.$t("export.spine38Help")),1)):Ce("",!0),w("div",HK,[w("label",GK,[w("span",null,R(a.$t("export.fps")),1),me(w("input",{"onUpdate:modelValue":c[5]||(c[5]=l=>P(e).fps=l),class:"inp export-input",type:"number",min:"1",max:"240",step:"1",onChange:c[6]||(c[6]=(...l)=>P(r)&&P(r)(...l))},null,544),[[Je,P(e).fps,void 0,{number:!0}]])]),w("label",WK,[me(w("input",{"onUpdate:modelValue":c[7]||(c[7]=l=>P(e).omitFps=l),type:"checkbox"},null,512),[[Ct,P(e).omitFps]]),bt(R(a.$t("export.omitFps")),1)])]),w("div",qK,R(a.$t("export.fpsHelp")),1),w("div",KK,[w("label",JK,[me(w("input",{"onUpdate:modelValue":c[8]||(c[8]=l=>P(e).integerFrameAlignment=l),type:"checkbox"},null,512),[[Ct,P(e).integerFrameAlignment]]),c[12]||(c[12]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(a.$t("export.integerFrames")),1)]),w("label",ZK,[me(w("input",{"onUpdate:modelValue":c[9]||(c[9]=l=>P(e).bonePool=l),type:"checkbox"},null,512),[[Ct,P(e).bonePool]]),c[13]||(c[13]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(a.$t("export.bonePool")),1)]),w("label",QK,[me(w("input",{"onUpdate:modelValue":c[10]||(c[10]=l=>P(e).excludeEmptyAnimations=l),type:"checkbox"},null,512),[[Ct,P(e).excludeEmptyAnimations]]),c[14]||(c[14]=w("span",{class:"switch-ui"},null,-1)),w("span",null,R(a.$t("export.excludeEmpty")),1)])])],512),[[Fi,!P(t).export]])]))}}),tJ=li(eJ,[["__scopeId","data-v-63cfb71e"]]),iJ={class:"spine-export-actions"},nJ=["disabled","title"],sJ=["disabled","title"],rJ=["disabled","title"],oJ={key:0},aJ=["href","title"],lJ=["title"],cJ=["href"],dJ=qt({__name:"ParticleExportFooter",setup(n){const{exportSettings:e,exportBusy:t,exportTarget:i,exportMessage:s,exportError:r,connectorPairUrl:o,connectorStatusText:a,connectorStatusClass:c,connectorReady:l,connectorAuthorizationUrl:d,connectorDisabledReason:u,connectorButtonTitle:h,refreshConnectorHealth:f,exportSpineJson:p,exportSpineProject:m,exportSpineImages:g}=oo();return(v,y)=>(Q(),te(_e,null,[w("div",iJ,[w("button",{type:"button",class:"export-spine-json",disabled:P(t),title:P(t)?v.$t("export.baking"):v.$t("export.exportJsonTitle",{version:P(e).spineVersion}),onClick:y[0]||(y[0]=(...b)=>P(p)&&P(p)(...b))},R(P(t)&&P(i)==="json"?v.$t("export.preparing"):v.$t("export.exportJson")),9,nJ),w("button",{type:"button",class:"export-spine-images",disabled:P(t),title:v.$t("export.exportImagesTitle"),onClick:y[1]||(y[1]=(...b)=>P(g)&&P(g)(...b))},R(P(t)&&P(i)==="images"?v.$t("export.organizingImages"):v.$t("export.exportImages")),9,sJ),w("button",{type:"button",class:"export-spine-project",disabled:P(t)||!P(l),title:P(h),onClick:y[2]||(y[2]=(...b)=>P(m)&&P(m)(...b))},[w("span",null,R(P(t)&&P(i)==="spine"?v.$t("export.generatingProject"):v.$t("export.exportSpine")),1),!P(t)&&P(u)?(Q(),te("small",oJ,R(P(u)),1)):Ce("",!0)],8,rJ)]),w("div",{class:Ie(["connector-status",P(c)])},[y[5]||(y[5]=w("span",{class:"connector-dot"},null,-1)),bt(R(P(a))+" ",1),P(d)?(Q(),te("a",{key:0,href:P(d),target:"_blank",rel:"noopener",title:v.$t("export.authorizeTitle")},R(v.$t("export.authorize")),9,aJ)):Ce("",!0),w("button",{type:"button",title:v.$t("export.refreshConnector"),onClick:y[3]||(y[3]=(...b)=>P(f)&&P(f)(...b))},R(v.$t("export.refresh")),9,lJ)],2),P(s)?(Q(),te("div",{key:0,class:Ie(["export-message",{error:P(r)}])},[bt(R(P(s))+" ",1),P(o)?(Q(),te("a",{key:0,href:P(o),target:"_blank",rel:"noopener",onClick:y[4]||(y[4]=b=>o.value="")},R(v.$t("export.authorize")),9,cJ)):Ce("",!0)],2)):Ce("",!0)],64))}}),uJ=li(dJ,[["__scopeId","data-v-33af5045"]]),hJ={class:"panel"},fJ={class:"panel-header"},pJ={class:"panel-scroll"},mJ=qt({__name:"ParticlePanel",setup(n){const{activeObjectType:e,sys:t}=LX();return(i,s)=>(Q(),te("div",hJ,[w("div",fJ,[w("span",null,R(i.$t("app.title")),1)]),w("div",pJ,[Ae(jX),Ae(vj),P(e)==="particle"&&P(t)?(Q(),te(_e,{key:0},[Ae(gH),Ae(XH),Ae(Sq),Ae(LK),Ae(tJ)],64)):Ce("",!0)]),Ae(uJ)]))}}),gJ=li(mJ,[["__scopeId","data-v-14a55de6"]]),da=n=>Math.max(0,Number(n)||0);function vJ(n,e){const t=Math.max(1,e),i=new Map(n.map(y=>[y.id,y])),s=new Set;for(const y of n)if(y.config.eventEnabled)for(const b of y.config.events||[])b.targetSystemId>0&&b.targetSystemId!==y.id&&i.has(b.targetSystemId)&&s.add(b.targetSystemId);const r=new Map;for(const y of n)if(y.config.eventEnabled)for(const b of y.config.events||[]){if(b.targetSystemId<=0||b.targetSystemId===y.id||!i.has(b.targetSystemId))continue;const x=r.get(b.targetSystemId);x?x.push({parent:y,rule:b}):r.set(b.targetSystemId,[{parent:y,rule:b}])}const o=y=>da(y.delay),a=y=>da(y.delay),c=y=>{const b=o(y);return y.mode!=="stream"?b:y.streamBehavior==="loop"?b+Wn(y,t).total/t:b+Math.max(1/t,Number(y.duration)||0)},l=y=>{const b=da(y.lifeMin),x=da(y.lifeMax);return y.lifeMode==="fixed"?b:Math.min(b,x)},d=y=>{const b=da(y.lifeMin),x=da(y.lifeMax);return y.lifeMode==="fixed"?b:Math.max(b,x)},u=new Map,h=new Map,f=new Set,p=new Set,m=y=>{const b=u.get(y.id);if(b!=null)return b;if(f.has(y.id))return o(y.config);f.add(y.id);let x=1/0;for(const{parent:C,rule:T}of r.get(y.id)||[]){const S=s.has(C.id)?m(C)+a(C.config):o(C.config),E=T.event==="death"?l(C.config):0;x=Math.min(x,S+E)}return Number.isFinite(x)||(x=o(y.config)),f.delete(y.id),u.set(y.id,x),x},g=y=>{const b=h.get(y.id);if(b!=null)return b;if(p.has(y.id))return c(y.config);p.add(y.id);let x=-1/0;for(const{parent:C,rule:T}of r.get(y.id)||[]){const S=s.has(C.id)?g(C)+a(C.config):c(C.config),E=T.event==="birth"?0:d(C.config);x=Math.max(x,S+E)}return Number.isFinite(x)||(x=c(y.config)),p.delete(y.id),h.set(y.id,x),x},v=new Map;for(const y of s){const b=i.get(y);if(!b)continue;const x=m(b),C=g(b);v.set(y,{firstTrigger:x,lastTrigger:C,end:Math.max(x,C)+d(b.config)})}return v}const bJ={class:"timeline"},yJ={class:"tl-controls"},xJ=["title"],wJ=["title"],SJ=["title"],CJ=["title"],AJ=["title"],TJ=["title","aria-label"],EJ={class:"tl-ab-loop"},_J=["title"],MJ={class:"tl-ab-title"},PJ=["title"],IJ=["max","aria-label","onKeydown"],kJ=["title"],RJ=["min","max","aria-label","onKeydown"],FJ={class:"tl-frame"},LJ={class:"tl-legend"},DJ=["disabled","title"],OJ={class:"tl-animation-menu-title"},NJ=["onClick"],$J={key:0},BJ={class:"tl-animation-editor"},UJ=["aria-label"],VJ=["title"],XJ={key:0,class:"tl-animation-error"},YJ={class:"tl-animation-actions"},zJ=["disabled"],jJ={key:1,class:"tl-animation-hint"},HJ={class:"tl-anim tl-spine-preview"},GJ=["value","disabled"],WJ={value:""},qJ=["value"],KJ={class:"tl-zoom"},JJ={class:"tl-ticks"},ZJ={class:"tl-ticklabel"},QJ={class:"tl-lanes"},eZ=["onPointerdown"],tZ={class:"lane-name"},iZ=["title","onPointerdown"],nZ=["title","onPointerdown"],sZ=["title","onPointerdown"],rZ={class:"lane-name"},oZ={key:0,class:"tl-empty"},aZ=qt({__name:"Timeline",setup(n){const e=Go(),{t}=fn(),i=$e(null),s=$e(null),r=$e(!1),o=$e("animation"),a=$e("");ha(()=>{(!Array.isArray(e.timeline.animations)||!e.timeline.animations.length)&&(e.timeline.animations=["animation"]),e.timeline.animations.includes(e.timeline.animation)||(e.timeline.animation=e.timeline.animations[0]);for(const O of e.systems)(!O.animation||!e.timeline.animations.includes(O.animation))&&(O.animation=e.timeline.animations[0])});const c=Fe(()=>e.systems.find(O=>O.id===e.activeId)||null);function l(){c.value&&(r.value=!r.value,o.value=c.value.animation,a.value="")}function d(O){const U=c.value;U&&(e.setSystemAnimation(U.id,O),o.value=O,a.value="")}function u(){const O=e.addAnimation();o.value=O,a.value=""}function h(){var W;const O=((W=c.value)==null?void 0:W.animation)||e.timeline.animation,U=o.value.trim();if(!U){a.value=t("timeline.animationNameEmpty");return}if(U!==O&&e.timeline.animations.includes(U)){a.value=t("timeline.animationNameDuplicate");return}if(!e.renameAnimation(O,U)){a.value=t("timeline.animationRenameFailed");return}o.value=U,a.value=""}function f(){var W,ee;const O=((W=c.value)==null?void 0:W.animation)||e.timeline.animation;if(!e.removeAnimation(O)){a.value=t("timeline.keepOneAnimation");return}const U=((ee=c.value)==null?void 0:ee.animation)||e.timeline.animation;o.value=U,a.value=""}function p(O){var U;(U=s.value)!=null&&U.contains(O.target)||(r.value=!1)}Sn(()=>document.addEventListener("pointerdown",p)),eo(()=>document.removeEventListener("pointerdown",p));const m=Fe(()=>Math.max(1,e.timeline.fps||30)),g=$e(Math.max(120,e.timeline.totalFrames)),v=$e({}),y=$e({}),b=$e({}),x=$e({}),C=$e(String(e.timeline.playbackStart)),T=$e(String(e.timeline.playbackEnd));ei(()=>e.timeline.playbackStart,O=>{C.value=String(O)}),ei(()=>e.timeline.playbackEnd,O=>{T.value=String(O)});const S=Fe(()=>e.timeline.totalFrames);ei(S,O=>{O>g.value&&(g.value=Math.min(2e3,O))});const E=Fe(()=>g.value<=30?t("timeline.zoomIn"):g.value>=300?t("timeline.zoomOut"):t("timeline.zoomFit")),_=Fe(()=>e.spines.filter(O=>O.selectedAnimation&&O.animations.some(U=>U.name===O.selectedAnimation&&U.duration>0))),I=Fe(()=>(e.activeObjectType==="spine"?e.spines.find(U=>U.id===e.activeObjectId&&U.animations.length):null)||e.spines.find(U=>U.animations.length)||null);function M(O){const U=I.value;U&&(U.selectedAnimation=O.target.value,e.recalcTotalFrames(),e.timeline.frame=0)}function k(){e.setPlaybackStart(Number(C.value)),C.value=String(e.timeline.playbackStart)}function B(){e.setPlaybackEnd(Number(T.value)),T.value=String(e.timeline.playbackEnd)}function D(){var U;const O=((U=i.value)==null?void 0:U.clientWidth)||600;return g.value/O}const G=Fe(()=>{const O=[],U=g.value;let W=1;g.value<=10?W=1:g.value<=50?W=5:g.value<=200?W=10:g.value<=500?W=50:W=100;for(let ee=0;ee<=U;ee+=W)O.push({f:ee,px:ee/D()});return O}),V=Fe(()=>e.timeline.frame/D()),Y=Fe(()=>Xa(e.systems)),L=Fe(()=>vJ(e.systems,m.value));function N(O){return Y.value.has(O.id)}function F(O){var W;return(N(O)?((W=L.value.get(O.id))==null?void 0:W.firstTrigger)??0:0)*m.value/D()+4}function $(O){var ee;const U=O.config;if(N(O)){const ne=((ee=L.value.get(O.id))==null?void 0:ee.firstTrigger)??0,ue=v.value[O.id]??Math.max(0,Number(U.delay)||0);return(ne+ue)*m.value/D()}return(v.value[O.id]??Math.max(0,Number(U.delay)||0))*m.value/D()}function X(O){const U=O.config,W=Math.max(0,Number(U.lifeMin)||0),ee=Math.max(0,Number(U.lifeMax)||0);return U.lifeMode==="fixed"?W:Math.max(W,ee)}function z(O){if(N(O)){const U=L.value.get(O.id),W=(U==null?void 0:U.firstTrigger)??0,ee=(U==null?void 0:U.end)??W;return Math.max(0,ee-W)*m.value/D()}return J(O)}function K(O){if(N(O)||O.config.mode!=="stream")return 0;if(O.config.streamBehavior==="loop"){const W=O.config;return(b.value[O.id]??Wn(W,m.value).loop)/D()}return(y.value[O.id]??Math.max(1/m.value,Number(O.config.duration)||1))*m.value/D()}function J(O){if(N(O))return z(O);const U=O.config;return U.mode==="stream"&&U.streamBehavior==="loop"?le(O)+K(O)+ve(O):K(O)+X(O)*m.value/D()}function oe(O){const U=O.config;return U.mode==="stream"&&U.streamBehavior==="loop"}function le(O){return oe(O)?Wn(O.config,m.value).start/D():0}function ve(O){return oe(O)?Wn(O.config,m.value).end/D():0}function Se(O){var U;return((U=O.animations.find(W=>W.name===O.selectedAnimation))==null?void 0:U.duration)||0}function fe(O){return(x.value[O.id]??Math.max(0,Number(O.timeOffset)||0))*m.value/D()}function be(O){return Se(O)*m.value/D()}function q(O){const U=O.deltaY<0?.8:1.25;let W=g.value*U;W=Math.min(2e3,Math.max(10,W)),g.value=Math.round(W)}function Z(O){const U=i.value;e.pause();const W=ne=>{const ue=U.getBoundingClientRect(),xe=Math.floor((ne.clientX-ue.left)/ue.width*g.value);e.timeline.frame=Math.max(0,Math.min(xe,S.value-1))};W(O);const ee=()=>{window.removeEventListener("pointermove",W),window.removeEventListener("pointerup",ee)};window.addEventListener("pointermove",W),window.addEventListener("pointerup",ee)}function se(O,U){O.stopPropagation();const W=O.clientX,ee=Math.max(0,Number(U.config.delay)||0),ne=D()/m.value,ue=Be=>{const de=(Be.clientX-W)*ne,ge=Math.max(0,Math.min(ee+de,600));v.value[U.id]=Math.round(ge*m.value)/m.value},xe=Be=>{window.removeEventListener("pointermove",ue),window.removeEventListener("pointerup",ye),window.removeEventListener("pointercancel",Ne);const de=v.value[U.id];delete v.value[U.id],Be&&de!=null&&de!==ee&&(U.config.delay=de)},ye=()=>xe(!0),Ne=()=>xe(!1);window.addEventListener("pointermove",ue),window.addEventListener("pointerup",ye),window.addEventListener("pointercancel",Ne)}function j(O,U){var Le;O.stopPropagation();const W=oe(U),ee=Math.max(0,Number(U.config.duration)||0),ne=Wn(U.config,m.value).loop,ue=D()/m.value,xe=((Le=O.currentTarget.closest(".lane-bar"))==null?void 0:Le.getBoundingClientRect().left)??O.clientX,ye=le(U);let Ne=!1;const Be=Ee=>{if(Ne=!0,W){const Ze=Math.min(1800,Math.max(1,Math.round((Ee.clientX-xe-ye)/D())));b.value[U.id]=Ze}else{const Ze=Math.max(1/m.value,Math.min((Ee.clientX-xe)*ue,600));y.value[U.id]=Math.round(Ze*m.value)/m.value}},de=Ee=>{window.removeEventListener("pointermove",Be),window.removeEventListener("pointerup",ge),window.removeEventListener("pointercancel",Ge);const Ze=y.value[U.id],Te=b.value[U.id];delete y.value[U.id],delete b.value[U.id],Ee&&Ne&&W&&Te!=null&&Te!==ne?U.config.loopDurationFrames=Te:Ee&&Ne&&!W&&Ze!=null&&Ze!==ee&&(U.config.duration=Ze)},ge=()=>de(!0),Ge=()=>de(!1);window.addEventListener("pointermove",Be),window.addEventListener("pointerup",ge),window.addEventListener("pointercancel",Ge)}function H(O,U){O.stopPropagation();const W=O.clientX,ee=Math.max(0,Number(U.timeOffset)||0),ne=D()/m.value,ue=Be=>{const de=Math.max(0,Math.min(ee+(Be.clientX-W)*ne,600));x.value[U.id]=Math.round(de*m.value)/m.value},xe=Be=>{window.removeEventListener("pointermove",ue),window.removeEventListener("pointerup",ye),window.removeEventListener("pointercancel",Ne);const de=x.value[U.id];delete x.value[U.id],Be&&de!=null&&de!==ee&&(U.timeOffset=de,e.recalcTotalFrames())},ye=()=>xe(!0),Ne=()=>xe(!1);window.addEventListener("pointermove",ue),window.addEventListener("pointerup",ye),window.addEventListener("pointercancel",Ne)}return(O,U)=>{var W,ee,ne;return Q(),te("div",bJ,[w("div",yJ,[w("button",{class:Ie(["tl-btn",{on:P(e).timeline.playing}]),onClick:U[0]||(U[0]=ue=>P(e).togglePlay()),title:P(e).timeline.playing?O.$t("timeline.pause"):O.$t("timeline.play")},R(P(e).timeline.playing?"❚❚":"▶"),11,xJ),w("button",{class:"tl-btn",onClick:U[1]||(U[1]=ue=>P(e).toStart()),title:O.$t("timeline.toStart")},"⏮",8,wJ),w("button",{class:"tl-btn",onClick:U[2]||(U[2]=ue=>P(e).previousFrame()),title:O.$t("timeline.previous")},"◀",8,SJ),w("button",{class:"tl-btn",onClick:U[3]||(U[3]=ue=>P(e).nextFrame()),title:O.$t("timeline.next")},"▶",8,CJ),w("button",{class:"tl-btn",onClick:U[4]||(U[4]=ue=>P(e).toEnd()),title:O.$t("timeline.toEnd")},"⏭",8,AJ),w("button",{class:Ie(["tl-btn",{on:P(e).timeline.loop}]),title:O.$t("timeline.continuousLoop"),"aria-label":O.$t("timeline.continuousLoop"),onClick:U[5]||(U[5]=ue=>P(e).toggleLoop())},"⟳",10,TJ),w("div",EJ,[w("button",{class:Ie(["tl-ab-toggle",{on:P(e).timeline.abLoop}]),title:O.$t("timeline.abLoop"),onClick:U[6]||(U[6]=ue=>P(e).toggleABLoop())},[w("span",null,R(O.$t("timeline.abLoopShort")),1),U[12]||(U[12]=w("i",{class:"tl-switch"},[w("b")],-1))],10,_J),P(e).timeline.abLoop?(Q(),te("div",{key:0,class:"tl-ab-popover",onPointerdown:U[9]||(U[9]=tt(()=>{},["stop"]))},[w("div",MJ,R(O.$t("timeline.abRange")),1),w("label",{class:"tl-range",title:O.$t("timeline.playbackStart")},[U[13]||(U[13]=w("span",null,"A",-1)),me(w("input",{"onUpdate:modelValue":U[7]||(U[7]=ue=>C.value=ue),type:"number",min:"0",max:Math.max(0,P(e).timeline.playbackEnd-1),"aria-label":O.$t("timeline.startFrame"),onChange:k,onKeydown:Gr(tt(k,["prevent"]),["enter"])},null,40,IJ),[[Je,C.value]])],8,PJ),w("label",{class:"tl-range",title:O.$t("timeline.playbackEnd")},[U[14]||(U[14]=w("span",null,"B",-1)),me(w("input",{"onUpdate:modelValue":U[8]||(U[8]=ue=>T.value=ue),type:"number",min:P(e).timeline.playbackStart+1,max:Math.max(1,P(e).timeline.totalFrames-1),"aria-label":O.$t("timeline.endFrame"),onChange:B,onKeydown:Gr(tt(B,["prevent"]),["enter"])},null,40,RJ),[[Je,T.value]])],8,kJ)],32)):Ce("",!0)]),w("span",FJ,R(O.$t("timeline.frameStatus",{current:P(e).timeline.frame,total:Math.max(0,P(e).timeline.totalFrames-1)})),1),w("span",LJ,[U[15]||(U[15]=w("i",{class:"legend-emission"},null,-1)),bt(R(O.$t("timeline.emission"))+" ",1),U[16]||(U[16]=w("i",{class:"legend-life"},null,-1)),bt(R(O.$t("timeline.particleLife"))+" ",1),U[17]||(U[17]=w("i",{class:"legend-spine"},null,-1)),bt(R(O.$t("timeline.spineAnimation")),1)]),w("div",{ref_key:"animationMenuRef",ref:s,class:"tl-anim tl-owner-animation"},[w("span",null,R(O.$t("timeline.ownerAnimation")),1),w("button",{class:"tl-animation-trigger",disabled:!c.value,title:O.$t("timeline.setOwnerAnimation"),onClick:tt(l,["stop"])},[w("span",null,R(((W=c.value)==null?void 0:W.animation)||P(e).timeline.animation),1),U[18]||(U[18]=w("i",null,"⌄",-1))],8,DJ),r.value?(Q(),te("div",{key:0,class:"tl-animation-menu",onPointerdown:U[11]||(U[11]=tt(()=>{},["stop"]))},[w("div",OJ,R(O.$t("timeline.chooseOwnerAnimation")),1),(Q(!0),te(_e,null,Pt(P(e).timeline.animations,ue=>{var xe,ye;return Q(),te("button",{key:ue,class:Ie(["tl-animation-option",{on:((xe=c.value)==null?void 0:xe.animation)===ue}]),onClick:Ne=>d(ue)},[w("span",null,R(ue),1),((ye=c.value)==null?void 0:ye.animation)===ue?(Q(),te("i",$J,"✓")):Ce("",!0)],10,NJ)}),128)),w("div",BJ,[me(w("input",{"onUpdate:modelValue":U[10]||(U[10]=ue=>o.value=ue),class:"tl-animation-name",maxlength:"64","aria-label":O.$t("timeline.animationName"),onKeydown:Gr(h,["enter"])},null,40,UJ),[[Je,o.value]]),w("button",{title:O.$t("timeline.renameAnimation"),onClick:h},R(O.$t("timeline.rename")),9,VJ)]),a.value?(Q(),te("div",XJ,R(a.value),1)):Ce("",!0),w("div",YJ,[w("button",{onClick:u},R(O.$t("timeline.newAnimation")),1),w("button",{disabled:P(e).timeline.animations.length<=1,onClick:f},R(O.$t("common.delete")),9,zJ)]),P(e).timeline.animations.length<=1?(Q(),te("div",jJ,R(O.$t("timeline.keepOneAnimation")),1)):Ce("",!0)],32)):Ce("",!0)],512),w("label",HJ,[bt(R(O.$t("timeline.spinePreview"))+" ",1),w("select",{class:"tl-sel",value:((ee=I.value)==null?void 0:ee.selectedAnimation)||"",disabled:!I.value,onChange:M},[w("option",WJ,R(I.value?O.$t("timeline.none"):O.$t("timeline.noSpineAnimation")),1),(Q(!0),te(_e,null,Pt(((ne=I.value)==null?void 0:ne.animations)||[],ue=>(Q(),te("option",{key:ue.name,value:ue.name},R(ue.name)+"("+R(ue.duration.toFixed(2))+"s) ",9,qJ))),128))],40,GJ)]),w("span",KJ,R(E.value),1)]),w("div",{class:"tl-viewport",ref_key:"vpRef",ref:i,onWheel:tt(q,["prevent"]),onPointerdown:Z},[w("div",JJ,[(Q(!0),te(_e,null,Pt(G.value,ue=>(Q(),te("div",{key:ue.f,class:"tl-tickline",style:Vt({left:ue.px+"px"})},[w("span",ZJ,R(ue.f)+"f",1)],4))),128))]),w("div",{class:"tl-playhead",style:Vt({left:V.value+"px"})},null,4),w("div",QJ,[(Q(!0),te(_e,null,Pt(P(e).systems,(ue,xe)=>(Q(),te("div",{key:ue.id,class:"tl-lane"},[w("span",{class:Ie(["lane-ico",{"sub-lane-ico":N(ue)}]),style:Vt({left:F(ue)+"px"})},"●",6),w("div",{class:Ie(["lane-bar",{"sub-emitter-bar":N(ue)}]),style:Vt({left:$(ue)+"px",width:z(ue)+"px"}),onPointerdown:tt(ye=>se(ye,ue),["stop"])},[w("span",tZ,R(ue.config.name||O.$t("timeline.systemName",{index:xe+1})),1),w("span",{class:Ie(["bar-life",{"loop-life":!N(ue)&&oe(ue)}]),style:Vt({width:J(ue)+"px"})},null,6),!N(ue)&&oe(ue)?(Q(),te(_e,{key:0},[le(ue)?(Q(),te("span",{key:0,class:"bar-loop-transition bar-loop-start",style:Vt({width:le(ue)+"px"})},null,4)):Ce("",!0),w("span",{class:"bar-emission bar-loop",style:Vt({left:le(ue)+"px",width:K(ue)+"px"})},[w("span",{class:"bar-handle",title:O.$t("timeline.dragLoopDuration"),onPointerdown:tt(ye=>j(ye,ue),["stop"])},null,40,iZ)],4),ve(ue)?(Q(),te("span",{key:1,class:"bar-loop-transition bar-loop-end",style:Vt({left:le(ue)+K(ue)+"px",width:ve(ue)+"px"})},null,4)):Ce("",!0)],64)):!N(ue)&&ue.config.mode==="stream"?(Q(),te("span",{key:1,class:"bar-emission",style:Vt({width:K(ue)+"px"})},[w("span",{class:"bar-handle",title:O.$t("timeline.dragEmissionDuration"),onPointerdown:tt(ye=>j(ye,ue),["stop"])},null,40,nZ)],4)):Ce("",!0)],46,eZ)]))),128)),(Q(!0),te(_e,null,Pt(_.value,ue=>(Q(),te("div",{key:`spine-${ue.id}`,class:"tl-lane spine-lane"},[U[19]||(U[19]=w("span",{class:"lane-ico spine-ico"},"◆",-1)),w("div",{class:"spine-bar",style:Vt({left:fe(ue)+"px",width:be(ue)+"px"}),title:O.$t("timeline.dragSpineStart"),onPointerdown:tt(xe=>H(xe,ue),["stop"])},[w("span",rZ,R(ue.name)+" · "+R(ue.selectedAnimation),1)],44,sZ)]))),128)),!P(e).systems.length&&!_.value.length?(Q(),te("div",oZ,R(O.$t("timeline.noAnimationData")),1)):Ce("",!0)])],544)])}}}),lZ=li(aZ,[["__scopeId","data-v-6213c4a4"]]),cZ={class:"transfer-heading"},dZ={key:0},uZ={class:"transfer-detail"},hZ=qt({__name:"TransferProgressOverlay",setup(n){const e=$e(null);return ei(()=>di.visible,async t=>{var i;t&&(await zu(),(i=e.value)==null||i.focus({preventScroll:!0}))},{flush:"post"}),(t,i)=>(Q(),It(G_,{name:"transfer-fade"},{default:ju(()=>[P(di).visible?(Q(),te("div",{key:0,ref_key:"overlayElement",ref:e,class:"transfer-overlay",role:"dialog","aria-modal":"true","aria-live":"polite",tabindex:"-1",onPointerdown:i[0]||(i[0]=tt(()=>{},["stop","prevent"])),onPointerup:i[1]||(i[1]=tt(()=>{},["stop","prevent"])),onClick:i[2]||(i[2]=tt(()=>{},["stop","prevent"])),onDblclick:i[3]||(i[3]=tt(()=>{},["stop","prevent"])),onContextmenu:i[4]||(i[4]=tt(()=>{},["stop","prevent"])),onWheel:i[5]||(i[5]=tt(()=>{},["stop","prevent"])),onKeydown:i[6]||(i[6]=tt(()=>{},["stop","prevent"]))},[w("div",{class:Ie(["transfer-dialog",{failed:P(di).failed}])},[w("div",cZ,[w("span",null,R(P(di).title),1),P(di).indeterminate?Ce("",!0):(Q(),te("strong",dZ,R(Math.round(P(di).progress))+"%",1))]),w("div",{class:Ie(["transfer-track",{indeterminate:P(di).indeterminate}])},[w("div",{class:"transfer-bar",style:Vt(P(di).indeterminate?void 0:{width:`${P(di).progress}%`})},null,4)],2),w("div",uZ,R(P(di).detail),1)],2)],544)):Ce("",!0)]),_:1}))}}),fZ=li(hZ,[["__scopeId","data-v-592b922e"]]),pZ=["inert","aria-hidden"],mZ={class:"right"},gZ={class:"stage-area"},vZ=["title"],bZ=qt({__name:"App",setup(n){const e=Go();OB(e);const t=$e(360),i=$e(180);function s(o){o.preventDefault();const a=l=>{const d=e.settings.parameterPanelOnRight?window.innerWidth-l.clientX:l.clientX,u=Math.max(240,Math.min(d,window.innerWidth-200));t.value=u},c=()=>{window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",c)};window.addEventListener("pointermove",a),window.addEventListener("pointerup",c)}function r(o){o.preventDefault();const a=o.clientY,c=i.value,l=u=>{const h=Math.max(80,Math.min(c+(a-u.clientY),window.innerHeight-200));i.value=h},d=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",d)};window.addEventListener("pointermove",l),window.addEventListener("pointerup",d)}return(o,a)=>(Q(),te(_e,null,[w("div",{class:Ie(["layout",{"panel-right":P(e).settings.parameterPanelOnRight}]),inert:P(di).visible?!0:void 0,"aria-hidden":P(di).visible?"true":void 0},[w("div",{class:"parameter-panel",style:Vt({width:t.value+"px"})},[Ae(gJ)],4),w("div",{class:"resizer-col",onPointerdown:s},null,32),w("div",mZ,[w("div",gZ,[Ae(_8)]),w("div",{class:"resizer-row",onPointerdown:r,title:o.$t("app.resizeTimeline")},null,40,vZ),w("div",{class:"timeline-area",style:Vt({height:i.value+"px"})},[Ae(lZ)],4)])],10,pZ),Ae(fZ)],64))}}),yZ=li(bZ,[["__scopeId","data-v-07c42c10"]]);wM(yZ).use(AM()).use(ac).mount("#app");export{wx as $,Ts as A,Pu as B,Rt as C,_i as D,Oe as E,nn as F,Is as G,at as H,At as I,xT as J,Ki as K,Cn as L,On as M,Zr as N,gh as O,As as P,Ql as Q,Ga as R,Gn as S,dV as T,Ke as U,mx as V,Jn as W,qQ as X,aX as Y,dc as Z,Lg as _,it as a,zm as a$,xx as a0,QA as a1,ev as a2,GQ as a3,Tu as a4,Ol as a5,xV as a6,Nl as a7,vh as a8,Um as a9,Zm as aA,Qm as aB,md as aC,Lr as aD,kd as aE,Vm as aF,nT as aG,ri as aH,KA as aI,BQ as aJ,$a as aK,yx as aL,ke as aM,We as aN,Ym as aO,Rd as aP,aT as aQ,Xm as aR,rT as aS,oT as aT,bh as aU,dT as aV,Fd as aW,fT as aX,lT as aY,uT as aZ,pT as a_,Ko as aa,tv as ab,iv as ac,vx as ad,wc as ae,Sc as af,xc as ag,qo as ah,nr as ai,VQ as aj,iT as ak,yV as al,qa as am,qr as an,rv as ao,yT as ap,vV as aq,cc as ar,cn as as,bx as at,zQ as au,tl as av,Jm as aw,eg as ax,tg as ay,ig as az,ja as b,gr as b$,Mu as b0,cT as b1,ro as b2,hT as b3,nv as b4,cV as b5,vT as b6,bT as b7,sv as b8,Ps as b9,mT as bA,ov as bB,mh as bC,wT as bD,jm as bE,Ti as bF,aV as bG,hV as bH,BA as bI,$A as bJ,XQ as bK,zt as bL,il as bM,ST as bN,TT as bO,ET as bP,_T as bQ,CT as bR,AT as bS,gV as bT,av as bU,Mt as bV,Km as bW,sT as bX,VA as bY,XA as bZ,YA as b_,lV as ba,UQ as bb,ot as bc,tT as bd,eT as be,JA as bf,ZA as bg,$o as bh,Eu as bi,bV as bj,zA as bk,jA as bl,en as bm,HA as bn,Wa as bo,Oi as bp,UA as bq,_u as br,GA as bs,WA as bt,qA as bu,Sx as bv,Wm as bw,Eo as bx,gT as by,Gm as bz,Ha as c,YQ as c0,pV as c1,mV as c2,fV as c3,Qe as d,He as e,jQ as f,rt as g,ki as h,eu as i,un as j,Wt as k,je as l,es as m,Bt as n,_g as o,hi as p,ec as q,kr as r,Ve as s,yw as t,Fg as u,ru as v,Hm as w,Ao as x,gx as y,qm as z}; +`;class gA extends kr{constructor(e){super(e),this.shaderGenerator=new yw(Q3,e4),this.geometryClass=Z3,this.vertexSize=7}packInterleavedGeometry(e,t,i,s,r){const{uint32View:o,float32View:a}=t,c=s/this.vertexSize,l=e.uvs,d=e.indices,u=e.vertexData,h=e._texture.baseTexture._batchLocation,f=Math.min(e.worldAlpha,1),p=Rt.shared.setValue(e._tintRGB).toPremultiplied(f,!0),m=Rt.shared.setValue(e._darkTintRGB).premultiply(f,!0).toPremultiplied(1,!1);for(let g=0;g0){let o=function(l){return Promise.all(l.map(d=>Promise.resolve(d).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};document.getElementsByTagName("link");const a=document.querySelector("meta[property=csp-nonce]"),c=(a==null?void 0:a.nonce)||(a==null?void 0:a.getAttribute("nonce"));s=o(t.map(l=>{if(l=r4(l),l in Zy)return;Zy[l]=!0;const d=l.endsWith(".css"),u=d?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const h=document.createElement("link");if(h.rel=d?"stylesheet":s4,d||(h.as="script"),h.crossOrigin="",h.href=l,c&&h.setAttribute("nonce",c),document.head.appendChild(h),d)return new Promise((f,p)=>{h.addEventListener("load",f),h.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}function r(o){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=o,window.dispatchEvent(a),!a.defaultPrevented)throw o}return s.then(o=>{for(const a of o||[])a.status==="rejected"&&r(a.reason);return e().catch(r)})};async function bA(){const[n,e]=await Promise.all([Qy(()=>import("./index-BSAMR7rU.js"),[]),Qy(()=>import("./index-hgwT4zDg.js"),__vite__mapDeps([0,1]))]);return{core:n,pixi:e}}async function o4(n,e,t){const{core:i,pixi:s}=await bA(),r=new i.TextureAtlas(e);return qg(r,t,s.SpineTexture),{skeletonData:new i.SkeletonJson(new i.AtlasAttachmentLoader(r)).readSkeletonData(n),SpineClass:s.Spine}}async function a4(n,e,t){const{core:i,pixi:s}=await bA(),r=new i.TextureAtlas(e);return qg(r,t,s.SpineTexture),{skeletonData:new i.SkeletonBinary(new i.AtlasAttachmentLoader(r)).readSkeletonData(n),SpineClass:s.Spine}}function Br(n,e,t){const i=Number(n[e]);return Number.isFinite(i)?i:t}function dn(n,e,t,i){n[e]==null&&(n[e]=Br(n,t,i))}function Kg(n,e,t){if(typeof n.curve!="number")return;const i=Br(n,"time",0),r=Br(e,"time",0)-i,o=n.curve,a=Br(n,"c2",0),c=Br(n,"c3",1),l=Br(n,"c4",1);n.curve=t.flatMap(([d,u])=>[i+r*o,d+(u-d)*a,i+r*c,d+(u-d)*l]),delete n.c2,delete n.c3,delete n.c4}function Hr(n,e){if(Array.isArray(n))for(let t=0;t[Br(i,r,o),Br(s,r,o)]))}}function l4(n){if(Array.isArray(n))for(let e=0;eNumber.parseInt(i.slice(r,r+2),16)/255);return e?s:s.slice(0,3)}function ex(n,e){if(Array.isArray(n))for(let t=0;t[a,o[c]]))}}function c4(n){for(const e of n.bones||[])e.inherit==null&&e.transform!=null&&(e.inherit=e.transform);for(const e of n.transform||[])dn(e,"mixRotate","rotateMix",1),dn(e,"mixX","translateMix",1),e.mixY==null&&(e.mixY=e.mixX),dn(e,"mixScaleX","scaleMix",1),e.mixScaleY==null&&(e.mixScaleY=e.mixScaleX),dn(e,"mixShearY","shearMix",1);for(const e of n.path||[])dn(e,"mixRotate","rotateMix",1),dn(e,"mixX","translateMix",1),e.mixY==null&&(e.mixY=e.mixX)}function d4(n){for(const e of n.skins||[])for(const t of Object.values(e.attachments||{}))for(const i of Object.values(t||{}))i.parent!=null&&i.timelines==null&&i.deform!=null&&(i.timelines=i.deform)}function u4(n){for(const e of Object.values(n.slots||{}))e.color&&!e.rgba&&(e.rgba=e.color,delete e.color),e.twoColor&&!e.rgba2&&(e.rgba2=e.twoColor,delete e.twoColor),ex(e.rgba,!1),ex(e.rgba2,!0)}function h4(n){for(const e of Object.values(n.bones||{})){for(const t of e.rotate||[])dn(t,"value","angle",0);Hr(e.rotate,[{key:"value",fallback:0}]),Hr(e.translate,[{key:"x",fallback:0},{key:"y",fallback:0}]),Hr(e.scale,[{key:"x",fallback:1},{key:"y",fallback:1}]),Hr(e.shear,[{key:"x",fallback:0},{key:"y",fallback:0}])}}function f4(n){for(const e of Object.values(n.ik||{}))Hr(e,[{key:"mix",fallback:1},{key:"softness",fallback:0}])}function p4(n){for(const e of Object.values(n.transform||{})){for(const t of e)dn(t,"mixRotate","rotateMix",1),dn(t,"mixX","translateMix",1),t.mixY==null&&(t.mixY=t.mixX),dn(t,"mixScaleX","scaleMix",1),t.mixScaleY==null&&(t.mixScaleY=t.mixScaleX),dn(t,"mixShearY","shearMix",1);Hr(e,[{key:"mixRotate",fallback:1},{key:"mixX",fallback:1},{key:"mixY",fallback:1},{key:"mixScaleX",fallback:1},{key:"mixScaleY",fallback:1},{key:"mixShearY",fallback:1}])}}function m4(n){for(const e of Object.values(n.path||{})){for(const i of["position","spacing"]){const s=e[i];for(const r of s||[])dn(r,"value",i,0);Hr(s,[{key:"value",fallback:0}])}const t=e.mix;for(const i of t||[])dn(i,"mixRotate","rotateMix",1),dn(i,"mixX","translateMix",1),i.mixY==null&&(i.mixY=i.mixX);Hr(t,[{key:"mixRotate",fallback:1},{key:"mixX",fallback:1},{key:"mixY",fallback:1}])}}function g4(n){if(!n.deform)return;const e=n.attachments||(n.attachments={});for(const[t,i]of Object.entries(n.deform)){const s=e[t]||(e[t]={});for(const[r,o]of Object.entries(i)){const a=s[r]||(s[r]={});for(const[c,l]of Object.entries(o)){const d=a[c]||(a[c]={});d.deform=l,l4(l)}}}delete n.deform}function yA(n){c4(n),d4(n);for(const e of Object.values(n.animations||{}))u4(e),h4(e),f4(e),p4(e),m4(e),g4(e),!e.drawOrder&&e.draworder&&(e.drawOrder=e.draworder);return n}function v4(n){return n.replace(/\\/g,"/").split("/").pop()||n}async function b4(n){const e=await Promise.all(n.map(async t=>{const i=URL.createObjectURL(t);try{return[v4(t.name).toLowerCase(),await it.fromURL(i)]}finally{URL.revokeObjectURL(i)}}));return new Map(e)}function y4(n){const e=new Map;return n.bones.map(t=>{var r;const i=((r=t.parent)==null?void 0:r.name)||null,s=i?(e.get(i)||0)+1:0;return e.set(t.name,s),{name:t.name,parent:i,depth:s}})}function x4(n){return n.slots.map(e=>{var t;return{name:e.name,order:Number(e.index)||0,bone:((t=e.boneData)==null?void 0:t.name)||"",attachment:e.attachmentName||""}})}async function xA(n,e,t){var o;if(!/\.(json|skel)$/i.test(n.name))throw new Error(Ye("errors.spineFileType"));if(!/\.atlas$/i.test(e.name))throw new Error(Ye("errors.atlasFileType"));if(!t.length)throw new Error(Ye("errors.chooseTexture"));const i=await e.text(),s=await b4(t),r=[...s.values()];try{let a,c,l=null,d;if(/\.skel$/i.test(n.name)){const u=await n.arrayBuffer();try{({skeletonData:a,SpineClass:c}=await a4(u,i,s)),d="4.3"}catch(h){try{({skeletonData:a,SpineClass:c}=n4(u,i,s)),d="4.2"}catch(f){const p=h instanceof Error?h.message:String(h),m=f instanceof Error?f.message:String(f);throw new Error(Ye("errors.binaryParseFailed",{v43:p,v42:m}))}}l=lu(a.version)}else{let u;try{u=JSON.parse(await n.text())}catch{throw new Error(Ye("errors.invalidSpineJson"))}if(l=lu((o=u==null?void 0:u.skeleton)==null?void 0:o.spine),!l)throw new Error(Ye("errors.unsupportedSpineJsonVersion",{versions:ym()}));d=hF(l),l==="3.8"&&yA(u);const h=d==="4.3"?await o4(u,i,s):i4(u,i,s);a=h.skeletonData,c=h.SpineClass}if(!l)throw new Error(Ye("errors.unsupportedSpineDataVersion",{versions:ym()}));return{skeletonData:a,textures:r,runtimeVersion:d,SpineClass:c,dataVersion:l,animations:a.animations.map(u=>({name:u.name,duration:u.duration})),bones:y4(a),slots:x4(a)}}catch(a){for(const c of r)c.destroy(!0);throw a}}function Id(n){return new Promise((e,t)=>{const i=new FileReader;i.onload=()=>e(String(i.result||"")),i.onerror=()=>t(i.error),i.readAsDataURL(n)})}async function w4(n,e,t){return{skeleton:{name:n.name,dataUrl:await Id(n)},atlas:{name:e.name,dataUrl:await Id(e)},textures:await Promise.all(t.map(async i=>({name:i.name,dataUrl:await Id(i)})))}}async function gp(n){const e=await fetch(n.dataUrl);if(!e.ok)throw new Error(Ye("errors.embeddedReadFailed",{name:n.name}));return new File([await e.blob()],n.name)}async function S4(n){return{skeleton:await gp(n.skeleton),atlas:await gp(n.atlas),textures:await Promise.all(n.textures.map(gp))}}const wA="SpineParticle.EditorConfig",SA=1;function CA(n){return{backgroundX:n.backgroundX,backgroundY:n.backgroundY,backgroundOpacity:n.backgroundOpacity,backgroundImageName:n.backgroundImageName,backgroundImageData:n.backgroundImageData,showGrid:n.showGrid,exportSettings:Zt(n.exportSettings)}}function C4(n){return JSON.parse(JSON.stringify(n,(e,t)=>{if(!(e==="texture"||e==="trailTexture"||e==="frames"))return t}))}function AA(n){const e=Zt(n);return delete e.tags,delete e.selectedTag,e}function A4(n){const e=CA(n.settings),t=n.timeline.playbackEnd>=Math.max(1,n.timeline.totalFrames-1);return C4({format:wA,version:SA,savedAt:new Date().toISOString(),editor:Zt(n.editor),settings:e,timeline:{fps:n.timeline.fps,loop:n.timeline.loop,playbackStart:n.timeline.playbackStart,playbackEnd:n.timeline.playbackEnd,playbackEndAuto:t,abLoop:n.timeline.abLoop,animations:[...n.timeline.animations]},selection:{type:n.activeObjectType,id:n.activeObjectId},scene:{systems:n.systems.map(i=>({...Zt(i),frames:void 0})),colliders:n.colliders.map(AA),paths:Zt(n.paths),spines:Zt(n.spines)}})}function T4(n,e,t,i){const s=Math.max(1,i);let r=0;for(const o of n){const a=o.config,c=Math.max(0,Number(a.lifeMin)||0),l=Math.max(0,Number(a.lifeMax)||0),d=a.lifeMode==="fixed"?c:Math.max(c,l),u=a.mode==="stream"?a.streamBehavior==="loop"?Wn(a,s).total/s:Math.max(1/s,Number(a.duration)||0):0;let h=Math.max(0,Number(a.delay)||0)+u+d;a.mode==="stream"&&a.streamBehavior==="loop"&&(h=Math.max(0,Number(a.delay)||0)+Wn(a,s).total/s),r=Math.max(r,h)}for(const o of t){const a=o.animations.find(c=>c.name===o.selectedAnimation);a&&(r=Math.max(r,Math.max(0,Number(o.timeOffset)||0)+Math.max(0,a.duration||0)))}for(const o of e)o.followPath&&o.followPathId&&(r=Math.max(r,Math.max(0,o.followDuration)||0));return RS(r,s)}function E4(){return`SpineParticle-${new Date().toISOString().replace(/[-:]/g,"").replace(/\.\d{3}Z$/,"").replace("T","-")}.json`}function TA(n){const e=A4(n),t=new Blob([JSON.stringify(e,null,2)],{type:"application/json;charset=utf-8"}),i=URL.createObjectURL(t),s=document.createElement("a");return s.href=i,s.download=E4(),document.body.appendChild(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(i),0),e}function EA(n){let e;try{e=JSON.parse(n)}catch{throw new Error(Ye("errors.invalidJson"))}const t=e;if(t.format!==wA)throw new Error(Ye("errors.invalidConfigFormat"));if(t.version!==SA)throw new Error(Ye("errors.unsupportedConfigVersion",{version:t.version??Ye("export.unknown")}));if(!t.scene||!Array.isArray(t.scene.systems)||!Array.isArray(t.scene.colliders)||!Array.isArray(t.scene.paths)||!Array.isArray(t.scene.spines))throw new Error(Ye("errors.missingScene"));return t}async function _4(n){const e=new Map,t=s=>{const r=s==="/particles/star.png"?"/images/star.png":s==="/trails/trail.png"?"/images/trail.png":s||"/images/star.png";let o=e.get(r);return o||(o=it.fromURL(r).then(a=>Ur(a)),e.set(r,o)),o},i=await t("/images/star.png");await Promise.all(n.map(async s=>{var o;const r=lr(s.config);r.texture=i,await Promise.all(r.imageResources.map(async a=>{a.texture=await t(a.previewUrl||"/images/star.png"),await Promise.all(a.sequenceFrames.map(async c=>{c.texture=await t(c.previewUrl||a.previewUrl||"/images/star.png")}))})),await Promise.all(r.trailResources.map(async a=>{a.texture=await t(a.previewUrl||"/images/trail.png")})),r.trailTexture=((o=r.trailResources[0])==null?void 0:o.texture)||null,s.frames=[]}))}async function M4(n){const e=new Map;try{for(const t of n){if(!t.sourceBundle)continue;const i=await S4(t.sourceBundle);e.set(t.id,await xA(i.skeleton,i.atlas,i.textures))}return e}catch(t){for(const i of e.values())for(const s of i.textures)s.destroy(!0);throw t}}function P4(n,e){const t=(e==null?void 0:e.type)||"particle",i=Number(e==null?void 0:e.id)||0;(t==="particle"?n.systems.some(r=>r.id===i):t==="collision"?n.colliders.some(r=>r.id===i):t==="path"?n.paths.some(r=>r.id===i):n.spines.some(r=>r.id===i))?n.selectSceneObject(t,i):n.systems[0]?n.selectSceneObject("particle",n.systems[0].id):n.colliders[0]?n.selectSceneObject("collision",n.colliders[0].id):n.paths[0]?n.selectSceneObject("path",n.paths[0].id):n.spines[0]?n.selectSceneObject("spine",n.spines[0].id):(n.activeObjectType="particle",n.activeObjectId=0,n.activeId=0)}async function I4(n,e){var h,f,p,m,g,v,y,b,w;const t=EA(JSON.stringify(e)),i=Zt(t.scene.systems),s=t.scene.colliders.map(AA),r=Zt(t.scene.paths),o=Zt(t.scene.spines);for(const C of o)C.sourceBundle==null&&(C.sourceBundle=null),C.dataVersion==null&&(C.dataVersion=""),Array.isArray(C.slots)||(C.slots=[]),typeof C.selectedBone!="string"&&(C.selectedBone=""),typeof C.selectedSlot!="string"&&(C.selectedSlot="");await _4(i);const a=await M4(o),c=new Map(n.spines.map(C=>[C.id,C.assetVersion]));for(const C of n.spines)bc(C.id);n.systems=i,n.colliders=s,n.paths=r,n.spines=o,Object.assign(n.editor,Zt(t.editor||{}));const l=t.settings;if(l)for(const C of["backgroundX","backgroundY","backgroundOpacity","backgroundImageName","backgroundImageData","showGrid"])Object.prototype.hasOwnProperty.call(l,C)&&(n.settings[C]=l[C]);n.settings.exportSettings=MS((h=t.settings)==null?void 0:h.exportSettings),n.settings.undoLimit=Math.min(200,Math.max(1,Math.round(Number(n.settings.undoLimit)||20))),n.timeline.fps=Math.max(1,Math.round(Number((f=t.timeline)==null?void 0:f.fps)||30));const d=Math.max(1,Math.floor(Number((p=t.timeline)==null?void 0:p.playbackEnd)||Number.MAX_SAFE_INTEGER)),u=((m=t.timeline)==null?void 0:m.playbackEndAuto)??d>=T4(i,s,o,n.timeline.fps);n.timeline.abLoop=((g=t.timeline)==null?void 0:g.abLoop)===!0,n.timeline.loop=((v=t.timeline)==null?void 0:v.loop)!==!1,n.timeline.animations=Array.isArray((y=t.timeline)==null?void 0:y.animations)&&t.timeline.animations.length?[...new Set(t.timeline.animations.filter(C=>typeof C=="string"&&C.trim()).map(C=>C.trim()))]:["animation"];for(const C of n.spines){const T=a.get(C.id);if(C.assetVersion=Math.max(Number(C.assetVersion)||0,c.get(C.id)||0)+1,!T){C.status="empty",C.error=C.skeletonFileName?Ye("errors.missingEmbeddedSpine"):"",C.animations=[],C.bones=[],C.slots=[],C.selectedAnimation="";continue}ch(C.id,T),C.dataVersion=T.dataVersion,C.animations=T.animations,C.bones=T.bones,C.slots=T.slots,T.animations.some(S=>S.name===C.selectedAnimation)||(C.selectedAnimation=((b=T.animations[0])==null?void 0:b.name)||""),C.status="ready",C.error=""}n.syncSceneSequences(),P4(n,t.selection),n.timeline.playbackStart=Math.max(0,Math.floor(Number((w=t.timeline)==null?void 0:w.playbackStart)||0)),n.timeline.playbackEnd=d,n.timeline.frame=0,n.timeline.recorded=!1,n.timeline.playing=!0;for(const C of n.systems)n.timeline.animations.includes(C.animation)||(C.animation=n.timeline.animations[0]);return n.recalcTotalFrames(),u&&(n.timeline.playbackEnd=n.timeline.totalFrames-1),n.timeline.frame=n.timeline.playbackStart,t}async function _A(n,e){return I4(n,EA(e))}async function k4(n,e){if(!/\.json$/i.test(e.name))throw new Error(Ye("errors.chooseJsonConfig"));return _A(n,await e.text())}const ph=zo({undoCount:0});let xu=null,tr=null,Wr=[],ml=null,ir=null,wu=!1;function Jg(n){return{systems:n.systems.map(t=>{const i=Zt(t);return i.frames=void 0,i}),colliders:Zt(n.colliders),paths:Zt(n.paths),spines:Zt(n.spines),animations:[...n.timeline.animations],settings:CA(n.settings)}}function Zg(n){return JSON.stringify(n,(e,t)=>e==="texture"||e==="trailTexture"?null:typeof t=="string"&&t.startsWith("data:")&&t.length>256?`${t.length}:${t.slice(0,96)}:${t.slice(-48)}`:t)}function MA(n,e=Jg(n),t=Zg(e)){const i=new Map;for(const s of e.spines){const r=dF(s.id);r&&i.set(s.id,r)}return{data:e,signature:t,spineAssets:i}}function Su(n){if(n){for(const e of n.spineAssets.values())lF(e);n.spineAssets.clear()}}function PA(n){for(;Wr.length>n;)Su(Wr.shift()||null);ph.undoCount=Wr.length}function IA(){const n=xu;if(!n||!tr||wu)return;const e=Jg(n),t=Zg(e);t!==tr.signature&&(Wr.push(tr),tr=MA(n,e,t),PA(n.settings.undoLimit))}function R4(){wu||(ir&&clearTimeout(ir),ir=setTimeout(()=>{ir=null,IA()},250))}function F4(n){const e=n.activeObjectId;return n.activeObjectType==="particle"?n.systems.some(t=>t.id===e):n.activeObjectType==="collision"?n.colliders.some(t=>t.id===e):n.activeObjectType==="path"?n.paths.some(t=>t.id===e):n.spines.some(t=>t.id===e)}function L4(n){var t,i;if(!F4(n)){const s=n.systems[0],r=n.colliders[0],o=n.paths[0],a=n.spines[0];s?(n.activeObjectType="particle",n.activeObjectId=s.id):r?(n.activeObjectType="collision",n.activeObjectId=r.id):o?(n.activeObjectType="path",n.activeObjectId=o.id):(n.activeObjectType="spine",n.activeObjectId=(a==null?void 0:a.id)||0)}const e=n.activeObjectType==="particle"?n.systems.find(s=>s.id===n.activeObjectId):n.systems.find(s=>s.id===n.activeId);n.activeId=(e==null?void 0:e.id)||((t=n.systems[0])==null?void 0:t.id)||0,n.timeline.animation=(e==null?void 0:e.animation)||((i=n.systems[0])==null?void 0:i.animation)||n.timeline.animations[0]||"animation"}function D4(n,e){const t=tr;wu=!0;try{for(const i of n.spines)bc(i.id);n.systems=Zt(e.data.systems),n.colliders=Zt(e.data.colliders),n.paths=Zt(e.data.paths),n.spines=Zt(e.data.spines),n.timeline.animations=[...e.data.animations],Object.assign(n.settings,Zt(e.data.settings));for(const[i,s]of e.spineAssets)ch(i,s);for(const i of n.systems)i.frames=[];n.timeline.recorded=!1,n.timeline.playing=!1,L4(n),n.recalcTotalFrames(),tr=e}finally{wu=!1,Su(t)}}function O4(n){if(!(xu===n&&ml)){ml==null||ml(),ir&&clearTimeout(ir),Su(tr);for(const e of Wr)Su(e);Wr=[],xu=n,tr=MA(n),ph.undoCount=0,ml=ei(()=>Zg(Jg(n)),R4,{flush:"post"})}}function N4(n,e){const t=Math.min(200,Math.max(1,Math.round(Number(e)||20)));n.settings.undoLimit=t,PA(t)}function kA(){const n=xu;if(!n||!tr)return!1;ir&&(clearTimeout(ir),ir=null),IA();const e=Wr.pop();return e?(D4(n,e),ph.undoCount=Wr.length,!0):!1}function $4(n){const e=n instanceof HTMLElement?n:null;return!!(e!=null&&e.closest('input, textarea, select, [contenteditable="true"]'))}function B4(n){function e(i){var r;const s=i.target instanceof Node?i.target:null;n.canvasFocused.value=!!s&&!!((r=n.canvasElement.value)!=null&&r.contains(s))}function t(i){const s=i.key.toLowerCase();if((i.ctrlKey||i.metaKey)&&!i.altKey&&s==="s"){i.preventDefault(),i.stopPropagation(),n.save();return}if((i.ctrlKey||i.metaKey)&&!i.altKey&&s==="z"){i.preventDefault(),i.stopPropagation(),n.undo();return}if(i.ctrlKey||i.metaKey||i.altKey||$4(i.target))return;if(s==="d"){i.preventDefault(),n.togglePlay();return}if(s==="s"){i.preventDefault(),n.toStart();return}if(!n.canvasFocused.value)return;const r={q:"",w:"translate",e:"rotate",r:"scale"};s in r&&(i.preventDefault(),n.setTool(r[s]))}Sn(()=>{document.addEventListener("pointerdown",e,!0),window.addEventListener("keydown",t,!0)}),Za(()=>{document.removeEventListener("pointerdown",e,!0),window.removeEventListener("keydown",t,!0)})}const U4={class:"help-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"help-title"},V4={class:"help-head"},X4={id:"help-title"},Y4=["aria-label","title"],z4={class:"help-body"},j4={class:"help-section help-start"},H4={class:"help-note"},G4={class:"help-grid"},W4={class:"help-section"},q4={class:"help-list"},K4={class:"help-section"},J4={class:"shortcut-list"},Z4={class:"help-note"},Q4={class:"help-doc-title"},eU=["aria-expanded"],tU={class:"mtitle"},iU={class:"caret"},nU={class:"help-module-body"},sU={class:"help-list"},rU=["aria-expanded"],oU={class:"mtitle"},aU={class:"caret"},lU={class:"help-module-body"},cU={class:"help-list"},dU=["aria-expanded"],uU={class:"mtitle"},hU={class:"caret"},fU={class:"help-module-body"},pU={class:"help-list"},mU=["aria-expanded"],gU={class:"mtitle"},vU={class:"caret"},bU={class:"help-module-body"},yU={class:"help-list"},xU=["aria-expanded"],wU={class:"mtitle"},SU={class:"caret"},CU={class:"help-module-body"},AU={class:"help-list"},TU=["aria-expanded"],EU={class:"mtitle"},_U={class:"caret"},MU={class:"help-module-body"},PU={class:"help-list"},IU=["aria-expanded"],kU={class:"mtitle"},RU={class:"caret"},FU={class:"help-module-body"},LU={class:"help-list"},DU=["aria-expanded"],OU={class:"mtitle"},NU={class:"caret"},$U={class:"help-module-body"},BU={class:"help-list"},UU=["aria-expanded"],VU={class:"mtitle"},XU={class:"caret"},YU={class:"help-module-body"},zU={class:"connector-intro"},jU={class:"help-list"},HU={class:"help-section help-export"},GU=qt({__name:"HelpDialog",props:{show:{type:Boolean}},emits:["close"],setup(n,{emit:e}){const t=e,i=$e(Array.from({length:9},()=>!1));function s(){t("close")}function r(o){o.key==="Escape"&&s()}return Sn(()=>window.addEventListener("keydown",r)),eo(()=>window.removeEventListener("keydown",r)),(o,a)=>n.show?(Q(),te("div",{key:0,class:"help-overlay",role:"presentation",onClick:tt(s,["self"])},[x("section",U4,[x("header",V4,[x("div",null,[x("h2",X4,R(o.$t("help.title")),1),x("p",null,R(o.$t("help.subtitle")),1)]),x("button",{class:"help-close","aria-label":o.$t("help.close"),title:o.$t("help.closeShort"),onClick:s},"✕",8,Y4)]),x("div",z4,[x("section",j4,[x("h3",null,R(o.$t("help.quickStart")),1),x("ol",null,[x("li",null,R(o.$t("help.stepCreate")),1),x("li",null,R(o.$t("help.stepEdit")),1),x("li",null,R(o.$t("help.stepPreview")),1),x("li",null,R(o.$t("help.stepExport")),1)]),x("p",H4,R(o.$t("help.quickNote")),1)]),x("div",G4,[x("section",W4,[x("h3",null,R(o.$t("help.commonOps")),1),x("dl",q4,[x("div",null,[x("dt",null,R(o.$t("help.eye")),1),x("dd",null,R(o.$t("help.eyeDesc")),1)]),x("div",null,[a[9]||(a[9]=x("dt",null,"+Copy",-1)),x("dd",null,R(o.$t("help.copyDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("toolbar.background")),1),x("dd",null,R(o.$t("help.backgroundDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("toolbar.settings")),1),x("dd",null,R(o.$t("help.settingsDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.undoShortcut")),1),x("dd",null,R(o.$t("help.undoDesc")),1)]),x("div",null,[a[10]||(a[10]=x("dt",null,"Spine Bone",-1)),x("dd",null,R(o.$t("help.spineBoneDesc")),1)])])]),x("section",K4,[x("h3",null,R(o.$t("help.shortcuts")),1),x("div",J4,[x("div",null,[a[11]||(a[11]=x("kbd",null,"Ctrl/⌘",-1)),a[12]||(a[12]=x("span",null,"+",-1)),a[13]||(a[13]=x("kbd",null,"Z",-1)),x("em",null,R(o.$t("help.undoShortcut")),1)]),x("div",null,[a[14]||(a[14]=x("kbd",null,"Ctrl/⌘",-1)),a[15]||(a[15]=x("span",null,"+",-1)),a[16]||(a[16]=x("kbd",null,"S",-1)),x("em",null,R(o.$t("help.saveShortcut")),1)]),x("div",null,[a[17]||(a[17]=x("kbd",null,"Q",-1)),x("em",null,R(o.$t("help.panShortcut")),1)]),x("div",null,[a[18]||(a[18]=x("kbd",null,"W",-1)),x("em",null,R(o.$t("help.translateShortcut")),1)]),x("div",null,[a[19]||(a[19]=x("kbd",null,"E",-1)),x("em",null,R(o.$t("help.rotateShortcut")),1)]),x("div",null,[a[20]||(a[20]=x("kbd",null,"R",-1)),x("em",null,R(o.$t("help.scaleShortcut")),1)]),x("div",null,[a[21]||(a[21]=x("kbd",null,"D",-1)),x("em",null,R(o.$t("help.playShortcut")),1)]),x("div",null,[a[22]||(a[22]=x("kbd",null,"S",-1)),x("em",null,R(o.$t("help.startShortcut")),1)])]),x("p",Z4,R(o.$t("help.shortcutNote")),1)])]),x("div",Q4,R(o.$t("help.modules")),1),x("section",{class:Ie(["help-section help-module",{open:i.value[0]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[0]?"true":"false",onClick:a[0]||(a[0]=c=>i.value[0]=!i.value[0])},[a[23]||(a[23]=x("span",{class:"mnum"},"1",-1)),x("span",tU,R(o.$t("help.configTitle")),1),x("span",iU,R(i.value[0]?"▾":"▸"),1)],8,eU),me(x("div",nU,[x("dl",sU,[x("div",null,[x("dt",null,R(o.$t("config.save")),1),x("dd",null,R(o.$t("help.saveConfigDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("config.load")),1),x("dd",null,R(o.$t("help.loadConfigDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("config.selectPreset")),1),x("dd",null,R(o.$t("help.presetDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.configScope")),1),x("dd",null,R(o.$t("help.configScopeDesc")),1)])])],512),[[Fi,i.value[0]]])],2),x("section",{class:Ie(["help-section help-module",{open:i.value[1]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[1]?"true":"false",onClick:a[1]||(a[1]=c=>i.value[1]=!i.value[1])},[a[24]||(a[24]=x("span",{class:"mnum"},"2",-1)),x("span",oU,R(o.$t("help.sceneTitle")),1),x("span",aU,R(i.value[1]?"▾":"▸"),1)],8,rU),me(x("div",lU,[x("dl",cU,[x("div",null,[x("dt",null,R(o.$t("scene.particle")),1),x("dd",null,R(o.$t("help.particleDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("scene.collision")),1),x("dd",null,R(o.$t("help.colliderDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("scene.path")),1),x("dd",null,R(o.$t("help.pathDesc")),1)]),x("div",null,[a[25]||(a[25]=x("dt",null,"Spine",-1)),x("dd",null,R(o.$t("help.spineDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.commonOps")),1),x("dd",null,R(o.$t("help.sceneCommonDesc")),1)])])],512),[[Fi,i.value[1]]])],2),x("section",{class:Ie(["help-section help-module",{open:i.value[2]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[2]?"true":"false",onClick:a[2]||(a[2]=c=>i.value[2]=!i.value[2])},[a[26]||(a[26]=x("span",{class:"mnum"},"3",-1)),x("span",uU,R(o.$t("emission.title")),1),x("span",hU,R(i.value[2]?"▾":"▸"),1)],8,dU),me(x("div",fU,[x("dl",pU,[x("div",null,[x("dt",null,R(o.$t("emission.stream")),1),x("dd",null,R(o.$t("help.emissionDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("emission.burst")),1),x("dd",null,R(o.$t("help.burstDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("emission.delay")),1),x("dd",null,R(o.$t("help.delayDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("modifiers.showShape")),1),x("dd",null,R(o.$t("help.loopNote")),1)])])],512),[[Fi,i.value[2]]])],2),x("section",{class:Ie(["help-section help-module",{open:i.value[3]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[3]?"true":"false",onClick:a[3]||(a[3]=c=>i.value[3]=!i.value[3])},[a[27]||(a[27]=x("span",{class:"mnum"},"4",-1)),x("span",gU,R(o.$t("emission.shapeTitle")),1),x("span",vU,R(i.value[3]?"▾":"▸"),1)],8,mU),me(x("div",bU,[x("dl",yU,[x("div",null,[x("dt",null,R(o.$t("emission.shape")),1),x("dd",null,R(o.$t("help.shapeDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("emission.emissionAngle")),1),x("dd",null,R(o.$t("help.angleDesc")),1)])])],512),[[Fi,i.value[3]]])],2),x("section",{class:Ie(["help-section help-module",{open:i.value[4]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[4]?"true":"false",onClick:a[4]||(a[4]=c=>i.value[4]=!i.value[4])},[a[28]||(a[28]=x("span",{class:"mnum"},"5",-1)),x("span",wU,R(o.$t("attributes.title")),1),x("span",SU,R(i.value[4]?"▾":"▸"),1)],8,xU),me(x("div",CU,[x("dl",AU,[x("div",null,[x("dt",null,R(o.$t("attributes.initialParams")),1),x("dd",null,R(o.$t("help.initialDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("attributes.lifecycleTitle")),1),x("dd",null,R(o.$t("help.overLifeDesc")),1)])])],512),[[Fi,i.value[4]]])],2),x("section",{class:Ie(["help-section help-module",{open:i.value[5]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[5]?"true":"false",onClick:a[5]||(a[5]=c=>i.value[5]=!i.value[5])},[a[29]||(a[29]=x("span",{class:"mnum"},"6",-1)),x("span",EU,R(o.$t("appearance.title")),1),x("span",_U,R(i.value[5]?"▾":"▸"),1)],8,TU),me(x("div",MU,[x("dl",PU,[x("div",null,[x("dt",null,R(o.$t("appearance.opacity")),1),x("dd",null,R(o.$t("help.alphaDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("appearance.imageResources")),1),x("dd",null,R(o.$t("help.imageDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("image.sequence")),1),x("dd",null,R(o.$t("help.sequenceDesc")),1)])])],512),[[Fi,i.value[5]]])],2),x("section",{class:Ie(["help-section help-module",{open:i.value[6]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[6]?"true":"false",onClick:a[6]||(a[6]=c=>i.value[6]=!i.value[6])},[a[30]||(a[30]=x("span",{class:"mnum"},"7",-1)),x("span",kU,R(o.$t("modifiers.title")),1),x("span",RU,R(i.value[6]?"▾":"▸"),1)],8,IU),me(x("div",FU,[x("dl",LU,[x("div",null,[x("dt",null,R(o.$t("modifiers.enableNoise")),1),x("dd",null,R(o.$t("help.noiseDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("modifiers.enableGravity"))+" / "+R(o.$t("modifiers.enableWind")),1),x("dd",null,R(o.$t("help.gravityDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("modifiers.enableForceField"))+" / "+R(o.$t("modifiers.enableVortex"))+" / "+R(o.$t("modifiers.enableAttraction")),1),x("dd",null,R(o.$t("help.forceDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("modifiers.enableTrail")),1),x("dd",null,R(o.$t("help.trailDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("modifiers.enableFollow")),1),x("dd",null,R(o.$t("help.followDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("modifiers.enableCollision"))+" / "+R(o.$t("modifiers.damping")),1),x("dd",null,R(o.$t("help.collisionDesc")),1)])])],512),[[Fi,i.value[6]]])],2),x("section",{class:Ie(["help-section help-module",{open:i.value[7]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[7]?"true":"false",onClick:a[7]||(a[7]=c=>i.value[7]=!i.value[7])},[a[31]||(a[31]=x("span",{class:"mnum"},"8",-1)),x("span",OU,R(o.$t("export.title")),1),x("span",NU,R(i.value[7]?"▾":"▸"),1)],8,DU),me(x("div",$U,[x("dl",BU,[x("div",null,[x("dt",null,R(o.$t("export.imagesPath")),1),x("dd",null,R(o.$t("help.exportDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("export.spineVersion")),1),a[32]||(a[32]=x("dd",null,"3.8 / 4.0 / 4.1 / 4.2 / 4.3",-1))]),x("div",null,[x("dt",null,R(o.$t("export.keyframeCurve")),1),x("dd",null,R(o.$t("export.bezierHelp")),1)]),x("div",null,[x("dt",null,R(o.$t("export.fps")),1),x("dd",null,R(o.$t("export.fpsHelp")),1)]),x("div",null,[x("dt",null,R(o.$t("export.title")),1),x("dd",null,R(o.$t("help.exportButtonsDesc")),1)])])],512),[[Fi,i.value[7]]])],2),x("section",{class:Ie(["help-section help-module help-connector",{open:i.value[8]}])},[x("button",{type:"button",class:"help-module-head","aria-expanded":i.value[8]?"true":"false",onClick:a[8]||(a[8]=c=>i.value[8]=!i.value[8])},[a[33]||(a[33]=x("span",{class:"mnum"},"9",-1)),x("span",VU,R(o.$t("help.connectorTitle")),1),x("span",XU,R(i.value[8]?"▾":"▸"),1)],8,UU),me(x("div",YU,[x("p",zU,R(o.$t("help.connectorIntro")),1),x("dl",jU,[x("div",null,[x("dt",null,R(o.$t("help.prerequisite")),1),x("dd",null,R(o.$t("help.prerequisiteDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.download")),1),a[34]||(a[34]=x("dd",null,[x("a",{class:"dl-link",href:"/downloads/connector/SpineParticleConnector-windows-x64.exe",download:""},[bt("Windows"),x("br"),x("small",null,"SpineParticleConnector-windows-x64.exe")]),x("a",{class:"dl-link",href:"/downloads/connector/SpineParticleConnector-macos-universal.zip",download:""},[bt("macOS (Universal)"),x("br"),x("small",null,"SpineParticleConnector-macos-universal.zip")])],-1))]),x("div",null,[x("dt",null,R(o.$t("help.webSide")),1),x("dd",null,R(o.$t("help.webSideDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.authorization")),1),x("dd",null,R(o.$t("help.authorizationDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.pathSetup")),1),x("dd",null,R(o.$t("help.pathSetupDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.downloadResult")),1),x("dd",null,R(o.$t("help.downloadResultDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.version")),1),x("dd",null,R(o.$t("help.versionDesc")),1)]),x("div",null,[x("dt",null,R(o.$t("help.security")),1),x("dd",null,R(o.$t("help.securityDesc")),1)])])],512),[[Fi,i.value[8]]])],2),x("section",HU,[x("h3",null,R(o.$t("help.differenceTitle")),1),x("p",null,R(o.$t("help.differenceDesc")),1)])])])])):Ce("",!0)}}),li=(n,e)=>{const t=n.__vccOpts||n;for(const[i,s]of e)t[i]=s;return t},WU=li(GU,[["__scopeId","data-v-4bb9bc76"]]);function Na(n){const e=()=>{window.removeEventListener("pointermove",n),window.removeEventListener("pointerup",e),window.removeEventListener("pointercancel",e)};window.addEventListener("pointermove",n),window.addEventListener("pointerup",e),window.addEventListener("pointercancel",e)}function In(n,e,t){const i=n.holder.value,s=n.app(),r=i.getBoundingClientRect(),o=Math.max(1e-4,n.store.editor.viewScale),a=e-r.left,c=t-r.top;return{x:(a-s.screen.width/2-n.store.editor.viewX)/o,y:-(c-s.screen.height*.5-n.store.editor.viewY)/o}}function qU(n,e){const t=n.holder.value,i=n.app(),s=n.store,r=t.getBoundingClientRect(),o=e.clientX-r.left,a=e.clientY-r.top,c=e.deltaY<0?1.12:1/1.12,l=s.editor.viewScale,d=Math.max(.01,l*c),u=i.screen.width/2,h=i.screen.height*.5,f=s.editor.viewX,p=s.editor.viewY,m=(o-u-f)/l,g=(a-h-p)/l;s.editor.viewX=o-u-m*d,s.editor.viewY=a-h-g*d,s.editor.viewScale=d}function KU(n,e,t){const i=n.store,s=i.editor.viewX,r=i.editor.viewY;Na(o=>{i.editor.viewX=s+(o.clientX-e),i.editor.viewY=r+(o.clientY-t)})}function RA(n,e){const t=Math.max(.01,n.store.editor.viewScale*e);n.store.editor.viewScale=t}function JU(n){RA(n,1.2)}function ZU(n){RA(n,1/1.2)}function QU(n){n.store.editor.viewScale=1,n.store.editor.viewX=0,n.store.editor.viewY=0}function e5(n){n.store.editor.viewScale=1,n.store.editor.viewX=0,n.store.editor.viewY=0}function t5(n){n.store.settings.showGrid=!n.store.settings.showGrid}const i5={class:"topbar"},n5=["title"],s5=["disabled","title"],r5={class:"tool-group"},o5=["title"],a5=["title"],l5=["title"],c5=["title"],d5={class:"tool-group"},u5=["title"],h5=["title"],f5=["title"],p5=["title"],m5=["title"],g5=["title"],v5={key:0,class:"background-panel"},b5=["disabled"],y5=["title"],x5={class:"background-position-row"},w5=["aria-label"],S5=["aria-label"],C5={class:"background-opacity-row"},A5=["aria-label"],T5={class:"language-picker"},E5=["value","aria-label"],_5=["value"],M5=["title"],P5={class:"zoom-pct"},I5=qt({__name:"StageToolbar",props:{ctx:{},activeTool:{},showSettings:{type:Boolean},showHelp:{type:Boolean}},emits:["update:activeTool","update:showSettings","update:showHelp","clear-background","background-file"],setup(n,{emit:e}){const t=n,i=e,s=Go(),{t:r,locale:o}=fn(),a=$e(!1),c=$e(null),l=Fe(()=>s.settings.backgroundImageName);function d(y){i("update:activeTool",t.activeTool===y?"":y)}function u(){a.value=!a.value,a.value&&i("update:showSettings",!1)}function h(){const y=!t.showSettings;i("update:showSettings",y),y&&(a.value=!1)}function f(){i("update:showHelp",!0),a.value=!1,i("update:showSettings",!1)}function p(y){i("background-file",y)}function m(y=!0){c.value&&(c.value.value=""),i("clear-background",y)}function g(){kA()}function v(y){const b=y.target.value;gC(b)}return(y,b)=>(Q(),te("div",i5,[x("button",{class:"settings-btn",onClick:h,title:P(r)("toolbar.settings")},R(P(r)("toolbar.settings")),9,n5),x("button",{class:"undo-btn",disabled:P(ph).undoCount===0,onClick:g,title:P(r)("toolbar.undo")},"↶",8,s5),x("div",r5,[x("button",{class:Ie(["tool-btn",{on:n.activeTool===""}]),onClick:b[0]||(b[0]=w=>d("")),title:P(r)("toolbar.pan")},"✋",10,o5),x("button",{class:Ie(["tool-btn",{on:n.activeTool==="translate"}]),onClick:b[1]||(b[1]=w=>d("translate")),title:P(r)("toolbar.translate")},"✥",10,a5),x("button",{class:Ie(["tool-btn",{on:n.activeTool==="rotate"}]),onClick:b[2]||(b[2]=w=>d("rotate")),title:P(r)("toolbar.rotate")},"⟳",10,l5),x("button",{class:Ie(["tool-btn",{on:n.activeTool==="scale"}]),onClick:b[3]||(b[3]=w=>d("scale")),title:P(r)("toolbar.scale")},"⤢",10,c5)]),x("div",d5,[x("button",{class:"tool-btn",onClick:b[4]||(b[4]=w=>P(JU)(n.ctx)),title:P(r)("toolbar.zoomIn")},"+",8,u5),x("button",{class:"tool-btn",onClick:b[5]||(b[5]=w=>P(ZU)(n.ctx)),title:P(r)("toolbar.zoomOut")},"-",8,h5),x("button",{class:"tool-btn",onClick:b[6]||(b[6]=w=>P(QU)(n.ctx)),title:P(r)("toolbar.fitView")},"⤢",8,f5),x("button",{class:Ie(["tool-btn",{on:P(s).settings.showGrid}]),onClick:b[7]||(b[7]=w=>P(t5)(n.ctx)),title:P(r)("toolbar.toggleGrid")},"▦",10,p5),x("button",{class:"tool-btn",onClick:b[8]||(b[8]=w=>P(e5)(n.ctx)),title:P(r)("toolbar.resetView")},"⟳",8,m5)]),x("div",{class:"background-menu",onClick:b[14]||(b[14]=tt(()=>{},["stop"]))},[x("button",{class:Ie(["background-btn",{on:a.value}]),title:P(r)("toolbar.backgroundSettings"),onClick:u},R(P(r)("toolbar.background")),11,g5),a.value?(Q(),te("div",v5,[x("button",{class:"background-upload",onClick:b[9]||(b[9]=w=>{var C;return(C=c.value)==null?void 0:C.click()})},R(l.value?P(r)("toolbar.changeBackground"):P(r)("toolbar.uploadBackground")),1),x("button",{class:"background-clear",disabled:!l.value,onClick:b[10]||(b[10]=w=>m())},R(P(r)("toolbar.clearBackground")),9,b5),x("input",{ref_key:"backgroundFileInput",ref:c,class:"background-file-input",type:"file",accept:"image/png,image/jpeg,image/webp",onChange:p},null,544),x("div",{class:"background-file-name",title:l.value},R(l.value||P(r)("toolbar.noBackground")),9,y5),x("div",x5,[x("label",null,[b[15]||(b[15]=x("span",null,"X",-1)),me(x("input",{"onUpdate:modelValue":b[11]||(b[11]=w=>P(s).settings.backgroundX=w),type:"number",step:"1","aria-label":P(r)("toolbar.backgroundX")},null,8,w5),[[Je,P(s).settings.backgroundX,void 0,{number:!0}]])]),x("label",null,[b[16]||(b[16]=x("span",null,"Y",-1)),me(x("input",{"onUpdate:modelValue":b[12]||(b[12]=w=>P(s).settings.backgroundY=w),type:"number",step:"1","aria-label":P(r)("toolbar.backgroundY")},null,8,S5),[[Je,P(s).settings.backgroundY,void 0,{number:!0}]])])]),x("label",C5,[x("span",null,R(P(r)("toolbar.opacity")),1),me(x("input",{"onUpdate:modelValue":b[13]||(b[13]=w=>P(s).settings.backgroundOpacity=w),type:"range",min:"0",max:"1",step:"0.01","aria-label":P(r)("toolbar.backgroundOpacity")},null,8,A5),[[Je,P(s).settings.backgroundOpacity,void 0,{number:!0}]]),x("b",null,R(Math.round(P(s).settings.backgroundOpacity*100))+"%",1)])])):Ce("",!0)]),x("label",T5,[x("span",null,R(P(r)("language.label")),1),x("select",{value:P(o),"aria-label":P(r)("language.label"),onChange:v},[(Q(!0),te(_e,null,Pt(P(fC),w=>(Q(),te("option",{key:w.code,value:w.code},R(w.label),9,_5))),128))],40,E5)]),x("button",{class:Ie(["help-btn",{on:n.showHelp}]),title:P(r)("toolbar.openHelp"),onClick:f},R(P(r)("toolbar.help")),11,M5),x("span",P5,R(Math.round(P(s).editor.viewScale*100))+"%",1)]))}}),k5=li(I5,[["__scopeId","data-v-6411b316"]]),R5={key:0,class:"settings-panel"},F5={class:"sp-head"},L5={class:"sp-section-title"},D5={class:"sp-switch-row"},O5={class:"sp-switch-control"},N5=["aria-label"],$5={class:"sp-section-title"},B5={class:"sp-row"},U5=["aria-label"],V5={class:"sp-section-title"},X5={class:"sp-chk"},Y5={class:"sp-chk"},z5={class:"sp-row"},j5=["aria-label"],H5={class:"sp-row"},G5=["aria-label"],W5={class:"sp-chk"},q5={class:"sp-chk"},K5={class:"sp-row"},J5={class:"sp-row"},Z5={class:"sp-row"},Q5={class:"sp-hex"},e8={class:"sp-chk"},t8={class:"sp-cache-note"},i8=qt({__name:"StageSettingsPanel",props:{show:{type:Boolean}},emits:["close"],setup(n,{emit:e}){const t=e,i=Go(),{t:s}=fn();function r(a){N4(i,Number(a.target.value))}function o(){i.settings.bonePointDrawSize=Math.min(10,Math.max(.1,Number(i.settings.bonePointDrawSize)||1)),i.settings.boneAxisDrawSize=Math.min(10,Math.max(.1,Number(i.settings.boneAxisDrawSize)||2))}return(a,c)=>n.show?(Q(),te("div",R5,[x("div",F5,[bt(R(P(s)("settings.title"))+" ",1),x("button",{class:"sp-close",onClick:c[0]||(c[0]=l=>t("close"))},"✕")]),x("div",L5,R(P(s)("settings.layout")),1),x("label",D5,[x("span",null,R(P(s)("settings.parameterPanelPosition")),1),x("span",O5,[me(x("input",{type:"checkbox","onUpdate:modelValue":c[1]||(c[1]=l=>P(i).settings.parameterPanelOnRight=l),"aria-label":P(s)("settings.panelOnRight")},null,8,N5),[[Ct,P(i).settings.parameterPanelOnRight]]),c[15]||(c[15]=x("span",{class:"sp-switch-ui","aria-hidden":"true"},null,-1)),x("b",null,R(P(i).settings.parameterPanelOnRight?P(s)("common.right"):P(s)("common.left")),1)])]),c[16]||(c[16]=x("div",{class:"sp-divider"},null,-1)),x("div",$5,R(P(s)("settings.history")),1),x("label",B5,[x("span",null,R(P(s)("settings.maxUndo")),1),me(x("input",{class:"sp-num sp-undo-limit",type:"number",min:"1",max:"200","onUpdate:modelValue":c[2]||(c[2]=l=>P(i).settings.undoLimit=l),"aria-label":P(s)("settings.maxUndo"),onChange:r},null,40,U5),[[Je,P(i).settings.undoLimit,void 0,{number:!0}]])]),c[17]||(c[17]=x("div",{class:"sp-divider"},null,-1)),x("div",V5,R(P(s)("settings.canvasGuides")),1),x("label",X5,[me(x("input",{type:"checkbox","onUpdate:modelValue":c[3]||(c[3]=l=>P(i).settings.showEmitter=l)},null,512),[[Ct,P(i).settings.showEmitter]]),bt(R(P(s)("settings.emitter")),1)]),x("label",Y5,[me(x("input",{type:"checkbox","onUpdate:modelValue":c[4]||(c[4]=l=>P(i).settings.showBones=l)},null,512),[[Ct,P(i).settings.showBones]]),bt(R(P(s)("settings.bones")),1)]),P(i).settings.showBones?(Q(),te(_e,{key:0},[x("label",z5,[x("span",null,R(P(s)("settings.bonePointSize")),1),me(x("input",{class:"sp-num",type:"number",min:"0.1",max:"10",step:"0.1","onUpdate:modelValue":c[5]||(c[5]=l=>P(i).settings.bonePointDrawSize=l),"aria-label":P(s)("settings.bonePointSize"),onChange:o},null,40,j5),[[Je,P(i).settings.bonePointDrawSize,void 0,{number:!0}]])]),x("label",H5,[x("span",null,R(P(s)("settings.boneAxisSize")),1),me(x("input",{class:"sp-num",type:"number",min:"0.1",max:"10",step:"0.1","onUpdate:modelValue":c[6]||(c[6]=l=>P(i).settings.boneAxisDrawSize=l),"aria-label":P(s)("settings.boneAxisSize"),onChange:o},null,40,G5),[[Je,P(i).settings.boneAxisDrawSize,void 0,{number:!0}]])])],64)):Ce("",!0),x("label",W5,[me(x("input",{type:"checkbox","onUpdate:modelValue":c[7]||(c[7]=l=>P(i).settings.showSkinMesh=l)},null,512),[[Ct,P(i).settings.showSkinMesh]]),bt(R(P(s)("settings.skinMesh")),1)]),c[18]||(c[18]=x("div",{class:"sp-divider"},null,-1)),x("label",q5,[me(x("input",{type:"checkbox","onUpdate:modelValue":c[8]||(c[8]=l=>P(i).settings.tickEnabled=l)},null,512),[[Ct,P(i).settings.tickEnabled]]),bt(R(P(s)("settings.enableTicks")),1)]),P(i).settings.tickEnabled?(Q(),te(_e,{key:1},[x("label",K5,[x("span",null,R(P(s)("settings.tickFontSize")),1),me(x("input",{type:"range",min:"8",max:"40",step:"1","onUpdate:modelValue":c[9]||(c[9]=l=>P(i).settings.axisFontSize=l)},null,512),[[Je,P(i).settings.axisFontSize,void 0,{number:!0}]]),me(x("input",{type:"number",min:"8",max:"40","onUpdate:modelValue":c[10]||(c[10]=l=>P(i).settings.axisFontSize=l),class:"sp-num"},null,512),[[Je,P(i).settings.axisFontSize,void 0,{number:!0}]])]),x("label",J5,[x("span",null,R(P(s)("settings.tickWidth")),1),me(x("input",{type:"range",min:"1",max:"5",step:"0.5","onUpdate:modelValue":c[11]||(c[11]=l=>P(i).settings.tickWidth=l)},null,512),[[Je,P(i).settings.tickWidth,void 0,{number:!0}]]),me(x("input",{type:"number",min:"1",max:"5","onUpdate:modelValue":c[12]||(c[12]=l=>P(i).settings.tickWidth=l),class:"sp-num"},null,512),[[Je,P(i).settings.tickWidth,void 0,{number:!0}]])]),x("label",Z5,[x("span",null,R(P(s)("settings.axisColor")),1),me(x("input",{type:"color","onUpdate:modelValue":c[13]||(c[13]=l=>P(i).settings.axisColor=l),class:"sp-colr"},null,512),[[Je,P(i).settings.axisColor]]),x("span",Q5,R(P(i).settings.axisColor),1)]),x("label",e8,[me(x("input",{type:"checkbox","onUpdate:modelValue":c[14]||(c[14]=l=>P(i).settings.showAxisLabels=l)},null,512),[[Ct,P(i).settings.showAxisLabels]]),bt(R(P(s)("settings.showAxisLabels")),1)])],64)):Ce("",!0),x("div",t8,R(P(s)("settings.cacheNote")),1)])):Ce("",!0)}}),n8=li(i8,[["__scopeId","data-v-c1ded952"]]);class vp{constructor(){A(this,"sprite",null);A(this,"texture",null);A(this,"loadVersion",0)}createSprite(e){const t=new to(it.EMPTY);return t.anchor.set(.5),t.visible=!1,e.addChild(t),this.sprite=t,t}applyTransform(e,t,i){this.sprite&&(this.sprite.position.set(Number(e)||0,-(Number(t)||0)),this.sprite.alpha=Math.min(1,Math.max(0,Number(i)||0)))}async syncTexture(e){const t=++this.loadVersion;if(!e){this.sprite&&(this.sprite.texture=it.EMPTY,this.sprite.visible=!1),this.texture&&this.texture.destroy(!0),this.texture=null;return}try{const i=await it.fromURL(e);if(t!==this.loadVersion||!this.sprite){i.destroy(!0);return}const s=this.texture;this.texture=i,this.sprite.texture=i,this.sprite.visible=!0,s&&s.destroy(!0)}catch(i){console.error("背景图恢复失败",i)}}static clearStoreBackground(e,t){e.settings.backgroundImageData="",e.settings.backgroundImageName="",t&&(e.settings.backgroundX=0,e.settings.backgroundY=0,e.settings.backgroundOpacity=1)}static async handleFileChange(e,t){var r;const i=t.target,s=(r=i.files)==null?void 0:r[0];if(s)try{e.settings.backgroundImageData=await Id(s),e.settings.backgroundImageName=s.name}catch(o){console.error("背景图加载失败",o)}finally{i.value=""}}destroy(){this.loadVersion++,this.texture&&this.texture.destroy(!0),this.texture=null,this.sprite=null}}class s8{constructor(e){A(this,"selectedNodes",new Set);A(this,"suppressNextDoubleClick",!1);this.ctx=e}resetSelection(){this.selectedNodes.clear()}activePath(){const e=this.ctx.store;if(e.activeObjectType!=="path")return null;const t=e.paths.find(i=>i.id===e.activeObjectId)||null;return(t==null?void 0:t.visible)===!1?null:t}pathInsertIndex(e,t,i){if(e.points.length<2)return e.points.length;const s=e.closed?e.points.length:e.points.length-1;let r=e.points.length,o=1/0;for(let a=0;aMath.hypot(c.x-s.x,c.y-s.y)<=r);if(o>=0){t.points.splice(o,1),this.selectedNodes.clear();return}const a=this.pathInsertIndex(t,s.x,s.y);t.points.splice(a,0,{x:s.x,y:s.y,inX:0,inY:0,outX:0,outY:0}),this.selectedNodes.clear(),this.selectedNodes.add(a)}onPointerDown(e){const t=this.activePath();if(!t||!t.enabled)return!1;const i=In(this.ctx,e.clientX,e.clientY),s=aa(t,i.x,i.y),r=9/Math.max(.01,this.ctx.store.editor.viewScale);if(e.detail>=2){if(t.points.findIndex(u=>Math.hypot(u.x-s.x,u.y-s.y)<=r)>=0)return!0;const l={x:s.x,y:s.y,inX:0,inY:0,outX:0,outY:0},d=this.pathInsertIndex(t,s.x,s.y);return t.points.splice(d,0,l),this.selectedNodes.clear(),this.selectedNodes.add(d),this.suppressNextDoubleClick=!0,Na(u=>{const h=In(this.ctx,u.clientX,u.clientY),f=aa(t,h.x,h.y);l.outX=f.x-l.x,l.outY=f.y-l.y,l.inX=-l.outX,l.inY=-l.outY}),!0}let o=null;for(const c of this.selectedNodes){const l=t.points[c];l&&(Math.hypot(l.x+l.inX-s.x,l.y+l.inY-s.y)<=r&&(o={index:c,side:"in"}),Math.hypot(l.x+l.outX-s.x,l.y+l.outY-s.y)<=r&&(o={index:c,side:"out"}))}if(o){const c=t.points[o.index],l=o.side==="in"?Math.hypot(c.outX,c.outY):Math.hypot(c.inX,c.inY);return Na(u=>{const h=In(this.ctx,u.clientX,u.clientY),f=aa(t,h.x,h.y),p=f.x-c.x,m=f.y-c.y;if(o.side==="in"?(c.inX=p,c.inY=m):(c.outX=p,c.outY=m),!u.altKey){const g=Math.max(1e-4,Math.hypot(p,m)),v=u.shiftKey?g:l;o.side==="in"?(c.outX=-p/g*v,c.outY=-m/g*v):(c.inX=-p/g*v,c.inY=-m/g*v)}}),!0}const a=t.points.findIndex(c=>Math.hypot(c.x-s.x,c.y-s.y)<=r);if(a>=0){if(e.altKey)return this.selectedNodes.delete(a),!0;e.ctrlKey||e.metaKey?this.selectedNodes.add(a):this.selectedNodes.has(a)||(this.selectedNodes.clear(),this.selectedNodes.add(a));const c=s,l=[...this.selectedNodes].map(u=>({index:u,x:t.points[u].x,y:t.points[u].y}));return Na(u=>{const h=In(this.ctx,u.clientX,u.clientY),f=aa(t,h.x,h.y);for(const p of l)t.points[p.index].x=p.x+f.x-c.x,t.points[p.index].y=p.y+f.y-c.y}),!0}if(e.altKey&&!e.ctrlKey&&!e.metaKey)return this.selectedNodes.clear(),!0;if(e.ctrlKey||e.metaKey||e.altKey){const c=s,l=e.altKey,d=u=>{const h=In(this.ctx,u.clientX,u.clientY),f=aa(t,h.x,h.y),p=Math.min(c.x,f.x),m=Math.max(c.x,f.x),g=Math.min(c.y,f.y),v=Math.max(c.y,f.y);t.points.forEach((y,b)=>{y.x>=p&&y.x<=m&&y.y>=g&&y.y<=v&&(l?this.selectedNodes.delete(b):this.selectedNodes.add(b))}),window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",d)};return window.addEventListener("pointerup",d),window.addEventListener("pointercancel",d),!0}return!1}}class r8{constructor(e,t){this.ctx=e,this.getTool=t}onColliderPointerDown(e){const t=this.ctx.store;if(t.activeObjectType!=="collision")return!1;const i=t.colliders.find(y=>y.id===t.activeObjectId);if(!(i!=null&&i.enabled)||i.visible===!1)return!1;const s=In(this.ctx,e.clientX,e.clientY),r=i.rotation*Math.PI/180,o=Math.cos(r),a=Math.sin(r),c=Math.max(1e-4,Math.abs(i.scaleX??1)),l=Math.max(1e-4,Math.abs(i.scaleY??1)),d=s.x-i.x,u=s.y-i.y,h=(o*d+a*u)/c,f=(-a*d+o*u)/l;if(!(i.shape==="circle"?Math.hypot(h,f)<=i.radius:i.shape==="ellipse"?Math.hypot(h/Math.max(1,i.radiusX),f/Math.max(1,i.radiusY))<=1:Math.abs(h)<=i.width*.5&&Math.abs(f)<=i.height*.5))return!1;const m=i.x,g=i.y,v=s;return Na(y=>{const b=In(this.ctx,y.clientX,y.clientY);i.x=m+b.x-v.x,i.y=g+b.y-v.y}),!0}onForceFieldDown(e){const t=this.ctx.store.systems.find(d=>d.id===this.ctx.store.activeId);if((t==null?void 0:t.visible)===!1)return!1;const i=t==null?void 0:t.config;if(!(i!=null&&i.forceField)||!i.showForceFieldShape||i.forceRadius<=0)return!1;const s=In(this.ctx,e.clientX,e.clientY);if(Math.hypot(s.x-i.forceCenterX,s.y-i.forceCenterY)>i.forceRadius)return!1;const o=i.forceCenterX,a=i.forceCenterY;this.ctx.holder.value&&(this.ctx.holder.value.style.cursor="grabbing");const c=d=>{const u=In(this.ctx,d.clientX,d.clientY);i.forceCenterX=o+u.x-s.x,i.forceCenterY=a+u.y-s.y},l=()=>{this.ctx.holder.value&&(this.ctx.holder.value.style.cursor=""),window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",l),window.removeEventListener("pointercancel",l)};return window.addEventListener("pointermove",c),window.addEventListener("pointerup",l),window.addEventListener("pointercancel",l),e.preventDefault(),!0}onAttractionDown(e){const t=this.ctx.store.systems.find(u=>u.id===this.ctx.store.activeId);if((t==null?void 0:t.visible)===!1)return!1;const i=t==null?void 0:t.config;if(!(i!=null&&i.attraction)||!i.showAttractionShape)return!1;const s=In(this.ctx,e.clientX,e.clientY),r=Math.max(i.attractionRadius,12/Math.max(1e-4,this.ctx.store.editor.viewScale));if(Math.hypot(s.x-i.attractionCenterX,s.y-i.attractionCenterY)>r)return!1;const a=i.attractionCenterX,c=i.attractionCenterY;this.ctx.holder.value&&(this.ctx.holder.value.style.cursor="grabbing");const l=u=>{const h=In(this.ctx,u.clientX,u.clientY);i.attractionCenterX=a+h.x-s.x,i.attractionCenterY=c+h.y-s.y},d=()=>{this.ctx.holder.value&&(this.ctx.holder.value.style.cursor=""),window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",d),window.removeEventListener("pointercancel",d)};return window.addEventListener("pointermove",l),window.addEventListener("pointerup",d),window.addEventListener("pointercancel",d),e.preventDefault(),!0}selectedTransformTarget(){const e=this.ctx.store,t=e.activeObjectId;if(e.activeObjectType==="particle"){const r=e.systems.find(a=>a.id===t);if(!r||r.visible===!1)return null;const o=r.config;return{x:o.centerX,y:o.centerY,rotation:o.rootRotation,scaleX:o.rootScaleX??1,scaleY:o.rootScaleY??1,setPosition:(a,c)=>{o.centerX=a,o.centerY=c},setRotation:a=>{o.rootRotation=a},setScale:(a,c)=>{o.rootScaleX=a,o.rootScaleY=c}}}const s=(e.activeObjectType==="collision"?e.colliders:e.activeObjectType==="path"?e.paths:e.spines).find(r=>r.id===t);return!s||s.visible===!1?null:{x:Number(s.x)||0,y:Number(s.y)||0,rotation:Number(s.rotation)||0,scaleX:Math.max(.05,Number(s.scaleX)||1),scaleY:Math.max(.05,Number(s.scaleY)||1),setPosition:(r,o)=>{s.x=r,s.y=o},setRotation:r=>{s.rotation=r},setScale:(r,o)=>{s.scaleX=r,s.scaleY=o}}}onGizmoDown(e){const t=this.selectedTransformTarget();if(!t)return;const i=this.ctx.app(),s=this.ctx.store,r=s.editor.viewScale,o=this.ctx.holder.value.getBoundingClientRect(),a=o.left+i.screen.width/2+s.editor.viewX+t.x*r,c=o.top+i.screen.height*.5+s.editor.viewY+-t.y*r,l=e.clientX,d=e.clientY,u=this.getTool(),h=t.x,f=t.y,p=t.rotation,m=t.scaleX,g=t.scaleY,v=Math.hypot(l-a,d-c)||1,y=Math.atan2(d-c,l-a);Na(w=>{const C=(w.clientX-l)/r,T=(w.clientY-d)/r;if(u==="translate")t.setPosition(h+C,f-T);else if(u==="rotate"){const S=Math.atan2(w.clientY-c,w.clientX-a);t.setRotation(p-(S-y)*180/Math.PI)}else if(u==="scale"){const E=Math.hypot(w.clientX-a,w.clientY-c)/v;t.setScale(Math.max(.05,m*E),Math.max(.05,g*E))}})}}function tx(n,e,t,i,s){const r=1-s;return r*r*r*n+3*r*r*s*e+3*r*s*s*t+s*s*s*i}function ix(n,e,t){const i=n.rotation*Math.PI/180,s=Math.cos(i),r=Math.sin(i),o=Math.max(1e-4,Math.abs(n.scaleX??1)),a=Math.max(1e-4,Math.abs(n.scaleY??1));return{x:n.x+s*e*o-r*t*a,y:n.y+r*e*o+s*t*a}}function Qg(n,e){if(!n.points.length)return null;if(n.points.length===1)return{...ix(n,n.points[0].x,n.points[0].y),angle:n.rotation};const t=n.closed?n.points.length:n.points.length-1,i=[];let s=0;for(let p=0;p0&&v===0)continue;const y=v/20,b=tx(m.x,m.x+m.outX,g.x+g.inX,g.x,y),w=tx(m.y,m.y+m.outY,g.y+g.inY,g.y,y),C=ix(n,b,w),T=i[i.length-1];T&&(s+=Math.hypot(C.x-T.x,C.y-T.y)),i.push({...C,distance:s})}}const r=Math.min(1,Math.max(0,e))*s;let o=i.findIndex(p=>p.distance>=r);o<0&&(o=i.length-1);const a=i[o],c=i[Math.max(0,o-1)],l=i[Math.min(i.length-1,o+1)],d=c.distance,u=o>0?(r-d)/Math.max(1e-4,a.distance-d):0,h=c.x+(a.x-c.x)*Math.min(1,Math.max(0,u)),f=c.y+(a.y-c.y)*Math.min(1,Math.max(0,u));return{x:h,y:f,angle:Math.atan2(l.y-c.y,l.x-c.x)*180/Math.PI}}function o8(n,e,t){if(e.renderLayerMode!=="slot")return null;const i=n.find(o=>o.id===e.renderLayerSpineId&&o.enabled&&o.status==="ready");if(!i)return null;const s=i.slots||[],r=s.find(o=>o.name===e.renderLayerSlotName);if(!r)return null;if(e.renderLayerSlotPosition==="below"){let o="";if(t!=null&&t.length){const a=t.indexOf(r.name);if(a===0)return null;a>0&&(o=t[a-1])}if(!o){const a=s.filter(c=>c.orderl.order-c.order)[0];if(!a)return null;o=a.name}return{spineId:i.id,slotName:o,targetSlotName:r.name,followAttachment:!1}}return{spineId:i.id,slotName:r.name,targetSlotName:r.name,followAttachment:e.renderLayerFollowAttachment}}function Cu(n,e,t,i=Math.max(1e-4,Math.abs(n.rootScaleX)),s=Math.max(1e-4,Math.abs(n.rootScaleY))){const r=-n.rootRotation*Math.PI/180,o=Math.cos(r),a=Math.sin(r),c=e-n.centerX,l=-t+n.centerY;return{x:(o*c+a*l)/i,y:(-a*c+o*l)/s}}function a8(n,e,t){const i=Qg(e,t);if(!i)return null;const s=Cu(n,i.x,i.y),r=i.angle*Math.PI/180,o=Cu(n,i.x+Math.cos(r),i.y+Math.sin(r)),a=Math.atan2(o.y-s.y,o.x-s.x)*180/Math.PI;return{...s,angle:a}}function l8(n,e){return n.colliders.map(t=>{if(!t.followPath||!t.followPathId)return t;const i=n.paths.find(d=>d.id===t.followPathId&&d.enabled);if(!(i!=null&&i.points.length))return t;const s=Math.max(.05,Number(t.followDuration)||2),r=Math.min(1,Math.max(0,e/s)),o=Array.isArray(t.followCurve)?t.followCurve:[{x:0,y:0},{x:1,y:1}],a=t.followCurveMode==="跟随导出"?n.settings.exportSettings.keyframeCurve==="bezier"?"bezier":"linear":t.followCurveMode==="贝塞尔"?"bezier":"linear",c=Math.min(1,Math.max(0,yC(o,r,a))),l=Qg(i,c);return l?{...t,x:l.x,y:l.y,rotation:t.rotation+(t.followPathRotation?l.angle:0)}:t})}class c8{constructor(){A(this,"emitters",new Map);A(this,"configs",new Map);A(this,"store",null);A(this,"eventsSuspended",!1);A(this,"subEmitterState",new Map);A(this,"slotGroups",new Map)}sync(e,t,i,s,r=null){this.store=e;for(const[c,l]of this.emitters){const d=e.systems.find(u=>u.id===c);(!d||this.configs.get(c)!==d.config)&&(l.removeFromParent(),l.destroy({children:!0}),this.emitters.delete(c),this.configs.delete(c))}for(const c of e.systems){i&&!c.config.texture&&(c.config.texture=i);const l=lr(c.config);if(s)for(const u of l.trailResources)!u.texture&&(u.previewUrl==="/images/trail.png"||u.previewUrl==="/trails/trail.png")&&(u.texture=s);if(i)for(const u of l.imageResources)!u.texture&&u.textureName==="star"&&(u.texture=i);if(this.emitters.has(c.id))continue;const d=new oy(c.config);d.onParticleEvent=u=>this.handleParticleEvent(c.id,u),t.addChild(d),this.emitters.set(c.id,d),this.configs.set(c.id,c.config)}const o=Xa(e.systems);for(const c of e.systems){const l=this.emitters.get(c.id);if(!l)continue;l.onParticleEvent||(l.onParticleEvent=u=>this.handleParticleEvent(c.id,u));const d=o.has(c.id);this.subEmitterState.get(c.id)!==d&&(d&&l.clear(),this.subEmitterState.set(c.id,d)),l.setAutoEmission(!d)}const a=new Set;for(const c of e.systems){const l=this.emitters.get(c.id);if(!l)continue;const d=r&&c.config.renderLayerMode==="slot"?r.getDrawOrder(c.config.renderLayerSpineId):null,u=o8(e.spines,c.config,d),h=u&&r?this.ensureSlotGroup(u,r,c.config):null;h?(a.add(h.key),l.parent!==h.compensator&&h.compensator.addChild(l)):l.parent!==t&&t.addChild(l)}for(const[c,l]of[...this.slotGroups])if(!a.has(c)){for(const d of[...l.compensator.children])d instanceof oy&&d.parent===l.compensator&&t.addChild(d);r==null||r.detachSlotObject(l.spineId,l.slotName,l.wrapper),l.wrapper.removeFromParent(),l.wrapper.removeChild(l.compensator),l.compensator.destroy(),l.wrapper.destroy(),this.slotGroups.delete(c)}}ensureSlotGroup(e,t,i){const s=`${e.spineId}:${e.targetSlotName}:${i.renderLayerSlotPosition}`;let r=this.slotGroups.get(s);if(!r){const o=new _i,a=new _i;o.addChild(a),r={key:s,spineId:e.spineId,slotName:e.slotName,wrapper:o,compensator:a,followAttachment:i.renderLayerFollowAttachment,attached:!1},this.slotGroups.set(s,r)}return(!r.attached||!r.wrapper.parent||r.slotName!==e.slotName)&&(r.wrapper.parent&&t.detachSlotObject(r.spineId,r.slotName,r.wrapper),r.slotName=e.slotName,r.attached=t.attachSlotObject(r.spineId,r.slotName,r.wrapper,e.followAttachment)),r.attached?r:null}updateRenderCompensation(e,t){if(t)for(const i of this.slotGroups.values()){if(!i.attached||!i.wrapper.parent)continue;const s=e.spines.find(o=>o.id===i.spineId);if(!s)continue;const r=t.getSlotParentMatrix(i.spineId,i.slotName,s);r&&(r.invert(),i.compensator.transform.setFromMatrix(r))}}suspendEvents(e){this.eventsSuspended=e}handleParticleEvent(e,t){if(this.eventsSuspended)return;const i=this.store;if(!i)return;const s=i.systems.find(o=>o.id===e),r=s==null?void 0:s.config;if(!(!(r!=null&&r.eventEnabled)||!Array.isArray(r.events)||!r.events.length)&&!(t.depth>=2))for(const o of r.events){if(o.event!==t.kind||o.event==="collision"&&t.collisionCount>o.collisionLimit||o.targetSystemId<=0||o.targetSystemId===e)continue;const a=Math.min(1,Math.max(0,Number(o.probability)||0));if(a<=0)continue;const c=(Math.imul(o.id+1,2654435761)^Math.imul(t.depth+1,2246822507))>>>0;if(Pr(r.seed>>>0,t.spawnId+1,c)>=a)continue;const d=this.emitters.get(o.targetSystemId);if(!d)continue;const u=Array.isArray(o.inherit)?o.inherit:[],h=u.length?{attributes:u,colorMode:o.colorInheritMode==="replace"?"replace":"add",data:{colorHex:t.colorHex,scaleX:t.scaleX,scaleY:t.scaleY,rotation:t.rotation,life:t.maxLife}}:void 0;d.spawnEventParticle(t.worldX,t.worldY,t.depth+1,h)}}destroy(e){for(const t of this.slotGroups.values()){for(const i of[...t.compensator.children])t.compensator.removeChild(i);t.wrapper.removeFromParent(),t.compensator.destroy(),t.wrapper.destroy()}this.slotGroups.clear();for(const[t,i]of this.emitters)i.removeFromParent(),i.destroy({children:!0}),this.emitters.delete(t),this.configs.delete(t)}}async function d8(){const[n,e]=await Promise.all([it.fromURL("/images/star.png"),it.fromURL("/images/trail.png")]);return{dotTex:n,trailTex:e}}function u8(n,e,t){for(const i of n.systems){i.config.texture=e;const s=lr(i.config);if(t)for(const r of s.trailResources)!r.texture&&(r.previewUrl==="/images/trail.png"||r.previewUrl==="/trails/trail.png")&&(r.texture=t);for(const r of s.imageResources)!r.texture&&r.textureName==="star"&&(r.texture=e)}}const h8={class:"stage-wrap"},f8={key:0,class:"hud"},p8={class:"hud-number hud-system-count"},m8={class:"hud-number hud-particle-count"},g8={class:"hud-tip"},v8=qt({__name:"Stage",setup(n){const e=Go(),t=$e(null),i=$e(null),s=$e(!1),r=$e(!1),o=$e(""),a=$e(!1);e.settings.undoLimit>0||(e.settings.undoLimit=20),e.settings.parameterPanelOnRight==null&&(e.settings.parameterPanelOnRight=!0),Number.isFinite(e.settings.backgroundX)||(e.settings.backgroundX=0),Number.isFinite(e.settings.backgroundY)||(e.settings.backgroundY=0),Number.isFinite(e.settings.backgroundOpacity)||(e.settings.backgroundOpacity=1),e.settings.backgroundImageName==null&&(e.settings.backgroundImageName=""),e.settings.backgroundImageData==null&&(e.settings.backgroundImageData=""),e.settings.showEmitter==null&&(e.settings.showEmitter=!0),e.settings.showBones==null&&(e.settings.showBones=!1),e.settings.bonePointDrawSize>0||(e.settings.bonePointDrawSize=1),e.settings.boneAxisDrawSize>0||(e.settings.boneAxisDrawSize=2),e.settings.showSkinMesh==null&&(e.settings.showSkinMesh=!1),e.settings.showGrid==null&&(e.settings.showGrid=!0);let c=null,l=null,d=null,u=null,h=null,f=null,p=null,m=null,g=null,v=null,y=null,b=null,w=null,C=null,T=null,S=[],E=0,_=0,I=0,M=0,k=null,B=null;const D=new vp,G=new c8,V={store:e,holder:t,app:()=>c},Y=new s8(V),L=new r8(V,()=>o.value);let N=[];const F=new Map;function $(){l=new _i,c.stage.addChild(l),C=new _i,c.stage.addChild(C),D.createSprite(l),w=new Ki,l.addChild(w),T=new GB,l.addChild(T.container),u=new Ki,l.addChild(u),d=new Ki,l.addChild(d),f=new Ki,l.addChild(f),p=new Ki,l.addChild(p),m=new Ki,l.addChild(m),g=new Ki,l.addChild(g),v=new Ki,l.addChild(v),y=new Ki,l.addChild(y),b=new Ki,l.addChild(b),h=new Ki,l.addChild(h)}function X(be){if(be.button===0){if(o.value&&L.selectedTransformTarget()){L.onGizmoDown(be);return}Y.onPointerDown(be)||L.onColliderPointerDown(be)||L.onAttractionDown(be)||L.onForceFieldDown(be)||KU(V,be.clientX,be.clientY)}}function z(be){Y.onStageDoubleClick(be)}function K(be){qU(V,be)}function J(be=!0){vp.clearStoreBackground(e,be)}async function oe(be){await vp.handleFileChange(e,be)}B4({canvasElement:t,canvasFocused:a,undo:kA,save:()=>TA(e),togglePlay:()=>e.togglePlay(),toStart:()=>e.toStart(),setTool:be=>{o.value=be}});function le(){l&&G.sync(e,l,k,B,T)}function ve(be,q,Z,se){const j=Math.max(2,Math.floor(se)||2);if(be.config.mode==="stream"&&be.config.streamBehavior==="loop"){jy(be,q,Z,j);return}q.reset();const H=1/Math.max(1,Z),O=[];for(let U=0;U=q)continue;const H=G.emitters.get(j.id);H&&ve(j,H,be,q)}}finally{G.suspendEvents(!1)}e.systems.every(j=>{var H;return(((H=j.frames)==null?void 0:H.length)||0)>=q})&&(e.timeline.recorded=!0)}function fe(){var Z,se,j,H;M=requestAnimationFrame(fe);const be=performance.now()/1e3;let q=be-E;if(E=be,q>.1&&(q=.1),c&&l){l.scale.set(e.editor.viewScale),l.position.set(c.screen.width/2+e.editor.viewX,c.screen.height*.5+e.editor.viewY),D.applyTransform(e.settings.backgroundX,e.settings.backgroundY,e.settings.backgroundOpacity),PB(e,c,w,C,S);const O=Math.max(1,e.timeline.fps),U=e.timeline.frame,W=U/O;T==null||T.sync(e.spines,U,O),le(),G.updateRenderCompensation(e,T),N=l8(e,W);for(const Le of e.systems){const Ee=G.emitters.get(Le.id);if(!Ee)continue;Ee.setFollowExportCurveMode(e.settings.exportSettings.keyframeCurve==="bezier"?"贝塞尔":"线性");const Ze=Le.visible!==!1;Ee.visible=Ze,Ee.renderable=Ze;const Te=Le.config;Ee.scale.set(Te.rootScaleX,Te.rootScaleY);const vi=new Set(Te.collisionColliderIds);Ee.setColliders(Te.collision?N.filter(Ut=>vi.has(Ut.id)):[]),Ee.setEmitterFollowSpawn(0,0,0);let lt={x:Te.centerX,y:Te.centerY,rotation:Te.rootRotation};const ce=Te.emitterFollow&&Te.emitterFollowMode==="bone"?e.spines.find(Ut=>Ut.id===Te.emitterFollowSpineId&&Ut.enabled&&Ut.status==="ready"):null,he=ce&&(T==null?void 0:T.getBoneWorldTransform(ce.id,Te.emitterFollowBoneName))||null,nt=Te.emitterFollow&&Te.emitterFollowMode==="path"?e.paths.find(Ut=>Ut.id===Te.emitterFollowPathId&&Ut.enabled):null,Ft=Math.max(.05,Te.emitterFollowDuration),Nt=Math.min(1,Math.max(0,W/Ft)),ct=Math.min(1,Math.max(0,yC(Te.emitterFollowCurve,Nt))),rn=Math.min(1,Math.max(0,Te.emitterFollowOffset)),Nn=Te.emitterFollowDirection==="reverse"?(1-rn)*(1-ct):rn+(1-rn)*ct,jt=nt?Qg(nt,Nn):null;if(he){const Ut=Te.emitterFollowBoneOffsetX,on=Te.emitterFollowBoneOffsetY,fi=he.x+Ut,$n=he.y+on,Fs=Te.rootRotation+Te.emitterFollowBoneRotation,An=Math.max(1e-4,Math.abs(Te.rootScaleX*Te.emitterFollowBoneScaleX)),pn=Math.max(1e-4,Math.abs(Te.rootScaleY*Te.emitterFollowBoneScaleY));if(lt={x:fi,y:$n,rotation:Fs},Te.emitterFollowSpace==="local")Ee.position.set(fi,-$n),Ee.rotation=-Fs*Math.PI/180,Ee.scale.set(An,pn),Ee.setSimulationTransform(fi,$n,Fs,An,pn);else{Ee.position.set(Te.centerX,-Te.centerY),Ee.rotation=-Te.rootRotation*Math.PI/180,Ee.scale.set(An,pn),Ee.setSimulationTransform(Te.centerX,Te.centerY,Te.rootRotation,An,pn);const br=Cu(Te,fi,$n,An,pn),yr=-(Fs-Te.rootRotation);Ee.setEmitterFollowSpawn(br.x,br.y,yr)}}else if(jt){const Ut=jt.angle+(Te.emitterFollowDirection==="reverse"?180:0),on=Te.emitterAngleMode==="direction"?Ut:Te.rootRotation;if(lt={x:jt.x,y:jt.y,rotation:on},Te.emitterFollowSpace==="local")Ee.position.set(jt.x,-jt.y),Ee.rotation=-on*Math.PI/180,Ee.setSimulationTransform(jt.x,jt.y,on);else{Ee.position.set(Te.centerX,-Te.centerY),Ee.rotation=-Te.rootRotation*Math.PI/180,Ee.setSimulationTransform(Te.centerX,Te.centerY,Te.rootRotation);const fi=Cu(Te,jt.x,jt.y),$n=Te.emitterAngleMode==="direction"?-(Ut-Te.rootRotation):0;Ee.setEmitterFollowSpawn(fi.x,fi.y,$n)}}else Ee.position.set(Te.centerX,-Te.centerY),Ee.rotation=-Te.rootRotation*Math.PI/180,Ee.setSimulationTransform(Te.centerX,Te.centerY,Te.rootRotation);const $i=Te.shape==="path"&&Te.spawnPathId>0&&e.paths.find(Ut=>Ut.id===Te.spawnPathId&&Ut.enabled&&Ut.points.length>0)||null;Ee.setSpawnPathSampler($i?Ut=>a8(Te,$i,Ut):null,($i==null?void 0:$i.closed)===!0),F.set(Le.id,lt)}let ee=0;const ne=[],ue=e.settings.showBones&&e.activeObjectType==="particle"?e.activeObjectId:0,xe=(Le,Ee,Ze)=>{!Le||Le.id!==ue||Le.visible===!1||VB(ne,Ze,Ee.position.x,Ee.position.y)},ye=e.timeline,Ne=e.playbackRange,Be=ye.fps,de=1/Math.max(1,Be);let ge=I,Ge=0;if(ye.playing?(_+=q,Ge=Math.floor(_/de),Ge>0&&(_-=Ge*de)):(_=0,Se(Be)),ye.playing&&Ge>0)for(let Le=0;Lelt.id===e.activeId),Ze=(Ee==null?void 0:Ee.config.mode)==="stream"&&Ee.config.streamBehavior==="loop"?IS(Ee.config,Be):null,vi=ye.loop&&ye.abLoop&&(Ze==null?void 0:Ze.start)===Ne.start&&Ze.end===Ne.end?Ne.end-1:Ne.end;if(ye.frame>vi)if(ye.loop)ye.frame=Ne.start;else{ye.frame=Ne.end,ye.playing=!1;break}}else{G.suspendEvents(!0);try{const Ee=Xa(e.systems);for(const Ze of e.systems){const Te=G.emitters.get(Ze.id);if(!Te)continue;!Ee.has(Ze.id)&&Ze.config.mode==="stream"&&Ze.config.streamBehavior==="loop"?(Z=Ze.frames)!=null&&Z.length||jy(Ze,Te,Be,ye.totalFrames):ye.frame===0&&Te.reset()}}finally{G.suspendEvents(!1)}for(const[Ee,Ze]of G.emitters){const Te=e.systems.find(nt=>nt.id===Ee),vi=(Te==null?void 0:Te.config.mode)==="stream"&&Te.config.streamBehavior==="loop",lt=vi?(se=Te.frames)==null?void 0:se[ye.frame]:void 0,ce=ye.frame===0&&!vi,he=ce?[]:lt||Ze.update(de);if(ce?Ze.apply([]):lt&&Ze.apply(lt),(Te==null?void 0:Te.visible)!==!1)for(const nt of he)nt.active&&xe(Te,Ze,nt);ee+=he.length}for(const Ee of e.systems){if(!Ee.config.texture)continue;Ee.frames=Ee.frames||[];const Ze=G.emitters.get(Ee.id);Ze&&!(Ee.config.mode==="stream"&&Ee.config.streamBehavior==="loop")&&(Ee.frames[ye.frame]=Ze.capture())}ye.frame++,ye.frame>=ye.totalFrames&&(ye.frame=Ne.start,ye.recorded=!0)}else{ye.playing||(ge=ye.frame);for(const Le of e.systems){const Ee=G.emitters.get(Le.id),Ze=ye.playing?I:ye.frame,Te=(H=Le.frames)==null?void 0:H[Ze],vi=Le.config.mode==="stream"&&Le.config.streamBehavior==="loop"&&!!Te;if((ye.recorded||vi)&&Ee&&Te){Ee.apply(Te);for(const lt of Te)lt.active&&(xe(Le,Ee,lt),ee++)}else if(Ee){const lt=ye.frame===0?[]:Ee.update(0);if(ye.frame===0&&Ee.apply([]),Le.visible!==!1)for(const ce of lt)ce.active&&xe(Le,Ee,ce);ee+=Ee.activeCount}}}I=ge,T==null||T.sync(e.spines,ge,Be);for(const[,Le]of G.emitters)Le.drawTrailMeshDebug(e.settings.showSkinMesh);BB(e,N,v),UB(e,Y.selectedNodes,y),OB(e,T,u),IB(e,F,d),kB(e,F,f),RB(e,p),FB(e,m),LB(e,g),NB(o,L.selectedTransformTarget.bind(L),b),XB(ne,e,h),i.value&&(i.value.systems=e.systems.length,i.value.particles=ee)}}return Sn(async()=>{const be=t.value;c=new tS({width:be.clientWidth||800,height:be.clientHeight||600,backgroundAlpha:0,antialias:!0}),be.appendChild(c.view),$(),ei(()=>e.settings.backgroundImageData,Z=>D.syncTexture(Z),{immediate:!0});const q=await d8();k=q.dotTex,B=q.trailTex,u8(e,k,B),i.value={systems:e.systems.length,particles:0},e.timeline.recorded=!1,e.timeline.frame=0,_=0,I=0,e.timeline.playing=!0,e.timeline.loop=!0;for(const Z of e.systems)Z.frames=[];e.recalcTotalFrames(),E=performance.now()/1e3,fe(),ei(()=>e.systems.map(Z=>JSON.stringify(Z.config,(se,j)=>se==="texture"||se==="trailTexture"||se==="previewUrl"?void 0:j)).join("|")+`|colliders:${JSON.stringify(e.colliders)}|paths:${JSON.stringify(e.paths)}`,()=>{e.recalcTotalFrames(),e.timeline.recorded=!1,e.timeline.frame=0;for(const Z of e.systems)Z.frames=[];e.timeline.playing=!0,e.timeline.loop=!0}),O4(e)}),Za(()=>{cancelAnimationFrame(M),T==null||T.destroy(),T=null,D.destroy(),l&&c&&G.destroy(l),c&&(c.destroy(!0,{children:!0}),c=null)}),ei(()=>[e.activeObjectType,e.activeObjectId],()=>Y.resetSelection()),(be,q)=>(Q(),te("div",h8,[x("div",{ref_key:"holder",ref:t,class:Ie(["stage-holder",{grid:P(e).settings.showGrid}]),tabindex:"0",onWheel:tt(K,["prevent"]),onPointerdown:X,onDblclick:tt(z,["prevent"])},null,34),Ae(k5,{ctx:V,"active-tool":o.value,"show-settings":s.value,"show-help":r.value,"onUpdate:activeTool":q[0]||(q[0]=Z=>o.value=Z),"onUpdate:showSettings":q[1]||(q[1]=Z=>s.value=Z),"onUpdate:showHelp":q[2]||(q[2]=Z=>r.value=Z),onClearBackground:J,onBackgroundFile:oe},null,8,["active-tool","show-settings","show-help"]),Ae(n8,{show:s.value,onClose:q[3]||(q[3]=Z=>s.value=!1)},null,8,["show"]),Ae(WU,{show:r.value,onClose:q[4]||(q[4]=Z=>r.value=!1)},null,8,["show"]),i.value?(Q(),te("div",f8,[bt(R(be.$t("app.systems"))+": ",1),x("b",p8,R(i.value.systems),1),bt(" · "+R(be.$t("app.particlesBones"))+": ",1),x("b",m8,R(i.value.particles),1),bt(" · "+R(be.$t("app.rootBone"))+": ",1),q[5]||(q[5]=x("b",null,"root",-1)),x("span",g8,R(be.$t("app.hudTip")),1)])):Ce("",!0)]))}}),b8=li(v8,[["__scopeId","data-v-1023341a"]]),y8=[{x:0,y:0},{x:1,y:1}],Dm=[{x:0,y:1},{x:1,y:1}],x8=[{x:0,y:0},{x:.2,y:1},{x:.8,y:1},{x:1,y:0}],Om=[{x:0,y:0},{x:.1,y:1},{x:.9,y:1},{x:1,y:0}],Nm=[{x:0,y:1},{x:1,y:1}],$m=[{x:0,y:1},{x:1,y:1}],di=zo({visible:!1,title:"",detail:"",progress:0,indeterminate:!1,failed:!1});let hd=0;function w8(n){return new Promise(e=>window.setTimeout(e,n))}function FA(n,e){const t=++hd,i=performance.now();Object.assign(di,{visible:!0,title:n,detail:e,progress:0,indeterminate:!1,failed:!1});const s=(o,a)=>{t===hd&&(di.indeterminate=o==null,o!=null&&(di.progress=Math.min(100,Math.max(0,o))),a&&(di.detail=a))},r=async(o,a)=>{if(t!==hd)return;di.failed=o,di.indeterminate=!1,di.progress=o?di.progress:100,di.detail=a,await w8(Math.max(180,(o?850:450)-(performance.now()-i))),t===hd&&(di.visible=!1)};return{update:s,paint:()=>new Promise(o=>requestAnimationFrame(()=>o())),finish:(o=Ye("transfer.completed"))=>r(!1,o),fail:(o=Ye("transfer.failed"))=>r(!0,o)}}async function S8(n,e){if(!n.body)return e(null),n.text();const t=Number(n.headers.get("content-length")),i=Number.isFinite(t)&&t>0,s=n.body.getReader(),r=new TextDecoder;let o=0,a="";for(e(i?0:null);;){const{done:c,value:l}=await s.read();if(c)break;o+=l.byteLength,a+=r.decode(l,{stream:!0}),e(i?Math.min(1,o/t):null)}return a+=r.decode(),i&&e(1),a}const C8="3.8";function kn(n,e,t){n[e]==null&&n[t]!=null&&(n[e]=n[t]),delete n[t]}function Bm(n){if(!n||typeof n!="object")return;if(Array.isArray(n)){for(const t of n)Bm(t);return}const e=n;Array.isArray(e.curve)&&delete e.curve;for(const t of Object.values(e))Bm(t)}function A8(n){for(const e of n.bones)kn(e,"transform","inherit");for(const e of n.transform||[])kn(e,"rotateMix","mixRotate"),e.translateMix==null&&(e.translateMix=e.mixX??e.mixY),e.scaleMix==null&&(e.scaleMix=e.mixScaleX??e.mixScaleY),kn(e,"shearMix","mixShearY"),delete e.mixX,delete e.mixY,delete e.mixScaleX,delete e.mixScaleY;for(const e of n.path||[])kn(e,"rotateMix","mixRotate"),e.translateMix==null&&(e.translateMix=e.mixX??e.mixY),delete e.mixX,delete e.mixY;for(const e of n.skins)for(const t of Object.values(e.attachments||{}))for(const i of Object.values(t||{}))i.parent!=null&&kn(i,"deform","timelines")}function T8(n){for(const e of Object.values(n.slots||{}))kn(e,"color","rgba"),kn(e,"twoColor","rgba2")}function E8(n){for(const e of Object.values(n.bones||{}))for(const t of e.rotate||[])kn(t,"angle","value")}function _8(n){for(const e of Object.values(n.transform||{}))for(const t of e)kn(t,"rotateMix","mixRotate"),t.translateMix==null&&(t.translateMix=t.mixX??t.mixY),t.scaleMix==null&&(t.scaleMix=t.mixScaleX??t.mixScaleY),kn(t,"shearMix","mixShearY"),delete t.mixX,delete t.mixY,delete t.mixScaleX,delete t.mixScaleY}function M8(n){for(const e of Object.values(n.path||{})){for(const t of["position","spacing"])for(const i of e[t]||[])kn(i,t,"value");for(const t of e.mix||[])kn(t,"rotateMix","mixRotate"),t.translateMix==null&&(t.translateMix=t.mixX??t.mixY),delete t.mixX,delete t.mixY}}function P8(n){if(!n.attachments)return;const e=n.deform||(n.deform={});for(const[t,i]of Object.entries(n.attachments)){const s=e[t]||(e[t]={});for(const[r,o]of Object.entries(i)){const a=s[r]||(s[r]={});for(const[c,l]of Object.entries(o))l.deform&&(a[c]=l.deform)}}delete n.attachments}function I8(n){n.skeleton.spine=C8,A8(n);for(const e of Object.values(n.animations))T8(e),E8(e),_8(e),M8(e),P8(e);return Bm(n.animations),n}function k8(n,e,t,i,s=!1){if(s){let c=0;for(let l=0;l[...s].sort((a,c)=>a-c);let o=!0;for(;o;){o=!1;const a=r();for(let c=0;cf&&(f=m,h=p)}h>=0&&(s.add(h),o=!0)}}return r().map(a=>n[a])}function nx(n,e,t,i,s){const r=t-e+1;if(r<2)return 0;const o=s?e:t,a=s?e+1:t-1,c=s?e+2:t-2,l=Math.abs(n[a].frame-n[o].frame);if(r>=3&&l>0&&Math.abs(Math.abs(n[c].frame-n[a].frame)-l)<1e-6){const u=n[o].values[i],h=n[a].values[i],f=n[c].values[i];return s?(-3*u+4*h-f)/(2*l):(3*u-4*h+f)/(2*l)}const d=n[a].frame-n[o].frame;return d?(n[a].values[i]-n[o].values[i])/d:0}function sx(n,e,t){const i=n[t].frame-n[e].frame,s=[];for(let r=0;rh.values[r])),l=Math.max(...n.slice(e,t+1).map(h=>h.values[r])),d=o+nx(n,e,t,r,!0)*i/3,u=a-nx(n,e,t,r,!1)*i/3;s.push([Math.max(c,Math.min(l,d)),Math.max(c,Math.min(l,u))])}return{values:s}}function R8(n,e,t,i,s){const r=1-s;return r*r*r*n+3*r*r*s*e+3*r*s*s*t+s*s*s*i}function F8(n,e,t,i,s,r=!1){if(r){let l=0;for(let d=0;d[...s].sort((c,l)=>c-l);let o=!0;for(;o;){o=!1;const c=r();for(let l=0;lm&&(m=v,p=g)}p>=0&&(s.add(p),o=!0)}}const a=r();return{samples:a.map(c=>n[c]),controls:a.slice(0,-1).map((c,l)=>sx(n,c,a[l+1]))}}function L8(n){if(!n.length)return[];const e=[n[0]];for(let t=1;t180;)i-=360;for(;i-e[t-1]<-180;)i+=360;e.push(i)}return e}function mi(n){if(!Number.isFinite(n))return 0;const e=Math.round(n*1e5)/1e5;return Object.is(e,-0)?0:e}function D8(n,e,t,i){const s=Math.max(2,Math.min(16,Math.round(Number(n.trailGridRows)||2))),r=Math.max(2,Math.min(32,Math.round(Number(n.trailGridCols)||2))),o=Math.max(2,t.length),a=e.lengthMode==="random"?Math.max(1,Number(e.lengthMin)||0,Number(e.lengthMax)||0):Math.max(.001,Number(e.length)||100),c=e.widthSizeMode==="random"?Math.max(1,Number(e.widthMin)||0,Number(e.widthMax)||0):Math.max(.001,Number(e.width)||100),l=(Number(e.rotation)||0)*Math.PI/180,d=Math.cos(l),u=Math.sin(l),h=[],f=[],p=[],m=[],g=[];for(let b=0;b=0;b--)g.push({col:b,row:s-1});for(let b=s-2;b>=1;b--)g.push({col:0,row:b});const v=g.length;for(let b=1;b|\s]+/g,"_").replace(/^_+|_+$/g,"")||e}function OA(n,e){let t=n,i=2;for(;e.has(t);)t=`${n}_${i++}`;return e.add(t),t}function N8(n){return n.replace(/\.[^./\\]+$/,"")}function NA(n,e){return N8([n,e].filter(Boolean).join("/").replace(/\\/g,"/").replace(/\/{2,}/g,"/").replace(/^\.\//,""))}function $8(n){var i,s;const e=Number(((i=n==null?void 0:n.orig)==null?void 0:i.width)??(n==null?void 0:n.width))||0,t=Number(((s=n==null?void 0:n.orig)==null?void 0:s.height)??(n==null?void 0:n.height))||0;return{width:e,height:t}}function pd(n){return Math.round(Math.max(0,Math.min(1,n))*255).toString(16).padStart(2,"0")}function cx(n,e){return[(n>>16&255)/255,(n>>8&255)/255,(n&255)/255,Math.max(0,Math.min(1,e))]}function Dl(n,e){return mi(n/e)}function B8(n,e){const t=n.config,i=t.lifeMode==="fixed"?Math.max(0,Number(t.lifeMin)||0):Math.max(0,Number(t.lifeMin)||0,Number(t.lifeMax)||0),s=Math.max(0,Number(t.delay)||0);let r;return t.mode!=="stream"?r=s+i:t.streamBehavior!=="loop"?r=s+Math.max(1/e,Number(t.duration)||0)+i:r=s+Wn(t,e).total/e,Math.max(1,Math.ceil(r*e)+1)}function U8(n,e,t){const i=n.config;if(i.mode!=="stream"||i.streamBehavior!=="loop")return new Set;const s=IS(i,e),r=Math.max(1,t)/Math.max(1,e);return new Set([Math.round(s.start*r),Math.round(s.end*r)])}function Au(n,e){return e?n.boneName:`${n.spawnId??"legacy"}_${n.boneName}`}function V8(n,e,t,i){const s=new Set;for(const r of n)for(const o of r)s.add(Au(o,e));return[...s].sort().map((r,o)=>({key:r,name:OA(`${i}_${o}`,t),states:n.map(a=>a.find(c=>Au(c,e)===r)||null)}))}function dx(n,e){const t=new Set(e.states.map(i=>i==null?void 0:i.resourceId).filter(i=>typeof i=="number"));return n.config.imageResources.filter(i=>t.has(i.id))}function X8(n,e,t,i){const s=e*t/i,r=Math.min(n.states.length-1,Math.max(0,Math.floor(s))),o=Math.min(n.states.length-1,r+1),a=n.states[r],c=n.states[o];if(!a||!c||Au(a,!0)!==Au(c,!0)||a.spawnId!==c.spawnId)return a;const l=s-r;if(l<=1e-6)return a;const d=(h,f)=>(h??0)+((f??h??0)-(h??0))*l,u=a.trailState&&c.trailState&&a.trailState.resourceId===c.trailState.resourceId?{...a.trailState,width:d(a.trailState.width,c.trailState.width),alpha:d(a.trailState.alpha,c.trailState.alpha),bones:a.trailState.bones.map((h,f)=>{const p=c.trailState.bones[f]||h;return{...h,worldX:d(h.worldX??h.x,p.worldX??p.x),worldY:d(h.worldY??h.y,p.worldY??p.y),worldRotation:d(h.worldRotation??-h.rotation,p.worldRotation??-p.rotation)}})}:a.trailState;return{...a,worldX:d(a.worldX,c.worldX),worldY:d(a.worldY,c.worldY),worldRotation:d(a.worldRotation,c.worldRotation),worldScaleX:d(a.worldScaleX,c.worldScaleX),worldScaleY:d(a.worldScaleY,c.worldScaleY),alpha:d(a.alpha,c.alpha),trailState:u}}function ux(n,e){return!n||n==="跟随导出"?e.keyframeCurve:n==="贝塞尔"?"bezier":"linear"}function ca(n,e,t,i,s,r=new Set,o=new Set,a=s.keyframeCurve){if(!n.length)return[];const c=new Set(r);for(const u of o)c.add(u);const l=a==="bezier"&&s.spineVersion!=="3.8"?DA(n,i,c,o):{samples:LA(n,i,c,o),controls:[]},d=l.samples.map(u=>{const h={time:Dl(u.frame,e)};return t.forEach((f,p)=>{h[f]=mi(u.values[p])}),o.has(u.frame)&&(h.curve="stepped"),h});for(let u=0;u0&&s&&e.add(t-1),i&&e.add(t))}return e}function z8(n){const e=new Set;for(let t=0;t0&&s&&e.add(t-1),i&&e.add(t))}return e}function G8(n,e){var i;if(!n.shapeEnabled||!((i=n.shapeCurve)!=null&&i.length))return 1;const t=[...n.shapeCurve].sort((s,r)=>s.x-r.x);if(e<=t[0].x)return Math.max(0,t[0].y);for(let s=1;s{(o!==r||i.has(a))&&(s.push(t(o,a)),r=o)}),s}function q8(n,e,t){const i=n.imageMode==="sequence"?n.sequenceFrames[e]:void 0,s=(i==null?void 0:i.name)||n.textureName||`image_${n.id}`,r=(i==null?void 0:i.texture)||n.texture,o=$8(r);(!o.width||!o.height)&&t.push({code:"missing-image",message:Ye("errors.missingImageWarning",{file:s})});const a=o.width||1,c=o.height||1;return{path:NA(n.textureFolder,s),x:mi((.5-n.anchorX)*a),y:mi((n.anchorY-.5)*c),width:mi(a),height:mi(c)}}function hx(n,e){const t=[];for(const s of e){const r=s.imageMode==="sequence"?Math.max(1,s.sequenceFrames.length):1;for(let o=0;o1;return new Map(t.map((s,r)=>[s,i?`${n}_${r}`:n]))}function K8(n,e,t,i,s=i.keyframeCurve,r=new Set,o=new Set){if(!n.length)return[];const a=new Set;for(let h=1;h({frame:f,values:h})),l=1/255,d=s==="bezier"&&i.spineVersion!=="3.8"?DA(c,[l,l,l,.01],a,r):{samples:LA(c,[l,l,l,.01],a,r),controls:[]},u=d.samples.map(h=>{const f={time:Dl(h.frame,t),color:`${pd(h.values[0])}${pd(h.values[1])}${pd(h.values[2])}${pd(h.values[3])}`};return r.has(h.frame)&&(f.curve="stepped"),f});if(d.controls.length)for(let h=0;h({time:Dl(p,s),name:f??null}),c);d.length&&(l.attachment=d);const u=K8(i,t,s,r,o,a,c);u.length&&(l.rgba=u)}function px(n){var m;const e=n.settings,t=Math.max(1,Number(n.timeline.fps)||30),i=Math.max(1,Math.round(e.fps||30)),s=e.integerFrameAlignment?i:t,r=[],o=n.systems.filter(g=>g.visible!==!1),a=Xa(n.systems),c={skeleton:{hash:"",spine:e.spineVersion,x:0,y:0,width:0,height:0,images:e.imagesPath||"./images/"},bones:[{name:"root"}],slots:[],skins:[{name:"default",attachments:{}}],animations:{}};e.omitFps||(c.skeleton.fps=i);const l=c.skins[0].attachments,d=new Set(["root"]),u=[...new Set([...n.timeline.animations.length?n.timeline.animations:["animation"],...o.map(g=>g.animation||"animation")])],h=new Map;for(const g of o){const v=((m=g.frames)==null?void 0:m.length)||0,y=a.has(g.id)?v:Math.min(v,B8(g,t)),b=(g.frames||[]).slice(0,y);b.length||r.push({code:"empty-cache",message:Ye("errors.emptyCacheWarning",{name:g.config.name})});const w=OA(O8(g.config.name,`system_${g.id}`),d);c.bones.push({name:w,parent:"root"});const C=V8(b,e.bonePool,d,w),T=Math.max(0,(y-1)/t),S=Math.max(1,Math.ceil(T*s)+1),E=U8(g,t,s),_=h.get(g.animation)||[];_.push({system:g,tracks:C,targetFrames:S,boundaryFrames:E,attachmentPrefix:w}),h.set(g.animation,_);for(const I of C){c.bones.push({name:I.name,parent:w});const M=dx(g,I),k=new Set(M.map(Y=>Y.blend)),B=[],D=[];for(const Y of k){const L=`${I.name}_${Y}`;B.push(L),c.slots.push({name:L,bone:I.name,color:"ffffff00",blend:rx[Y]});const N=l[L]||(l[L]={}),F=M.filter(X=>X.blend===Y),$=hx(w,F);for(const X of F){const z=X.imageMode==="sequence"?Math.max(1,X.sequenceFrames.length):1;for(let K=0;K{var K;return((K=z==null?void 0:z.trailState)==null?void 0:K.resourceId)===Y.id}))continue;const L=Math.max(2,Math.min(16,Math.round(Y.boneCount||3))),N=[];for(let z=0;zc.bones.findIndex(K=>K.name===z)),X=NA("",Y.textureName||`trail_${Y.id}`);(l[F]||(l[F]={}))[`trail_${Y.id}`]=D8(g.config,Y,$,X),Y.texture||r.push({code:"missing-image",message:Ye("errors.missingTrailImageWarning",{file:Y.textureName||Y.id})})}const G=new Set([...B,...D]),V=c.slots.filter(Y=>G.has(String(Y.name)));V.length&&(c.slots=c.slots.filter(Y=>!V.includes(Y)),c.slots.push(...V.filter(Y=>D.includes(String(Y.name))),...V.filter(Y=>B.includes(String(Y.name)))))}}for(const g of u){const v=h.get(g)||[],y={bones:{},slots:{}};let b=!1;for(const{system:w,tracks:C,targetFrames:T,boundaryFrames:S,attachmentPrefix:E}of v)for(const _ of C){const I=Array.from({length:T},(J,oe)=>X8(_,oe,t,s)),M=I.map(J=>!!(J!=null&&J.active)),k=[],B=[],D=[];I.forEach((J,oe)=>{J!=null&&J.active&&(k.push({frame:oe,values:[J.worldX??J.x,J.worldY??J.y]}),B.push(J.worldRotation??J.rotation),D.push({frame:oe,values:[J.worldScaleX??J.scaleX,J.worldScaleY??J.scaleY]}))});const G=L8(B),V=k.map((J,oe)=>({frame:J.frame,values:[G[oe]??0]})),Y=Y8(I);for(const J of S)Y.add(J);const L=z8(I),N={},F=ca(k,s,["x","y"],[ox,ox],e,Y,L),$=ca(V,s,["value"],[lx],e,Y,L),X=ca(D,s,["x","y"],[fd,fd],e,Y,L);F.length&&(N.translate=F),$.length&&(N.rotate=$),X.length&&(N.scale=X),Object.keys(N).length&&(y.bones[_.name]=N,b=!0);const z=dx(w,_),K=new Set(z.map(J=>J.blend));for(const J of K){const oe=z.filter(Z=>Z.blend===J),le=hx(E,oe),ve=[],Se=[];let fe=16777215;for(let Z=0;ZU.id===se.resourceId):void 0,H=!!se&&M[Z]&&se.imageVisible!==!1&&(j==null?void 0:j.blend)===J;se&&(j==null?void 0:j.blend)===J&&(fe=se.colorHex);const O=H?le.get(`${j.id}_${se.imageFrameIndex??0}`):void 0;ve.push(O??null),Se.push(cx(fe,H?se.alpha:0))}const be=oe.filter(Z=>Z.independentAlpha==="curve").map(Z=>ux(Z.alphaCurveMode,e)),q=be.length?be.includes("bezier")?"bezier":"linear":ux(w.config.alphaMode==="curve"?w.config.curveMode:void 0,e);fx(y,`${_.name}_${J}`,ve,Se,s,e,q,L,S),ve.some(Boolean)&&(b=!0)}if(w.config.trail)for(const J of w.config.trailResources){const oe=Math.max(2,Math.min(16,Math.round(J.boneCount||3))),le=I.map(O=>{var U;return((U=O==null?void 0:O.trailState)==null?void 0:U.resourceId)===J.id?O.trailState:void 0}),ve=le.find(O=>!!O);if(!ve)continue;const Se=H8(le),fe=j8(le),be=J.widthSizeMode==="random"?Math.max(1,Number(J.widthMin)||0,Number(J.widthMax)||0):Math.max(.001,Number(J.width)||100);let q=ve;const Z=le.map(O=>(O&&(q=O),q));for(let O=0;O{const Le=ge==null?void 0:ge.bones[Math.min(ge.bones.length-1,O)];if(!Le)return;const Ee={x:Le.worldX??Le.x,y:Le.worldY??Le.y,rotation:Le.worldRotation??-Le.rotation};U.push({frame:Ge,values:[Ee.x,Ee.y]}),W.push({frame:Ge,values:[Ee.rotation]}),ee.push({frame:Ge,values:[1,Math.max(0,ge.width/be)*ue]})});const xe=`${_.name}_trail_${J.id}_${O}`,ye={},Ne=ca(U,s,["x","y"],[ax,ax],e,ne,fe),Be=ca(W,s,["value"],[lx],e,ne,fe),de=ca(ee,s,["x","y"],[fd,fd],e,ne,fe);Ne.length&&(ye.translate=Ne),Be.length&&(ye.rotate=Be),de.length&&(ye.scale=de),Object.keys(ye).length&&(y.bones[xe]=ye)}const se=le.map(()=>`trail_${J.id}`);let j=ve.colorHex;const H=le.map(O=>(O&&(j=O.colorHex),cx(j,O?O.alpha:0)));fx(y,`${_.name}_trail_${J.id}`,se,H,s,e,e.keyframeCurve,fe,S),b=!0}}(b||!e.excludeEmptyAnimations)&&(c.animations[g]=y)}!Object.keys(c.animations).length&&!e.excludeEmptyAnimations&&(c.animations.animation={bones:{},slots:{}});const f=e.spineVersion==="3.8"?I8(c):c,p=JSON.stringify(f,null,2);return{json:f,text:p,warnings:r,particleSystemCount:o.length,animationCount:Object.keys(f.animations).length,boneCount:f.bones.length}}function J8(n,e){const t=new Blob([n.text],{type:"application/json;charset=utf-8"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=/\.json$/i.test(e)?e:`${e||"SpineParticle"}.json`,s.style.display="none",document.body.appendChild(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(i),1e3)}class FQ{constructor(){A(this,"array",[])}add(e){const t=this.contains(e);return this.array[e|0]=e|0,!t}contains(e){return this.array[e|0]!==void 0}remove(e){this.array[e|0]=void 0}clear(){this.array.length=0}}class Z8{constructor(){A(this,"entries",{});A(this,"size",0)}add(e){const t=this.entries[e];return this.entries[e]=!0,t?!1:(this.size++,!0)}addAll(e){const t=this.size;for(let i=0,s=e.length;i1&&(this.r=1),this.g<0?this.g=0:this.g>1&&(this.g=1),this.b<0?this.b=0:this.b>1&&(this.b=1),this.a<0?this.a=0:this.a>1&&(this.a=1),this}static rgba8888ToColor(e,t){e.r=((t&4278190080)>>>24)/255,e.g=((t&16711680)>>>16)/255,e.b=((t&65280)>>>8)/255,e.a=(t&255)/255}static rgb888ToColor(e,t){e.r=((t&16711680)>>>16)/255,e.g=((t&65280)>>>8)/255,e.b=(t&255)/255}toRgb888(){const e=t=>`0${(t*255).toString(16)}`.slice(-2);return+`0x${e(this.r)}${e(this.g)}${e(this.b)}`}static fromString(e,t=new bn){return t.setFromString(e)}};A(bn,"WHITE",new bn(1,1,1,1)),A(bn,"RED",new bn(1,0,0,1)),A(bn,"GREEN",new bn(0,1,0,1)),A(bn,"BLUE",new bn(0,0,1,1)),A(bn,"MAGENTA",new bn(1,0,1,1));let at=bn;const ni=class ni{static clamp(e,t,i){return ei?i:e}static cosDeg(e){return Math.cos(e*ni.degRad)}static sinDeg(e){return Math.sin(e*ni.degRad)}static atan2Deg(e,t){return Math.atan2(e,t)*ni.radDeg}static signum(e){return e>0?1:e<0?-1:0}static toInt(e){return e>0?Math.floor(e):Math.ceil(e)}static cbrt(e){const t=Math.pow(Math.abs(e),.3333333333333333);return e<0?-t:t}static randomTriangular(e,t){return ni.randomTriangularWith(e,t,(e+t)*.5)}static randomTriangularWith(e,t,i){const s=Math.random(),r=t-e;return s<=(i-e)/r?e+Math.sqrt(s*r*(i-e)):t-Math.sqrt((1-s)*r*(t-i))}static isPowerOfTwo(e){return e&&(e&e-1)===0}};A(ni,"epsilon",1e-5),A(ni,"epsilon2",ni.epsilon*ni.epsilon),A(ni,"PI",3.1415927),A(ni,"PI2",ni.PI*2),A(ni,"invPI2",1/ni.PI2),A(ni,"radiansToDegrees",180/ni.PI),A(ni,"radDeg",ni.radiansToDegrees),A(ni,"degreesToRadians",ni.PI/180),A(ni,"degRad",ni.degreesToRadians);let ke=ni;const En=class En{apply(e,t,i){return t===void 0||i===void 0?this.applyInternal(e):e+(t-e)*this.applyInternal(i)}};A(En,"linear",new class extends En{applyInternal(e){return e}}),A(En,"smooth",new class extends En{applyInternal(e){return e*e*(3-2*e)}}),A(En,"slowFast",new class extends En{applyInternal(e){return e*e}}),A(En,"fastSlow",new class extends En{applyInternal(e){return(e-1)*(e-1)*-1+1}}),A(En,"circle",new class extends En{applyInternal(e){return e<=.5?(e*=2,(1-Math.sqrt(1-e*e))/2):(e--,e*=2,(Math.sqrt(1-e*e)+1)/2)}});let $a=En;class Q8 extends $a{constructor(t){super();A(this,"power",2);this.power=t}applyInternal(t){return t<=.5?Math.pow(t*2,this.power)/2:Math.pow((t-1)*2,this.power)/(this.power%2===0?-2:2)+1}}class LQ extends Q8{constructor(e){super(e)}applyInternal(e){return Math.pow(e-1,this.power)*(this.power%2===0?-1:1)+1}}const Dr=class Dr{static arrayCopy(e,t,i,s,r){for(let o=t,a=s;o=t?e:Dr.setArraySize(e,t,i)}static newArray(e,t){const i=[];for(let s=0;s0?this.items.pop():this.instantiator()}free(e){var t;(t=e.reset)==null||t.call(e),this.items.push(e)}freeAll(e){for(let t=0;tthis.maxDelta&&(this.delta=this.maxDelta),this.lastTime=e,this.frameCount++,this.frameTime>1&&(this.framesPerSecond=this.frameCount/this.frameTime,this.frameTime=0,this.frameCount=0)}}class NQ{constructor(e=32){A(this,"values");A(this,"addedValues",0);A(this,"lastValue",0);A(this,"mean",0);A(this,"dirty",!0);this.values=new Array(e)}hasEnoughData(){return this.addedValues>=this.values.length}addValue(e){this.addedValuesthis.values.length-1&&(this.lastValue=0),this.dirty=!0}getMean(){if(this.hasEnoughData()){if(this.dirty){let e=0;for(let t=0;t{d.width=parseInt(i[1]),d.height=parseInt(i[2])},s.format=()=>{},s.filter=d=>{d.minFilter=Ke.enumValue(ja,i[1]),d.magFilter=Ke.enumValue(ja,i[2])},s.repeat=d=>{i[1].indexOf("x")!==-1&&(d.uWrap=Ha.Repeat),i[1].indexOf("y")!==-1&&(d.vWrap=Ha.Repeat)},s.pma=d=>{d.pma=i[1]==="true"};var r={};r.xy=d=>{d.x=parseInt(i[1]),d.y=parseInt(i[2])},r.size=d=>{d.width=parseInt(i[1]),d.height=parseInt(i[2])},r.bounds=d=>{d.x=parseInt(i[1]),d.y=parseInt(i[2]),d.width=parseInt(i[3]),d.height=parseInt(i[4])},r.offset=d=>{d.offsetX=parseInt(i[1]),d.offsetY=parseInt(i[2])},r.orig=d=>{d.originalWidth=parseInt(i[1]),d.originalHeight=parseInt(i[2])},r.offsets=d=>{d.offsetX=parseInt(i[1]),d.offsetY=parseInt(i[2]),d.originalWidth=parseInt(i[3]),d.originalHeight=parseInt(i[4])},r.rotate=d=>{const u=i[1];u==="true"?d.degrees=90:u!=="false"&&(d.degrees=parseInt(u))},r.index=d=>{d.index=parseInt(i[1])};let o=t.readLine();for(;o&&o.trim().length===0;)o=t.readLine();for(;!(!o||o.trim().length===0||t.readEntry(i,o)===0);)o=t.readLine();let a=null,c=null,l=null;for(;o!==null;)if(o.trim().length===0)a=null,o=t.readLine();else if(a){const d=new BA(a,o);for(;;){const u=t.readEntry(i,o=t.readLine());if(u===0)break;const h=r[i[0]];if(h)h(d);else{c||(c=[]),l||(l=[]),c.push(i[0]);const f=[];for(let p=0;p0&&l&&l.length>0&&(d.names=c,d.values=l,c=null,l=null),d.u=d.x/a.width,d.v=d.y/a.height,d.degrees===90?(d.u2=(d.x+d.height)/a.width,d.v2=(d.y+d.width)/a.height):(d.u2=(d.x+d.width)/a.width,d.v2=(d.y+d.height)/a.height),this.regions.push(d)}else{for(a=new nV(o.trim());t.readEntry(i,o=t.readLine())!==0;){const d=s[i[0]];d&&d(a)}this.pages.push(a)}}findRegion(e){for(let t=0;t=this.lines.length?null:this.lines[this.index++]}readEntry(e,t){if(!t||(t=t.trim(),t.length===0))return 0;const i=t.indexOf(":");if(i===-1)return 0;e[0]=t.substr(0,i).trim();for(let s=1,r=i+1;;s++){const o=t.indexOf(",",r);if(o===-1)return e[s]=t.substr(r).trim(),s;if(e[s]=t.substr(r,o-r).trim(),r=o+1,s===4)return 4}}}class nV{constructor(e){A(this,"name");A(this,"minFilter",ja.Nearest);A(this,"magFilter",ja.Nearest);A(this,"uWrap",Ha.ClampToEdge);A(this,"vWrap",Ha.ClampToEdge);A(this,"texture",null);A(this,"width",0);A(this,"height",0);A(this,"pma",!1);A(this,"regions",[]);this.name=e}setTexture(e){this.texture=e,e.setFilters(this.minFilter,this.magFilter),e.setWraps(this.uWrap,this.vWrap);for(const t of this.regions)t.texture=e}}class BA extends $A{constructor(t,i){super();A(this,"page");A(this,"name");A(this,"x",0);A(this,"y",0);A(this,"offsetX",0);A(this,"offsetY",0);A(this,"originalWidth",0);A(this,"originalHeight",0);A(this,"index",0);A(this,"degrees",0);A(this,"names",null);A(this,"values",null);this.page=t,this.name=i,t.regions.push(this)}}const ku=class ku{constructor(e){A(this,"name");A(this,"timelineAttachment");A(this,"timelineSlots",ku.empty);if(!e)throw new Error("name cannot be null.");this.name=e,this.timelineAttachment=this}isTimelineActive(e,t,i){let s=e[t];if(s.bone.isActive()){const r=(i?s.getAppliedPose():s.getPose()).getAttachment();if(r!=null&&r.timelineAttachment===this)return!0}for(let r=0,o=this.timelineSlots.length;r>1)*c;const l=i.appliedPose.deform;let d=this.vertices;const u=this.bones;if(!u){l.length>0&&(d=l);const m=i.bone.appliedPose,g=m.worldX,v=m.worldY,y=m.a,b=m.b,w=m.c,C=m.d;for(let T=s,S=a;S=this.regions.length&&(t=this.regions.length-1),t}getUVs(e){return this.uvs[e]}hasPathSuffix(){return this.pathSuffix}getPath(e,t){if(!this.pathSuffix)return e;let i=e;const s=(this.start+t).toString();for(let r=this.digits-s.length;r>0;r--)i+="0";return i+=s,i}static nextID(){return Ca._nextID++}};A(Ca,"_nextID",0);let Wa=Ca;var Oi;(function(n){n[n.hold=0]="hold",n[n.once=1]="once",n[n.loop=2]="loop",n[n.pingpong=3]="pingpong",n[n.onceReverse=4]="onceReverse",n[n.loopReverse=5]="loopReverse",n[n.pingpongReverse=6]="pingpongReverse"})(Oi||(Oi={}));const UA=[Oi.hold,Oi.once,Oi.loop,Oi.pingpong,Oi.onceReverse,Oi.loopReverse,Oi.pingpongReverse];class ev{constructor(e,t,i){A(this,"name");A(this,"timelines",[]);A(this,"timelineIds");A(this,"bones");A(this,"color",new at(1,1,1,1));A(this,"duration");if(!e)throw new Error("name cannot be null.");this.name=e,this.duration=i,this.timelineIds=new Z8,this.bones=[],this.setTimelines(t)}setTimelines(e){if(!e)throw new Error("timelines cannot be null.");this.timelines=e;const t=e.length;this.timelineIds.clear(),this.bones.length=0;const i=new Set,s=e;for(let r=0;r0&&(t%=this.duration));const u=this.timelines;for(let h=0,f=u.length;ht)return r-i;return s-i}};function sV(n){return typeof n=="object"&&n!==null&&typeof n.slotIndex=="number"}class qo extends zt{constructor(t,i,...s){super(t,...s);A(this,"curves");this.curves=Ke.newFloatArray(t+i*18),this.curves[t-1]=1}setLinear(t){this.curves[t]=0}setStepped(t){this.curves[t]=1}shrink(t){const i=this.getFrameCount()+t*18;if(this.curves.length>i){const s=Ke.newFloatArray(i);Ke.arrayCopy(this.curves,0,s,0,i),this.curves=s}}setBezier(t,i,s,r,o,a,c,l,d,u,h){const f=this.curves;let p=this.getFrameCount()+t*18;s===0&&(f[i]=2+p);const m=(r-a*2+l)*.03,g=(o-c*2+d)*.03,v=((a-l)*3-r+u)*.006,y=((c-d)*3-o+h)*.006;let b=m*2+v,w=g*2+y,C=(a-r)*.3+m+v*.16666667,T=(c-o)*.3+g+y*.16666667,S=r+C,E=o+T;for(let _=p+18;p<_;p+=2)f[p]=S,f[p+1]=E,C+=b,T+=w,b+=v,w+=y,S+=C,E+=T}getBezierValue(t,i,s,r){const o=this.curves;if(o[r]>t){const d=this.frames[i],u=this.frames[i+s];return u+(t-d)/(o[r]-d)*(o[r+1]-u)}const a=r+18;for(r+=2;r=t){const d=o[r-2],u=o[r-1];return u+(t-d)/(o[r]-d)*(o[r+1]-u)}i+=this.getFrameEntries();const c=o[a-2],l=o[a-1];return l+(t-c)/(this.frames[i]-c)*(this.frames[i+s]-l)}}class nr extends qo{constructor(e,t,i){super(e,t,i)}getFrameEntries(){return 2}setFrame(e,t,i){e<<=1,this.frames[e]=t,this.frames[e+1]=i}getCurveValue(e){const t=this.frames;let i=t.length-2;for(let r=2;r<=i;r+=2)if(t[r]>e){i=r-2;break}const s=this.curves[i>>1];switch(s){case 0:{const r=t[i],o=t[i+1];return o+(e-r)/(t[i+2]-r)*(t[i+2+1]-o)}case 1:return t[i+1]}return this.getBezierValue(e,i,1,s-2)}getRelativeValue(e,t,i,s,r,o){if(e>2];switch(f){case 0:{const p=u[h];c=u[h+1],l=u[h+2],d=u[h+3];const m=(i-p)/(u[h+4]-p);c+=(u[h+4+1]-c)*m,l+=(u[h+4+2]-l)*m,d+=(u[h+4+3]-d)*m;break}case 1:c=u[h+1],l=u[h+2],d=u[h+3];break;default:c=this.getBezierValue(i,h,1,f-2),l=this.getBezierValue(i,h,2,f+18-2),d=this.getBezierValue(i,h,3,f+36-2)}if(s!==1)if(r===We.setup){const p=e.data.setupPose.color;c=p.r+(c-p.r)*s,l=p.g+(l-p.g)*s,d=p.b+(d-p.b)*s}else c=a.r+(c-a.r)*s,l=a.g+(l-a.g)*s,d=a.b+(d-a.b)*s;a.r=c<0?0:c>1?1:c,a.g=l<0?0:l>1?1:l,a.b=d<0?0:d>1?1:d}}class QA extends nr{constructor(t,i,s){super(t,i,`${ot.alpha}|${s}`);A(this,"slotIndex",0);this.slotIndex=s}apply(t,i,s,r,o,a,c,l,d){const u=t.slots[this.slotIndex];if(!u.bone.active)return;const h=(d?u.appliedPose:u.pose).color;let f=0;const p=this.frames;if(s1?1:f}}class eT extends mh{constructor(e,t,i){super(e,t,i,`${ot.rgb}|${i}`,`${ot.alpha}|${i}`,`${ot.rgb2}|${i}`)}getFrameEntries(){return 8}setFrame(e,t,i,s,r,o,a,c,l){e<<=3,this.frames[e]=t,this.frames[e+1]=i,this.frames[e+2]=s,this.frames[e+3]=r,this.frames[e+4]=o,this.frames[e+5]=a,this.frames[e+6]=c,this.frames[e+7]=l}apply1(e,t,i,s,r,o){const a=t.color,c=t.darkColor;let l=0,d=0,u=0;const h=this.frames;if(i>3];switch(y){case 0:{const b=h[v];f=h[v+1],p=h[v+2],m=h[v+3],g=h[v+4],l=h[v+5],d=h[v+6],u=h[v+7];const w=(i-b)/(h[v+8]-b);f+=(h[v+8+1]-f)*w,p+=(h[v+8+2]-p)*w,m+=(h[v+8+3]-m)*w,g+=(h[v+8+4]-g)*w,l+=(h[v+8+5]-l)*w,d+=(h[v+8+6]-d)*w,u+=(h[v+8+7]-u)*w;break}case 1:f=h[v+1],p=h[v+2],m=h[v+3],g=h[v+4],l=h[v+5],d=h[v+6],u=h[v+7];break;default:f=this.getBezierValue(i,v,1,y-2),p=this.getBezierValue(i,v,2,y+18-2),m=this.getBezierValue(i,v,3,y+36-2),g=this.getBezierValue(i,v,4,y+54-2),l=this.getBezierValue(i,v,5,y+72-2),d=this.getBezierValue(i,v,6,y+90-2),u=this.getBezierValue(i,v,7,y+108-2)}if(s===1)a.set(f,p,m,g);else if(r===We.setup){const b=e.data.setupPose;let w=b.color;a.set(w.r+(f-w.r)*s,w.g+(p-w.g)*s,w.b+(m-w.b)*s,w.a+(g-w.a)*s),w=b.darkColor,l=w.r+(l-w.r)*s,d=w.g+(d-w.g)*s,u=w.b+(u-w.b)*s}else a.add((f-a.r)*s,(p-a.g)*s,(m-a.b)*s,(g-a.a)*s),l=c.r+(l-c.r)*s,d=c.g+(d-c.g)*s,u=c.b+(u-c.b)*s;c.r=l<0?0:l>1?1:l,c.g=d<0?0:d>1?1:d,c.b=u<0?0:u>1?1:u}}class tT extends mh{constructor(e,t,i){super(e,t,i,`${ot.rgb}|${i}`,`${ot.rgb2}|${i}`)}getFrameEntries(){return 7}setFrame(e,t,i,s,r,o,a,c){e*=7,this.frames[e]=t,this.frames[e+1]=i,this.frames[e+2]=s,this.frames[e+3]=r,this.frames[e+4]=o,this.frames[e+5]=a,this.frames[e+6]=c}apply1(e,t,i,s,r,o){const a=t.color,c=t.darkColor;let l=0,d=0,u=0,h=0,f=0,p=0;const m=this.frames;if(i1?1:l,a.g=d<0?0:d>1?1:d,a.b=u<0?0:u>1?1:u,c.r=h<0?0:h>1?1:h,c.g=f<0?0:f>1?1:f,c.b=p<0?0:p>1?1:p}}class Ol extends zt{constructor(t,i){super(t,`${ot.attachment}|${i}`);A(this,"slotIndex",0);A(this,"attachmentNames");this.slotIndex=i,this.attachmentNames=new Array(t),this.instant=!0}getFrameCount(){return this.frames.length}setFrame(t,i,s){this.frames[t]=i,this.attachmentNames[t]=s}apply(t,i,s,r,o,a,c,l,d){const u=t.slots[this.slotIndex];if(!u.bone.active)return;const h=d?u.appliedPose:u.pose;l||st){const l=this.frames[i];return s[r+1]*(t-l)/(s[r]-l)}const o=r+18;for(r+=2;r=t){const l=s[r-2],d=s[r-1];return d+(t-l)/(s[r]-l)*(s[r+1]-d)}const a=s[o-2],c=s[o-1];return c+(1-c)*(t-a)/(this.frames[i+this.getFrameEntries()]-a)}apply(t,i,s,r,o,a,c,l,d){const u=t.slots;if(!this.attachment.isTimelineActive(u,this.slotIndex,d))return;const h=this.attachment.timelineSlots,f=this.frames;if(s=f[f.length-1])g=0,p=this.vertices[f.length-1],m=null;else{const y=zt.search(f,s);g=this.getCurvePercent(s,y),p=this.vertices[y],m=this.vertices[y+1]}const v=this.vertices[0].length;this.applyToSlot(u[this.slotIndex],d,p,m,g,v,o,a,c);for(const y of h)this.applyToSlot(u[y],d,p,m,g,v,o,a,c)}applyBeforeFirst(t,i,s,r){if(!t.bone.active)return;const o=i?t.appliedPose:t.pose;if(o.attachment==null||o.attachment.timelineAttachment!==this.attachment)return;const a=o.deform;switch(a.length===0&&(r=We.setup),r){case We.setup:a.length=0;break;case We.first:{if(s===1){a.length=0;return}const c=this.vertices[0].length;a.length=c;const l=a,d=o.attachment;if(d.bones===null){const u=d.vertices;for(let h=0;h>4,d=c.attachment.sequence.regions.length;const u=UA[o&15];if(u!==Oi.hold)switch(l+=(s-r)/a+1e-5|0,u){case Oi.once:l=Math.min(d-1,l);break;case Oi.loop:l%=d;break;case Oi.pingpong:{const h=(d<<1)-2;l=h===0?0:l%h,l>=d&&(l=h-l);break}case Oi.onceReverse:l=Math.max(d-1-l,0);break;case Oi.loopReverse:l=d-1-l%d;break;case Oi.pingpongReverse:{const h=(d<<1)-2;l=h===0?0:(l+d-1)%h,l>=d&&(l=h-l)}}c.sequenceIndex=l}};A(_n,"ENTRIES",3),A(_n,"MODE",1),A(_n,"DELAY",2);let _u=_n;const Fu=class Fu extends zt{constructor(t){super(t,...Fu.propertyIds);A(this,"events");this.events=new Array(t),this.instant=!0}getFrameCount(){return this.frames.length}setFrame(t,i){this.frames[t]=i.time,this.events[t]=i}apply(t,i,s,r,o,a,c,l,d){if(!r)return;const u=this.frames,h=this.frames.length;if(i>s)this.apply(null,i,Number.MAX_VALUE,r,0,a,!1,!1,!1),i=-1;else if(i>=u[h-1])return;if(s0&&u[f-1]===p;)f--}for(;f=u[f];f++)r.push(this.events[f])}};A(Fu,"propertyIds",[`${ot.event}`]);let cc=Fu;const Aa=class Aa extends zt{constructor(t){super(t,...Aa.propertyIds);A(this,"drawOrders");this.drawOrders=new Array(t),this.instant=!0}getFrameCount(){return this.frames.length}setFrame(t,i,s){this.frames[t]=i,this.drawOrders[t]=s}apply(t,i,s,r,o,a,c,l,d){const u=d?t.drawOrder.appliedPose:t.drawOrder.pose,h=t.slots;if(l||s>2];switch(y){case 0:{const w=f[v];p=f[v+1],m=f[v+2],g=f[v+3];const C=(s-w)/(f[v+4]-w);p+=(f[v+4+1]-p)*C,m+=(f[v+4+2]-m)*C,g+=(f[v+4+3]-g)*C;break}case 1:p=f[v+1],m=f[v+2],g=f[v+3];break;default:p=this.getBezierValue(s,v,1,y-2),m=this.getBezierValue(s,v,2,y+18-2),g=this.getBezierValue(s,v,3,y+36-2)}const b=a===We.setup?u.data.setupPose:h;c?(h.mixRotate=b.mixRotate+p*o,h.mixX=b.mixX+m*o,h.mixY=b.mixY+g*o):(h.mixRotate=b.mixRotate+(p-b.mixRotate)*o,h.mixX=b.mixX+(m-b.mixX)*o,h.mixY=b.mixY+(g-b.mixY)*o)}}class ro extends xc{constructor(e,t,i,s){super(e,t,i,s)}apply(e,t,i,s,r,o,a,c,l){if(a&&!this.additive&&(a=!1),this.constraintIndex===-1){const d=i>=this.frames[0]?this.getCurveValue(i):0,u=e.physics;for(const h of u)if(h.active&&this.global(h.data)){const f=l?h.appliedPose:h.pose;this.set(f,this.getAbsoluteValue(i,r,o,a,this.get(f),this.get(h.data.setupPose),d))}}else{const d=e.constraints[this.constraintIndex];if(d.active){const u=l?d.appliedPose:d.pose;this.set(u,this.getAbsoluteValue(i,r,o,a,this.get(u),this.get(d.data.setupPose)))}}}}class lT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintInertia)}get(e){return e.inertia}set(e,t){e.inertia=t}global(e){return e.inertiaGlobal}}class cT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintStrength)}get(e){return e.strength}set(e,t){e.strength=t}global(e){return e.strengthGlobal}}class dT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintDamping)}get(e){return e.damping}set(e,t){e.damping=t}global(e){return e.dampingGlobal}}class uT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintMass)}get(e){return 1/e.massInverse}set(e,t){e.massInverse=1/t}global(e){return e.massGlobal}}class hT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintWind),this.additive=!0}get(e){return e.wind}set(e,t){e.wind=t}global(e){return e.windGlobal}}class fT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintGravity),this.additive=!0}get(e){return e.gravity}set(e,t){e.gravity=t}global(e){return e.gravityGlobal}}class pT extends ro{constructor(e,t,i){super(e,t,i,ot.physicsConstraintMix)}get(e){return e.mix}set(e,t){e.mix=t}global(e){return e.mixGlobal}}const Lu=class Lu extends zt{constructor(t,i){super(t,...Lu.propertyIds);A(this,"constraintIndex");this.constraintIndex=i,this.instant=!0}getFrameCount(){return this.frames.length}setFrame(t,i){this.frames[t]=i}apply(t,i,s,r,o,a,c,l,d){let u;if(this.constraintIndex!==-1&&(u=t.constraints[this.constraintIndex],!u.active))return;const h=this.frames;if(i>s)this.apply(t,i,Number.MAX_VALUE,[],o,a,!1,!1,!1),i=-1;else if(i>=h[h.length-1])return;if(!(s=h[zt.search(h,i)+1]))if(u!=null)u.reset(t);else for(const f of t.physics)f.active&&f.reset(t)}};A(Lu,"propertyIds",[ot.physicsConstraintReset.toString()]);let Mu=Lu;class mT extends xc{constructor(e,t,i){super(e,t,i,ot.sliderTime)}apply(e,t,i,s,r,o,a,c,l){const d=e.constraints[this.constraintIndex];if(d.active){const u=l?d.appliedPose:d.pose;u.time=this.getAbsoluteValue(i,r,o,a,u.time,d.data.setupPose.time)}}}class gT extends xc{constructor(e,t,i){super(e,t,i,ot.sliderMix),this.additive=!0}apply(e,t,i,s,r,o,a,c,l){const d=e.constraints[this.constraintIndex];if(d.active){const u=l?d.appliedPose:d.pose;u.mix=this.getAbsoluteValue(i,r,o,a,u.mix,d.data.setupPose.mix)}}}const Bl=class Bl{constructor(e){A(this,"data");A(this,"tracks",[]);A(this,"timeScale",1);A(this,"unkeyedState",0);A(this,"events",[]);A(this,"listeners",[]);A(this,"queue",new lV(this));A(this,"propertyIds",new Map);A(this,"animationsChanged",!1);A(this,"trackEntryPool",new eV(()=>new aV));this.data=e}update(e){e*=this.timeScale;const t=this.tracks;for(let i=0,s=t.length;i0){if(r.delay-=o,r.delay>0)continue;o=-r.delay,r.delay=0}let a=r.next;if(a){const c=r.trackLast-a.delay;if(c>=0){for(a.delay=0,a.trackTime+=r.timeScale===0?0:(c/r.timeScale+e)*a.timeScale,r.trackTime+=o,this.setTrack(i,a,!0);a.mixingFrom;)a.mixTime+=e,a=a.mixingFrom;continue}}else if(r.trackLast>=r.trackEnd&&!r.mixingFrom){t[i]=null,this.queue.end(r),this.clearNext(r);continue}if(r.mixingFrom&&this.updateMixingFrom(r,e)){let c=r.mixingFrom;for(r.mixingFrom=null,c&&(c.mixingTo=null);c;)this.queue.end(c),c=c.mixingFrom}r.trackTime+=o}this.queue.drain()}updateMixingFrom(e,t){const i=e.mixingFrom;if(!i)return!0;const s=this.updateMixingFrom(i,t);if(i.animationLast=i.nextAnimationLast,i.trackLast=i.nextTrackLast,e.nextTrackLast!==-1&&e.mixTime>=e.mixDuration){if(i.totalAlpha===0||e.mixDuration===0){if(e.mixingFrom=i.mixingFrom,i.mixingFrom!=null&&(i.mixingFrom.mixingTo=e),i.totalAlpha===0)for(let r=e;r.mixingTo!=null;r=r.mixingTo)r.keepHold=!0;this.queue.end(i)}return s}return i.trackTime+=t*i.timeScale,e.mixTime+=t,!1}apply(e){if(!e)throw new Error("skeleton cannot be null.");this.animationsChanged&&this._animationsChanged();const t=this.events,i=this.tracks;let s=!1;for(let a=0,c=i.length;a0)continue;s=!0;let d=l.alpha;l.mixingFrom?d*=this.applyMixingFrom(l,e):l.trackTime>=l.trackEnd&&!l.next&&(d=0);let u=l.animationLast,h=l.getAnimationTime(),f=h,p=t;l.reverse&&(f=l.animation.duration-f,p=null);const m=l.animation.timelines,g=m.length;if(a===0&&d===1)for(let v=0;v=l.alphaAttachmentThreshold,b=l.additive,w=b||l.shortestRotation,C=!w&&l.timelinesRotation.length!==g<<1;C&&(l.timelinesRotation.length=g<<1);for(let T=0;T0?c/a:o,d=i.animation.timelines,u=d.length,h=i.timelineMode,f=i.timelineHoldMix,p=r=i.alphaAttachmentThreshold);else{const B=!m||!(_ instanceof qr)||M===We.current;_.apply(t,w,T,S,k,M,g,B,!1)}}return i.reverse&&r0&&this.queueEvents(i,C),this.events.length=0,i.nextAnimationLast=C,i.nextTrackLast=i.trackTime,r}applyAttachmentTimeline(e,t,i,s,r){const o=t.slots[e.slotIndex];if(!o.bone.active||!r&&o.attachmentState===this.unkeyedState+wx)return;let a=i=0,C=v>=0;Math.abs(y)<=90&&ke.signum(y)!==ke.signum(g)&&(Math.abs(v-b)>180?(m+=360*ke.signum(v),C=w):b!==0?m-=360*ke.signum(v):C=w),C!==w&&(m+=360*ke.signum(v)),o[a]=m}o[a+1]=g,d.rotation=f+m*s}queueEvents(e,t){const i=e.animationStart,s=e.animationEnd,r=s-i,o=e.reverse;let a=e.trackLast%r;o&&(a=r-a);const c=this.events;let l=0,d=c.length;for(;l=i&&h.time<=s&&this.queue.event(e,h)}let u=!1;if(e.loop)if(r===0)u=!0;else{const h=Math.floor(e.trackTime/r);u=h>0&&h>Math.floor(e.trackLast/r)}else u=t>=s&&e.animationLast=i&&h.time<=s&&this.queue.event(e,h)}}eventsReverse(e,t,i){const s=e.animation.duration,r=s-t,o=s-i,a=e.animation.timelines;for(let c=0,l=e.animation.timelines.length;c=o){for(let p=0;p=r)break;this.events.push(u[p])}}else{for(let m=0;m=r);m++)this.events.push(u[m]);let p=0;for(;p=o);p++);for(;p= 0.");if(e>=this.tracks.length)return;const t=this.tracks[e];if(!t)return;this.queue.end(t),this.clearNext(t);let i=t;for(;;){const s=i.mixingFrom;if(!s)break;this.queue.end(s),i.mixingFrom=null,i.mixingTo=null,i=s}this.tracks[t.trackIndex]=null,this.queue.drain()}setTrack(e,t,i){const s=this.expandToIndex(e);this.tracks[e]=t,t.previous=null,s&&(s.next=null,i&&this.queue.interrupt(s),t.mixingFrom=s,s.mixingTo=t,t.mixTime=0,s.timelinesRotation.length=0),this.queue.start(t)}setAnimation(e,t,i=!1){return typeof t=="string"?this.setAnimation1(e,t,i):this.setAnimation2(e,t,i)}setAnimation1(e,t,i=!1){const s=this.data.skeletonData.findAnimation(t);if(!s)throw new Error(`Animation not found: ${t}`);return this.setAnimation2(e,s,i)}setAnimation2(e,t,i=!1){if(e<0)throw new Error("trackIndex must be >= 0.");if(!t)throw new Error("animation cannot be null.");let s=!0,r=this.expandToIndex(e);r&&(r.nextTrackLast===-1&&r.animation===t?(this.tracks[e]=r.mixingFrom,this.queue.interrupt(r),this.queue.end(r),this.clearNext(r),r=r.mixingFrom,s=!1):this.clearNext(r));const o=this.trackEntry(e,t,i,r);return this.setTrack(e,o,s),this.queue.drain(),o}addAnimation(e,t,i=!1,s=0){return typeof t=="string"?this.addAnimation1(e,t,i,s):this.addAnimation2(e,t,i,s)}addAnimation1(e,t,i=!1,s=0){const r=this.data.skeletonData.findAnimation(t);if(!r)throw new Error(`Animation not found: ${t}`);return this.addAnimation2(e,r,i,s)}addAnimation2(e,t,i=!1,s=0){if(e<0)throw new Error("trackIndex must be >= 0.");if(!t)throw new Error("animation cannot be null.");let r=this.expandToIndex(e);if(r)for(;r.next;)r=r.next;const o=this.trackEntry(e,t,i,r);return r?(r.next=o,o.previous=r,s<=0&&(s=Math.max(s+r.getTrackComplete()-o.mixDuration,0))):(this.setTrack(e,o,!0),this.queue.drain(),s<0&&(s=0)),o.delay=s,o}setEmptyAnimation(e,t=0){const i=this.setAnimation(e,Bl.emptyAnimation,!1);return i.mixDuration=t,i.trackEnd=t,i}addEmptyAnimation(e,t=0,i=0){const s=this.addAnimation(e,Bl.emptyAnimation,!1,i);return i<=0&&(s.delay=Math.max(s.delay+s.mixDuration-t,0)),s.mixDuration=t,s.trackEnd=t,s}setEmptyAnimations(e=0){const t=this.queue.drainDisabled;this.queue.drainDisabled=!0;for(let i=0,s=this.tracks.length;i0&&(o[h]=v);break}}c&&(g=g&~md|r[h]&md),r[h]=g}}from(e,t,i){const s=this.propertyIds;let r=cV;for(let o=0,a=i.length;o= 0.");return e>=this.tracks.length?null:this.tracks[e]}addListener(e){if(!e)throw new Error("listener cannot be null.");this.listeners.push(e)}removeListener(e){const t=this.listeners.indexOf(e);t>=0&&this.listeners.splice(t,1)}clearListeners(){this.listeners.length=0}clearListenerNotifications(){this.queue.clear()}};A(Bl,"emptyAnimation",new ev("",[],0));let gx=Bl;class aV{constructor(){A(this,"animation",null);A(this,"previous",null);A(this,"next",null);A(this,"mixingFrom",null);A(this,"mixingTo",null);A(this,"listener",null);A(this,"trackIndex",0);A(this,"loop",!1);A(this,"additive",!1);A(this,"reverse",!1);A(this,"shortestRotation",!1);A(this,"keepHold",!1);A(this,"eventThreshold",0);A(this,"mixAttachmentThreshold",0);A(this,"alphaAttachmentThreshold",0);A(this,"mixDrawOrderThreshold",0);A(this,"animationStart",0);A(this,"animationEnd",0);A(this,"animationLast",0);A(this,"nextAnimationLast",0);A(this,"delay",0);A(this,"trackTime",0);A(this,"trackLast",0);A(this,"nextTrackLast",0);A(this,"trackEnd",0);A(this,"timeScale",0);A(this,"alpha",0);A(this,"mixTime",0);A(this,"mixDuration",0);A(this,"totalAlpha",0);A(this,"mixInterpolation",$a.linear);A(this,"timelineMode",[]);A(this,"timelineHoldMix",[]);A(this,"timelinesRotation",[])}setMixDuration(e,t){this.mixDuration=e,t!==void 0&&(t<=0&&(t=this.previous==null?0:Math.max(t+this.previous.getTrackComplete()-e,0)),this.delay=t)}setMixInterpolation(e){if(!e)throw new Error("mixInterpolation cannot be null.");this.mixInterpolation=e}mix(){if(this.mixDuration===0)return 1;let e=this.mixTime/this.mixDuration;return e>=1?1:this.mixInterpolation===$a.linear?e:(e=this.mixInterpolation.apply(e),e<0?0:e>1?1:e)}reset(){this.next=null,this.previous=null,this.mixingFrom=null,this.mixingTo=null,this.mixInterpolation=$a.linear,this.animation=null,this.listener=null,this.timelineMode.length=0,this.timelineHoldMix.length=0,this.timelinesRotation.length=0}getAnimationTime(){if(!this.loop)return Math.min(this.trackTime+this.animationStart,this.animationEnd);const e=this.animationEnd-this.animationStart;return e===0?this.animationStart:this.trackTime%e+this.animationStart}setAnimationLast(e){this.animationLast=e,this.nextAnimationLast=e}isComplete(){return this.trackTime>=this.animationEnd-this.animationStart}resetRotationDirections(){this.timelinesRotation.length=0}getTrackComplete(){const e=this.animationEnd-this.animationStart;if(e!==0){if(this.loop)return e*(1+(this.trackTime/e|0));if(this.trackTime=0}}class lV{constructor(e){A(this,"objects",[]);A(this,"drainDisabled",!1);A(this,"animState");this.animState=e}start(e){this.objects.push(cn.start),this.objects.push(e),this.animState.animationsChanged=!0}interrupt(e){this.objects.push(cn.interrupt),this.objects.push(e)}end(e){this.objects.push(cn.end),this.objects.push(e),this.animState.animationsChanged=!0}dispose(e){this.objects.push(cn.dispose),this.objects.push(e)}complete(e){this.objects.push(cn.complete),this.objects.push(e)}event(e,t){this.objects.push(cn.event),this.objects.push(e),this.objects.push(t)}drain(){var e,t,i,s,r,o;if(!this.drainDisabled){this.drainDisabled=!0;for(let a=0;a= 0.");if(!i)throw new Error("name cannot be null.");this.index=t,this.parent=s}copy(t){const i=new vh(this.index,this.name,t);return i.length=this.length,i.setupPose.set(this.setupPose),i}}var ri;(function(n){n[n.Normal=0]="Normal",n[n.OnlyTranslation=1]="OnlyTranslation",n[n.NoRotationOrReflection=2]="NoRotationOrReflection",n[n.NoScale=3]="NoScale",n[n.NoScaleOrReflection=4]="NoScaleOrReflection"})(ri||(ri={}));class Um{constructor(){A(this,"bone");A(this,"x",0);A(this,"y",0);A(this,"rotation",0);A(this,"scaleX",0);A(this,"scaleY",0);A(this,"shearX",0);A(this,"shearY",0);A(this,"inherit",ri.Normal);A(this,"a",0);A(this,"b",0);A(this,"c",0);A(this,"d",0);A(this,"worldY",0);A(this,"worldX",0);A(this,"world",0);A(this,"local",0)}set(e){if(e==null)throw new Error("pose cannot be null.");this.x=e.x,this.y=e.y,this.rotation=e.rotation,this.scaleX=e.scaleX,this.scaleY=e.scaleY,this.shearX=e.shearX,this.shearY=e.shearY,this.inherit=e.inherit}setPosition(e,t){this.x=e,this.y=t}setScale(e,t){this.scaleX=e,this.scaleY=t===void 0?e:t}getInherit(){return this.inherit}setInherit(e){if(e==null)throw new Error("inherit cannot be null.");this.inherit=e}update(e,t){this.world!==e._update&&this.updateWorldTransform(e)}updateWorldTransform(e){this.local===e._update?this.updateLocalTransform(e):this.world=e._update;const t=this.rotation,i=this.scaleX,s=this.scaleY,r=this.shearX,o=this.shearY;if(!this.bone.parent){const h=e.scaleX,f=e.scaleY,p=(t+r)*ke.degRad,m=(t+90+o)*ke.degRad;this.a=Math.cos(p)*i*h,this.b=Math.cos(m)*s*h,this.c=Math.sin(p)*i*f,this.d=Math.sin(m)*s*f,this.worldX=this.x*h+e.x,this.worldY=this.y*f+e.y;return}const a=this.bone.parent.appliedPose;let c=a.a,l=a.b,d=a.c,u=a.d;switch(this.worldX=c*this.x+l*this.y+a.worldX,this.worldY=d*this.x+u*this.y+a.worldY,this.inherit){case ri.Normal:{const h=(t+r)*ke.degRad,f=(t+90+o)*ke.degRad,p=Math.cos(h)*i,m=Math.cos(f)*s,g=Math.sin(h)*i,v=Math.sin(f)*s;this.a=c*p+l*g,this.b=c*m+l*v,this.c=d*p+u*g,this.d=d*m+u*v;return}case ri.OnlyTranslation:{const h=e.scaleX,f=e.scaleY,p=(t+r)*ke.degRad,m=(t+90+o)*ke.degRad;this.a=Math.cos(p)*i*h,this.b=Math.cos(m)*s*h,this.c=Math.sin(p)*i*f,this.d=Math.sin(m)*s*f;break}case ri.NoRotationOrReflection:{const h=e.scaleX,f=e.scaleY,p=1/h,m=1/f;c*=p,d*=m;let g=c*c+d*d,v=0;g>ke.epsilon2?(g=Math.abs(c*u*m-l*p*d)/g,l=d*g,u=c*g,v=t-ke.atan2Deg(d,c)):(c=0,d=0,v=t-90+ke.atan2Deg(u,l));const y=(v+r)*ke.degRad,b=(v+o+90)*ke.degRad,w=Math.cos(y)*i,C=Math.cos(b)*s,T=Math.sin(y)*i,S=Math.sin(b)*s;this.a=(c*w-l*T)*h,this.b=(c*C-l*S)*h,this.c=(d*w+u*T)*f,this.d=(d*C+u*S)*f;break}case ri.NoScale:case ri.NoScaleOrReflection:{const h=e.scaleX,f=e.scaleY,p=1/h,m=1/f,g=t*ke.degRad,v=Math.cos(g),y=Math.sin(g);let b=(c*v+l*y)*p,w=(d*v+u*y)*m;const C=1/Math.sqrt(b*b+w*w);b*=C,w*=C;let T=-w,S=b;this.inherit===ri.NoScale&&c*u-l*d<0!=(h<0!=f<0)&&(T=-T,S=-S);const E=r*ke.degRad,_=(90+o)*ke.degRad,I=Math.cos(E)*i,M=Math.cos(_)*s,k=Math.sin(E)*i,B=Math.sin(_)*s;this.a=(b*I+T*k)*h,this.b=(b*M+T*B)*h,this.c=(w*I+S*k)*f,this.d=(w*M+S*B)*f;break}}}updateLocalTransform(e){this.local=0,this.world=e._update;const t=e.scaleX,i=e.scaleY;if(!this.bone.parent){const v=1/t,y=1/i;this.x=(this.worldX-e.x)*v,this.y=(this.worldY-e.y)*y,this.set5(this.a*v,this.b*v,this.c*y,this.d*y,0);return}const s=this.bone.parent.appliedPose;let r=s.a,o=s.b,a=s.c,c=s.d;const l=r*c-o*a,d=1/(r*c-o*a),u=c*d,h=o*d,f=a*d,p=r*d,m=this.worldX-s.worldX,g=this.worldY-s.worldY;switch(this.x=m*u-g*h,this.y=g*p-m*f,this.inherit){case ri.Normal:this.set5(u*this.a-h*this.c,u*this.b-h*this.d,p*this.c-f*this.a,p*this.d-f*this.b,0);break;case ri.OnlyTranslation:{const v=1/t,y=1/i;this.set5(this.a*v,this.b*v,this.c*y,this.d*y,0);break}case ri.NoRotationOrReflection:{const v=1/t,y=1/i;r*=v,a*=y;const b=this.a*v,w=this.b*v,C=this.c*y,T=this.d*y,S=1/(r*r+a*a),E=1/Math.abs(l*v*y);this.set5((r*b+a*C)*S,(r*w+a*T)*S,(r*C-a*b)*E,(r*T-a*w)*E,ke.atan2Deg(a,r));break}case ri.NoScale:case ri.NoScaleOrReflection:{const v=1/t,y=1/i,b=this.a*v,w=this.b*v,C=this.c*y,T=this.d*y;let S=c*this.a-o*this.c,E=r*this.c-a*this.a;l<0&&(S=-S,E=-E);let _=ke.atan2Deg(E,S);this.rotation=_,_*=ke.degRad;const I=Math.cos(_),M=Math.sin(_);let k=(r*I+o*M)*v,B=(a*I+c*M)*y;const D=1/Math.sqrt(k*k+B*B);k*=D,B*=D;const G=this.inherit===ri.NoScale&&l<0!=(t<0!=i<0)?-1:1;this.set4(k*b+B*C,k*w+B*T,(k*C-B*b)*G,(k*T-B*w)*G)}}}set4(e,t,i,s){const r=e*e+i*i,o=t*t+s*s;r>ke.epsilon2?(this.shearX=ke.atan2Deg(i,e),this.scaleX=Math.sqrt(r)):(this.shearX=0,this.scaleX=0),this.scaleY=Math.sqrt(o),o>ke.epsilon2?(this.shearY=ke.atan2Deg(s,t),e*s-t*i<0?(this.scaleY=-this.scaleY,this.shearY+=90):this.shearY-=90,this.shearY>180?this.shearY-=360:this.shearY<=-180&&(this.shearY+=360)):this.shearY=0}set5(e,t,i,s,r){this.shearX=0;const o=e*e+i*i,a=t*t+s*s;if(o>ke.epsilon2){const c=ke.atan2Deg(i,e);this.rotation=c+r,this.scaleX=Math.sqrt(o),this.scaleY=Math.sqrt(a),a>ke.epsilon2?(this.shearY=ke.atan2Deg(s,t),e*s-t*i<0?(this.scaleY=-this.scaleY,this.shearY+=90-c):this.shearY-=90+c,this.shearY>180?this.shearY-=360:this.shearY<=-180&&(this.shearY+=360)):this.shearY=0}else this.scaleX=0,this.scaleY=Math.sqrt(a),this.shearY=0,this.rotation=a>ke.epsilon2?ke.atan2Deg(s,t)-90+r:r}validateLocalTransform(e){this.local===e._update&&this.updateLocalTransform(e)}modifyLocal(e){this.local===e._update&&this.updateLocalTransform(e),this.world=0,this.resetWorld(e,e._update)}modifyWorld(e){const t=e._update;this.local=t,this.world=t,this.resetWorld(e,t)}resetWorld(e,t){const i=this.bone.children;for(let s=0,r=i.length;s1&&t.constrained(this.bones[1].bone)}isSourceActive(){return this.target.active}static apply(t,i,s,r,o,a,c,l,d,u){typeof s=="number"?Lr.apply1(t,i,s,r,o,a,c,l):Lr.apply2(t,i,s,r,o,a,c,l,d,u)}static apply1(t,i,s,r,o,a,c,l){i.modifyLocal(t);const d=i.bone.parent.appliedPose;let u=d.a,h=d.b,f=d.c,p=d.d,m=-i.shearX-i.rotation,g=0,v=0;switch(i.inherit){case ri.OnlyTranslation:g=(s-i.worldX)*ke.signum(t.scaleX),v=(r-i.worldY)*ke.signum(t.scaleY);break;case ri.NoRotationOrReflection:{const y=Math.abs(u*p-h*f)/Math.max(ke.epsilon,u*u+f*f),b=u/t.scaleX,w=f/t.scaleY;h=-w*y*t.scaleX,p=b*y*t.scaleY,m+=ke.atan2Deg(w,b)}default:{const y=s-d.worldX,b=r-d.worldY,w=u*p-h*f;Math.abs(w)<=ke.epsilon?(g=0,v=0):(g=(y*p-b*h)/w-i.x,v=(b*u-y*f)/w-i.y)}}if(m+=ke.atan2Deg(v,g),i.scaleX<0&&(m+=180),m>180?m-=360:m<=-180&&(m+=360),i.rotation+=m*l,o||a){switch(i.inherit){case ri.NoScale:case ri.NoScaleOrReflection:g=s-i.worldX,v=r-i.worldY}const y=i.bone.data.length*i.scaleX;if(y>ke.epsilon){const b=g*g+v*v;if(o&&by*y){const w=(Math.sqrt(b)/y-1)*l+1;switch(i.scaleX*=w,c){case en.Uniform:i.scaleY*=w;break;case en.Volume:i.scaleY/=w<.7?.25+.642857*w:w}}}}}static apply2(t,i,s,r,o,a,c,l,d,u){if(i.inherit!==ri.Normal||s.inherit!==ri.Normal)return;i.modifyLocal(t),s.modifyLocal(t);let h=i.x,f=i.y,p=i.scaleX,m=i.scaleY,g=s.scaleX,v=0,y=0,b=0;p<0?(p=-p,v=180,b=-1):(v=0,b=1),m<0&&(m=-m,b=-b),g<0?(g=-g,y=180):y=0;let w=0,C=0,T=i.a,S=i.b,E=i.c,_=i.d;const I=Math.abs(p-m)<=ke.epsilon;!I||c?(s.y=0,w=T*s.x+i.worldX,C=E*s.x+i.worldY):(w=T*s.x+S*s.y+i.worldX,C=E*s.x+_*s.y+i.worldY);const M=i.bone.parent.appliedPose;T=M.a,S=M.b,E=M.c,_=M.d;let k=T*_-S*E,B=w-M.worldX,D=C-M.worldY;k=Math.abs(k)<=ke.epsilon?0:1/k;const G=(B*_-D*S)*k-h,V=(D*T-B*E)*k-f;let Y=Math.sqrt(G*G+V*V),L=s.bone.data.length*g,N,F;if(Y0){let le=Math.min(1,oe/(d*2))-1;le=(oe-d*(1-le*le))/J,$-=le*$,X-=le*X,z=$*$+X*X}}e:if(I){L*=p;let J=(z-Y*Y-L*L)/(2*Y*L);if(J<-1)J=-1,F=Math.PI*a;else if(J>1){if(J=1,F=0,c)switch(T=(Math.sqrt(z)/(Y+L)-1)*u+1,i.scaleX*=T,l){case en.Uniform:i.scaleY*=T;break;case en.Volume:i.scaleY/=T<.7?.25+.642857*T:T}}else F=Math.acos(J)*a;T=Y+L*J,S=L*Math.sin(F),N=Math.atan2(X*T-$*S,$*T+X*S)}else{T=p*L,S=m*L;const J=T*T,oe=S*S,le=Math.atan2(X,$);E=oe*Y*Y+J*z-J*oe;const ve=-2*oe*Y,Se=oe-J;if(_=ve*ve-4*Se*E,_>=0){let U=Math.sqrt(_);ve<0&&(U=-U),U=-(ve+U)*.5;let W=U/Se,ee=E/U;const ne=Math.abs(W)=0){D=Math.sqrt(W)*a,N=le-Math.atan2(D,ne),F=Math.atan2(D/m,(ne-Y)/p);break e}}let fe=ke.PI,be=Y-T,q=be*be,Z=0,se=0,j=Y+T,H=j*j,O=0;E=-T*Y/(J-oe),E>=-1&&E<=1&&(E=Math.acos(E),B=T*Math.cos(E)+Y,D=S*Math.sin(E),_=B*B+D*D,_H&&(se=E,H=_,j=B,O=D)),z<=(q+H)*.5?(N=le-Math.atan2(Z*a,be),F=fe*a):(N=le-Math.atan2(O*a,j),F=se*a)}const K=Math.atan2(s.y,s.x)*b;N=(N-K)*ke.radDeg+v-i.rotation,N>180?N-=360:N<=-180&&(N+=360),i.rotation+=N*u,F=((F+K)*ke.radDeg-s.shearX)*b+y-s.rotation,F>180?F-=360:F<=-180&&(F+=360),s.rotation+=F*u}}class kd extends Sc{constructor(t){super(t,new Vm);A(this,"bones",[]);A(this,"_target",null);A(this,"_scaleYMode",en.None)}set target(t){this._target=t}get target(){if(!this._target)throw new Error("target cannot be null.");return this._target}set scaleYMode(t){this._scaleYMode=t}get scaleYMode(){if(this._scaleYMode==null)throw new Error("scaleYMode cannot be null.");return this._scaleYMode}create(t){return new Lr(this,t)}}class Xm{constructor(){A(this,"position",0);A(this,"spacing",0);A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0)}set(e){this.position=e.position,this.spacing=e.spacing,this.mixRotate=e.mixRotate,this.mixX=e.mixX,this.mixY=e.mixY}}class Rd extends Sc{constructor(t){super(t,new Xm);A(this,"bones",[]);A(this,"_slot",null);A(this,"positionMode",Ps.Fixed);A(this,"spacingMode",Ti.Fixed);A(this,"rotateMode",$o.Chain);A(this,"offsetRotation",0)}set slot(t){this._slot=t}get slot(){if(this._slot)return this._slot;throw new Error("SlotData not set.")}create(t){return new Ym(this,t)}}var Ps;(function(n){n[n.Fixed=0]="Fixed",n[n.Percent=1]="Percent"})(Ps||(Ps={}));var Ti;(function(n){n[n.Length=0]="Length",n[n.Fixed=1]="Fixed",n[n.Percent=2]="Percent",n[n.Proportional=3]="Proportional"})(Ti||(Ti={}));var $o;(function(n){n[n.Tangent=0]="Tangent",n[n.Chain=1]="Chain",n[n.ChainScale=2]="ChainScale"})($o||($o={}));const zn=class zn extends wc{constructor(t,i){super(t,new Xm,new Xm);A(this,"data");A(this,"bones");A(this,"slot");A(this,"spaces",[]);A(this,"positions",[]);A(this,"world",[]);A(this,"curves",[]);A(this,"lengths",[]);A(this,"segments",[]);if(!i)throw new Error("skeleton cannot be null.");this.data=t,this.bones=[];for(const s of this.data.bones)this.bones.push(i.bones[s.index].constrainedPose);this.slot=i.slots[t.slot.index]}copy(t){var i=new zn(this.data,t);return i.pose.set(this.pose),i}update(t,i){const s=this.slot.appliedPose.attachment;if(!(s instanceof dc))return;const r=this.appliedPose,o=r.mixRotate,a=r.mixX,c=r.mixY;if(o===0&&a===0&&c===0)return;const l=this.data,d=l.rotateMode===$o.Tangent,u=l.rotateMode===$o.ChainScale,h=this.bones,f=h.length,p=d?f:f+1,m=Ke.setArraySize(this.spaces,p),g=u?this.lengths=Ke.setArraySize(this.lengths,f):[],v=r.spacing;switch(l.spacingMode){case Ti.Percent:if(u)for(let S=0,E=p-1;S0){S=p/S*v;for(let E=1;E0?ke.degRad:-ke.degRad}for(let S=0,E=3;S0){let D=_.a,G=_.b,V=_.c,Y=_.d,L=0,N=0,F=0;if(d?L=y[E-1]:m[S+1]===0?L=y[E+2]:L=Math.atan2(B,k),L-=Math.atan2(V,D),T){N=Math.cos(L),F=Math.sin(L);const $=_.bone.data.length;b+=($*(N*D-F*V)-k)*o,w+=($*(F*D+N*V)-B)*o}else L+=C;L>ke.PI?L-=ke.PI2:L<-ke.PI&&(L+=ke.PI2),L*=o,N=Math.cos(L),F=Math.sin(L),_.a=N*D-F*V,_.b=N*G-F*Y,_.c=F*D+N*V,_.d=F*G+N*Y}}}computeWorldPositions(t,i,s,r){const o=this.slot;let a=this.appliedPose.position,c=this.spaces,l=Ke.setArraySize(this.positions,s*3+2),d=this.world;const u=i.closed;let h=i.worldVerticesLength,f=h/6,p=zn.NONE;if(!i.constantSpeed){const F=i.lengths;f-=u?1:2;const $=F[f];this.data.positionMode===Ps.Percent&&(a*=$);let X;switch(this.data.spacingMode){case Ti.Percent:X=$;break;case Ti.Proportional:X=$/s;break;default:X=1}d=Ke.setArraySize(this.world,8);for(let z=0,K=0,J=0;z$){p!==zn.AFTER&&(p=zn.AFTER,i.computeWorldVertices(t,o,h-6,4,d,0,2)),this.addAfterPosition(le-$,d,0,l,K);continue}for(;;J++){const ve=F[J];if(!(le>ve)){if(J===0)le/=ve;else{const Se=F[J-1];le=(le-Se)/(ve-Se)}break}}J!==p&&(p=J,u&&J===f?(i.computeWorldVertices(t,o,h-4,4,d,0,2),i.computeWorldVertices(t,o,0,4,d,4,2)):i.computeWorldVertices(t,o,J*6+2,8,d,0,2)),this.addCurvePosition(le,d[0],d[1],d[2],d[3],d[4],d[5],d[6],d[7],l,K,r||z>0&&oe===0)}return l}u?(h+=2,d=Ke.setArraySize(this.world,h),i.computeWorldVertices(t,o,2,h-4,d,0,2),i.computeWorldVertices(t,o,0,2,d,h-4,2),d[h-2]=d[0],d[h-1]=d[1]):(f--,h-=4,d=Ke.setArraySize(this.world,h),i.computeWorldVertices(t,o,2,h,d,0,2));const m=Ke.setArraySize(this.curves,f);let g=0,v=d[0],y=d[1],b=0,w=0,C=0,T=0,S=0,E=0,_=0,I=0,M=0,k=0,B=0,D=0,G=0,V=0;for(let F=0,$=2;Fg){this.addAfterPosition(J-g,d,h-4,l,$);continue}for(;;X++){const oe=m[X];if(!(J>oe)){if(X===0)J/=oe;else{const le=m[X-1];J=(J-le)/(oe-le)}break}}if(X!==p){p=X;let oe=X*6;for(v=d[oe],y=d[oe+1],b=d[oe+2],w=d[oe+3],C=d[oe+4],T=d[oe+5],S=d[oe+6],E=d[oe+7],_=(v-b*2+C)*.03,I=(y-w*2+T)*.03,M=((b-C)*3-v+S)*.006,k=((w-T)*3-y+E)*.006,B=_*2+M,D=I*2+k,G=(b-v)*.3+_+M*.16666667,V=(w-y)*.3+I+k*.16666667,N=Math.sqrt(G*G+V*V),L[0]=N,oe=1;oe<8;oe++)G+=B,V+=D,B+=M,D+=k,N+=Math.sqrt(G*G+V*V),L[oe]=N;G+=B,V+=D,N+=Math.sqrt(G*G+V*V),L[8]=N,G+=B+M,V+=D+k,N+=Math.sqrt(G*G+V*V),L[9]=N,z=0}for(J*=N;;z++){const oe=L[z];if(!(J>oe)){if(z===0)J/=oe;else{const le=L[z-1];J=z+(J-le)/(oe-le)}break}}this.addCurvePosition(J*.1,v,y,b,w,C,T,S,E,l,$,r||F>0&&K===0)}return l}addBeforePosition(t,i,s,r,o){const a=i[s],c=i[s+1],l=i[s+2]-a,d=i[s+3]-c,u=Math.atan2(d,l);r[o]=a+t*Math.cos(u),r[o+1]=c+t*Math.sin(u),r[o+2]=u}addAfterPosition(t,i,s,r,o){const a=i[s+2],c=i[s+3],l=a-i[s],d=c-i[s+1],u=Math.atan2(d,l);r[o]=a+t*Math.cos(u),r[o+1]=c+t*Math.sin(u),r[o+2]=u}addCurvePosition(t,i,s,r,o,a,c,l,d,u,h,f){if(t===0||Number.isNaN(t)){u[h]=i,u[h+1]=s,u[h+2]=Math.atan2(o-s,r-i);return}const p=t*t,m=p*t,g=1-t,v=g*g,y=v*g,b=g*t,w=b*3,C=g*w,T=w*t,S=i*y+r*C+a*T+l*m,E=s*y+o*C+c*T+d*m;u[h]=S,u[h+1]=E,f&&(t<.001?u[h+2]=Math.atan2(o-s,r-i):u[h+2]=Math.atan2(E-(s*v+o*b*2+c*p),S-(i*v+r*b*2+a*p)))}sort(t){const i=this.slot.data.index,s=this.slot.bone;t.skin!=null&&this.sortPathSlot(t,t.skin,i,s),t.data.defaultSkin!=null&&t.data.defaultSkin!==t.skin&&this.sortPathSlot(t,t.data.defaultSkin,i,s),this.sortPath(t,this.slot.pose.attachment,s);const r=this.bones,o=this.bones.length;for(let a=0;a0,a=this.data.y>0,c=this.data.rotate>0||this.data.shearX>0,l=this.data.scaleX>0,d=this.bone;let u=d.bone.data.length,h=this.data.step,f=0;if(i!==Ao.none){switch(d.modifyWorld(t),i){case Ao.reset:this.reset(t);case Ao.update:{const p=Math.max(t.time-this.lastTime,0),m=this.remaining;this.remaining+=p,this.lastTime=t.time;const g=d.worldX,v=d.worldY;if(this._reset)this._reset=!1,this.ux=g,this.uy=v;else{let y=this.remaining,b=s.inertia,w=t.data.referenceScale,C=-1,T=0,S=0,E=this.data.limit*p,_=E*Math.abs(t.scaleY);if(E*=Math.abs(t.scaleX),o||a){if(o){const I=(this.ux-g)*b;this.xOffset+=I>E?E:I<-E?-E:I,this.ux=g}if(a){const I=(this.uy-v)*b;this.yOffset+=I>_?_:I<-_?-_:I,this.uy=v}if(y>=h){const I=this.xOffset,M=this.yOffset;C=s.damping**(60*h),T=h*s.massInverse,S=s.strength;const k=w*s.wind,B=w*s.gravity,D=(k*t.windX+B*t.gravityX)*t.scaleX,G=(k*t.windY+B*t.gravityY)*t.scaleY;do o&&(this.xVelocity+=(D-this.xOffset*S)*T,this.xOffset+=this.xVelocity*h,this.xVelocity*=C),a&&(this.yVelocity-=(G+this.yOffset*S)*T,this.yOffset+=this.yVelocity*h,this.yVelocity*=C),y-=h;while(y>=h);this.xLag=this.xOffset-I,this.yLag=this.yOffset-M}f=Math.max(0,1-y/h),o&&(d.worldX+=(this.xOffset-this.xLag*f)*r*this.data.x),a&&(d.worldY+=(this.yOffset-this.yLag*f)*r*this.data.y)}if(c||l){let I=Math.atan2(d.c,d.a),M=0,k=0,B=0,D=this.cx-d.worldX,G=this.cy-d.worldY;if(D>E?D=E:D<-E&&(D=-E),G>_?G=_:G<-_&&(G=-_),y=this.remaining,c){B=(this.data.rotate+this.data.shearX)*r,f=this.rotateLag*Math.max(0,1-m/h);let V=Math.atan2(G+this.ty,D+this.tx)-I-(this.rotateOffset-f)*B;this.rotateOffset+=(V-Math.ceil(V*ke.invPI2-.5)*ke.PI2)*b,V=(this.rotateOffset-f)*B+I,M=Math.cos(V),k=Math.sin(V),l&&(V=u*d.getWorldScaleX(),V>0&&(this.scaleOffset+=(D*M+G*k)*b/V))}else{M=Math.cos(I),k=Math.sin(I);const V=u*d.getWorldScaleX()-this.scaleLag*Math.max(0,1-m/h);V>0&&(this.scaleOffset+=(D*M+G*k)*b/V)}if(y>=h){C===-1&&(C=s.damping**(60*h),T=h*s.massInverse,S=s.strength);const V=s.wind*t.windX+s.gravity*t.gravityX,Y=(s.wind*t.windY+s.gravity*t.gravityY)*Hm.yDir,L=this.rotateOffset,N=this.scaleOffset,F=u/w;for(;;)if(y-=h,l&&(this.scaleVelocity+=(V*M-Y*k-this.scaleOffset*S)*T,this.scaleOffset+=this.scaleVelocity*h,this.scaleVelocity*=C),c){if(this.rotateVelocity-=((V*k+Y*M)*F+this.rotateOffset*S)*T,this.rotateOffset+=this.rotateVelocity*h,this.rotateVelocity*=C,y0){let y=0;this.data.rotate>0&&(y=p*this.data.rotate,m=Math.sin(y),g=Math.cos(y),v=d.b,d.b=g*v-m*d.d,d.d=m*v+g*d.d),y+=p*this.data.shearX,m=Math.sin(y),g=Math.cos(y),v=d.a,d.a=g*v-m*d.c,d.c=m*v+g*d.c}else p*=this.data.rotate,m=Math.sin(p),g=Math.cos(p),v=d.a,d.a=g*v-m*d.c,d.c=m*v+g*d.c,v=d.b,d.b=g*v-m*d.d,d.d=m*v+g*d.d}if(l){let p=1+(this.scaleOffset-this.scaleLag*f)*r*this.data.scaleX;switch(d.a*=p,d.c*=p,this.data.scaleYMode){case en.Uniform:d.b*=p,d.d*=p;break;case en.Volume:p=Math.abs(p),p=p>=.7?1/p:4-3.67347*p,d.b*=p,d.d*=p}}i!==Ao.pose&&(this.tx=u*d.a,this.ty=u*d.c)}}sort(t){const i=this.bone.bone;t.sortBone(i),t._updateCache.push(this),t.sortReset(i.children),t.constrained(i)}isSourceActive(){return this.bone.bone.active}}class Fd extends Sc{constructor(t){super(t,new zm);A(this,"_bone",null);A(this,"x",0);A(this,"y",0);A(this,"rotate",0);A(this,"scaleX",0);A(this,"shearX",0);A(this,"limit",0);A(this,"step",0);A(this,"inertiaGlobal",!1);A(this,"strengthGlobal",!1);A(this,"dampingGlobal",!1);A(this,"massGlobal",!1);A(this,"windGlobal",!1);A(this,"gravityGlobal",!1);A(this,"mixGlobal",!1);A(this,"_scaleYMode",en.None)}set bone(t){this._bone=t}get bone(){if(this._bone)return this._bone;throw new Error("BoneData not set.")}get scaleYMode(){return this._scaleYMode}set scaleYMode(t){if(t==null)throw new Error("scaleYMode cannot be null.");this._scaleYMode=t}create(t){return new bh(this,t)}}typeof Math.fround>"u"&&(Math.fround=(n=>e=>(n[0]=e,n[0]))(new Float32Array(1)));class Gm{constructor(){A(this,"time",0);A(this,"mix",0)}set(e){this.time=e.time,this.mix=e.mix}}const Ul=class Ul extends wc{constructor(t,i){super(t,new Gm,new Gm);A(this,"bone",null);if(!i)throw new Error("skeleton cannot be null.");t.bone!=null&&(this.bone=i.bones[t.bone.index])}copy(t){var i=new Ul(this.data,t);return i.pose.set(this.pose),i}update(t,i){const s=this.appliedPose;if(s.mix===0)return;const r=this.data,o=r.animation,a=this.bone;if(a!==null){if(!a.active)return;r.local&&a.appliedPose.validateLocalTransform(t),s.time=r.offset+(r.property.value(t,a.appliedPose,r.local,Ul.offsets)-r.property.offset)*r.scale,r.loop?s.time=o.duration+s.time%o.duration:s.time=Math.max(0,s.time)}const c=t.bones,l=o.bones;for(let d=0,u=o.bones.length;d=s.length&&(s.length=e+1),s[e]||(s[e]={}),s[e][t]=i}addSkin(e){for(let i=0;i= 0.");if(!s)throw new Error("boneData cannot be null.");this.index=t,this.boneData=s}}var Pu;(function(n){n[n.Normal=0]="Normal",n[n.Additive=1]="Additive",n[n.Multiply=2]="Multiply",n[n.Screen=3]="Screen"})(Pu||(Pu={}));class Km{constructor(){A(this,"mixRotate",0);A(this,"mixX",0);A(this,"mixY",0);A(this,"mixScaleX",0);A(this,"mixScaleY",0);A(this,"mixShearY",0)}set(e){this.mixRotate=e.mixRotate,this.mixX=e.mixX,this.mixY=e.mixY,this.mixScaleX=e.mixScaleX,this.mixScaleY=e.mixScaleY,this.mixShearY=e.mixShearY}}class av extends wc{constructor(t,i){super(t,new Km,new Km);A(this,"bones");A(this,"source");if(!i)throw new Error("skeleton cannot be null.");this.bones=[];for(const r of t.bones)this.bones.push(i.bones[r.index].constrainedPose);const s=i.bones[t.source.index];if(s==null)throw new Error("source cannot be null.");this.source=s}copy(t){var i=new av(this.data,t);return i.pose.set(this.pose),i}update(t,i){const s=this.appliedPose;if(s.mixRotate===0&&s.mixX===0&&s.mixY===0&&s.mixScaleX===0&&s.mixScaleY===0&&s.mixShearY===0)return;const r=this.data,o=r.localSource,a=r.localTarget,c=r.additive,l=r.clamp,d=r.offsets,u=this.source.appliedPose;o&&u.validateLocalTransform(t);const h=r.properties,f=r.properties.length,p=this.bones;for(let m=0,g=this.bones.length;m0?s[Mt.ROTATION]:-s[Mt.ROTATION]);return a<0&&(a+=360),a}}class ST extends il{mix(e){return e.mixRotate}apply(e,t,i,s,r,o){if(r)i.rotation+=(o?s:s-i.rotation)*t.mixRotate;else{const a=e.scaleX,c=e.scaleY,l=1/a,d=1/c,u=i.a*l,h=i.b*l,f=i.c*d,p=i.d*d;s*=ke.degRad,o||(s-=Math.atan2(f,u)),s>ke.PI?s-=ke.PI2:s<-ke.PI&&(s+=ke.PI2),s*=t.mixRotate;const m=Math.cos(s),g=Math.sin(s);i.a=(m*u-g*f)*a,i.b=(m*h-g*p)*a,i.c=(g*u+m*f)*c,i.d=(g*h+m*p)*c}}}class Zm extends tl{value(e,t,i,s){return i?t.x+s[Mt.X]:(s[Mt.X]*t.a+s[Mt.Y]*t.b+t.worldX)/e.scaleX}}class CT extends il{mix(e){return e.mixX}apply(e,t,i,s,r,o){r?i.x+=(o?s:s-i.x)*t.mixX:(o||(s-=i.worldX/e.scaleX),i.worldX+=s*t.mixX*e.scaleX)}}class Qm extends tl{value(e,t,i,s){return i?t.y+s[Mt.Y]:(s[Mt.X]*t.c+s[Mt.Y]*t.d+t.worldY)/e.scaleY}}class AT extends il{mix(e){return e.mixY}apply(e,t,i,s,r,o){r?i.y+=(o?s:s-i.y)*t.mixY:(o||(s-=i.worldY/e.scaleY),i.worldY+=s*t.mixY*e.scaleY)}}class eg extends tl{value(e,t,i,s){if(i)return t.scaleX+s[Mt.SCALEX];const r=t.a/e.scaleX,o=t.c/e.scaleY;return Math.sqrt(r*r+o*o)+s[Mt.SCALEX]}}class TT extends il{mix(e){return e.mixScaleX}apply(e,t,i,s,r,o){if(r)o?i.scaleX*=1+(s-1)*t.mixScaleX:i.scaleX!==0&&(i.scaleX+=(s-i.scaleX)*t.mixScaleX);else if(o){const a=1+(s-1)*t.mixScaleX;i.a*=a,i.c*=a}else{let a=i.a/e.scaleX,c=i.c/e.scaleY,l=Math.sqrt(a*a+c*c);l!==0&&(l=1+(s-l)*t.mixScaleX/l,i.a*=l,i.c*=l)}}}class tg extends tl{value(e,t,i,s){if(i)return t.scaleY+s[Mt.SCALEY];const r=t.b/e.scaleX,o=t.d/e.scaleY;return Math.sqrt(r*r+o*o)+s[Mt.SCALEY]}}class ET extends il{mix(e){return e.mixScaleY}apply(e,t,i,s,r,o){if(r)o?i.scaleY*=1+(s-1)*t.mixScaleY:i.scaleY!==0&&(i.scaleY+=(s-i.scaleY)*t.mixScaleY);else if(o){const a=1+(s-1)*t.mixScaleY;i.b*=a,i.d*=a}else{let a=i.b/e.scaleX,c=i.d/e.scaleY,l=Math.sqrt(a*a+c*c);l!==0&&(l=1+(s-l)*t.mixScaleY/l,i.b*=l,i.d*=l)}}}class ig extends tl{value(e,t,i,s){if(i)return t.shearY+s[Mt.SHEARY];const r=1/e.scaleX,o=1/e.scaleY;return(Math.atan2(t.d*o,t.b*r)-Math.atan2(t.c*o,t.a*r))*ke.radDeg-90+s[Mt.SHEARY]}}class _T extends il{mix(e){return e.mixShearY}apply(e,t,i,s,r,o){if(r)o||(s-=i.shearY),i.shearY+=s*t.mixShearY;else{const a=e.scaleX,c=e.scaleY,l=i.b/a,d=i.d/c,u=Math.atan2(d,l);s=(s+90)*ke.degRad,o?s-=ke.PI/2:(s-=u-Math.atan2(i.c/c,i.a/a),s>ke.PI?s-=ke.PI2:s<-ke.PI&&(s+=ke.PI2)),s=u+s*t.mixShearY;const h=Math.sqrt(l*l+d*d);i.b=Math.cos(s)*h*a,i.d=Math.sin(s)*h*c}}}class YQ{constructor(e){A(this,"scale",1);A(this,"attachmentLoader");A(this,"linkedMeshes",[]);this.attachmentLoader=e}readSkeletonData(e){const t=this.scale,i=new xT;i.name="";const s=new uV(e),r=s.readInt32(),o=s.readInt32();i.hash=o===0&&r===0?null:o.toString(16)+r.toString(16),i.version=s.readString(),i.x=s.readFloat(),i.y=s.readFloat(),i.width=s.readFloat(),i.height=s.readFloat(),i.referenceScale=s.readFloat()*t;const a=s.readBoolean();a&&(i.fps=s.readFloat(),i.imagesPath=s.readString(),i.audioPath=s.readString());let c=0;c=s.readInt(!0);for(let p=0;p>5;for(let w=0,C;w>1&1,v.spacingMode=y>>2&3,v.rotateMode=y>>4&3,(y&128)!==0&&(v.offsetRotation=s.readFloat());const b=v.setupPose;b.position=s.readFloat(),v.positionMode===Ps.Fixed&&(b.position*=t),b.spacing=s.readFloat(),(v.spacingMode===Ti.Length||v.spacingMode===Ti.Fixed)&&(b.spacing*=t),b.mixRotate=s.readFloat(),b.mixX=s.readFloat(),b.mixY=s.readFloat(),d.push(v);break}case DV:{const v=new Fd(m);v.bone=l[s.readInt(!0)];let y=s.readByte();if(v.skinRequired=(y&1)!==0,(y&2)!==0&&(v.x=s.readFloat()),(y&4)!==0&&(v.y=s.readFloat()),(y&8)!==0&&(v.rotate=s.readFloat()),(y&16)!==0){let w=s.readFloat();w<-2?(v.scaleYMode=en.Volume,w=-2-w):w<0&&(v.scaleYMode=en.Uniform,w=-1-w),v.scaleX=w}(y&32)!==0&&(v.shearX=s.readFloat()),v.limit=((y&64)!==0?s.readFloat():5e3)*t,v.step=1/s.readUnsignedByte();const b=v.setupPose;b.inertia=s.readFloat(),b.strength=s.readFloat(),b.damping=s.readFloat(),b.massInverse=(y&128)!==0?s.readFloat():1,b.wind=s.readFloat(),b.gravity=s.readFloat(),y=s.readByte(),(y&1)!==0&&(v.inertiaGlobal=!0),(y&2)!==0&&(v.strengthGlobal=!0),(y&4)!==0&&(v.dampingGlobal=!0),(y&8)!==0&&(v.massGlobal=!0),(y&16)!==0&&(v.windGlobal=!0),(y&32)!==0&&(v.gravityGlobal=!0),(y&64)!==0&&(v.mixGlobal=!0),b.mix=(y&128)!==0?s.readFloat():1,d.push(v);break}case OV:{const v=new Eo(m),y=s.readByte();if(v.skinRequired=(y&1)!==0,v.loop=(y&2)!==0,v.additive=(y&4)!==0,(y&8)!==0){const b=s.readFloat();a&&(y&64)!==0?v.max=b:v.setupPose.time=b}if((y&16)!==0&&(v.setupPose.mix=(y&32)!==0?s.readFloat():1),(y&64)!==0){v.local=(y&128)!==0,v.bone=l[s.readInt(!0)];const b=s.readFloat();let w=1;switch(s.readByte()){case 0:v.property=new Jm;break;case 1:{w=t,v.property=new Zm;break}case 2:{w=t,v.property=new Qm;break}case 3:v.property=new eg;break;case 4:v.property=new tg;break;case 5:v.property=new ig;break;default:continue}v.property.offset=b*w,v.offset=s.readFloat(),v.scale=s.readFloat()/w}d.push(v);break}}}const h=this.readSkin(s,i,!0,a);h&&(i.defaultSkin=h,i.skins.push(h));{let p=i.skins.length;for(Ke.setArraySize(i.skins,c=p+s.readInt(!0));p0){y=[];for(let S=0;S>4,e.readFloat())}r.push(I);break}}}}}const a=i.slots.length,c=e.readInt(!0);if(c>0){const f=new qr(c);for(let p=0;p0){const f=new cc(d);for(let p=0;p>>1^-(i&1)}readStringRef(){const e=this.readInt(!0);return e===0?null:this.strings[e-1]}readString(){let e=this.readInt(!0);switch(e){case 0:return null;case 1:return""}e--;let t="";for(let i=0;i>4){case 12:case 13:t+=String.fromCharCode((s&31)<<6|this.readByte()&63),i+=2;break;case 14:t+=String.fromCharCode((s&15)<<12|(this.readByte()&63)<<6|this.readByte()&63),i+=3;break;default:t+=String.fromCharCode(s),i++}}return t}readFloat(){const e=this.buffer.getFloat32(this.index);return this.index+=4,e}readBoolean(){return this.readByte()!==0}}let hV=class{constructor(e,t,i,s,r,o){A(this,"source");A(this,"skinIndex");A(this,"slotIndex");A(this,"sourceIndex");A(this,"mesh");A(this,"inheritTimelines");this.mesh=e,this.skinIndex=t,this.slotIndex=i,this.sourceIndex=s,this.source=r,this.inheritTimelines=o}};class Cx{constructor(e=null,t,i=0){A(this,"bones");A(this,"vertices");A(this,"length");this.bones=e,this.vertices=t,this.length=i}}var Ys;(function(n){n[n.Region=0]="Region",n[n.BoundingBox=1]="BoundingBox",n[n.Mesh=2]="Mesh",n[n.LinkedMesh=3]="LinkedMesh",n[n.Path=4]="Path",n[n.Point=5]="Point",n[n.Clipping=6]="Clipping"})(Ys||(Ys={}));function pi(n,e,t,i){t instanceof nr?fV(n,e,t,i):pV(n,e,t,i)}function fV(n,e,t,i){let s=n.readFloat(),r=n.readFloat()*i;for(let o=0,a=0,c=t.getFrameCount()-1;t.setFrame(o,s,r),o!==c;o++){const l=n.readFloat(),d=n.readFloat()*i;switch(n.readByte()){case ps:t.setStepped(o);break;case ms:vt(n,t,a++,o,0,s,l,r,d,i)}s=l,r=d}e.push(t)}function pV(n,e,t,i){let s=n.readFloat(),r=n.readFloat()*i,o=n.readFloat()*i;for(let a=0,c=0,l=t.getFrameCount()-1;t.setFrame(a,s,r,o),a!==l;a++){const d=n.readFloat(),u=n.readFloat()*i,h=n.readFloat()*i;switch(n.readByte()){case ps:t.setStepped(a);break;case ms:vt(n,t,c++,a,0,s,d,r,u,i),vt(n,t,c++,a,1,s,d,o,h,i)}s=d,r=u,o=h}e.push(t)}function Ax(n,e){const t=n.readInt(!0);if(t===0)return null;const i=new Array(e).fill(-1),s=new Array(e-t);let r=0,o=0;for(let a=0;a=0;a--)i[a]===-1&&(i[a]=s[--o]);return i}function vt(n,e,t,i,s,r,o,a,c,l){e.setBezier(t,i,s,r,a,n.readFloat(),n.readFloat()*l,n.readFloat(),n.readFloat()*l,o,c)}const mV=0,gV=1,vV=2,bV=3,yV=4,xV=5,wV=6,SV=7,CV=8,AV=9,TV=10,EV=0,_V=1,MV=2,PV=3,IV=4,kV=5,RV=0,FV=1,LV=2,DV=3,OV=4,NV=0,$V=1,BV=0,UV=1,VV=2,XV=0,YV=1,zV=2,jV=4,HV=5,GV=6,WV=7,qV=8,KV=0,JV=1,ps=1,ms=2;class ZV{constructor(e){A(this,"attachmentLoader");A(this,"scale",1);A(this,"linkedMeshes",[]);this.attachmentLoader=e}readSkeletonData(e){const t=this.scale,i=new xT,s=typeof e=="string"?JSON.parse(e):e,r=s.skeleton;if(r&&(i.hash=r.hash,i.version=r.spine,i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height,i.referenceScale=re(r,"referenceScale",100)*t,i.fps=r.fps,i.imagesPath=r.images??null,i.audioPath=r.audio??null),s.bones)for(let o=0;o0&&l.properties.push(T)}l.offsets[Mt.ROTATION]=re(o,"rotation",0),l.offsets[Mt.X]=re(o,"x",0)*t,l.offsets[Mt.Y]=re(o,"y",0)*t,l.offsets[Mt.SCALEX]=re(o,"scaleX",0),l.offsets[Mt.SCALEY]=re(o,"scaleY",0),l.offsets[Mt.SHEARY]=re(o,"shearY",0);const b=l.setupPose;h&&(b.mixRotate=re(o,"mixRotate",1)),f&&(b.mixX=re(o,"mixX",1)),p&&(b.mixY=re(o,"mixY",b.mixX)),m&&(b.mixScaleX=re(o,"mixScaleX",1)),g&&(b.mixScaleY=re(o,"mixScaleY",b.mixScaleX)),v&&(b.mixShearY=re(o,"mixShearY",1)),i.constraints.push(l);break}case"path":{const l=new Rd(a);l.skinRequired=c;for(let f=0;f0){const h=i.findConstraint(l,Fd);if(!h)throw new Error(`Physics constraint not found: ${l}`);u=i.constraints.indexOf(h)}for(const h in d){const f=d[h];let p=f[0];if(!p)continue;const m=f.length;let g,v=0;if(h==="reset"){const y=new Mu(m,u);for(let b=0;p!=null;p=f[b+1],b++)y.setFrame(b,re(p,"time",0));r.push(y);continue}switch(h){case"inertia":g=new lT(m,m,u);break;case"strength":g=new cT(m,m,u);break;case"damping":g=new dT(m,m,u);break;case"mass":g=new uT(m,m,u);break;case"wind":g=new hT(m,m,u);break;case"gravity":g=new fT(m,m,u);break;case"mix":{v=1,g=new pT(m,m,u);break}default:continue}gn(r,f,g,v,1)}}if(e.slider)for(const l in e.slider){const d=e.slider[l],u=i.findConstraint(l,Eo);if(!u)throw new Error(`Slider not found: ${l}`);const h=i.constraints.indexOf(u);for(const f in d){const p=d[f];if(!p[0])continue;const g=p.length;switch(f){case"time":gn(r,p,new mT(g,g,h),1,1);break;case"mix":gn(r,p,new gT(g,g,h),1,1);break}}}if(e.attachments)for(const l in e.attachments){const d=e.attachments[l],u=i.findSkin(l);if(!u)throw new Error(`Skin not found: ${l}`);for(const h in d){const f=d[h],p=i.findSlot(h);if(!p)throw new Error(`Attachment slot not found: ${h}`);const m=p.index;for(const g in f){const v=f[g],y=u.getAttachment(m,g);if(!y)throw new Error(`Timeline attachment not found: ${g}`);for(const b in v){const w=v[b];let C=w[0];if(C){if(b==="deform"){const T=y.bones,S=y.vertices,E=T?S.length/3*2:S.length,_=new iT(w.length,w.length,m,y);let I=re(C,"time",0);for(let M=0,k=0;;M++){let B;const D=re(C,"vertices",null);if(!D)B=T?Ke.newFloatArray(E):S;else{B=Ke.newFloatArray(E);const L=re(C,"offset",0);if(Ke.arrayCopy(D,0,B,L,D.length),s!==1)for(let N=L,F=N+D.length;N=0;l--)r[l]===-1&&(r[l]=o[--c]);return r}function wt(n,e,t,i,s,r,o,a,c,l){if(n==="stepped")return e.setStepped(i),t;const d=s<<2,u=n[d],h=n[d+1]*l,f=n[d+2],p=n[d+3]*l;return e.setBezier(t,i,s,r,a,u,h,f,p,o,c),t+1}function re(n,e,t){return n[e]!==void 0?n[e]:t}class eX{newRegionAttachment(e,t,i,s){return new hh(t,i)}newMeshAttachment(e,t,i,s){return new yc(t,i)}newBoundingBoxAttachment(e,t){return new eA(t)}newPathAttachment(e,t){return new lc(t)}newPointAttachment(e,t){return new oA(t)}newClippingAttachment(e,t){return new Oa(t)}}class tX{sequence(e){for(let t=0;t!Number.isInteger(d)||d<0||d>=o))throw new Error(Ye("errors.trailIndexOutOfRange",{name:e}));const a=Number(n.hull)||0;if(!Number.isInteger(a)||a<0||a>o)throw new Error(Ye("errors.invalidTrailHull",{name:e}));if(Array.isArray(n.edges)&&n.edges.some(d=>!Number.isInteger(d)||d<0||d>=o*2||d%2))throw new Error(Ye("errors.trailHullIndexOutOfRange",{name:e}));if(s.length===i.length)return;let c=0,l=0;for(;c=t)throw new Error(Ye("errors.missingBoneReference",{name:e}));if(![p,m,g].every(Number.isFinite)||g<0)throw new Error(Ye("errors.invalidWeight",{name:e}));u+=g}if(Math.abs(u-1)>.001)throw new Error(Ye("errors.weightSum",{name:e}));l++}if(c!==s.length||l!==o)throw new Error(Ye("errors.vertexCountMismatch",{name:e}))}function sX(n,e){var r,o,a,c;const t=Array.isArray(n.bones)?n.bones:[],i=new Map(t.map(l=>[String(l.name||""),l])),s=new Set;for(const l of t){if(l.inherit!=null&&!iX.has(l.inherit))throw new Error(Ye("errors.invalidInherit",{name:l.name||"",inherit:l.inherit,version:e}));if(/_trail_\d+_\d+$/.test(String(l.name||""))){const d=i.get(String(l.parent||""));if(!d||/_trail_\d+_\d+$/.test(String(d.name||"")))throw new Error(Ye("errors.trailBoneParent",{name:l.name||""}))}}for(const l of Array.isArray(n.skins)?n.skins:[]){const d=(l==null?void 0:l.attachments)||{};for(const u of Object.keys(d))for(const h of Object.keys(d[u]||{})){const f=d[u][h];(f==null?void 0:f.type)==="mesh"&&(nX(f,h,t.length),((r=f.vertices)==null?void 0:r.length)!==((o=f.uvs)==null?void 0:o.length)&&s.add(u))}}for(const l of Object.values(n.animations||{}))for(const d of s){const u=(c=(a=l==null?void 0:l.slots)==null?void 0:a[d])==null?void 0:c.attachment;if(Array.isArray(u)&&u.some(h=>!(h!=null&&h.name)))throw new Error(Ye("errors.trailSlotEmpty",{name:d}))}}function rX(n){var e;if(String(((e=n==null?void 0:n.skeleton)==null?void 0:e.spine)||"")!=="3.8")throw new Error(Ye("errors.spine38Version"));for(const t of n.bones||[])if(t.inherit!=null)throw new Error(Ye("errors.spine38Inherit",{name:t.name||""}));for(const t of Object.values(n.animations||{})){for(const s of Object.values(t.slots||{})){if(s.rgba||s.rgba2)throw new Error(Ye("errors.spine38SlotColor"));for(const r of s.attachment||[])if(!Object.prototype.hasOwnProperty.call(r,"name"))throw new Error(Ye("errors.spine38AttachmentName"))}for(const s of Object.values(t.bones||{}))for(const r of s.rotate||[])if(r.value!=null||r.angle==null)throw new Error(Ye("errors.spine38RotationAngle"));const i=[t];for(;i.length;){const s=i.pop();if(!(!s||typeof s!="object")){if(!Array.isArray(s)&&Array.isArray(s.curve))throw new Error(Ye("errors.spine38Curve"));i.push(...Object.values(s))}}}}function Ex(n,e){var o;const t=JSON.parse(n),i=lu((o=t==null?void 0:t.skeleton)==null?void 0:o.spine);if(!i)throw new Error(Ye("errors.unsupportedExportVersion",{versions:ym()}));if(e&&i!==e)throw new Error(Ye("errors.exportVersionMismatch",{expected:e,actual:i}));sX(t,i),i==="3.8"&&rX(t);const s=i==="3.8"?yA(JSON.parse(JSON.stringify(t))):t,r=i==="4.3"?new ZV(new tX).readSkeletonData(s):new bu(new eX).readSkeletonData(s);if(!r.bones.length)throw new Error(Ye("errors.exportMissingBones"));return{version:i,bones:r.bones.length,slots:r.slots.length,animations:r.animations.length}}const MT="http://127.0.0.1:27843";class Iu extends Error{constructor(t,i="CONNECTOR_ERROR",s){super(t);A(this,"code");A(this,"pairUrl");this.name="SpineConnectorError",this.code=i,this.pairUrl=s}}function ng(n,e){return String(n||"").trim().replace(/[\\/:*?"<>|]+/g,"_").replace(/^\.+/,"")||e}function oX(n,e){const t=/\.([a-z0-9]{2,5})$/i.exec(n);return t?`.${t[1].toLowerCase()}`:e.includes("jpeg")?".jpg":e.includes("webp")?".webp":e.includes("gif")?".gif":".png"}function aX(n,e,t){const i=String(n||"").replace(/\\/g,"/").split("/").filter(Boolean).map(r=>ng(r,"images")),s=ng(e.replace(/\.[^./\\]+$/,""),"image");return[...i,`${s}${oX(e,t)}`].join("/")}async function yp(n,e,t){if(!n)return null;const i=await fetch(n);if(!i.ok)throw new Error(Ye("errors.readExportImageFailed",{name:t}));const s=await i.blob(),r=new Uint8Array(await s.arrayBuffer());let o="";const a=32768;for(let c=0;co.finally(()=>{i++,e==null||e(i,t.length)});for(const o of n.filter(a=>a.visible!==!1)){for(const a of o.config.imageResources)if(a.imageMode==="sequence"&&a.sequenceFrames.length)for(const c of a.sequenceFrames)t.push(s(yp(c.previewUrl,a.textureFolder,c.name||a.textureName)));else t.push(s(yp(a.previewUrl,a.textureFolder,a.textureName)));if(o.config.trail)for(const a of o.config.trailResources)t.push(s(yp(a.previewUrl,"",a.textureName)))}const r=new Map;for(const o of await Promise.all(t))o&&!r.has(o.path)&&r.set(o.path,o);return[...r.values()]}async function lX(){try{const n=await fetch(`${MT}/v1/health`,{cache:"no-store"});if(!n.ok)throw new Error(`HTTP ${n.status}`);return{available:!0,...await n.json()}}catch(n){return{available:!1,authorized:!1,error:n instanceof Error?n.message:String(n)}}}async function cX(n,e){const t=await PT(n.systems,(s,r)=>{e==null||e({phase:"images",progress:r?s/r:1})}),i=JSON.stringify({schemaVersion:1,projectName:n.projectName,spineVersion:n.spineVersion,skeletonJson:n.skeletonJson,images:t});return new Promise((s,r)=>{const o=new XMLHttpRequest;o.open("POST",`${MT}/v1/convert`),o.responseType="blob",o.setRequestHeader("Content-Type","application/json"),o.upload.onprogress=a=>{e==null||e({phase:"upload",progress:a.lengthComputable&&a.total>0?a.loaded/a.total:null})},o.upload.onloadend=()=>e==null?void 0:e({phase:"processing",progress:null}),o.onprogress=a=>{e==null||e({phase:"download",progress:a.lengthComputable&&a.total>0?a.loaded/a.total:null})},o.onerror=()=>r(new Iu(Ye("errors.connectorOffline"),"CONNECTOR_OFFLINE")),o.onload=async()=>{const a=o.response;if(o.status<200||o.status>=300){let d={};try{d=JSON.parse(await a.text())}catch{}r(new Iu(Ye("errors.connectorHttpError",{status:o.status}),d.code,d.pairUrl));return}const c=o.getResponseHeader("X-Spine-File-Name");let l=`${ng(n.projectName,"SpineParticle")}.zip`;if(c)try{l=decodeURIComponent(c)}catch{}s({blob:a,fileName:l,spineEditorVersion:o.getResponseHeader("X-Spine-Editor-Version")||n.spineVersion,imageCount:t.length})},o.send(i)})}function dX(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=/\.zip$/i.test(e)?e:`${e}.zip`,i.style.display="none",document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(t),1e3)}const uX=Array.from({length:256},(n,e)=>{let t=e;for(let i=0;i<8;i++)t=t&1?3988292384^t>>>1:t>>>1;return t>>>0});function hX(n){let e=4294967295;for(const t of n)e=uX[(e^t)&255]^e>>>8;return(e^4294967295)>>>0}function fX(n){const e=String(n||"").replace(/\\/g,"/").split("/").filter(t=>t&&t!==".");if(!e.length||e.some(t=>t===".."))throw new Error(Ye("errors.invalidZipPath"));return e.join("/")}function pX(n=new Date){const e=Math.max(1980,n.getFullYear());return{time:n.getHours()<<11|n.getMinutes()<<5|Math.floor(n.getSeconds()/2),date:e-1980<<9|n.getMonth()+1<<5|n.getDate()}}function xp(n){const e=new Uint8Array(n);return{bytes:e,view:new DataView(e.buffer)}}function _x(n){const e=new Uint8Array(n.reduce((i,s)=>i+s.length,0));let t=0;for(const i of n)e.set(i,t),t+=i.length;return e}function mX(n){const e=new TextEncoder,t=[],i=[],s=pX();let r=0;for(const c of n){const l=e.encode(fX(c.name)),d=hX(c.data),u=xp(30);u.view.setUint32(0,67324752,!0),u.view.setUint16(4,20,!0),u.view.setUint16(6,2048,!0),u.view.setUint16(10,s.time,!0),u.view.setUint16(12,s.date,!0),u.view.setUint32(14,d,!0),u.view.setUint32(18,c.data.length,!0),u.view.setUint32(22,c.data.length,!0),u.view.setUint16(26,l.length,!0),t.push(u.bytes,l,c.data);const h=xp(46);h.view.setUint32(0,33639248,!0),h.view.setUint16(4,20,!0),h.view.setUint16(6,20,!0),h.view.setUint16(8,2048,!0),h.view.setUint16(12,s.time,!0),h.view.setUint16(14,s.date,!0),h.view.setUint32(16,d,!0),h.view.setUint32(20,c.data.length,!0),h.view.setUint32(24,c.data.length,!0),h.view.setUint16(28,l.length,!0),h.view.setUint32(42,r,!0),i.push(h.bytes,l),r+=u.bytes.length+l.length+c.data.length}const o=_x(i),a=xp(22);return a.view.setUint32(0,101010256,!0),a.view.setUint16(8,n.length,!0),a.view.setUint16(10,n.length,!0),a.view.setUint32(12,o.length,!0),a.view.setUint32(16,r,!0),new Blob([_x([...t,o,a.bytes])],{type:"application/zip"})}function gX(n){const e=atob(n),t=new Uint8Array(e.length);for(let i=0;ii===".."||/^[a-z]+:/i.test(i))?"images":t.join("/")}function bX(n){return String(n||"SpineParticle").replace(/\.json$/i,"").replace(/[\\/:*?"<>|]+/g,"_").replace(/^\.+/,"")||"SpineParticle"}async function yX(n){const e=await PT(n.systems);if(!e.length)throw new Error(Ye("errors.noExportableImages"));const t=vX(n.imagesPath);return{blob:mX(e.map(s=>({name:`${t}/${s.path}`,data:gX(s.dataBase64)}))),imageCount:e.length,folder:t}}function xX(n,e){const t=`${bX(e)}-images.zip`,i=URL.createObjectURL(n),s=document.createElement("a");return s.href=i,s.download=t,s.style.display="none",document.body.appendChild(s),s.click(),s.remove(),setTimeout(()=>URL.revokeObjectURL(i),1e3),t}function wX(n){const{t:e}=fn();n.settings.exportSettings=MS(n.settings.exportSettings);const t=Fe(()=>n.settings.exportSettings),i=$e(!1),s=$e(null),r=$e(""),o=$e(!1),a=$e(null),c=$e(""),l=$e(""),d=Fe(()=>{const E=a.value;return E?E.available?E.spineFound?E.authorized?e("export.connectorReady"):e("export.notAuthorized"):e("export.spineNotFound"):e("export.connectorOffline"):e("export.connectorChecking")}),u=Fe(()=>{var E,_,I,M,k,B;return{ready:!!((E=a.value)!=null&&E.available)&&!!((_=a.value)!=null&&_.spineFound)&&!!((I=a.value)!=null&&I.authorized),warning:!!((M=a.value)!=null&&M.available)&&(!((k=a.value)!=null&&k.spineFound)||!((B=a.value)!=null&&B.authorized))}}),h=Fe(()=>{var E,_,I;return!!((E=a.value)!=null&&E.available)&&!!((_=a.value)!=null&&_.spineFound)&&!!((I=a.value)!=null&&I.authorized)}),f=Fe(()=>{const E=a.value;return!(E!=null&&E.available)||!E.spineFound||E.authorized||typeof window>"u"?"":`http://127.0.0.1:27843/pair?origin=${encodeURIComponent(window.location.origin)}`}),p=Fe(()=>{const E=a.value;return E?E.available?E.spineFound?E.authorized?"":e("export.unauthorized"):e("export.notFound"):e("export.offline"):e("export.checking")}),m=Fe(()=>i.value?e("export.connectorBusy"):p.value?`${e("common.disabled")}: ${p.value}`:e("export.connectorGenerate",{version:t.value.spineVersion}));Sn(()=>{y(),g=window.setInterval(y,3e3)});let g,v=0;eo(()=>{g!==void 0&&window.clearInterval(g)});async function y(){const E=++v,_=await lX();if(E!==v)return;a.value=_;const I=l.value;(I==="CONNECTOR_OFFLINE"?_.available:I==="SPINE_NOT_FOUND"?_.available&&_.spineFound:I==="ORIGIN_NOT_ALLOWED"?_.available&&_.spineFound&&_.authorized:!!I&&_.available&&_.spineFound&&_.authorized)&&(l.value="",c.value="",o.value&&(o.value=!1,r.value=""))}function b(){return new Promise(E=>requestAnimationFrame(()=>E()))}async function w(E){n.timeline.playing=!1,n.timeline.frame=0,n.timeline.recorded=!1;for(const M of n.systems)M.frames=void 0;n.recalcTotalFrames(),await b(),n.timeline.playing=!0;const _=n.timeline.totalFrames/Math.max(1,n.timeline.fps)*1e3,I=performance.now()+Math.max(8e3,_*2.5+3e3);for(;!n.timeline.recorded;){if(performance.now()>I)throw new Error(e("export.timeout"));E==null||E(Math.min(.98,n.timeline.frame/Math.max(1,n.timeline.totalFrames-1))),await new Promise(M=>setTimeout(M,50))}E==null||E(1)}async function C(){if(!i.value){i.value=!0,s.value="json",o.value=!1,l.value="",c.value="",r.value=e("export.recalculating");try{await w();const E=px({systems:n.systems,timeline:n.timeline,settings:t.value});Ex(E.text,t.value.spineVersion),J8(E,t.value.fileName);const _=E.warnings.length?e("export.resourceWarning",{count:E.warnings.length}):"";r.value=e("export.exported",{version:t.value.spineVersion,systems:E.particleSystemCount,animations:E.animationCount,bones:E.boneCount,warning:_})}catch(E){o.value=!0,r.value=E instanceof Error?E.message:String(E)}finally{i.value=!1,s.value=null}}}async function T(){if(i.value)return;i.value=!0,s.value="spine",o.value=!1,l.value="",c.value="",r.value=e("export.recalculating");const E=FA(e("export.projectTransferTitle"),e("export.projectTransferDetail"));try{await E.paint(),await w(k=>E.update(k*18,e("export.recalculating"))),E.update(20,e("export.generatingJson"));const _=px({systems:n.systems,timeline:n.timeline,settings:t.value});Ex(_.text,t.value.spineVersion),r.value=e("export.preparingProject");const I=t.value.fileName.replace(/\.json$/i,"")||"SpineParticle",M=await cX({projectName:I,spineVersion:t.value.spineVersion,skeletonJson:_.text,systems:n.systems},({phase:k,progress:B})=>{k==="images"?E.update(B==null?null:22+B*18,e("export.preparingProjectFiles")):k==="upload"?E.update(B==null?null:40+B*30,e("export.uploading")):k==="processing"?E.update(null,e("export.spineProcessing")):E.update(B==null?null:82+B*16,e("export.downloadingProject"))});E.update(99,e("export.handingToBrowser")),dX(M.blob,M.fileName),r.value=e("export.projectExported",{fileName:M.fileName,images:M.imageCount,version:M.spineEditorVersion}),await y(),await E.finish(e("export.projectTransferDownload"))}catch(_){const I=_ instanceof Error?_.message:String(_);o.value=!0,l.value=_ instanceof Iu?_.code:"",_ instanceof Iu&&_.pairUrl&&(c.value=_.pairUrl),r.value=I,await y(),await E.fail(I)}finally{i.value=!1,s.value=null}}async function S(){if(!i.value){i.value=!0,s.value="images",o.value=!1,l.value="",c.value="",r.value=e("export.collectingImages");try{const E=await yX({systems:n.systems,imagesPath:t.value.imagesPath}),_=xX(E.blob,t.value.fileName);r.value=e("export.imagesExported",{fileName:_,folder:E.folder,images:E.imageCount})}catch(E){o.value=!0,r.value=E instanceof Error?E.message:String(E)}finally{i.value=!1,s.value=null}}}return{exportSettings:t,exportBusy:i,exportTarget:s,exportMessage:r,exportError:o,connectorHealth:a,connectorPairUrl:c,connectorExportErrorCode:l,connectorStatusText:d,connectorStatusClass:u,connectorReady:h,connectorAuthorizationUrl:f,connectorDisabledReason:p,connectorButtonTitle:m,connectorHealthTimer:g,connectorHealthRequestId:v,refreshConnectorHealth:y,nextPaint:b,prepareExportFrames:w,exportSpineJson:C,exportSpineProject:T,exportSpineImages:S}}function SX(n){if(typeof n=="string")return n.trim()||void 0;if(!n||typeof n!="object"||Array.isArray(n))return;const e=Object.entries(n).filter(t=>typeof t[1]=="string"&&!!t[1].trim());return e.length?Object.fromEntries(e):void 0}function CX(n){if(!Array.isArray(n))return[];const e=[];for(const t of n){if(typeof t=="string"&&t.trim()){e.push({file:t});continue}if(!t||typeof t!="object"||Array.isArray(t))continue;const i=typeof t.file=="string"?t.file.trim():"";i&&e.push({file:i,name:SX(t.name)})}return e}function AX(n,e){return typeof n.name=="string"?n.name:n.name&&typeof n.name=="object"?n.name[e]||n.name.en||n.name["zh-CN"]||n.file.replace(/^.*[\\/]/,"").replace(/\.json$/i,""):n.file.replace(/^.*[\\/]/,"").replace(/\.json$/i,"")}function TX(n){const e=$e(null),t=$e(""),i=$e([]),s=$e(!1),r=$e(""),o=$e(!1);function a(){TA(n),o.value=!1,r.value=Ye("config.saved")}async function c(u){var p;const h=u.target,f=(p=h.files)==null?void 0:p[0];if(f){r.value=Ye("config.loading"),o.value=!1;try{await k4(n,f),r.value=Ye("config.loaded",{name:f.name})}catch(m){o.value=!0,r.value=m instanceof Error?m.message:String(m)}finally{h.value=""}}}async function l(){try{const u=await fetch(`/Preset/index.json?t=${Date.now()}`,{cache:"no-store"});if(!u.ok)throw new Error(Ye("config.presetListError"));const h=await u.json();i.value=CX(h)}catch{i.value=[]}}async function d(){const u=t.value;if(!u)return;s.value=!0,o.value=!1,r.value=Ye("config.presetLoading");const h=FA(Ye("config.presetTransferTitle"),Ye("config.presetDownloading",{file:u}));try{await h.paint();const f=await fetch(`/Preset/${encodeURIComponent(u)}`,{cache:"no-store"});if(!f.ok)throw new Error(Ye("config.presetReadError",{file:u}));const p=await S8(f,m=>{h.update(m==null?null:m*55,Ye("config.presetDownloading",{file:u}))});h.update(58,Ye("config.presetParsing")),h.update(70,Ye("config.presetRestoring")),await _A(n,p),r.value=Ye("config.presetLoaded",{name:u.replace(/\.json$/i,"")}),await h.finish(Ye("config.presetComplete"))}catch(f){o.value=!0;const p=f instanceof Error?f.message:String(f);r.value=Ye("config.presetNamingError",{message:p}),await h.fail(p)}finally{s.value=!1,t.value=""}}return Sn(l),{configFileInput:e,selectedPreset:t,presetOptions:i,presetLoading:s,configMessage:r,configError:o,saveConfig:a,onConfigFileChange:c,refreshPresets:l,loadSelectedPreset:d}}function EX(n){const e=$e(null),t=$e(null),i=$e(null),s=$e(null),r=$e(null);function o(){var $;const N=($=n.value)==null?void 0:$.config;if(!N)return;const F=Math.max(0,...N.trailResources.map(X=>X.id))+1;N.trailResources.push({id:F,texture:null,textureName:"trail",previewUrl:"/images/trail.png",weight:100,locked:!1,rotation:0,colorMode:"particle",color:"#ffffff",colorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}],blend:"normal",alphaMode:"particle",alpha:1,alphaCurve:Nm.map(X=>({...X})),boneCount:3,trailRatio:100,lengthMode:"fixed",length:100,lengthMin:100,lengthMax:100,widthSizeMode:"fixed",width:100,widthMin:100,widthMax:100,widthMode:"particle",lifeLengthEnabled:!1,lifeLengthCurve:Dm.map(X=>({...X})),shapeEnabled:!1,shapeCurve:$m.map(X=>({...X}))}),p()}function a(N){var F;r.value=N,(F=s.value)==null||F.click()}function c(N,F){var z;const $=(z=n.value)==null?void 0:z.config;if(!$)return;const X=N==="trailGridCols"?32:16;$[N]=Math.min(X,Math.max(2,Math.round(Number(F)||2)))}function l(N,F){var X;const $=(X=n.value)==null?void 0:X.config.trailResources.find(z=>z.id===N);$&&($.boneCount=Math.min(16,Math.max(2,Math.round(Number(F)||2))))}function d(N,F){var X;const $=(X=n.value)==null?void 0:X.config.trailResources.find(z=>z.id===N);$&&($.rotation=Math.max(-360,Math.min(360,Number(F)||0)))}async function u(N){var J,oe;const F=N.target,$=(J=F.files)==null?void 0:J[0],X=(oe=n.value)==null?void 0:oe.config,z=X==null?void 0:X.trailResources.find(le=>le.id===r.value);if(!$||!z){F.value="";return}const K=await E($);z.texture=Ur(await it.fromURL(K)),z.previewUrl=K,z.textureName=$.name.replace(/\.[^.]+$/,"")||"trail",F.value="",r.value=null}async function h(N){var X;const F=(X=n.value)==null?void 0:X.config,$=F==null?void 0:F.trailResources.find(z=>z.id===N);$&&($.texture=Ur(await it.fromURL("/images/trail.png")),$.previewUrl="/images/trail.png",$.textureName="trail",$.weight=100,$.locked=!1,$.rotation=0,$.boneCount=3,$.trailRatio=100,$.lengthMode="fixed",$.length=100,$.lengthMin=100,$.lengthMax=100,$.widthSizeMode="fixed",$.width=100,$.widthMin=100,$.widthMax=100,$.widthMode="particle",$.lifeLengthEnabled=!1,$.lifeLengthCurve=Dm.map(z=>({...z})),$.shapeEnabled=!1,$.shapeCurve=$m.map(z=>({...z})),$.colorMode="particle",$.color="#ffffff",$.colorGradient=[{position:0,color:"#ffffff"},{position:1,color:"#ffffff"}],$.blend="normal",$.alphaMode="particle",$.alpha=1,$.alphaCurve=Nm.map(z=>({...z})),p())}function f(N){var X;const F=(X=n.value)==null?void 0:X.config.trailResources;if(!F||F.length<=1)return;const $=F.findIndex(z=>z.id===N);$>=0&&F.splice($,1),p()}function p(){var z;const N=(z=n.value)==null?void 0:z.config.trailResources;if(!(N!=null&&N.length))return;if(N.length===1){N[0].weight=100,N[0].locked=!1;return}const F=N.filter(K=>K.locked),$=N.filter(K=>!K.locked);let X=F.reduce((K,J)=>K+Math.max(0,Number(J.weight)||0),0);X>100&&(G(F,100,!0),X=100),G($,100-X)}function m(N,F){var oe;const $=(oe=n.value)==null?void 0:oe.config.trailResources;if(!($!=null&&$.length))return;if($.length===1){$[0].weight=100,$[0].locked=!1;return}const X=$.find(le=>le.id===N);if(!X||X.locked)return;const z=$.filter(le=>le.id!==N&&le.locked).reduce((le,ve)=>le+Math.max(0,Number(ve.weight)||0),0),K=Math.max(0,100-z),J=$.filter(le=>le.id!==N&&!le.locked);X.weight=D(Math.min(K,Math.max(0,Number(F)||0))),J.length?G(J,K-X.weight,!0):X.weight=D(K)}function g(N){var X;const F=(X=n.value)==null?void 0:X.config.trailResources;if(!F||F.length===1)return;const $=F.find(z=>z.id===N);$&&($.locked=!$.locked)}function v(N,F){const $=F.target;N.color=I($.value,N.color),$.value=N.color}function y(N,F){v(N,F),F.target.blur()}function b(){var $;const N=($=n.value)==null?void 0:$.config;if(!N)return;const F=Math.max(0,...N.imageResources.map(X=>X.id))+1;N.imageResources.push({id:F,texture:N.texture,textureName:"star",textureFolder:"",previewUrl:"/images/star.png",imageMode:"fixed",sequencePlayback:"loop-forward",sequenceFps:30,sequenceFrames:[],weight:100,locked:!1,scale:1,anchorX:.5,anchorY:.5,colorMode:"fixed",colorStart:"#ffffff",colorEnd:"#ff4d4d",colorGradient:[{position:0,color:"#ffffff"},{position:1,color:"#ff4d4d"}],blend:"normal",independentAlpha:"off",alpha:1,alphaCurveMode:"跟随导出",alphaCurve:Om.map(X=>({...X}))}),V()}function w(N){var F;i.value=N,(F=e.value)==null||F.click()}function C(N){var F;i.value=N,(F=t.value)==null||F.click()}async function T(N){var oe,le;const F=N.target,$=(oe=F.files)==null?void 0:oe[0],X=(le=n.value)==null?void 0:le.config,z=X==null?void 0:X.imageResources.find(ve=>ve.id===i.value);if(!$||!z){F.value="";return}const K=await E($),J=Ur(await it.fromURL(K));z.texture=J,z.previewUrl=K,z.textureFolder="",z.textureName=$.name.replace(/\.[^.]+$/,"")||"particle",F.value="",i.value=null}async function S(N){var K;const F=N.target,$=Array.from(F.files||[]).sort((J,oe)=>J.name.localeCompare(oe.name,void 0,{numeric:!0,sensitivity:"base"})),X=(K=n.value)==null?void 0:K.config,z=X==null?void 0:X.imageResources.find(J=>J.id===i.value);if(!$.length||!z){F.value="";return}z.sequenceFrames=await Promise.all($.map(async J=>{const oe=await E(J);return{name:J.name,previewUrl:oe,texture:Ur(await it.fromURL(oe))}})),z.imageMode="sequence",F.value="",i.value=null}function E(N){return new Promise((F,$)=>{const X=new FileReader;X.onload=()=>F(String(X.result||"")),X.onerror=()=>$(X.error),X.readAsDataURL(N)})}function _(N){var X;const F=(X=n.value)==null?void 0:X.config,$=F==null?void 0:F.imageResources.find(z=>z.id===N);!F||!$||($.texture=F.texture,$.textureName="star",$.textureFolder="",$.previewUrl="/images/star.png",$.imageMode="fixed",$.sequencePlayback="loop-forward",$.sequenceFps=30,$.sequenceFrames=[],$.scale=1,$.anchorX=.5,$.anchorY=.5,$.colorMode="fixed",$.colorStart="#ffffff",$.colorEnd="#ff4d4d",$.colorGradient=[{position:0,color:"#ffffff"},{position:1,color:"#ff4d4d"}],$.blend="normal",$.independentAlpha="off",$.alpha=1,$.alphaCurveMode="跟随导出",$.alphaCurve=Om.map(z=>({...z})),$.locked=!1,V())}function I(N,F){let $=N.trim().replace(/^#/,"");return/^[0-9a-f]{3}$/i.test($)&&($=$.split("").map(X=>X+X).join("")),/^[0-9a-f]{6}$/i.test($)?`#${$.toLowerCase()}`:F}function M(N,F){const $=F.target;N.colorStart=I($.value,N.colorStart),$.value=N.colorStart}function k(N,F){M(N,F),F.target.blur()}function B(N){var X;const F=(X=n.value)==null?void 0:X.config.imageResources;if(!F||F.length<=1)return;const $=F.findIndex(z=>z.id===N);$>=0&&F.splice($,1),V()}function D(N){return Math.round(N)}function G(N,F,$=!1){if(!N.length)return;const X=Math.max(0,D(F)),z=$?N.reduce((J,oe)=>J+Math.max(0,Number(oe.weight)||0),0):0;let K=0;N.forEach((J,oe)=>{const le=oe===N.length-1,ve=D(le?X-K:z>0?X*Math.max(0,Number(J.weight)||0)/z:X/N.length);J.weight=ve,K+=ve})}function V(){var z;const N=(z=n.value)==null?void 0:z.config.imageResources;if(!(N!=null&&N.length))return;if(N.length===1){N[0].weight=100,N[0].locked=!1;return}const F=N.filter(K=>K.locked),$=N.filter(K=>!K.locked);let X=F.reduce((K,J)=>K+Math.max(0,Number(J.weight)||0),0);X>100&&(G(F,100,!0),X=100),G($,100-X)}function Y(N,F){var oe;const $=(oe=n.value)==null?void 0:oe.config.imageResources;if(!($!=null&&$.length))return;if($.length===1){$[0].weight=100,$[0].locked=!1;return}const X=$.find(le=>le.id===N);if(!X||X.locked)return;const z=$.filter(le=>le.id!==N&&le.locked).reduce((le,ve)=>le+Math.max(0,Number(ve.weight)||0),0),K=Math.max(0,100-z),J=$.filter(le=>le.id!==N&&!le.locked);if(X.weight=D(Math.min(K,Math.max(0,Number(F)||0))),!J.length){X.weight=D(K);return}G(J,K-X.weight,!0)}function L(N){var X;const F=(X=n.value)==null?void 0:X.config.imageResources;if(!F||F.length===1)return;const $=F.find(z=>z.id===N);$&&($.locked=!$.locked)}return{textureFileInput:e,sequenceFileInput:t,pendingResourceId:i,trailTextureFileInput:s,pendingTrailResourceId:r,addTrailResource:o,openTrailTexturePicker:a,onTrailRigChange:c,onTrailResourceBoneCountChange:l,onTrailResourceRotationChange:d,onTrailTextureFile:u,resetTrailTexture:h,removeTrailResource:f,rebalanceTrailWeights:p,setTrailResourceWeight:m,toggleTrailResourceLock:g,setTrailColor:v,commitTrailColor:y,addImageResource:b,openTexturePicker:w,openSequencePicker:C,onTextureFile:T,onSequenceFiles:S,readFileAsDataUrl:E,resetTexture:_,normalizeHex:I,setResourceFixedColor:M,commitResourceFixedColor:k,removeImageResource:B,roundWeight:D,distributeImageWeights:G,rebalanceImageWeights:V,setResourceWeight:Y,toggleResourceLock:L}}function _X(){const n=Go(),{t:e}=fn(),{exportSettings:t,exportBusy:i,exportTarget:s,exportMessage:r,exportError:o,connectorPairUrl:a,connectorStatusText:c,connectorStatusClass:l,connectorReady:d,connectorAuthorizationUrl:u,connectorDisabledReason:h,connectorButtonTitle:f,refreshConnectorHealth:p,exportSpineJson:m,exportSpineProject:g,exportSpineImages:v}=wX(n),{configFileInput:y,selectedPreset:b,presetOptions:w,presetLoading:C,configMessage:T,configError:S,saveConfig:E,onConfigFileChange:_,refreshPresets:I,loadSelectedPreset:M}=TX(n);function k(ie){return ie==="跟随导出"?t.value.keyframeCurve==="bezier"?"bezier":"linear":ie==="贝塞尔"?"bezier":"linear"}n.systems.length||n.addSystem();const B=Fe(()=>{const ie=n.systems.findIndex(pe=>pe.id===n.activeId);return ie>=0?ie:0}),D=Fe(()=>n.systems[B.value]||null),{textureFileInput:G,sequenceFileInput:V,trailTextureFileInput:Y,addTrailResource:L,openTrailTexturePicker:N,onTrailRigChange:F,onTrailResourceBoneCountChange:$,onTrailResourceRotationChange:X,onTrailTextureFile:z,resetTrailTexture:K,removeTrailResource:J,setTrailResourceWeight:oe,toggleTrailResourceLock:le,setTrailColor:ve,commitTrailColor:Se,addImageResource:fe,openTexturePicker:be,openSequencePicker:q,onTextureFile:Z,onSequenceFiles:se,resetTexture:j,setResourceFixedColor:H,commitResourceFixedColor:O,removeImageResource:U,setResourceWeight:W,toggleResourceLock:ee}=EX(D),ne=Fe(()=>D.value?PS(D.value.config,n.timeline.fps):30),ue=Fe(()=>{var pe;const ie=(pe=D.value)==null?void 0:pe.config;return ie?Math.max(1,Math.ceil(Number(ie.loopDurationFrames)||1)):1}),xe=Fe(()=>n.activeObjectType),ye=Fe(()=>n.activeObjectType==="collision"&&n.colliders.find(ie=>ie.id===n.activeObjectId)||null),Ne=Fe(()=>n.activeObjectType==="path"&&n.paths.find(ie=>ie.id===n.activeObjectId)||null),Be=Fe(()=>n.activeObjectType==="spine"&&n.spines.find(ie=>ie.id===n.activeObjectId)||null),de=Fe(()=>n.activeObjectType==="particle"?n.systems.some(ie=>ie.id===n.activeObjectId):n.activeObjectType==="collision"?n.colliders.some(ie=>ie.id===n.activeObjectId):n.activeObjectType==="path"?n.paths.some(ie=>ie.id===n.activeObjectId):n.spines.some(ie=>ie.id===n.activeObjectId)),ge=Fe(()=>{const ie=n.spines.find(pe=>pe.selectedBone&&pe.bones.some(Me=>Me.name===pe.selectedBone));return ie?{spine:ie,boneName:ie.selectedBone}:null}),Ge=Fe(()=>{var Me;const ie=(Me=D.value)==null?void 0:Me.config;if(!ie||ie.emitterFollowMode!=="bone")return null;const pe=n.spines.find(st=>st.id===ie.emitterFollowSpineId);return!pe||!pe.bones.some(st=>st.name===ie.emitterFollowBoneName)?null:{spine:pe,boneName:ie.emitterFollowBoneName}}),Le=$e(!1),Ee=$e(""),Ze=Fe(()=>n.spines.filter(ie=>ie.enabled&&ie.visible!==!1&&ie.status==="ready")),Te=Fe(()=>n.spines.find(ie=>{var pe;return ie.id===((pe=D.value)==null?void 0:pe.config.renderLayerSpineId)})||null),vi=Fe(()=>{const ie=Te.value;return!!ie&&ie.enabled&&ie.visible!==!1&&ie.status==="ready"}),lt=Fe(()=>{var ie;return[...((ie=Te.value)==null?void 0:ie.slots)||[]].sort((pe,Me)=>pe.order-Me.order)}),ce=Fe(()=>{const ie=Ee.value.trim().toLocaleLowerCase();return ie?lt.value.filter(pe=>pe.name.toLocaleLowerCase().includes(ie)||pe.attachment.toLocaleLowerCase().includes(ie)):lt.value}),he=Fe(()=>lt.value.find(ie=>{var pe;return ie.name===((pe=D.value)==null?void 0:pe.config.renderLayerSlotName)})||null),nt=Fe(()=>{const ie=he.value;return ie&<.value.filter(pe=>pe.orderMe.order-pe.order)[0]||null}),Ft=Fe(()=>{var st;const ie=(st=D.value)==null?void 0:st.config,pe=Te.value,Me=he.value;return!ie||!pe||!Me?"":e(ie.renderLayerSlotPosition==="below"?"renderLayer.slotLabelBelow":"renderLayer.slotLabelAbove",{spine:pe.name,slot:Me.name})}),Nt=Fe(()=>{var Me;const ie=(Me=D.value)==null?void 0:Me.config,pe=he.value;return!ie||!pe?"":ie.renderLayerSlotPosition==="above"?e("renderLayer.resolvedAbove",{slot:pe.name}):nt.value?e("renderLayer.resolvedBetween",{previous:nt.value.name,slot:pe.name}):""}),ct=Fe(()=>{var Me;const ie=(Me=D.value)==null?void 0:Me.config;if(!ie||ie.renderLayerMode!=="slot")return"";if(!Ze.value.length)return e("renderLayer.warningNoSpine");if(!ie.renderLayerSpineId)return e("renderLayer.warningNoSelection");const pe=Te.value;return pe?!pe.enabled||pe.status!=="ready"?e("renderLayer.warningNotReady"):ie.renderLayerSlotName?he.value?ie.renderLayerSlotPosition==="below"&&!nt.value?e("renderLayer.warningFirstSlot"):"":e("renderLayer.warningMissingSlot"):"":e("renderLayer.warningMissingSpine")});function rn(){var pe;const ie=(pe=D.value)==null?void 0:pe.config;ie&&(ie.renderLayerMode="slot",!ie.renderLayerSpineId&&Ze.value.length&&(ie.renderLayerSpineId=Ze.value[0].id),Le.value=!ie.renderLayerSlotName)}function Nn(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;pe&&(pe.renderLayerSpineId=Math.max(0,Math.round(Number(ie.target.value)||0)),pe.renderLayerSlotName="",Le.value=!0)}function jt(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;pe&&(pe.renderLayerSlotName=ie.name,Le.value=!1,Ee.value="")}function $i(){var pe;const ie=(pe=D.value)==null?void 0:pe.config;ie&&(ie.renderLayerSlotName="",ie.renderLayerSlotPosition="above")}const Ut=$e(!1),on=Fe(()=>{var pe;const ie=new Set(((pe=D.value)==null?void 0:pe.config.collisionColliderIds)||[]);return n.colliders.filter(Me=>ie.has(Me.id))}),fi=Fe(()=>{var pe;const ie=new Set(((pe=D.value)==null?void 0:pe.config.collisionColliderIds)||[]);return n.colliders.filter(Me=>!ie.has(Me.id))});ei(()=>{var ie,pe;return[(ie=D.value)==null?void 0:ie.id,(pe=D.value)==null?void 0:pe.config.collision]},()=>{Ut.value=!1}),ei(()=>{var ie;return(ie=D.value)==null?void 0:ie.id},()=>{Le.value=!1,Ee.value=""});function $n(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;!pe||pe.collisionColliderIds.includes(ie)||(pe.collisionColliderIds.push(ie),Ut.value=!1)}function Fs(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;pe&&(pe.collisionColliderIds=pe.collisionColliderIds.filter(st=>st!==ie))}ha(()=>{for(const ie of n.systems)ie.visible==null&&(ie.visible=!0);for(const ie of n.colliders)ie.visible==null&&(ie.visible=!0);for(const ie of n.paths)ie.visible==null&&(ie.visible=!0);for(const ie of n.spines)ie.visible==null&&(ie.visible=!0)}),ha(()=>{if(!D.value)return;const ie=lr(D.value.config);ie.lifeMode==="curve"&&(ie.lifeMode="random"),ie.speedMode==="curve"&&(ie.speedMode="random"),ie.scaleMode==="curve"&&(ie.scaleMode="random"),ie.initialRotationMode==="curve"&&(ie.initialRotationMode="random"),ie.mode==="stream"&&!(ie.duration>0)&&(ie.duration=1),ie.streamBehavior==="loop"&&(ie.emitterFollow||ie.emitterFollowMode!=="none")&&Jo(ie)}),ha(()=>{const ie=new Set(n.colliders.map(Me=>Me.id)),pe=new Set(n.systems.map(Me=>Me.id));for(const Me of n.systems){const st=lr(Me.config),ci=st.collisionColliderIds.filter(mn=>ie.has(mn));ci.length!==st.collisionColliderIds.length&&(st.collisionColliderIds=ci),st.spawnPathId>0&&!n.paths.some(mn=>mn.id===st.spawnPathId)&&(st.spawnPathId=0,(st.emissionAngleMode==="path-normal"||st.emissionAngleMode==="path-tangent")&&(st.emissionAngleMode="fixed"));const ea=kS(n.systems,Me.id);for(const mn of st.events||[])mn.targetSystemId>0&&(mn.targetSystemId===Me.id||ea.has(mn.targetSystemId)||!pe.has(mn.targetSystemId))&&(mn.targetSystemId=0);if(st.emitterFollowMode!=="bone")continue;const wh=n.spines.find(mn=>mn.id===st.emitterFollowSpineId);!!(wh!=null&&wh.bones.some(mn=>mn.name===st.emitterFollowBoneName))||(st.emitterFollowMode="none",st.emitterFollowSpineId=0,st.emitterFollowBoneName="")}}),ha(()=>{for(const ie of n.systems){const pe=lr(ie.config);pe.renderLayerMode!=="slot"||!pe.renderLayerSpineId||n.spines.some(Me=>Me.id===pe.renderLayerSpineId)||(pe.renderLayerSpineId=0,pe.renderLayerSlotName="")}}),ha(()=>{for(const ie of n.colliders)ie.followPathId==null&&(ie.followPathId=0),ie.followDuration>0||(ie.followDuration=2),ie.followPathRotation==null&&(ie.followPathRotation=!1),["跟随导出","线性","贝塞尔"].includes(ie.followCurveMode)||(ie.followCurveMode="跟随导出"),(!Array.isArray(ie.followCurve)||ie.followCurve.length<2)&&(ie.followCurve=[{x:0,y:0},{x:1,y:1}])});const An=zo({config:!0,scene:!1,emitMode:!0,shape:!0,attr:!0,look:!0,mods:!0,export:!1});function pn(ie){An[ie]=!An[ie]}function br(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;pe&&(pe.mode=ie,ie==="stream"&&!(pe.duration>0)&&(pe.duration=1))}function yr(ie){var st;const pe=(st=D.value)==null?void 0:st.config;if(!pe)return;const Me=Math.min(1800,Math.max(1,Math.ceil(Number(ie)||1)));pe.loopDurationFrames=Me}function Jo(ie){const pe=tc();ie.emitterFollow=!1,ie.emitterFollowMode="none",ie.emitterFollowPathId=pe.emitterFollowPathId,ie.emitterFollowSpineId=pe.emitterFollowSpineId,ie.emitterFollowBoneName=pe.emitterFollowBoneName,ie.emitterFollowBoneOffsetX=pe.emitterFollowBoneOffsetX,ie.emitterFollowBoneOffsetY=pe.emitterFollowBoneOffsetY,ie.emitterFollowBoneRotation=pe.emitterFollowBoneRotation,ie.emitterFollowBoneScaleX=pe.emitterFollowBoneScaleX,ie.emitterFollowBoneScaleY=pe.emitterFollowBoneScaleY,ie.emitterAngleMode=pe.emitterAngleMode,ie.emitterFollowCurve=pe.emitterFollowCurve.map(Me=>({...Me})),ie.emitterFollowDuration=pe.emitterFollowDuration,ie.emitterFollowSpace=pe.emitterFollowSpace,ie.emitterFollowDirection=pe.emitterFollowDirection,ie.emitterFollowOffset=pe.emitterFollowOffset}function nl(ie){var ci;const pe=(ci=D.value)==null?void 0:ci.config;if(!pe||pe.streamBehavior===ie)return;const Me=ie==="loop",st=e(Me?"errors.confirmLoopFollowEnter":"errors.confirmLoopFollowExit");window.confirm(st)&&(Jo(pe),pe.streamBehavior=ie,Me||(pe.generateLoopStartAnimation=!1,pe.generateLoopEndAnimation=!1))}function Cc(ie,pe){var ci;const Me=(ci=D.value)==null?void 0:ci.config;if(!Me)return;const st=pe.target.checked;ie==="start"?Me.generateLoopStartAnimation=st:Me.generateLoopEndAnimation=st}function Ac(ie,pe){var ci;const Me=(ci=D.value)==null?void 0:ci.config;if(!Me)return;const st=Math.min(1800,Math.max(1,Math.ceil(Number(pe.target.value)||30)));ie==="start"?Me.loopStartDurationFrames=st:Me.loopEndDurationFrames=st}function sl(ie,pe){var ci;const Me=(ci=D.value)==null?void 0:ci.config;if(!Me)return;const st=pe.target.checked;ie==="start"?Me.loopStartUseCustomDuration=st:Me.loopEndUseCustomDuration=st}function Tc(ie,pe){const Me=ie.target.value;if(pe.emitterFollowMode=Me,Me!=="bone"){pe.emitterFollowSpineId=0,pe.emitterFollowBoneName="";return}Zo(pe)}function Zo(ie){const pe=ge.value;if(!pe){ie.emitterFollowMode="none",ie.emitterFollowSpineId=0,ie.emitterFollowBoneName="";return}ie.emitterFollowMode="bone",ie.emitterFollowSpineId=pe.spine.id,ie.emitterFollowBoneName=pe.boneName}const Ec={emitMode:["mode","rate","streamBehavior","loopDurationFrames","generateLoopStartAnimation","loopStartUseCustomDuration","loopStartDurationFrames","generateLoopEndAnimation","loopEndUseCustomDuration","loopEndDurationFrames","burstCount","burstLoop","delay","duration"],shape:["shape","showShape","shapeRangeVersion","innerRadius","outerRadius","innerRectW","innerRectH","outerRectW","outerRectH","spawnPathId","spawnPathDistribution","radius","rectW","rectH","emissionAngleMode","direction","spread","coneDirection","coneAngle"],attr:["lifeMin","lifeMax","lifeMode","lifeCurve","speedMin","speedMax","speedMode","speedCurve","scaleMin","scaleMax","scaleMode","scaleAxisMode","scaleYMin","scaleYMax","scaleCurve","scaleYCurve","scaleEndRatio","initialRotationMode","initialRotationMin","initialRotationMax","initialRotationCurve","rotationSpeedMin","rotationSpeedMax","speedOverLifeEnabled","speedOverLifeMode","speedOverLifeMin","speedOverLifeMax","speedOverLifeCurve","scaleOverLifeEnabled","scaleOverLifeMode","scaleOverLifeAxisMode","scaleOverLifeMin","scaleOverLifeMax","scaleYOverLifeMin","scaleYOverLifeMax","scaleOverLifeCurve","scaleYOverLifeCurve","rotationOverLifeEnabled","rotationOverLifeMode","rotationOverLifeCurve"],look:["texture","imageResources","imageWeightVersion","alpha","alphaEnd","colorStart","colorEnd","colorOverLife","blend","alphaMode","curveMode","alphaCurve","textureName","textureFolder","alphaScale","anchorX","anchorY","independentAlpha","renderLayerMode","renderLayerSpineId","renderLayerSlotName","renderLayerSlotPosition","renderLayerFollowAttachment"],mods:["noise","noiseAmt","noiseRange","noiseSpeed","useGravity","gravity","gravityMode","gravityMin","gravityMax","gravityDirection","gravityCurve","wind","windX","windY","windMode","windMin","windMax","windDirection","windCurve","forceField","forceStrength","forceRadius","forceCenterX","forceCenterY","forceFalloff","showForceFieldShape","vortex","vortexStrength","vortexRadius","vortexCenterX","vortexCenterY","vortexFalloff","showVortexShape","attraction","attractionCenterX","attractionCenterY","attractionRadius","attractionDuration","attractionDelay","attractionDelayMode","attractionPath","showAttractionShape","trail","trailConfigVersion","trailResources","trailResourceVersion","trailTexture","trailTextureName","trailPreviewUrl","trailColorMode","trailColor","trailColorGradient","trailAlphaMode","trailAlpha","trailAlphaCurve","trailBoneCount","trailLength","trailWidth","trailWidthMode","trailLifeLengthEnabled","trailLifeLengthCurve","trailShapeEnabled","trailShapeCurve","trailGridRows","trailGridCols","collision","collisionColliderIds","pathFollow","eventEnabled","events","emitterFollow","emitterFollowMode","emitterFollowPathId","emitterFollowSpineId","emitterFollowBoneName","emitterFollowBoneOffsetX","emitterFollowBoneOffsetY","emitterFollowBoneRotation","emitterFollowBoneScaleX","emitterFollowBoneScaleY","emitterAngleMode","emitterFollowCurve","emitterFollowDuration","emitterFollowSpace","emitterFollowDirection","emitterFollowOffset","damping"]};function yh(ie){var st;const pe=(st=D.value)==null?void 0:st.config;if(ie==="export"){n.settings.exportSettings=Dg();return}if(!pe)return;const Me=tc();for(const ci of Ec[ie])pe[ci]=Me[ci]}function rl(){t.value.fps=Math.min(240,Math.max(1,Math.round(Number(t.value.fps)||30)))}function xr(ie){var pe;n.selectSystem(((pe=n.systems[ie])==null?void 0:pe.id)??0)}function Qo(){n.addSystem()}function xh(){n.addCollider()}function _c(){n.addPath()}function FT(){n.addSpine()}function LT(){n.duplicateSelectedObject()}function Ls(ie,pe,Me=0,st=0,ci=0,ea=0){return{x:ie,y:pe,inX:Me,inY:st,outX:ci,outY:ea}}function DT(){const ie=Ne.value;if(!(!ie||!ie.preset))if(ie.preset==="circle"){const Me=60.751328;ie.points=[Ls(110,0,0,-Me,0,Me),Ls(0,110,Me,0,-Me,0),Ls(-110,0,0,Me,0,-Me),Ls(0,-110,-Me,0,Me,0)],ie.closed=!0}else if(ie.preset==="square")ie.points=[Ls(-100,-100),Ls(100,-100),Ls(100,100),Ls(-100,100)],ie.closed=!0;else{const pe=ie.preset==="star"?10:6;ie.points=Array.from({length:pe},(Me,st)=>{const ci=ie.preset==="star"&&st%2?50:110,ea=-Math.PI*.5+st/pe*Math.PI*2;return Ls(Math.cos(ea)*ci,Math.sin(ea)*ci)}),ie.closed=!0}}function OT(){Ne.value&&(Ne.value.points=[])}function NT(){D.value&&(D.value.config.seed=Math.floor(Math.random()*999999)+1)}function $T(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;!pe||ie==="direction"||(pe.speedOverLifeMode=ie,ie==="curve"&&pe.speedOverLifeMin===pe.speedOverLifeMax&&(pe.speedOverLifeMin=0,pe.speedOverLifeMax=1))}function lv(){var pe;const ie=(pe=D.value)==null?void 0:pe.config;!ie||ie.scaleOverLifeMode!=="curve"||(ie.scaleOverLifeMin===ie.scaleOverLifeMax&&(ie.scaleOverLifeMin=0,ie.scaleOverLifeMax=1),ie.scaleYOverLifeMin===ie.scaleYOverLifeMax&&(ie.scaleYOverLifeMin=0,ie.scaleYOverLifeMax=1))}function BT(ie){var Me;const pe=(Me=D.value)==null?void 0:Me.config;!pe||ie==="direction"||(pe.scaleOverLifeMode=ie,lv())}const UT={point:{emissionAngleMode:"random",direction:0,spread:360},circle:{innerRadius:0,outerRadius:100,emissionAngleMode:"fixed",direction:-90,spread:0},rect:{innerRectW:0,innerRectH:0,outerRectW:200,outerRectH:100,emissionAngleMode:"fixed",direction:-90,spread:0},cone:{innerRadius:0,outerRadius:100,coneAngle:90,coneDirection:90,emissionAngleMode:"random",direction:90,spread:90},path:{spawnPathId:0,spawnPathDistribution:"fixed",emissionAngleMode:"fixed",direction:0,spread:0}};function VT(){var Me;const ie=(Me=D.value)==null?void 0:Me.config;if(!ie)return;const pe=UT[ie.shape];pe&&Object.assign(ie,pe)}function XT(){var pe;const ie=(pe=D.value)==null?void 0:pe.config;!ie||ie.spawnPathId>0||(ie.emissionAngleMode==="path-normal"||ie.emissionAngleMode==="path-tangent")&&(ie.emissionAngleMode="fixed")}return{store:n,exportSettings:t,exportBusy:i,exportTarget:s,exportMessage:r,exportError:o,connectorPairUrl:a,connectorStatusText:c,connectorStatusClass:l,connectorReady:d,connectorAuthorizationUrl:u,connectorDisabledReason:h,connectorButtonTitle:f,refreshConnectorHealth:p,exportSpineJson:m,exportSpineProject:g,exportSpineImages:v,configFileInput:y,selectedPreset:b,presetOptions:w,presetLoading:C,configMessage:T,configError:S,saveConfig:E,onConfigFileChange:_,refreshPresets:I,loadSelectedPreset:M,resolvedCurveEditorMode:k,sys:D,textureFileInput:G,sequenceFileInput:V,trailTextureFileInput:Y,addTrailResource:L,openTrailTexturePicker:N,onTrailRigChange:F,onTrailResourceBoneCountChange:$,onTrailResourceRotationChange:X,onTrailTextureFile:z,resetTrailTexture:K,removeTrailResource:J,setTrailResourceWeight:oe,toggleTrailResourceLock:le,setTrailColor:ve,commitTrailColor:Se,addImageResource:fe,openTexturePicker:be,openSequencePicker:q,onTextureFile:Z,onSequenceFiles:se,resetTexture:j,setResourceFixedColor:H,commitResourceFixedColor:O,removeImageResource:U,setResourceWeight:W,toggleResourceLock:ee,automaticLoopDuration:ne,loopDurationFrames:ue,activeObjectType:xe,activeCollider:ye,activePath:Ne,activeSpine:Be,canCopyObject:de,selectedSpineBone:ge,boundSpineBone:Ge,renderLayerSlotPickerOpen:Le,renderLayerSlotSearch:Ee,renderLayerReadySpines:Ze,renderLayerSpineReady:vi,renderLayerSlots:lt,renderLayerFilteredSlots:ce,renderLayerSlotLabel:Ft,renderLayerResolvedLabel:Nt,renderLayerWarning:ct,setRenderLayerSlotMode:rn,selectRenderLayerSpine:Nn,pickRenderLayerSlot:jt,clearRenderLayerSlot:$i,collisionPickerOpen:Ut,selectedCollisionBodies:on,availableCollisionBodies:fi,addCollisionBody:$n,removeCollisionBody:Fs,collapsed:An,toggle:pn,setEmitMode:br,setLoopDurationFrames:yr,setStreamBehavior:nl,setLoopSection:Cc,setLoopSectionDuration:Ac,setLoopCustomDuration:sl,onEmitterFollowModeChange:Tc,bindSelectedBone:Zo,resetModule:yh,normalizeExportFps:rl,select:xr,addSys:Qo,addCollider:xh,addPath:_c,addSpine:FT,copySelectedObject:LT,applyPathPreset:DT,clearPathAnchors:OT,randomizeSeed:NT,setSpeedOverLifeMode:$T,prepareScaleOverLifeCurve:lv,setScaleOverLifeMode:BT,onShapeChange:VT,onSpawnPathChange:XT,LINEAR_CURVE:y8,FLAT_CURVE:Dm,ALPHA_CURVE:x8,RESOURCE_ALPHA_CURVE:Om,TRAIL_ALPHA_CURVE:Nm,TRAIL_SHAPE_CURVE:$m}}const IT=Symbol("particle-panel");function MX(){const n=_X();return l1(IT,n),n}function oo(){const n=Ro(IT);if(!n)throw new Error("Particle panel sections require a ParticlePanel parent");return n}const PX={class:"group config-management"},IX={class:"caret"},kX={class:"group-body config-management-body"},RX={class:"config-toolbar"},FX=["title"],LX=["title"],DX=["aria-label","disabled"],OX={value:""},NX=["value"],$X=qt({__name:"ProjectConfigSection",setup(n){const{configFileInput:e,selectedPreset:t,presetOptions:i,presetLoading:s,configMessage:r,configError:o,saveConfig:a,onConfigFileChange:c,refreshPresets:l,loadSelectedPreset:d,collapsed:u,toggle:h,select:f}=oo(),{locale:p}=fn();function m(g){return AX(g,p.value)}return(g,v)=>(Q(),te("div",PX,[x("div",{class:"group-head",onClick:v[0]||(v[0]=y=>P(h)("config"))},[x("span",IX,R(P(u).config?"▸":"▾"),1),x("span",null,R(g.$t("config.title")),1)]),me(x("div",kX,[x("div",RX,[x("button",{title:g.$t("config.saveTitle"),onClick:v[1]||(v[1]=(...y)=>P(a)&&P(a)(...y))},R(g.$t("config.save")),9,FX),x("button",{title:g.$t("config.loadTitle"),onClick:v[2]||(v[2]=y=>{var b;return(b=P(e))==null?void 0:b.click()})},R(g.$t("config.load")),9,LX),me(x("select",{"onUpdate:modelValue":v[3]||(v[3]=y=>Qt(t)?t.value=y:null),"aria-label":g.$t("config.presets"),disabled:!P(i).length||P(s),onPointerdown:v[4]||(v[4]=(...y)=>P(l)&&P(l)(...y)),onFocus:v[5]||(v[5]=(...y)=>P(l)&&P(l)(...y)),onChange:v[6]||(v[6]=(...y)=>P(d)&&P(d)(...y))},[x("option",OX,R(P(i).length?g.$t("config.selectPreset"):g.$t("config.noPresets")),1),(Q(!0),te(_e,null,Pt(P(i),y=>(Q(),te("option",{key:y.file,value:y.file},R(m(y)),9,NX))),128))],40,DX),[[St,P(t)]]),x("input",{ref_key:"configFileInput",ref:e,hidden:"",type:"file",accept:".json,application/json",onChange:v[7]||(v[7]=(...y)=>P(c)&&P(c)(...y))},null,544)]),P(r)?(Q(),te("div",{key:0,class:Ie(["config-message",{error:P(o)}])},R(P(r)),3)):Ce("",!0)],512),[[Fi,!P(u).config]])]))}}),BX=li($X,[["__scopeId","data-v-0da232dc"]]),UX={class:"ns-label"},VX=["min","max","step","value","disabled"],XX=["min","max","step","value","disabled"],YX=qt({__name:"NumSlider",props:{label:{},modelValue:{},min:{},max:{},step:{},disabled:{type:Boolean}},emits:["update:modelValue"],setup(n,{emit:e}){const t=n,i=e,s=$e(String(t.modelValue));ei(()=>t.modelValue,c=>{s.value=String(c)});function r(c){const l=parseFloat(c.target.value);Number.isNaN(l)||i("update:modelValue",l)}function o(c){s.value=c.target.value;const l=parseFloat(s.value);Number.isNaN(l)||i("update:modelValue",l)}function a(){const c=parseFloat(s.value);Number.isNaN(c)&&(s.value=String(t.modelValue))}return(c,l)=>(Q(),te("div",{class:Ie(["ns",{disabled:n.disabled}])},[x("span",UX,R(n.label),1),x("input",{type:"range",class:"ns-range",min:n.min,max:n.max,step:n.step,value:n.modelValue,disabled:n.disabled,onInput:r},null,40,VX),x("input",{type:"number",class:"ns-num",min:n.min,max:n.max,step:n.step,value:s.value,disabled:n.disabled,onInput:o,onBlur:a},null,40,XX)],2))}}),Ue=li(YX,[["__scopeId","data-v-7c2fbed0"]]),zX={class:"ce"},jX={class:"ce-editor"},HX={class:"ce-grid"},GX=["x1","x2","y2"],WX=["y1","x2","y2"],qX=["x","y","width","height"],KX=["d"],JX={key:0,class:"ce-handles"},ZX=["x1","y1","x2","y2"],QX=["cx","cy","onPointerdown"],eY=["x1","y1","x2","y2"],tY=["cx","cy","onPointerdown"],iY=["cx","cy"],nY=["cx","cy","onPointerdown","onDblclick"],sY={class:"ce-nav"},rY={class:"ce-tip"},oY=["title"],Ar=8,aY=qt({__name:"CurveEditor",props:{modelValue:{},defaultValue:{default:()=>[{x:0,y:0},{x:1,y:1}]},mode:{default:"linear"}},emits:["update:modelValue"],setup(n,{emit:e}){const t=n,i=e,s=$e(null),r=$e(300),o=$e(110);let a=null;function c(){if(!s.value)return;const M=s.value.getBoundingClientRect();r.value=M.width,o.value=M.height}function l(M){return Ar+M*(r.value-Ar*2)}function d(M){return Ar+(1-M)*(o.value-Ar*2)}function u(){return[...t.modelValue].sort((M,k)=>M.x-k.x)}function h(M){i("update:modelValue",[...M].sort((k,B)=>k.x-B.x))}function f(){h(t.defaultValue.map(M=>({...M})))}const p=Fe(()=>u());function m(M){const k=p.value[M],B=p.value[Math.max(0,M-1)];return{x:k.x-(k.x-B.x)/3,y:k.y-(k.y-B.y)/3}}function g(M){const k=p.value[M],B=p.value[Math.min(p.value.length-1,M+1)];return{x:k.x+(B.x-k.x)/3,y:k.y+(B.y-k.y)/3}}function v(M){const k=p.value[M],B=m(M);return{x:k.x+(k.inX??B.x-k.x),y:k.y+(k.inY??B.y-k.y)}}function y(M){const k=p.value[M],B=g(M);return{x:k.x+(k.outX??B.x-k.x),y:k.y+(k.outY??B.y-k.y)}}const b=Fe(()=>{if(!p.value.length)return"";let M=`M ${l(p.value[0].x)} ${d(p.value[0].y)}`;for(let k=1;kMath.abs(G.x-k)>.02);D.push({x:k,y:B}),h(D)}let S={t:0,i:-1,x:0,y:0};function E(M,k){M.stopPropagation();const B=u().findIndex(Y=>Math.abs(Y.x-p.value[k].x)<1e-6&&Math.abs(Y.y-p.value[k].y)<1e-6);if(B<0)return;const D=Date.now();if(D-S.t<300&&S.i===k&&Math.abs(M.clientX-S.x)<8&&Math.abs(M.clientY-S.y)<8){S={t:0,i:-1,x:0,y:0},I(k);return}S={t:D,i:k,x:M.clientX,y:M.clientY};const G=Y=>{(Math.abs(Y.clientX-M.clientX)>8||Math.abs(Y.clientY-M.clientY)>8)&&(S={t:0,i:-1,x:0,y:0});const{x:L,y:N}=w(Y.clientX,Y.clientY),F=u();F[B]={x:L,y:N},h(F)},V=()=>{window.removeEventListener("pointermove",G),window.removeEventListener("pointerup",V)};window.addEventListener("pointermove",G),window.addEventListener("pointerup",V)}function _(M,k,B){M.stopPropagation();const D=V=>{const Y=w(V.clientX,V.clientY),L=u(),N=L[k],F=B==="in"?L[Math.max(0,k-1)].x:N.x,$=B==="in"?N.x:L[Math.min(L.length-1,k+1)].x,X=Math.min($,Math.max(F,Y.x)),z=Math.round((X-N.x)*100)/100,K=Math.round((Y.y-N.y)*100)/100;L[k]=B==="in"?{...N,inX:z,inY:K}:{...N,outX:z,outY:K},h(L)},G=()=>{window.removeEventListener("pointermove",D),window.removeEventListener("pointerup",G)};window.addEventListener("pointermove",D),window.addEventListener("pointerup",G)}function I(M,k){k==null||k.stopPropagation();const B=u();B.length<=2||(C=Date.now(),h(B.filter((D,G)=>G!==M)))}return Sn(()=>{c(),a=new ResizeObserver(c),s.value&&a.observe(s.value)}),Za(()=>{a==null||a.disconnect()}),(M,k)=>(Q(),te("div",zX,[x("div",jX,[(Q(),te("svg",{ref_key:"svg",ref:s,class:"ce-svg",onDblclick:T},[x("g",HX,[(Q(),te(_e,null,Pt([.25,.5,.75],B=>x("line",{key:"v"+B,x1:l(B),y1:"0",x2:l(B),y2:d(0)},null,8,GX)),64)),(Q(),te(_e,null,Pt([.25,.5,.75],B=>x("line",{key:"h"+B,x1:"0",y1:d(B),x2:l(1),y2:d(B)},null,8,WX)),64))]),x("rect",{x:l(0),y:d(1),width:l(1)-l(0),height:d(0)-d(1),class:"ce-frame",fill:"none"},null,8,qX),x("path",{d:b.value,class:"ce-line",fill:"none"},null,8,KX),n.mode==="bezier"?(Q(),te("g",JX,[(Q(!0),te(_e,null,Pt(p.value,(B,D)=>(Q(),te(_e,{key:"handles-"+D},[D>0?(Q(),te("line",{key:0,x1:l(B.x),y1:d(B.y),x2:l(v(D).x),y2:d(v(D).y)},null,8,ZX)):Ce("",!0),D>0?(Q(),te("circle",{key:1,cx:l(v(D).x),cy:d(v(D).y),r:"4",onPointerdown:G=>_(G,D,"in")},null,40,QX)):Ce("",!0),D_(G,D,"out")},null,40,tY)):Ce("",!0)],64))),128))])):Ce("",!0),(Q(!0),te(_e,null,Pt(p.value,(B,D)=>(Q(),te("g",{key:D},[x("circle",{cx:l(B.x),cy:d(B.y),r:"5",class:"ce-node"},null,8,iY),x("circle",{cx:l(B.x),cy:d(B.y),r:"9",class:"ce-hit",onPointerdown:G=>E(G,D),onDblclick:G=>I(D,G)},null,40,nY)]))),128))],544)),x("div",sY,[x("span",rY,R(n.mode==="bezier"?M.$t("curve.bezierHint"):M.$t("curve.linearHint")),1)])]),x("button",{class:"ce-reset",type:"button",title:M.$t("curve.resetTitle"),onClick:f},R(M.$t("common.reset")),9,oY)]))}}),ys=li(aY,[["__scopeId","data-v-8f475293"]]),lY={class:"spine-editor"},cY={class:"editor-title"},dY={class:"field wide"},uY={class:"grid three"},hY={class:"field"},fY={class:"field"},pY={class:"field"},mY={class:"grid three"},gY={class:"field"},vY={class:"field"},bY={class:"field"},yY={class:"section-title"},xY=["disabled"],wY={class:"folder-hint"},SY={class:"asset-row"},CY=["title"],AY={class:"asset-row"},TY=["title"],EY={class:"asset-row"},_Y=["title"],MY={class:"asset-actions"},PY=["disabled"],IY={class:"runtime-note"},kY={key:0},RY={key:0,class:"error"},FY={class:"section-box"},LY={class:"section-title"},DY={key:0,class:"empty"},OY={key:1,class:"field wide"},NY={value:""},$Y=["value"],BY={class:"section-box"},UY={class:"tree-title-row"},VY={class:"section-title"},XY=["disabled","title"],YY=["disabled","title"],zY={class:"tree-tabs"},jY={key:0,class:"empty"},HY={key:1,class:"bone-search"},GY=["aria-label","placeholder"],WY=["title","aria-label"],qY={key:2,class:"empty"},KY={key:3,class:"bone-tree"},JY=["onClick","onKeydown"],ZY=["title","onClick"],QY={key:1,class:"bone-leaf"},ez={class:"bone-name"},tz={key:0,class:"empty"},iz={key:1,class:"bone-search"},nz=["aria-label","placeholder"],sz=["title","aria-label"],rz={key:2,class:"empty"},oz={key:3,class:"bone-tree slot-tree"},az=["title","onClick","onKeydown"],lz={class:"slot-order"},cz={class:"bone-name"},dz={class:"slot-attachment"},uz=qt({__name:"SpineObjectPanel",props:{spineObject:{}},setup(n){const e=n,{t}=fn(),i=Go(),s=$e(null),r=$e(null),o=$e(null),a=$e(null),c=$e(new Set),l=$e(""),d=$e("bone"),u=$e(""),h=$e(null),f=$e(null),p=$e([]);e.spineObject.selectedBone==null&&(e.spineObject.selectedBone=""),e.spineObject.selectedSlot==null&&(e.spineObject.selectedSlot=""),Array.isArray(e.spineObject.slots)||(e.spineObject.slots=[]),e.spineObject.sourceBundle==null&&(e.spineObject.sourceBundle=null),e.spineObject.dataVersion==null&&(e.spineObject.dataVersion="");const m=Fe(()=>{var X;return((X=h.value)==null?void 0:X.name)||e.spineObject.skeletonFileName}),g=Fe(()=>{var X;return((X=f.value)==null?void 0:X.name)||e.spineObject.atlasFileName}),v=Fe(()=>p.value.length?p.value.map(X=>X.name):e.spineObject.textureFileNames),y=Fe(()=>v.value.length?t("spine.textureSummary",{count:v.value.length,names:v.value.join(", ")}):"PNG / JPEG / WebP..."),b=Fe(()=>new Set(e.spineObject.bones.map(X=>X.parent).filter(X=>!!X))),w=Fe(()=>new Map(e.spineObject.bones.map(X=>[X.name,X]))),C=Fe(()=>e.spineObject.bones.filter(X=>{var J;const z=l.value.trim().toLocaleLowerCase();if(z)return X.name.toLocaleLowerCase().includes(z);let K=X.parent;for(;K;){if(c.value.has(K))return!1;K=((J=w.value.get(K))==null?void 0:J.parent)||null}return!0})),T=Fe(()=>b.value.size>0&&[...b.value].every(X=>c.value.has(X))),S=Fe(()=>{const X=u.value.trim().toLocaleLowerCase(),z=[...e.spineObject.slots].sort((K,J)=>K.order-J.order);return X?z.filter(K=>K.name.toLocaleLowerCase().includes(X)||K.attachment.toLocaleLowerCase().includes(X)):z});function E(X){const z=e.spineObject.selectedBone===X;for(const K of i.spines)K.selectedBone="";z||(e.spineObject.selectedBone=X)}function _(X){const z=e.spineObject.selectedSlot===X;for(const K of i.spines)K.selectedSlot="";z||(e.spineObject.selectedSlot=X)}function I(X){c.value.has(X)?c.value.delete(X):c.value.add(X)}function M(){c.value=T.value?new Set:new Set(b.value)}function k(X){var z;return((z=X.target.files)==null?void 0:z[0])||null}function B(X){h.value=k(X)}function D(X){f.value=k(X)}function G(X){p.value=Array.from(X.target.files||[])}function V(X){return X.name.replace(/\.[^.]+$/,"").toLocaleLowerCase()}async function Y(X){const z=Array.from(X.target.files||[]);if(!z.length)return;const K=z.filter(fe=>/\.(json|skel)$/i.test(fe.name)),J=z.filter(fe=>/\.atlas$/i.test(fe.name)),oe=z.filter(fe=>/\.(png|jpe?g|webp|wepb)$/i.test(fe.name)),le=J.map(fe=>({atlas:fe,skeleton:K.find(be=>V(be)===V(fe))})).find(fe=>fe.skeleton),ve=(le==null?void 0:le.skeleton)||K[0]||null,Se=(le==null?void 0:le.atlas)||J[0]||null;if(h.value=ve,f.value=Se,p.value=oe,!ve||!Se||!oe.length){const fe=[!ve&&"JSON / SKEL",!Se&&"Atlas",!oe.length&&t("spine.textureImages")].filter(Boolean).join(", ");e.spineObject.status="error",e.spineObject.error=t("spine.missingFolderAssets",{missing:fe});return}await F()}function L(){i.recalcTotalFrames()}function N(){L(),i.timeline.frame=0}async function F(){var K;const X=h.value,z=f.value;if(!X||!z||!p.value.length){e.spineObject.status="error",e.spineObject.error=t("spine.chooseAssets");return}e.spineObject.status="loading",e.spineObject.error="";try{const J=await xA(X,z,p.value);ch(e.spineObject.id,J),e.spineObject.skeletonFileName=X.name,e.spineObject.atlasFileName=z.name,e.spineObject.textureFileNames=p.value.map(oe=>oe.name),e.spineObject.dataVersion=J.dataVersion,e.spineObject.animations=J.animations,e.spineObject.bones=J.bones,e.spineObject.slots=J.slots,e.spineObject.selectedBone="",e.spineObject.selectedSlot="",l.value="",u.value="",c.value=new Set,e.spineObject.selectedAnimation=((K=J.animations[0])==null?void 0:K.name)||"",e.spineObject.assetVersion++,e.spineObject.status="ready",L(),i.timeline.frame=0;try{e.spineObject.sourceBundle=await w4(X,z,p.value)}catch(oe){e.spineObject.sourceBundle=null,console.warn("Spine 配置资源嵌入失败",oe)}}catch(J){e.spineObject.status="error",e.spineObject.error=J instanceof Error?J.message:String(J)}}function $(){bc(e.spineObject.id),h.value=null,f.value=null,p.value=[],s.value&&(s.value.value=""),r.value&&(r.value.value=""),o.value&&(o.value.value=""),a.value&&(a.value.value=""),e.spineObject.skeletonFileName="",e.spineObject.atlasFileName="",e.spineObject.textureFileNames=[],e.spineObject.dataVersion="",e.spineObject.sourceBundle=null,e.spineObject.animations=[],e.spineObject.bones=[],e.spineObject.slots=[],e.spineObject.selectedBone="",e.spineObject.selectedSlot="",l.value="",u.value="",c.value=new Set,e.spineObject.selectedAnimation="",e.spineObject.assetVersion++,e.spineObject.status="empty",e.spineObject.error="",L()}return(X,z)=>(Q(),te("div",lY,[x("div",cY,R(X.$t("spine.title")),1),x("label",dY,[x("span",null,R(X.$t("spine.name")),1),me(x("input",{"onUpdate:modelValue":z[0]||(z[0]=K=>n.spineObject.name=K)},null,512),[[Je,n.spineObject.name]])]),x("div",uY,[x("label",hY,[x("span",null,R(X.$t("spine.xPosition")),1),me(x("input",{"onUpdate:modelValue":z[1]||(z[1]=K=>n.spineObject.x=K),type:"number"},null,512),[[Je,n.spineObject.x,void 0,{number:!0}]])]),x("label",fY,[x("span",null,R(X.$t("spine.yPosition")),1),me(x("input",{"onUpdate:modelValue":z[2]||(z[2]=K=>n.spineObject.y=K),type:"number"},null,512),[[Je,n.spineObject.y,void 0,{number:!0}]])]),x("label",pY,[x("span",null,R(X.$t("spine.rotation")),1),me(x("input",{"onUpdate:modelValue":z[3]||(z[3]=K=>n.spineObject.rotation=K),type:"number"},null,512),[[Je,n.spineObject.rotation,void 0,{number:!0}]])])]),x("div",mY,[x("label",gY,[z[20]||(z[20]=x("span",null,"Scale X",-1)),me(x("input",{"onUpdate:modelValue":z[4]||(z[4]=K=>n.spineObject.scaleX=K),type:"number",step:"0.05"},null,512),[[Je,n.spineObject.scaleX,void 0,{number:!0}]])]),x("label",vY,[z[21]||(z[21]=x("span",null,"Scale Y",-1)),me(x("input",{"onUpdate:modelValue":z[5]||(z[5]=K=>n.spineObject.scaleY=K),type:"number",step:"0.05"},null,512),[[Je,n.spineObject.scaleY,void 0,{number:!0}]])]),x("label",bY,[x("span",null,R(X.$t("spine.startTime")),1),me(x("input",{"onUpdate:modelValue":z[6]||(z[6]=K=>n.spineObject.timeOffset=K),type:"number",min:"0",step:"0.033333",onChange:L},null,544),[[Je,n.spineObject.timeOffset,void 0,{number:!0}]])])]),z[22]||(z[22]=x("div",{class:"divider"},null,-1)),x("div",yY,R(X.$t("spine.resources")),1),x("input",{ref_key:"skeletonInput",ref:s,hidden:"",type:"file",accept:".json,.skel,application/json,application/octet-stream",onChange:B},null,544),x("input",{ref_key:"atlasInput",ref:r,hidden:"",type:"file",accept:".atlas,text/plain",onChange:D},null,544),x("input",{ref_key:"textureInput",ref:o,hidden:"",type:"file",multiple:"",accept:".png,.jpg,.jpeg,.webp,.wepb,image/png,image/jpeg,image/webp",onChange:G},null,544),x("input",{ref_key:"folderInput",ref:a,hidden:"",type:"file",multiple:"",webkitdirectory:"",directory:"",onChange:Y},null,544),x("button",{class:"folder-select",disabled:n.spineObject.status==="loading",onClick:z[7]||(z[7]=K=>{var J;return(J=a.value)==null?void 0:J.click()})},R(X.$t("spine.chooseFolder")),9,xY),x("div",wY,R(X.$t("spine.folderHint")),1),x("div",SY,[x("div",{class:"asset-name",title:m.value},R(m.value||"JSON / SKEL..."),9,CY),x("button",{onClick:z[8]||(z[8]=K=>{var J;return(J=s.value)==null?void 0:J.click()})},R(X.$t("spine.choose")),1)]),x("div",AY,[x("div",{class:"asset-name",title:g.value},R(g.value||"Atlas..."),9,TY),x("button",{onClick:z[9]||(z[9]=K=>{var J;return(J=r.value)==null?void 0:J.click()})},R(X.$t("spine.choose")),1)]),x("div",EY,[x("div",{class:"asset-name",title:v.value.join(", ")},R(y.value),9,_Y),x("button",{onClick:z[10]||(z[10]=K=>{var J;return(J=o.value)==null?void 0:J.click()})},R(X.$t("spine.chooseMultiple")),1)]),x("div",MY,[x("button",{class:"load",disabled:n.spineObject.status==="loading",onClick:F},R(n.spineObject.status==="loading"?X.$t("spine.loading"):X.$t("spine.load")),9,PY),x("button",{class:"clear",onClick:$},R(X.$t("spine.clear")),1)]),x("div",IY,[bt(R(X.$t("spine.supportNote"))+" ",1),n.spineObject.dataVersion?(Q(),te("span",kY," · "+R(X.$t("spine.currentResource",{version:n.spineObject.dataVersion})),1)):Ce("",!0)]),n.spineObject.error?(Q(),te("div",RY,R(n.spineObject.error),1)):Ce("",!0),x("div",FY,[x("div",LY,R(X.$t("spine.animations")),1),n.spineObject.animations.length?(Q(),te("label",OY,[x("span",null,R(X.$t("spine.timelineAnimation")),1),me(x("select",{"onUpdate:modelValue":z[11]||(z[11]=K=>n.spineObject.selectedAnimation=K),onChange:N},[x("option",NY,R(X.$t("spine.no")),1),(Q(!0),te(_e,null,Pt(n.spineObject.animations,K=>(Q(),te("option",{key:K.name,value:K.name},R(K.name)+"("+R(K.duration.toFixed(2))+"s) ",9,$Y))),128))],544),[[St,n.spineObject.selectedAnimation]])])):(Q(),te("div",DY,R(X.$t("spine.noAnimations")),1))]),x("div",BY,[x("div",UY,[x("div",VY,R(X.$t("spine.hierarchy")),1),d.value==="bone"?(Q(),te("button",{key:0,class:Ie(["selected-bone",{active:n.spineObject.selectedBone}]),disabled:!n.spineObject.selectedBone,title:n.spineObject.selectedBone?X.$t("spine.clearBoneTitle"):X.$t("spine.noBoneTitle"),onClick:z[12]||(z[12]=K=>n.spineObject.selectedBone="")},[n.spineObject.selectedBone?(Q(),te(_e,{key:0},[bt(R(X.$t("spine.clearBone",{name:""})),1),x("strong",null,R(n.spineObject.selectedBone),1)],64)):(Q(),te(_e,{key:1},[bt(R(X.$t("spine.currentBone")),1),x("strong",null,R(X.$t("spine.notSelected")),1)],64))],10,XY)):(Q(),te("button",{key:1,class:Ie(["selected-bone",{active:n.spineObject.selectedSlot}]),disabled:!n.spineObject.selectedSlot,title:n.spineObject.selectedSlot?X.$t("spine.clearSlotTitle"):X.$t("spine.noSlotTitle"),onClick:z[13]||(z[13]=K=>n.spineObject.selectedSlot="")},[n.spineObject.selectedSlot?(Q(),te(_e,{key:0},[bt(R(X.$t("spine.clearSlot",{name:""})),1),x("strong",null,R(n.spineObject.selectedSlot),1)],64)):(Q(),te(_e,{key:1},[bt(R(X.$t("spine.currentSlot")),1),x("strong",null,R(X.$t("spine.notSelected")),1)],64))],10,YY)),d.value==="bone"&&n.spineObject.bones.length?(Q(),te("button",{key:2,class:"tree-action",onClick:M},R(T.value?X.$t("spine.expandAll"):X.$t("spine.collapseAll")),1)):Ce("",!0)]),x("div",zY,[x("button",{class:Ie({on:d.value==="bone"}),onClick:z[14]||(z[14]=K=>d.value="bone")},R(X.$t("spine.bones")),3),x("button",{class:Ie({on:d.value==="slot"}),onClick:z[15]||(z[15]=K=>d.value="slot")},R(X.$t("spine.slots")),3)]),d.value==="bone"?(Q(),te(_e,{key:0},[n.spineObject.bones.length?(Q(),te("div",HY,[me(x("input",{"onUpdate:modelValue":z[16]||(z[16]=K=>l.value=K),type:"search","aria-label":X.$t("spine.searchBones"),placeholder:X.$t("spine.searchBonesPlaceholder")},null,8,GY),[[Je,l.value,void 0,{trim:!0}]]),l.value?(Q(),te("button",{key:0,title:X.$t("spine.clearSearch"),"aria-label":X.$t("spine.clearBoneSearch"),onClick:z[17]||(z[17]=K=>l.value="")},"✕",8,WY)):Ce("",!0)])):(Q(),te("div",jY,R(X.$t("spine.notLoaded")),1)),n.spineObject.bones.length&&!C.value.length?(Q(),te("div",qY,R(X.$t("spine.noMatchingBones")),1)):n.spineObject.bones.length?(Q(),te("div",KY,[(Q(!0),te(_e,null,Pt(C.value,K=>(Q(),te("div",{key:K.name,class:Ie(["bone",{selected:n.spineObject.selectedBone===K.name}]),style:Vt({paddingLeft:`${6+K.depth*16}px`}),role:"button",tabindex:"0",onClick:J=>E(K.name),onKeydown:Gr(tt(J=>E(K.name),["prevent"]),["enter"])},[b.value.has(K.name)?(Q(),te("button",{key:0,class:"bone-toggle",title:c.value.has(K.name)?X.$t("spine.expandChildren"):X.$t("spine.collapseChildren"),onClick:tt(J=>I(K.name),["stop"])},R(c.value.has(K.name)?"▸":"▾"),9,ZY)):(Q(),te("span",QY,"•")),x("span",ez,R(K.name),1)],46,JY))),128))])):Ce("",!0)],64)):(Q(),te(_e,{key:1},[n.spineObject.slots.length?(Q(),te("div",iz,[me(x("input",{"onUpdate:modelValue":z[18]||(z[18]=K=>u.value=K),type:"search","aria-label":X.$t("spine.searchSlots"),placeholder:X.$t("spine.searchSlotsPlaceholder")},null,8,nz),[[Je,u.value,void 0,{trim:!0}]]),u.value?(Q(),te("button",{key:0,title:X.$t("spine.clearSearch"),"aria-label":X.$t("spine.clearSlotSearch"),onClick:z[19]||(z[19]=K=>u.value="")},"✕",8,sz)):Ce("",!0)])):(Q(),te("div",tz,R(X.$t("spine.notLoadedSlots")),1)),n.spineObject.slots.length&&!S.value.length?(Q(),te("div",rz,R(X.$t("spine.noMatchingSlots")),1)):n.spineObject.slots.length?(Q(),te("div",oz,[(Q(!0),te(_e,null,Pt(S.value,K=>(Q(),te("div",{key:K.name,class:Ie(["bone slot-row",{selected:n.spineObject.selectedSlot===K.name}]),role:"button",tabindex:"0",title:X.$t("spine.slotTitle",{name:K.name,bone:K.bone||"-",attachment:K.attachment||X.$t("spine.empty")}),onClick:J=>_(K.name),onKeydown:Gr(tt(J=>_(K.name),["prevent"]),["enter"])},[x("span",lz,R(K.order+1),1),x("span",cz,R(K.name),1),x("span",dz,R(K.attachment||X.$t("spine.empty")),1)],42,az))),128))])):Ce("",!0)],64))])]))}}),hz=li(uz,[["__scopeId","data-v-35137928"]]),fz={class:"group"},pz={class:"caret"},mz={class:"scene-actions"},gz=["title"],vz=["title"],bz=["title"],yz=["title"],xz=["disabled","title"],wz={class:"group-body"},Sz={class:"tree scene-tree"},Cz=["onClick"],Az={key:0,class:"sub-branch"},Tz={key:1,class:"tdot"},Ez={class:"tlabel"},_z=["title","aria-label","onClick"],Mz={viewBox:"0 0 24 24","aria-hidden":"true"},Pz={key:0,class:"eye-slash",d:"M4 4l16 16"},Iz=["title","onClick"],kz=["onClick"],Rz={class:"tlabel"},Fz=["title","aria-label","onClick"],Lz={viewBox:"0 0 24 24","aria-hidden":"true"},Dz={key:0,class:"eye-slash",d:"M4 4l16 16"},Oz={class:"scene-object-kind"},Nz=["title","onClick"],$z=["onClick"],Bz={class:"tlabel"},Uz=["title","aria-label","onClick"],Vz={viewBox:"0 0 24 24","aria-hidden":"true"},Xz={key:0,class:"eye-slash",d:"M4 4l16 16"},Yz={class:"scene-object-kind"},zz=["title","onClick"],jz=["onClick"],Hz={class:"tlabel"},Gz=["title","aria-label","onClick"],Wz={viewBox:"0 0 24 24","aria-hidden":"true"},qz={key:0,class:"eye-slash",d:"M4 4l16 16"},Kz=["title","onClick"],Jz={key:0,class:"empty"},Zz={class:"row"},Qz={class:"seed-row scene-seed"},e6={for:"system-seed"},t6=["title"],i6=["title"],n6={class:"seed-hint"},s6={class:"object-editor-title"},r6={class:"field-block"},o6={class:"field-grid"},a6={class:"field-block"},l6={value:"circle"},c6={value:"ellipse"},d6={value:"rect"},u6={value:"polygon"},h6={value:"custom"},f6={class:"field-block check-field"},p6={class:"field-grid"},m6={class:"compact-field"},g6={class:"compact-field"},v6={class:"field-grid"},b6={class:"compact-field"},y6={class:"compact-field"},x6={key:1,class:"field-grid"},w6={class:"compact-field"},S6={class:"compact-field"},C6={key:2,class:"field-grid"},A6={class:"compact-field"},T6={class:"compact-field"},E6={class:"field-block"},_6={value:"physics"},M6={value:"pause"},P6={value:"destroy"},I6={key:4,class:"field-grid"},k6={class:"compact-field"},R6={class:"compact-field"},F6={class:"collider-follow-section"},L6={class:"follow-path"},D6={class:"field-block"},O6={value:0},N6=["value"],$6={class:"field-grid"},B6={class:"compact-field"},U6={class:"compact-field"},V6={value:"跟随导出"},X6={value:"线性"},Y6={value:"贝塞尔"},z6={class:"follow-path"},j6={class:"collider-curve-title"},H6={class:"object-editor-title"},G6={class:"field-block"},W6={class:"field-grid"},q6={class:"compact-field"},K6={class:"compact-field"},J6={class:"field-grid"},Z6={class:"compact-field"},Q6={class:"compact-field"},ej={class:"setting-line"},tj={class:"setting-line"},ij={class:"path-help"},nj={class:"field-block"},sj={value:""},rj={value:"circle"},oj={value:"square"},aj={value:"polygon"},lj={value:"star"},cj={key:4,class:"panel-hint"},dj=qt({__name:"SceneObjectsSection",setup(n){const{store:e,resolvedCurveEditorMode:t,sys:i,activeObjectType:s,activeCollider:r,activePath:o,activeSpine:a,canCopyObject:c,collapsed:l,toggle:d,addSys:u,addCollider:h,addPath:f,addSpine:p,copySelectedObject:m,applyPathPreset:g,clearPathAnchors:v,randomizeSeed:y,LINEAR_CURVE:b}=oo(),w=Fe(()=>{const C=new Map(e.systems.map(M=>[M.id,M])),T=new Map;for(const M of e.systems)if(M.config.eventEnabled!==!1)for(const k of M.config.events||[])k.targetSystemId<=0||k.targetSystemId===M.id||!C.has(k.targetSystemId)||T.has(k.targetSystemId)||T.set(k.targetSystemId,M.id);const S=new Map;for(const[M,k]of T){const B=S.get(k);B?B.push(M):S.set(k,[M])}const E=[],_=new Set,I=(M,k)=>{if(!_.has(M.id)){_.add(M.id),E.push({system:M,depth:k});for(const B of S.get(M.id)||[]){const D=C.get(B);D&&I(D,k+1)}}};for(const M of e.systems)T.has(M.id)||I(M,0);for(const M of e.systems)_.has(M.id)||I(M,0);return E});return(C,T)=>(Q(),te("div",fz,[x("div",{class:"group-head scene-head",onClick:T[5]||(T[5]=S=>P(d)("scene"))},[x("span",pz,R(P(l).scene?"▸":"▾"),1),x("span",null,R(C.$t("scene.title")),1),x("div",mz,[x("button",{class:"scene-add",title:C.$t("scene.addParticle"),onClick:T[0]||(T[0]=tt((...S)=>P(u)&&P(u)(...S),["stop"]))},R(C.$t("scene.addParticleShort")),9,gz),x("button",{class:"scene-add",title:C.$t("scene.addCollider"),onClick:T[1]||(T[1]=tt((...S)=>P(h)&&P(h)(...S),["stop"]))},R(C.$t("scene.addColliderShort")),9,vz),x("button",{class:"scene-add",title:C.$t("scene.addPath"),onClick:T[2]||(T[2]=tt((...S)=>P(f)&&P(f)(...S),["stop"]))},R(C.$t("scene.addPathShort")),9,bz),x("button",{class:"scene-add",title:C.$t("scene.addSpine"),onClick:T[3]||(T[3]=tt((...S)=>P(p)&&P(p)(...S),["stop"]))},"+Spine",8,yz),x("button",{class:"scene-add",disabled:!P(c),title:C.$t("scene.copyTitle"),onClick:T[4]||(T[4]=tt((...S)=>P(m)&&P(m)(...S),["stop"]))},"+Copy",8,xz)])]),me(x("div",wz,[x("div",Sz,[(Q(!0),te(_e,null,Pt(w.value,S=>(Q(),te("div",{key:`particle-${S.system.id}`,class:Ie(["tree-item scene-object-item",{on:P(s)==="particle"&&S.system.id===P(e).activeObjectId,"scene-object-child":S.depth>0}]),style:Vt(S.depth>0?{paddingLeft:`${S.depth*18}px`}:void 0),onClick:E=>P(e).selectSystem(S.system.id)},[S.depth>0?(Q(),te("span",Az,"└")):(Q(),te("span",Tz,"●")),x("span",Ez,R(S.system.config.name||"ParticleSystem"),1),x("button",{class:Ie(["scene-object-eye",{off:S.system.visible===!1}]),title:S.system.visible===!1?C.$t("scene.showParticle"):C.$t("scene.hideParticle"),"aria-label":S.system.visible===!1?C.$t("scene.showParticle"):C.$t("scene.hideParticle"),onClick:tt(E=>S.system.visible=S.system.visible===!1,["stop"])},[(Q(),te("svg",Mz,[T[50]||(T[50]=x("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"},null,-1)),T[51]||(T[51]=x("circle",{cx:"12",cy:"12",r:"2.8"},null,-1)),S.system.visible===!1?(Q(),te("path",Pz)):Ce("",!0)]))],10,_z),x("span",{class:Ie(["scene-object-kind",{"sub-emitter-kind":S.depth>0}])},R(S.depth>0?C.$t("scene.subEmitter"):C.$t("scene.particle")),3),x("button",{class:"scene-object-delete",title:C.$t("scene.deleteParticle"),onClick:tt(E=>P(e).removeSystem(S.system.id),["stop"])},"✕",8,Iz)],14,Cz))),128)),(Q(!0),te(_e,null,Pt(P(e).colliders,S=>(Q(),te("div",{key:`collision-${S.id}`,class:Ie(["tree-item scene-object-item",{on:P(s)==="collision"&&S.id===P(e).activeObjectId}]),onClick:E=>P(e).selectSceneObject("collision",S.id)},[T[54]||(T[54]=x("span",{class:"tdot collision-dot"},"■",-1)),x("span",Rz,R(S.name),1),x("button",{class:Ie(["scene-object-eye",{off:S.visible===!1}]),title:S.visible===!1?C.$t("scene.showCollider"):C.$t("scene.hideCollider"),"aria-label":S.visible===!1?C.$t("scene.showCollider"):C.$t("scene.hideCollider"),onClick:tt(E=>S.visible=S.visible===!1,["stop"])},[(Q(),te("svg",Lz,[T[52]||(T[52]=x("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"},null,-1)),T[53]||(T[53]=x("circle",{cx:"12",cy:"12",r:"2.8"},null,-1)),S.visible===!1?(Q(),te("path",Dz)):Ce("",!0)]))],10,Fz),x("span",Oz,R(C.$t("scene.collision")),1),x("button",{class:"scene-object-delete",title:C.$t("scene.deleteCollider"),onClick:tt(E=>P(e).removeCollider(S.id),["stop"])},"✕",8,Nz)],10,kz))),128)),(Q(!0),te(_e,null,Pt(P(e).paths,S=>(Q(),te("div",{key:`path-${S.id}`,class:Ie(["tree-item scene-object-item",{on:P(s)==="path"&&S.id===P(e).activeObjectId}]),onClick:E=>P(e).selectSceneObject("path",S.id)},[T[57]||(T[57]=x("span",{class:"tdot path-dot"},"◇",-1)),x("span",Bz,R(S.name),1),x("button",{class:Ie(["scene-object-eye",{off:S.visible===!1}]),title:S.visible===!1?C.$t("scene.showPath"):C.$t("scene.hidePath"),"aria-label":S.visible===!1?C.$t("scene.showPath"):C.$t("scene.hidePath"),onClick:tt(E=>S.visible=S.visible===!1,["stop"])},[(Q(),te("svg",Vz,[T[55]||(T[55]=x("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"},null,-1)),T[56]||(T[56]=x("circle",{cx:"12",cy:"12",r:"2.8"},null,-1)),S.visible===!1?(Q(),te("path",Xz)):Ce("",!0)]))],10,Uz),x("span",Yz,R(C.$t("scene.path")),1),x("button",{class:"scene-object-delete",title:C.$t("scene.deletePath"),onClick:tt(E=>P(e).removePath(S.id),["stop"])},"✕",8,zz)],10,$z))),128)),(Q(!0),te(_e,null,Pt(P(e).spines,S=>(Q(),te("div",{key:`spine-${S.id}`,class:Ie(["tree-item scene-object-item",{on:P(s)==="spine"&&S.id===P(e).activeObjectId}]),onClick:E=>P(e).selectSceneObject("spine",S.id)},[T[60]||(T[60]=x("span",{class:"tdot spine-dot"},"◆",-1)),x("span",Hz,R(S.name),1),x("button",{class:Ie(["scene-object-eye",{off:S.visible===!1}]),title:S.visible===!1?C.$t("scene.showSpine"):C.$t("scene.hideSpine"),"aria-label":S.visible===!1?C.$t("scene.showSpine"):C.$t("scene.hideSpine"),onClick:tt(E=>S.visible=S.visible===!1,["stop"])},[(Q(),te("svg",Wz,[T[58]||(T[58]=x("path",{d:"M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z"},null,-1)),T[59]||(T[59]=x("circle",{cx:"12",cy:"12",r:"2.8"},null,-1)),S.visible===!1?(Q(),te("path",qz)):Ce("",!0)]))],10,Gz),T[61]||(T[61]=x("span",{class:"scene-object-kind"},"Spine",-1)),x("button",{class:"scene-object-delete",title:C.$t("scene.deleteSpine"),onClick:tt(E=>P(e).removeSpine(S.id),["stop"])},"✕",8,Kz)],10,jz))),128)),!P(e).systems.length&&!P(e).colliders.length&&!P(e).paths.length&&!P(e).spines.length?(Q(),te("div",Jz,R(C.$t("scene.empty")),1)):Ce("",!0)]),P(s)==="particle"&&P(i)?(Q(),te(_e,{key:0},[x("label",Zz,[x("span",null,R(C.$t("scene.name")),1),me(x("input",{"onUpdate:modelValue":T[6]||(T[6]=S=>P(i).config.name=S),class:"inp"},null,512),[[Je,P(i).config.name]])]),Ae(Ue,{label:C.$t("scene.positionX"),min:-2e3,max:2e3,step:1,modelValue:P(i).config.centerX,"onUpdate:modelValue":T[7]||(T[7]=S=>P(i).config.centerX=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.positionY"),min:-2e3,max:2e3,step:1,modelValue:P(i).config.centerY,"onUpdate:modelValue":T[8]||(T[8]=S=>P(i).config.centerY=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.offsetX"),min:-2e3,max:2e3,step:1,modelValue:P(i).config.offsetX,"onUpdate:modelValue":T[9]||(T[9]=S=>P(i).config.offsetX=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.offsetY"),min:-2e3,max:2e3,step:1,modelValue:P(i).config.offsetY,"onUpdate:modelValue":T[10]||(T[10]=S=>P(i).config.offsetY=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.rotation"),min:-360,max:360,step:1,modelValue:P(i).config.rootRotation,"onUpdate:modelValue":T[11]||(T[11]=S=>P(i).config.rootRotation=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.scaleX"),min:.05,max:10,step:.05,modelValue:P(i).config.rootScaleX,"onUpdate:modelValue":T[12]||(T[12]=S=>P(i).config.rootScaleX=S)},null,8,["label","modelValue"]),Ae(Ue,{label:C.$t("scene.scaleY"),min:.05,max:10,step:.05,modelValue:P(i).config.rootScaleY,"onUpdate:modelValue":T[13]||(T[13]=S=>P(i).config.rootScaleY=S)},null,8,["label","modelValue"]),x("div",Qz,[x("label",e6,R(C.$t("scene.seed")),1),me(x("input",{id:"system-seed",class:"seed-input",type:"number",min:"0",step:"1","onUpdate:modelValue":T[14]||(T[14]=S=>P(i).config.seed=S),title:C.$t("scene.seedTitle")},null,8,t6),[[Je,P(i).config.seed,void 0,{number:!0}]]),x("button",{class:"seed-random",title:C.$t("scene.randomizeSeed"),onClick:T[15]||(T[15]=(...S)=>P(y)&&P(y)(...S))},"⚄",8,i6)]),x("div",n6,R(C.$t("scene.seedHint")),1)],64)):P(r)?(Q(),te(_e,{key:1},[x("div",s6,R(C.$t("scene.colliderTitle")),1),x("label",r6,[x("span",null,R(C.$t("scene.colliderName")),1),me(x("input",{"onUpdate:modelValue":T[16]||(T[16]=S=>P(r).name=S),class:"inp"},null,512),[[Je,P(r).name]])]),x("div",o6,[x("label",a6,[x("span",null,R(C.$t("scene.type")),1),me(x("select",{"onUpdate:modelValue":T[17]||(T[17]=S=>P(r).shape=S),class:"inp"},[x("option",l6,R(C.$t("scene.circle")),1),x("option",c6,R(C.$t("scene.ellipse")),1),x("option",d6,R(C.$t("scene.rect")),1),x("option",u6,R(C.$t("scene.polygon")),1),x("option",h6,R(C.$t("scene.custom")),1)],512),[[St,P(r).shape]])]),x("label",f6,[x("span",null,R(C.$t("scene.enabled")),1),me(x("input",{"onUpdate:modelValue":T[18]||(T[18]=S=>P(r).enabled=S),type:"checkbox"},null,512),[[Ct,P(r).enabled]])])]),x("div",p6,[x("label",m6,[x("span",null,R(C.$t("scene.xPosition")),1),me(x("input",{"onUpdate:modelValue":T[19]||(T[19]=S=>P(r).x=S),type:"number",class:"inp"},null,512),[[Je,P(r).x,void 0,{number:!0}]])]),x("label",g6,[x("span",null,R(C.$t("scene.yPosition")),1),me(x("input",{"onUpdate:modelValue":T[20]||(T[20]=S=>P(r).y=S),type:"number",class:"inp"},null,512),[[Je,P(r).y,void 0,{number:!0}]])])]),Ae(Ue,{label:C.$t("scene.rotation"),min:-360,max:360,step:1,modelValue:P(r).rotation,"onUpdate:modelValue":T[21]||(T[21]=S=>P(r).rotation=S)},null,8,["label","modelValue"]),x("div",v6,[x("label",b6,[x("span",null,R(C.$t("scene.scaleXShort")),1),me(x("input",{"onUpdate:modelValue":T[22]||(T[22]=S=>P(r).scaleX=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(r).scaleX,void 0,{number:!0}]])]),x("label",y6,[x("span",null,R(C.$t("scene.scaleYShort")),1),me(x("input",{"onUpdate:modelValue":T[23]||(T[23]=S=>P(r).scaleY=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(r).scaleY,void 0,{number:!0}]])])]),P(r).shape==="circle"?(Q(),It(Ue,{key:0,label:C.$t("scene.radius"),min:1,max:1e3,step:1,modelValue:P(r).radius,"onUpdate:modelValue":T[24]||(T[24]=S=>P(r).radius=S)},null,8,["label","modelValue"])):P(r).shape==="ellipse"?(Q(),te("div",x6,[x("label",w6,[x("span",null,R(C.$t("scene.radiusX")),1),me(x("input",{"onUpdate:modelValue":T[25]||(T[25]=S=>P(r).radiusX=S),type:"number",min:"1",class:"inp"},null,512),[[Je,P(r).radiusX,void 0,{number:!0}]])]),x("label",S6,[x("span",null,R(C.$t("scene.radiusY")),1),me(x("input",{"onUpdate:modelValue":T[26]||(T[26]=S=>P(r).radiusY=S),type:"number",min:"1",class:"inp"},null,512),[[Je,P(r).radiusY,void 0,{number:!0}]])])])):(Q(),te("div",C6,[x("label",A6,[x("span",null,R(C.$t("scene.width")),1),me(x("input",{"onUpdate:modelValue":T[27]||(T[27]=S=>P(r).width=S),type:"number",min:"1",class:"inp"},null,512),[[Je,P(r).width,void 0,{number:!0}]])]),x("label",T6,[x("span",null,R(C.$t("scene.height")),1),me(x("input",{"onUpdate:modelValue":T[28]||(T[28]=S=>P(r).height=S),type:"number",min:"1",class:"inp"},null,512),[[Je,P(r).height,void 0,{number:!0}]])])])),P(r).shape==="polygon"||P(r).shape==="custom"?(Q(),It(Ue,{key:3,label:C.$t("scene.sides"),min:3,max:16,step:1,modelValue:P(r).sides,"onUpdate:modelValue":T[29]||(T[29]=S=>P(r).sides=S)},null,8,["label","modelValue"])):Ce("",!0),x("label",E6,[x("span",null,R(C.$t("scene.collisionResponse")),1),me(x("select",{"onUpdate:modelValue":T[30]||(T[30]=S=>P(r).response=S),class:"inp"},[x("option",_6,R(C.$t("scene.physics")),1),x("option",M6,R(C.$t("scene.pause")),1),x("option",P6,R(C.$t("scene.destroy")),1)],512),[[St,P(r).response]])]),P(r).response==="physics"?(Q(),te("div",I6,[x("label",k6,[x("span",null,R(C.$t("scene.elasticity")),1),me(x("input",{"onUpdate:modelValue":T[31]||(T[31]=S=>P(r).elasticity=S),type:"number",min:"0",max:"1",step:"0.01",class:"inp"},null,512),[[Je,P(r).elasticity,void 0,{number:!0}]])]),x("label",R6,[x("span",null,R(C.$t("scene.friction")),1),me(x("input",{"onUpdate:modelValue":T[32]||(T[32]=S=>P(r).friction=S),type:"number",min:"0",max:"1",step:"0.01",class:"inp"},null,512),[[Je,P(r).friction,void 0,{number:!0}]])])])):Ce("",!0),x("div",F6,[x("label",L6,[me(x("input",{"onUpdate:modelValue":T[33]||(T[33]=S=>P(r).followPath=S),type:"checkbox"},null,512),[[Ct,P(r).followPath]]),bt(R(C.$t("scene.followPath")),1)]),P(r).followPath?(Q(),te(_e,{key:0},[x("label",D6,[x("span",null,R(C.$t("scene.targetPath")),1),me(x("select",{"onUpdate:modelValue":T[34]||(T[34]=S=>P(r).followPathId=S),class:"inp"},[x("option",O6,R(C.$t("scene.notSelected")),1),(Q(!0),te(_e,null,Pt(P(e).paths,S=>(Q(),te("option",{key:S.id,value:S.id},R(S.name),9,N6))),128))],512),[[St,P(r).followPathId,void 0,{number:!0}]])]),x("div",$6,[x("label",B6,[x("span",null,R(C.$t("scene.moveDuration")),1),me(x("input",{"onUpdate:modelValue":T[35]||(T[35]=S=>P(r).followDuration=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(r).followDuration,void 0,{number:!0}]])]),x("label",U6,[x("span",null,R(C.$t("appearance.curveMode")),1),me(x("select",{"onUpdate:modelValue":T[36]||(T[36]=S=>P(r).followCurveMode=S),class:"inp"},[x("option",V6,R(C.$t("common.followExport")),1),x("option",X6,R(C.$t("common.linear")),1),x("option",Y6,R(C.$t("common.bezier")),1)],512),[[St,P(r).followCurveMode]])])]),x("label",z6,[me(x("input",{"onUpdate:modelValue":T[37]||(T[37]=S=>P(r).followPathRotation=S),type:"checkbox"},null,512),[[Ct,P(r).followPathRotation]]),bt(R(C.$t("scene.followDirection")),1)]),x("div",j6,[bt(R(C.$t("scene.moveProgressCurve"))+" ",1),x("small",null,R(C.$t("scene.moveProgressHelp")),1)]),Ae(ys,{"model-value":P(r).followCurve||P(b),"default-value":P(b),mode:P(t)(P(r).followCurveMode),"onUpdate:modelValue":T[38]||(T[38]=S=>P(r).followCurve=S)},null,8,["model-value","default-value","mode"])],64)):Ce("",!0)])],64)):P(o)?(Q(),te(_e,{key:2},[x("div",H6,R(C.$t("scene.pathTitle")),1),x("label",G6,[x("span",null,R(C.$t("scene.pathName")),1),me(x("input",{"onUpdate:modelValue":T[39]||(T[39]=S=>P(o).name=S),class:"inp"},null,512),[[Je,P(o).name]])]),x("div",W6,[x("label",q6,[x("span",null,R(C.$t("scene.xPosition")),1),me(x("input",{"onUpdate:modelValue":T[40]||(T[40]=S=>P(o).x=S),type:"number",class:"inp"},null,512),[[Je,P(o).x,void 0,{number:!0}]])]),x("label",K6,[x("span",null,R(C.$t("scene.yPosition")),1),me(x("input",{"onUpdate:modelValue":T[41]||(T[41]=S=>P(o).y=S),type:"number",class:"inp"},null,512),[[Je,P(o).y,void 0,{number:!0}]])])]),Ae(Ue,{label:C.$t("scene.rotation"),min:-360,max:360,step:1,modelValue:P(o).rotation,"onUpdate:modelValue":T[42]||(T[42]=S=>P(o).rotation=S)},null,8,["label","modelValue"]),x("div",J6,[x("label",Z6,[x("span",null,R(C.$t("scene.scaleXShort")),1),me(x("input",{"onUpdate:modelValue":T[43]||(T[43]=S=>P(o).scaleX=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(o).scaleX,void 0,{number:!0}]])]),x("label",Q6,[x("span",null,R(C.$t("scene.scaleYShort")),1),me(x("input",{"onUpdate:modelValue":T[44]||(T[44]=S=>P(o).scaleY=S),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(o).scaleY,void 0,{number:!0}]])])]),x("label",ej,[x("span",null,R(C.$t("scene.closedPath")),1),me(x("input",{"onUpdate:modelValue":T[45]||(T[45]=S=>P(o).closed=S),type:"checkbox"},null,512),[[Ct,P(o).closed]])]),x("label",tj,[x("span",null,R(C.$t("scene.pathColor")),1),me(x("input",{"onUpdate:modelValue":T[46]||(T[46]=S=>P(o).color=S),type:"color",class:"path-color"},null,512),[[Je,P(o).color]])]),x("div",ij,[x("span",null,R(C.$t("scene.pathHelp")),1),x("ul",null,[x("li",null,R(C.$t("scene.pathHelpItems.0")),1),x("li",null,R(C.$t("scene.pathHelpItems.1")),1),x("li",null,R(C.$t("scene.pathHelpItems.2")),1),x("li",null,R(C.$t("scene.pathHelpItems.3")),1),x("li",null,R(C.$t("scene.pathHelpItems.4")),1),x("li",null,R(C.$t("scene.pathHelpItems.5")),1),x("li",null,R(C.$t("scene.pathHelpItems.6")),1),x("li",null,R(C.$t("scene.pathHelpItems.7")),1),x("li",null,R(C.$t("scene.pathHelpItems.8")),1),x("li",null,R(C.$t("scene.pathHelpItems.9")),1)])]),x("label",nj,[x("span",null,R(C.$t("scene.applyPresetShape")),1),me(x("select",{"onUpdate:modelValue":T[47]||(T[47]=S=>P(o).preset=S),class:"inp"},[x("option",sj,R(C.$t("scene.choosePreset")),1),x("option",rj,R(C.$t("scene.circle")),1),x("option",oj,R(C.$t("scene.square")),1),x("option",aj,R(C.$t("scene.polygon")),1),x("option",lj,R(C.$t("scene.star")),1)],512),[[St,P(o).preset]])]),x("button",{class:"path-action primary",onClick:T[48]||(T[48]=(...S)=>P(g)&&P(g)(...S))},R(C.$t("scene.applyPreset")),1),x("button",{class:"path-action",onClick:T[49]||(T[49]=(...S)=>P(v)&&P(v)(...S))},R(C.$t("scene.clearAnchors")),1)],64)):P(a)?(Q(),It(hz,{key:3,"spine-object":P(a)},null,8,["spine-object"])):(Q(),te("div",cj,R(C.$t("scene.panelHint")),1))],512),[[Fi,!P(l).scene]])]))}}),uj=li(dj,[["__scopeId","data-v-5573409f"]]),hj={class:"group"},fj={class:"caret"},pj=["title"],mj={class:"group-body"},gj={class:"segs"},vj={class:"segs stream-behavior-segs"},bj={key:2,class:"stream-loop-options"},yj={class:"loop-section-row"},xj={class:"switch-row"},wj=["checked"],Sj={key:0,class:"loop-duration-control"},Cj={class:"switch-row loop-duration-toggle"},Aj=["checked"],Tj={class:"loop-section-duration"},Ej=["value","aria-label"],_j={key:1},Mj={key:2,class:"loop-auto-duration"},Pj={class:"loop-section-row"},Ij={class:"switch-row"},kj=["checked"],Rj={key:0,class:"loop-duration-control"},Fj={class:"switch-row loop-duration-toggle"},Lj=["checked"],Dj={class:"loop-section-duration"},Oj=["value","aria-label"],Nj={key:1},$j={key:2,class:"loop-auto-duration"},Bj={key:3,class:"modifier-hint stream-loop-hint"},Uj={class:"group"},Vj={class:"caret"},Xj=["title"],Yj={class:"group-body"},zj={class:"row"},jj={value:"point"},Hj={value:"circle"},Gj={value:"rect"},Wj={value:"cone"},qj={value:"path"},Kj={class:"row"},Jj={value:0},Zj=["value","disabled"],Qj={key:0,class:"row"},eH={value:"fixed"},tH={value:"random"},iH={class:"row"},nH={value:"fixed"},sH={value:"random"},rH={key:0,value:"radial"},oH={key:1,value:"path-normal"},aH={key:2,value:"path-tangent"},lH={key:6,class:"switch-row"},cH=qt({__name:"EmissionSection",setup(n){const{store:e,sys:t,automaticLoopDuration:i,loopDurationFrames:s,collapsed:r,toggle:o,setEmitMode:a,setLoopDurationFrames:c,setStreamBehavior:l,setLoopSection:d,setLoopSectionDuration:u,setLoopCustomDuration:h,resetModule:f,select:p,onShapeChange:m,onSpawnPathChange:g}=oo();return(v,y)=>(Q(),te(_e,null,[x("div",hj,[x("div",{class:"group-head",onClick:y[1]||(y[1]=b=>P(o)("emitMode"))},[x("span",fj,R(P(r).emitMode?"▸":"▾"),1),x("span",null,R(v.$t("emission.title")),1),x("button",{class:"group-reset",title:v.$t("emission.reset"),onClick:y[0]||(y[0]=tt(b=>P(f)("emitMode"),["stop"]))},R(v.$t("common.reset")),9,pj)]),me(x("div",mj,[x("div",gj,[x("button",{class:Ie(["seg",{on:P(t).config.mode==="stream"}]),onClick:y[2]||(y[2]=b=>P(a)("stream"))},R(v.$t("emission.stream")),3),x("button",{class:Ie(["seg",{on:P(t).config.mode==="burst"}]),onClick:y[3]||(y[3]=b=>P(a)("burst"))},R(v.$t("emission.burst")),3)]),P(t).config.mode==="stream"?(Q(),te(_e,{key:0},[x("div",vj,[x("button",{class:Ie(["seg",{on:P(t).config.streamBehavior==="normal"}]),onClick:y[4]||(y[4]=b=>P(l)("normal"))},R(v.$t("emission.normalStream")),3),x("button",{class:Ie(["seg",{on:P(t).config.streamBehavior==="loop"}]),onClick:y[5]||(y[5]=b=>P(l)("loop"))},R(v.$t("emission.loopStream")),3)]),Ae(Ue,{label:v.$t("emission.rate"),min:1,max:300,step:1,modelValue:P(t).config.rate,"onUpdate:modelValue":y[6]||(y[6]=b=>P(t).config.rate=b)},null,8,["label","modelValue"]),P(t).config.streamBehavior==="normal"?(Q(),It(Ue,{key:0,label:v.$t("emission.duration"),min:1/30,max:60,step:1/30,modelValue:P(t).config.duration,"onUpdate:modelValue":y[7]||(y[7]=b=>P(t).config.duration=b)},null,8,["label","modelValue"])):(Q(),It(Ue,{key:1,label:v.$t("emission.loopDuration"),min:1,max:1800,step:1,"model-value":P(s),"onUpdate:modelValue":P(c)},null,8,["label","model-value","onUpdate:modelValue"])),P(t).config.streamBehavior==="loop"?(Q(),te("div",bj,[x("div",yj,[x("label",xj,[x("input",{type:"checkbox",checked:P(t).config.generateLoopStartAnimation,onChange:y[8]||(y[8]=b=>P(d)("start",b))},null,40,wj),y[36]||(y[36]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(v.$t("emission.generateStart")),1)]),P(t).config.generateLoopStartAnimation?(Q(),te("div",Sj,[x("label",Cj,[x("input",{type:"checkbox",checked:P(t).config.loopStartUseCustomDuration,onChange:y[9]||(y[9]=b=>P(h)("start",b))},null,40,Aj),y[37]||(y[37]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(v.$t("emission.customDuration")),1)]),x("label",Tj,[P(t).config.loopStartUseCustomDuration?(Q(),te("input",{key:0,value:P(t).config.loopStartDurationFrames,type:"number",min:"1",max:"1800",step:"1","aria-label":v.$t("emission.startLoopDuration"),onChange:y[10]||(y[10]=b=>P(u)("start",b))},null,40,Ej)):Ce("",!0),P(t).config.loopStartUseCustomDuration?(Q(),te("span",_j,"f")):(Q(),te("span",Mj,R(v.$t("emission.auto",{frames:P(i)})),1))])])):Ce("",!0)]),x("div",Pj,[x("label",Ij,[x("input",{type:"checkbox",checked:P(t).config.generateLoopEndAnimation,onChange:y[11]||(y[11]=b=>P(d)("end",b))},null,40,kj),y[38]||(y[38]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(v.$t("emission.generateEnd")),1)]),P(t).config.generateLoopEndAnimation?(Q(),te("div",Rj,[x("label",Fj,[x("input",{type:"checkbox",checked:P(t).config.loopEndUseCustomDuration,onChange:y[12]||(y[12]=b=>P(h)("end",b))},null,40,Lj),y[39]||(y[39]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(v.$t("emission.customDuration")),1)]),x("label",Dj,[P(t).config.loopEndUseCustomDuration?(Q(),te("input",{key:0,value:P(t).config.loopEndDurationFrames,type:"number",min:"1",max:"1800",step:"1","aria-label":v.$t("emission.endLoopDuration"),onChange:y[13]||(y[13]=b=>P(u)("end",b))},null,40,Oj)):Ce("",!0),P(t).config.loopEndUseCustomDuration?(Q(),te("span",Nj,"f")):(Q(),te("span",$j,R(v.$t("emission.auto",{frames:P(i)})),1))])])):Ce("",!0)])])):Ce("",!0),P(t).config.streamBehavior==="loop"?(Q(),te("div",Bj,R(v.$t("emission.loopWarning")),1)):Ce("",!0)],64)):(Q(),It(Ue,{key:1,label:v.$t("emission.burstCount"),min:1,max:1e3,step:1,modelValue:P(t).config.burstCount,"onUpdate:modelValue":y[14]||(y[14]=b=>P(t).config.burstCount=b)},null,8,["label","modelValue"])),Ae(Ue,{label:v.$t("emission.delay"),min:0,max:5,step:.1,modelValue:P(t).config.delay,"onUpdate:modelValue":y[15]||(y[15]=b=>P(t).config.delay=b)},null,8,["label","modelValue"])],512),[[Fi,!P(r).emitMode]])]),x("div",Uj,[x("div",{class:"group-head",onClick:y[17]||(y[17]=b=>P(o)("shape"))},[x("span",Vj,R(P(r).shape?"▸":"▾"),1),x("span",null,R(v.$t("emission.shapeTitle")),1),x("button",{class:"group-reset",title:v.$t("emission.shapeReset"),onClick:y[16]||(y[16]=tt(b=>P(f)("shape"),["stop"]))},R(v.$t("common.reset")),9,Xj)]),me(x("div",Yj,[x("label",zj,[x("span",null,R(v.$t("emission.shape")),1),me(x("select",{"onUpdate:modelValue":y[18]||(y[18]=b=>P(t).config.shape=b),class:"inp",onChange:y[19]||(y[19]=(...b)=>P(m)&&P(m)(...b))},[x("option",jj,R(v.$t("emission.point")),1),x("option",Hj,R(v.$t("emission.circle")),1),x("option",Gj,R(v.$t("emission.rect")),1),x("option",Wj,R(v.$t("emission.cone")),1),x("option",qj,R(v.$t("emission.path")),1)],544),[[St,P(t).config.shape]])]),P(t).config.shape==="circle"||P(t).config.shape==="cone"?(Q(),te(_e,{key:0},[Ae(Ue,{label:P(t).config.shape==="cone"?v.$t("emission.innerDiameter"):v.$t("emission.innerRadius"),min:0,max:P(t).config.outerRadius,step:1,modelValue:P(t).config.innerRadius,"onUpdate:modelValue":y[20]||(y[20]=b=>P(t).config.innerRadius=b)},null,8,["label","max","modelValue"]),Ae(Ue,{label:P(t).config.shape==="cone"?v.$t("emission.outerDiameter"):v.$t("emission.outerRadius"),min:P(t).config.innerRadius,max:300,step:1,modelValue:P(t).config.outerRadius,"onUpdate:modelValue":y[21]||(y[21]=b=>P(t).config.outerRadius=b)},null,8,["label","min","modelValue"])],64)):Ce("",!0),P(t).config.shape==="cone"?(Q(),te(_e,{key:1},[Ae(Ue,{label:v.$t("emission.coneDirection"),min:-360,max:360,step:1,modelValue:P(t).config.coneDirection,"onUpdate:modelValue":y[22]||(y[22]=b=>P(t).config.coneDirection=b)},null,8,["label","modelValue"]),Ae(Ue,{label:v.$t("emission.coneAngle"),min:1,max:360,step:1,modelValue:P(t).config.coneAngle,"onUpdate:modelValue":y[23]||(y[23]=b=>P(t).config.coneAngle=b)},null,8,["label","modelValue"])],64)):P(t).config.shape==="rect"?(Q(),te(_e,{key:2},[Ae(Ue,{label:v.$t("emission.innerWidth"),min:0,max:P(t).config.outerRectW,step:1,modelValue:P(t).config.innerRectW,"onUpdate:modelValue":y[24]||(y[24]=b=>P(t).config.innerRectW=b)},null,8,["label","max","modelValue"]),Ae(Ue,{label:v.$t("emission.innerHeight"),min:0,max:P(t).config.outerRectH,step:1,modelValue:P(t).config.innerRectH,"onUpdate:modelValue":y[25]||(y[25]=b=>P(t).config.innerRectH=b)},null,8,["label","max","modelValue"]),Ae(Ue,{label:v.$t("emission.outerWidth"),min:P(t).config.innerRectW,max:400,step:1,modelValue:P(t).config.outerRectW,"onUpdate:modelValue":y[26]||(y[26]=b=>P(t).config.outerRectW=b)},null,8,["label","min","modelValue"]),Ae(Ue,{label:v.$t("emission.outerHeight"),min:P(t).config.innerRectH,max:400,step:1,modelValue:P(t).config.outerRectH,"onUpdate:modelValue":y[27]||(y[27]=b=>P(t).config.outerRectH=b)},null,8,["label","min","modelValue"])],64)):P(t).config.shape==="path"?(Q(),te(_e,{key:3},[x("label",Kj,[x("span",null,R(v.$t("emission.selectPath")),1),me(x("select",{"onUpdate:modelValue":y[28]||(y[28]=b=>P(t).config.spawnPathId=b),class:"inp",onChange:y[29]||(y[29]=(...b)=>P(g)&&P(g)(...b))},[x("option",Jj,R(v.$t("emission.noPath")),1),(Q(!0),te(_e,null,Pt(P(e).paths,b=>(Q(),te("option",{key:b.id,value:b.id,disabled:!b.enabled},R(b.name),9,Zj))),128))],544),[[St,P(t).config.spawnPathId,void 0,{number:!0}]])]),P(t).config.spawnPathId>0?(Q(),te("label",Qj,[x("span",null,R(v.$t("emission.birthDistribution")),1),me(x("select",{"onUpdate:modelValue":y[30]||(y[30]=b=>P(t).config.spawnPathDistribution=b),class:"inp"},[x("option",eH,R(v.$t("emission.evenDistribution")),1),x("option",tH,R(v.$t("emission.randomDistribution")),1)],512),[[St,P(t).config.spawnPathDistribution]])])):Ce("",!0)],64)):Ce("",!0),y[41]||(y[41]=x("div",{class:"divider"},null,-1)),x("label",iH,[x("span",null,R(v.$t("emission.emissionAngle")),1),me(x("select",{"onUpdate:modelValue":y[31]||(y[31]=b=>P(t).config.emissionAngleMode=b),class:"inp"},[x("option",nH,R(v.$t("common.fixed")),1),x("option",sH,R(v.$t("common.random")),1),P(t).config.shape==="circle"||P(t).config.shape==="rect"||P(t).config.shape==="cone"?(Q(),te("option",rH,R(v.$t("emission.radial")),1)):Ce("",!0),P(t).config.shape==="path"&&P(t).config.spawnPathId>0?(Q(),te("option",oH,R(v.$t("emission.pathNormal")),1)):Ce("",!0),P(t).config.shape==="path"&&P(t).config.spawnPathId>0?(Q(),te("option",aH,R(v.$t("emission.pathTangent")),1)):Ce("",!0)],512),[[St,P(t).config.emissionAngleMode]])]),P(t).config.emissionAngleMode==="fixed"?(Q(),It(Ue,{key:4,label:v.$t("emission.fixedAngle"),min:-360,max:360,step:1,modelValue:P(t).config.direction,"onUpdate:modelValue":y[32]||(y[32]=b=>P(t).config.direction=b)},null,8,["label","modelValue"])):P(t).config.emissionAngleMode==="random"?(Q(),te(_e,{key:5},[Ae(Ue,{label:v.$t("emission.baseAngle"),min:-360,max:360,step:1,modelValue:P(t).config.direction,"onUpdate:modelValue":y[33]||(y[33]=b=>P(t).config.direction=b)},null,8,["label","modelValue"]),Ae(Ue,{label:v.$t("emission.randomRange"),min:0,max:360,step:1,modelValue:P(t).config.spread,"onUpdate:modelValue":y[34]||(y[34]=b=>P(t).config.spread=b)},null,8,["label","modelValue"])],64)):Ce("",!0),P(t).config.shape!=="point"?(Q(),te("label",lH,[me(x("input",{type:"checkbox","onUpdate:modelValue":y[35]||(y[35]=b=>P(t).config.showShape=b)},null,512),[[Ct,P(t).config.showShape]]),y[40]||(y[40]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(v.$t("emission.showShape")),1)])):Ce("",!0)],512),[[Fi,!P(r).shape]])])],64))}}),dH=li(cH,[["__scopeId","data-v-dec7323c"]]),uH={class:"pac"},hH={class:"pac-head"},fH={class:"pac-label"},pH={key:0,class:"pac-modes"},mH=["onClick"],gH={class:"pac-range"},vH={class:"pac-curve"},bH={class:"pac-axis"},yH=qt({__name:"ParticleAttributeControl",props:{label:{},mode:{},valueMin:{},valueMax:{},curve:{},defaultCurve:{default:()=>[{x:0,y:0},{x:1,y:1}]},min:{},max:{},step:{default:1},allowDirection:{type:Boolean,default:!1},allowCurve:{type:Boolean,default:!0},showModes:{type:Boolean,default:!0},curveLabel:{default:""}},emits:["update:mode","update:valueMin","update:valueMax","update:curve"],setup(n){const e=n,{t}=fn(),i=Fe(()=>{const s=[{label:t("common.fixed"),value:"fixed"},{label:t("common.random"),value:"random"}];return e.allowCurve&&s.push({label:t("common.curve"),value:"curve"}),e.allowDirection&&s.push({label:t("attributeControl.direction"),value:"direction"}),s});return(s,r)=>(Q(),te("div",uH,[x("div",hH,[x("span",fH,R(n.label),1),n.showModes?(Q(),te("div",pH,[(Q(!0),te(_e,null,Pt(i.value,o=>(Q(),te("button",{key:o.value,class:Ie(["pac-mode",{on:n.mode===o.value}]),onClick:a=>s.$emit("update:mode",o.value)},R(o.label),11,mH))),128))])):Ce("",!0)]),n.mode==="fixed"||n.mode==="direction"?(Q(),It(Ue,{key:0,label:n.mode==="direction"?s.$t("attributeControl.angleOffset"):s.$t("attributeControl.value"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMin,"onUpdate:modelValue":r[0]||(r[0]=o=>s.$emit("update:valueMin",o))},null,8,["label","min","max","step","model-value"])):n.mode==="random"?(Q(),te(_e,{key:1},[Ae(Ue,{label:s.$t("attributeControl.lower"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMin,"onUpdate:modelValue":r[1]||(r[1]=o=>s.$emit("update:valueMin",o))},null,8,["label","min","max","step","model-value"]),Ae(Ue,{label:s.$t("attributeControl.upper"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMax,"onUpdate:modelValue":r[2]||(r[2]=o=>s.$emit("update:valueMax",o))},null,8,["label","min","max","step","model-value"])],64)):(Q(),te(_e,{key:2},[x("div",gH,[Ae(Ue,{label:s.$t("attributeControl.rangeLower"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMin,"onUpdate:modelValue":r[3]||(r[3]=o=>s.$emit("update:valueMin",o))},null,8,["label","min","max","step","model-value"]),Ae(Ue,{label:s.$t("attributeControl.rangeUpper"),min:n.min,max:n.max,step:n.step,"model-value":n.valueMax,"onUpdate:modelValue":r[4]||(r[4]=o=>s.$emit("update:valueMax",o))},null,8,["label","min","max","step","model-value"])]),x("div",vH,[Ae(ys,{"model-value":n.curve,"default-value":n.defaultCurve,"onUpdate:modelValue":r[5]||(r[5]=o=>s.$emit("update:curve",o))},null,8,["model-value","default-value"]),x("div",bH,[r[6]||(r[6]=x("span",null,"0",-1)),x("span",null,R(n.curveLabel||s.$t("attributeControl.curveInput")),1),r[7]||(r[7]=x("span",null,"1",-1))])])],64))]))}}),Us=li(yH,[["__scopeId","data-v-a3a8dde3"]]),xH={class:"group"},wH={class:"caret"},SH=["title"],CH={class:"group-body attr-body"},AH={class:"attr-section-title"},TH={class:"attr-axis-head"},EH={class:"axis-modes"},_H={class:"attr-section-title life-title"},MH={class:"life-item"},PH={class:"switch-row"},IH={class:"life-item"},kH={class:"switch-row"},RH={class:"axis-modes life-axis"},FH={class:"life-item"},LH={class:"switch-row"},DH=qt({__name:"ParticleAttributesSection",setup(n){const{sys:e,collapsed:t,toggle:i,resetModule:s,setSpeedOverLifeMode:r,prepareScaleOverLifeCurve:o,setScaleOverLifeMode:a,LINEAR_CURVE:c,FLAT_CURVE:l}=oo();return(d,u)=>(Q(),te("div",xH,[x("div",{class:"group-head",onClick:u[1]||(u[1]=h=>P(i)("attr"))},[x("span",wH,R(P(t).attr?"▸":"▾"),1),x("span",null,R(d.$t("attributes.title")),1),x("button",{class:"group-reset",title:d.$t("attributes.reset"),onClick:u[0]||(u[0]=tt(h=>P(s)("attr"),["stop"]))},R(d.$t("common.reset")),9,SH)]),me(x("div",CH,[x("div",AH,R(d.$t("attributes.initialParams")),1),Ae(Us,{label:d.$t("attributes.initialLife"),"allow-curve":!1,mode:P(e).config.lifeMode,"onUpdate:mode":u[2]||(u[2]=h=>P(e).config.lifeMode=h),"value-min":P(e).config.lifeMin,"onUpdate:valueMin":u[3]||(u[3]=h=>P(e).config.lifeMin=h),"value-max":P(e).config.lifeMax,"onUpdate:valueMax":u[4]||(u[4]=h=>P(e).config.lifeMax=h),curve:P(e).config.lifeCurve,"onUpdate:curve":u[5]||(u[5]=h=>P(e).config.lifeCurve=h),min:.1,max:10,step:.1,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"]),Ae(Us,{label:d.$t("attributes.initialSpeed"),"allow-curve":!1,mode:P(e).config.speedMode,"onUpdate:mode":u[6]||(u[6]=h=>P(e).config.speedMode=h),"value-min":P(e).config.speedMin,"onUpdate:valueMin":u[7]||(u[7]=h=>P(e).config.speedMin=h),"value-max":P(e).config.speedMax,"onUpdate:valueMax":u[8]||(u[8]=h=>P(e).config.speedMax=h),curve:P(e).config.speedCurve,"onUpdate:curve":u[9]||(u[9]=h=>P(e).config.speedCurve=h),min:0,max:1e3,step:1,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"]),x("div",TH,[x("span",null,R(d.$t("attributes.initialScale")),1),x("div",EH,[x("button",{class:Ie(["axis-mode",{on:P(e).config.scaleAxisMode==="uniform"}]),onClick:u[10]||(u[10]=h=>P(e).config.scaleAxisMode="uniform")},R(d.$t("attributes.uniform")),3),x("button",{class:Ie(["axis-mode",{on:P(e).config.scaleAxisMode==="separate"}]),onClick:u[11]||(u[11]=h=>P(e).config.scaleAxisMode="separate")},R(d.$t("attributes.separateXY")),3)])]),Ae(Us,{label:P(e).config.scaleAxisMode==="uniform"?d.$t("attributes.initialScale"):d.$t("attributes.scaleX"),"allow-curve":!1,mode:P(e).config.scaleMode,"onUpdate:mode":u[12]||(u[12]=h=>P(e).config.scaleMode=h),"value-min":P(e).config.scaleMin,"onUpdate:valueMin":u[13]||(u[13]=h=>P(e).config.scaleMin=h),"value-max":P(e).config.scaleMax,"onUpdate:valueMax":u[14]||(u[14]=h=>P(e).config.scaleMax=h),curve:P(e).config.scaleCurve,"onUpdate:curve":u[15]||(u[15]=h=>P(e).config.scaleCurve=h),min:0,max:5,step:.05,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"]),P(e).config.scaleAxisMode==="separate"?(Q(),It(Us,{key:0,label:d.$t("attributes.scaleY"),"show-modes":!1,"allow-curve":!1,mode:P(e).config.scaleMode,"onUpdate:mode":u[16]||(u[16]=h=>P(e).config.scaleMode=h),"value-min":P(e).config.scaleYMin,"onUpdate:valueMin":u[17]||(u[17]=h=>P(e).config.scaleYMin=h),"value-max":P(e).config.scaleYMax,"onUpdate:valueMax":u[18]||(u[18]=h=>P(e).config.scaleYMax=h),curve:P(e).config.scaleYCurve,"onUpdate:curve":u[19]||(u[19]=h=>P(e).config.scaleYCurve=h),min:0,max:5,step:.05,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"])):Ce("",!0),Ae(Us,{label:d.$t("attributes.initialRotation"),"allow-direction":"","allow-curve":!1,mode:P(e).config.initialRotationMode,"onUpdate:mode":u[20]||(u[20]=h=>P(e).config.initialRotationMode=h),"value-min":P(e).config.initialRotationMin,"onUpdate:valueMin":u[21]||(u[21]=h=>P(e).config.initialRotationMin=h),"value-max":P(e).config.initialRotationMax,"onUpdate:valueMax":u[22]||(u[22]=h=>P(e).config.initialRotationMax=h),curve:P(e).config.initialRotationCurve,"onUpdate:curve":u[23]||(u[23]=h=>P(e).config.initialRotationCurve=h),min:-360,max:360,step:1,"curve-label":d.$t("attributes.randomSample")},null,8,["label","mode","value-min","value-max","curve","curve-label"]),x("div",_H,R(d.$t("attributes.lifecycleTitle")),1),x("div",MH,[x("label",PH,[me(x("input",{type:"checkbox","onUpdate:modelValue":u[24]||(u[24]=h=>P(e).config.speedOverLifeEnabled=h)},null,512),[[Ct,P(e).config.speedOverLifeEnabled]]),u[44]||(u[44]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(d.$t("attributes.speedOverLife")),1)]),P(e).config.speedOverLifeEnabled?(Q(),It(Us,{key:0,label:d.$t("attributes.speedMultiplier"),mode:P(e).config.speedOverLifeMode,"onUpdate:mode":P(r),"value-min":P(e).config.speedOverLifeMin,"onUpdate:valueMin":u[25]||(u[25]=h=>P(e).config.speedOverLifeMin=h),"value-max":P(e).config.speedOverLifeMax,"onUpdate:valueMax":u[26]||(u[26]=h=>P(e).config.speedOverLifeMax=h),curve:P(e).config.speedOverLifeCurve,"onUpdate:curve":u[27]||(u[27]=h=>P(e).config.speedOverLifeCurve=h),"default-curve":P(l),min:0,max:3,step:.05,"curve-label":d.$t("attributes.lifeTo")},null,8,["label","mode","onUpdate:mode","value-min","value-max","curve","default-curve","curve-label"])):Ce("",!0)]),x("div",IH,[x("label",kH,[me(x("input",{type:"checkbox","onUpdate:modelValue":u[28]||(u[28]=h=>P(e).config.scaleOverLifeEnabled=h),onChange:u[29]||(u[29]=(...h)=>P(o)&&P(o)(...h))},null,544),[[Ct,P(e).config.scaleOverLifeEnabled]]),u[45]||(u[45]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(d.$t("attributes.scaleOverLife")),1)]),P(e).config.scaleOverLifeEnabled?(Q(),te(_e,{key:0},[x("div",RH,[x("button",{class:Ie(["axis-mode",{on:P(e).config.scaleOverLifeAxisMode==="uniform"}]),onClick:u[30]||(u[30]=h=>P(e).config.scaleOverLifeAxisMode="uniform")},R(d.$t("attributes.uniform")),3),x("button",{class:Ie(["axis-mode",{on:P(e).config.scaleOverLifeAxisMode==="separate"}]),onClick:u[31]||(u[31]=h=>P(e).config.scaleOverLifeAxisMode="separate")},R(d.$t("attributes.separateXY")),3)]),Ae(Us,{label:P(e).config.scaleOverLifeAxisMode==="uniform"?d.$t("attributes.scaleMultiplier"):d.$t("attributes.multiplierX"),mode:P(e).config.scaleOverLifeMode,"onUpdate:mode":P(a),"value-min":P(e).config.scaleOverLifeMin,"onUpdate:valueMin":u[32]||(u[32]=h=>P(e).config.scaleOverLifeMin=h),"value-max":P(e).config.scaleOverLifeMax,"onUpdate:valueMax":u[33]||(u[33]=h=>P(e).config.scaleOverLifeMax=h),curve:P(e).config.scaleOverLifeCurve,"onUpdate:curve":u[34]||(u[34]=h=>P(e).config.scaleOverLifeCurve=h),"default-curve":P(l),min:0,max:3,step:.05,"curve-label":d.$t("attributes.lifeTo")},null,8,["label","mode","onUpdate:mode","value-min","value-max","curve","default-curve","curve-label"]),P(e).config.scaleOverLifeAxisMode==="separate"?(Q(),It(Us,{key:0,label:d.$t("attributes.multiplierY"),"show-modes":!1,mode:P(e).config.scaleOverLifeMode,"onUpdate:mode":u[35]||(u[35]=h=>P(e).config.scaleOverLifeMode=h),"value-min":P(e).config.scaleYOverLifeMin,"onUpdate:valueMin":u[36]||(u[36]=h=>P(e).config.scaleYOverLifeMin=h),"value-max":P(e).config.scaleYOverLifeMax,"onUpdate:valueMax":u[37]||(u[37]=h=>P(e).config.scaleYOverLifeMax=h),curve:P(e).config.scaleYOverLifeCurve,"onUpdate:curve":u[38]||(u[38]=h=>P(e).config.scaleYOverLifeCurve=h),"default-curve":P(l),min:0,max:3,step:.05,"curve-label":d.$t("attributes.lifeTo")},null,8,["label","mode","value-min","value-max","curve","default-curve","curve-label"])):Ce("",!0)],64)):Ce("",!0)]),x("div",FH,[x("label",LH,[me(x("input",{type:"checkbox","onUpdate:modelValue":u[39]||(u[39]=h=>P(e).config.rotationOverLifeEnabled=h)},null,512),[[Ct,P(e).config.rotationOverLifeEnabled]]),u[46]||(u[46]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(d.$t("attributes.rotationOverLife")),1)]),P(e).config.rotationOverLifeEnabled?(Q(),It(Us,{key:0,label:d.$t("attributes.rotationSpeed"),mode:P(e).config.rotationOverLifeMode,"onUpdate:mode":u[40]||(u[40]=h=>P(e).config.rotationOverLifeMode=h),"value-min":P(e).config.rotationSpeedMin,"onUpdate:valueMin":u[41]||(u[41]=h=>P(e).config.rotationSpeedMin=h),"value-max":P(e).config.rotationSpeedMax,"onUpdate:valueMax":u[42]||(u[42]=h=>P(e).config.rotationSpeedMax=h),curve:P(e).config.rotationOverLifeCurve,"onUpdate:curve":u[43]||(u[43]=h=>P(e).config.rotationOverLifeCurve=h),"default-curve":P(c),min:-720,max:720,step:10,"curve-label":d.$t("attributes.lifeTo")},null,8,["label","mode","value-min","value-max","curve","default-curve","curve-label"])):Ce("",!0)])],512),[[Fi,!P(t).attr]])]))}}),OH=li(DH,[["__scopeId","data-v-3bbf0b5e"]]),NH={class:"gradient-editor"},$H=["title"],BH=["title","onClick","onDblclick","onPointerdown"],UH={key:0,class:"gradient-controls"},VH=["value","aria-label"],XH=["value","aria-label"],YH={class:"gradient-position"},zH=["value","aria-label"],jH=["title"],HH=["title","disabled"],GH={class:"gradient-hint"},WH=qt({__name:"ColorGradientEditor",props:{modelValue:{}},emits:["update:modelValue"],setup(n,{emit:e}){const t=n,i=e,s=$e(null),r=$e(0),o=Fe(()=>t.modelValue[r.value]||null),a=Fe(()=>[...t.modelValue].sort((E,_)=>E.position-_.position)),c=Fe(()=>{const E=a.value;return E.length?`linear-gradient(90deg, ${E.map(_=>`${_.color} ${l(_.position)*100}%`).join(", ")})`:"#ffffff"});ei(()=>t.modelValue.length,E=>{r.value>=E&&(r.value=Math.max(0,E-1))});function l(E){return Math.min(1,Math.max(0,Number(E)||0))}function d(){return t.modelValue.map(E=>({position:l(E.position),color:E.color}))}function u(E,_){const I=d();I[E]&&(I[E]={...I[E],..._},i("update:modelValue",I))}function h(E){u(r.value,{color:E.target.value})}function f(E){var M;const _=E.target,I=S(_.value,((M=o.value)==null?void 0:M.color)||"#ffffff");_.value=I,u(r.value,{color:I})}function p(E){const _=E.target;f(E),_.blur()}function m(E){const _=Number(E.target.value);Number.isFinite(_)&&u(r.value,{position:l(_/100)})}function g(E){const _=d();_.push({position:l(E),color:C(_,E)}),r.value=_.length-1,i("update:modelValue",_)}function v(E){if(!s.value)return;const _=s.value.getBoundingClientRect();g((E.clientX-_.left)/Math.max(1,_.width))}function y(){const E=a.value;let _=.5;if(E.length>1){let I=-1;for(let M=0;MI&&(I=k,_=(E[M].position+E[M+1].position)/2)}}g(_)}function b(E){if(t.modelValue.length<=2||E<0)return;const _=d().filter((I,M)=>M!==E);r.value=Math.min(E,_.length-1),i("update:modelValue",_)}function w(E,_){if(!s.value)return;r.value=_;const I=k=>{const B=s.value.getBoundingClientRect();u(_,{position:l((k.clientX-B.left)/Math.max(1,B.width))})},M=()=>{window.removeEventListener("pointermove",I),window.removeEventListener("pointerup",M),window.removeEventListener("pointercancel",M)};window.addEventListener("pointermove",I),window.addEventListener("pointerup",M),window.addEventListener("pointercancel",M),E.preventDefault()}function C(E,_){const I=[...E].sort((M,k)=>M.position-k.position);if(!I.length)return"#ffffff";if(_<=I[0].position)return I[0].color;if(_>=I[I.length-1].position)return I[I.length-1].color;for(let M=0;MB.position)continue;const D=(_-k.position)/Math.max(1e-4,B.position-k.position);return T(k.color,B.color,D)}return I[I.length-1].color}function T(E,_,I){const M=G=>{const V=parseInt(G.replace("#","").padEnd(6,"0").slice(0,6),16);return[V>>16&255,V>>8&255,V&255]},k=M(E),B=M(_),D=G=>Math.round(k[G]+(B[G]-k[G])*I);return`#${[D(0),D(1),D(2)].map(G=>G.toString(16).padStart(2,"0")).join("")}`}function S(E,_){let I=E.trim().replace(/^#/,"");return/^[0-9a-f]{3}$/i.test(I)&&(I=I.split("").map(M=>M+M).join("")),/^[0-9a-f]{6}$/i.test(I)?`#${I.toLowerCase()}`:_}return(E,_)=>(Q(),te("div",NH,[x("div",{ref_key:"bar",ref:s,class:"gradient-bar",style:Vt({background:c.value}),title:E.$t("gradient.addTitle"),onDblclick:v},[(Q(!0),te(_e,null,Pt(n.modelValue,(I,M)=>(Q(),te("button",{key:M,type:"button",class:Ie(["gradient-stop",{selected:M===r.value}]),style:Vt({left:`${l(I.position)*100}%`,"--stop-color":I.color}),title:`${Math.round(l(I.position)*100)}% · ${I.color}`,onClick:tt(k=>r.value=M,["stop"]),onDblclick:tt(k=>b(M),["stop"]),onPointerdown:tt(k=>w(k,M),["stop"])},null,46,BH))),128))],44,$H),o.value?(Q(),te("div",UH,[x("input",{type:"color",class:"gradient-color",value:o.value.color,"aria-label":E.$t("gradient.color"),onInput:h},null,40,VH),x("input",{type:"text",class:"gradient-hex-input",value:o.value.color,"aria-label":E.$t("gradient.colorValue"),spellcheck:"false",onChange:f,onKeydown:Gr(p,["enter"])},null,40,XH),x("label",YH,[x("input",{type:"number",min:"0",max:"100",step:"1",value:Math.round(l(o.value.position)*100),"aria-label":E.$t("gradient.position"),onInput:m},null,40,zH),_[1]||(_[1]=x("span",null,"%",-1))]),x("button",{type:"button",class:"gradient-action",title:E.$t("gradient.addMiddle"),onClick:y},"+",8,jH),x("button",{type:"button",class:"gradient-action danger",title:E.$t("gradient.delete"),disabled:n.modelValue.length<=2,onClick:_[0]||(_[0]=I=>b(r.value))},"×",8,HH)])):Ce("",!0),x("div",GH,R(E.$t("gradient.hint")),1)]))}}),kT=li(WH,[["__scopeId","data-v-cb6cfaf8"]]),qH={class:"pivot-toolbar"},KH={class:"pivot-hint"},JH={class:"pivot-zoom"},ZH=["disabled","title"],QH=["disabled","title"],eG=["title"],tG=["title"],iG=["src","alt"],nG={key:2,class:"pivot-empty"},sG={class:"pivot-bottom"},rG={class:"pivot-card"},oG={class:"pivot-presets"},aG=["title","aria-label","onClick"],lG={class:"pivot-card"},cG={class:"pivot-card-head"},dG={class:"pivot-coords"},uG=["value"],hG=["value"],fG={class:"pivot-card-head pivot-rotate-head"},pG={class:"pivot-rotate-state"},mG={class:"pivot-rotate-body"},gG={class:"pivot-rotate-modes"},vG={class:"pivot-rotate-preview"},bG=["src","alt"],wp=1e3,yG=qt({__name:"PivotEditor",props:{previewUrl:{},anchorX:{},anchorY:{},large:{type:Boolean,default:!1}},emits:["update:anchorX","update:anchorY","fullscreen"],setup(n,{emit:e}){const t=n,i=e,{t:s}=fn(),r=Fe(()=>[{icon:"↖",label:s("pivot.topLeft"),x:0,y:0},{icon:"↑",label:s("pivot.top"),x:50,y:0},{icon:"↗",label:s("pivot.topRight"),x:100,y:0},{icon:"←",label:s("pivot.left"),x:0,y:50},{icon:"◯",label:s("pivot.center"),x:50,y:50},{icon:"→",label:s("pivot.right"),x:100,y:50},{icon:"↙",label:s("pivot.bottomLeft"),x:0,y:100},{icon:"↓",label:s("pivot.bottom"),x:50,y:100},{icon:"↘",label:s("pivot.bottomRight"),x:100,y:100}]),o=$e(null),a=$e(null),c=$e({w:0,h:0}),l=$e({w:1,h:1}),d=$e(100),u=$e({x:0,y:0}),h=$e(!1),f=$e("static");let p=null;const m=L=>Math.min(wp,Math.max(-wp,Number.isFinite(L)?L:0)),g=Fe(()=>m(t.anchorX*100).toFixed(1)),v=Fe(()=>m(t.anchorY*100).toFixed(1));function y(L,N){const F=l.value.w/Math.max(1,l.value.h);let $=L,X=$/F;return X>N&&(X=N,$=X*F),{w:Math.max(1,$),h:Math.max(1,X)}}const b=Fe(()=>{const L=t.large?26:12,N=Math.max(1,c.value.w-L*2),F=Math.max(1,c.value.h-L*2);return y(N,F)}),w=Fe(()=>({width:`${b.value.w}px`,height:`${b.value.h}px`,transform:`translate(${u.value.x}px, ${u.value.y}px) scale(${d.value/100})`})),C=Fe(()=>{const L=d.value/100;return{x:c.value.w/2+u.value.x+(m(t.anchorX*100)/100-.5)*b.value.w*L,y:c.value.h/2+u.value.y+(m(t.anchorY*100)/100-.5)*b.value.h*L}}),T=Fe(()=>{const L=t.large?128:72,N=y(L,L);return{width:`${N.w}px`,height:`${N.h}px`,transformOrigin:`${m(t.anchorX*100)}% ${m(t.anchorY*100)}%`}});function S(L,N){const F=wp/100;i("update:anchorX",Math.min(F,Math.max(-F,Number.isFinite(L)?L:0))),i("update:anchorY",Math.min(F,Math.max(-F,Number.isFinite(N)?N:0)))}function E(L){const N=a.value;if(!N)return;const F=N.getBoundingClientRect();F.width<=0||F.height<=0||S((L.clientX-F.left)/F.width,(L.clientY-F.top)/F.height)}function _(L){if(!t.previewUrl)return;if(L.button===2){I(L);return}if(L.button!==0)return;L.preventDefault(),E(L);const N=$=>E($),F=()=>{window.removeEventListener("pointermove",N),window.removeEventListener("pointerup",F),window.removeEventListener("pointercancel",F)};window.addEventListener("pointermove",N),window.addEventListener("pointerup",F),window.addEventListener("pointercancel",F)}function I(L){L.preventDefault(),h.value=!0;const N=L.clientX,F=L.clientY,$=u.value.x,X=u.value.y,z=J=>{u.value={x:$+J.clientX-N,y:X+J.clientY-F}},K=()=>{h.value=!1,window.removeEventListener("pointermove",z),window.removeEventListener("pointerup",K),window.removeEventListener("pointercancel",K)};window.addEventListener("pointermove",z),window.addEventListener("pointerup",K),window.addEventListener("pointercancel",K)}function M(L){const N=L.deltaY<0?1.12:.8928571428571428,F=Math.min(400,Math.max(100,Math.round(d.value*N)));if(F===d.value)return;const $=o.value;if(!$){d.value=F;return}const X=$.getBoundingClientRect(),z=L.clientX-X.left,K=L.clientY-X.top,J=F/d.value;u.value={x:u.value.x+(z-X.width/2-u.value.x)*(1-J),y:u.value.y+(K-X.height/2-u.value.y)*(1-J)},d.value=F}function k(L){const N=L.target;l.value={w:N.naturalWidth||1,h:N.naturalHeight||1}}function B(L){d.value=Math.min(400,Math.max(100,d.value+L))}function D(){S(.5,.5)}function G(L){S(L.x/100,L.y/100)}function V(L){return Math.abs(m(t.anchorX*100)-L.x)<.05&&Math.abs(m(t.anchorY*100)-L.y)<.05}function Y(L,N){const F=m(Number(N.target.value));i(L==="x"?"update:anchorX":"update:anchorY",F/100)}return ei(()=>t.previewUrl,()=>{l.value={w:1,h:1},u.value={x:0,y:0},d.value=100}),Sn(()=>{o.value&&(p=new ResizeObserver(L=>{var F;const N=(F=L[0])==null?void 0:F.contentRect;N&&(c.value={w:N.width,h:N.height})}),p.observe(o.value))}),eo(()=>{p==null||p.disconnect(),p=null}),(L,N)=>(Q(),te("div",{class:Ie(["pivot-editor",{"pivot-large":n.large}])},[x("div",qH,[x("div",KH,[N[9]||(N[9]=x("span",{class:"pivot-hint-icon"},"⊕",-1)),x("span",null,R(L.$t("pivot.title")),1)]),x("div",JH,[x("button",{type:"button",disabled:d.value<=100,title:L.$t("pivot.zoomOut"),onClick:N[0]||(N[0]=F=>B(-25))},"−",8,ZH),x("span",null,R(d.value)+"%",1),x("button",{type:"button",disabled:d.value>=400,title:L.$t("pivot.zoomIn"),onClick:N[1]||(N[1]=F=>B(25))},"+",8,QH)]),n.large?Ce("",!0):(Q(),te("button",{key:0,type:"button",class:"pivot-expand",title:L.$t("pivot.expand"),onClick:N[2]||(N[2]=F=>L.$emit("fullscreen"))},"⤢",8,eG))]),x("div",{ref_key:"stageRef",ref:o,class:Ie(["pivot-stage",{panning:h.value}]),title:L.$t("pivot.interaction"),onPointerdown:_,onWheel:tt(M,["prevent"]),onContextmenu:N[3]||(N[3]=tt(()=>{},["prevent"]))},[n.previewUrl?(Q(),te("div",{key:0,ref_key:"boxRef",ref:a,class:"pivot-box",style:Vt(w.value)},[x("img",{src:n.previewUrl,alt:L.$t("pivot.previewAlt"),draggable:"false",onLoad:k},null,40,iG)],4)):Ce("",!0),n.previewUrl?(Q(),te(_e,{key:1},[x("div",{class:"pivot-cross vertical",style:Vt({left:`${C.value.x}px`})},null,4),x("div",{class:"pivot-cross horizontal",style:Vt({top:`${C.value.y}px`})},null,4),x("div",{class:"pivot-marker",style:Vt({left:`${C.value.x}px`,top:`${C.value.y}px`})},null,4),x("div",{class:"pivot-badge",style:Vt({left:`${C.value.x}px`,top:`${C.value.y}px`})},"X: "+R(g.value)+"% | Y: "+R(v.value)+"%",5)],64)):(Q(),te("div",nG,R(L.$t("pivot.noImage")),1))],42,tG),x("div",sG,[x("div",rG,[x("div",oG,[(Q(!0),te(_e,null,Pt(r.value,F=>(Q(),te("button",{key:F.label,type:"button",class:Ie(["pivot-preset",{on:V(F)}]),title:`${F.label}(${F.x}%, ${F.y}%)`,"aria-label":F.label,onClick:$=>G(F)},R(F.icon),11,aG))),128))]),x("button",{type:"button",class:"pivot-reset",onClick:D},"↺ "+R(L.$t("pivot.resetCenter")),1)]),x("div",lG,[x("div",cG,[x("span",null,[N[10]||(N[10]=x("span",{class:"pivot-card-icon"},"◎",-1)),bt(" "+R(L.$t("pivot.coordinates")),1)])]),x("div",dG,[x("label",null,[N[11]||(N[11]=bt("X: ",-1)),x("input",{type:"number",min:"-1000",max:"1000",step:"0.1",value:g.value,onInput:N[4]||(N[4]=F=>Y("x",F))},null,40,uG),N[12]||(N[12]=x("span",null,"%",-1))]),x("label",null,[N[13]||(N[13]=bt("Y: ",-1)),x("input",{type:"number",min:"-1000",max:"1000",step:"0.1",value:v.value,onInput:N[5]||(N[5]=F=>Y("y",F))},null,40,hG),N[14]||(N[14]=x("span",null,"%",-1))])]),n.large?(Q(),te(_e,{key:0},[x("div",fG,[x("span",null,[N[15]||(N[15]=x("span",{class:"pivot-card-icon"},"✥",-1)),bt(" "+R(L.$t("pivot.rotationTest")),1)]),x("span",pG,R(f.value==="static"?L.$t("pivot.static"):f.value==="spin"?L.$t("pivot.spin"):L.$t("pivot.swing")),1)]),x("div",mG,[x("div",gG,[x("button",{type:"button",class:Ie({on:f.value==="static"}),onClick:N[6]||(N[6]=F=>f.value="static")},R(L.$t("pivot.static")),3),x("button",{type:"button",class:Ie({on:f.value==="spin"}),onClick:N[7]||(N[7]=F=>f.value="spin")},"↻ "+R(L.$t("pivot.spin")),3),x("button",{type:"button",class:Ie({on:f.value==="swing"}),onClick:N[8]||(N[8]=F=>f.value="swing")},"⇄ "+R(L.$t("pivot.swing")),3)]),x("div",vG,[n.previewUrl?(Q(),te("img",{key:0,src:n.previewUrl,alt:L.$t("pivot.rotationAlt"),draggable:"false",class:Ie(f.value),style:Vt(T.value)},null,14,bG)):Ce("",!0)])])],64)):Ce("",!0)])])],2))}}),Mx=li(yG,[["__scopeId","data-v-a5622844"]]),xG={class:"image-card"},wG={class:"imgrow"},SG=["title"],CG=["src","alt"],AG={key:1,viewBox:"0 0 24 24",width:"22",height:"22",fill:"none",stroke:"#8a93bb","stroke-width":"1.6"},TG={class:"img-fields"},EG={key:0,class:"row"},_G={class:"row"},MG=["placeholder"],PG={class:"img-actions"},IG=["title"],kG=["title","disabled"],RG={class:"thumb-note"},FG={key:0,class:"row"},LG={value:"fixed"},DG={value:"sequence"},OG={class:"row"},NG={value:"once-hide"},$G={value:"once-hold"},BG={value:"loop-forward"},UG={value:"loop-reverse"},VG={class:"row"},XG={class:"sequence-note"},YG={class:"resource-weight-row"},zG=["disabled","title"],jG={key:0,viewBox:"0 0 24 24","aria-hidden":"true"},HG={key:1,viewBox:"0 0 24 24","aria-hidden":"true"},GG={key:2,class:"pivot-toggle-row"},WG={class:"pivot-toggle-text"},qG={class:"pivot-toggle-title"},KG=["title"],JG=["title"],ZG=["aria-label"],QG={class:"pivot-modal-head"},eW={class:"pivot-modal-info"},tW={class:"pivot-modal-title"},iW={class:"pivot-modal-badge"},nW={class:"pivot-modal-desc"},sW=["title"],rW={class:"pivot-modal-hint"},oW={class:"pivot-modal-actions"},Px="SpineParticle.PivotPanels.v1",aW=qt({__name:"ImageResourceCard",props:{resource:{},resourceCount:{},defaultFile:{},namePlaceholder:{default:"particle"},showFolder:{type:Boolean,default:!0},supportsSequence:{type:Boolean,default:!1},pivotKey:{}},emits:["pick","pickSequence","reset","remove","updateWeight","toggleLock"],setup(n,{emit:e}){const t=n,i=e,{t:s}=fn(),r=Fe(()=>{var _,I;if(t.resource.imageMode==="sequence"){const M=t.resource.sequenceFrames||[];if(!M.length)return s("image.noSequence");const k=((_=M[0])==null?void 0:_.name)||s("image.firstFrame"),B=((I=M[M.length-1])==null?void 0:I.name)||k;return M.length===1?s("image.frameCountOne",{name:k}):s("image.frameCountMany",{count:M.length,first:k,last:B})}const E=t.resource.textureName||t.defaultFile.replace(/\.[^.]+$/,"");return E.includes(".")?E:`${E}.png`}),o=Fe(()=>{var E,_;return t.resource.imageMode==="sequence"?((_=(E=t.resource.sequenceFrames)==null?void 0:E[0])==null?void 0:_.previewUrl)||"":t.resource.previewUrl});function a(){try{const E=JSON.parse(sessionStorage.getItem(Px)||"{}");return E&&typeof E=="object"?E:{}}catch{return{}}}const c=a(),l=Fe(()=>t.pivotKey||`particle-image:${t.resource.id}`),d=Fe(()=>typeof t.resource.anchorX=="number"&&typeof t.resource.anchorY=="number"),u=Fe(()=>Math.abs((t.resource.anchorX??.5)-.5)<1e-4&&Math.abs((t.resource.anchorY??.5)-.5)<1e-4),h=typeof c[l.value]=="boolean",f=$e(h?c[l.value]:!u.value);ei(f,E=>{c[l.value]=E;try{sessionStorage.setItem(Px,JSON.stringify(c))}catch{}}),ei(l,E=>{f.value=typeof c[E]=="boolean"?c[E]:!u.value}),ei(()=>u.value,E=>{E||(f.value=!0)},{immediate:!0});const p=$e(!1),m=$e(.5),g=$e(.5),v=Fe(()=>{const E=((t.resource.anchorX??.5)*100).toFixed(1),_=((t.resource.anchorY??.5)*100).toFixed(1);return f.value?s("image.pivotOn",{x:E,y:_}):u.value?s("image.pivotOff"):s("image.pivotCustom",{x:E,y:_})});function y(){m.value=t.resource.anchorX??.5,g.value=t.resource.anchorY??.5,p.value=!0}function b(){f.value||(t.resource.anchorX=.5,t.resource.anchorY=.5,p.value=!1)}function w(E){E&&(t.resource.anchorX=m.value,t.resource.anchorY=g.value),p.value=!1}function C(E){E.key==="Escape"&&p.value&&w(!1)}Sn(()=>window.addEventListener("keydown",C)),eo(()=>window.removeEventListener("keydown",C));const T=Fe(()=>{var M,k;const E=t.resource.sequenceFrames||[];if(!E.length)return s("image.noSequence");const _=((M=E[0])==null?void 0:M.name)||s("image.firstImage"),I=((k=E[E.length-1])==null?void 0:k.name)||s("image.lastImage");return s("image.sequenceSelected",{count:E.length,first:_,last:I})});function S(){t.supportsSequence&&t.resource.imageMode==="sequence"?i("pickSequence",t.resource.id):i("pick",t.resource.id)}return(E,_)=>(Q(),te(_e,null,[x("div",xG,[x("div",wG,[x("button",{class:"img-thumb",title:n.supportsSequence&&n.resource.imageMode==="sequence"?E.$t("image.chooseSequence"):E.$t("image.chooseLocal"),onClick:S},[o.value?(Q(),te("img",{key:0,src:o.value,alt:n.resource.textureName},null,8,CG)):(Q(),te("svg",AG,[..._[19]||(_[19]=[x("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"},null,-1),x("circle",{cx:"8.5",cy:"8.5",r:"1.6"},null,-1),x("path",{d:"M21 15l-5-5-9 9"},null,-1)])]))],8,SG),x("div",TG,[n.showFolder?(Q(),te("label",EG,[x("span",null,R(E.$t("image.subfolder")),1),me(x("input",{"onUpdate:modelValue":_[0]||(_[0]=I=>n.resource.textureFolder=I),type:"text",class:"inp",placeholder:"subfolder/"},null,512),[[Je,n.resource.textureFolder]])])):Ce("",!0),x("label",_G,[x("span",null,R(E.$t("image.name")),1),me(x("input",{"onUpdate:modelValue":_[1]||(_[1]=I=>n.resource.textureName=I),type:"text",class:"inp",placeholder:n.namePlaceholder},null,8,MG),[[Je,n.resource.textureName]])])]),x("div",PG,[x("button",{class:"mini-btn2",title:E.$t("image.restore",{name:n.defaultFile}),onClick:_[2]||(_[2]=I=>E.$emit("reset",n.resource.id))},"⟳",8,IG),x("button",{class:"mini-btn2",title:E.$t("image.deleteResource"),disabled:n.resourceCount===1,onClick:_[3]||(_[3]=I=>E.$emit("remove",n.resource.id))},"🗑",8,kG)])]),x("div",RG,R(r.value),1),n.supportsSequence?(Q(),te("label",FG,[x("span",null,R(E.$t("image.imageMode")),1),me(x("select",{"onUpdate:modelValue":_[4]||(_[4]=I=>n.resource.imageMode=I),class:"inp"},[x("option",LG,R(E.$t("image.fixed")),1),x("option",DG,R(E.$t("image.sequence")),1)],512),[[St,n.resource.imageMode]])])):Ce("",!0),n.supportsSequence&&n.resource.imageMode==="sequence"?(Q(),te(_e,{key:1},[x("label",OG,[x("span",null,R(E.$t("image.playbackMode")),1),me(x("select",{"onUpdate:modelValue":_[5]||(_[5]=I=>n.resource.sequencePlayback=I),class:"inp"},[x("option",NG,R(E.$t("image.onceHide")),1),x("option",$G,R(E.$t("image.onceHold")),1),x("option",BG,R(E.$t("image.loopForward")),1),x("option",UG,R(E.$t("image.loopReverse")),1)],512),[[St,n.resource.sequencePlayback]])]),x("label",VG,[x("span",null,R(E.$t("image.playbackFps")),1),me(x("input",{"onUpdate:modelValue":_[6]||(_[6]=I=>n.resource.sequenceFps=I),type:"number",min:"1",max:"120",step:"1",class:"inp"},null,512),[[Je,n.resource.sequenceFps,void 0,{number:!0}]])]),x("button",{class:"sequence-pick",onClick:_[7]||(_[7]=I=>E.$emit("pickSequence",n.resource.id))},R(E.$t("image.chooseSequenceMulti")),1),x("div",XG,R(T.value),1)],64)):Ce("",!0),x("div",YG,[Ae(Ue,{class:"resource-weight-control",label:E.$t("image.weight"),min:0,max:100,step:1,"model-value":n.resource.weight,disabled:n.resource.locked||n.resourceCount===1,"onUpdate:modelValue":_[8]||(_[8]=I=>E.$emit("updateWeight",n.resource.id,I))},null,8,["label","model-value","disabled"]),x("button",{class:Ie(["weight-lock",{on:n.resource.locked}]),disabled:n.resourceCount===1,title:n.resource.locked?E.$t("image.unlockWeight"):E.$t("image.lockWeight"),onClick:_[9]||(_[9]=I=>E.$emit("toggleLock",n.resource.id))},[n.resource.locked?(Q(),te("svg",jG,[..._[20]||(_[20]=[x("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"},null,-1),x("path",{d:"M8 10V7a4 4 0 0 1 8 0v3"},null,-1)])])):(Q(),te("svg",HG,[..._[21]||(_[21]=[x("rect",{x:"5",y:"10",width:"14",height:"10",rx:"2"},null,-1),x("path",{d:"M16 10V7a4 4 0 0 0-7.5-2"},null,-1)])]))],10,zG)]),i_(E.$slots,"default",{},void 0),d.value?(Q(),te("div",GG,[_[23]||(_[23]=x("div",{class:"pivot-toggle-icon"},"◎",-1)),x("div",WG,[x("div",qG,R(E.$t("image.pivot")),1),x("div",{class:"pivot-toggle-sub",title:v.value},R(v.value),9,KG)]),x("label",{class:"pivot-switch",title:f.value?E.$t("image.collapsePivot"):E.$t("image.expandPivot")},[me(x("input",{"onUpdate:modelValue":_[10]||(_[10]=I=>f.value=I),type:"checkbox",onChange:b},null,544),[[Ct,f.value]]),_[22]||(_[22]=x("span",{class:"pivot-switch-ui"},null,-1))],8,JG)])):Ce("",!0),d.value&&f.value?(Q(),It(Mx,{key:3,"preview-url":o.value,"anchor-x":n.resource.anchorX??.5,"anchor-y":n.resource.anchorY??.5,"onUpdate:anchorX":_[11]||(_[11]=I=>n.resource.anchorX=I),"onUpdate:anchorY":_[12]||(_[12]=I=>n.resource.anchorY=I),onFullscreen:y},null,8,["preview-url","anchor-x","anchor-y"])):Ce("",!0)]),(Q(),It(u1,{to:"body"},[p.value?(Q(),te("div",{key:0,class:"pivot-modal-backdrop",onPointerdown:_[18]||(_[18]=tt(I=>w(!1),["self"]))},[x("div",{class:"pivot-modal",role:"dialog","aria-modal":"true","aria-label":E.$t("image.pivotModal")},[x("div",QG,[_[24]||(_[24]=x("div",{class:"pivot-modal-icon"},"◎",-1)),x("div",eW,[x("div",tW,[bt(R(E.$t("image.pivotModal"))+" ",1),x("span",iW,R(n.resource.textureName||n.defaultFile),1)]),x("div",nW,R(E.$t("image.pivotModalDesc")),1)]),x("button",{type:"button",class:"pivot-modal-close",title:E.$t("common.close"),onClick:_[13]||(_[13]=I=>w(!1))},"✕",8,sW)]),x("div",rW,R(E.$t("image.pivotZoomHint")),1),Ae(Mx,{large:"","preview-url":o.value,"anchor-x":m.value,"anchor-y":g.value,"onUpdate:anchorX":_[14]||(_[14]=I=>m.value=I),"onUpdate:anchorY":_[15]||(_[15]=I=>g.value=I)},null,8,["preview-url","anchor-x","anchor-y"]),x("div",oW,[x("button",{type:"button",class:"pivot-modal-cancel",onClick:_[16]||(_[16]=I=>w(!1))},R(E.$t("common.cancel")),1),x("button",{type:"button",class:"pivot-modal-confirm",onClick:_[17]||(_[17]=I=>w(!0))},R(E.$t("image.confirmPivot")),1)])],8,ZG)],32)):Ce("",!0)]))],64))}}),RT=li(aW,[["__scopeId","data-v-89f1e08d"]]),lW={class:"group"},cW={class:"caret"},dW=["title"],uW={class:"group-body"},hW={class:"look-title"},fW={class:"seg"},pW={class:"row"},mW={value:"跟随导出"},gW={value:"线性"},vW={value:"贝塞尔"},bW={class:"curve-wrap"},yW={class:"curve-labels"},xW={class:"look-title"},wW={class:"seg"},SW={class:"row"},CW=["value"],AW={value:0},TW=["value"],EW={class:"render-layer-current"},_W=["title"],MW={key:0,class:"slot-picker"},PW=["placeholder","aria-label"],IW={class:"slot-list"},kW=["onClick"],RW={class:"slot-order"},FW={class:"slot-name"},LW={class:"slot-attachment"},DW={key:0,class:"modifier-hint"},OW={class:"seg"},NW={class:"switch-row render-layer-switch"},$W=["disabled"],BW={key:0,class:"modifier-hint"},UW={key:2,class:"modifier-hint render-layer-warning"},VW={class:"modifier-hint"},XW={class:"look-title image-title"},YW=["title"],zW={class:"row resource-color-row"},jW=["onUpdate:modelValue"],HW={value:"fixed"},GW={value:"random"},WW={value:"lifetime"},qW=["onUpdate:modelValue"],KW={value:"normal"},JW={value:"add"},ZW={value:"multiply"},QW={value:"screen"},eq={key:0,class:"row resource-color-picker"},tq=["onUpdate:modelValue"],iq=["value","aria-label","onChange","onKeydown"],nq={key:0,class:"random-color-hint"},sq={class:"resource-alpha-head"},rq={class:"alpha-modes"},oq=["onClick"],aq=["onClick"],lq=["onClick"],cq={class:"row"},dq=["onUpdate:modelValue"],uq={value:"跟随导出"},hq={value:"线性"},fq={value:"贝塞尔"},pq={class:"resource-alpha-curve"},mq=qt({__name:"ParticleAppearanceSection",setup(n){const{resolvedCurveEditorMode:e,sys:t,textureFileInput:i,sequenceFileInput:s,addImageResource:r,openTexturePicker:o,openSequencePicker:a,onTextureFile:c,onSequenceFiles:l,resetTexture:d,setResourceFixedColor:u,commitResourceFixedColor:h,removeImageResource:f,setResourceWeight:p,toggleResourceLock:m,collapsed:g,toggle:v,resetModule:y,select:b,renderLayerSlotPickerOpen:w,renderLayerSlotSearch:C,renderLayerReadySpines:T,renderLayerSpineReady:S,renderLayerFilteredSlots:E,renderLayerSlotLabel:_,renderLayerResolvedLabel:I,renderLayerWarning:M,setRenderLayerSlotMode:k,selectRenderLayerSpine:B,pickRenderLayerSlot:D,clearRenderLayerSlot:G,ALPHA_CURVE:V,RESOURCE_ALPHA_CURVE:Y}=oo();return(L,N)=>(Q(),te("div",lW,[x("div",{class:"group-head",onClick:N[1]||(N[1]=F=>P(v)("look"))},[x("span",cW,R(P(g).look?"▸":"▾"),1),x("span",null,R(L.$t("appearance.title")),1),x("button",{class:"group-reset",title:L.$t("appearance.reset"),onClick:N[0]||(N[0]=tt(F=>P(y)("look"),["stop"]))},R(L.$t("common.reset")),9,dW)]),me(x("div",uW,[x("div",hW,R(L.$t("appearance.opacity")),1),x("div",fW,[x("button",{class:Ie(["seg-btn",{active:P(t).config.alphaMode==="curve"}]),onClick:N[2]||(N[2]=F=>P(t).config.alphaMode="curve")},R(L.$t("common.curve")),3),x("button",{class:Ie(["seg-btn",{active:P(t).config.alphaMode==="fixed"}]),onClick:N[3]||(N[3]=F=>P(t).config.alphaMode="fixed")},R(L.$t("common.fixed")),3)]),P(t).config.alphaMode==="fixed"?(Q(),It(Ue,{key:0,label:L.$t("appearance.opacity"),min:0,max:1,step:.01,modelValue:P(t).config.alpha,"onUpdate:modelValue":N[4]||(N[4]=F=>P(t).config.alpha=F)},null,8,["label","modelValue"])):(Q(),te(_e,{key:1},[x("label",pW,[x("span",null,R(L.$t("appearance.curveMode")),1),me(x("select",{"onUpdate:modelValue":N[5]||(N[5]=F=>P(t).config.curveMode=F),class:"inp"},[x("option",mW,R(L.$t("common.followExport")),1),x("option",gW,R(L.$t("common.linear")),1),x("option",vW,R(L.$t("common.bezier")),1)],512),[[St,P(t).config.curveMode]])]),x("div",bW,[Ae(ys,{modelValue:P(t).config.alphaCurve,"onUpdate:modelValue":N[6]||(N[6]=F=>P(t).config.alphaCurve=F),"default-value":P(V),mode:P(e)(P(t).config.curveMode)},null,8,["modelValue","default-value","mode"]),x("div",yW,[x("span",null,R(L.$t("appearance.transparent")),1),x("span",null,R(L.$t("attributes.lifeTo")),1),x("span",null,R(L.$t("appearance.opaque")),1)])])],64)),x("div",xW,R(L.$t("appearance.renderLayer")),1),x("div",wW,[x("button",{class:Ie(["seg-btn",{active:P(t).config.renderLayerMode==="top"}]),onClick:N[7]||(N[7]=F=>P(t).config.renderLayerMode="top")},R(L.$t("appearance.top")),3),x("button",{class:Ie(["seg-btn",{active:P(t).config.renderLayerMode==="slot"}]),onClick:N[8]||(N[8]=(...F)=>P(k)&&P(k)(...F))},R(L.$t("appearance.spineSlot")),3)]),P(t).config.renderLayerMode==="slot"?(Q(),te(_e,{key:2},[x("label",SW,[N[19]||(N[19]=x("span",null,"Spine",-1)),x("select",{class:"inp",value:P(t).config.renderLayerSpineId,onChange:N[9]||(N[9]=(...F)=>P(B)&&P(B)(...F))},[x("option",AW,R(P(T).length?L.$t("appearance.selectSpine"):L.$t("appearance.noSpine")),1),(Q(!0),te(_e,null,Pt(P(T),F=>(Q(),te("option",{key:F.id,value:F.id},R(F.name),9,TW))),128))],40,CW)]),P(S)?(Q(),te(_e,{key:0},[x("div",EW,[x("span",{class:"render-layer-text",title:P(_)},R(P(_)||L.$t("appearance.noSlot")),9,_W),x("button",{class:"mini-btn",onClick:N[10]||(N[10]=F=>w.value=!P(w))},R(P(_)?L.$t("appearance.reselect"):L.$t("appearance.selectSlot")),1),P(t).config.renderLayerSlotName?(Q(),te("button",{key:0,class:"mini-btn ghost",onClick:N[11]||(N[11]=(...F)=>P(G)&&P(G)(...F))},R(L.$t("common.clear")),1)):Ce("",!0)]),P(w)?(Q(),te("div",MW,[me(x("input",{"onUpdate:modelValue":N[12]||(N[12]=F=>Qt(C)?C.value=F:null),class:"inp",type:"search",placeholder:L.$t("appearance.searchSlots"),"aria-label":L.$t("appearance.searchSlotsAria")},null,8,PW),[[Je,P(C),void 0,{trim:!0}]]),x("div",IW,[(Q(!0),te(_e,null,Pt(P(E),F=>(Q(),te("button",{key:F.name,class:Ie(["slot-item",{on:P(t).config.renderLayerSlotName===F.name}]),onClick:$=>P(D)(F)},[x("span",RW,R(F.order+1),1),x("span",FW,R(F.name),1),x("span",LW,R(F.attachment||L.$t("appearance.emptySlot")),1)],10,kW))),128)),P(E).length?Ce("",!0):(Q(),te("div",DW,R(L.$t("appearance.noMatchingSlots")),1))])])):Ce("",!0),P(t).config.renderLayerSlotName?(Q(),te(_e,{key:1},[x("div",OW,[x("button",{class:Ie(["seg-btn",{active:P(t).config.renderLayerSlotPosition==="above"}]),onClick:N[13]||(N[13]=F=>P(t).config.renderLayerSlotPosition="above")},R(L.$t("appearance.above")),3),x("button",{class:Ie(["seg-btn",{active:P(t).config.renderLayerSlotPosition==="below"}]),onClick:N[14]||(N[14]=F=>P(t).config.renderLayerSlotPosition="below")},R(L.$t("appearance.below")),3)]),x("label",NW,[me(x("input",{"onUpdate:modelValue":N[15]||(N[15]=F=>P(t).config.renderLayerFollowAttachment=F),type:"checkbox",disabled:P(t).config.renderLayerSlotPosition==="below"},null,8,$W),[[Ct,P(t).config.renderLayerFollowAttachment]]),N[20]||(N[20]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(L.$t("appearance.followAttachment")),1)]),P(I)?(Q(),te("div",BW,R(P(I)),1)):Ce("",!0)],64)):Ce("",!0),P(M)?(Q(),te("div",UW,R(P(M)),1)):Ce("",!0),x("div",VW,R(L.$t("appearance.previewOnly")),1)],64)):Ce("",!0)],64)):Ce("",!0),x("div",XW,[x("span",null,R(L.$t("appearance.imageResources")),1),x("button",{class:"image-add",title:L.$t("appearance.addImage"),onClick:N[16]||(N[16]=(...F)=>P(r)&&P(r)(...F))},"+",8,YW)]),(Q(!0),te(_e,null,Pt(P(t).config.imageResources,F=>(Q(),It(RT,{key:`${P(t).id}:${F.id}`,resource:F,"resource-count":P(t).config.imageResources.length,"pivot-key":`${P(t).id}:${F.id}`,"supports-sequence":"","default-file":"star.png",onPick:P(o),onPickSequence:P(a),onReset:P(d),onRemove:P(f),onUpdateWeight:P(p),onToggleLock:P(m)},{default:ju(()=>[Ae(Ue,{label:L.$t("appearance.scale"),min:.1,max:3,step:.05,modelValue:F.scale,"onUpdate:modelValue":$=>F.scale=$},null,8,["label","modelValue","onUpdate:modelValue"]),N[21]||(N[21]=x("div",{class:"resource-divider"},null,-1)),x("label",zW,[x("span",null,R(L.$t("appearance.color")),1),me(x("select",{"onUpdate:modelValue":$=>F.colorMode=$,class:"inp"},[x("option",HW,R(L.$t("appearance.fixedColor")),1),x("option",GW,R(L.$t("appearance.randomColor")),1),x("option",WW,R(L.$t("appearance.lifetime")),1)],8,jW),[[St,F.colorMode]]),me(x("select",{"onUpdate:modelValue":$=>F.blend=$,class:"inp blend-select"},[x("option",KW,R(L.$t("appearance.normal")),1),x("option",JW,R(L.$t("appearance.add")),1),x("option",ZW,R(L.$t("appearance.multiply")),1),x("option",QW,R(L.$t("appearance.screen")),1)],8,qW),[[St,F.blend]])]),F.colorMode==="fixed"?(Q(),te("label",eq,[x("span",null,R(L.$t("appearance.fixedColor")),1),me(x("input",{type:"color","onUpdate:modelValue":$=>F.colorStart=$,class:"colr"},null,8,tq),[[Je,F.colorStart]]),x("input",{type:"text",class:"hex-input",value:F.colorStart,spellcheck:"false","aria-label":L.$t("appearance.fixedColorValue"),onChange:$=>P(u)(F,$),onKeydown:Gr($=>P(h)(F,$),["enter"])},null,40,iq)])):(Q(),te(_e,{key:1},[Ae(kT,{modelValue:F.colorGradient,"onUpdate:modelValue":$=>F.colorGradient=$},null,8,["modelValue","onUpdate:modelValue"]),F.colorMode==="random"?(Q(),te("div",nq,R(L.$t("appearance.randomColorHint")),1)):Ce("",!0)],64)),x("div",sq,[x("span",null,R(L.$t("appearance.independentAlpha")),1),x("div",rq,[x("button",{class:Ie({on:F.independentAlpha==="off"}),onClick:$=>F.independentAlpha="off"},R(L.$t("appearance.off")),11,oq),x("button",{class:Ie({on:F.independentAlpha==="fixed"}),onClick:$=>F.independentAlpha="fixed"},R(L.$t("common.fixed")),11,aq),x("button",{class:Ie({on:F.independentAlpha==="curve"}),onClick:$=>F.independentAlpha="curve"},R(L.$t("common.curve")),11,lq)])]),F.independentAlpha==="fixed"?(Q(),It(Ue,{key:2,label:L.$t("appearance.opacity"),min:0,max:1,step:.01,modelValue:F.alpha,"onUpdate:modelValue":$=>F.alpha=$},null,8,["label","modelValue","onUpdate:modelValue"])):F.independentAlpha==="curve"?(Q(),te(_e,{key:3},[x("label",cq,[x("span",null,R(L.$t("appearance.curveMode")),1),me(x("select",{"onUpdate:modelValue":$=>F.alphaCurveMode=$,class:"inp"},[x("option",uq,R(L.$t("common.followExport")),1),x("option",hq,R(L.$t("common.linear")),1),x("option",fq,R(L.$t("common.bezier")),1)],8,dq),[[St,F.alphaCurveMode]])]),x("div",pq,[Ae(ys,{modelValue:F.alphaCurve,"onUpdate:modelValue":$=>F.alphaCurve=$,"default-value":P(Y),mode:P(e)(F.alphaCurveMode)},null,8,["modelValue","onUpdate:modelValue","default-value","mode"])])],64)):Ce("",!0)]),_:2},1032,["resource","resource-count","pivot-key","onPick","onPickSequence","onReset","onRemove","onUpdateWeight","onToggleLock"]))),128)),x("input",{ref_key:"textureFileInput",ref:i,class:"file-input",type:"file",accept:"image/png,image/jpeg,image/webp,image/gif",onChange:N[17]||(N[17]=(...F)=>P(c)&&P(c)(...F))},null,544),x("input",{ref_key:"sequenceFileInput",ref:s,class:"file-input",type:"file",multiple:"",accept:"image/png,image/jpeg,image/webp,image/gif",onChange:N[18]||(N[18]=(...F)=>P(l)&&P(l)(...F))},null,544)],512),[[Fi,!P(g).look]])]))}}),gq=li(mq,[["__scopeId","data-v-86902cc8"]]),vq={class:"group"},bq={class:"caret"},yq=["title"],xq={class:"group-body"},wq={class:"modifier-item damping-item"},Sq={class:"modifier-item"},Cq={class:"switch-row modifier-switch"},Aq={key:0,class:"modifier-params"},Tq={class:"modifier-hint"},Eq={class:"modifier-item"},_q={class:"switch-row modifier-switch"},Mq={key:0,class:"modifier-params gravity-params"},Pq={class:"modifier-mode-row"},Iq={class:"gravity-curve-title"},kq={class:"gravity-curve-axis"},Rq={class:"modifier-hint"},Fq={class:"modifier-item"},Lq={class:"switch-row modifier-switch"},Dq={key:0,class:"modifier-params gravity-params"},Oq={class:"modifier-mode-row"},Nq={class:"gravity-curve-title"},$q={class:"gravity-curve-axis"},Bq={class:"modifier-hint"},Uq={class:"modifier-item"},Vq={class:"switch-row modifier-switch"},Xq={key:0,class:"modifier-params"},Yq={class:"row"},zq={value:"constant"},jq={value:"linear"},Hq={value:"inverse"},Gq={class:"modifier-hint"},Wq={class:"switch-row"},qq={class:"modifier-item"},Kq={class:"switch-row modifier-switch"},Jq={key:0,class:"modifier-params"},Zq={class:"row"},Qq={value:"constant"},e7={value:"linear"},t7={value:"inverse"},i7={class:"modifier-hint"},n7={class:"switch-row"},s7={class:"modifier-item"},r7={class:"switch-row modifier-switch"},o7={key:0,class:"modifier-params"},a7={class:"row"},l7={value:"global"},c7={value:"particle"},d7={class:"row"},u7={value:"linear"},h7={value:"curve"},f7={class:"modifier-hint"},p7={class:"switch-row"},m7={class:"modifier-item"},g7={class:"switch-row modifier-switch"},v7={key:0,class:"modifier-params trail-params"},b7={class:"trail-section-head"},y7={class:"trail-section-title"},x7=["title"],w7={class:"row"},S7=["onUpdate:modelValue"],C7={value:"fixed"},A7={value:"random"},T7={class:"row"},E7=["onUpdate:modelValue"],_7={value:"fixed"},M7={value:"random"},P7={class:"row"},I7=["onUpdate:modelValue"],k7={value:"particle"},R7={value:"fixed"},F7={class:"switch-row trail-sub-switch"},L7=["onUpdate:modelValue"],D7={class:"switch-row trail-sub-switch"},O7=["onUpdate:modelValue"],N7={class:"trail-mode-head"},$7={class:"alpha-modes"},B7=["onClick"],U7=["onClick"],V7=["onClick"],X7={class:"row"},Y7=["onUpdate:modelValue"],z7={value:"normal"},j7={value:"add"},H7={value:"multiply"},G7={value:"screen"},W7={key:6,class:"row trail-fixed-color"},q7=["onUpdate:modelValue"],K7=["value","onChange","onKeydown"],J7={class:"trail-mode-head"},Z7={class:"alpha-modes"},Q7=["onClick"],e9=["onClick"],t9=["onClick"],i9={class:"trail-grid-row"},n9={class:"modifier-hint"},s9={class:"modifier-item"},r9={class:"switch-row modifier-switch"},o9=["disabled"],a9={key:0,class:"modifier-params emitter-follow-params"},l9={class:"field-block"},c9=["value"],d9={value:"none"},u9={value:"path"},h9={key:0,value:"bone"},f9={class:"field-block"},p9={value:0},m9=["value"],g9={class:"field-block"},v9={value:"fixed"},b9={value:"direction"},y9={class:"gravity-curve-title"},x9={class:"field-grid follow-grid"},w9={class:"compact-field"},S9={class:"compact-field"},C9={value:"local"},A9={value:"world"},T9={class:"field-block"},E9={value:"forward"},_9={value:"reverse"},M9={class:"modifier-hint"},P9={key:0,class:"bone-follow-target"},I9={key:1,class:"bone-follow-missing"},k9={class:"field-block"},R9={value:"local"},F9={value:"world"},L9={class:"field-grid follow-grid"},D9={class:"compact-field"},O9={class:"compact-field"},N9={class:"bone-follow-transform-grid"},$9={class:"compact-field"},B9={class:"compact-field"},U9={class:"compact-field"},V9={class:"modifier-hint"},X9={class:"modifier-item"},Y9={class:"switch-row modifier-switch"},z9={key:0,class:"modifier-params collision-filter-params"},j9={class:"collision-filter-title"},H9={class:"collision-filter-tags"},G9=["title"],W9=["aria-label","onClick"],q9=["disabled","title"],K9={key:0,class:"collision-filter-empty"},J9={key:1,class:"collision-filter-picker"},Z9=["onClick"],Q9={class:"modifier-hint"},eK={class:"modifier-item events-item"},tK={class:"switch-row modifier-switch"},iK={key:0,class:"event-rules"},nK={class:"event-selects"},sK=["onUpdate:modelValue","title"],rK={value:"birth"},oK={value:"death"},aK={value:"collision"},lK=["onUpdate:modelValue","title"],cK={value:0},dK=["value"],uK=["title","onClick"],hK={class:"event-probability"},fK=["onUpdate:modelValue"],pK={key:0,class:"event-probability event-collision-limit"},mK=["value","onInput"],gK={class:"event-probability event-inherit"},vK=["onClick"],bK={class:"inherit-summary"},yK={key:1,class:"event-probability event-color-mode"},xK=["onUpdate:modelValue"],wK={value:"add"},SK={value:"replace"},CK={class:"inherit-check"},AK={class:"inherit-check"},TK=["onClick"],EK={class:"inherit-check"},_K=qt({__name:"ParticleModifiersSection",setup(n){const{store:e,sys:t,trailTextureFileInput:i,addTrailResource:s,openTrailTexturePicker:r,onTrailRigChange:o,onTrailResourceBoneCountChange:a,onTrailResourceRotationChange:c,onTrailTextureFile:l,resetTrailTexture:d,removeTrailResource:u,setTrailResourceWeight:h,toggleTrailResourceLock:f,setTrailColor:p,commitTrailColor:m,selectedSpineBone:g,boundSpineBone:v,collisionPickerOpen:y,selectedCollisionBodies:b,availableCollisionBodies:w,addCollisionBody:C,removeCollisionBody:T,collapsed:S,toggle:E,onEmitterFollowModeChange:_,bindSelectedBone:I,resetModule:M,select:k,LINEAR_CURVE:B,FLAT_CURVE:D,TRAIL_ALPHA_CURVE:G,TRAIL_SHAPE_CURVE:V}=oo(),{t:Y}=fn(),L=Fe(()=>{var O;const j=(O=t.value)==null?void 0:O.id;if(!j)return[];const H=kS(e.systems,j);return e.systems.filter(U=>U.id!==j&&!H.has(U.id))}),N=Fe(()=>[{key:"color",label:Y("modifiers.inheritColor")},{key:"scale",label:Y("modifiers.inheritScale")},{key:"rotation",label:Y("modifiers.inheritRotation")},{key:"life",label:Y("modifiers.inheritLife")}]),F=$e(null),$=Fe(()=>{var O;const j=F.value,H=(O=t.value)==null?void 0:O.config.events;return!j||!Array.isArray(H)?null:H.find(U=>U.id===j.ruleId)||null});function X(j){return Array.isArray(j.inherit)||(j.inherit=[]),j.inherit}function z(j){const H=X(j);return H.length?H.length===N.value.length?Y("modifiers.inheritAll"):N.value.filter(O=>H.includes(O.key)).map(O=>O.label).join("、"):Y("modifiers.inheritNone")}function K(j,H){return X(j).includes(H)}function J(j,H){const O=X(j),U=O.indexOf(H);U>=0?O.splice(U,1):O.push(H)}function oe(j){X(j).splice(0)}function le(j){X(j).splice(0,X(j).length,...N.value.map(H=>H.key))}function ve(j,H){var xe;if(((xe=F.value)==null?void 0:xe.ruleId)===j.id){F.value=null;return}const O=H.currentTarget;if(!O)return;const U=O.getBoundingClientRect(),W=Math.max(168,U.width),ee=212,ne=Math.min(Math.max(8,U.left),Math.max(8,window.innerWidth-W-8));let ue=U.bottom+4;ue+ee>window.innerHeight-8&&(ue=Math.max(8,U.top-ee-4)),F.value={ruleId:j.id,left:ne,top:ue,width:W}}function Se(){F.value=null}function fe(){Se()}function be(j){j.key==="Escape"&&Se()}Sn(()=>{document.addEventListener("pointerdown",Se),window.addEventListener("scroll",fe,!0),window.addEventListener("resize",fe),window.addEventListener("keydown",be)}),eo(()=>{document.removeEventListener("pointerdown",Se),window.removeEventListener("scroll",fe,!0),window.removeEventListener("resize",fe),window.removeEventListener("keydown",be)});function q(){var O;const j=(O=t.value)==null?void 0:O.config;if(!j)return;Array.isArray(j.events)||(j.events=[]);const H=Math.max(0,...j.events.map(U=>U.id))+1;j.events.push({id:H,event:"birth",targetSystemId:0,probability:1,collisionLimit:1,inherit:[],colorInheritMode:"add"})}function Z(j){var H;(H=t.value)==null||H.config.events.splice(j,1)}function se(j,H){const O=H.target,U=Math.round(Number(O.value));j.collisionLimit=Math.min(4,Math.max(1,Number.isFinite(U)?U:1)),O.value=String(j.collisionLimit)}return(j,H)=>(Q(),te(_e,null,[x("div",vq,[x("div",{class:"group-head",onClick:H[1]||(H[1]=O=>P(E)("mods"))},[x("span",bq,R(P(S).mods?"▸":"▾"),1),x("span",null,R(j.$t("modifiers.title")),1),x("button",{class:"group-reset",title:j.$t("modifiers.reset"),onClick:H[0]||(H[0]=tt(O=>P(M)("mods"),["stop"]))},R(j.$t("common.reset")),9,yq)]),me(x("div",xq,[x("div",wq,[Ae(Ue,{label:j.$t("modifiers.damping"),min:0,max:2,step:.05,modelValue:P(t).config.damping,"onUpdate:modelValue":H[2]||(H[2]=O=>P(t).config.damping=O)},null,8,["label","modelValue"])]),x("div",Sq,[x("label",Cq,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[3]||(H[3]=O=>P(t).config.noise=O)},null,512),[[Ct,P(t).config.noise]]),H[74]||(H[74]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableNoise")),1)]),P(t).config.noise?(Q(),te("div",Aq,[Ae(Ue,{label:j.$t("modifiers.strength"),min:0,max:100,step:1,modelValue:P(t).config.noiseAmt,"onUpdate:modelValue":H[4]||(H[4]=O=>P(t).config.noiseAmt=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.noiseRange"),min:0,max:500,step:1,modelValue:P(t).config.noiseRange,"onUpdate:modelValue":H[5]||(H[5]=O=>P(t).config.noiseRange=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.noiseSpeed"),min:0,max:10,step:.1,modelValue:P(t).config.noiseSpeed,"onUpdate:modelValue":H[6]||(H[6]=O=>P(t).config.noiseSpeed=O)},null,8,["label","modelValue"]),x("div",Tq,R(j.$t("modifiers.noiseHint")),1)])):Ce("",!0)]),x("div",Eq,[x("label",_q,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[7]||(H[7]=O=>P(t).config.useGravity=O)},null,512),[[Ct,P(t).config.useGravity]]),H[75]||(H[75]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableGravity")),1)]),P(t).config.useGravity?(Q(),te("div",Mq,[x("div",Pq,[x("button",{class:Ie(["axis-mode",{on:P(t).config.gravityMode==="fixed"}]),onClick:H[8]||(H[8]=O=>P(t).config.gravityMode="fixed")},R(j.$t("common.fixed")),3),x("button",{class:Ie(["axis-mode",{on:P(t).config.gravityMode==="random"}]),onClick:H[9]||(H[9]=O=>P(t).config.gravityMode="random")},R(j.$t("common.random")),3)]),P(t).config.gravityMode==="fixed"?(Q(),It(Ue,{key:0,label:j.$t("modifiers.gravityStrength"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.gravityMin,"onUpdate:modelValue":H[10]||(H[10]=O=>P(t).config.gravityMin=O)},null,8,["label","modelValue"])):(Q(),te(_e,{key:1},[Ae(Ue,{label:j.$t("modifiers.strengthMin"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.gravityMin,"onUpdate:modelValue":H[11]||(H[11]=O=>P(t).config.gravityMin=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.strengthMax"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.gravityMax,"onUpdate:modelValue":H[12]||(H[12]=O=>P(t).config.gravityMax=O)},null,8,["label","modelValue"])],64)),Ae(Ue,{label:j.$t("modifiers.direction"),min:-360,max:360,step:1,modelValue:P(t).config.gravityDirection,"onUpdate:modelValue":H[13]||(H[13]=O=>P(t).config.gravityDirection=O)},null,8,["label","modelValue"]),x("div",Iq,[x("span",null,R(j.$t("modifiers.gravityOverLife")),1),x("span",null,R(j.$t("modifiers.axisStrength")),1)]),Ae(ys,{modelValue:P(t).config.gravityCurve,"onUpdate:modelValue":H[14]||(H[14]=O=>P(t).config.gravityCurve=O),"default-value":P(D)},null,8,["modelValue","default-value"]),x("div",kq,[H[76]||(H[76]=x("span",null,"0",-1)),x("span",null,R(j.$t("attributes.lifeTo")),1),H[77]||(H[77]=x("span",null,"1",-1))]),x("div",Rq,R(j.$t("modifiers.directionHint")),1)])):Ce("",!0)]),x("div",Fq,[x("label",Lq,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[15]||(H[15]=O=>P(t).config.wind=O)},null,512),[[Ct,P(t).config.wind]]),H[78]||(H[78]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableWind")),1)]),P(t).config.wind?(Q(),te("div",Dq,[x("div",Oq,[x("button",{class:Ie(["axis-mode",{on:P(t).config.windMode==="fixed"}]),onClick:H[16]||(H[16]=O=>P(t).config.windMode="fixed")},R(j.$t("common.fixed")),3),x("button",{class:Ie(["axis-mode",{on:P(t).config.windMode==="random"}]),onClick:H[17]||(H[17]=O=>P(t).config.windMode="random")},R(j.$t("common.random")),3)]),P(t).config.windMode==="fixed"?(Q(),It(Ue,{key:0,label:j.$t("modifiers.windStrength"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.windMin,"onUpdate:modelValue":H[18]||(H[18]=O=>P(t).config.windMin=O)},null,8,["label","modelValue"])):(Q(),te(_e,{key:1},[Ae(Ue,{label:j.$t("modifiers.strengthMin"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.windMin,"onUpdate:modelValue":H[19]||(H[19]=O=>P(t).config.windMin=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.strengthMax"),min:-3e3,max:3e3,step:10,modelValue:P(t).config.windMax,"onUpdate:modelValue":H[20]||(H[20]=O=>P(t).config.windMax=O)},null,8,["label","modelValue"])],64)),Ae(Ue,{label:j.$t("modifiers.direction"),min:-360,max:360,step:1,modelValue:P(t).config.windDirection,"onUpdate:modelValue":H[21]||(H[21]=O=>P(t).config.windDirection=O)},null,8,["label","modelValue"]),x("div",Nq,[x("span",null,R(j.$t("modifiers.windOverLife")),1),x("span",null,R(j.$t("modifiers.axisStrength")),1)]),Ae(ys,{modelValue:P(t).config.windCurve,"onUpdate:modelValue":H[22]||(H[22]=O=>P(t).config.windCurve=O),"default-value":P(D)},null,8,["modelValue","default-value"]),x("div",$q,[H[79]||(H[79]=x("span",null,"0",-1)),x("span",null,R(j.$t("attributes.lifeTo")),1),H[80]||(H[80]=x("span",null,"1",-1))]),x("div",Bq,R(j.$t("modifiers.directionHint")),1)])):Ce("",!0)]),x("div",Uq,[x("label",Vq,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[23]||(H[23]=O=>P(t).config.forceField=O)},null,512),[[Ct,P(t).config.forceField]]),H[81]||(H[81]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableForceField")),1)]),P(t).config.forceField?(Q(),te("div",Xq,[Ae(Ue,{label:j.$t("modifiers.centerX"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.forceCenterX,"onUpdate:modelValue":H[24]||(H[24]=O=>P(t).config.forceCenterX=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.centerY"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.forceCenterY,"onUpdate:modelValue":H[25]||(H[25]=O=>P(t).config.forceCenterY=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.forceStrength"),min:-300,max:300,step:1,modelValue:P(t).config.forceStrength,"onUpdate:modelValue":H[26]||(H[26]=O=>P(t).config.forceStrength=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.forceRadius"),min:1,max:2e3,step:1,modelValue:P(t).config.forceRadius,"onUpdate:modelValue":H[27]||(H[27]=O=>P(t).config.forceRadius=O)},null,8,["label","modelValue"]),x("label",Yq,[x("span",null,R(j.$t("modifiers.falloffMode")),1),me(x("select",{"onUpdate:modelValue":H[28]||(H[28]=O=>P(t).config.forceFalloff=O),class:"inp"},[x("option",zq,R(j.$t("modifiers.constant")),1),x("option",jq,R(j.$t("modifiers.linearFalloff")),1),x("option",Hq,R(j.$t("modifiers.inverseFalloff")),1)],512),[[St,P(t).config.forceFalloff]])]),x("div",Gq,R(j.$t("modifiers.forceHint")),1),x("label",Wq,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[29]||(H[29]=O=>P(t).config.showForceFieldShape=O)},null,512),[[Ct,P(t).config.showForceFieldShape]]),H[82]||(H[82]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.showShape")),1)])])):Ce("",!0)]),x("div",qq,[x("label",Kq,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[30]||(H[30]=O=>P(t).config.vortex=O)},null,512),[[Ct,P(t).config.vortex]]),H[83]||(H[83]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableVortex")),1)]),P(t).config.vortex?(Q(),te("div",Jq,[Ae(Ue,{label:j.$t("modifiers.centerX"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.vortexCenterX,"onUpdate:modelValue":H[31]||(H[31]=O=>P(t).config.vortexCenterX=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.centerY"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.vortexCenterY,"onUpdate:modelValue":H[32]||(H[32]=O=>P(t).config.vortexCenterY=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.forceStrength"),min:-300,max:300,step:1,modelValue:P(t).config.vortexStrength,"onUpdate:modelValue":H[33]||(H[33]=O=>P(t).config.vortexStrength=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.forceRadius"),min:1,max:2e3,step:1,modelValue:P(t).config.vortexRadius,"onUpdate:modelValue":H[34]||(H[34]=O=>P(t).config.vortexRadius=O)},null,8,["label","modelValue"]),x("label",Zq,[x("span",null,R(j.$t("modifiers.falloffMode")),1),me(x("select",{"onUpdate:modelValue":H[35]||(H[35]=O=>P(t).config.vortexFalloff=O),class:"inp"},[x("option",Qq,R(j.$t("modifiers.constant")),1),x("option",e7,R(j.$t("modifiers.linearFalloff")),1),x("option",t7,R(j.$t("modifiers.inverseFalloff")),1)],512),[[St,P(t).config.vortexFalloff]])]),x("div",i7,R(j.$t("modifiers.vortexHint")),1),x("label",n7,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[36]||(H[36]=O=>P(t).config.showVortexShape=O)},null,512),[[Ct,P(t).config.showVortexShape]]),H[84]||(H[84]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.showShape")),1)])])):Ce("",!0)]),x("div",s7,[x("label",r7,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[37]||(H[37]=O=>P(t).config.attraction=O)},null,512),[[Ct,P(t).config.attraction]]),H[85]||(H[85]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableAttraction")),1)]),P(t).config.attraction?(Q(),te("div",o7,[Ae(Ue,{label:j.$t("modifiers.attractionX"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.attractionCenterX,"onUpdate:modelValue":H[38]||(H[38]=O=>P(t).config.attractionCenterX=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.attractionY"),min:-5e3,max:5e3,step:1,modelValue:P(t).config.attractionCenterY,"onUpdate:modelValue":H[39]||(H[39]=O=>P(t).config.attractionCenterY=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.attractionRadius"),min:0,max:2e3,step:1,modelValue:P(t).config.attractionRadius,"onUpdate:modelValue":H[40]||(H[40]=O=>P(t).config.attractionRadius=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.attractionDuration"),min:.05,max:30,step:.05,modelValue:P(t).config.attractionDuration,"onUpdate:modelValue":H[41]||(H[41]=O=>P(t).config.attractionDuration=O)},null,8,["label","modelValue"]),Ae(Ue,{label:j.$t("modifiers.delay"),min:0,max:30,step:.05,modelValue:P(t).config.attractionDelay,"onUpdate:modelValue":H[42]||(H[42]=O=>P(t).config.attractionDelay=O)},null,8,["label","modelValue"]),x("label",a7,[x("span",null,R(j.$t("modifiers.delayMode")),1),me(x("select",{"onUpdate:modelValue":H[43]||(H[43]=O=>P(t).config.attractionDelayMode=O),class:"inp"},[x("option",l7,R(j.$t("modifiers.globalTime")),1),x("option",c7,R(j.$t("modifiers.particleLife")),1)],512),[[St,P(t).config.attractionDelayMode]])]),x("label",d7,[x("span",null,R(j.$t("modifiers.attractionPath")),1),me(x("select",{"onUpdate:modelValue":H[44]||(H[44]=O=>P(t).config.attractionPath=O),class:"inp"},[x("option",u7,R(j.$t("modifiers.straight")),1),x("option",h7,R(j.$t("common.curve")),1)],512),[[St,P(t).config.attractionPath]])]),x("div",f7,R(j.$t("modifiers.attractionHint")),1),x("label",p7,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[45]||(H[45]=O=>P(t).config.showAttractionShape=O)},null,512),[[Ct,P(t).config.showAttractionShape]]),H[86]||(H[86]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.showShape")),1)])])):Ce("",!0)]),x("div",m7,[x("label",g7,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[46]||(H[46]=O=>P(t).config.trail=O)},null,512),[[Ct,P(t).config.trail]]),H[87]||(H[87]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableTrail")),1)]),P(t).config.trail?(Q(),te("div",v7,[x("div",b7,[x("div",y7,R(j.$t("modifiers.trailImages")),1),x("button",{class:"image-add",title:j.$t("modifiers.addTrailImage"),onClick:H[47]||(H[47]=(...O)=>P(s)&&P(s)(...O))},"+",8,x7)]),(Q(!0),te(_e,null,Pt(P(t).config.trailResources,O=>(Q(),It(RT,{key:O.id,resource:O,"resource-count":P(t).config.trailResources.length,"default-file":"trail.png","name-placeholder":"trail","show-folder":!1,onPick:P(r),onReset:P(d),onRemove:P(u),onUpdateWeight:P(h),onToggleLock:P(f)},{default:ju(()=>[H[90]||(H[90]=x("div",{class:"resource-divider"},null,-1)),Ae(Ue,{label:j.$t("modifiers.trailRotation"),min:-360,max:360,step:1,"model-value":O.rotation,"onUpdate:modelValue":U=>P(c)(O.id,U)},null,8,["label","model-value","onUpdate:modelValue"]),Ae(Ue,{label:j.$t("modifiers.trailBones"),min:2,max:16,step:1,"model-value":O.boneCount,"onUpdate:modelValue":U=>P(a)(O.id,U)},null,8,["label","model-value","onUpdate:modelValue"]),Ae(Ue,{label:j.$t("modifiers.trailRatio"),min:0,max:100,step:1,modelValue:O.trailRatio,"onUpdate:modelValue":U=>O.trailRatio=U},null,8,["label","modelValue","onUpdate:modelValue"]),x("label",w7,[x("span",null,R(j.$t("modifiers.trailLength")),1),me(x("select",{"onUpdate:modelValue":U=>O.lengthMode=U,class:"inp"},[x("option",C7,R(j.$t("common.fixed")),1),x("option",A7,R(j.$t("modifiers.randomRange")),1)],8,S7),[[St,O.lengthMode]])]),O.lengthMode==="fixed"?(Q(),It(Ue,{key:0,label:j.$t("modifiers.lengthRatio"),min:0,max:500,step:1,modelValue:O.length,"onUpdate:modelValue":U=>O.length=U},null,8,["label","modelValue","onUpdate:modelValue"])):(Q(),te(_e,{key:1},[Ae(Ue,{label:j.$t("modifiers.lengthMin"),min:0,max:500,step:1,modelValue:O.lengthMin,"onUpdate:modelValue":U=>O.lengthMin=U},null,8,["label","modelValue","onUpdate:modelValue"]),Ae(Ue,{label:j.$t("modifiers.lengthMax"),min:0,max:500,step:1,modelValue:O.lengthMax,"onUpdate:modelValue":U=>O.lengthMax=U},null,8,["label","modelValue","onUpdate:modelValue"])],64)),x("label",T7,[x("span",null,R(j.$t("modifiers.trailWidth")),1),me(x("select",{"onUpdate:modelValue":U=>O.widthSizeMode=U,class:"inp"},[x("option",_7,R(j.$t("common.fixed")),1),x("option",M7,R(j.$t("modifiers.randomRange")),1)],8,E7),[[St,O.widthSizeMode]])]),O.widthSizeMode==="fixed"?(Q(),It(Ue,{key:2,label:j.$t("modifiers.widthRatio"),min:0,max:500,step:1,modelValue:O.width,"onUpdate:modelValue":U=>O.width=U},null,8,["label","modelValue","onUpdate:modelValue"])):(Q(),te(_e,{key:3},[Ae(Ue,{label:j.$t("modifiers.widthMin"),min:0,max:500,step:1,modelValue:O.widthMin,"onUpdate:modelValue":U=>O.widthMin=U},null,8,["label","modelValue","onUpdate:modelValue"]),Ae(Ue,{label:j.$t("modifiers.widthMax"),min:0,max:500,step:1,modelValue:O.widthMax,"onUpdate:modelValue":U=>O.widthMax=U},null,8,["label","modelValue","onUpdate:modelValue"])],64)),x("label",P7,[x("span",null,R(j.$t("modifiers.widthScale")),1),me(x("select",{"onUpdate:modelValue":U=>O.widthMode=U,class:"inp"},[x("option",k7,R(j.$t("modifiers.followParticle")),1),x("option",R7,R(j.$t("common.fixed")),1)],8,I7),[[St,O.widthMode]])]),x("label",F7,[me(x("input",{type:"checkbox","onUpdate:modelValue":U=>O.lifeLengthEnabled=U},null,8,L7),[[Ct,O.lifeLengthEnabled]]),H[88]||(H[88]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.lifeLengthCurve")),1)]),O.lifeLengthEnabled?(Q(),It(ys,{key:4,modelValue:O.lifeLengthCurve,"onUpdate:modelValue":U=>O.lifeLengthCurve=U,"default-value":P(D)},null,8,["modelValue","onUpdate:modelValue","default-value"])):Ce("",!0),x("label",D7,[me(x("input",{type:"checkbox","onUpdate:modelValue":U=>O.shapeEnabled=U},null,8,O7),[[Ct,O.shapeEnabled]]),H[89]||(H[89]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.shapeCurve")),1)]),O.shapeEnabled?(Q(),It(ys,{key:5,modelValue:O.shapeCurve,"onUpdate:modelValue":U=>O.shapeCurve=U,"default-value":P(V)},null,8,["modelValue","onUpdate:modelValue","default-value"])):Ce("",!0),x("div",N7,[x("span",null,R(j.$t("modifiers.colorMode")),1),x("div",$7,[x("button",{class:Ie(["axis-mode",{on:O.colorMode==="particle"}]),onClick:U=>O.colorMode="particle"},R(j.$t("modifiers.followParticle")),11,B7),x("button",{class:Ie(["axis-mode",{on:O.colorMode==="fixed"}]),onClick:U=>O.colorMode="fixed"},R(j.$t("common.fixed")),11,U7),x("button",{class:Ie(["axis-mode",{on:O.colorMode==="curve"}]),onClick:U=>O.colorMode="curve"},R(j.$t("common.curve")),11,V7)])]),x("label",X7,[x("span",null,R(j.$t("modifiers.blendMode")),1),me(x("select",{"onUpdate:modelValue":U=>O.blend=U,class:"inp"},[x("option",z7,R(j.$t("appearance.normal")),1),x("option",j7,R(j.$t("appearance.add")),1),x("option",H7,R(j.$t("appearance.multiply")),1),x("option",G7,R(j.$t("appearance.screen")),1)],8,Y7),[[St,O.blend]])]),O.colorMode==="fixed"?(Q(),te("label",W7,[x("span",null,R(j.$t("modifiers.fixedColor")),1),me(x("input",{class:"colr",type:"color","onUpdate:modelValue":U=>O.color=U},null,8,q7),[[Je,O.color]]),x("input",{class:"hex-input",value:O.color,onChange:U=>P(p)(O,U),onKeydown:Gr(tt(U=>P(m)(O,U),["prevent"]),["enter"])},null,40,K7)])):O.colorMode==="curve"?(Q(),It(kT,{key:7,modelValue:O.colorGradient,"onUpdate:modelValue":U=>O.colorGradient=U},null,8,["modelValue","onUpdate:modelValue"])):Ce("",!0),x("div",J7,[x("span",null,R(j.$t("modifiers.alphaMode")),1),x("div",Z7,[x("button",{class:Ie(["axis-mode",{on:O.alphaMode==="particle"}]),onClick:U=>O.alphaMode="particle"},R(j.$t("modifiers.followParticle")),11,Q7),x("button",{class:Ie(["axis-mode",{on:O.alphaMode==="fixed"}]),onClick:U=>O.alphaMode="fixed"},R(j.$t("common.fixed")),11,e9),x("button",{class:Ie(["axis-mode",{on:O.alphaMode==="curve"}]),onClick:U=>O.alphaMode="curve"},R(j.$t("common.curve")),11,t9)])]),O.alphaMode==="fixed"?(Q(),It(Ue,{key:8,label:j.$t("modifiers.opacity"),min:0,max:1,step:.01,modelValue:O.alpha,"onUpdate:modelValue":U=>O.alpha=U},null,8,["label","modelValue","onUpdate:modelValue"])):Ce("",!0),O.alphaMode==="curve"?(Q(),It(ys,{key:9,modelValue:O.alphaCurve,"onUpdate:modelValue":U=>O.alphaCurve=U,"default-value":P(G)},null,8,["modelValue","onUpdate:modelValue","default-value"])):Ce("",!0)]),_:2},1032,["resource","resource-count","onPick","onReset","onRemove","onUpdateWeight","onToggleLock"]))),128)),x("input",{ref_key:"trailTextureFileInput",ref:i,class:"file-input",type:"file",accept:"image/png,image/jpeg,image/webp",onChange:H[48]||(H[48]=(...O)=>P(l)&&P(l)(...O))},null,544),x("div",i9,[Ae(Ue,{label:j.$t("modifiers.gridRows"),min:2,max:16,step:1,"model-value":P(t).config.trailGridRows,"onUpdate:modelValue":H[49]||(H[49]=O=>P(o)("trailGridRows",O))},null,8,["label","model-value"]),Ae(Ue,{label:j.$t("modifiers.gridCols"),min:2,max:32,step:1,"model-value":P(t).config.trailGridCols,"onUpdate:modelValue":H[50]||(H[50]=O=>P(o)("trailGridCols",O))},null,8,["label","model-value"])]),x("div",n9,R(j.$t("modifiers.trailHint")),1)])):Ce("",!0)]),x("div",s9,[x("label",r9,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[51]||(H[51]=O=>P(t).config.emitterFollow=O),disabled:P(t).config.streamBehavior==="loop"},null,8,o9),[[Ct,P(t).config.emitterFollow]]),H[91]||(H[91]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableFollow")),1)]),P(t).config.emitterFollow&&P(t).config.streamBehavior!=="loop"?(Q(),te("div",a9,[x("label",l9,[x("span",null,R(j.$t("modifiers.followMode")),1),x("select",{value:P(t).config.emitterFollowMode,class:"inp",onChange:H[52]||(H[52]=O=>P(_)(O,P(t).config))},[x("option",d9,R(j.$t("modifiers.noFollow")),1),x("option",u9,R(j.$t("modifiers.followPath")),1),P(g)||P(t).config.emitterFollowMode==="bone"?(Q(),te("option",h9,R(j.$t("modifiers.selectedBone")),1)):Ce("",!0)],40,c9)]),P(t).config.emitterFollowMode==="path"?(Q(),te(_e,{key:0},[x("label",f9,[x("span",null,R(j.$t("modifiers.followPath")),1),me(x("select",{"onUpdate:modelValue":H[53]||(H[53]=O=>P(t).config.emitterFollowPathId=O),class:"inp"},[x("option",p9,R(j.$t("modifiers.noFollow")),1),(Q(!0),te(_e,null,Pt(P(e).paths,O=>(Q(),te("option",{key:O.id,value:O.id},R(O.name),9,m9))),128))],512),[[St,P(t).config.emitterFollowPathId,void 0,{number:!0}]])]),x("label",g9,[x("span",null,R(j.$t("modifiers.emitterAngleMode")),1),me(x("select",{"onUpdate:modelValue":H[54]||(H[54]=O=>P(t).config.emitterAngleMode=O),class:"inp"},[x("option",v9,R(j.$t("modifiers.fixedAngle")),1),x("option",b9,R(j.$t("modifiers.followMoveDirection")),1)],512),[[St,P(t).config.emitterAngleMode]])]),x("div",y9,[x("span",null,R(j.$t("modifiers.moveProgressCurve")),1)]),Ae(ys,{modelValue:P(t).config.emitterFollowCurve,"onUpdate:modelValue":H[55]||(H[55]=O=>P(t).config.emitterFollowCurve=O),"default-value":P(B)},null,8,["modelValue","default-value"]),x("div",x9,[x("label",w9,[x("span",null,R(j.$t("modifiers.moveDuration")),1),me(x("input",{"onUpdate:modelValue":H[56]||(H[56]=O=>P(t).config.emitterFollowDuration=O),type:"number",min:"0.05",step:"0.05",class:"inp"},null,512),[[Je,P(t).config.emitterFollowDuration,void 0,{number:!0}]])]),x("label",S9,[x("span",null,R(j.$t("modifiers.followSpace")),1),me(x("select",{"onUpdate:modelValue":H[57]||(H[57]=O=>P(t).config.emitterFollowSpace=O),class:"inp"},[x("option",C9,R(j.$t("modifiers.localSpace")),1),x("option",A9,R(j.$t("modifiers.worldSpace")),1)],512),[[St,P(t).config.emitterFollowSpace]])])]),x("label",T9,[x("span",null,R(j.$t("modifiers.moveDirection")),1),me(x("select",{"onUpdate:modelValue":H[58]||(H[58]=O=>P(t).config.emitterFollowDirection=O),class:"inp"},[x("option",E9,R(j.$t("modifiers.forward")),1),x("option",_9,R(j.$t("modifiers.reverse")),1)],512),[[St,P(t).config.emitterFollowDirection]])]),Ae(Ue,{label:j.$t("modifiers.followOffset"),min:0,max:1,step:.01,modelValue:P(t).config.emitterFollowOffset,"onUpdate:modelValue":H[59]||(H[59]=O=>P(t).config.emitterFollowOffset=O)},null,8,["label","modelValue"]),x("div",M9,R(j.$t("modifiers.followSpaceHint")),1)],64)):P(t).config.emitterFollowMode==="bone"?(Q(),te(_e,{key:1},[P(v)?(Q(),te("div",P9,[bt(R(j.$t("modifiers.followTarget")),1),x("strong",null,R(P(v).spine.name)+" / "+R(P(v).boneName),1)])):(Q(),te("div",I9,R(j.$t("modifiers.noValidBone")),1)),P(g)&&(!P(v)||P(g).spine.id!==P(v).spine.id||P(g).boneName!==P(v).boneName)?(Q(),te("button",{key:2,class:"bone-follow-rebind",onClick:H[60]||(H[60]=O=>P(I)(P(t).config))},R(P(v)?j.$t("modifiers.rebind"):j.$t("modifiers.bind"))+R(j.$t("modifiers.selectedBoneLabel"))+R(P(g).spine.name)+" / "+R(P(g).boneName),1)):Ce("",!0),P(v)?(Q(),te(_e,{key:3},[x("label",k9,[x("span",null,R(j.$t("modifiers.followSpace")),1),me(x("select",{"onUpdate:modelValue":H[61]||(H[61]=O=>P(t).config.emitterFollowSpace=O),class:"inp"},[x("option",R9,R(j.$t("modifiers.boneLocalSpace")),1),x("option",F9,R(j.$t("modifiers.boneWorldSpace")),1)],512),[[St,P(t).config.emitterFollowSpace]])]),x("div",L9,[x("label",D9,[x("span",null,R(j.$t("modifiers.offsetX")),1),me(x("input",{"onUpdate:modelValue":H[62]||(H[62]=O=>P(t).config.emitterFollowBoneOffsetX=O),type:"number",step:"1",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneOffsetX,void 0,{number:!0}]])]),x("label",O9,[x("span",null,R(j.$t("modifiers.offsetY")),1),me(x("input",{"onUpdate:modelValue":H[63]||(H[63]=O=>P(t).config.emitterFollowBoneOffsetY=O),type:"number",step:"1",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneOffsetY,void 0,{number:!0}]])])]),x("div",N9,[x("label",$9,[x("span",null,R(j.$t("modifiers.rotationOffset")),1),me(x("input",{"onUpdate:modelValue":H[64]||(H[64]=O=>P(t).config.emitterFollowBoneRotation=O),type:"number",step:"1",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneRotation,void 0,{number:!0}]])]),x("label",B9,[x("span",null,R(j.$t("modifiers.scaleOffsetX")),1),me(x("input",{"onUpdate:modelValue":H[65]||(H[65]=O=>P(t).config.emitterFollowBoneScaleX=O),type:"number",step:"0.05",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneScaleX,void 0,{number:!0}]])]),x("label",U9,[x("span",null,R(j.$t("modifiers.scaleOffsetY")),1),me(x("input",{"onUpdate:modelValue":H[66]||(H[66]=O=>P(t).config.emitterFollowBoneScaleY=O),type:"number",step:"0.05",class:"inp"},null,512),[[Je,P(t).config.emitterFollowBoneScaleY,void 0,{number:!0}]])])]),x("div",V9,R(j.$t("modifiers.boneFollowHint")),1)],64)):Ce("",!0)],64)):Ce("",!0)])):Ce("",!0)]),x("div",X9,[x("label",Y9,[me(x("input",{type:"checkbox","onUpdate:modelValue":H[67]||(H[67]=O=>P(t).config.collision=O)},null,512),[[Ct,P(t).config.collision]]),H[92]||(H[92]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableCollision")),1)]),P(t).config.collision?(Q(),te("div",z9,[x("div",j9,R(j.$t("modifiers.collisionObjects")),1),x("div",H9,[(Q(!0),te(_e,null,Pt(P(b),O=>(Q(),te("span",{key:O.id,class:Ie(["collision-filter-tag",{disabled:!O.enabled}]),title:O.enabled?O.name:j.$t("modifiers.colliderDisabled",{name:O.name})},[x("span",null,R(O.name),1),x("button",{type:"button","aria-label":j.$t("modifiers.clearCollider",{name:O.name}),onClick:U=>P(T)(O.id)},"×",8,W9)],10,G9))),128)),x("button",{type:"button",class:Ie(["collision-filter-add",{active:P(y)}]),disabled:P(w).length===0,title:P(w).length?j.$t("modifiers.addCollider"):j.$t("modifiers.noAvailableColliders"),onClick:H[68]||(H[68]=O=>y.value=!P(y))},"+",10,q9)]),P(b).length===0?(Q(),te("div",K9,R(j.$t("modifiers.noCollidersSelected")),1)):Ce("",!0),P(y)&&P(w).length?(Q(),te("div",J9,[(Q(!0),te(_e,null,Pt(P(w),O=>(Q(),te("button",{key:O.id,type:"button",onClick:U=>P(C)(O.id)},[x("span",null,R(O.name),1),x("small",null,R(O.enabled?j.$t("modifiers.available"):j.$t("modifiers.disabled")),1)],8,Z9))),128))])):Ce("",!0),x("div",Q9,R(j.$t("modifiers.collisionHint")),1)])):Ce("",!0)]),x("div",eK,[x("label",tK,[me(x("input",{"onUpdate:modelValue":H[69]||(H[69]=O=>P(t).config.eventEnabled=O),type:"checkbox"},null,512),[[Ct,P(t).config.eventEnabled]]),H[93]||(H[93]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(j.$t("modifiers.enableSubEmitter")),1)]),P(t).config.eventEnabled?(Q(),te("div",iK,[(Q(!0),te(_e,null,Pt(P(t).config.events,(O,U)=>(Q(),te("div",{key:O.id,class:"event-card"},[x("div",nK,[me(x("select",{"onUpdate:modelValue":W=>O.event=W,class:"inp event-select",title:j.$t("modifiers.triggerTiming")},[x("option",rK,R(j.$t("modifiers.birth")),1),x("option",oK,R(j.$t("modifiers.death")),1),x("option",aK,R(j.$t("modifiers.collision")),1)],8,sK),[[St,O.event]]),me(x("select",{"onUpdate:modelValue":W=>O.targetSystemId=W,class:"inp event-target",title:j.$t("modifiers.chooseTarget")},[x("option",cK,R(j.$t("modifiers.noTarget")),1),(Q(!0),te(_e,null,Pt(L.value,W=>(Q(),te("option",{key:W.id,value:W.id},R(W.config.name||`ParticleSystem${W.id}`),9,dK))),128))],8,lK),[[St,O.targetSystemId,void 0,{number:!0}]]),x("button",{type:"button",class:"event-remove",title:j.$t("modifiers.deleteSubEmitter"),onClick:W=>Z(U)},"✕",8,uK)]),x("label",hK,[x("span",null,R(j.$t("modifiers.probability")),1),me(x("input",{"onUpdate:modelValue":W=>O.probability=W,type:"number",min:"0",max:"1",step:"0.01",class:"inp"},null,8,fK),[[Je,O.probability,void 0,{number:!0}]])]),O.event==="collision"?(Q(),te("label",pK,[x("span",null,R(j.$t("modifiers.collisionLimit")),1),x("input",{value:O.collisionLimit??1,type:"number",min:"1",max:"4",step:"1",class:"inp",onInput:W=>se(O,W)},null,40,mK)])):Ce("",!0),x("div",gK,[x("span",null,R(j.$t("modifiers.inherit")),1),x("button",{type:"button",class:"inherit-trigger",onPointerdown:H[70]||(H[70]=tt(()=>{},["stop"])),onClick:tt(W=>ve(O,W),["stop"])},[x("span",bK,R(z(O)),1),H[94]||(H[94]=x("i",null,"⌄",-1))],40,vK)]),K(O,"color")?(Q(),te("label",yK,[x("span",null,R(j.$t("modifiers.colorInheritMode")),1),me(x("select",{"onUpdate:modelValue":W=>O.colorInheritMode=W,class:"inp"},[x("option",wK,R(j.$t("modifiers.add")),1),x("option",SK,R(j.$t("modifiers.replace")),1)],8,xK),[[St,O.colorInheritMode]])])):Ce("",!0)]))),128)),x("button",{type:"button",class:"event-add",onClick:q},R(j.$t("modifiers.addSubEmitter")),1)])):Ce("",!0)])],512),[[Fi,!P(S).mods]])]),(Q(),It(u1,{to:"body"},[F.value&&$.value?(Q(),te("div",{key:0,class:"inherit-menu",style:Vt({left:`${F.value.left}px`,top:`${F.value.top}px`,width:`${F.value.width}px`}),onPointerdown:H[73]||(H[73]=tt(()=>{},["stop"]))},[x("button",{type:"button",class:"inherit-option",onClick:H[71]||(H[71]=O=>oe($.value))},[x("span",CK,R(X($.value).length===0?"✓":""),1),bt(R(j.$t("modifiers.inheritNone")),1)]),x("button",{type:"button",class:"inherit-option",onClick:H[72]||(H[72]=O=>le($.value))},[x("span",AK,R(X($.value).length===4?"✓":""),1),bt(R(j.$t("modifiers.inheritAll")),1)]),H[95]||(H[95]=x("div",{class:"inherit-divider"},null,-1)),(Q(!0),te(_e,null,Pt(N.value,O=>(Q(),te("button",{key:O.key,type:"button",class:"inherit-option",onClick:U=>J($.value,O.key)},[x("span",EK,R(K($.value,O.key)?"✓":""),1),bt(R(O.label),1)],8,TK))),128))],36)):Ce("",!0)]))],64))}}),MK=li(_K,[["__scopeId","data-v-f5ccc52c"]]),PK={class:"group"},IK={class:"caret"},kK=["title"],RK={class:"group-body export-settings"},FK={class:"export-field"},LK={class:"export-field"},DK={class:"export-field"},OK={value:"linear"},NK={value:"bezier"},$K={class:"export-help"},BK={key:0,class:"export-help"},UK={class:"export-fps-row"},VK={class:"export-field export-fps-field"},XK={class:"export-checkbox"},YK={class:"export-help"},zK={class:"export-switches"},jK={class:"switch-row export-switch"},HK={class:"switch-row export-switch"},GK={class:"switch-row export-switch export-switch-last"},WK=qt({__name:"ExportSettingsSection",setup(n){const{exportSettings:e,collapsed:t,toggle:i,resetModule:s,normalizeExportFps:r,select:o}=oo();return(a,c)=>(Q(),te("div",PK,[x("div",{class:"group-head",onClick:c[1]||(c[1]=l=>P(i)("export"))},[x("span",IK,R(P(t).export?"▸":"▾"),1),x("span",null,R(a.$t("export.title")),1),x("button",{class:"group-reset",title:a.$t("export.reset"),onClick:c[0]||(c[0]=tt(l=>P(s)("export"),["stop"]))},R(a.$t("common.reset")),9,kK)]),me(x("div",RK,[x("label",FK,[x("span",null,R(a.$t("export.imagesPath")),1),me(x("input",{"onUpdate:modelValue":c[2]||(c[2]=l=>P(e).imagesPath=l),class:"inp export-input",type:"text",placeholder:"./images/"},null,512),[[Je,P(e).imagesPath,void 0,{trim:!0}]])]),x("label",LK,[x("span",null,R(a.$t("export.spineVersion")),1),me(x("select",{"onUpdate:modelValue":c[3]||(c[3]=l=>P(e).spineVersion=l),class:"inp export-input"},[...c[11]||(c[11]=[k_('',5)])],512),[[St,P(e).spineVersion]])]),x("label",DK,[x("span",null,R(a.$t("export.keyframeCurve")),1),me(x("select",{"onUpdate:modelValue":c[4]||(c[4]=l=>P(e).keyframeCurve=l),class:"inp export-input"},[x("option",OK,R(a.$t("export.linear")),1),x("option",NK,R(a.$t("export.smoothBezier")),1)],512),[[St,P(e).keyframeCurve]])]),x("div",$K,R(a.$t("export.bezierHelp")),1),P(e).spineVersion==="3.8"?(Q(),te("div",BK,R(a.$t("export.spine38Help")),1)):Ce("",!0),x("div",UK,[x("label",VK,[x("span",null,R(a.$t("export.fps")),1),me(x("input",{"onUpdate:modelValue":c[5]||(c[5]=l=>P(e).fps=l),class:"inp export-input",type:"number",min:"1",max:"240",step:"1",onChange:c[6]||(c[6]=(...l)=>P(r)&&P(r)(...l))},null,544),[[Je,P(e).fps,void 0,{number:!0}]])]),x("label",XK,[me(x("input",{"onUpdate:modelValue":c[7]||(c[7]=l=>P(e).omitFps=l),type:"checkbox"},null,512),[[Ct,P(e).omitFps]]),bt(R(a.$t("export.omitFps")),1)])]),x("div",YK,R(a.$t("export.fpsHelp")),1),x("div",zK,[x("label",jK,[me(x("input",{"onUpdate:modelValue":c[8]||(c[8]=l=>P(e).integerFrameAlignment=l),type:"checkbox"},null,512),[[Ct,P(e).integerFrameAlignment]]),c[12]||(c[12]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(a.$t("export.integerFrames")),1)]),x("label",HK,[me(x("input",{"onUpdate:modelValue":c[9]||(c[9]=l=>P(e).bonePool=l),type:"checkbox"},null,512),[[Ct,P(e).bonePool]]),c[13]||(c[13]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(a.$t("export.bonePool")),1)]),x("label",GK,[me(x("input",{"onUpdate:modelValue":c[10]||(c[10]=l=>P(e).excludeEmptyAnimations=l),type:"checkbox"},null,512),[[Ct,P(e).excludeEmptyAnimations]]),c[14]||(c[14]=x("span",{class:"switch-ui"},null,-1)),x("span",null,R(a.$t("export.excludeEmpty")),1)])])],512),[[Fi,!P(t).export]])]))}}),qK=li(WK,[["__scopeId","data-v-63cfb71e"]]),KK={class:"spine-export-actions"},JK=["disabled","title"],ZK=["disabled","title"],QK=["disabled","title"],eJ={key:0},tJ=["href","title"],iJ=["title"],nJ=["href"],sJ=qt({__name:"ParticleExportFooter",setup(n){const{exportSettings:e,exportBusy:t,exportTarget:i,exportMessage:s,exportError:r,connectorPairUrl:o,connectorStatusText:a,connectorStatusClass:c,connectorReady:l,connectorAuthorizationUrl:d,connectorDisabledReason:u,connectorButtonTitle:h,refreshConnectorHealth:f,exportSpineJson:p,exportSpineProject:m,exportSpineImages:g}=oo();return(v,y)=>(Q(),te(_e,null,[x("div",KK,[x("button",{type:"button",class:"export-spine-json",disabled:P(t),title:P(t)?v.$t("export.baking"):v.$t("export.exportJsonTitle",{version:P(e).spineVersion}),onClick:y[0]||(y[0]=(...b)=>P(p)&&P(p)(...b))},R(P(t)&&P(i)==="json"?v.$t("export.preparing"):v.$t("export.exportJson")),9,JK),x("button",{type:"button",class:"export-spine-images",disabled:P(t),title:v.$t("export.exportImagesTitle"),onClick:y[1]||(y[1]=(...b)=>P(g)&&P(g)(...b))},R(P(t)&&P(i)==="images"?v.$t("export.organizingImages"):v.$t("export.exportImages")),9,ZK),x("button",{type:"button",class:"export-spine-project",disabled:P(t)||!P(l),title:P(h),onClick:y[2]||(y[2]=(...b)=>P(m)&&P(m)(...b))},[x("span",null,R(P(t)&&P(i)==="spine"?v.$t("export.generatingProject"):v.$t("export.exportSpine")),1),!P(t)&&P(u)?(Q(),te("small",eJ,R(P(u)),1)):Ce("",!0)],8,QK)]),x("div",{class:Ie(["connector-status",P(c)])},[y[5]||(y[5]=x("span",{class:"connector-dot"},null,-1)),bt(R(P(a))+" ",1),P(d)?(Q(),te("a",{key:0,href:P(d),target:"_blank",rel:"noopener",title:v.$t("export.authorizeTitle")},R(v.$t("export.authorize")),9,tJ)):Ce("",!0),x("button",{type:"button",title:v.$t("export.refreshConnector"),onClick:y[3]||(y[3]=(...b)=>P(f)&&P(f)(...b))},R(v.$t("export.refresh")),9,iJ)],2),P(s)?(Q(),te("div",{key:0,class:Ie(["export-message",{error:P(r)}])},[bt(R(P(s))+" ",1),P(o)?(Q(),te("a",{key:0,href:P(o),target:"_blank",rel:"noopener",onClick:y[4]||(y[4]=b=>o.value="")},R(v.$t("export.authorize")),9,nJ)):Ce("",!0)],2)):Ce("",!0)],64))}}),rJ=li(sJ,[["__scopeId","data-v-33af5045"]]),oJ={class:"panel"},aJ={class:"panel-header"},lJ={class:"panel-scroll"},cJ=qt({__name:"ParticlePanel",setup(n){const{activeObjectType:e,sys:t}=MX();return(i,s)=>(Q(),te("div",oJ,[x("div",aJ,[x("span",null,R(i.$t("app.title")),1)]),x("div",lJ,[Ae(BX),Ae(uj),P(e)==="particle"&&P(t)?(Q(),te(_e,{key:0},[Ae(dH),Ae(OH),Ae(gq),Ae(MK),Ae(qK)],64)):Ce("",!0)]),Ae(rJ)]))}}),dJ=li(cJ,[["__scopeId","data-v-14a55de6"]]),da=n=>Math.max(0,Number(n)||0);function uJ(n,e){const t=Math.max(1,e),i=new Map(n.map(y=>[y.id,y])),s=new Set;for(const y of n)if(y.config.eventEnabled)for(const b of y.config.events||[])b.targetSystemId>0&&b.targetSystemId!==y.id&&i.has(b.targetSystemId)&&s.add(b.targetSystemId);const r=new Map;for(const y of n)if(y.config.eventEnabled)for(const b of y.config.events||[]){if(b.targetSystemId<=0||b.targetSystemId===y.id||!i.has(b.targetSystemId))continue;const w=r.get(b.targetSystemId);w?w.push({parent:y,rule:b}):r.set(b.targetSystemId,[{parent:y,rule:b}])}const o=y=>da(y.delay),a=y=>da(y.delay),c=y=>{const b=o(y);return y.mode!=="stream"?b:y.streamBehavior==="loop"?b+Wn(y,t).total/t:b+Math.max(1/t,Number(y.duration)||0)},l=y=>{const b=da(y.lifeMin),w=da(y.lifeMax);return y.lifeMode==="fixed"?b:Math.min(b,w)},d=y=>{const b=da(y.lifeMin),w=da(y.lifeMax);return y.lifeMode==="fixed"?b:Math.max(b,w)},u=new Map,h=new Map,f=new Set,p=new Set,m=y=>{const b=u.get(y.id);if(b!=null)return b;if(f.has(y.id))return o(y.config);f.add(y.id);let w=1/0;for(const{parent:C,rule:T}of r.get(y.id)||[]){const S=s.has(C.id)?m(C)+a(C.config):o(C.config),E=T.event==="death"?l(C.config):0;w=Math.min(w,S+E)}return Number.isFinite(w)||(w=o(y.config)),f.delete(y.id),u.set(y.id,w),w},g=y=>{const b=h.get(y.id);if(b!=null)return b;if(p.has(y.id))return c(y.config);p.add(y.id);let w=-1/0;for(const{parent:C,rule:T}of r.get(y.id)||[]){const S=s.has(C.id)?g(C)+a(C.config):c(C.config),E=T.event==="birth"?0:d(C.config);w=Math.max(w,S+E)}return Number.isFinite(w)||(w=c(y.config)),p.delete(y.id),h.set(y.id,w),w},v=new Map;for(const y of s){const b=i.get(y);if(!b)continue;const w=m(b),C=g(b);v.set(y,{firstTrigger:w,lastTrigger:C,end:Math.max(w,C)+d(b.config)})}return v}const hJ={class:"timeline"},fJ={class:"tl-controls"},pJ=["title"],mJ=["title"],gJ=["title"],vJ=["title"],bJ=["title"],yJ=["title","aria-label"],xJ={class:"tl-ab-loop"},wJ=["title"],SJ={class:"tl-ab-title"},CJ=["title"],AJ=["max","aria-label","onKeydown"],TJ=["title"],EJ=["min","max","aria-label","onKeydown"],_J={class:"tl-frame"},MJ={class:"tl-legend"},PJ=["disabled","title"],IJ={class:"tl-animation-menu-title"},kJ=["onClick"],RJ={key:0},FJ={class:"tl-animation-editor"},LJ=["aria-label"],DJ=["title"],OJ={key:0,class:"tl-animation-error"},NJ={class:"tl-animation-actions"},$J=["disabled"],BJ={key:1,class:"tl-animation-hint"},UJ={class:"tl-anim tl-spine-preview"},VJ=["value","disabled"],XJ={value:""},YJ=["value"],zJ={class:"tl-zoom"},jJ={class:"tl-ticks"},HJ={class:"tl-ticklabel"},GJ={class:"tl-lanes"},WJ=["onPointerdown"],qJ={class:"lane-name"},KJ=["title","onPointerdown"],JJ=["title","onPointerdown"],ZJ=["title","onPointerdown"],QJ={class:"lane-name"},eZ={key:0,class:"tl-empty"},tZ=qt({__name:"Timeline",setup(n){const e=Go(),{t}=fn(),i=$e(null),s=$e(null),r=$e(!1),o=$e("animation"),a=$e("");ha(()=>{(!Array.isArray(e.timeline.animations)||!e.timeline.animations.length)&&(e.timeline.animations=["animation"]),e.timeline.animations.includes(e.timeline.animation)||(e.timeline.animation=e.timeline.animations[0]);for(const O of e.systems)(!O.animation||!e.timeline.animations.includes(O.animation))&&(O.animation=e.timeline.animations[0])});const c=Fe(()=>e.systems.find(O=>O.id===e.activeId)||null);function l(){c.value&&(r.value=!r.value,o.value=c.value.animation,a.value="")}function d(O){const U=c.value;U&&(e.setSystemAnimation(U.id,O),o.value=O,a.value="")}function u(){const O=e.addAnimation();o.value=O,a.value=""}function h(){var W;const O=((W=c.value)==null?void 0:W.animation)||e.timeline.animation,U=o.value.trim();if(!U){a.value=t("timeline.animationNameEmpty");return}if(U!==O&&e.timeline.animations.includes(U)){a.value=t("timeline.animationNameDuplicate");return}if(!e.renameAnimation(O,U)){a.value=t("timeline.animationRenameFailed");return}o.value=U,a.value=""}function f(){var W,ee;const O=((W=c.value)==null?void 0:W.animation)||e.timeline.animation;if(!e.removeAnimation(O)){a.value=t("timeline.keepOneAnimation");return}const U=((ee=c.value)==null?void 0:ee.animation)||e.timeline.animation;o.value=U,a.value=""}function p(O){var U;(U=s.value)!=null&&U.contains(O.target)||(r.value=!1)}Sn(()=>document.addEventListener("pointerdown",p)),eo(()=>document.removeEventListener("pointerdown",p));const m=Fe(()=>Math.max(1,e.timeline.fps||30)),g=$e(Math.max(120,e.timeline.totalFrames)),v=$e({}),y=$e({}),b=$e({}),w=$e({}),C=$e(String(e.timeline.playbackStart)),T=$e(String(e.timeline.playbackEnd));ei(()=>e.timeline.playbackStart,O=>{C.value=String(O)}),ei(()=>e.timeline.playbackEnd,O=>{T.value=String(O)});const S=Fe(()=>e.timeline.totalFrames);ei(S,O=>{O>g.value&&(g.value=Math.min(2e3,O))});const E=Fe(()=>g.value<=30?t("timeline.zoomIn"):g.value>=300?t("timeline.zoomOut"):t("timeline.zoomFit")),_=Fe(()=>e.spines.filter(O=>O.selectedAnimation&&O.animations.some(U=>U.name===O.selectedAnimation&&U.duration>0))),I=Fe(()=>(e.activeObjectType==="spine"?e.spines.find(U=>U.id===e.activeObjectId&&U.animations.length):null)||e.spines.find(U=>U.animations.length)||null);function M(O){const U=I.value;U&&(U.selectedAnimation=O.target.value,e.recalcTotalFrames(),e.timeline.frame=0)}function k(){e.setPlaybackStart(Number(C.value)),C.value=String(e.timeline.playbackStart)}function B(){e.setPlaybackEnd(Number(T.value)),T.value=String(e.timeline.playbackEnd)}function D(){var U;const O=((U=i.value)==null?void 0:U.clientWidth)||600;return g.value/O}const G=Fe(()=>{const O=[],U=g.value;let W=1;g.value<=10?W=1:g.value<=50?W=5:g.value<=200?W=10:g.value<=500?W=50:W=100;for(let ee=0;ee<=U;ee+=W)O.push({f:ee,px:ee/D()});return O}),V=Fe(()=>e.timeline.frame/D()),Y=Fe(()=>Xa(e.systems)),L=Fe(()=>uJ(e.systems,m.value));function N(O){return Y.value.has(O.id)}function F(O){var W;return(N(O)?((W=L.value.get(O.id))==null?void 0:W.firstTrigger)??0:0)*m.value/D()+4}function $(O){var ee;const U=O.config;if(N(O)){const ne=((ee=L.value.get(O.id))==null?void 0:ee.firstTrigger)??0,ue=v.value[O.id]??Math.max(0,Number(U.delay)||0);return(ne+ue)*m.value/D()}return(v.value[O.id]??Math.max(0,Number(U.delay)||0))*m.value/D()}function X(O){const U=O.config,W=Math.max(0,Number(U.lifeMin)||0),ee=Math.max(0,Number(U.lifeMax)||0);return U.lifeMode==="fixed"?W:Math.max(W,ee)}function z(O){if(N(O)){const U=L.value.get(O.id),W=(U==null?void 0:U.firstTrigger)??0,ee=(U==null?void 0:U.end)??W;return Math.max(0,ee-W)*m.value/D()}return J(O)}function K(O){if(N(O)||O.config.mode!=="stream")return 0;if(O.config.streamBehavior==="loop"){const W=O.config;return(b.value[O.id]??Wn(W,m.value).loop)/D()}return(y.value[O.id]??Math.max(1/m.value,Number(O.config.duration)||1))*m.value/D()}function J(O){if(N(O))return z(O);const U=O.config;return U.mode==="stream"&&U.streamBehavior==="loop"?le(O)+K(O)+ve(O):K(O)+X(O)*m.value/D()}function oe(O){const U=O.config;return U.mode==="stream"&&U.streamBehavior==="loop"}function le(O){return oe(O)?Wn(O.config,m.value).start/D():0}function ve(O){return oe(O)?Wn(O.config,m.value).end/D():0}function Se(O){var U;return((U=O.animations.find(W=>W.name===O.selectedAnimation))==null?void 0:U.duration)||0}function fe(O){return(w.value[O.id]??Math.max(0,Number(O.timeOffset)||0))*m.value/D()}function be(O){return Se(O)*m.value/D()}function q(O){const U=O.deltaY<0?.8:1.25;let W=g.value*U;W=Math.min(2e3,Math.max(10,W)),g.value=Math.round(W)}function Z(O){const U=i.value;e.pause();const W=ne=>{const ue=U.getBoundingClientRect(),xe=Math.floor((ne.clientX-ue.left)/ue.width*g.value);e.timeline.frame=Math.max(0,Math.min(xe,S.value-1))};W(O);const ee=()=>{window.removeEventListener("pointermove",W),window.removeEventListener("pointerup",ee)};window.addEventListener("pointermove",W),window.addEventListener("pointerup",ee)}function se(O,U){O.stopPropagation();const W=O.clientX,ee=Math.max(0,Number(U.config.delay)||0),ne=D()/m.value,ue=Be=>{const de=(Be.clientX-W)*ne,ge=Math.max(0,Math.min(ee+de,600));v.value[U.id]=Math.round(ge*m.value)/m.value},xe=Be=>{window.removeEventListener("pointermove",ue),window.removeEventListener("pointerup",ye),window.removeEventListener("pointercancel",Ne);const de=v.value[U.id];delete v.value[U.id],Be&&de!=null&&de!==ee&&(U.config.delay=de)},ye=()=>xe(!0),Ne=()=>xe(!1);window.addEventListener("pointermove",ue),window.addEventListener("pointerup",ye),window.addEventListener("pointercancel",Ne)}function j(O,U){var Le;O.stopPropagation();const W=oe(U),ee=Math.max(0,Number(U.config.duration)||0),ne=Wn(U.config,m.value).loop,ue=D()/m.value,xe=((Le=O.currentTarget.closest(".lane-bar"))==null?void 0:Le.getBoundingClientRect().left)??O.clientX,ye=le(U);let Ne=!1;const Be=Ee=>{if(Ne=!0,W){const Ze=Math.min(1800,Math.max(1,Math.round((Ee.clientX-xe-ye)/D())));b.value[U.id]=Ze}else{const Ze=Math.max(1/m.value,Math.min((Ee.clientX-xe)*ue,600));y.value[U.id]=Math.round(Ze*m.value)/m.value}},de=Ee=>{window.removeEventListener("pointermove",Be),window.removeEventListener("pointerup",ge),window.removeEventListener("pointercancel",Ge);const Ze=y.value[U.id],Te=b.value[U.id];delete y.value[U.id],delete b.value[U.id],Ee&&Ne&&W&&Te!=null&&Te!==ne?U.config.loopDurationFrames=Te:Ee&&Ne&&!W&&Ze!=null&&Ze!==ee&&(U.config.duration=Ze)},ge=()=>de(!0),Ge=()=>de(!1);window.addEventListener("pointermove",Be),window.addEventListener("pointerup",ge),window.addEventListener("pointercancel",Ge)}function H(O,U){O.stopPropagation();const W=O.clientX,ee=Math.max(0,Number(U.timeOffset)||0),ne=D()/m.value,ue=Be=>{const de=Math.max(0,Math.min(ee+(Be.clientX-W)*ne,600));w.value[U.id]=Math.round(de*m.value)/m.value},xe=Be=>{window.removeEventListener("pointermove",ue),window.removeEventListener("pointerup",ye),window.removeEventListener("pointercancel",Ne);const de=w.value[U.id];delete w.value[U.id],Be&&de!=null&&de!==ee&&(U.timeOffset=de,e.recalcTotalFrames())},ye=()=>xe(!0),Ne=()=>xe(!1);window.addEventListener("pointermove",ue),window.addEventListener("pointerup",ye),window.addEventListener("pointercancel",Ne)}return(O,U)=>{var W,ee,ne;return Q(),te("div",hJ,[x("div",fJ,[x("button",{class:Ie(["tl-btn",{on:P(e).timeline.playing}]),onClick:U[0]||(U[0]=ue=>P(e).togglePlay()),title:P(e).timeline.playing?O.$t("timeline.pause"):O.$t("timeline.play")},R(P(e).timeline.playing?"❚❚":"▶"),11,pJ),x("button",{class:"tl-btn",onClick:U[1]||(U[1]=ue=>P(e).toStart()),title:O.$t("timeline.toStart")},"⏮",8,mJ),x("button",{class:"tl-btn",onClick:U[2]||(U[2]=ue=>P(e).previousFrame()),title:O.$t("timeline.previous")},"◀",8,gJ),x("button",{class:"tl-btn",onClick:U[3]||(U[3]=ue=>P(e).nextFrame()),title:O.$t("timeline.next")},"▶",8,vJ),x("button",{class:"tl-btn",onClick:U[4]||(U[4]=ue=>P(e).toEnd()),title:O.$t("timeline.toEnd")},"⏭",8,bJ),x("button",{class:Ie(["tl-btn",{on:P(e).timeline.loop}]),title:O.$t("timeline.continuousLoop"),"aria-label":O.$t("timeline.continuousLoop"),onClick:U[5]||(U[5]=ue=>P(e).toggleLoop())},"⟳",10,yJ),x("div",xJ,[x("button",{class:Ie(["tl-ab-toggle",{on:P(e).timeline.abLoop}]),title:O.$t("timeline.abLoop"),onClick:U[6]||(U[6]=ue=>P(e).toggleABLoop())},[x("span",null,R(O.$t("timeline.abLoopShort")),1),U[12]||(U[12]=x("i",{class:"tl-switch"},[x("b")],-1))],10,wJ),P(e).timeline.abLoop?(Q(),te("div",{key:0,class:"tl-ab-popover",onPointerdown:U[9]||(U[9]=tt(()=>{},["stop"]))},[x("div",SJ,R(O.$t("timeline.abRange")),1),x("label",{class:"tl-range",title:O.$t("timeline.playbackStart")},[U[13]||(U[13]=x("span",null,"A",-1)),me(x("input",{"onUpdate:modelValue":U[7]||(U[7]=ue=>C.value=ue),type:"number",min:"0",max:Math.max(0,P(e).timeline.playbackEnd-1),"aria-label":O.$t("timeline.startFrame"),onChange:k,onKeydown:Gr(tt(k,["prevent"]),["enter"])},null,40,AJ),[[Je,C.value]])],8,CJ),x("label",{class:"tl-range",title:O.$t("timeline.playbackEnd")},[U[14]||(U[14]=x("span",null,"B",-1)),me(x("input",{"onUpdate:modelValue":U[8]||(U[8]=ue=>T.value=ue),type:"number",min:P(e).timeline.playbackStart+1,max:Math.max(1,P(e).timeline.totalFrames-1),"aria-label":O.$t("timeline.endFrame"),onChange:B,onKeydown:Gr(tt(B,["prevent"]),["enter"])},null,40,EJ),[[Je,T.value]])],8,TJ)],32)):Ce("",!0)]),x("span",_J,R(O.$t("timeline.frameStatus",{current:P(e).timeline.frame,total:Math.max(0,P(e).timeline.totalFrames-1)})),1),x("span",MJ,[U[15]||(U[15]=x("i",{class:"legend-emission"},null,-1)),bt(R(O.$t("timeline.emission"))+" ",1),U[16]||(U[16]=x("i",{class:"legend-life"},null,-1)),bt(R(O.$t("timeline.particleLife"))+" ",1),U[17]||(U[17]=x("i",{class:"legend-spine"},null,-1)),bt(R(O.$t("timeline.spineAnimation")),1)]),x("div",{ref_key:"animationMenuRef",ref:s,class:"tl-anim tl-owner-animation"},[x("span",null,R(O.$t("timeline.ownerAnimation")),1),x("button",{class:"tl-animation-trigger",disabled:!c.value,title:O.$t("timeline.setOwnerAnimation"),onClick:tt(l,["stop"])},[x("span",null,R(((W=c.value)==null?void 0:W.animation)||P(e).timeline.animation),1),U[18]||(U[18]=x("i",null,"⌄",-1))],8,PJ),r.value?(Q(),te("div",{key:0,class:"tl-animation-menu",onPointerdown:U[11]||(U[11]=tt(()=>{},["stop"]))},[x("div",IJ,R(O.$t("timeline.chooseOwnerAnimation")),1),(Q(!0),te(_e,null,Pt(P(e).timeline.animations,ue=>{var xe,ye;return Q(),te("button",{key:ue,class:Ie(["tl-animation-option",{on:((xe=c.value)==null?void 0:xe.animation)===ue}]),onClick:Ne=>d(ue)},[x("span",null,R(ue),1),((ye=c.value)==null?void 0:ye.animation)===ue?(Q(),te("i",RJ,"✓")):Ce("",!0)],10,kJ)}),128)),x("div",FJ,[me(x("input",{"onUpdate:modelValue":U[10]||(U[10]=ue=>o.value=ue),class:"tl-animation-name",maxlength:"64","aria-label":O.$t("timeline.animationName"),onKeydown:Gr(h,["enter"])},null,40,LJ),[[Je,o.value]]),x("button",{title:O.$t("timeline.renameAnimation"),onClick:h},R(O.$t("timeline.rename")),9,DJ)]),a.value?(Q(),te("div",OJ,R(a.value),1)):Ce("",!0),x("div",NJ,[x("button",{onClick:u},R(O.$t("timeline.newAnimation")),1),x("button",{disabled:P(e).timeline.animations.length<=1,onClick:f},R(O.$t("common.delete")),9,$J)]),P(e).timeline.animations.length<=1?(Q(),te("div",BJ,R(O.$t("timeline.keepOneAnimation")),1)):Ce("",!0)],32)):Ce("",!0)],512),x("label",UJ,[bt(R(O.$t("timeline.spinePreview"))+" ",1),x("select",{class:"tl-sel",value:((ee=I.value)==null?void 0:ee.selectedAnimation)||"",disabled:!I.value,onChange:M},[x("option",XJ,R(I.value?O.$t("timeline.none"):O.$t("timeline.noSpineAnimation")),1),(Q(!0),te(_e,null,Pt(((ne=I.value)==null?void 0:ne.animations)||[],ue=>(Q(),te("option",{key:ue.name,value:ue.name},R(ue.name)+"("+R(ue.duration.toFixed(2))+"s) ",9,YJ))),128))],40,VJ)]),x("span",zJ,R(E.value),1)]),x("div",{class:"tl-viewport",ref_key:"vpRef",ref:i,onWheel:tt(q,["prevent"]),onPointerdown:Z},[x("div",jJ,[(Q(!0),te(_e,null,Pt(G.value,ue=>(Q(),te("div",{key:ue.f,class:"tl-tickline",style:Vt({left:ue.px+"px"})},[x("span",HJ,R(ue.f)+"f",1)],4))),128))]),x("div",{class:"tl-playhead",style:Vt({left:V.value+"px"})},null,4),x("div",GJ,[(Q(!0),te(_e,null,Pt(P(e).systems,(ue,xe)=>(Q(),te("div",{key:ue.id,class:"tl-lane"},[x("span",{class:Ie(["lane-ico",{"sub-lane-ico":N(ue)}]),style:Vt({left:F(ue)+"px"})},"●",6),x("div",{class:Ie(["lane-bar",{"sub-emitter-bar":N(ue)}]),style:Vt({left:$(ue)+"px",width:z(ue)+"px"}),onPointerdown:tt(ye=>se(ye,ue),["stop"])},[x("span",qJ,R(ue.config.name||O.$t("timeline.systemName",{index:xe+1})),1),x("span",{class:Ie(["bar-life",{"loop-life":!N(ue)&&oe(ue)}]),style:Vt({width:J(ue)+"px"})},null,6),!N(ue)&&oe(ue)?(Q(),te(_e,{key:0},[le(ue)?(Q(),te("span",{key:0,class:"bar-loop-transition bar-loop-start",style:Vt({width:le(ue)+"px"})},null,4)):Ce("",!0),x("span",{class:"bar-emission bar-loop",style:Vt({left:le(ue)+"px",width:K(ue)+"px"})},[x("span",{class:"bar-handle",title:O.$t("timeline.dragLoopDuration"),onPointerdown:tt(ye=>j(ye,ue),["stop"])},null,40,KJ)],4),ve(ue)?(Q(),te("span",{key:1,class:"bar-loop-transition bar-loop-end",style:Vt({left:le(ue)+K(ue)+"px",width:ve(ue)+"px"})},null,4)):Ce("",!0)],64)):!N(ue)&&ue.config.mode==="stream"?(Q(),te("span",{key:1,class:"bar-emission",style:Vt({width:K(ue)+"px"})},[x("span",{class:"bar-handle",title:O.$t("timeline.dragEmissionDuration"),onPointerdown:tt(ye=>j(ye,ue),["stop"])},null,40,JJ)],4)):Ce("",!0)],46,WJ)]))),128)),(Q(!0),te(_e,null,Pt(_.value,ue=>(Q(),te("div",{key:`spine-${ue.id}`,class:"tl-lane spine-lane"},[U[19]||(U[19]=x("span",{class:"lane-ico spine-ico"},"◆",-1)),x("div",{class:"spine-bar",style:Vt({left:fe(ue)+"px",width:be(ue)+"px"}),title:O.$t("timeline.dragSpineStart"),onPointerdown:tt(xe=>H(xe,ue),["stop"])},[x("span",QJ,R(ue.name)+" · "+R(ue.selectedAnimation),1)],44,ZJ)]))),128)),!P(e).systems.length&&!_.value.length?(Q(),te("div",eZ,R(O.$t("timeline.noAnimationData")),1)):Ce("",!0)])],544)])}}}),iZ=li(tZ,[["__scopeId","data-v-6213c4a4"]]),nZ={class:"transfer-heading"},sZ={key:0},rZ={class:"transfer-detail"},oZ=qt({__name:"TransferProgressOverlay",setup(n){const e=$e(null);return ei(()=>di.visible,async t=>{var i;t&&(await zu(),(i=e.value)==null||i.focus({preventScroll:!0}))},{flush:"post"}),(t,i)=>(Q(),It(G_,{name:"transfer-fade"},{default:ju(()=>[P(di).visible?(Q(),te("div",{key:0,ref_key:"overlayElement",ref:e,class:"transfer-overlay",role:"dialog","aria-modal":"true","aria-live":"polite",tabindex:"-1",onPointerdown:i[0]||(i[0]=tt(()=>{},["stop","prevent"])),onPointerup:i[1]||(i[1]=tt(()=>{},["stop","prevent"])),onClick:i[2]||(i[2]=tt(()=>{},["stop","prevent"])),onDblclick:i[3]||(i[3]=tt(()=>{},["stop","prevent"])),onContextmenu:i[4]||(i[4]=tt(()=>{},["stop","prevent"])),onWheel:i[5]||(i[5]=tt(()=>{},["stop","prevent"])),onKeydown:i[6]||(i[6]=tt(()=>{},["stop","prevent"]))},[x("div",{class:Ie(["transfer-dialog",{failed:P(di).failed}])},[x("div",nZ,[x("span",null,R(P(di).title),1),P(di).indeterminate?Ce("",!0):(Q(),te("strong",sZ,R(Math.round(P(di).progress))+"%",1))]),x("div",{class:Ie(["transfer-track",{indeterminate:P(di).indeterminate}])},[x("div",{class:"transfer-bar",style:Vt(P(di).indeterminate?void 0:{width:`${P(di).progress}%`})},null,4)],2),x("div",rZ,R(P(di).detail),1)],2)],544)):Ce("",!0)]),_:1}))}}),aZ=li(oZ,[["__scopeId","data-v-592b922e"]]),lZ=["inert","aria-hidden"],cZ={class:"right"},dZ={class:"stage-area"},uZ=["title"],hZ=qt({__name:"App",setup(n){const e=Go();_B(e);const t=$e(360),i=$e(180);function s(o){o.preventDefault();const a=l=>{const d=e.settings.parameterPanelOnRight?window.innerWidth-l.clientX:l.clientX,u=Math.max(240,Math.min(d,window.innerWidth-200));t.value=u},c=()=>{window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",c)};window.addEventListener("pointermove",a),window.addEventListener("pointerup",c)}function r(o){o.preventDefault();const a=o.clientY,c=i.value,l=u=>{const h=Math.max(80,Math.min(c+(a-u.clientY),window.innerHeight-200));i.value=h},d=()=>{window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",d)};window.addEventListener("pointermove",l),window.addEventListener("pointerup",d)}return(o,a)=>(Q(),te(_e,null,[x("div",{class:Ie(["layout",{"panel-right":P(e).settings.parameterPanelOnRight}]),inert:P(di).visible?!0:void 0,"aria-hidden":P(di).visible?"true":void 0},[x("div",{class:"parameter-panel",style:Vt({width:t.value+"px"})},[Ae(dJ)],4),x("div",{class:"resizer-col",onPointerdown:s},null,32),x("div",cZ,[x("div",dZ,[Ae(b8)]),x("div",{class:"resizer-row",onPointerdown:r,title:o.$t("app.resizeTimeline")},null,40,uZ),x("div",{class:"timeline-area",style:Vt({height:i.value+"px"})},[Ae(iZ)],4)])],10,lZ),Ae(aZ)],64))}}),fZ=li(hZ,[["__scopeId","data-v-07c42c10"]]);wM(fZ).use(AM()).use(ac).mount("#app");export{wx as $,Ts as A,Pu as B,Rt as C,_i as D,Oe as E,nn as F,Is as G,at as H,At as I,xT as J,Ki as K,Cn as L,On as M,Zr as N,gh as O,As as P,Ql as Q,Ga as R,Gn as S,tV as T,Ke as U,mx as V,Jn as W,YQ as X,ZV as Y,dc as Z,Lg as _,it as a,zm as a$,xx as a0,QA as a1,ev as a2,VQ as a3,Tu as a4,Ol as a5,uV as a6,Nl as a7,vh as a8,Um as a9,Zm as aA,Qm as aB,md as aC,Lr as aD,kd as aE,Vm as aF,nT as aG,ri as aH,KA as aI,FQ as aJ,$a as aK,yx as aL,ke as aM,We as aN,Ym as aO,Rd as aP,aT as aQ,Xm as aR,rT as aS,oT as aT,bh as aU,dT as aV,Fd as aW,fT as aX,lT as aY,uT as aZ,pT as a_,Ko as aa,tv as ab,iv as ac,vx as ad,wc as ae,Sc as af,xc as ag,qo as ah,nr as ai,DQ as aj,iT as ak,dV as al,qa as am,qr as an,rv as ao,yT as ap,lV as aq,cc as ar,cn as as,bx as at,$Q as au,tl as av,Jm as aw,eg as ax,tg as ay,ig as az,ja as b,gr as b$,Mu as b0,cT as b1,ro as b2,hT as b3,nv as b4,eV as b5,vT as b6,bT as b7,sv as b8,Ps as b9,mT as bA,ov as bB,mh as bC,wT as bD,jm as bE,Ti as bF,Z8 as bG,nV as bH,BA as bI,$A as bJ,OQ as bK,zt as bL,il as bM,ST as bN,TT as bO,ET as bP,_T as bQ,CT as bR,AT as bS,aV as bT,av as bU,Mt as bV,Km as bW,sT as bX,VA as bY,XA as bZ,YA as b_,Q8 as ba,LQ as bb,ot as bc,tT as bd,eT as be,JA as bf,ZA as bg,$o as bh,Eu as bi,cV as bj,zA as bk,jA as bl,en as bm,HA as bn,Wa as bo,Oi as bp,UA as bq,_u as br,GA as bs,WA as bt,qA as bu,Sx as bv,Wm as bw,Eo as bx,gT as by,Gm as bz,Ha as c,NQ as c0,rV as c1,oV as c2,sV as c3,Qe as d,He as e,BQ as f,rt as g,ki as h,eu as i,un as j,Wt as k,je as l,es as m,Bt as n,_g as o,hi as p,ec as q,kr as r,Ve as s,yw as t,Fg as u,ru as v,Hm as w,Ao as x,gx as y,qm as z}; diff --git a/dist/assets/index-CA-Q3Zzr.css b/dist/assets/index-Q5OZd_mD.css similarity index 99% rename from dist/assets/index-CA-Q3Zzr.css rename to dist/assets/index-Q5OZd_mD.css index fd3c0dc..ca10921 100644 --- a/dist/assets/index-CA-Q3Zzr.css +++ b/dist/assets/index-Q5OZd_mD.css @@ -1 +1 @@ -.help-overlay[data-v-4bb9bc76]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:72px 24px 28px;box-sizing:border-box;background:#05080fb8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.help-dialog[data-v-4bb9bc76]{width:min(820px,100%);max-height:100%;display:flex;flex-direction:column;overflow:hidden;border:1px solid #3a4864;border-radius:14px;background:#141a27;color:#b8c3d8;box-shadow:0 22px 70px #0000009e}.help-head[data-v-4bb9bc76]{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:18px 20px 15px;border-bottom:1px solid #2b354a;background:linear-gradient(135deg,#202942,#181e2d)}.help-head h2[data-v-4bb9bc76]{margin:0;color:#eef2ff;font-size:19px}.help-head p[data-v-4bb9bc76]{margin:5px 0 0;color:#7786a3;font-size:11px}.help-close[data-v-4bb9bc76]{width:28px;height:28px;flex:0 0 28px;border:1px solid #43516b;border-radius:6px;background:#273249;color:#ccd7ed;cursor:pointer}.help-close[data-v-4bb9bc76]:hover{border-color:#7774ff;background:#3b4670;color:#fff}.help-body[data-v-4bb9bc76]{min-height:0;overflow:auto;padding:18px 20px 21px}.help-section[data-v-4bb9bc76]{padding:14px 15px;border:1px solid #2c3850;border-radius:10px;background:#181f2e}.help-section h3[data-v-4bb9bc76]{margin:0 0 11px;color:#9fb2ff;font-size:13px}.help-start ol[data-v-4bb9bc76]{margin:0;padding-left:21px;color:#aab6cc;font-size:12px;line-height:1.75}.help-start li[data-v-4bb9bc76]::marker{color:#7774ff;font-weight:700}.help-section b[data-v-4bb9bc76]{color:#dce4f7}.help-grid[data-v-4bb9bc76]{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(250px,.85fr);gap:12px;margin-top:12px}.help-list[data-v-4bb9bc76]{display:grid;gap:0;margin:0}.help-list>div[data-v-4bb9bc76]{display:grid;grid-template-columns:78px 1fr;gap:9px;padding:7px 0;border-bottom:1px solid #263146}.help-list>div[data-v-4bb9bc76]:last-child{border-bottom:0}.help-list dt[data-v-4bb9bc76]{color:#d3dcf0;font-size:11px;font-weight:700}.help-list dd[data-v-4bb9bc76]{margin:0;color:#8795ae;font-size:11px;line-height:1.5}.shortcut-list[data-v-4bb9bc76]{display:grid;gap:7px}.shortcut-list>div[data-v-4bb9bc76]{display:flex;align-items:center;min-height:25px;gap:5px}.shortcut-list kbd[data-v-4bb9bc76]{min-width:24px;box-sizing:border-box;padding:3px 6px;border:1px solid #465470;border-bottom-width:2px;border-radius:5px;background:#101623;color:#e0e7f6;font:10px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;text-align:center}.shortcut-list span[data-v-4bb9bc76]{color:#65728b;font-size:10px}.shortcut-list em[data-v-4bb9bc76]{margin-left:auto;color:#9ca9c1;font-size:11px;font-style:normal}.help-note[data-v-4bb9bc76]{margin:11px 0 0;padding-top:9px;border-top:1px solid #2a3549;color:#697791;font-size:10px;line-height:1.55}.help-export[data-v-4bb9bc76]{margin-top:12px}.help-export p[data-v-4bb9bc76]{margin:0;color:#8997b0;font-size:11px;line-height:1.65}.help-doc-title[data-v-4bb9bc76]{margin:16px 2px 2px;color:#9fb2ff;font-size:13px;font-weight:700;letter-spacing:.5px}.help-module[data-v-4bb9bc76]{margin-top:12px}.help-module-head[data-v-4bb9bc76]{display:flex;align-items:center;gap:8px;width:100%;padding:0;border:0;background:transparent;color:#9fb2ff;font:inherit;font-size:13px;font-weight:700;text-align:left;cursor:pointer}.help-module-head[data-v-4bb9bc76]:hover{color:#fff}.help-module-head .mtitle[data-v-4bb9bc76]{flex:1;min-width:0}.help-module-head .caret[data-v-4bb9bc76]{flex:0 0 auto;color:#7b86a2;font-size:12px}.help-module.open .help-module-head[data-v-4bb9bc76]{color:#fff}.help-module.open .help-module-head .caret[data-v-4bb9bc76]{color:#9fb2ff}.help-module .mnum[data-v-4bb9bc76]{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;background:linear-gradient(135deg,#4a53b8,#6a5fd0);color:#fff;font-size:12px;font-weight:700}.help-module.help-connector[data-v-4bb9bc76]{border-color:#4a4f8a;background:linear-gradient(135deg,#1d2442,#181d2f)}.help-module.help-connector .help-module-head[data-v-4bb9bc76]{color:#b8c2ff}.help-module .connector-intro[data-v-4bb9bc76]{margin:0 0 10px;color:#9aa8c4;font-size:11px;line-height:1.6}.help-module .connector-intro b[data-v-4bb9bc76]{color:#dce4f7}.help-module .dl-link[data-v-4bb9bc76]{display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;margin:0 10px 6px 0;padding:6px 12px;border:1px solid #5652b5;border-radius:6px;background:#4540a0;color:#fff;font-size:12px;font-weight:700;text-decoration:none}.help-module .dl-link[data-v-4bb9bc76]:hover{border-color:#8982ff;background:#554dc2}.help-module .dl-link small[data-v-4bb9bc76]{color:#cfe0ff;font-weight:500;font-size:9px}.help-module-body[data-v-4bb9bc76]{padding-top:10px}@media(max-width:760px){.help-overlay[data-v-4bb9bc76]{padding:66px 12px 14px}.help-grid[data-v-4bb9bc76]{grid-template-columns:1fr}}.topbar[data-v-6411b316]{position:absolute;top:10px;left:10px;right:10px;display:flex;align-items:center;gap:10px;padding:8px 12px;background:#141420d9;border-radius:10px;border:1px solid rgba(255,255,255,.08);font-size:12px;color:#aab;z-index:5;flex-wrap:wrap}.topbar input[type=range][data-v-6411b316]{background:#1a1a28;border:1px solid #2e2e44;color:#dde;border-radius:5px}.tool-group[data-v-6411b316]{display:flex;gap:6px;margin-left:6px;padding-left:12px;border-left:1px solid #2a2a3c}.tool-btn[data-v-6411b316]{width:30px;height:26px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.tool-btn[data-v-6411b316]:hover{background:#2b3a5c;color:#fff}.tool-btn.on[data-v-6411b316]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.background-menu[data-v-6411b316]{position:relative;flex:0 0 auto}.background-btn[data-v-6411b316]{height:28px;padding:0 11px;border:1px solid #3a4963;border-radius:6px;background:#202a3b;color:#cbd7ed;font-size:12px;cursor:pointer}.background-btn[data-v-6411b316]:hover,.background-btn.on[data-v-6411b316]{border-color:#7774ff;background:#343b63;color:#fff}.background-panel[data-v-6411b316]{position:absolute;top:calc(100% + 9px);right:0;width:248px;box-sizing:border-box;padding:10px;border:1px solid #343b50;border-radius:9px;background:#141420fa;color:#aeb8cc;box-shadow:0 8px 24px #0000007a;z-index:12}.background-upload[data-v-6411b316]{width:100%;height:30px;border:1px solid #5652b5;border-radius:6px;background:#4540a0;color:#fff;cursor:pointer}.background-upload[data-v-6411b316]:hover{border-color:#8982ff;background:#554dc2}.background-clear[data-v-6411b316]{width:100%;height:28px;margin-top:6px;border:1px solid #70404a;border-radius:6px;background:#512a33;color:#efb5bd;cursor:pointer}.background-clear[data-v-6411b316]:hover:not(:disabled){border-color:#b65b6a;background:#6a303b;color:#fff}.background-clear[data-v-6411b316]:disabled{opacity:.42;cursor:not-allowed}.background-file-input[data-v-6411b316]{display:none}.background-file-name[data-v-6411b316]{margin:7px 2px 9px;overflow:hidden;color:#737f98;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.background-position-row[data-v-6411b316]{display:grid;grid-template-columns:1fr 1fr;gap:8px}.background-position-row label[data-v-6411b316]{display:flex;align-items:center;gap:5px;color:#8995ad;font-size:11px}.background-position-row input[data-v-6411b316]{width:0;min-width:0;flex:1;box-sizing:border-box;height:28px;padding:0 6px;border:1px solid #343e55;border-radius:5px;background:#101522;color:#e1e6f2}.background-opacity-row[data-v-6411b316]{display:grid;grid-template-columns:46px 1fr 34px;align-items:center;gap:7px;margin-top:10px;font-size:11px}.background-opacity-row input[data-v-6411b316]{min-width:0;accent-color:#675de0}.background-opacity-row b[data-v-6411b316]{color:#aeb8cc;font-size:10px;text-align:right;font-variant-numeric:tabular-nums}.language-picker[data-v-6411b316]{display:flex;height:28px;align-items:center;gap:6px;margin-left:auto;color:#9aa8c1;font-size:11px;white-space:nowrap}.language-picker select[data-v-6411b316]{height:28px;padding:0 24px 0 8px;border:1px solid #3a4963;border-radius:6px;outline:none;background:#202a3b;color:#dbe4f5;font-size:11px;cursor:pointer}.language-picker select[data-v-6411b316]:focus{border-color:#7774ff}.help-btn[data-v-6411b316]{height:28px;padding:0 11px;flex:0 0 auto;border:1px solid #3a4963;border-radius:6px;background:#202a3b;color:#cbd7ed;font-size:12px;font-weight:700;cursor:pointer}.help-btn[data-v-6411b316]:hover,.help-btn.on[data-v-6411b316]{border-color:#7774ff;background:#343b63;color:#fff}.zoom-pct[data-v-6411b316]{margin-left:0;font-variant-numeric:tabular-nums;color:#9aa;min-width:44px;text-align:center}.settings-btn[data-v-6411b316]{height:28px;padding:0 12px;flex:0 0 auto;border:1px solid #3a4963;border-radius:6px;background:#202a3b;color:#cdf;font-size:12px;font-weight:700;cursor:pointer}.settings-btn[data-v-6411b316]:hover{border-color:#7774ff;background:#2b3a5c;color:#fff}.undo-btn[data-v-6411b316]{width:30px;height:28px;flex:0 0 30px;border:1px solid #3a4963;border-radius:6px;background:#202a3b;color:#cdd8ed;font-size:18px;line-height:1;cursor:pointer}.undo-btn[data-v-6411b316]:hover:not(:disabled){border-color:#7774ff;background:#2b3a5c;color:#fff}.undo-btn[data-v-6411b316]:disabled{opacity:.38;cursor:not-allowed}.settings-panel[data-v-c1ded952]{position:absolute;top:52px;left:10px;width:240px;z-index:10;background:#141420f7;border:1px solid #2a2a3c;border-radius:10px;padding:10px 12px;font-size:12px;color:#aab;box-shadow:0 6px 20px #0006}.sp-head[data-v-c1ded952]{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:#cdf;margin-bottom:10px}.sp-section-title[data-v-c1ded952]{margin:2px 0 8px;color:#8a93bb;font-size:11px}.sp-switch-row[data-v-c1ded952]{display:flex;align-items:center;justify-content:space-between;gap:10px;color:#aab}.sp-switch-control[data-v-c1ded952]{display:inline-flex;align-items:center;gap:7px}.sp-switch-control input[data-v-c1ded952]{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.sp-switch-ui[data-v-c1ded952]{position:relative;width:34px;height:18px;border-radius:999px;background:#39445a;cursor:pointer;transition:background .16s ease}.sp-switch-ui[data-v-c1ded952]:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#f4f6fb;transition:transform .16s ease}.sp-switch-control input:checked+.sp-switch-ui[data-v-c1ded952]{background:#655df0}.sp-switch-control input:checked+.sp-switch-ui[data-v-c1ded952]:after{transform:translate(16px)}.sp-switch-control input:focus-visible+.sp-switch-ui[data-v-c1ded952]{outline:2px solid #8b86ff;outline-offset:2px}.sp-switch-control b[data-v-c1ded952]{min-width:24px;color:#8a93bb;font-size:11px;font-weight:500}.sp-cache-note[data-v-c1ded952]{margin-top:10px;padding-top:9px;border-top:1px solid #2a2a3c;color:#647089;font-size:10px;text-align:center}.sp-divider[data-v-c1ded952]{height:1px;margin:10px 0;background:#2a2a3c}.sp-close[data-v-c1ded952]{background:#2e3a55;border:none;color:#cdf;border-radius:4px;width:18px;height:18px;cursor:pointer;font-size:11px}.sp-row[data-v-c1ded952]{display:flex;align-items:center;gap:8px;margin:8px 0}.sp-row>span[data-v-c1ded952]:first-child{width:76px;flex-shrink:0;color:#8a93bb}.sp-row input[type=range][data-v-c1ded952]{flex:1;background:#1a1a28;accent-color:#3a5a8c}.sp-num[data-v-c1ded952]{width:52px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px;padding:2px 4px}.sp-undo-limit[data-v-c1ded952]{margin-left:auto;width:64px;height:26px;box-sizing:border-box}.sp-colr[data-v-c1ded952]{width:26px;height:22px;border:none;background:none;cursor:pointer}.sp-hex[data-v-c1ded952]{font-size:11px;color:#889;font-variant-numeric:tabular-nums}.sp-chk[data-v-c1ded952]{display:flex;align-items:center;gap:6px;margin:8px 0;color:#aab}.stage-wrap[data-v-1023341a]{position:relative;width:100%;height:100%;overflow:hidden}.stage-holder[data-v-1023341a]{width:100%;height:100%;cursor:grab;touch-action:none;background-color:#0e1219;outline:none}.stage-holder.grid[data-v-1023341a]{background:conic-gradient(#141a26 90deg,transparent 90deg 180deg,#141a26 180deg 270deg,#141a26 180deg 270deg,transparent 270deg);background-size:28px 28px}.stage-holder[data-v-1023341a]:active{cursor:grabbing}.hud[data-v-1023341a]{position:absolute;bottom:12px;left:12px;padding:8px 12px;background:#141420bf;border-radius:8px;font-size:12px;color:#a0a8cc}.hud-number[data-v-1023341a]{display:inline-block;box-sizing:border-box;text-align:right;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.hud-system-count[data-v-1023341a]{width:3ch}.hud-particle-count[data-v-1023341a]{width:7ch;text-align:left}.hud-tip[data-v-1023341a]{margin-left:12px;color:#5f6a8a;font-size:11px}b[data-v-1023341a]{color:#fc3}.config-management-body[data-v-09679738]{padding-bottom:2px}.config-toolbar[data-v-09679738]{display:grid;grid-template-columns:auto auto minmax(0,1fr);gap:6px;margin-bottom:10px}.config-toolbar button[data-v-09679738],.config-toolbar select[data-v-09679738]{min-width:0;height:30px;box-sizing:border-box;border:1px solid #3b4864;border-radius:6px;background:#263149;color:#d6def0;font-size:11px}.config-toolbar button[data-v-09679738]{padding:0 9px;cursor:pointer}.config-toolbar button[data-v-09679738]:hover{border-color:#7169dc;background:#343d68;color:#fff}.config-toolbar select[data-v-09679738]{padding:0 7px;overflow:hidden;text-overflow:ellipsis}.config-toolbar select[data-v-09679738]:disabled{color:#68738a;background:#1b2130}.config-message[data-v-09679738]{margin:-4px 0 9px;color:#83b9a2;font-size:10px}.config-message.error[data-v-09679738]{color:#e8959e}.group[data-v-09679738]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-09679738]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-09679738]:hover{background:#20202e}.group-body[data-v-09679738]{padding:8px 10px 12px}.caret[data-v-09679738]{display:inline-block;width:12px;color:#667;font-size:11px}.ns[data-v-7c2fbed0]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.ns-label[data-v-7c2fbed0]{width:60px;flex-shrink:0;color:#8a93bb}.ns-range[data-v-7c2fbed0]{flex:1;accent-color:#3a7cd6}.ns-num[data-v-7c2fbed0]{width:56px;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px;text-align:right}.ns.disabled[data-v-7c2fbed0]{opacity:.55}.ns.disabled .ns-range[data-v-7c2fbed0],.ns.disabled .ns-num[data-v-7c2fbed0]{cursor:not-allowed}.ce[data-v-8f475293]{display:flex;align-items:flex-start;gap:6px;width:100%}.ce-editor[data-v-8f475293]{flex:1;min-width:0}.ce-reset[data-v-8f475293]{flex:0 0 auto;padding:5px 7px;border:1px solid #3b4b65;border-radius:5px;background:#242f42;color:#c4cee2;font-size:10px;cursor:pointer}.ce-reset[data-v-8f475293]:hover{border-color:#7774ff;background:#4f4dc2;color:#fff}.ce-svg[data-v-8f475293]{width:100%;height:110px;display:block;border:1px solid #2a2a3c;border-radius:6px;background:#10101a;cursor:crosshair;touch-action:none}.ce-grid line[data-v-8f475293]{stroke:#1e1e30;stroke-width:1}.ce-frame[data-v-8f475293]{stroke:#2e2e44;stroke-width:1}.ce-line[data-v-8f475293]{stroke:#6ea0e8;stroke-width:2;stroke-linejoin:round}.ce-handles line[data-v-8f475293]{stroke:#8d96b5;stroke-width:1;stroke-dasharray:3 2}.ce-handles circle[data-v-8f475293]{fill:#b7c2dd;stroke:#344d94;stroke-width:1.2;cursor:grab}.ce-handles circle[data-v-8f475293]:active{cursor:grabbing}.ce-node[data-v-8f475293]{fill:#fff;stroke:#3a55aa;stroke-width:1.6;pointer-events:none}.ce-hit[data-v-8f475293]{fill:transparent;stroke:none;cursor:grab}.ce-hit[data-v-8f475293]:active{cursor:grabbing}.ce-nav[data-v-8f475293]{display:flex;justify-content:space-between;margin-top:3px}.ce-tip[data-v-8f475293]{color:#566;font-size:10px}.spine-editor[data-v-35137928]{display:grid;gap:10px;color:#c5cbe0}.editor-title[data-v-35137928],.section-title[data-v-35137928]{color:#dce2f5;font-weight:700}.editor-title[data-v-35137928]{padding-bottom:9px;border-bottom:1px solid #30394d}.grid[data-v-35137928]{display:grid;gap:8px}.grid.three[data-v-35137928]{grid-template-columns:repeat(3,minmax(0,1fr))}.field[data-v-35137928]{display:grid;gap:5px;min-width:0;color:#919bb7;font-size:12px}.field input[data-v-35137928],.field select[data-v-35137928],.asset-name[data-v-35137928]{box-sizing:border-box;width:100%;min-width:0;height:35px;padding:0 10px;color:#e2e6f3;background:#101625;border:1px solid #32405b;border-radius:6px}.divider[data-v-35137928]{height:1px;background:#30394d;margin:2px 0}.asset-row[data-v-35137928]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.asset-name[data-v-35137928]{display:flex;align-items:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#7f8aa7}button[data-v-35137928]{height:35px;padding:0 13px;border:1px solid #3b4a67;border-radius:6px;background:#33415b;color:#e2e6f3;cursor:pointer}button[data-v-35137928]:hover{filter:brightness(1.13)}button[data-v-35137928]:disabled{opacity:.55;cursor:wait}.folder-select[data-v-35137928]{width:100%;border-color:#6659c7;background:#4940a8;color:#fff}.folder-hint[data-v-35137928]{margin-top:-5px;color:#69758e;font-size:10px;line-height:1.45}.asset-actions[data-v-35137928]{display:grid;grid-template-columns:1fr 1fr;gap:5px}.asset-actions .load[data-v-35137928]{background:#5543df;border-color:#6959ec}.asset-actions .clear[data-v-35137928]{background:#702b34;border-color:#803842}.runtime-note[data-v-35137928]{color:#69758e;font-size:11px;text-align:center}.error[data-v-35137928]{padding:8px 10px;color:#ffabb2;background:#4b2028;border:1px solid #76323e;border-radius:6px;font-size:12px}.section-box[data-v-35137928]{display:grid;gap:8px;padding:10px;background:#182132;border:1px solid #303c54;border-radius:7px}.empty[data-v-35137928]{color:#667187;font-size:12px;padding:5px 0}.bone-tree[data-v-35137928]{max-height:240px;overflow:auto;padding:4px 0;background:#111827;border-radius:5px}.tree-title-row[data-v-35137928]{display:flex;align-items:center;justify-content:space-between;gap:8px}.tree-tabs[data-v-35137928]{display:flex;gap:3px;margin:6px 0}.tree-tabs button[data-v-35137928]{height:24px;padding:0 8px;border:1px solid transparent;border-radius:5px;background:transparent;color:#8d98ae;font-size:10px;cursor:pointer}.tree-tabs button[data-v-35137928]:hover{background:#273246}.tree-tabs button.on[data-v-35137928]{border-color:#7774ff;background:#35336b;color:#fff}.selected-bone[data-v-35137928]{width:auto;min-width:0;max-width:100%;height:24px;flex:0 1 auto;overflow:hidden;padding:0 7px;color:#75819c;background:#182132;border:1px solid transparent;border-radius:5px;font-size:10px;text-align:right;white-space:nowrap;text-overflow:ellipsis}.selected-bone.active[data-v-35137928]{color:#aeb9d4;background:#242f44;border-color:#35445e;cursor:pointer}.selected-bone.active[data-v-35137928]:hover{border-color:#675ec4;background:#302b57}.selected-bone[data-v-35137928]:disabled{opacity:1;cursor:default}.selected-bone strong[data-v-35137928]{color:#c5cde3;font-weight:600}.tree-action[data-v-35137928]{height:24px;padding:0 8px;color:#9aa7c2;background:#242f44;border-color:#35445e;font-size:10px}.bone-search[data-v-35137928]{position:relative}.bone-search input[data-v-35137928]{box-sizing:border-box;width:100%;height:30px;padding:0 32px 0 9px;color:#dce2f2;background:#101827;border:1px solid #33415b;border-radius:5px;font-size:11px;outline:none}.bone-search input[data-v-35137928]:focus{border-color:#7065df;box-shadow:0 0 0 1px #7065df38}.bone-search button[data-v-35137928]{position:absolute;top:3px;right:3px;width:24px;height:24px;padding:0;border:0;color:#8d98b0;background:transparent}.bone[data-v-35137928]{display:flex;align-items:center;gap:4px;min-height:25px;color:#aeb8d2;font-size:12px;border-bottom:1px solid rgba(72,84,112,.22);cursor:pointer;outline:none}.bone[data-v-35137928]:hover{background:#45567e38}.bone.selected[data-v-35137928]{color:#f0edff;background:#6b53dd52;box-shadow:inset 2px 0 #8e72ff}.bone[data-v-35137928]:focus-visible{box-shadow:inset 0 0 0 1px #7d72dd}.bone-toggle[data-v-35137928]{width:22px;height:22px;padding:0;border:0;background:transparent;color:#9aa7c2}.bone-toggle[data-v-35137928]:hover{background:#26324a}.bone-leaf[data-v-35137928]{display:inline-flex;width:22px;justify-content:center;color:#58647d}.bone-name[data-v-35137928]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.slot-row[data-v-35137928]{padding-right:8px}.slot-order[data-v-35137928]{width:24px;flex:0 0 24px;color:#66758e;font-size:10px;font-variant-numeric:tabular-nums;text-align:right}.slot-attachment[data-v-35137928]{margin-left:auto;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#6d7c96;font-size:10px}@media(max-width:430px){.grid.three[data-v-35137928]{grid-template-columns:1fr}}.panel[data-v-5573409f]{display:flex;width:100%;height:100%;flex-direction:column;overflow:hidden;background:#14141f;border-left:1px solid #2a2a3c;padding:12px;box-sizing:border-box}.empty[data-v-5573409f],.panel-hint[data-v-5573409f]{color:#667;font-size:12px;padding:8px 0}.group[data-v-5573409f]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-5573409f]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-5573409f]:hover{background:#20202e}.scene-head[data-v-5573409f]{padding-right:6px}.scene-actions[data-v-5573409f]{margin-left:auto;display:flex;align-items:center;gap:4px}.scene-add[data-v-5573409f]{height:24px;padding:0 6px;border:1px solid #3a4a6a;border-radius:5px;background:#2e3a55;color:#cdf;font-size:10px;white-space:nowrap;cursor:pointer}.scene-add[data-v-5573409f]:hover{border-color:#7774ff;background:#45426f;color:#fff}.scene-add[data-v-5573409f]:disabled{opacity:.42;cursor:not-allowed;border-color:#343a4b;background:#252a38;color:#778095}.group-body[data-v-5573409f]{padding:8px 10px 12px}.caret[data-v-5573409f]{display:inline-block;width:12px;color:#667;font-size:11px}.tree[data-v-5573409f]{margin-bottom:8px}.tree-item[data-v-5573409f]{display:flex;align-items:center;gap:6px;padding:5px 6px;font-size:12px;color:#bcd;border-radius:6px;margin-bottom:2px}.tree-item.on[data-v-5573409f]{background:#26324a;color:#ffe}.tree-item .tdot[data-v-5573409f]{color:#fc3;font-size:10px}.tree-item .tdot.dim[data-v-5573409f]{color:#556}.tree-item .tdot.collision-dot[data-v-5573409f]{color:#ff7070}.tree-item .tdot.path-dot[data-v-5573409f]{color:#ff933e;font-size:14px}.tree-item .tdot.spine-dot[data-v-5573409f]{color:#c08cff;font-size:11px}.tree-item .sub-branch[data-v-5573409f]{color:#5f7090;font-size:12px}.tree-item .tlabel[data-v-5573409f]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scene-tree[data-v-5573409f]{padding-bottom:8px;border-bottom:1px solid #2a2a3c}.scene-object-item[data-v-5573409f]{min-height:28px;cursor:pointer}.scene-object-item[data-v-5573409f]:hover{background:#202b40}.scene-object-child[data-v-5573409f]{background:#1e2a3e59}.scene-object-kind[data-v-5573409f]{color:#75829c;font-size:10px}.scene-object-kind.sub-emitter-kind[data-v-5573409f]{color:#8f8cff}.scene-object-eye[data-v-5573409f]{width:24px;height:22px;padding:3px;flex:0 0 24px;border:1px solid transparent;border-radius:5px;background:transparent;color:#9aa6bf;cursor:pointer}.scene-object-eye[data-v-5573409f]:hover{border-color:#4b5972;background:#29354a;color:#e1e7f4}.scene-object-eye.off[data-v-5573409f]{color:#59647a}.scene-object-eye svg[data-v-5573409f]{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.scene-object-eye .eye-slash[data-v-5573409f]{stroke:#d47b88;stroke-width:2}.scene-object-delete[data-v-5573409f]{width:24px;height:22px;padding:0;border:1px solid #59414a;border-radius:5px;background:#3a272f;color:#efb4bd;font-size:11px;cursor:pointer}.scene-object-delete[data-v-5573409f]:hover{border-color:#a45c69;background:#57303a;color:#fff}.object-editor-title[data-v-5573409f]{margin:10px 0 8px;padding-top:8px;border-top:1px solid #2a2a3c;color:#cbd4e8;font-weight:700}.field-block[data-v-5573409f]{display:flex;flex-direction:column;gap:5px;margin:10px 0;color:#8f9ab3;font-size:11px}.field-block>.inp[data-v-5573409f]{width:100%;box-sizing:border-box;min-height:30px}.field-block small[data-v-5573409f]{color:#5f6d86;line-height:1.5}.field-grid[data-v-5573409f]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:end}.compact-field[data-v-5573409f]{display:flex;min-width:0;flex-direction:column;gap:5px;margin:5px 0;color:#8f9ab3;font-size:11px}.compact-field .inp[data-v-5573409f]{width:100%;min-height:30px;box-sizing:border-box}.check-field[data-v-5573409f]{align-items:flex-start}.check-field input[data-v-5573409f]{width:18px;height:18px;margin:4px 0;accent-color:#4f7ee8}.follow-path[data-v-5573409f],.setting-line[data-v-5573409f]{display:flex;align-items:center;gap:8px;margin:12px 0 4px;color:#aeb8cf;font-size:12px}.setting-line[data-v-5573409f]{justify-content:space-between}.follow-path input[data-v-5573409f],.setting-line input[type=checkbox][data-v-5573409f]{width:17px;height:17px;accent-color:#4f7ee8}.collider-follow-section[data-v-5573409f]{margin-top:12px;padding-top:4px;border-top:1px solid #30394d}.collider-curve-title[data-v-5573409f]{display:flex;flex-direction:column;gap:3px;margin:12px 0 6px;color:#aeb8cf;font-size:12px}.collider-curve-title small[data-v-5573409f]{color:#67738c;font-size:10px;line-height:1.45}.path-color[data-v-5573409f]{width:48px;height:28px;padding:0;border:1px solid #3a4963;background:transparent;cursor:pointer}.path-help[data-v-5573409f]{margin:12px 0;color:#7d89a2;font-size:11px;line-height:1.55}.path-help>span[data-v-5573409f]{color:#aeb8cf}.path-help ul[data-v-5573409f]{margin:6px 0 0;padding-left:20px}.path-help li[data-v-5573409f]{margin:3px 0}.path-action[data-v-5573409f]{width:100%;height:31px;margin-top:7px;border:0;border-radius:5px;background:#33425b;color:#c9d1e1;cursor:pointer}.path-action[data-v-5573409f]:hover{filter:brightness(1.12)}.path-action.primary[data-v-5573409f]{background:#f05408;color:#fff}.row[data-v-5573409f]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-5573409f]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-5573409f]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.inp.tiny[data-v-5573409f]{width:46px;flex:0 0 46px;text-align:center}.seed-row[data-v-5573409f]{display:flex;align-items:center;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid #2d3950}.seed-row label[data-v-5573409f]{width:64px;color:#8f9bb5;font-size:12px}.seed-input[data-v-5573409f]{min-width:0;flex:1;padding:6px 8px;border:1px solid #344158;border-radius:6px;outline:none;background:#0f1625;color:#e2e7f2;font-size:12px}.seed-input[data-v-5573409f]:focus{border-color:#625ff1}.seed-random[data-v-5573409f]{width:34px;height:30px;border:1px solid #3a4860;border-radius:6px;background:#2c3950;color:#d7def0;cursor:pointer}.seed-random[data-v-5573409f]:hover{background:#394964}.scene-seed[data-v-5573409f]{margin-top:10px}.seed-hint[data-v-5573409f]{margin:5px 0 1px 72px;color:#657188;font-size:9px;line-height:1.45}.group[data-v-dec7323c]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-dec7323c]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-dec7323c]:hover{background:#20202e}.group-reset[data-v-dec7323c]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-dec7323c]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-dec7323c]{padding:8px 10px 12px}.caret[data-v-dec7323c]{display:inline-block;width:12px;color:#667;font-size:11px}.divider[data-v-dec7323c]{height:1px;background:#2a2a3c;margin:8px 0}.row[data-v-dec7323c]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-dec7323c]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-dec7323c]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.segs[data-v-dec7323c]{display:flex;gap:6px;margin:6px 0}.stream-behavior-segs[data-v-dec7323c]{margin-top:10px}.stream-loop-options[data-v-dec7323c]{display:grid;gap:8px;margin:8px 0 4px;padding:9px 10px;border:1px solid #32405a;border-radius:6px;background:#171f2e}.loop-section-row[data-v-dec7323c]{display:flex;min-height:27px;align-items:center;justify-content:space-between;gap:8px}.loop-duration-control[data-v-dec7323c]{display:flex;flex:0 0 auto;align-items:center;gap:7px}.loop-duration-toggle[data-v-dec7323c]{gap:5px;font-size:10px;white-space:nowrap}.loop-duration-toggle .switch-ui[data-v-dec7323c]{width:26px;height:14px}.loop-duration-toggle .switch-ui[data-v-dec7323c]:after{width:10px;height:10px}.loop-duration-toggle input:checked+.switch-ui[data-v-dec7323c]:after{transform:translate(12px)}.loop-section-duration[data-v-dec7323c]{display:flex;flex:0 0 auto;align-items:center;gap:4px;color:#7f8ba4;font-size:11px}.loop-section-duration input[data-v-dec7323c]{position:static;width:54px;height:25px;padding:0 6px;border:1px solid #3a465f;border-radius:5px;outline:none;background:#101725;color:#e4e8f2;text-align:right;opacity:1;pointer-events:auto}.loop-section-duration input[data-v-dec7323c]:focus{border-color:#716eff}.loop-auto-duration[data-v-dec7323c]{min-width:54px;color:#77839a;text-align:right;white-space:nowrap}.seg[data-v-dec7323c]{flex:1;padding:5px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:12px;cursor:pointer}.seg.on[data-v-dec7323c]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.seg[data-v-dec7323c]{display:flex;gap:6px;margin:6px 0}.inp.tiny[data-v-dec7323c]{width:46px;flex:0 0 46px;text-align:center}.switch-row[data-v-dec7323c]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-dec7323c]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-dec7323c]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-dec7323c]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-dec7323c]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-dec7323c]:after{transform:translate(14px)}.modifier-hint[data-v-dec7323c]{margin:7px 0 0 2px;color:#647086;font-size:9px;line-height:1.5}.stream-loop-hint[data-v-dec7323c]{margin:9px 2px 3px;padding:7px 8px;border:1px solid #4a436e;border-radius:5px;background:#211f35;color:#aaa4d7}.switch-row input:disabled+.switch-ui[data-v-dec7323c]{opacity:.45;cursor:not-allowed}.pac[data-v-a3a8dde3]{padding:10px;margin:8px 0;border:1px solid #2c3850;border-radius:7px;background:#171d2a}.pac-head[data-v-a3a8dde3]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:7px}.pac-label[data-v-a3a8dde3]{color:#aeb8cf;font-size:12px;font-weight:600;white-space:nowrap}.pac-modes[data-v-a3a8dde3]{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}.pac-mode[data-v-a3a8dde3]{padding:4px 7px;border:1px solid #344158;border-radius:5px;background:#273246;color:#aeb8cf;font-size:11px;cursor:pointer}.pac-mode.on[data-v-a3a8dde3]{border-color:#7774ff;background:#605df0;color:#fff}.pac-curve[data-v-a3a8dde3]{margin-top:8px}.pac-axis[data-v-a3a8dde3]{display:flex;justify-content:space-between;margin-top:3px;color:#5f6b82;font-size:10px}.pac[data-v-a3a8dde3] .ns-label{width:58px}.pac[data-v-a3a8dde3] .ce-svg{height:96px;background:#0f1625;border-color:#30405a}.pac[data-v-a3a8dde3] .ce-tip{color:#657188}.group[data-v-3bbf0b5e]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-3bbf0b5e]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-3bbf0b5e]:hover{background:#20202e}.group-reset[data-v-3bbf0b5e]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-3bbf0b5e]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-3bbf0b5e]{padding:8px 10px 12px}.caret[data-v-3bbf0b5e]{display:inline-block;width:12px;color:#667;font-size:11px}.row[data-v-3bbf0b5e]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-3bbf0b5e]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.attr-body[data-v-3bbf0b5e]{padding:10px;background:#151b27}.attr-section-title[data-v-3bbf0b5e]{margin:2px 0 8px;color:#9ca8c0;font-size:12px;font-weight:700}.attr-section-title.life-title[data-v-3bbf0b5e]{margin-top:14px;padding-top:12px;border-top:1px solid #2d3950}.attr-axis-head[data-v-3bbf0b5e]{display:flex;align-items:center;justify-content:space-between;margin:10px 1px -2px;color:#aeb8cf;font-size:12px;font-weight:600}.axis-modes[data-v-3bbf0b5e]{display:flex;gap:4px}.axis-mode[data-v-3bbf0b5e]{padding:4px 8px;border:1px solid #344158;border-radius:5px;background:#273246;color:#aeb8cf;font-size:11px;cursor:pointer}.axis-mode.on[data-v-3bbf0b5e]{border-color:#7774ff;background:#605df0;color:#fff}.life-item[data-v-3bbf0b5e]{padding:9px 0;border-bottom:1px solid #2a3549}.switch-row[data-v-3bbf0b5e]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-3bbf0b5e]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-3bbf0b5e]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-3bbf0b5e]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-3bbf0b5e]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-3bbf0b5e]:after{transform:translate(14px)}.life-axis[data-v-3bbf0b5e]{margin:9px 0 2px 42px}.switch-row input:disabled+.switch-ui[data-v-3bbf0b5e]{opacity:.45;cursor:not-allowed}.gradient-editor[data-v-cb6cfaf8]{margin:8px 0 11px 68px}.gradient-bar[data-v-cb6cfaf8]{position:relative;height:18px;margin-bottom:14px;border:1px solid #465570;border-radius:6px;cursor:crosshair}.gradient-stop[data-v-cb6cfaf8]{position:absolute;top:15px;width:14px;height:17px;padding:0;transform:translate(-50%);border:2px solid #d8deea;border-radius:2px 2px 5px 5px;background:var(--stop-color);cursor:grab;box-shadow:0 1px 3px #0009}.gradient-stop[data-v-cb6cfaf8]:before{content:"";position:absolute;left:2px;top:-7px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:5px solid #d8deea}.gradient-stop.selected[data-v-cb6cfaf8]{outline:2px solid #7774ff;outline-offset:1px;z-index:2}.gradient-stop[data-v-cb6cfaf8]:active{cursor:grabbing}.gradient-controls[data-v-cb6cfaf8]{display:flex;align-items:center;gap:5px;margin-top:30px}.gradient-color[data-v-cb6cfaf8]{width:28px;height:24px;padding:1px;border:1px solid #465570;border-radius:4px;background:#151b27;cursor:pointer}.gradient-hex-input[data-v-cb6cfaf8]{width:66px;padding:4px 5px;border:1px solid #344158;border-radius:4px;outline:none;background:#101725;color:#aeb8cb;font-size:10px;font-family:monospace}.gradient-hex-input[data-v-cb6cfaf8]:focus{border-color:#7774ff;color:#fff}.gradient-position[data-v-cb6cfaf8]{display:flex;align-items:center;color:#71809a;font-size:10px}.gradient-position input[data-v-cb6cfaf8]{width:43px;padding:3px 4px;border:1px solid #344158;border-radius:4px;outline:none;background:#101725;color:#dce3ef;text-align:right}.gradient-action[data-v-cb6cfaf8]{width:25px;height:24px;padding:0;border:1px solid #3a4860;border-radius:4px;background:#273246;color:#cbd4e5;cursor:pointer}.gradient-action[data-v-cb6cfaf8]:hover:not(:disabled){border-color:#7774ff;color:#fff}.gradient-action.danger[data-v-cb6cfaf8]{color:#e3a5aa}.gradient-action[data-v-cb6cfaf8]:disabled{opacity:.35;cursor:not-allowed}.gradient-hint[data-v-cb6cfaf8]{margin-top:5px;color:#59667b;font-size:9px}.pivot-editor[data-v-a5622844]{margin-top:8px;padding:8px;border:1px solid #2e3c55;border-radius:8px;background:#121a27}.pivot-toolbar[data-v-a5622844]{display:flex;align-items:center;gap:7px;margin-bottom:7px}.pivot-hint[data-v-a5622844]{flex:1;min-width:0;display:flex;align-items:center;gap:5px;color:#9aa8c4;font-size:10px;line-height:1.3}.pivot-hint-icon[data-v-a5622844]{color:#8f8cff;font-size:13px}.pivot-zoom[data-v-a5622844]{display:flex;align-items:center;gap:2px;padding:2px;border:1px solid #34435e;border-radius:6px;background:#182234}.pivot-zoom button[data-v-a5622844]{width:20px;height:20px;padding:0;border:0;border-radius:4px;background:transparent;color:#a9b6d0;font-size:13px;cursor:pointer}.pivot-zoom button[data-v-a5622844]:hover:not(:disabled){background:#2a3853;color:#fff}.pivot-zoom button[data-v-a5622844]:disabled{opacity:.3;cursor:default}.pivot-zoom span[data-v-a5622844]{min-width:36px;text-align:center;color:#c7d1e6;font-size:10px;font-variant-numeric:tabular-nums}.pivot-expand[data-v-a5622844]{width:24px;height:24px;padding:0;border:1px solid #34435e;border-radius:6px;background:#182234;color:#a9b6d0;font-size:13px;cursor:pointer}.pivot-expand[data-v-a5622844]:hover{border-color:#7774ff;color:#fff}.pivot-stage[data-v-a5622844]{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:156px;overflow:hidden;border:1px solid #2f3d57;border-radius:8px;background-color:#10161f;background-image:linear-gradient(45deg,#1a2230 25%,transparent 25%),linear-gradient(-45deg,#1a2230 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#1a2230 75%),linear-gradient(-45deg,transparent 75%,#1a2230 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0;touch-action:none;cursor:crosshair}.pivot-large .pivot-stage[data-v-a5622844]{height:340px;background-size:22px 22px;background-position:0 0,0 11px,11px -11px,-11px 0}.pivot-stage.panning[data-v-a5622844]{cursor:grabbing}.pivot-box[data-v-a5622844]{position:relative;flex:0 0 auto}.pivot-box>img[data-v-a5622844]{display:block;width:100%;height:100%;object-fit:fill;-webkit-user-select:none;user-select:none;pointer-events:none}.pivot-empty[data-v-a5622844]{color:#4e5a70;font-size:12px}.pivot-cross[data-v-a5622844]{position:absolute;pointer-events:none;background:#7e76ffbf;box-shadow:0 0 3px #7e76ff99}.pivot-cross.vertical[data-v-a5622844]{top:0;bottom:0;width:1px;transform:translate(-.5px)}.pivot-cross.horizontal[data-v-a5622844]{left:0;right:0;height:1px;transform:translateY(-.5px)}.pivot-marker[data-v-a5622844]{position:absolute;width:13px;height:13px;transform:translate(-50%,-50%);border:2px solid #c9c6ff;border-radius:50%;background:#605ff0d9;box-shadow:0 0 0 3px #605ff047,0 0 10px #605ff0cc;pointer-events:none}.pivot-badge[data-v-a5622844]{position:absolute;transform:translate(-50%,14px);padding:2px 6px;border:1px solid #6f6bc7;border-radius:4px;background:#191c3aeb;color:#b9b6ff;font-size:9px;white-space:nowrap;pointer-events:none}.pivot-bottom[data-v-a5622844]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;margin-top:8px}.pivot-large .pivot-bottom[data-v-a5622844]{gap:14px;margin-top:14px}.pivot-card[data-v-a5622844]{min-width:0;padding:7px;border:1px solid #28344a;border-radius:8px;background:#151d2b}.pivot-card-head[data-v-a5622844]{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:6px;color:#b9c4da;font-size:10px}.pivot-card-icon[data-v-a5622844]{color:#8f8cff}.pivot-presets[data-v-a5622844]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}.pivot-preset[data-v-a5622844]{height:30px;padding:0;border:1px solid #2f3d57;border-radius:5px;background:#1b2537;color:#aab6cf;font-size:16px;line-height:1;cursor:pointer}.pivot-preset[data-v-a5622844]:hover{border-color:#5d5aa8;color:#d9d8ff}.pivot-preset.on[data-v-a5622844]{border-color:#7774ff;background:#4a47b5;color:#fff}.pivot-reset[data-v-a5622844]{display:block;width:100%;height:26px;margin-top:6px;padding:0 6px;border:1px solid #2f3d57;border-radius:5px;background:#1a2435;color:#96a4c0;font-size:10px;cursor:pointer;white-space:nowrap}.pivot-reset[data-v-a5622844]:hover{border-color:#5d5aa8;background:#232f46;color:#d9d8ff}.pivot-coords[data-v-a5622844]{display:flex;flex-direction:column;gap:5px}.pivot-large .pivot-coords[data-v-a5622844]{flex-direction:row;gap:8px}.pivot-coords label[data-v-a5622844]{flex:1;display:flex;align-items:center;gap:3px;color:#8d9ab5;font-size:10px}.pivot-coords input[data-v-a5622844]{width:100%;min-width:0;height:24px;padding:0 4px;border:1px solid #34435e;border-radius:4px;background:#101827;color:#f0b465;font-size:11px;text-align:right}.pivot-rotate-head[data-v-a5622844]{margin-top:10px}.pivot-rotate-state[data-v-a5622844]{color:#6f7c96;font-size:9px}.pivot-rotate-body[data-v-a5622844]{display:flex;align-items:center;gap:7px}.pivot-rotate-modes[data-v-a5622844]{display:flex;flex-direction:column;gap:4px;flex:1}.pivot-rotate-modes button[data-v-a5622844]{height:24px;padding:0 5px;border:1px solid #2f3d57;border-radius:5px;background:#1b2537;color:#93a0ba;font-size:9px;cursor:pointer}.pivot-rotate-modes button.on[data-v-a5622844]{border-color:#7774ff;background:#4a47b5;color:#fff}.pivot-rotate-preview[data-v-a5622844]{display:flex;align-items:center;justify-content:center;width:78px;height:78px;flex:0 0 78px;border:1px solid #2b374d;border-radius:6px;background:#10161f;overflow:hidden}.pivot-large .pivot-rotate-preview[data-v-a5622844]{width:128px;height:128px;flex-basis:128px}.pivot-rotate-preview img[data-v-a5622844]{display:block}.pivot-rotate-preview img.spin[data-v-a5622844]{animation:pivot-spin-a5622844 2s linear infinite}.pivot-rotate-preview img.swing[data-v-a5622844]{animation:pivot-swing-a5622844 1.1s ease-in-out infinite alternate}@keyframes pivot-spin-a5622844{to{transform:rotate(360deg)}}@keyframes pivot-swing-a5622844{0%{transform:rotate(-28deg)}to{transform:rotate(28deg)}}.pivot-large .pivot-hint[data-v-a5622844],.pivot-large .pivot-card-head[data-v-a5622844]{font-size:12px}.pivot-large .pivot-preset[data-v-a5622844]{height:42px;font-size:20px}.pivot-large .pivot-reset[data-v-a5622844]{height:34px;margin-top:8px;font-size:12px}.pivot-large .pivot-coords input[data-v-a5622844]{height:34px;font-size:14px}.pivot-large .pivot-rotate-modes button[data-v-a5622844]{height:34px;font-size:12px}.image-card[data-v-89f1e08d]{margin:8px 0;padding:9px;border:1px solid #2e3c55;border-radius:7px;background:#171d2a}.imgrow[data-v-89f1e08d]{display:flex;align-items:flex-start;gap:8px}.img-thumb[data-v-89f1e08d]{width:48px;height:48px;padding:0;border:1px solid #3a4963;border-radius:6px;background:#1a2232;display:flex;align-items:center;justify-content:center;flex-shrink:0;cursor:pointer;overflow:hidden}.img-thumb[data-v-89f1e08d]:hover{border-color:#7774ff}.img-thumb img[data-v-89f1e08d]{display:block;width:100%;height:100%;object-fit:contain}.img-fields[data-v-89f1e08d]{flex:1;min-width:0}.img-actions[data-v-89f1e08d]{display:flex;flex-direction:column;gap:4px}.row[data-v-89f1e08d]{display:flex;align-items:center;gap:8px;margin:6px 0;color:#aab;font-size:12px}.row>span[data-v-89f1e08d]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-89f1e08d]{min-width:0;flex:1;padding:3px 5px;border:1px solid #2e2e44;border-radius:5px;background:#1a1a28;color:#dde;font-size:12px}.mini-btn2[data-v-89f1e08d]{width:26px;height:24px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:5px;color:#aab;font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center}.mini-btn2[data-v-89f1e08d]:hover{background:#2b3a5c}.mini-btn2[data-v-89f1e08d]:disabled{opacity:.35;cursor:not-allowed}.thumb-note[data-v-89f1e08d]{margin:4px 0 2px;color:#667;font-size:11px}.sequence-pick[data-v-89f1e08d]{width:100%;margin:2px 0 4px;padding:6px 8px;border:1px solid #4a4a76;border-radius:5px;background:#27264b;color:#d8d7ff;font-size:12px;cursor:pointer}.sequence-pick[data-v-89f1e08d]:hover{border-color:#7774ff;background:#35336a}.sequence-note[data-v-89f1e08d]{margin:0 0 6px;color:#727b9b;font-size:11px;line-height:1.4}.resource-weight-row[data-v-89f1e08d]{display:grid;grid-template-columns:minmax(0,1fr) 28px;align-items:center;gap:7px}.resource-weight-control[data-v-89f1e08d]{width:100%;min-width:0}.resource-weight-control[data-v-89f1e08d] .ns-range{min-width:0}.resource-weight-control[data-v-89f1e08d] .ns-num{flex:0 0 56px;box-sizing:border-box}.weight-lock[data-v-89f1e08d]{width:28px;height:26px;flex:0 0 28px;padding:5px;border:1px solid #35435c;border-radius:5px;background:#202a3b;color:#78859e;cursor:pointer}.weight-lock svg[data-v-89f1e08d]{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.weight-lock[data-v-89f1e08d]:hover:not(:disabled){border-color:#7774ff;color:#b8b6ff}.weight-lock.on[data-v-89f1e08d]{border-color:#7774ff;background:#514fd0;color:#fff}.weight-lock[data-v-89f1e08d]:disabled{opacity:.35;cursor:not-allowed}.pivot-toggle-row[data-v-89f1e08d]{display:flex;align-items:center;gap:9px;margin-top:9px;padding:8px 9px;border:1px solid #2c3a54;border-radius:8px;background:#131b28}.pivot-toggle-icon[data-v-89f1e08d]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;flex:0 0 32px;border:1px solid #35435c;border-radius:7px;background:#1c2638;color:#8f8cff;font-size:17px}.pivot-toggle-text[data-v-89f1e08d]{flex:1;min-width:0}.pivot-toggle-title[data-v-89f1e08d]{color:#d6deee;font-size:12px;font-weight:600}.pivot-toggle-sub[data-v-89f1e08d]{margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#7584a0;font-size:9px}.pivot-switch[data-v-89f1e08d]{position:relative;flex:0 0 auto;cursor:pointer}.pivot-switch input[data-v-89f1e08d]{position:absolute;opacity:0;pointer-events:none}.pivot-switch-ui[data-v-89f1e08d]{position:relative;display:block;width:34px;height:19px;border-radius:10px;background:#354258;transition:background .16s ease}.pivot-switch-ui[data-v-89f1e08d]:after{content:"";position:absolute;left:2px;top:2px;width:15px;height:15px;border-radius:50%;background:#fff;transition:transform .16s ease}.pivot-switch input:checked+.pivot-switch-ui[data-v-89f1e08d]{background:#625ff1}.pivot-switch input:checked+.pivot-switch-ui[data-v-89f1e08d]:after{transform:translate(15px)}.pivot-modal-backdrop[data-v-89f1e08d]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:24px;background:#06090fc7;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.pivot-modal[data-v-89f1e08d]{display:flex;flex-direction:column;width:min(980px,94vw);max-height:92vh;overflow:auto;padding:14px;border:1px solid #2f3f5c;border-radius:14px;background:#121927;box-shadow:0 24px 70px #0009}.pivot-modal-head[data-v-89f1e08d]{display:flex;align-items:flex-start;gap:10px;padding-bottom:10px;border-bottom:1px solid #253148}.pivot-modal-icon[data-v-89f1e08d]{display:flex;align-items:center;justify-content:center;width:34px;height:34px;flex:0 0 34px;border:1px solid #3b4a66;border-radius:8px;background:#1c2638;color:#8f8cff;font-size:18px}.pivot-modal-info[data-v-89f1e08d]{flex:1;min-width:0}.pivot-modal-title[data-v-89f1e08d]{display:flex;align-items:center;gap:7px;color:#e4e9f5;font-size:15px;font-weight:700}.pivot-modal-badge[data-v-89f1e08d]{padding:2px 7px;border:1px solid #4b4a8f;border-radius:999px;background:#2c2b58;color:#b9b6ff;font-size:10px;font-weight:500}.pivot-modal-desc[data-v-89f1e08d]{margin-top:3px;color:#7f8daa;font-size:11px}.pivot-modal-close[data-v-89f1e08d]{width:28px;height:28px;padding:0;border:0;border-radius:6px;background:transparent;color:#8b98b3;font-size:15px;cursor:pointer}.pivot-modal-close[data-v-89f1e08d]:hover{background:#253148;color:#fff}.pivot-modal-hint[data-v-89f1e08d]{margin:10px 0 0;color:#8b98b3;font-size:11px}.pivot-modal-actions[data-v-89f1e08d]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid #253148}.pivot-modal-cancel[data-v-89f1e08d]{height:34px;padding:0 16px;border:1px solid #34435e;border-radius:7px;background:#1a2334;color:#a9b6d0;font-size:12px;cursor:pointer}.pivot-modal-cancel[data-v-89f1e08d]:hover{border-color:#5d5aa8;color:#fff}.pivot-modal-confirm[data-v-89f1e08d]{height:34px;padding:0 22px;border:1px solid #7774ff;border-radius:7px;background:#5b57e8;color:#fff;font-size:12px;font-weight:700;cursor:pointer}.pivot-modal-confirm[data-v-89f1e08d]:hover{background:#6a66ff}.group[data-v-86902cc8]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-86902cc8]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-86902cc8]:hover{background:#20202e}.group-reset[data-v-86902cc8]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-86902cc8]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-86902cc8]{padding:8px 10px 12px}.caret[data-v-86902cc8]{display:inline-block;width:12px;color:#667;font-size:11px}.divider[data-v-86902cc8]{height:1px;background:#2a2a3c;margin:8px 0}.row[data-v-86902cc8]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-86902cc8]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-86902cc8]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.colr[data-v-86902cc8]{width:28px;height:22px;border:none;background:none;cursor:pointer}.seg[data-v-86902cc8]{flex:1;padding:5px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:12px;cursor:pointer}.seg.on[data-v-86902cc8]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.look-title[data-v-86902cc8]{font-size:12px;font-weight:600;color:#ccd;margin:10px 0 6px;padding-bottom:4px;border-bottom:1px solid #2a2a3c}.look-title[data-v-86902cc8]:first-child{margin-top:2px}.seg[data-v-86902cc8]{display:flex;gap:6px;margin:6px 0}.seg-btn[data-v-86902cc8]{flex:1;padding:5px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:12px;cursor:pointer}.seg-btn.active[data-v-86902cc8]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.curve-wrap[data-v-86902cc8]{margin:6px 0}.curve-labels[data-v-86902cc8]{display:flex;justify-content:space-between;color:#566;font-size:10px;margin-top:2px}.image-title[data-v-86902cc8]{display:flex;align-items:center;justify-content:space-between}.image-add[data-v-86902cc8]{width:26px;height:24px;border:1px solid #4a4d9a;border-radius:5px;background:#252850;color:#8f8cff;font-size:18px;line-height:1;cursor:pointer}.image-add[data-v-86902cc8]:hover{background:#4542a8;color:#fff}.resource-divider[data-v-86902cc8]{height:1px;margin:9px 0 7px;background:#2a3549}.resource-color-row .blend-select[data-v-86902cc8]{max-width:88px}.resource-color-picker .hex[data-v-86902cc8]{margin-left:0}.random-color-hint[data-v-86902cc8]{margin:-5px 0 9px 68px;color:#66758e;font-size:9px;line-height:1.45}.hex-input[data-v-86902cc8]{width:72px;padding:4px 6px;border:1px solid #344158;border-radius:5px;outline:none;background:#101725;color:#aeb8cb;font-size:11px;font-family:monospace}.hex-input[data-v-86902cc8]:focus{border-color:#7774ff;color:#fff}.resource-alpha-head[data-v-86902cc8]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;color:#8a93bb;font-size:12px}.alpha-modes[data-v-86902cc8]{display:flex;gap:3px}.alpha-modes button[data-v-86902cc8]{padding:4px 8px;border:1px solid transparent;border-radius:5px;background:transparent;color:#8d98ae;font-size:11px;cursor:pointer}.alpha-modes button[data-v-86902cc8]:hover{background:#273246}.alpha-modes button.on[data-v-86902cc8]{border-color:#7774ff;background:#605df0;color:#fff}.resource-alpha-curve[data-v-86902cc8]{margin-top:7px}.file-input[data-v-86902cc8]{display:none}.hex[data-v-86902cc8]{font-size:11px;color:#889;margin-left:auto;font-variant-numeric:tabular-nums}.inp.tiny[data-v-86902cc8]{width:46px;flex:0 0 46px;text-align:center}.render-layer-current[data-v-86902cc8]{display:flex;align-items:center;gap:6px;margin:6px 0}.render-layer-text[data-v-86902cc8]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9aa6c2;font-size:11px}.mini-btn[data-v-86902cc8]{flex:0 0 auto;height:24px;padding:0 7px;border:1px solid #3d4a66;border-radius:5px;background:#202a3e;color:#a9b5cf;font-size:10px;cursor:pointer}.mini-btn[data-v-86902cc8]:hover{border-color:#7774ff;color:#fff}.mini-btn.ghost[data-v-86902cc8]{background:transparent}.slot-picker[data-v-86902cc8]{margin:6px 0;padding:6px;border:1px solid #2e3a52;border-radius:6px;background:#111a28}.slot-list[data-v-86902cc8]{max-height:180px;overflow:auto;margin-top:6px}.slot-item[data-v-86902cc8]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;border:1px solid transparent;border-radius:4px;background:transparent;color:#aab4cc;font-size:11px;text-align:left;cursor:pointer}.slot-item[data-v-86902cc8]:hover{background:#1d2a3f}.slot-item.on[data-v-86902cc8]{border-color:#7774ff;background:#2b2b55;color:#fff}.slot-order[data-v-86902cc8]{width:26px;flex:0 0 26px;color:#66758e;font-variant-numeric:tabular-nums}.slot-name[data-v-86902cc8]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slot-attachment[data-v-86902cc8]{max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#6d7c96;font-size:10px}.switch-row[data-v-86902cc8]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-86902cc8]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-86902cc8]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-86902cc8]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-86902cc8]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-86902cc8]:after{transform:translate(14px)}.switch-row input:disabled+.switch-ui[data-v-86902cc8]{opacity:.45;cursor:not-allowed}.render-layer-switch[data-v-86902cc8]{margin:6px 0}.modifier-hint[data-v-86902cc8]{margin:7px 0 0 2px;color:#647086;font-size:9px;line-height:1.5}.render-layer-warning[data-v-86902cc8]{color:#d8a45e}.empty[data-v-f5ccc52c]{color:#667;font-size:12px;padding:8px 0}.group[data-v-f5ccc52c]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-f5ccc52c]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-f5ccc52c]:hover{background:#20202e}.group-reset[data-v-f5ccc52c]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-f5ccc52c]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-f5ccc52c]{padding:8px 10px 12px}.caret[data-v-f5ccc52c]{display:inline-block;width:12px;color:#667;font-size:11px}.divider[data-v-f5ccc52c]{height:1px;background:#2a2a3c;margin:8px 0}.field-block[data-v-f5ccc52c]{display:flex;flex-direction:column;gap:5px;margin:10px 0;color:#8f9ab3;font-size:11px}.field-block>.inp[data-v-f5ccc52c]{width:100%;box-sizing:border-box;min-height:30px}.field-block small[data-v-f5ccc52c]{color:#5f6d86;line-height:1.5}.field-grid[data-v-f5ccc52c]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:end}.compact-field[data-v-f5ccc52c]{display:flex;min-width:0;flex-direction:column;gap:5px;margin:5px 0;color:#8f9ab3;font-size:11px}.compact-field .inp[data-v-f5ccc52c]{width:100%;min-height:30px;box-sizing:border-box}.tag[data-v-f5ccc52c]{font-size:10px;color:#667;background:#1c1c2a;border-radius:4px;padding:1px 5px}.row[data-v-f5ccc52c]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-f5ccc52c]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-f5ccc52c]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.colr[data-v-f5ccc52c]{width:28px;height:22px;border:none;background:none;cursor:pointer}.placeholder[data-v-f5ccc52c]{color:#667;font-size:11px;padding:6px 0}.image-add[data-v-f5ccc52c]{width:26px;height:24px;border:1px solid #4a4d9a;border-radius:5px;background:#252850;color:#8f8cff;font-size:18px;line-height:1;cursor:pointer}.image-add[data-v-f5ccc52c]:hover{background:#4542a8;color:#fff}.resource-divider[data-v-f5ccc52c]{height:1px;margin:9px 0 7px;background:#2a3549}.hex-input[data-v-f5ccc52c]{width:72px;padding:4px 6px;border:1px solid #344158;border-radius:5px;outline:none;background:#101725;color:#aeb8cb;font-size:11px;font-family:monospace}.hex-input[data-v-f5ccc52c]:focus{border-color:#7774ff;color:#fff}.alpha-modes[data-v-f5ccc52c]{display:flex;gap:3px}.alpha-modes button[data-v-f5ccc52c]{padding:4px 8px;border:1px solid transparent;border-radius:5px;background:transparent;color:#8d98ae;font-size:11px;cursor:pointer}.alpha-modes button[data-v-f5ccc52c]:hover{background:#273246}.alpha-modes button.on[data-v-f5ccc52c]{border-color:#7774ff;background:#605df0;color:#fff}.file-input[data-v-f5ccc52c]{display:none}.hex[data-v-f5ccc52c]{font-size:11px;color:#889;margin-left:auto;font-variant-numeric:tabular-nums}.inp.tiny[data-v-f5ccc52c]{width:46px;flex:0 0 46px;text-align:center}.axis-mode[data-v-f5ccc52c]{padding:4px 8px;border:1px solid #344158;border-radius:5px;background:#273246;color:#aeb8cf;font-size:11px;cursor:pointer}.axis-mode.on[data-v-f5ccc52c]{border-color:#7774ff;background:#605df0;color:#fff}.switch-row[data-v-f5ccc52c]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-f5ccc52c]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-f5ccc52c]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-f5ccc52c]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-f5ccc52c]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-f5ccc52c]:after{transform:translate(14px)}.modifier-item[data-v-f5ccc52c]{padding:8px 0 10px;border-bottom:1px solid #2a3549}.events-item[data-v-f5ccc52c]{margin-top:4px;padding-bottom:2px;border-bottom:0}.event-rules[data-v-f5ccc52c]{display:flex;flex-direction:column;gap:7px;margin-top:8px}.event-card[data-v-f5ccc52c]{padding:7px;border:1px solid #2b3a54;border-radius:7px;background:#121a28}.event-selects[data-v-f5ccc52c]{display:flex;align-items:center;gap:5px}.event-selects .inp[data-v-f5ccc52c]{height:26px;min-height:26px;box-sizing:border-box;font-size:11px}.event-select[data-v-f5ccc52c]{flex:0 0 34%}.event-target[data-v-f5ccc52c]{flex:1;min-width:0}.event-remove[data-v-f5ccc52c]{width:24px;height:26px;flex:0 0 24px;padding:0;border:1px solid #3a465f;border-radius:5px;background:#1c2638;color:#8794ad;font-size:11px;cursor:pointer}.event-remove[data-v-f5ccc52c]:hover{border-color:#a05260;background:#3a2230;color:#ffb3c0}.event-probability[data-v-f5ccc52c]{display:flex;align-items:center;gap:8px;margin-top:6px;color:#8d9ab5;font-size:10px}.event-probability>span[data-v-f5ccc52c]{flex:0 0 56px}.event-probability .inp[data-v-f5ccc52c]{flex:1;height:26px;box-sizing:border-box;font-size:11px}.event-inherit[data-v-f5ccc52c],.event-color-mode[data-v-f5ccc52c]{margin-top:4px}.event-color-mode>span[data-v-f5ccc52c]{flex:0 0 84px}.event-color-mode .inp[data-v-f5ccc52c]{height:26px;min-height:26px;box-sizing:border-box;font-size:11px}.event-collision-limit>span[data-v-f5ccc52c]{flex-basis:72px}.inherit-trigger[data-v-f5ccc52c]{flex:1;min-width:0;height:26px;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:6px;padding:0 7px;border:1px solid #34435e;border-radius:4px;background:#101827;color:#cdd6e8;font-size:11px;text-align:left;cursor:pointer}.inherit-trigger[data-v-f5ccc52c]:hover{border-color:#5d5aa8}.inherit-summary[data-v-f5ccc52c]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inherit-trigger i[data-v-f5ccc52c]{color:#7f8db0;font-style:normal;font-size:10px}.inherit-menu[data-v-f5ccc52c]{position:fixed;z-index:9999;padding:5px;border:1px solid #3b3f4a;border-radius:6px;background:#232427;box-shadow:0 12px 30px #0000008c}.inherit-option[data-v-f5ccc52c]{display:flex;align-items:center;gap:6px;width:100%;height:26px;padding:0 7px;border:0;border-radius:4px;background:transparent;color:#c9ccd3;font-size:12px;text-align:left;cursor:pointer}.inherit-option[data-v-f5ccc52c]:hover{background:#3a5a8c;color:#fff}.inherit-check[data-v-f5ccc52c]{width:14px;flex:0 0 14px;color:#d8dbe2;font-size:12px}.inherit-divider[data-v-f5ccc52c]{height:1px;margin:4px;background:#35373d}.event-add[data-v-f5ccc52c]{height:28px;border:1px dashed #536079;border-radius:6px;background:transparent;color:#9aa7c2;font-size:11px;cursor:pointer}.event-add[data-v-f5ccc52c]:hover{border-color:#7774ff;background:#232a45;color:#fff}.modifier-switch[data-v-f5ccc52c]{font-weight:600}.modifier-params[data-v-f5ccc52c]{margin:8px 0 0 10px;padding:2px 0 2px 10px;border-left:2px solid #344158}.modifier-hint[data-v-f5ccc52c]{margin:7px 0 0 2px;color:#647086;font-size:9px;line-height:1.5}.collision-filter-params[data-v-f5ccc52c]{position:relative;padding-top:5px;padding-bottom:5px}.collision-filter-title[data-v-f5ccc52c]{margin-bottom:8px;color:#9ba7bd;font-size:11px;font-weight:600}.collision-filter-tags[data-v-f5ccc52c]{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.collision-filter-tag[data-v-f5ccc52c]{display:inline-flex;min-width:0;align-items:center;gap:6px;padding:5px 5px 5px 8px;border:1px solid #625ff1;border-radius:6px;background:#514dcf;color:#fff;font-size:11px}.collision-filter-tag>span[data-v-f5ccc52c]{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collision-filter-tag.disabled[data-v-f5ccc52c]{border-color:#4b5364;background:#343b4b;color:#929bad}.collision-filter-tag button[data-v-f5ccc52c]{width:18px;height:18px;padding:0;border:0;border-radius:4px;background:#0b0f1a38;color:inherit;line-height:16px;cursor:pointer}.collision-filter-tag button[data-v-f5ccc52c]:hover{background:#0b0f1a80;color:#fff}.collision-filter-add[data-v-f5ccc52c]{width:30px;height:30px;padding:0;border:1px dashed #536079;border-radius:6px;background:#182131;color:#98a5bd;font-size:18px;line-height:28px;cursor:pointer}.collision-filter-add[data-v-f5ccc52c]:hover,.collision-filter-add.active[data-v-f5ccc52c]{border-color:#7774ff;background:#262c52;color:#fff}.collision-filter-add[data-v-f5ccc52c]:disabled{opacity:.42;cursor:not-allowed}.collision-filter-empty[data-v-f5ccc52c]{margin-top:7px;color:#6f7b91;font-size:10px}.collision-filter-picker[data-v-f5ccc52c]{display:grid;gap:4px;margin-top:7px;padding:5px;border:1px solid #344158;border-radius:6px;background:#101725}.collision-filter-picker button[data-v-f5ccc52c]{display:flex;min-width:0;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;border:0;border-radius:4px;background:transparent;color:#c7d0e3;font-size:11px;text-align:left;cursor:pointer}.collision-filter-picker button[data-v-f5ccc52c]:hover{background:#29344a;color:#fff}.collision-filter-picker button span[data-v-f5ccc52c]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collision-filter-picker button small[data-v-f5ccc52c]{flex:none;color:#68758d;font-size:9px}.switch-row input:disabled+.switch-ui[data-v-f5ccc52c]{opacity:.45;cursor:not-allowed}.bone-follow-target[data-v-f5ccc52c]{margin:7px 0 9px;padding:7px 8px;overflow:hidden;color:#7f8ba3;background:#121a29;border:1px solid #2f3c53;border-radius:5px;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.bone-follow-target strong[data-v-f5ccc52c]{color:#c8d0e4;font-weight:600}.bone-follow-missing[data-v-f5ccc52c]{margin:7px 0 9px;padding:7px 8px;color:#d49aa3;background:#2a1e26;border:1px solid #513540;border-radius:5px;font-size:10px;line-height:1.5}.bone-follow-rebind[data-v-f5ccc52c]{width:100%;min-height:28px;margin:0 0 8px;padding:4px 8px;overflow:hidden;border:1px solid #4a436e;border-radius:5px;background:#2d2947;color:#c8c2ee;font-size:10px;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.bone-follow-rebind[data-v-f5ccc52c]:hover{border-color:#7165bd;background:#3a335d;color:#fff}.bone-follow-transform-grid[data-v-f5ccc52c]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.modifier-mode-row[data-v-f5ccc52c]{display:flex;justify-content:flex-end;gap:4px;margin-bottom:6px}.gravity-curve-title[data-v-f5ccc52c]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:10px 0 6px;color:#9ba7bd;font-size:11px}.gravity-curve-title span[data-v-f5ccc52c]:last-child{color:#657188;font-size:9px}.gravity-curve-axis[data-v-f5ccc52c]{display:flex;justify-content:space-between;margin:3px 34px 0 1px;color:#5f6b82;font-size:9px}.gravity-params[data-v-f5ccc52c] .ce-svg{height:96px;background:#0f1625;border-color:#30405a}.trail-params[data-v-f5ccc52c]{padding-right:2px}.trail-section-title[data-v-f5ccc52c]{margin:3px 0 8px;color:#aeb8cf;font-size:12px;font-weight:700}.trail-fixed-color .hex-input[data-v-f5ccc52c]{min-width:0;flex:1}.trail-mode-head[data-v-f5ccc52c]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:10px 0 6px;color:#9ba7bd;font-size:11px}.trail-sub-switch[data-v-f5ccc52c]{margin:11px 0 7px;padding-top:9px;border-top:1px solid #2a3549}.trail-grid-row[data-v-f5ccc52c]{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.trail-grid-row[data-v-f5ccc52c] .ns{min-width:0;flex-wrap:wrap;align-items:center}.trail-grid-row[data-v-f5ccc52c] .ns-label{width:100%}.trail-grid-row[data-v-f5ccc52c] .ns-range{min-width:0}.trail-grid-row[data-v-f5ccc52c] .ns-num{width:42px}.trail-params[data-v-f5ccc52c] .ce-svg{height:92px;background:#0f1625;border-color:#30405a}.group[data-v-63cfb71e]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-63cfb71e]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-63cfb71e]:hover{background:#20202e}.group-reset[data-v-63cfb71e]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-63cfb71e]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-63cfb71e]{padding:8px 10px 12px}.caret[data-v-63cfb71e]{display:inline-block;width:12px;color:#667;font-size:11px}.row[data-v-63cfb71e]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-63cfb71e]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-63cfb71e]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.placeholder[data-v-63cfb71e]{color:#667;font-size:11px;padding:6px 0}.export-settings[data-v-63cfb71e]{padding-top:3px}.export-field[data-v-63cfb71e]{display:flex;flex-direction:column;gap:6px;margin:10px 0 13px;color:#9ca8bf;font-size:11px;font-weight:600}.export-input[data-v-63cfb71e]{width:100%;min-height:34px;box-sizing:border-box;padding:6px 9px;color:#e3e7f2;background:#141a29;border-color:#35445f}.export-fps-row[data-v-63cfb71e]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:end}.export-fps-field[data-v-63cfb71e]{margin-bottom:5px}.export-checkbox[data-v-63cfb71e]{display:flex;align-items:center;gap:7px;min-height:34px;margin-bottom:5px;color:#aeb8cc;font-size:11px;white-space:nowrap}.export-checkbox input[data-v-63cfb71e]{width:17px;height:17px;margin:0;accent-color:#625ff1}.export-help[data-v-63cfb71e]{margin:-6px 0 14px;color:#66758e;font-size:10px;line-height:1.5}.export-switches[data-v-63cfb71e]{display:grid;gap:13px;margin:4px 0 7px;padding-top:2px}.export-switch[data-v-63cfb71e]{font-weight:600}.export-switch-last[data-v-63cfb71e]{margin-top:13px}.inp.tiny[data-v-63cfb71e]{width:46px;flex:0 0 46px;text-align:center}.switch-row[data-v-63cfb71e]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-63cfb71e]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-63cfb71e]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-63cfb71e]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-63cfb71e]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-63cfb71e]:after{transform:translate(14px)}.switch-row input:disabled+.switch-ui[data-v-63cfb71e]{opacity:.45;cursor:not-allowed}.spine-export-actions[data-v-33af5045]{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:10px}.export-spine-json[data-v-33af5045]{width:100%;padding:9px 8px;flex:0 0 auto;border:1px solid #4f4b9a;border-radius:7px;background:#403b91;color:#f1f0ff;font-size:12px;font-weight:700;cursor:pointer}.export-spine-json[data-v-33af5045]:hover{border-color:#7774ff;background:#514bc0}.export-spine-json[data-v-33af5045]:disabled{cursor:wait;opacity:.68}.export-spine-project[data-v-33af5045]{grid-column:1 / -1;width:100%;padding:7px 8px;border:1px solid #287d69;border-radius:7px;background:#196854;color:#edfff9;font-size:12px;font-weight:700;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.export-spine-project small[data-v-33af5045]{color:inherit;font-size:9px;font-weight:500;line-height:1.1}.export-spine-project[data-v-33af5045]:hover:not(:disabled){border-color:#47c89f;background:#238267}.export-spine-project[data-v-33af5045]:disabled{cursor:not-allowed;opacity:.48}.export-spine-images[data-v-33af5045]{width:100%;padding:8px;border:1px solid #3b5f8b;border-radius:7px;background:#243e64;color:#eaf3ff;font-size:12px;font-weight:700;cursor:pointer}.export-spine-images[data-v-33af5045]:hover:not(:disabled){border-color:#6099dc;background:#315581}.export-spine-images[data-v-33af5045]:disabled{cursor:wait;opacity:.55}.connector-status[data-v-33af5045]{display:flex;align-items:center;justify-content:center;gap:5px;padding-top:6px;color:#717b99;font-size:10px}.connector-status .connector-dot[data-v-33af5045]{width:6px;height:6px;border-radius:50%;background:#66718f}.connector-status.ready[data-v-33af5045]{color:#70d8ae}.connector-status.ready .connector-dot[data-v-33af5045]{background:#49c993;box-shadow:0 0 5px #49c99388}.connector-status.warning[data-v-33af5045]{color:#d4aa67}.connector-status.warning .connector-dot[data-v-33af5045]{background:#d4aa67}.connector-status button[data-v-33af5045]{padding:0 3px;border:0;background:transparent;color:#8290b6;font-size:10px;cursor:pointer}.connector-status button[data-v-33af5045]:hover{color:#c5caff}.connector-status a[data-v-33af5045]{padding:0 3px;color:#a8b0ff;font-size:10px;text-decoration:underline}.connector-status a[data-v-33af5045]:hover{color:#d8dcff}.export-message[data-v-33af5045]{padding:7px 5px 0;color:#70d8ae;font-size:10px;line-height:1.45;text-align:center}.export-message.error[data-v-33af5045]{color:#ff858f}.export-message a[data-v-33af5045]{display:inline-block;margin-left:5px;color:#9da7ff;text-decoration:underline}.panel[data-v-14a55de6]{display:flex;width:100%;height:100%;flex-direction:column;overflow:hidden;background:#14141f;border-left:1px solid #2a2a3c;padding:12px;box-sizing:border-box}.panel-scroll[data-v-14a55de6]{min-height:0;flex:1;overflow-y:auto;overscroll-behavior:contain;padding-right:2px;scrollbar-width:thin;scrollbar-color:#2e2e44 transparent}.panel-scroll[data-v-14a55de6]::-webkit-scrollbar{width:6px}.panel-scroll[data-v-14a55de6]::-webkit-scrollbar-track{background:transparent}.panel-scroll[data-v-14a55de6]::-webkit-scrollbar-thumb{background:#2e2e44;border-radius:3px}.panel-scroll[data-v-14a55de6]::-webkit-scrollbar-thumb:hover{background:#3a3a55}.panel-header[data-v-14a55de6]{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;flex:0 0 auto;font-weight:700;color:#ccd}.timeline[data-v-6213c4a4]{height:100%;background:#12121c;border-top:1px solid #2a2a3c;display:flex;flex-direction:column;padding:6px 10px;gap:4px}.tl-controls[data-v-6213c4a4]{display:flex;align-items:center;gap:8px}.tl-btn[data-v-6213c4a4]{width:30px;height:26px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:12px;cursor:pointer}.tl-btn.on[data-v-6213c4a4]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.tl-ab-loop[data-v-6213c4a4]{position:relative}.tl-ab-toggle[data-v-6213c4a4]{display:flex;height:26px;align-items:center;gap:7px;padding:0 7px;border:1px solid #343a51;border-radius:6px;background:#1e1e2e;color:#8f98ad;font-size:10px;cursor:pointer}.tl-ab-toggle.on[data-v-6213c4a4]{border-color:#716eff;background:#2e2d50;color:#eef}.tl-switch[data-v-6213c4a4]{position:relative;width:22px;height:12px;border-radius:99px;background:#343a4b}.tl-switch b[data-v-6213c4a4]{position:absolute;top:2px;left:2px;width:8px;height:8px;border-radius:50%;background:#8992a5;transition:transform .15s ease,background .15s ease}.tl-ab-toggle.on .tl-switch[data-v-6213c4a4]{background:#716eff}.tl-ab-toggle.on .tl-switch b[data-v-6213c4a4]{transform:translate(10px);background:#fff}.tl-ab-popover[data-v-6213c4a4]{position:absolute;z-index:40;left:0;bottom:calc(100% + 8px);display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid #4b4c73;border-radius:8px;background:#171724;box-shadow:0 10px 26px #00000080}.tl-ab-title[data-v-6213c4a4]{color:#b7bdd2;font-size:10px;white-space:nowrap}.tl-range[data-v-6213c4a4]{display:flex;height:25px;align-items:center;gap:3px;color:#778198;font-size:10px}.tl-range input[data-v-6213c4a4]{width:43px;height:25px;padding:0 5px;box-sizing:border-box;border:1px solid #3a3a51;border-radius:5px;outline:none;background:#181824;color:#e1e4ed;font-size:11px;text-align:center}.tl-range input[data-v-6213c4a4]:focus{border-color:#716eff}.tl-frame[data-v-6213c4a4]{display:inline-block;flex:0 0 92px;width:92px;box-sizing:border-box;font-size:12px;color:#aab;text-align:right;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;white-space:nowrap}.tl-frame b[data-v-6213c4a4]{display:inline;color:inherit;font-weight:400}.tl-legend[data-v-6213c4a4]{display:flex;align-items:center;gap:4px;color:#778198;font-size:10px}.tl-legend i[data-v-6213c4a4]{display:inline-block;width:10px;height:7px;border-radius:2px}.legend-emission[data-v-6213c4a4]{margin-left:4px;background:#2f8b62}.legend-life[data-v-6213c4a4]{margin-left:5px;background:#a54551}.legend-spine[data-v-6213c4a4]{margin-left:5px;background:#7448b8}.tl-anim[data-v-6213c4a4]{display:flex;align-items:center;gap:6px;font-size:12px;color:#aab}.tl-owner-animation[data-v-6213c4a4]{position:relative}.tl-animation-trigger[data-v-6213c4a4]{display:flex;align-items:center;justify-content:space-between;gap:8px;width:116px;height:25px;padding:0 7px;overflow:hidden;border:1px solid #2e2e44;border-radius:5px;background:#1a1a28;color:#dde;cursor:pointer}.tl-animation-trigger>span[data-v-6213c4a4]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tl-animation-trigger>i[data-v-6213c4a4]{flex:0 0 auto;color:#8c96ad;font-style:normal}.tl-animation-trigger[data-v-6213c4a4]:disabled{opacity:.5;cursor:not-allowed}.tl-animation-menu[data-v-6213c4a4]{position:absolute;z-index:30;right:0;bottom:calc(100% + 6px);width:226px;padding:7px;border:1px solid #3c4760;border-radius:8px;background:#171b29;box-shadow:0 10px 24px #00000073}.tl-animation-menu-title[data-v-6213c4a4]{padding:2px 4px 6px;color:#77839c;font-size:10px}.tl-animation-option[data-v-6213c4a4]{display:flex;align-items:center;justify-content:space-between;width:100%;height:27px;padding:0 7px;border:0;border-radius:5px;background:transparent;color:#b8c1d5;text-align:left;cursor:pointer}.tl-animation-option>span[data-v-6213c4a4]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tl-animation-option[data-v-6213c4a4]:hover{background:#252e42}.tl-animation-option.on[data-v-6213c4a4]{background:#34335d;color:#fff}.tl-animation-option>i[data-v-6213c4a4]{color:#8d8aff;font-style:normal}.tl-animation-editor[data-v-6213c4a4]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px;margin-top:7px;padding-top:7px;border-top:1px solid #2b3346}.tl-animation-name[data-v-6213c4a4]{min-width:0;height:27px;padding:0 7px;box-sizing:border-box;border:1px solid #343e55;border-radius:5px;background:#101522;color:#e1e6f2;outline:none}.tl-animation-name[data-v-6213c4a4]:focus{border-color:#6865d8}.tl-animation-editor button[data-v-6213c4a4],.tl-animation-actions button[data-v-6213c4a4]{height:27px;padding:0 8px;border:1px solid #3c4861;border-radius:5px;background:#29344a;color:#cbd3e3;cursor:pointer}.tl-animation-actions[data-v-6213c4a4]{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:6px}.tl-animation-actions button[data-v-6213c4a4]:last-child{border-color:#5b3942;background:#3b282f;color:#e2a8b2}.tl-animation-actions button[data-v-6213c4a4]:disabled{opacity:.4;cursor:not-allowed}.tl-animation-error[data-v-6213c4a4]{margin-top:5px;color:#ef8997;font-size:10px}.tl-animation-hint[data-v-6213c4a4]{margin-top:5px;color:#69758d;font-size:9px;text-align:center}.tl-sel[data-v-6213c4a4]{background:#1a1a28;border:1px solid #2e2e44;color:#dde;border-radius:5px;padding:2px 6px;font-size:12px}.tl-sel[data-v-6213c4a4]:disabled{opacity:.5;cursor:not-allowed}.tl-spine-preview .tl-sel[data-v-6213c4a4]{max-width:190px}.tl-zoom[data-v-6213c4a4]{margin-left:auto;font-size:11px;color:#667}.tl-viewport[data-v-6213c4a4]{position:relative;flex:1;overflow:hidden;background:#0d0d14;border:1px solid #2a2a3c;border-radius:6px;cursor:ew-resize}.tl-ticks[data-v-6213c4a4]{position:absolute;top:0;left:0;right:0;height:18px}.tl-tickline[data-v-6213c4a4]{position:absolute;top:0;bottom:0;width:1px;background:#263040}.tl-ticklabel[data-v-6213c4a4]{position:absolute;top:2px;transform:translate(-50%);font-size:9px;color:#667}.tl-playhead[data-v-6213c4a4]{position:absolute;top:0;bottom:0;width:2px;background:#fc3;z-index:5;pointer-events:none}.tl-lanes[data-v-6213c4a4]{position:absolute;top:22px;left:0;right:0;bottom:0}.tl-lane[data-v-6213c4a4]{position:relative;height:26px;margin-bottom:4px}.lane-ico[data-v-6213c4a4]{position:absolute;left:4px;top:6px;font-size:11px;color:#dde;z-index:2;pointer-events:none}.lane-ico.sub-lane-ico[data-v-6213c4a4]{color:#7f8999}.lane-bar[data-v-6213c4a4]{position:absolute;top:4px;height:18px;display:flex;align-items:stretch;cursor:grab;box-sizing:border-box}.lane-bar[data-v-6213c4a4]:active{cursor:grabbing}.lane-name[data-v-6213c4a4]{position:absolute;left:14px;right:5px;top:2px;z-index:2;pointer-events:none;font-size:11px;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bar-life[data-v-6213c4a4]{position:absolute;inset:0 auto 0 0;z-index:0;min-width:1px;border:1px solid #c05a66;border-radius:5px;background:#a54551;box-sizing:border-box}.sub-emitter-bar .bar-life[data-v-6213c4a4]{border-color:#727d8f;background:#596274}.bar-life.loop-life[data-v-6213c4a4]{border-color:#667085;background:#242b39}.bar-emission[data-v-6213c4a4]{position:absolute;inset:0 auto 0 0;z-index:1;min-width:1px;border:1px solid #45a97d;border-radius:5px 0 0 5px;background:#2f8b62;box-sizing:border-box}.bar-emission.bar-loop[data-v-6213c4a4]{border-radius:0}.bar-loop-transition[data-v-6213c4a4]{position:absolute;top:0;bottom:0;z-index:1;border:1px solid #7d8799;background:#50596a;box-sizing:border-box}.bar-loop-start[data-v-6213c4a4]{left:0;border-radius:5px 0 0 5px}.bar-loop-end[data-v-6213c4a4]{border-radius:0 5px 5px 0}.bar-handle[data-v-6213c4a4]{position:absolute;z-index:4;right:-4px;top:-1px;bottom:-1px;width:8px;cursor:ew-resize;background:#ffffff2e}.bar-handle[data-v-6213c4a4]:hover{background:#ffffff59}.spine-ico[data-v-6213c4a4]{color:#c08cff}.spine-bar[data-v-6213c4a4]{position:absolute;top:4px;height:18px;min-width:1px;box-sizing:border-box;border:1px solid #a575ed;border-radius:5px;background:#7448b8;cursor:grab;box-shadow:inset 0 0 0 1px #ffffff0d}.spine-bar[data-v-6213c4a4]:active{cursor:grabbing}.tl-empty[data-v-6213c4a4]{color:#667;font-size:11px;padding:8px}.transfer-overlay[data-v-592b922e]{position:fixed;z-index:2000;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;pointer-events:auto;cursor:wait;overscroll-behavior:contain;background:#05080f42;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}.transfer-dialog[data-v-592b922e]{width:min(420px,calc(100vw - 40px));padding:18px 20px 16px;border:1px solid #414b66;border-radius:10px;box-shadow:0 18px 55px #00000075;background:#171d2b;color:#e7ebf5}.transfer-heading[data-v-592b922e]{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px;font-size:14px;font-weight:700}.transfer-heading strong[data-v-592b922e]{color:#a8a6ff;font-size:12px;font-variant-numeric:tabular-nums}.transfer-track[data-v-592b922e]{height:9px;overflow:hidden;border:1px solid #35415a;border-radius:999px;background:#0d1422}.transfer-bar[data-v-592b922e]{height:100%;border-radius:inherit;background:linear-gradient(90deg,#4d75e8,#7774ff);transition:width .16s ease}.transfer-track.indeterminate .transfer-bar[data-v-592b922e]{width:42%;animation:transfer-slide-592b922e 1s ease-in-out infinite}.transfer-detail[data-v-592b922e]{min-height:17px;margin-top:9px;color:#8895ae;font-size:11px;line-height:1.5}.transfer-dialog.failed[data-v-592b922e]{border-color:#754351}.transfer-dialog.failed .transfer-heading strong[data-v-592b922e],.transfer-dialog.failed .transfer-detail[data-v-592b922e]{color:#e99aa9}.transfer-dialog.failed .transfer-bar[data-v-592b922e]{background:#c85d70}.transfer-fade-enter-active[data-v-592b922e],.transfer-fade-leave-active[data-v-592b922e]{transition:opacity .16s ease}.transfer-fade-enter-from[data-v-592b922e],.transfer-fade-leave-to[data-v-592b922e]{opacity:0}@keyframes transfer-slide-592b922e{0%{transform:translate(-110%)}to{transform:translate(250%)}}.layout[data-v-07c42c10]{display:flex;width:100%;height:100%;min-height:0;overflow:clip}.parameter-panel[data-v-07c42c10]{flex-shrink:0;height:100%;min-height:0;overflow:clip}.resizer-col[data-v-07c42c10]{width:5px;cursor:col-resize;background:#1c1c2a;border-left:1px solid #2a2a3c;border-right:1px solid #2a2a3c;flex-shrink:0}.resizer-col[data-v-07c42c10]:hover{background:#3a5a8c}.right[data-v-07c42c10]{flex:1;min-width:0;height:100%;min-height:0;overflow:clip;display:flex;flex-direction:column}.panel-right .right[data-v-07c42c10]{order:1}.panel-right .resizer-col[data-v-07c42c10]{order:2}.panel-right .parameter-panel[data-v-07c42c10]{order:3}.stage-area[data-v-07c42c10]{flex:1;min-height:0;overflow:clip}.resizer-row[data-v-07c42c10]{height:4px;cursor:row-resize;background:#1c1c2a;border-top:1px solid #2a2a3c;border-bottom:1px solid #2a2a3c;flex-shrink:0}.resizer-row[data-v-07c42c10]:hover{background:#3a5a8c}.timeline-area[data-v-07c42c10]{position:relative;z-index:10;flex-shrink:0;overflow:visible}html,body{width:100%;height:100%;margin:0;padding:0;overflow:clip;overscroll-behavior:none;background:#0b0b12;color:#e8e8f0;font-family:system-ui,-apple-system,Segoe UI,sans-serif}body{position:fixed;top:0;right:0;bottom:0;left:0}*{box-sizing:border-box}#app{position:fixed;top:0;right:0;bottom:0;left:0;width:auto;height:auto;overflow:clip}html,body,#app{-webkit-user-select:none;user-select:none}input,textarea,select,[contenteditable=true]{-webkit-user-select:text;user-select:text}input[type=number]{-webkit-appearance:textfield;appearance:textfield;-moz-appearance:textfield}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ns-label,.row>span:first-child,.field-block>span,.compact-field>span,.event-probability>span{line-height:1.25;overflow-wrap:anywhere} +.help-overlay[data-v-4bb9bc76]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:72px 24px 28px;box-sizing:border-box;background:#05080fb8;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.help-dialog[data-v-4bb9bc76]{width:min(820px,100%);max-height:100%;display:flex;flex-direction:column;overflow:hidden;border:1px solid #3a4864;border-radius:14px;background:#141a27;color:#b8c3d8;box-shadow:0 22px 70px #0000009e}.help-head[data-v-4bb9bc76]{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;padding:18px 20px 15px;border-bottom:1px solid #2b354a;background:linear-gradient(135deg,#202942,#181e2d)}.help-head h2[data-v-4bb9bc76]{margin:0;color:#eef2ff;font-size:19px}.help-head p[data-v-4bb9bc76]{margin:5px 0 0;color:#7786a3;font-size:11px}.help-close[data-v-4bb9bc76]{width:28px;height:28px;flex:0 0 28px;border:1px solid #43516b;border-radius:6px;background:#273249;color:#ccd7ed;cursor:pointer}.help-close[data-v-4bb9bc76]:hover{border-color:#7774ff;background:#3b4670;color:#fff}.help-body[data-v-4bb9bc76]{min-height:0;overflow:auto;padding:18px 20px 21px}.help-section[data-v-4bb9bc76]{padding:14px 15px;border:1px solid #2c3850;border-radius:10px;background:#181f2e}.help-section h3[data-v-4bb9bc76]{margin:0 0 11px;color:#9fb2ff;font-size:13px}.help-start ol[data-v-4bb9bc76]{margin:0;padding-left:21px;color:#aab6cc;font-size:12px;line-height:1.75}.help-start li[data-v-4bb9bc76]::marker{color:#7774ff;font-weight:700}.help-section b[data-v-4bb9bc76]{color:#dce4f7}.help-grid[data-v-4bb9bc76]{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(250px,.85fr);gap:12px;margin-top:12px}.help-list[data-v-4bb9bc76]{display:grid;gap:0;margin:0}.help-list>div[data-v-4bb9bc76]{display:grid;grid-template-columns:78px 1fr;gap:9px;padding:7px 0;border-bottom:1px solid #263146}.help-list>div[data-v-4bb9bc76]:last-child{border-bottom:0}.help-list dt[data-v-4bb9bc76]{color:#d3dcf0;font-size:11px;font-weight:700}.help-list dd[data-v-4bb9bc76]{margin:0;color:#8795ae;font-size:11px;line-height:1.5}.shortcut-list[data-v-4bb9bc76]{display:grid;gap:7px}.shortcut-list>div[data-v-4bb9bc76]{display:flex;align-items:center;min-height:25px;gap:5px}.shortcut-list kbd[data-v-4bb9bc76]{min-width:24px;box-sizing:border-box;padding:3px 6px;border:1px solid #465470;border-bottom-width:2px;border-radius:5px;background:#101623;color:#e0e7f6;font:10px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;text-align:center}.shortcut-list span[data-v-4bb9bc76]{color:#65728b;font-size:10px}.shortcut-list em[data-v-4bb9bc76]{margin-left:auto;color:#9ca9c1;font-size:11px;font-style:normal}.help-note[data-v-4bb9bc76]{margin:11px 0 0;padding-top:9px;border-top:1px solid #2a3549;color:#697791;font-size:10px;line-height:1.55}.help-export[data-v-4bb9bc76]{margin-top:12px}.help-export p[data-v-4bb9bc76]{margin:0;color:#8997b0;font-size:11px;line-height:1.65}.help-doc-title[data-v-4bb9bc76]{margin:16px 2px 2px;color:#9fb2ff;font-size:13px;font-weight:700;letter-spacing:.5px}.help-module[data-v-4bb9bc76]{margin-top:12px}.help-module-head[data-v-4bb9bc76]{display:flex;align-items:center;gap:8px;width:100%;padding:0;border:0;background:transparent;color:#9fb2ff;font:inherit;font-size:13px;font-weight:700;text-align:left;cursor:pointer}.help-module-head[data-v-4bb9bc76]:hover{color:#fff}.help-module-head .mtitle[data-v-4bb9bc76]{flex:1;min-width:0}.help-module-head .caret[data-v-4bb9bc76]{flex:0 0 auto;color:#7b86a2;font-size:12px}.help-module.open .help-module-head[data-v-4bb9bc76]{color:#fff}.help-module.open .help-module-head .caret[data-v-4bb9bc76]{color:#9fb2ff}.help-module .mnum[data-v-4bb9bc76]{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:6px;background:linear-gradient(135deg,#4a53b8,#6a5fd0);color:#fff;font-size:12px;font-weight:700}.help-module.help-connector[data-v-4bb9bc76]{border-color:#4a4f8a;background:linear-gradient(135deg,#1d2442,#181d2f)}.help-module.help-connector .help-module-head[data-v-4bb9bc76]{color:#b8c2ff}.help-module .connector-intro[data-v-4bb9bc76]{margin:0 0 10px;color:#9aa8c4;font-size:11px;line-height:1.6}.help-module .connector-intro b[data-v-4bb9bc76]{color:#dce4f7}.help-module .dl-link[data-v-4bb9bc76]{display:inline-flex;flex-direction:column;align-items:flex-start;gap:2px;margin:0 10px 6px 0;padding:6px 12px;border:1px solid #5652b5;border-radius:6px;background:#4540a0;color:#fff;font-size:12px;font-weight:700;text-decoration:none}.help-module .dl-link[data-v-4bb9bc76]:hover{border-color:#8982ff;background:#554dc2}.help-module .dl-link small[data-v-4bb9bc76]{color:#cfe0ff;font-weight:500;font-size:9px}.help-module-body[data-v-4bb9bc76]{padding-top:10px}@media(max-width:760px){.help-overlay[data-v-4bb9bc76]{padding:66px 12px 14px}.help-grid[data-v-4bb9bc76]{grid-template-columns:1fr}}.topbar[data-v-6411b316]{position:absolute;top:10px;left:10px;right:10px;display:flex;align-items:center;gap:10px;padding:8px 12px;background:#141420d9;border-radius:10px;border:1px solid rgba(255,255,255,.08);font-size:12px;color:#aab;z-index:5;flex-wrap:wrap}.topbar input[type=range][data-v-6411b316]{background:#1a1a28;border:1px solid #2e2e44;color:#dde;border-radius:5px}.tool-group[data-v-6411b316]{display:flex;gap:6px;margin-left:6px;padding-left:12px;border-left:1px solid #2a2a3c}.tool-btn[data-v-6411b316]{width:30px;height:26px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center}.tool-btn[data-v-6411b316]:hover{background:#2b3a5c;color:#fff}.tool-btn.on[data-v-6411b316]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.background-menu[data-v-6411b316]{position:relative;flex:0 0 auto}.background-btn[data-v-6411b316]{height:28px;padding:0 11px;border:1px solid #3a4963;border-radius:6px;background:#202a3b;color:#cbd7ed;font-size:12px;cursor:pointer}.background-btn[data-v-6411b316]:hover,.background-btn.on[data-v-6411b316]{border-color:#7774ff;background:#343b63;color:#fff}.background-panel[data-v-6411b316]{position:absolute;top:calc(100% + 9px);right:0;width:248px;box-sizing:border-box;padding:10px;border:1px solid #343b50;border-radius:9px;background:#141420fa;color:#aeb8cc;box-shadow:0 8px 24px #0000007a;z-index:12}.background-upload[data-v-6411b316]{width:100%;height:30px;border:1px solid #5652b5;border-radius:6px;background:#4540a0;color:#fff;cursor:pointer}.background-upload[data-v-6411b316]:hover{border-color:#8982ff;background:#554dc2}.background-clear[data-v-6411b316]{width:100%;height:28px;margin-top:6px;border:1px solid #70404a;border-radius:6px;background:#512a33;color:#efb5bd;cursor:pointer}.background-clear[data-v-6411b316]:hover:not(:disabled){border-color:#b65b6a;background:#6a303b;color:#fff}.background-clear[data-v-6411b316]:disabled{opacity:.42;cursor:not-allowed}.background-file-input[data-v-6411b316]{display:none}.background-file-name[data-v-6411b316]{margin:7px 2px 9px;overflow:hidden;color:#737f98;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.background-position-row[data-v-6411b316]{display:grid;grid-template-columns:1fr 1fr;gap:8px}.background-position-row label[data-v-6411b316]{display:flex;align-items:center;gap:5px;color:#8995ad;font-size:11px}.background-position-row input[data-v-6411b316]{width:0;min-width:0;flex:1;box-sizing:border-box;height:28px;padding:0 6px;border:1px solid #343e55;border-radius:5px;background:#101522;color:#e1e6f2}.background-opacity-row[data-v-6411b316]{display:grid;grid-template-columns:46px 1fr 34px;align-items:center;gap:7px;margin-top:10px;font-size:11px}.background-opacity-row input[data-v-6411b316]{min-width:0;accent-color:#675de0}.background-opacity-row b[data-v-6411b316]{color:#aeb8cc;font-size:10px;text-align:right;font-variant-numeric:tabular-nums}.language-picker[data-v-6411b316]{display:flex;height:28px;align-items:center;gap:6px;margin-left:auto;color:#9aa8c1;font-size:11px;white-space:nowrap}.language-picker select[data-v-6411b316]{height:28px;padding:0 24px 0 8px;border:1px solid #3a4963;border-radius:6px;outline:none;background:#202a3b;color:#dbe4f5;font-size:11px;cursor:pointer}.language-picker select[data-v-6411b316]:focus{border-color:#7774ff}.help-btn[data-v-6411b316]{height:28px;padding:0 11px;flex:0 0 auto;border:1px solid #3a4963;border-radius:6px;background:#202a3b;color:#cbd7ed;font-size:12px;font-weight:700;cursor:pointer}.help-btn[data-v-6411b316]:hover,.help-btn.on[data-v-6411b316]{border-color:#7774ff;background:#343b63;color:#fff}.zoom-pct[data-v-6411b316]{margin-left:0;font-variant-numeric:tabular-nums;color:#9aa;min-width:44px;text-align:center}.settings-btn[data-v-6411b316]{height:28px;padding:0 12px;flex:0 0 auto;border:1px solid #3a4963;border-radius:6px;background:#202a3b;color:#cdf;font-size:12px;font-weight:700;cursor:pointer}.settings-btn[data-v-6411b316]:hover{border-color:#7774ff;background:#2b3a5c;color:#fff}.undo-btn[data-v-6411b316]{width:30px;height:28px;flex:0 0 30px;border:1px solid #3a4963;border-radius:6px;background:#202a3b;color:#cdd8ed;font-size:18px;line-height:1;cursor:pointer}.undo-btn[data-v-6411b316]:hover:not(:disabled){border-color:#7774ff;background:#2b3a5c;color:#fff}.undo-btn[data-v-6411b316]:disabled{opacity:.38;cursor:not-allowed}.settings-panel[data-v-c1ded952]{position:absolute;top:52px;left:10px;width:240px;z-index:10;background:#141420f7;border:1px solid #2a2a3c;border-radius:10px;padding:10px 12px;font-size:12px;color:#aab;box-shadow:0 6px 20px #0006}.sp-head[data-v-c1ded952]{display:flex;justify-content:space-between;align-items:center;font-weight:700;color:#cdf;margin-bottom:10px}.sp-section-title[data-v-c1ded952]{margin:2px 0 8px;color:#8a93bb;font-size:11px}.sp-switch-row[data-v-c1ded952]{display:flex;align-items:center;justify-content:space-between;gap:10px;color:#aab}.sp-switch-control[data-v-c1ded952]{display:inline-flex;align-items:center;gap:7px}.sp-switch-control input[data-v-c1ded952]{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.sp-switch-ui[data-v-c1ded952]{position:relative;width:34px;height:18px;border-radius:999px;background:#39445a;cursor:pointer;transition:background .16s ease}.sp-switch-ui[data-v-c1ded952]:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#f4f6fb;transition:transform .16s ease}.sp-switch-control input:checked+.sp-switch-ui[data-v-c1ded952]{background:#655df0}.sp-switch-control input:checked+.sp-switch-ui[data-v-c1ded952]:after{transform:translate(16px)}.sp-switch-control input:focus-visible+.sp-switch-ui[data-v-c1ded952]{outline:2px solid #8b86ff;outline-offset:2px}.sp-switch-control b[data-v-c1ded952]{min-width:24px;color:#8a93bb;font-size:11px;font-weight:500}.sp-cache-note[data-v-c1ded952]{margin-top:10px;padding-top:9px;border-top:1px solid #2a2a3c;color:#647089;font-size:10px;text-align:center}.sp-divider[data-v-c1ded952]{height:1px;margin:10px 0;background:#2a2a3c}.sp-close[data-v-c1ded952]{background:#2e3a55;border:none;color:#cdf;border-radius:4px;width:18px;height:18px;cursor:pointer;font-size:11px}.sp-row[data-v-c1ded952]{display:flex;align-items:center;gap:8px;margin:8px 0}.sp-row>span[data-v-c1ded952]:first-child{width:76px;flex-shrink:0;color:#8a93bb}.sp-row input[type=range][data-v-c1ded952]{flex:1;background:#1a1a28;accent-color:#3a5a8c}.sp-num[data-v-c1ded952]{width:52px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px;padding:2px 4px}.sp-undo-limit[data-v-c1ded952]{margin-left:auto;width:64px;height:26px;box-sizing:border-box}.sp-colr[data-v-c1ded952]{width:26px;height:22px;border:none;background:none;cursor:pointer}.sp-hex[data-v-c1ded952]{font-size:11px;color:#889;font-variant-numeric:tabular-nums}.sp-chk[data-v-c1ded952]{display:flex;align-items:center;gap:6px;margin:8px 0;color:#aab}.stage-wrap[data-v-1023341a]{position:relative;width:100%;height:100%;overflow:hidden}.stage-holder[data-v-1023341a]{width:100%;height:100%;cursor:grab;touch-action:none;background-color:#0e1219;outline:none}.stage-holder.grid[data-v-1023341a]{background:conic-gradient(#141a26 90deg,transparent 90deg 180deg,#141a26 180deg 270deg,#141a26 180deg 270deg,transparent 270deg);background-size:28px 28px}.stage-holder[data-v-1023341a]:active{cursor:grabbing}.hud[data-v-1023341a]{position:absolute;bottom:12px;left:12px;padding:8px 12px;background:#141420bf;border-radius:8px;font-size:12px;color:#a0a8cc}.hud-number[data-v-1023341a]{display:inline-block;box-sizing:border-box;text-align:right;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}.hud-system-count[data-v-1023341a]{width:3ch}.hud-particle-count[data-v-1023341a]{width:7ch;text-align:left}.hud-tip[data-v-1023341a]{margin-left:12px;color:#5f6a8a;font-size:11px}b[data-v-1023341a]{color:#fc3}.config-management-body[data-v-0da232dc]{padding-bottom:2px}.config-toolbar[data-v-0da232dc]{display:grid;grid-template-columns:auto auto minmax(0,1fr);gap:6px;margin-bottom:10px}.config-toolbar button[data-v-0da232dc],.config-toolbar select[data-v-0da232dc]{min-width:0;height:30px;box-sizing:border-box;border:1px solid #3b4864;border-radius:6px;background:#263149;color:#d6def0;font-size:11px}.config-toolbar button[data-v-0da232dc]{padding:0 9px;cursor:pointer}.config-toolbar button[data-v-0da232dc]:hover{border-color:#7169dc;background:#343d68;color:#fff}.config-toolbar select[data-v-0da232dc]{padding:0 7px;overflow:hidden;text-overflow:ellipsis}.config-toolbar select[data-v-0da232dc]:disabled{color:#68738a;background:#1b2130}.config-message[data-v-0da232dc]{margin:-4px 0 9px;color:#83b9a2;font-size:10px}.config-message.error[data-v-0da232dc]{color:#e8959e}.group[data-v-0da232dc]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-0da232dc]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-0da232dc]:hover{background:#20202e}.group-body[data-v-0da232dc]{padding:8px 10px 12px}.caret[data-v-0da232dc]{display:inline-block;width:12px;color:#667;font-size:11px}.ns[data-v-7c2fbed0]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.ns-label[data-v-7c2fbed0]{width:60px;flex-shrink:0;color:#8a93bb}.ns-range[data-v-7c2fbed0]{flex:1;accent-color:#3a7cd6}.ns-num[data-v-7c2fbed0]{width:56px;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px;text-align:right}.ns.disabled[data-v-7c2fbed0]{opacity:.55}.ns.disabled .ns-range[data-v-7c2fbed0],.ns.disabled .ns-num[data-v-7c2fbed0]{cursor:not-allowed}.ce[data-v-8f475293]{display:flex;align-items:flex-start;gap:6px;width:100%}.ce-editor[data-v-8f475293]{flex:1;min-width:0}.ce-reset[data-v-8f475293]{flex:0 0 auto;padding:5px 7px;border:1px solid #3b4b65;border-radius:5px;background:#242f42;color:#c4cee2;font-size:10px;cursor:pointer}.ce-reset[data-v-8f475293]:hover{border-color:#7774ff;background:#4f4dc2;color:#fff}.ce-svg[data-v-8f475293]{width:100%;height:110px;display:block;border:1px solid #2a2a3c;border-radius:6px;background:#10101a;cursor:crosshair;touch-action:none}.ce-grid line[data-v-8f475293]{stroke:#1e1e30;stroke-width:1}.ce-frame[data-v-8f475293]{stroke:#2e2e44;stroke-width:1}.ce-line[data-v-8f475293]{stroke:#6ea0e8;stroke-width:2;stroke-linejoin:round}.ce-handles line[data-v-8f475293]{stroke:#8d96b5;stroke-width:1;stroke-dasharray:3 2}.ce-handles circle[data-v-8f475293]{fill:#b7c2dd;stroke:#344d94;stroke-width:1.2;cursor:grab}.ce-handles circle[data-v-8f475293]:active{cursor:grabbing}.ce-node[data-v-8f475293]{fill:#fff;stroke:#3a55aa;stroke-width:1.6;pointer-events:none}.ce-hit[data-v-8f475293]{fill:transparent;stroke:none;cursor:grab}.ce-hit[data-v-8f475293]:active{cursor:grabbing}.ce-nav[data-v-8f475293]{display:flex;justify-content:space-between;margin-top:3px}.ce-tip[data-v-8f475293]{color:#566;font-size:10px}.spine-editor[data-v-35137928]{display:grid;gap:10px;color:#c5cbe0}.editor-title[data-v-35137928],.section-title[data-v-35137928]{color:#dce2f5;font-weight:700}.editor-title[data-v-35137928]{padding-bottom:9px;border-bottom:1px solid #30394d}.grid[data-v-35137928]{display:grid;gap:8px}.grid.three[data-v-35137928]{grid-template-columns:repeat(3,minmax(0,1fr))}.field[data-v-35137928]{display:grid;gap:5px;min-width:0;color:#919bb7;font-size:12px}.field input[data-v-35137928],.field select[data-v-35137928],.asset-name[data-v-35137928]{box-sizing:border-box;width:100%;min-width:0;height:35px;padding:0 10px;color:#e2e6f3;background:#101625;border:1px solid #32405b;border-radius:6px}.divider[data-v-35137928]{height:1px;background:#30394d;margin:2px 0}.asset-row[data-v-35137928]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}.asset-name[data-v-35137928]{display:flex;align-items:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#7f8aa7}button[data-v-35137928]{height:35px;padding:0 13px;border:1px solid #3b4a67;border-radius:6px;background:#33415b;color:#e2e6f3;cursor:pointer}button[data-v-35137928]:hover{filter:brightness(1.13)}button[data-v-35137928]:disabled{opacity:.55;cursor:wait}.folder-select[data-v-35137928]{width:100%;border-color:#6659c7;background:#4940a8;color:#fff}.folder-hint[data-v-35137928]{margin-top:-5px;color:#69758e;font-size:10px;line-height:1.45}.asset-actions[data-v-35137928]{display:grid;grid-template-columns:1fr 1fr;gap:5px}.asset-actions .load[data-v-35137928]{background:#5543df;border-color:#6959ec}.asset-actions .clear[data-v-35137928]{background:#702b34;border-color:#803842}.runtime-note[data-v-35137928]{color:#69758e;font-size:11px;text-align:center}.error[data-v-35137928]{padding:8px 10px;color:#ffabb2;background:#4b2028;border:1px solid #76323e;border-radius:6px;font-size:12px}.section-box[data-v-35137928]{display:grid;gap:8px;padding:10px;background:#182132;border:1px solid #303c54;border-radius:7px}.empty[data-v-35137928]{color:#667187;font-size:12px;padding:5px 0}.bone-tree[data-v-35137928]{max-height:240px;overflow:auto;padding:4px 0;background:#111827;border-radius:5px}.tree-title-row[data-v-35137928]{display:flex;align-items:center;justify-content:space-between;gap:8px}.tree-tabs[data-v-35137928]{display:flex;gap:3px;margin:6px 0}.tree-tabs button[data-v-35137928]{height:24px;padding:0 8px;border:1px solid transparent;border-radius:5px;background:transparent;color:#8d98ae;font-size:10px;cursor:pointer}.tree-tabs button[data-v-35137928]:hover{background:#273246}.tree-tabs button.on[data-v-35137928]{border-color:#7774ff;background:#35336b;color:#fff}.selected-bone[data-v-35137928]{width:auto;min-width:0;max-width:100%;height:24px;flex:0 1 auto;overflow:hidden;padding:0 7px;color:#75819c;background:#182132;border:1px solid transparent;border-radius:5px;font-size:10px;text-align:right;white-space:nowrap;text-overflow:ellipsis}.selected-bone.active[data-v-35137928]{color:#aeb9d4;background:#242f44;border-color:#35445e;cursor:pointer}.selected-bone.active[data-v-35137928]:hover{border-color:#675ec4;background:#302b57}.selected-bone[data-v-35137928]:disabled{opacity:1;cursor:default}.selected-bone strong[data-v-35137928]{color:#c5cde3;font-weight:600}.tree-action[data-v-35137928]{height:24px;padding:0 8px;color:#9aa7c2;background:#242f44;border-color:#35445e;font-size:10px}.bone-search[data-v-35137928]{position:relative}.bone-search input[data-v-35137928]{box-sizing:border-box;width:100%;height:30px;padding:0 32px 0 9px;color:#dce2f2;background:#101827;border:1px solid #33415b;border-radius:5px;font-size:11px;outline:none}.bone-search input[data-v-35137928]:focus{border-color:#7065df;box-shadow:0 0 0 1px #7065df38}.bone-search button[data-v-35137928]{position:absolute;top:3px;right:3px;width:24px;height:24px;padding:0;border:0;color:#8d98b0;background:transparent}.bone[data-v-35137928]{display:flex;align-items:center;gap:4px;min-height:25px;color:#aeb8d2;font-size:12px;border-bottom:1px solid rgba(72,84,112,.22);cursor:pointer;outline:none}.bone[data-v-35137928]:hover{background:#45567e38}.bone.selected[data-v-35137928]{color:#f0edff;background:#6b53dd52;box-shadow:inset 2px 0 #8e72ff}.bone[data-v-35137928]:focus-visible{box-shadow:inset 0 0 0 1px #7d72dd}.bone-toggle[data-v-35137928]{width:22px;height:22px;padding:0;border:0;background:transparent;color:#9aa7c2}.bone-toggle[data-v-35137928]:hover{background:#26324a}.bone-leaf[data-v-35137928]{display:inline-flex;width:22px;justify-content:center;color:#58647d}.bone-name[data-v-35137928]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.slot-row[data-v-35137928]{padding-right:8px}.slot-order[data-v-35137928]{width:24px;flex:0 0 24px;color:#66758e;font-size:10px;font-variant-numeric:tabular-nums;text-align:right}.slot-attachment[data-v-35137928]{margin-left:auto;max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#6d7c96;font-size:10px}@media(max-width:430px){.grid.three[data-v-35137928]{grid-template-columns:1fr}}.panel[data-v-5573409f]{display:flex;width:100%;height:100%;flex-direction:column;overflow:hidden;background:#14141f;border-left:1px solid #2a2a3c;padding:12px;box-sizing:border-box}.empty[data-v-5573409f],.panel-hint[data-v-5573409f]{color:#667;font-size:12px;padding:8px 0}.group[data-v-5573409f]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-5573409f]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-5573409f]:hover{background:#20202e}.scene-head[data-v-5573409f]{padding-right:6px}.scene-actions[data-v-5573409f]{margin-left:auto;display:flex;align-items:center;gap:4px}.scene-add[data-v-5573409f]{height:24px;padding:0 6px;border:1px solid #3a4a6a;border-radius:5px;background:#2e3a55;color:#cdf;font-size:10px;white-space:nowrap;cursor:pointer}.scene-add[data-v-5573409f]:hover{border-color:#7774ff;background:#45426f;color:#fff}.scene-add[data-v-5573409f]:disabled{opacity:.42;cursor:not-allowed;border-color:#343a4b;background:#252a38;color:#778095}.group-body[data-v-5573409f]{padding:8px 10px 12px}.caret[data-v-5573409f]{display:inline-block;width:12px;color:#667;font-size:11px}.tree[data-v-5573409f]{margin-bottom:8px}.tree-item[data-v-5573409f]{display:flex;align-items:center;gap:6px;padding:5px 6px;font-size:12px;color:#bcd;border-radius:6px;margin-bottom:2px}.tree-item.on[data-v-5573409f]{background:#26324a;color:#ffe}.tree-item .tdot[data-v-5573409f]{color:#fc3;font-size:10px}.tree-item .tdot.dim[data-v-5573409f]{color:#556}.tree-item .tdot.collision-dot[data-v-5573409f]{color:#ff7070}.tree-item .tdot.path-dot[data-v-5573409f]{color:#ff933e;font-size:14px}.tree-item .tdot.spine-dot[data-v-5573409f]{color:#c08cff;font-size:11px}.tree-item .sub-branch[data-v-5573409f]{color:#5f7090;font-size:12px}.tree-item .tlabel[data-v-5573409f]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scene-tree[data-v-5573409f]{padding-bottom:8px;border-bottom:1px solid #2a2a3c}.scene-object-item[data-v-5573409f]{min-height:28px;cursor:pointer}.scene-object-item[data-v-5573409f]:hover{background:#202b40}.scene-object-child[data-v-5573409f]{background:#1e2a3e59}.scene-object-kind[data-v-5573409f]{color:#75829c;font-size:10px}.scene-object-kind.sub-emitter-kind[data-v-5573409f]{color:#8f8cff}.scene-object-eye[data-v-5573409f]{width:24px;height:22px;padding:3px;flex:0 0 24px;border:1px solid transparent;border-radius:5px;background:transparent;color:#9aa6bf;cursor:pointer}.scene-object-eye[data-v-5573409f]:hover{border-color:#4b5972;background:#29354a;color:#e1e7f4}.scene-object-eye.off[data-v-5573409f]{color:#59647a}.scene-object-eye svg[data-v-5573409f]{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.scene-object-eye .eye-slash[data-v-5573409f]{stroke:#d47b88;stroke-width:2}.scene-object-delete[data-v-5573409f]{width:24px;height:22px;padding:0;border:1px solid #59414a;border-radius:5px;background:#3a272f;color:#efb4bd;font-size:11px;cursor:pointer}.scene-object-delete[data-v-5573409f]:hover{border-color:#a45c69;background:#57303a;color:#fff}.object-editor-title[data-v-5573409f]{margin:10px 0 8px;padding-top:8px;border-top:1px solid #2a2a3c;color:#cbd4e8;font-weight:700}.field-block[data-v-5573409f]{display:flex;flex-direction:column;gap:5px;margin:10px 0;color:#8f9ab3;font-size:11px}.field-block>.inp[data-v-5573409f]{width:100%;box-sizing:border-box;min-height:30px}.field-block small[data-v-5573409f]{color:#5f6d86;line-height:1.5}.field-grid[data-v-5573409f]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:end}.compact-field[data-v-5573409f]{display:flex;min-width:0;flex-direction:column;gap:5px;margin:5px 0;color:#8f9ab3;font-size:11px}.compact-field .inp[data-v-5573409f]{width:100%;min-height:30px;box-sizing:border-box}.check-field[data-v-5573409f]{align-items:flex-start}.check-field input[data-v-5573409f]{width:18px;height:18px;margin:4px 0;accent-color:#4f7ee8}.follow-path[data-v-5573409f],.setting-line[data-v-5573409f]{display:flex;align-items:center;gap:8px;margin:12px 0 4px;color:#aeb8cf;font-size:12px}.setting-line[data-v-5573409f]{justify-content:space-between}.follow-path input[data-v-5573409f],.setting-line input[type=checkbox][data-v-5573409f]{width:17px;height:17px;accent-color:#4f7ee8}.collider-follow-section[data-v-5573409f]{margin-top:12px;padding-top:4px;border-top:1px solid #30394d}.collider-curve-title[data-v-5573409f]{display:flex;flex-direction:column;gap:3px;margin:12px 0 6px;color:#aeb8cf;font-size:12px}.collider-curve-title small[data-v-5573409f]{color:#67738c;font-size:10px;line-height:1.45}.path-color[data-v-5573409f]{width:48px;height:28px;padding:0;border:1px solid #3a4963;background:transparent;cursor:pointer}.path-help[data-v-5573409f]{margin:12px 0;color:#7d89a2;font-size:11px;line-height:1.55}.path-help>span[data-v-5573409f]{color:#aeb8cf}.path-help ul[data-v-5573409f]{margin:6px 0 0;padding-left:20px}.path-help li[data-v-5573409f]{margin:3px 0}.path-action[data-v-5573409f]{width:100%;height:31px;margin-top:7px;border:0;border-radius:5px;background:#33425b;color:#c9d1e1;cursor:pointer}.path-action[data-v-5573409f]:hover{filter:brightness(1.12)}.path-action.primary[data-v-5573409f]{background:#f05408;color:#fff}.row[data-v-5573409f]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-5573409f]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-5573409f]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.inp.tiny[data-v-5573409f]{width:46px;flex:0 0 46px;text-align:center}.seed-row[data-v-5573409f]{display:flex;align-items:center;gap:8px;margin-top:12px;padding-top:12px;border-top:1px solid #2d3950}.seed-row label[data-v-5573409f]{width:64px;color:#8f9bb5;font-size:12px}.seed-input[data-v-5573409f]{min-width:0;flex:1;padding:6px 8px;border:1px solid #344158;border-radius:6px;outline:none;background:#0f1625;color:#e2e7f2;font-size:12px}.seed-input[data-v-5573409f]:focus{border-color:#625ff1}.seed-random[data-v-5573409f]{width:34px;height:30px;border:1px solid #3a4860;border-radius:6px;background:#2c3950;color:#d7def0;cursor:pointer}.seed-random[data-v-5573409f]:hover{background:#394964}.scene-seed[data-v-5573409f]{margin-top:10px}.seed-hint[data-v-5573409f]{margin:5px 0 1px 72px;color:#657188;font-size:9px;line-height:1.45}.group[data-v-dec7323c]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-dec7323c]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-dec7323c]:hover{background:#20202e}.group-reset[data-v-dec7323c]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-dec7323c]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-dec7323c]{padding:8px 10px 12px}.caret[data-v-dec7323c]{display:inline-block;width:12px;color:#667;font-size:11px}.divider[data-v-dec7323c]{height:1px;background:#2a2a3c;margin:8px 0}.row[data-v-dec7323c]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-dec7323c]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-dec7323c]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.segs[data-v-dec7323c]{display:flex;gap:6px;margin:6px 0}.stream-behavior-segs[data-v-dec7323c]{margin-top:10px}.stream-loop-options[data-v-dec7323c]{display:grid;gap:8px;margin:8px 0 4px;padding:9px 10px;border:1px solid #32405a;border-radius:6px;background:#171f2e}.loop-section-row[data-v-dec7323c]{display:flex;min-height:27px;align-items:center;justify-content:space-between;gap:8px}.loop-duration-control[data-v-dec7323c]{display:flex;flex:0 0 auto;align-items:center;gap:7px}.loop-duration-toggle[data-v-dec7323c]{gap:5px;font-size:10px;white-space:nowrap}.loop-duration-toggle .switch-ui[data-v-dec7323c]{width:26px;height:14px}.loop-duration-toggle .switch-ui[data-v-dec7323c]:after{width:10px;height:10px}.loop-duration-toggle input:checked+.switch-ui[data-v-dec7323c]:after{transform:translate(12px)}.loop-section-duration[data-v-dec7323c]{display:flex;flex:0 0 auto;align-items:center;gap:4px;color:#7f8ba4;font-size:11px}.loop-section-duration input[data-v-dec7323c]{position:static;width:54px;height:25px;padding:0 6px;border:1px solid #3a465f;border-radius:5px;outline:none;background:#101725;color:#e4e8f2;text-align:right;opacity:1;pointer-events:auto}.loop-section-duration input[data-v-dec7323c]:focus{border-color:#716eff}.loop-auto-duration[data-v-dec7323c]{min-width:54px;color:#77839a;text-align:right;white-space:nowrap}.seg[data-v-dec7323c]{flex:1;padding:5px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:12px;cursor:pointer}.seg.on[data-v-dec7323c]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.seg[data-v-dec7323c]{display:flex;gap:6px;margin:6px 0}.inp.tiny[data-v-dec7323c]{width:46px;flex:0 0 46px;text-align:center}.switch-row[data-v-dec7323c]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-dec7323c]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-dec7323c]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-dec7323c]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-dec7323c]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-dec7323c]:after{transform:translate(14px)}.modifier-hint[data-v-dec7323c]{margin:7px 0 0 2px;color:#647086;font-size:9px;line-height:1.5}.stream-loop-hint[data-v-dec7323c]{margin:9px 2px 3px;padding:7px 8px;border:1px solid #4a436e;border-radius:5px;background:#211f35;color:#aaa4d7}.switch-row input:disabled+.switch-ui[data-v-dec7323c]{opacity:.45;cursor:not-allowed}.pac[data-v-a3a8dde3]{padding:10px;margin:8px 0;border:1px solid #2c3850;border-radius:7px;background:#171d2a}.pac-head[data-v-a3a8dde3]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:7px}.pac-label[data-v-a3a8dde3]{color:#aeb8cf;font-size:12px;font-weight:600;white-space:nowrap}.pac-modes[data-v-a3a8dde3]{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}.pac-mode[data-v-a3a8dde3]{padding:4px 7px;border:1px solid #344158;border-radius:5px;background:#273246;color:#aeb8cf;font-size:11px;cursor:pointer}.pac-mode.on[data-v-a3a8dde3]{border-color:#7774ff;background:#605df0;color:#fff}.pac-curve[data-v-a3a8dde3]{margin-top:8px}.pac-axis[data-v-a3a8dde3]{display:flex;justify-content:space-between;margin-top:3px;color:#5f6b82;font-size:10px}.pac[data-v-a3a8dde3] .ns-label{width:58px}.pac[data-v-a3a8dde3] .ce-svg{height:96px;background:#0f1625;border-color:#30405a}.pac[data-v-a3a8dde3] .ce-tip{color:#657188}.group[data-v-3bbf0b5e]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-3bbf0b5e]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-3bbf0b5e]:hover{background:#20202e}.group-reset[data-v-3bbf0b5e]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-3bbf0b5e]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-3bbf0b5e]{padding:8px 10px 12px}.caret[data-v-3bbf0b5e]{display:inline-block;width:12px;color:#667;font-size:11px}.row[data-v-3bbf0b5e]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-3bbf0b5e]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.attr-body[data-v-3bbf0b5e]{padding:10px;background:#151b27}.attr-section-title[data-v-3bbf0b5e]{margin:2px 0 8px;color:#9ca8c0;font-size:12px;font-weight:700}.attr-section-title.life-title[data-v-3bbf0b5e]{margin-top:14px;padding-top:12px;border-top:1px solid #2d3950}.attr-axis-head[data-v-3bbf0b5e]{display:flex;align-items:center;justify-content:space-between;margin:10px 1px -2px;color:#aeb8cf;font-size:12px;font-weight:600}.axis-modes[data-v-3bbf0b5e]{display:flex;gap:4px}.axis-mode[data-v-3bbf0b5e]{padding:4px 8px;border:1px solid #344158;border-radius:5px;background:#273246;color:#aeb8cf;font-size:11px;cursor:pointer}.axis-mode.on[data-v-3bbf0b5e]{border-color:#7774ff;background:#605df0;color:#fff}.life-item[data-v-3bbf0b5e]{padding:9px 0;border-bottom:1px solid #2a3549}.switch-row[data-v-3bbf0b5e]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-3bbf0b5e]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-3bbf0b5e]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-3bbf0b5e]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-3bbf0b5e]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-3bbf0b5e]:after{transform:translate(14px)}.life-axis[data-v-3bbf0b5e]{margin:9px 0 2px 42px}.switch-row input:disabled+.switch-ui[data-v-3bbf0b5e]{opacity:.45;cursor:not-allowed}.gradient-editor[data-v-cb6cfaf8]{margin:8px 0 11px 68px}.gradient-bar[data-v-cb6cfaf8]{position:relative;height:18px;margin-bottom:14px;border:1px solid #465570;border-radius:6px;cursor:crosshair}.gradient-stop[data-v-cb6cfaf8]{position:absolute;top:15px;width:14px;height:17px;padding:0;transform:translate(-50%);border:2px solid #d8deea;border-radius:2px 2px 5px 5px;background:var(--stop-color);cursor:grab;box-shadow:0 1px 3px #0009}.gradient-stop[data-v-cb6cfaf8]:before{content:"";position:absolute;left:2px;top:-7px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:5px solid #d8deea}.gradient-stop.selected[data-v-cb6cfaf8]{outline:2px solid #7774ff;outline-offset:1px;z-index:2}.gradient-stop[data-v-cb6cfaf8]:active{cursor:grabbing}.gradient-controls[data-v-cb6cfaf8]{display:flex;align-items:center;gap:5px;margin-top:30px}.gradient-color[data-v-cb6cfaf8]{width:28px;height:24px;padding:1px;border:1px solid #465570;border-radius:4px;background:#151b27;cursor:pointer}.gradient-hex-input[data-v-cb6cfaf8]{width:66px;padding:4px 5px;border:1px solid #344158;border-radius:4px;outline:none;background:#101725;color:#aeb8cb;font-size:10px;font-family:monospace}.gradient-hex-input[data-v-cb6cfaf8]:focus{border-color:#7774ff;color:#fff}.gradient-position[data-v-cb6cfaf8]{display:flex;align-items:center;color:#71809a;font-size:10px}.gradient-position input[data-v-cb6cfaf8]{width:43px;padding:3px 4px;border:1px solid #344158;border-radius:4px;outline:none;background:#101725;color:#dce3ef;text-align:right}.gradient-action[data-v-cb6cfaf8]{width:25px;height:24px;padding:0;border:1px solid #3a4860;border-radius:4px;background:#273246;color:#cbd4e5;cursor:pointer}.gradient-action[data-v-cb6cfaf8]:hover:not(:disabled){border-color:#7774ff;color:#fff}.gradient-action.danger[data-v-cb6cfaf8]{color:#e3a5aa}.gradient-action[data-v-cb6cfaf8]:disabled{opacity:.35;cursor:not-allowed}.gradient-hint[data-v-cb6cfaf8]{margin-top:5px;color:#59667b;font-size:9px}.pivot-editor[data-v-a5622844]{margin-top:8px;padding:8px;border:1px solid #2e3c55;border-radius:8px;background:#121a27}.pivot-toolbar[data-v-a5622844]{display:flex;align-items:center;gap:7px;margin-bottom:7px}.pivot-hint[data-v-a5622844]{flex:1;min-width:0;display:flex;align-items:center;gap:5px;color:#9aa8c4;font-size:10px;line-height:1.3}.pivot-hint-icon[data-v-a5622844]{color:#8f8cff;font-size:13px}.pivot-zoom[data-v-a5622844]{display:flex;align-items:center;gap:2px;padding:2px;border:1px solid #34435e;border-radius:6px;background:#182234}.pivot-zoom button[data-v-a5622844]{width:20px;height:20px;padding:0;border:0;border-radius:4px;background:transparent;color:#a9b6d0;font-size:13px;cursor:pointer}.pivot-zoom button[data-v-a5622844]:hover:not(:disabled){background:#2a3853;color:#fff}.pivot-zoom button[data-v-a5622844]:disabled{opacity:.3;cursor:default}.pivot-zoom span[data-v-a5622844]{min-width:36px;text-align:center;color:#c7d1e6;font-size:10px;font-variant-numeric:tabular-nums}.pivot-expand[data-v-a5622844]{width:24px;height:24px;padding:0;border:1px solid #34435e;border-radius:6px;background:#182234;color:#a9b6d0;font-size:13px;cursor:pointer}.pivot-expand[data-v-a5622844]:hover{border-color:#7774ff;color:#fff}.pivot-stage[data-v-a5622844]{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:156px;overflow:hidden;border:1px solid #2f3d57;border-radius:8px;background-color:#10161f;background-image:linear-gradient(45deg,#1a2230 25%,transparent 25%),linear-gradient(-45deg,#1a2230 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#1a2230 75%),linear-gradient(-45deg,transparent 75%,#1a2230 75%);background-size:16px 16px;background-position:0 0,0 8px,8px -8px,-8px 0;touch-action:none;cursor:crosshair}.pivot-large .pivot-stage[data-v-a5622844]{height:340px;background-size:22px 22px;background-position:0 0,0 11px,11px -11px,-11px 0}.pivot-stage.panning[data-v-a5622844]{cursor:grabbing}.pivot-box[data-v-a5622844]{position:relative;flex:0 0 auto}.pivot-box>img[data-v-a5622844]{display:block;width:100%;height:100%;object-fit:fill;-webkit-user-select:none;user-select:none;pointer-events:none}.pivot-empty[data-v-a5622844]{color:#4e5a70;font-size:12px}.pivot-cross[data-v-a5622844]{position:absolute;pointer-events:none;background:#7e76ffbf;box-shadow:0 0 3px #7e76ff99}.pivot-cross.vertical[data-v-a5622844]{top:0;bottom:0;width:1px;transform:translate(-.5px)}.pivot-cross.horizontal[data-v-a5622844]{left:0;right:0;height:1px;transform:translateY(-.5px)}.pivot-marker[data-v-a5622844]{position:absolute;width:13px;height:13px;transform:translate(-50%,-50%);border:2px solid #c9c6ff;border-radius:50%;background:#605ff0d9;box-shadow:0 0 0 3px #605ff047,0 0 10px #605ff0cc;pointer-events:none}.pivot-badge[data-v-a5622844]{position:absolute;transform:translate(-50%,14px);padding:2px 6px;border:1px solid #6f6bc7;border-radius:4px;background:#191c3aeb;color:#b9b6ff;font-size:9px;white-space:nowrap;pointer-events:none}.pivot-bottom[data-v-a5622844]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;margin-top:8px}.pivot-large .pivot-bottom[data-v-a5622844]{gap:14px;margin-top:14px}.pivot-card[data-v-a5622844]{min-width:0;padding:7px;border:1px solid #28344a;border-radius:8px;background:#151d2b}.pivot-card-head[data-v-a5622844]{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:6px;color:#b9c4da;font-size:10px}.pivot-card-icon[data-v-a5622844]{color:#8f8cff}.pivot-presets[data-v-a5622844]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px}.pivot-preset[data-v-a5622844]{height:30px;padding:0;border:1px solid #2f3d57;border-radius:5px;background:#1b2537;color:#aab6cf;font-size:16px;line-height:1;cursor:pointer}.pivot-preset[data-v-a5622844]:hover{border-color:#5d5aa8;color:#d9d8ff}.pivot-preset.on[data-v-a5622844]{border-color:#7774ff;background:#4a47b5;color:#fff}.pivot-reset[data-v-a5622844]{display:block;width:100%;height:26px;margin-top:6px;padding:0 6px;border:1px solid #2f3d57;border-radius:5px;background:#1a2435;color:#96a4c0;font-size:10px;cursor:pointer;white-space:nowrap}.pivot-reset[data-v-a5622844]:hover{border-color:#5d5aa8;background:#232f46;color:#d9d8ff}.pivot-coords[data-v-a5622844]{display:flex;flex-direction:column;gap:5px}.pivot-large .pivot-coords[data-v-a5622844]{flex-direction:row;gap:8px}.pivot-coords label[data-v-a5622844]{flex:1;display:flex;align-items:center;gap:3px;color:#8d9ab5;font-size:10px}.pivot-coords input[data-v-a5622844]{width:100%;min-width:0;height:24px;padding:0 4px;border:1px solid #34435e;border-radius:4px;background:#101827;color:#f0b465;font-size:11px;text-align:right}.pivot-rotate-head[data-v-a5622844]{margin-top:10px}.pivot-rotate-state[data-v-a5622844]{color:#6f7c96;font-size:9px}.pivot-rotate-body[data-v-a5622844]{display:flex;align-items:center;gap:7px}.pivot-rotate-modes[data-v-a5622844]{display:flex;flex-direction:column;gap:4px;flex:1}.pivot-rotate-modes button[data-v-a5622844]{height:24px;padding:0 5px;border:1px solid #2f3d57;border-radius:5px;background:#1b2537;color:#93a0ba;font-size:9px;cursor:pointer}.pivot-rotate-modes button.on[data-v-a5622844]{border-color:#7774ff;background:#4a47b5;color:#fff}.pivot-rotate-preview[data-v-a5622844]{display:flex;align-items:center;justify-content:center;width:78px;height:78px;flex:0 0 78px;border:1px solid #2b374d;border-radius:6px;background:#10161f;overflow:hidden}.pivot-large .pivot-rotate-preview[data-v-a5622844]{width:128px;height:128px;flex-basis:128px}.pivot-rotate-preview img[data-v-a5622844]{display:block}.pivot-rotate-preview img.spin[data-v-a5622844]{animation:pivot-spin-a5622844 2s linear infinite}.pivot-rotate-preview img.swing[data-v-a5622844]{animation:pivot-swing-a5622844 1.1s ease-in-out infinite alternate}@keyframes pivot-spin-a5622844{to{transform:rotate(360deg)}}@keyframes pivot-swing-a5622844{0%{transform:rotate(-28deg)}to{transform:rotate(28deg)}}.pivot-large .pivot-hint[data-v-a5622844],.pivot-large .pivot-card-head[data-v-a5622844]{font-size:12px}.pivot-large .pivot-preset[data-v-a5622844]{height:42px;font-size:20px}.pivot-large .pivot-reset[data-v-a5622844]{height:34px;margin-top:8px;font-size:12px}.pivot-large .pivot-coords input[data-v-a5622844]{height:34px;font-size:14px}.pivot-large .pivot-rotate-modes button[data-v-a5622844]{height:34px;font-size:12px}.image-card[data-v-89f1e08d]{margin:8px 0;padding:9px;border:1px solid #2e3c55;border-radius:7px;background:#171d2a}.imgrow[data-v-89f1e08d]{display:flex;align-items:flex-start;gap:8px}.img-thumb[data-v-89f1e08d]{width:48px;height:48px;padding:0;border:1px solid #3a4963;border-radius:6px;background:#1a2232;display:flex;align-items:center;justify-content:center;flex-shrink:0;cursor:pointer;overflow:hidden}.img-thumb[data-v-89f1e08d]:hover{border-color:#7774ff}.img-thumb img[data-v-89f1e08d]{display:block;width:100%;height:100%;object-fit:contain}.img-fields[data-v-89f1e08d]{flex:1;min-width:0}.img-actions[data-v-89f1e08d]{display:flex;flex-direction:column;gap:4px}.row[data-v-89f1e08d]{display:flex;align-items:center;gap:8px;margin:6px 0;color:#aab;font-size:12px}.row>span[data-v-89f1e08d]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-89f1e08d]{min-width:0;flex:1;padding:3px 5px;border:1px solid #2e2e44;border-radius:5px;background:#1a1a28;color:#dde;font-size:12px}.mini-btn2[data-v-89f1e08d]{width:26px;height:24px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:5px;color:#aab;font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center}.mini-btn2[data-v-89f1e08d]:hover{background:#2b3a5c}.mini-btn2[data-v-89f1e08d]:disabled{opacity:.35;cursor:not-allowed}.thumb-note[data-v-89f1e08d]{margin:4px 0 2px;color:#667;font-size:11px}.sequence-pick[data-v-89f1e08d]{width:100%;margin:2px 0 4px;padding:6px 8px;border:1px solid #4a4a76;border-radius:5px;background:#27264b;color:#d8d7ff;font-size:12px;cursor:pointer}.sequence-pick[data-v-89f1e08d]:hover{border-color:#7774ff;background:#35336a}.sequence-note[data-v-89f1e08d]{margin:0 0 6px;color:#727b9b;font-size:11px;line-height:1.4}.resource-weight-row[data-v-89f1e08d]{display:grid;grid-template-columns:minmax(0,1fr) 28px;align-items:center;gap:7px}.resource-weight-control[data-v-89f1e08d]{width:100%;min-width:0}.resource-weight-control[data-v-89f1e08d] .ns-range{min-width:0}.resource-weight-control[data-v-89f1e08d] .ns-num{flex:0 0 56px;box-sizing:border-box}.weight-lock[data-v-89f1e08d]{width:28px;height:26px;flex:0 0 28px;padding:5px;border:1px solid #35435c;border-radius:5px;background:#202a3b;color:#78859e;cursor:pointer}.weight-lock svg[data-v-89f1e08d]{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.weight-lock[data-v-89f1e08d]:hover:not(:disabled){border-color:#7774ff;color:#b8b6ff}.weight-lock.on[data-v-89f1e08d]{border-color:#7774ff;background:#514fd0;color:#fff}.weight-lock[data-v-89f1e08d]:disabled{opacity:.35;cursor:not-allowed}.pivot-toggle-row[data-v-89f1e08d]{display:flex;align-items:center;gap:9px;margin-top:9px;padding:8px 9px;border:1px solid #2c3a54;border-radius:8px;background:#131b28}.pivot-toggle-icon[data-v-89f1e08d]{display:flex;align-items:center;justify-content:center;width:32px;height:32px;flex:0 0 32px;border:1px solid #35435c;border-radius:7px;background:#1c2638;color:#8f8cff;font-size:17px}.pivot-toggle-text[data-v-89f1e08d]{flex:1;min-width:0}.pivot-toggle-title[data-v-89f1e08d]{color:#d6deee;font-size:12px;font-weight:600}.pivot-toggle-sub[data-v-89f1e08d]{margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#7584a0;font-size:9px}.pivot-switch[data-v-89f1e08d]{position:relative;flex:0 0 auto;cursor:pointer}.pivot-switch input[data-v-89f1e08d]{position:absolute;opacity:0;pointer-events:none}.pivot-switch-ui[data-v-89f1e08d]{position:relative;display:block;width:34px;height:19px;border-radius:10px;background:#354258;transition:background .16s ease}.pivot-switch-ui[data-v-89f1e08d]:after{content:"";position:absolute;left:2px;top:2px;width:15px;height:15px;border-radius:50%;background:#fff;transition:transform .16s ease}.pivot-switch input:checked+.pivot-switch-ui[data-v-89f1e08d]{background:#625ff1}.pivot-switch input:checked+.pivot-switch-ui[data-v-89f1e08d]:after{transform:translate(15px)}.pivot-modal-backdrop[data-v-89f1e08d]{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:24px;background:#06090fc7;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.pivot-modal[data-v-89f1e08d]{display:flex;flex-direction:column;width:min(980px,94vw);max-height:92vh;overflow:auto;padding:14px;border:1px solid #2f3f5c;border-radius:14px;background:#121927;box-shadow:0 24px 70px #0009}.pivot-modal-head[data-v-89f1e08d]{display:flex;align-items:flex-start;gap:10px;padding-bottom:10px;border-bottom:1px solid #253148}.pivot-modal-icon[data-v-89f1e08d]{display:flex;align-items:center;justify-content:center;width:34px;height:34px;flex:0 0 34px;border:1px solid #3b4a66;border-radius:8px;background:#1c2638;color:#8f8cff;font-size:18px}.pivot-modal-info[data-v-89f1e08d]{flex:1;min-width:0}.pivot-modal-title[data-v-89f1e08d]{display:flex;align-items:center;gap:7px;color:#e4e9f5;font-size:15px;font-weight:700}.pivot-modal-badge[data-v-89f1e08d]{padding:2px 7px;border:1px solid #4b4a8f;border-radius:999px;background:#2c2b58;color:#b9b6ff;font-size:10px;font-weight:500}.pivot-modal-desc[data-v-89f1e08d]{margin-top:3px;color:#7f8daa;font-size:11px}.pivot-modal-close[data-v-89f1e08d]{width:28px;height:28px;padding:0;border:0;border-radius:6px;background:transparent;color:#8b98b3;font-size:15px;cursor:pointer}.pivot-modal-close[data-v-89f1e08d]:hover{background:#253148;color:#fff}.pivot-modal-hint[data-v-89f1e08d]{margin:10px 0 0;color:#8b98b3;font-size:11px}.pivot-modal-actions[data-v-89f1e08d]{display:flex;justify-content:flex-end;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid #253148}.pivot-modal-cancel[data-v-89f1e08d]{height:34px;padding:0 16px;border:1px solid #34435e;border-radius:7px;background:#1a2334;color:#a9b6d0;font-size:12px;cursor:pointer}.pivot-modal-cancel[data-v-89f1e08d]:hover{border-color:#5d5aa8;color:#fff}.pivot-modal-confirm[data-v-89f1e08d]{height:34px;padding:0 22px;border:1px solid #7774ff;border-radius:7px;background:#5b57e8;color:#fff;font-size:12px;font-weight:700;cursor:pointer}.pivot-modal-confirm[data-v-89f1e08d]:hover{background:#6a66ff}.group[data-v-86902cc8]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-86902cc8]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-86902cc8]:hover{background:#20202e}.group-reset[data-v-86902cc8]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-86902cc8]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-86902cc8]{padding:8px 10px 12px}.caret[data-v-86902cc8]{display:inline-block;width:12px;color:#667;font-size:11px}.divider[data-v-86902cc8]{height:1px;background:#2a2a3c;margin:8px 0}.row[data-v-86902cc8]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-86902cc8]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-86902cc8]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.colr[data-v-86902cc8]{width:28px;height:22px;border:none;background:none;cursor:pointer}.seg[data-v-86902cc8]{flex:1;padding:5px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:12px;cursor:pointer}.seg.on[data-v-86902cc8]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.look-title[data-v-86902cc8]{font-size:12px;font-weight:600;color:#ccd;margin:10px 0 6px;padding-bottom:4px;border-bottom:1px solid #2a2a3c}.look-title[data-v-86902cc8]:first-child{margin-top:2px}.seg[data-v-86902cc8]{display:flex;gap:6px;margin:6px 0}.seg-btn[data-v-86902cc8]{flex:1;padding:5px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:12px;cursor:pointer}.seg-btn.active[data-v-86902cc8]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.curve-wrap[data-v-86902cc8]{margin:6px 0}.curve-labels[data-v-86902cc8]{display:flex;justify-content:space-between;color:#566;font-size:10px;margin-top:2px}.image-title[data-v-86902cc8]{display:flex;align-items:center;justify-content:space-between}.image-add[data-v-86902cc8]{width:26px;height:24px;border:1px solid #4a4d9a;border-radius:5px;background:#252850;color:#8f8cff;font-size:18px;line-height:1;cursor:pointer}.image-add[data-v-86902cc8]:hover{background:#4542a8;color:#fff}.resource-divider[data-v-86902cc8]{height:1px;margin:9px 0 7px;background:#2a3549}.resource-color-row .blend-select[data-v-86902cc8]{max-width:88px}.resource-color-picker .hex[data-v-86902cc8]{margin-left:0}.random-color-hint[data-v-86902cc8]{margin:-5px 0 9px 68px;color:#66758e;font-size:9px;line-height:1.45}.hex-input[data-v-86902cc8]{width:72px;padding:4px 6px;border:1px solid #344158;border-radius:5px;outline:none;background:#101725;color:#aeb8cb;font-size:11px;font-family:monospace}.hex-input[data-v-86902cc8]:focus{border-color:#7774ff;color:#fff}.resource-alpha-head[data-v-86902cc8]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;color:#8a93bb;font-size:12px}.alpha-modes[data-v-86902cc8]{display:flex;gap:3px}.alpha-modes button[data-v-86902cc8]{padding:4px 8px;border:1px solid transparent;border-radius:5px;background:transparent;color:#8d98ae;font-size:11px;cursor:pointer}.alpha-modes button[data-v-86902cc8]:hover{background:#273246}.alpha-modes button.on[data-v-86902cc8]{border-color:#7774ff;background:#605df0;color:#fff}.resource-alpha-curve[data-v-86902cc8]{margin-top:7px}.file-input[data-v-86902cc8]{display:none}.hex[data-v-86902cc8]{font-size:11px;color:#889;margin-left:auto;font-variant-numeric:tabular-nums}.inp.tiny[data-v-86902cc8]{width:46px;flex:0 0 46px;text-align:center}.render-layer-current[data-v-86902cc8]{display:flex;align-items:center;gap:6px;margin:6px 0}.render-layer-text[data-v-86902cc8]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9aa6c2;font-size:11px}.mini-btn[data-v-86902cc8]{flex:0 0 auto;height:24px;padding:0 7px;border:1px solid #3d4a66;border-radius:5px;background:#202a3e;color:#a9b5cf;font-size:10px;cursor:pointer}.mini-btn[data-v-86902cc8]:hover{border-color:#7774ff;color:#fff}.mini-btn.ghost[data-v-86902cc8]{background:transparent}.slot-picker[data-v-86902cc8]{margin:6px 0;padding:6px;border:1px solid #2e3a52;border-radius:6px;background:#111a28}.slot-list[data-v-86902cc8]{max-height:180px;overflow:auto;margin-top:6px}.slot-item[data-v-86902cc8]{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;border:1px solid transparent;border-radius:4px;background:transparent;color:#aab4cc;font-size:11px;text-align:left;cursor:pointer}.slot-item[data-v-86902cc8]:hover{background:#1d2a3f}.slot-item.on[data-v-86902cc8]{border-color:#7774ff;background:#2b2b55;color:#fff}.slot-order[data-v-86902cc8]{width:26px;flex:0 0 26px;color:#66758e;font-variant-numeric:tabular-nums}.slot-name[data-v-86902cc8]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slot-attachment[data-v-86902cc8]{max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#6d7c96;font-size:10px}.switch-row[data-v-86902cc8]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-86902cc8]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-86902cc8]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-86902cc8]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-86902cc8]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-86902cc8]:after{transform:translate(14px)}.switch-row input:disabled+.switch-ui[data-v-86902cc8]{opacity:.45;cursor:not-allowed}.render-layer-switch[data-v-86902cc8]{margin:6px 0}.modifier-hint[data-v-86902cc8]{margin:7px 0 0 2px;color:#647086;font-size:9px;line-height:1.5}.render-layer-warning[data-v-86902cc8]{color:#d8a45e}.empty[data-v-f5ccc52c]{color:#667;font-size:12px;padding:8px 0}.group[data-v-f5ccc52c]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-f5ccc52c]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-f5ccc52c]:hover{background:#20202e}.group-reset[data-v-f5ccc52c]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-f5ccc52c]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-f5ccc52c]{padding:8px 10px 12px}.caret[data-v-f5ccc52c]{display:inline-block;width:12px;color:#667;font-size:11px}.divider[data-v-f5ccc52c]{height:1px;background:#2a2a3c;margin:8px 0}.field-block[data-v-f5ccc52c]{display:flex;flex-direction:column;gap:5px;margin:10px 0;color:#8f9ab3;font-size:11px}.field-block>.inp[data-v-f5ccc52c]{width:100%;box-sizing:border-box;min-height:30px}.field-block small[data-v-f5ccc52c]{color:#5f6d86;line-height:1.5}.field-grid[data-v-f5ccc52c]{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:8px;align-items:end}.compact-field[data-v-f5ccc52c]{display:flex;min-width:0;flex-direction:column;gap:5px;margin:5px 0;color:#8f9ab3;font-size:11px}.compact-field .inp[data-v-f5ccc52c]{width:100%;min-height:30px;box-sizing:border-box}.tag[data-v-f5ccc52c]{font-size:10px;color:#667;background:#1c1c2a;border-radius:4px;padding:1px 5px}.row[data-v-f5ccc52c]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-f5ccc52c]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-f5ccc52c]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.colr[data-v-f5ccc52c]{width:28px;height:22px;border:none;background:none;cursor:pointer}.placeholder[data-v-f5ccc52c]{color:#667;font-size:11px;padding:6px 0}.image-add[data-v-f5ccc52c]{width:26px;height:24px;border:1px solid #4a4d9a;border-radius:5px;background:#252850;color:#8f8cff;font-size:18px;line-height:1;cursor:pointer}.image-add[data-v-f5ccc52c]:hover{background:#4542a8;color:#fff}.resource-divider[data-v-f5ccc52c]{height:1px;margin:9px 0 7px;background:#2a3549}.hex-input[data-v-f5ccc52c]{width:72px;padding:4px 6px;border:1px solid #344158;border-radius:5px;outline:none;background:#101725;color:#aeb8cb;font-size:11px;font-family:monospace}.hex-input[data-v-f5ccc52c]:focus{border-color:#7774ff;color:#fff}.alpha-modes[data-v-f5ccc52c]{display:flex;gap:3px}.alpha-modes button[data-v-f5ccc52c]{padding:4px 8px;border:1px solid transparent;border-radius:5px;background:transparent;color:#8d98ae;font-size:11px;cursor:pointer}.alpha-modes button[data-v-f5ccc52c]:hover{background:#273246}.alpha-modes button.on[data-v-f5ccc52c]{border-color:#7774ff;background:#605df0;color:#fff}.file-input[data-v-f5ccc52c]{display:none}.hex[data-v-f5ccc52c]{font-size:11px;color:#889;margin-left:auto;font-variant-numeric:tabular-nums}.inp.tiny[data-v-f5ccc52c]{width:46px;flex:0 0 46px;text-align:center}.axis-mode[data-v-f5ccc52c]{padding:4px 8px;border:1px solid #344158;border-radius:5px;background:#273246;color:#aeb8cf;font-size:11px;cursor:pointer}.axis-mode.on[data-v-f5ccc52c]{border-color:#7774ff;background:#605df0;color:#fff}.switch-row[data-v-f5ccc52c]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-f5ccc52c]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-f5ccc52c]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-f5ccc52c]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-f5ccc52c]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-f5ccc52c]:after{transform:translate(14px)}.modifier-item[data-v-f5ccc52c]{padding:8px 0 10px;border-bottom:1px solid #2a3549}.events-item[data-v-f5ccc52c]{margin-top:4px;padding-bottom:2px;border-bottom:0}.event-rules[data-v-f5ccc52c]{display:flex;flex-direction:column;gap:7px;margin-top:8px}.event-card[data-v-f5ccc52c]{padding:7px;border:1px solid #2b3a54;border-radius:7px;background:#121a28}.event-selects[data-v-f5ccc52c]{display:flex;align-items:center;gap:5px}.event-selects .inp[data-v-f5ccc52c]{height:26px;min-height:26px;box-sizing:border-box;font-size:11px}.event-select[data-v-f5ccc52c]{flex:0 0 34%}.event-target[data-v-f5ccc52c]{flex:1;min-width:0}.event-remove[data-v-f5ccc52c]{width:24px;height:26px;flex:0 0 24px;padding:0;border:1px solid #3a465f;border-radius:5px;background:#1c2638;color:#8794ad;font-size:11px;cursor:pointer}.event-remove[data-v-f5ccc52c]:hover{border-color:#a05260;background:#3a2230;color:#ffb3c0}.event-probability[data-v-f5ccc52c]{display:flex;align-items:center;gap:8px;margin-top:6px;color:#8d9ab5;font-size:10px}.event-probability>span[data-v-f5ccc52c]{flex:0 0 56px}.event-probability .inp[data-v-f5ccc52c]{flex:1;height:26px;box-sizing:border-box;font-size:11px}.event-inherit[data-v-f5ccc52c],.event-color-mode[data-v-f5ccc52c]{margin-top:4px}.event-color-mode>span[data-v-f5ccc52c]{flex:0 0 84px}.event-color-mode .inp[data-v-f5ccc52c]{height:26px;min-height:26px;box-sizing:border-box;font-size:11px}.event-collision-limit>span[data-v-f5ccc52c]{flex-basis:72px}.inherit-trigger[data-v-f5ccc52c]{flex:1;min-width:0;height:26px;box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:6px;padding:0 7px;border:1px solid #34435e;border-radius:4px;background:#101827;color:#cdd6e8;font-size:11px;text-align:left;cursor:pointer}.inherit-trigger[data-v-f5ccc52c]:hover{border-color:#5d5aa8}.inherit-summary[data-v-f5ccc52c]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.inherit-trigger i[data-v-f5ccc52c]{color:#7f8db0;font-style:normal;font-size:10px}.inherit-menu[data-v-f5ccc52c]{position:fixed;z-index:9999;padding:5px;border:1px solid #3b3f4a;border-radius:6px;background:#232427;box-shadow:0 12px 30px #0000008c}.inherit-option[data-v-f5ccc52c]{display:flex;align-items:center;gap:6px;width:100%;height:26px;padding:0 7px;border:0;border-radius:4px;background:transparent;color:#c9ccd3;font-size:12px;text-align:left;cursor:pointer}.inherit-option[data-v-f5ccc52c]:hover{background:#3a5a8c;color:#fff}.inherit-check[data-v-f5ccc52c]{width:14px;flex:0 0 14px;color:#d8dbe2;font-size:12px}.inherit-divider[data-v-f5ccc52c]{height:1px;margin:4px;background:#35373d}.event-add[data-v-f5ccc52c]{height:28px;border:1px dashed #536079;border-radius:6px;background:transparent;color:#9aa7c2;font-size:11px;cursor:pointer}.event-add[data-v-f5ccc52c]:hover{border-color:#7774ff;background:#232a45;color:#fff}.modifier-switch[data-v-f5ccc52c]{font-weight:600}.modifier-params[data-v-f5ccc52c]{margin:8px 0 0 10px;padding:2px 0 2px 10px;border-left:2px solid #344158}.modifier-hint[data-v-f5ccc52c]{margin:7px 0 0 2px;color:#647086;font-size:9px;line-height:1.5}.collision-filter-params[data-v-f5ccc52c]{position:relative;padding-top:5px;padding-bottom:5px}.collision-filter-title[data-v-f5ccc52c]{margin-bottom:8px;color:#9ba7bd;font-size:11px;font-weight:600}.collision-filter-tags[data-v-f5ccc52c]{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.collision-filter-tag[data-v-f5ccc52c]{display:inline-flex;min-width:0;align-items:center;gap:6px;padding:5px 5px 5px 8px;border:1px solid #625ff1;border-radius:6px;background:#514dcf;color:#fff;font-size:11px}.collision-filter-tag>span[data-v-f5ccc52c]{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collision-filter-tag.disabled[data-v-f5ccc52c]{border-color:#4b5364;background:#343b4b;color:#929bad}.collision-filter-tag button[data-v-f5ccc52c]{width:18px;height:18px;padding:0;border:0;border-radius:4px;background:#0b0f1a38;color:inherit;line-height:16px;cursor:pointer}.collision-filter-tag button[data-v-f5ccc52c]:hover{background:#0b0f1a80;color:#fff}.collision-filter-add[data-v-f5ccc52c]{width:30px;height:30px;padding:0;border:1px dashed #536079;border-radius:6px;background:#182131;color:#98a5bd;font-size:18px;line-height:28px;cursor:pointer}.collision-filter-add[data-v-f5ccc52c]:hover,.collision-filter-add.active[data-v-f5ccc52c]{border-color:#7774ff;background:#262c52;color:#fff}.collision-filter-add[data-v-f5ccc52c]:disabled{opacity:.42;cursor:not-allowed}.collision-filter-empty[data-v-f5ccc52c]{margin-top:7px;color:#6f7b91;font-size:10px}.collision-filter-picker[data-v-f5ccc52c]{display:grid;gap:4px;margin-top:7px;padding:5px;border:1px solid #344158;border-radius:6px;background:#101725}.collision-filter-picker button[data-v-f5ccc52c]{display:flex;min-width:0;align-items:center;justify-content:space-between;gap:8px;padding:6px 8px;border:0;border-radius:4px;background:transparent;color:#c7d0e3;font-size:11px;text-align:left;cursor:pointer}.collision-filter-picker button[data-v-f5ccc52c]:hover{background:#29344a;color:#fff}.collision-filter-picker button span[data-v-f5ccc52c]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.collision-filter-picker button small[data-v-f5ccc52c]{flex:none;color:#68758d;font-size:9px}.switch-row input:disabled+.switch-ui[data-v-f5ccc52c]{opacity:.45;cursor:not-allowed}.bone-follow-target[data-v-f5ccc52c]{margin:7px 0 9px;padding:7px 8px;overflow:hidden;color:#7f8ba3;background:#121a29;border:1px solid #2f3c53;border-radius:5px;font-size:10px;text-overflow:ellipsis;white-space:nowrap}.bone-follow-target strong[data-v-f5ccc52c]{color:#c8d0e4;font-weight:600}.bone-follow-missing[data-v-f5ccc52c]{margin:7px 0 9px;padding:7px 8px;color:#d49aa3;background:#2a1e26;border:1px solid #513540;border-radius:5px;font-size:10px;line-height:1.5}.bone-follow-rebind[data-v-f5ccc52c]{width:100%;min-height:28px;margin:0 0 8px;padding:4px 8px;overflow:hidden;border:1px solid #4a436e;border-radius:5px;background:#2d2947;color:#c8c2ee;font-size:10px;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}.bone-follow-rebind[data-v-f5ccc52c]:hover{border-color:#7165bd;background:#3a335d;color:#fff}.bone-follow-transform-grid[data-v-f5ccc52c]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.modifier-mode-row[data-v-f5ccc52c]{display:flex;justify-content:flex-end;gap:4px;margin-bottom:6px}.gravity-curve-title[data-v-f5ccc52c]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:10px 0 6px;color:#9ba7bd;font-size:11px}.gravity-curve-title span[data-v-f5ccc52c]:last-child{color:#657188;font-size:9px}.gravity-curve-axis[data-v-f5ccc52c]{display:flex;justify-content:space-between;margin:3px 34px 0 1px;color:#5f6b82;font-size:9px}.gravity-params[data-v-f5ccc52c] .ce-svg{height:96px;background:#0f1625;border-color:#30405a}.trail-params[data-v-f5ccc52c]{padding-right:2px}.trail-section-title[data-v-f5ccc52c]{margin:3px 0 8px;color:#aeb8cf;font-size:12px;font-weight:700}.trail-fixed-color .hex-input[data-v-f5ccc52c]{min-width:0;flex:1}.trail-mode-head[data-v-f5ccc52c]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:10px 0 6px;color:#9ba7bd;font-size:11px}.trail-sub-switch[data-v-f5ccc52c]{margin:11px 0 7px;padding-top:9px;border-top:1px solid #2a3549}.trail-grid-row[data-v-f5ccc52c]{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:8px}.trail-grid-row[data-v-f5ccc52c] .ns{min-width:0;flex-wrap:wrap;align-items:center}.trail-grid-row[data-v-f5ccc52c] .ns-label{width:100%}.trail-grid-row[data-v-f5ccc52c] .ns-range{min-width:0}.trail-grid-row[data-v-f5ccc52c] .ns-num{width:42px}.trail-params[data-v-f5ccc52c] .ce-svg{height:92px;background:#0f1625;border-color:#30405a}.group[data-v-63cfb71e]{border:1px solid #2a2a3c;border-radius:8px;margin-bottom:10px;overflow:hidden}.group-head[data-v-63cfb71e]{display:flex;align-items:center;gap:6px;padding:7px 10px;cursor:pointer;font-size:12px;font-weight:600;color:#ccd;background:#191924;-webkit-user-select:none;user-select:none}.group-head[data-v-63cfb71e]:hover{background:#20202e}.group-reset[data-v-63cfb71e]{margin-left:auto;height:22px;padding:0 7px;border:1px solid #3a465f;border-radius:5px;background:#252d3d;color:#9eabc3;font-size:10px;line-height:20px;cursor:pointer}.group-reset[data-v-63cfb71e]:hover{border-color:#7774ff;background:#45426f;color:#fff}.group-body[data-v-63cfb71e]{padding:8px 10px 12px}.caret[data-v-63cfb71e]{display:inline-block;width:12px;color:#667;font-size:11px}.row[data-v-63cfb71e]{display:flex;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:#aab}.row>span[data-v-63cfb71e]:first-child{width:60px;flex-shrink:0;color:#8a93bb}.inp[data-v-63cfb71e]{flex:1;min-width:0;padding:3px 5px;background:#1a1a28;border:1px solid #2e2e44;border-radius:5px;color:#dde;font-size:12px}.placeholder[data-v-63cfb71e]{color:#667;font-size:11px;padding:6px 0}.export-settings[data-v-63cfb71e]{padding-top:3px}.export-field[data-v-63cfb71e]{display:flex;flex-direction:column;gap:6px;margin:10px 0 13px;color:#9ca8bf;font-size:11px;font-weight:600}.export-input[data-v-63cfb71e]{width:100%;min-height:34px;box-sizing:border-box;padding:6px 9px;color:#e3e7f2;background:#141a29;border-color:#35445f}.export-fps-row[data-v-63cfb71e]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:end}.export-fps-field[data-v-63cfb71e]{margin-bottom:5px}.export-checkbox[data-v-63cfb71e]{display:flex;align-items:center;gap:7px;min-height:34px;margin-bottom:5px;color:#aeb8cc;font-size:11px;white-space:nowrap}.export-checkbox input[data-v-63cfb71e]{width:17px;height:17px;margin:0;accent-color:#625ff1}.export-help[data-v-63cfb71e]{margin:-6px 0 14px;color:#66758e;font-size:10px;line-height:1.5}.export-switches[data-v-63cfb71e]{display:grid;gap:13px;margin:4px 0 7px;padding-top:2px}.export-switch[data-v-63cfb71e]{font-weight:600}.export-switch-last[data-v-63cfb71e]{margin-top:13px}.inp.tiny[data-v-63cfb71e]{width:46px;flex:0 0 46px;text-align:center}.switch-row[data-v-63cfb71e]{display:flex;align-items:center;gap:9px;color:#b8c1d5;font-size:12px;cursor:pointer}.switch-row input[data-v-63cfb71e]{position:absolute;opacity:0;pointer-events:none}.switch-ui[data-v-63cfb71e]{position:relative;width:32px;height:18px;border-radius:10px;background:#354258;transition:background .16s ease}.switch-ui[data-v-63cfb71e]:after{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:transform .16s ease}.switch-row input:checked+.switch-ui[data-v-63cfb71e]{background:#625ff1}.switch-row input:checked+.switch-ui[data-v-63cfb71e]:after{transform:translate(14px)}.switch-row input:disabled+.switch-ui[data-v-63cfb71e]{opacity:.45;cursor:not-allowed}.spine-export-actions[data-v-33af5045]{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:10px}.export-spine-json[data-v-33af5045]{width:100%;padding:9px 8px;flex:0 0 auto;border:1px solid #4f4b9a;border-radius:7px;background:#403b91;color:#f1f0ff;font-size:12px;font-weight:700;cursor:pointer}.export-spine-json[data-v-33af5045]:hover{border-color:#7774ff;background:#514bc0}.export-spine-json[data-v-33af5045]:disabled{cursor:wait;opacity:.68}.export-spine-project[data-v-33af5045]{grid-column:1 / -1;width:100%;padding:7px 8px;border:1px solid #287d69;border-radius:7px;background:#196854;color:#edfff9;font-size:12px;font-weight:700;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.export-spine-project small[data-v-33af5045]{color:inherit;font-size:9px;font-weight:500;line-height:1.1}.export-spine-project[data-v-33af5045]:hover:not(:disabled){border-color:#47c89f;background:#238267}.export-spine-project[data-v-33af5045]:disabled{cursor:not-allowed;opacity:.48}.export-spine-images[data-v-33af5045]{width:100%;padding:8px;border:1px solid #3b5f8b;border-radius:7px;background:#243e64;color:#eaf3ff;font-size:12px;font-weight:700;cursor:pointer}.export-spine-images[data-v-33af5045]:hover:not(:disabled){border-color:#6099dc;background:#315581}.export-spine-images[data-v-33af5045]:disabled{cursor:wait;opacity:.55}.connector-status[data-v-33af5045]{display:flex;align-items:center;justify-content:center;gap:5px;padding-top:6px;color:#717b99;font-size:10px}.connector-status .connector-dot[data-v-33af5045]{width:6px;height:6px;border-radius:50%;background:#66718f}.connector-status.ready[data-v-33af5045]{color:#70d8ae}.connector-status.ready .connector-dot[data-v-33af5045]{background:#49c993;box-shadow:0 0 5px #49c99388}.connector-status.warning[data-v-33af5045]{color:#d4aa67}.connector-status.warning .connector-dot[data-v-33af5045]{background:#d4aa67}.connector-status button[data-v-33af5045]{padding:0 3px;border:0;background:transparent;color:#8290b6;font-size:10px;cursor:pointer}.connector-status button[data-v-33af5045]:hover{color:#c5caff}.connector-status a[data-v-33af5045]{padding:0 3px;color:#a8b0ff;font-size:10px;text-decoration:underline}.connector-status a[data-v-33af5045]:hover{color:#d8dcff}.export-message[data-v-33af5045]{padding:7px 5px 0;color:#70d8ae;font-size:10px;line-height:1.45;text-align:center}.export-message.error[data-v-33af5045]{color:#ff858f}.export-message a[data-v-33af5045]{display:inline-block;margin-left:5px;color:#9da7ff;text-decoration:underline}.panel[data-v-14a55de6]{display:flex;width:100%;height:100%;flex-direction:column;overflow:hidden;background:#14141f;border-left:1px solid #2a2a3c;padding:12px;box-sizing:border-box}.panel-scroll[data-v-14a55de6]{min-height:0;flex:1;overflow-y:auto;overscroll-behavior:contain;padding-right:2px;scrollbar-width:thin;scrollbar-color:#2e2e44 transparent}.panel-scroll[data-v-14a55de6]::-webkit-scrollbar{width:6px}.panel-scroll[data-v-14a55de6]::-webkit-scrollbar-track{background:transparent}.panel-scroll[data-v-14a55de6]::-webkit-scrollbar-thumb{background:#2e2e44;border-radius:3px}.panel-scroll[data-v-14a55de6]::-webkit-scrollbar-thumb:hover{background:#3a3a55}.panel-header[data-v-14a55de6]{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;flex:0 0 auto;font-weight:700;color:#ccd}.timeline[data-v-6213c4a4]{height:100%;background:#12121c;border-top:1px solid #2a2a3c;display:flex;flex-direction:column;padding:6px 10px;gap:4px}.tl-controls[data-v-6213c4a4]{display:flex;align-items:center;gap:8px}.tl-btn[data-v-6213c4a4]{width:30px;height:26px;background:#1e1e2e;border:1px solid #2e2e44;border-radius:6px;color:#aab;font-size:12px;cursor:pointer}.tl-btn.on[data-v-6213c4a4]{background:#3a5a8c;color:#fff;border-color:#5a7ab8}.tl-ab-loop[data-v-6213c4a4]{position:relative}.tl-ab-toggle[data-v-6213c4a4]{display:flex;height:26px;align-items:center;gap:7px;padding:0 7px;border:1px solid #343a51;border-radius:6px;background:#1e1e2e;color:#8f98ad;font-size:10px;cursor:pointer}.tl-ab-toggle.on[data-v-6213c4a4]{border-color:#716eff;background:#2e2d50;color:#eef}.tl-switch[data-v-6213c4a4]{position:relative;width:22px;height:12px;border-radius:99px;background:#343a4b}.tl-switch b[data-v-6213c4a4]{position:absolute;top:2px;left:2px;width:8px;height:8px;border-radius:50%;background:#8992a5;transition:transform .15s ease,background .15s ease}.tl-ab-toggle.on .tl-switch[data-v-6213c4a4]{background:#716eff}.tl-ab-toggle.on .tl-switch b[data-v-6213c4a4]{transform:translate(10px);background:#fff}.tl-ab-popover[data-v-6213c4a4]{position:absolute;z-index:40;left:0;bottom:calc(100% + 8px);display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid #4b4c73;border-radius:8px;background:#171724;box-shadow:0 10px 26px #00000080}.tl-ab-title[data-v-6213c4a4]{color:#b7bdd2;font-size:10px;white-space:nowrap}.tl-range[data-v-6213c4a4]{display:flex;height:25px;align-items:center;gap:3px;color:#778198;font-size:10px}.tl-range input[data-v-6213c4a4]{width:43px;height:25px;padding:0 5px;box-sizing:border-box;border:1px solid #3a3a51;border-radius:5px;outline:none;background:#181824;color:#e1e4ed;font-size:11px;text-align:center}.tl-range input[data-v-6213c4a4]:focus{border-color:#716eff}.tl-frame[data-v-6213c4a4]{display:inline-block;flex:0 0 92px;width:92px;box-sizing:border-box;font-size:12px;color:#aab;text-align:right;font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1;white-space:nowrap}.tl-frame b[data-v-6213c4a4]{display:inline;color:inherit;font-weight:400}.tl-legend[data-v-6213c4a4]{display:flex;align-items:center;gap:4px;color:#778198;font-size:10px}.tl-legend i[data-v-6213c4a4]{display:inline-block;width:10px;height:7px;border-radius:2px}.legend-emission[data-v-6213c4a4]{margin-left:4px;background:#2f8b62}.legend-life[data-v-6213c4a4]{margin-left:5px;background:#a54551}.legend-spine[data-v-6213c4a4]{margin-left:5px;background:#7448b8}.tl-anim[data-v-6213c4a4]{display:flex;align-items:center;gap:6px;font-size:12px;color:#aab}.tl-owner-animation[data-v-6213c4a4]{position:relative}.tl-animation-trigger[data-v-6213c4a4]{display:flex;align-items:center;justify-content:space-between;gap:8px;width:116px;height:25px;padding:0 7px;overflow:hidden;border:1px solid #2e2e44;border-radius:5px;background:#1a1a28;color:#dde;cursor:pointer}.tl-animation-trigger>span[data-v-6213c4a4]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tl-animation-trigger>i[data-v-6213c4a4]{flex:0 0 auto;color:#8c96ad;font-style:normal}.tl-animation-trigger[data-v-6213c4a4]:disabled{opacity:.5;cursor:not-allowed}.tl-animation-menu[data-v-6213c4a4]{position:absolute;z-index:30;right:0;bottom:calc(100% + 6px);width:226px;padding:7px;border:1px solid #3c4760;border-radius:8px;background:#171b29;box-shadow:0 10px 24px #00000073}.tl-animation-menu-title[data-v-6213c4a4]{padding:2px 4px 6px;color:#77839c;font-size:10px}.tl-animation-option[data-v-6213c4a4]{display:flex;align-items:center;justify-content:space-between;width:100%;height:27px;padding:0 7px;border:0;border-radius:5px;background:transparent;color:#b8c1d5;text-align:left;cursor:pointer}.tl-animation-option>span[data-v-6213c4a4]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tl-animation-option[data-v-6213c4a4]:hover{background:#252e42}.tl-animation-option.on[data-v-6213c4a4]{background:#34335d;color:#fff}.tl-animation-option>i[data-v-6213c4a4]{color:#8d8aff;font-style:normal}.tl-animation-editor[data-v-6213c4a4]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px;margin-top:7px;padding-top:7px;border-top:1px solid #2b3346}.tl-animation-name[data-v-6213c4a4]{min-width:0;height:27px;padding:0 7px;box-sizing:border-box;border:1px solid #343e55;border-radius:5px;background:#101522;color:#e1e6f2;outline:none}.tl-animation-name[data-v-6213c4a4]:focus{border-color:#6865d8}.tl-animation-editor button[data-v-6213c4a4],.tl-animation-actions button[data-v-6213c4a4]{height:27px;padding:0 8px;border:1px solid #3c4861;border-radius:5px;background:#29344a;color:#cbd3e3;cursor:pointer}.tl-animation-actions[data-v-6213c4a4]{display:grid;grid-template-columns:1fr 1fr;gap:5px;margin-top:6px}.tl-animation-actions button[data-v-6213c4a4]:last-child{border-color:#5b3942;background:#3b282f;color:#e2a8b2}.tl-animation-actions button[data-v-6213c4a4]:disabled{opacity:.4;cursor:not-allowed}.tl-animation-error[data-v-6213c4a4]{margin-top:5px;color:#ef8997;font-size:10px}.tl-animation-hint[data-v-6213c4a4]{margin-top:5px;color:#69758d;font-size:9px;text-align:center}.tl-sel[data-v-6213c4a4]{background:#1a1a28;border:1px solid #2e2e44;color:#dde;border-radius:5px;padding:2px 6px;font-size:12px}.tl-sel[data-v-6213c4a4]:disabled{opacity:.5;cursor:not-allowed}.tl-spine-preview .tl-sel[data-v-6213c4a4]{max-width:190px}.tl-zoom[data-v-6213c4a4]{margin-left:auto;font-size:11px;color:#667}.tl-viewport[data-v-6213c4a4]{position:relative;flex:1;overflow:hidden;background:#0d0d14;border:1px solid #2a2a3c;border-radius:6px;cursor:ew-resize}.tl-ticks[data-v-6213c4a4]{position:absolute;top:0;left:0;right:0;height:18px}.tl-tickline[data-v-6213c4a4]{position:absolute;top:0;bottom:0;width:1px;background:#263040}.tl-ticklabel[data-v-6213c4a4]{position:absolute;top:2px;transform:translate(-50%);font-size:9px;color:#667}.tl-playhead[data-v-6213c4a4]{position:absolute;top:0;bottom:0;width:2px;background:#fc3;z-index:5;pointer-events:none}.tl-lanes[data-v-6213c4a4]{position:absolute;top:22px;left:0;right:0;bottom:0}.tl-lane[data-v-6213c4a4]{position:relative;height:26px;margin-bottom:4px}.lane-ico[data-v-6213c4a4]{position:absolute;left:4px;top:6px;font-size:11px;color:#dde;z-index:2;pointer-events:none}.lane-ico.sub-lane-ico[data-v-6213c4a4]{color:#7f8999}.lane-bar[data-v-6213c4a4]{position:absolute;top:4px;height:18px;display:flex;align-items:stretch;cursor:grab;box-sizing:border-box}.lane-bar[data-v-6213c4a4]:active{cursor:grabbing}.lane-name[data-v-6213c4a4]{position:absolute;left:14px;right:5px;top:2px;z-index:2;pointer-events:none;font-size:11px;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bar-life[data-v-6213c4a4]{position:absolute;inset:0 auto 0 0;z-index:0;min-width:1px;border:1px solid #c05a66;border-radius:5px;background:#a54551;box-sizing:border-box}.sub-emitter-bar .bar-life[data-v-6213c4a4]{border-color:#727d8f;background:#596274}.bar-life.loop-life[data-v-6213c4a4]{border-color:#667085;background:#242b39}.bar-emission[data-v-6213c4a4]{position:absolute;inset:0 auto 0 0;z-index:1;min-width:1px;border:1px solid #45a97d;border-radius:5px 0 0 5px;background:#2f8b62;box-sizing:border-box}.bar-emission.bar-loop[data-v-6213c4a4]{border-radius:0}.bar-loop-transition[data-v-6213c4a4]{position:absolute;top:0;bottom:0;z-index:1;border:1px solid #7d8799;background:#50596a;box-sizing:border-box}.bar-loop-start[data-v-6213c4a4]{left:0;border-radius:5px 0 0 5px}.bar-loop-end[data-v-6213c4a4]{border-radius:0 5px 5px 0}.bar-handle[data-v-6213c4a4]{position:absolute;z-index:4;right:-4px;top:-1px;bottom:-1px;width:8px;cursor:ew-resize;background:#ffffff2e}.bar-handle[data-v-6213c4a4]:hover{background:#ffffff59}.spine-ico[data-v-6213c4a4]{color:#c08cff}.spine-bar[data-v-6213c4a4]{position:absolute;top:4px;height:18px;min-width:1px;box-sizing:border-box;border:1px solid #a575ed;border-radius:5px;background:#7448b8;cursor:grab;box-shadow:inset 0 0 0 1px #ffffff0d}.spine-bar[data-v-6213c4a4]:active{cursor:grabbing}.tl-empty[data-v-6213c4a4]{color:#667;font-size:11px;padding:8px}.transfer-overlay[data-v-592b922e]{position:fixed;z-index:2000;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;pointer-events:auto;cursor:wait;overscroll-behavior:contain;background:#05080f42;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px)}.transfer-dialog[data-v-592b922e]{width:min(420px,calc(100vw - 40px));padding:18px 20px 16px;border:1px solid #414b66;border-radius:10px;box-shadow:0 18px 55px #00000075;background:#171d2b;color:#e7ebf5}.transfer-heading[data-v-592b922e]{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:12px;font-size:14px;font-weight:700}.transfer-heading strong[data-v-592b922e]{color:#a8a6ff;font-size:12px;font-variant-numeric:tabular-nums}.transfer-track[data-v-592b922e]{height:9px;overflow:hidden;border:1px solid #35415a;border-radius:999px;background:#0d1422}.transfer-bar[data-v-592b922e]{height:100%;border-radius:inherit;background:linear-gradient(90deg,#4d75e8,#7774ff);transition:width .16s ease}.transfer-track.indeterminate .transfer-bar[data-v-592b922e]{width:42%;animation:transfer-slide-592b922e 1s ease-in-out infinite}.transfer-detail[data-v-592b922e]{min-height:17px;margin-top:9px;color:#8895ae;font-size:11px;line-height:1.5}.transfer-dialog.failed[data-v-592b922e]{border-color:#754351}.transfer-dialog.failed .transfer-heading strong[data-v-592b922e],.transfer-dialog.failed .transfer-detail[data-v-592b922e]{color:#e99aa9}.transfer-dialog.failed .transfer-bar[data-v-592b922e]{background:#c85d70}.transfer-fade-enter-active[data-v-592b922e],.transfer-fade-leave-active[data-v-592b922e]{transition:opacity .16s ease}.transfer-fade-enter-from[data-v-592b922e],.transfer-fade-leave-to[data-v-592b922e]{opacity:0}@keyframes transfer-slide-592b922e{0%{transform:translate(-110%)}to{transform:translate(250%)}}.layout[data-v-07c42c10]{display:flex;width:100%;height:100%;min-height:0;overflow:clip}.parameter-panel[data-v-07c42c10]{flex-shrink:0;height:100%;min-height:0;overflow:clip}.resizer-col[data-v-07c42c10]{width:5px;cursor:col-resize;background:#1c1c2a;border-left:1px solid #2a2a3c;border-right:1px solid #2a2a3c;flex-shrink:0}.resizer-col[data-v-07c42c10]:hover{background:#3a5a8c}.right[data-v-07c42c10]{flex:1;min-width:0;height:100%;min-height:0;overflow:clip;display:flex;flex-direction:column}.panel-right .right[data-v-07c42c10]{order:1}.panel-right .resizer-col[data-v-07c42c10]{order:2}.panel-right .parameter-panel[data-v-07c42c10]{order:3}.stage-area[data-v-07c42c10]{flex:1;min-height:0;overflow:clip}.resizer-row[data-v-07c42c10]{height:4px;cursor:row-resize;background:#1c1c2a;border-top:1px solid #2a2a3c;border-bottom:1px solid #2a2a3c;flex-shrink:0}.resizer-row[data-v-07c42c10]:hover{background:#3a5a8c}.timeline-area[data-v-07c42c10]{position:relative;z-index:10;flex-shrink:0;overflow:visible}html,body{width:100%;height:100%;margin:0;padding:0;overflow:clip;overscroll-behavior:none;background:#0b0b12;color:#e8e8f0;font-family:system-ui,-apple-system,Segoe UI,sans-serif}body{position:fixed;top:0;right:0;bottom:0;left:0}*{box-sizing:border-box}#app{position:fixed;top:0;right:0;bottom:0;left:0;width:auto;height:auto;overflow:clip}html,body,#app{-webkit-user-select:none;user-select:none}input,textarea,select,[contenteditable=true]{-webkit-user-select:text;user-select:text}input[type=number]{-webkit-appearance:textfield;appearance:textfield;-moz-appearance:textfield}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ns-label,.row>span:first-child,.field-block>span,.compact-field>span,.event-probability>span{line-height:1.25;overflow-wrap:anywhere} diff --git a/dist/assets/index-Cxn3bPhQ.js b/dist/assets/index-hgwT4zDg.js similarity index 99% rename from dist/assets/index-Cxn3bPhQ.js rename to dist/assets/index-hgwT4zDg.js index 8379286..1e19ef5 100644 --- a/dist/assets/index-Cxn3bPhQ.js +++ b/dist/assets/index-hgwT4zDg.js @@ -1,4 +1,4 @@ -var Ae=Object.defineProperty;var Be=(m,o,e)=>o in m?Ae(m,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):m[o]=e;var a=(m,o,e)=>Be(m,typeof o!="symbol"?o+"":o,e);import{T as Fe,a as he,b as F,S as ue,M as pe,c as oe,W as ne,B as H,d as z,L as Te,E as O,e as ce,p as q,f as Ee,g as fe,A as Q,h as me,i as De,j as V,s as re,G as we,k as $,l as Y,m as Le,P as Ie,n as Re,o as Ne,C as X,q as be,r as _e,t as Ue,u as Ye,v as Xe,w as ee,x as j,y as ke,z as Ve,D as J,F as ge,V as Ge,H as ae,I as We,J as $e,U as xe,K as E,R as ve,N as ye,O as Pe,Q as Oe,X as He,Y as ze,Z as qe,_ as Ke}from"./index-2QgDjwRs.js";import{$ as bt,a0 as kt,a1 as vt,a2 as yt,a3 as Pt,a4 as St,a5 as Mt,a6 as At,a7 as Bt,a8 as Ft,a9 as Et,aa as Dt,ab as Lt,ac as It,ad as Rt,ae as Nt,af as _t,ag as Ut,ah as Yt,ai as Xt,aj as Vt,ak as Gt,al as Wt,am as $t,an as Ot,ao as Ht,ap as zt,aq as qt,ar as Kt,as as Zt,at as Jt,au as Qt,av as jt,aw as es,ax as ts,ay as ss,az as os,aA as ns,aB as as,aC as rs,aD as is,aE as ls,aF as hs,aG as cs,aH as ds,aI as us,aJ as ps,aK as fs,aL as ms,aM as gs,aN as xs,aO as Cs,aP as Ts,aQ as ws,aR as bs,aS as ks,aT as vs,aU as ys,aV as Ps,aW as Ss,aX as Ms,aY as As,aZ as Bs,a_ as Fs,a$ as Es,b0 as Ds,b1 as Ls,b2 as Is,b3 as Rs,b4 as Ns,b5 as _s,b6 as Us,b7 as Ys,b8 as Xs,b9 as Vs,ba as Gs,bb as Ws,bc as $s,bd as Os,be as Hs,bf as zs,bg as qs,bh as Ks,bi as Zs,bj as Js,bk as Qs,bl as js,bm as eo,bn as to,bo as so,bp as oo,bq as no,br as ao,bs as ro,bt as io,bu as lo,bv as ho,bw as co,bx as uo,by as po,bz as fo,bA as mo,bB as go,bC as xo,bD as Co,bE as To,bF as wo,bG as bo,bH as ko,bI as vo,bJ as yo,bK as Po,bL as So,bM as Mo,bN as Ao,bO as Bo,bP as Fo,bQ as Eo,bR as Do,bS as Lo,bT as Io,bU as Ro,bV as No,bW as _o,bX as Uo,bY as Yo,bZ as Xo,b_ as Vo,b$ as Go,c0 as Wo,c1 as $o,c2 as Oo,c3 as Ho}from"./index-2QgDjwRs.js";import{SkeletonClipping as de,SkeletonPhysicsMovement as Ze,AnimationStateData as Je,AtlasAttachmentLoader as Qe,SkeletonBounds as je}from"./index-DxBJZqWf.js";import{AssetCache as qo,AssetManagerBase as Ko,Downloader as Zo,SkeletonRendererCore as Jo,Triangulator as Qo}from"./index-DxBJZqWf.js";if(typeof window<"u"&&window.PIXI){const m=window.require;window.require=o=>{if(m)return m(o);if(o.startsWith("@pixi/"))return window.PIXI}}const _=class _ extends Fe{constructor(e){super(e.resource.source);a(this,"texture");this.texture=he.from(e)}static from(e){return _.textureMap.has(e)?_.textureMap.get(e):new _(e)}setFilters(e,t){this.texture.baseTexture.scaleMode=_.toPixiTextureFilter(e),this.texture.baseTexture.mipmap=_.toPixiMipMap(e)}setWraps(e,t){this.texture.baseTexture.wrapMode=_.toPixiTextureWrap(e)}dispose(){this.texture.destroy()}static toPixiTextureFilter(e){switch(e){case F.Nearest:case F.MipMapNearestLinear:case F.MipMapNearestNearest:return ue.NEAREST;case F.Linear:case F.MipMapLinearLinear:case F.MipMapLinearNearest:return ue.LINEAR;default:throw new Error(`Unknown texture filter: ${String(e)}`)}}static toPixiMipMap(e){switch(e){case F.Nearest:case F.Linear:return pe.OFF;case F.MipMapNearestLinear:case F.MipMapNearestNearest:case F.MipMapLinearLinear:case F.MipMapLinearNearest:return pe.ON;default:throw new Error(`Unknown texture filter: ${String(e)}`)}}static toPixiTextureWrap(e){switch(e){case oe.ClampToEdge:return ne.CLAMP;case oe.MirroredRepeat:return ne.MIRRORED_REPEAT;case oe.Repeat:return ne.REPEAT;default:throw new Error(`Unknown texture wrap: ${String(e)}`)}}static toPixiBlending(e){switch(e){case H.Normal:return z.NORMAL;case H.Additive:return z.ADD;case H.Multiply:return z.MULTIPLY;case H.Screen:return z.SCREEN;default:throw new Error(`Unknown blendMode: ${String(e)}`)}}};a(_,"textureMap",new Map);let G=_;const K="spineTextureAtlasLoader",et={extension:O.Asset,resolver:{test:m=>V(m,".atlas"),parse:m=>{var e,t;const o=m.split(".");return{resolution:parseFloat(((t=(e=re.RETINA_PREFIX)==null?void 0:e.exec(m))==null?void 0:t[1])??"1"),format:o[o.length-2],src:m}}},loader:{name:K,extension:{type:O.LoadParser,priority:Te.Normal,name:K},test(m){return V(m,".atlas")},async load(m){const o=await re.ADAPTER.fetch(m);if(!o.ok)throw new Error(`[${K}] Failed to fetch ${m}: ${o.status} ${o.statusText}`);return await o.text()},testParse(m,o){const e=V(o.src,".atlas"),t=typeof m=="string",s=o.loadParser===K;return Promise.resolve((e||s)&&t)},unload(m){m.dispose()},async parse(m,o,e){var p;const t=o.data||{};let s=q.dirname(o.src);s&&s.lastIndexOf("/")!==s.length-1&&(s+="/");const n=new Ee(m);if(t.images instanceof fe||typeof t.images=="string"){const h=t.images;t.images={},t.images[n.pages[0].name]=h}const r=[];let l=!0;for(const h of e.parsers)if(h.name==="loadTextures"){l=(p=h.config)==null?void 0:p.preferCreateImageBitmap;break}Q.setPreferences({preferCreateImageBitmap:!1});for(const h of n.pages){const u=h.name,c=t!=null&&t.images?t.images[u]:void 0;if(c instanceof fe)h.setTexture(G.from(c));else{const i=c??q.normalize([...s.split(q.sep),u].join(q.sep)),g={src:De(i,o.src),data:{...t.imageMetadata,alphaMode:h.pma?me.PMA:me.UNPACK}},x=e.load(g).then(d=>{h.setTexture(G.from(d.baseTexture))});r.push(x)}}return await Promise.all(r),Q.setPreferences({preferCreateImageBitmap:l}),n}}};ce.add(et);const Z="spineSkeletonLoader";function tt(m){return m.hasOwnProperty("bones")}function st(m){return m instanceof Uint8Array}const ot={extension:O.Asset,loader:{name:Z,extension:{type:O.LoadParser,priority:Te.Normal,name:Z},test(m){return V(m,".skel")},async load(m){const o=await re.ADAPTER.fetch(m);if(!o.ok)throw new Error(`[${Z}] Failed to fetch ${m}: ${o.status} ${o.statusText}`);return new Uint8Array(await o.arrayBuffer())},testParse(m,o){const e=V(o.src,".json")&&tt(m),t=V(o.src,".skel")&&st(m),s=o.loadParser===Z;return Promise.resolve(e||t||s)}}};ce.add(ot);class nt extends we{constructor(o=!1){super();const e=new $(void 0),t=new $(void 0,!0),s=new $(void 0,!0,!0);this.addAttribute("aVertexPosition",e,2,!1,Y.FLOAT),this.addAttribute("aTextureCoord",t,2,!1,Y.FLOAT),this.addIndex(s)}}const at=` +var Ae=Object.defineProperty;var Be=(m,o,e)=>o in m?Ae(m,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):m[o]=e;var a=(m,o,e)=>Be(m,typeof o!="symbol"?o+"":o,e);import{T as Fe,a as he,b as F,S as ue,M as pe,c as oe,W as ne,B as H,d as z,L as Te,E as O,e as ce,p as q,f as Ee,g as fe,A as Q,h as me,i as De,j as V,s as re,G as we,k as $,l as Y,m as Le,P as Ie,n as Re,o as Ne,C as X,q as be,r as _e,t as Ue,u as Ye,v as Xe,w as ee,x as j,y as ke,z as Ve,D as J,F as ge,V as Ge,H as ae,I as We,J as $e,U as xe,K as E,R as ve,N as ye,O as Pe,Q as Oe,X as He,Y as ze,Z as qe,_ as Ke}from"./index-DnfvUUAC.js";import{$ as bt,a0 as kt,a1 as vt,a2 as yt,a3 as Pt,a4 as St,a5 as Mt,a6 as At,a7 as Bt,a8 as Ft,a9 as Et,aa as Dt,ab as Lt,ac as It,ad as Rt,ae as Nt,af as _t,ag as Ut,ah as Yt,ai as Xt,aj as Vt,ak as Gt,al as Wt,am as $t,an as Ot,ao as Ht,ap as zt,aq as qt,ar as Kt,as as Zt,at as Jt,au as Qt,av as jt,aw as es,ax as ts,ay as ss,az as os,aA as ns,aB as as,aC as rs,aD as is,aE as ls,aF as hs,aG as cs,aH as ds,aI as us,aJ as ps,aK as fs,aL as ms,aM as gs,aN as xs,aO as Cs,aP as Ts,aQ as ws,aR as bs,aS as ks,aT as vs,aU as ys,aV as Ps,aW as Ss,aX as Ms,aY as As,aZ as Bs,a_ as Fs,a$ as Es,b0 as Ds,b1 as Ls,b2 as Is,b3 as Rs,b4 as Ns,b5 as _s,b6 as Us,b7 as Ys,b8 as Xs,b9 as Vs,ba as Gs,bb as Ws,bc as $s,bd as Os,be as Hs,bf as zs,bg as qs,bh as Ks,bi as Zs,bj as Js,bk as Qs,bl as js,bm as eo,bn as to,bo as so,bp as oo,bq as no,br as ao,bs as ro,bt as io,bu as lo,bv as ho,bw as co,bx as uo,by as po,bz as fo,bA as mo,bB as go,bC as xo,bD as Co,bE as To,bF as wo,bG as bo,bH as ko,bI as vo,bJ as yo,bK as Po,bL as So,bM as Mo,bN as Ao,bO as Bo,bP as Fo,bQ as Eo,bR as Do,bS as Lo,bT as Io,bU as Ro,bV as No,bW as _o,bX as Uo,bY as Yo,bZ as Xo,b_ as Vo,b$ as Go,c0 as Wo,c1 as $o,c2 as Oo,c3 as Ho}from"./index-DnfvUUAC.js";import{SkeletonClipping as de,SkeletonPhysicsMovement as Ze,AnimationStateData as Je,AtlasAttachmentLoader as Qe,SkeletonBounds as je}from"./index-BSAMR7rU.js";import{AssetCache as qo,AssetManagerBase as Ko,Downloader as Zo,SkeletonRendererCore as Jo,Triangulator as Qo}from"./index-BSAMR7rU.js";if(typeof window<"u"&&window.PIXI){const m=window.require;window.require=o=>{if(m)return m(o);if(o.startsWith("@pixi/"))return window.PIXI}}const _=class _ extends Fe{constructor(e){super(e.resource.source);a(this,"texture");this.texture=he.from(e)}static from(e){return _.textureMap.has(e)?_.textureMap.get(e):new _(e)}setFilters(e,t){this.texture.baseTexture.scaleMode=_.toPixiTextureFilter(e),this.texture.baseTexture.mipmap=_.toPixiMipMap(e)}setWraps(e,t){this.texture.baseTexture.wrapMode=_.toPixiTextureWrap(e)}dispose(){this.texture.destroy()}static toPixiTextureFilter(e){switch(e){case F.Nearest:case F.MipMapNearestLinear:case F.MipMapNearestNearest:return ue.NEAREST;case F.Linear:case F.MipMapLinearLinear:case F.MipMapLinearNearest:return ue.LINEAR;default:throw new Error(`Unknown texture filter: ${String(e)}`)}}static toPixiMipMap(e){switch(e){case F.Nearest:case F.Linear:return pe.OFF;case F.MipMapNearestLinear:case F.MipMapNearestNearest:case F.MipMapLinearLinear:case F.MipMapLinearNearest:return pe.ON;default:throw new Error(`Unknown texture filter: ${String(e)}`)}}static toPixiTextureWrap(e){switch(e){case oe.ClampToEdge:return ne.CLAMP;case oe.MirroredRepeat:return ne.MIRRORED_REPEAT;case oe.Repeat:return ne.REPEAT;default:throw new Error(`Unknown texture wrap: ${String(e)}`)}}static toPixiBlending(e){switch(e){case H.Normal:return z.NORMAL;case H.Additive:return z.ADD;case H.Multiply:return z.MULTIPLY;case H.Screen:return z.SCREEN;default:throw new Error(`Unknown blendMode: ${String(e)}`)}}};a(_,"textureMap",new Map);let G=_;const K="spineTextureAtlasLoader",et={extension:O.Asset,resolver:{test:m=>V(m,".atlas"),parse:m=>{var e,t;const o=m.split(".");return{resolution:parseFloat(((t=(e=re.RETINA_PREFIX)==null?void 0:e.exec(m))==null?void 0:t[1])??"1"),format:o[o.length-2],src:m}}},loader:{name:K,extension:{type:O.LoadParser,priority:Te.Normal,name:K},test(m){return V(m,".atlas")},async load(m){const o=await re.ADAPTER.fetch(m);if(!o.ok)throw new Error(`[${K}] Failed to fetch ${m}: ${o.status} ${o.statusText}`);return await o.text()},testParse(m,o){const e=V(o.src,".atlas"),t=typeof m=="string",s=o.loadParser===K;return Promise.resolve((e||s)&&t)},unload(m){m.dispose()},async parse(m,o,e){var p;const t=o.data||{};let s=q.dirname(o.src);s&&s.lastIndexOf("/")!==s.length-1&&(s+="/");const n=new Ee(m);if(t.images instanceof fe||typeof t.images=="string"){const h=t.images;t.images={},t.images[n.pages[0].name]=h}const r=[];let l=!0;for(const h of e.parsers)if(h.name==="loadTextures"){l=(p=h.config)==null?void 0:p.preferCreateImageBitmap;break}Q.setPreferences({preferCreateImageBitmap:!1});for(const h of n.pages){const u=h.name,c=t!=null&&t.images?t.images[u]:void 0;if(c instanceof fe)h.setTexture(G.from(c));else{const i=c??q.normalize([...s.split(q.sep),u].join(q.sep)),g={src:De(i,o.src),data:{...t.imageMetadata,alphaMode:h.pma?me.PMA:me.UNPACK}},x=e.load(g).then(d=>{h.setTexture(G.from(d.baseTexture))});r.push(x)}}return await Promise.all(r),Q.setPreferences({preferCreateImageBitmap:l}),n}}};ce.add(et);const Z="spineSkeletonLoader";function tt(m){return m.hasOwnProperty("bones")}function st(m){return m instanceof Uint8Array}const ot={extension:O.Asset,loader:{name:Z,extension:{type:O.LoadParser,priority:Te.Normal,name:Z},test(m){return V(m,".skel")},async load(m){const o=await re.ADAPTER.fetch(m);if(!o.ok)throw new Error(`[${Z}] Failed to fetch ${m}: ${o.status} ${o.statusText}`);return new Uint8Array(await o.arrayBuffer())},testParse(m,o){const e=V(o.src,".json")&&tt(m),t=V(o.src,".skel")&&st(m),s=o.loadParser===Z;return Promise.resolve(e||t||s)}}};ce.add(ot);class nt extends we{constructor(o=!1){super();const e=new $(void 0),t=new $(void 0,!0),s=new $(void 0,!0,!0);this.addAttribute("aVertexPosition",e,2,!1,Y.FLOAT),this.addAttribute("aTextureCoord",t,2,!1,Y.FLOAT),this.addIndex(s)}}const at=` attribute vec2 aVertexPosition; attribute vec2 aTextureCoord; diff --git a/dist/index.html b/dist/index.html index 026c79d..1428f2c 100644 --- a/dist/index.html +++ b/dist/index.html @@ -8,8 +8,8 @@ html, body { margin: 0; padding: 0; background: #111; color: #eee; font-family: system-ui, -apple-system, sans-serif; } #app { display: flex; flex-direction: column; height: 100vh; } - - + +
diff --git a/public/Preset/index.json b/public/Preset/index.json index 67c0c17..b21fc26 100644 --- a/public/Preset/index.json +++ b/public/Preset/index.json @@ -1,30 +1,100 @@ [ { - "name": "1.粒子扫过", - "file": "1.粒子扫过.json" + "file": "1.粒子扫过.json", + "name": { + "zh-CN": "1.粒子扫过", + "zh-TW": "1.粒子扫过", + "en": "1.粒子扫过", + "ja": "1.粒子扫过", + "ko": "1.粒子扫过", + "fr": "1.粒子扫过", + "de": "1.粒子扫过", + "pt-BR": "1.粒子扫过", + "es": "1.粒子扫过" + } }, { - "name": "2.长条方块", - "file": "2.长条方块.json" + "file": "2.长条方块.json", + "name": { + "zh-CN": "2.长条方块", + "zh-TW": "2.长条方块", + "en": "2.长条方块", + "ja": "2.长条方块", + "ko": "2.长条方块", + "fr": "2.长条方块", + "de": "2.长条方块", + "pt-BR": "2.长条方块", + "es": "2.长条方块" + } }, { - "name": "3.力场拖尾", - "file": "3.力场拖尾.json" + "file": "3.力场拖尾.json", + "name": { + "zh-CN": "3.力场拖尾", + "zh-TW": "3.力场拖尾", + "en": "3.力场拖尾", + "ja": "3.力场拖尾", + "ko": "3.力场拖尾", + "fr": "3.力场拖尾", + "de": "3.力场拖尾", + "pt-BR": "3.力场拖尾", + "es": "3.力场拖尾" + } }, { - "name": "4.雷电序列帧", - "file": "4.雷电序列帧.json" + "file": "4.雷电序列帧.json", + "name": { + "zh-CN": "4.雷电序列帧", + "zh-TW": "4.雷电序列帧", + "en": "4.雷电序列帧", + "ja": "4.雷电序列帧", + "ko": "4.雷电序列帧", + "fr": "4.雷电序列帧", + "de": "4.雷电序列帧", + "pt-BR": "4.雷电序列帧", + "es": "4.雷电序列帧" + } }, { - "name": "5.贴图轴点", - "file": "5.贴图轴点.json" + "file": "5.贴图轴点.json", + "name": { + "zh-CN": "5.贴图轴点", + "zh-TW": "5.贴图轴点", + "en": "5.贴图轴点", + "ja": "5.贴图轴点", + "ko": "5.贴图轴点", + "fr": "5.贴图轴点", + "de": "5.贴图轴点", + "pt-BR": "5.贴图轴点", + "es": "5.贴图轴点" + } }, { - "name": "6.子发射器", - "file": "6.子发射器.json" + "file": "6.子发射器.json", + "name": { + "zh-CN": "6.子发射器", + "zh-TW": "6.子发射器", + "en": "6.子发射器", + "ja": "6.子发射器", + "ko": "6.子发射器", + "fr": "6.子发射器", + "de": "6.子发射器", + "pt-BR": "6.子发射器", + "es": "6.子发射器" + } }, { - "name": "7.SpineBoy", - "file": "7.SpineBoy.json" + "file": "7.SpineBoy.json", + "name": { + "zh-CN": "7.SpineBoy", + "zh-TW": "7.SpineBoy", + "en": "7.SpineBoy", + "ja": "7.SpineBoy", + "ko": "7.SpineBoy", + "fr": "7.SpineBoy", + "de": "7.SpineBoy", + "pt-BR": "7.SpineBoy", + "es": "7.SpineBoy" + } } ] diff --git a/scripts/apply-i18n-overrides.mjs b/scripts/apply-i18n-overrides.mjs index 86f164f..9d8e7d2 100644 --- a/scripts/apply-i18n-overrides.mjs +++ b/scripts/apply-i18n-overrides.mjs @@ -38,7 +38,6 @@ const overrides = { export: { title: '匯出設定', spineVersion: 'Spine 版本', fps: '匯出 FPS', exportJson: '匯出 Spine JSON', exportImages: '匯出圖片 ZIP', connectorReady: '連接器可用 · Spine 已就緒', connectorOffline: '本機 Spine 連接器未啟動', spineNotFound: '連接器已啟動,但找不到 Spine', notAuthorized: '連接器已啟動,但目前網站尚未授權', checking: '偵測中', offline: '未啟動', notFound: '找不到 Spine', unauthorized: '未授權', connectorBusy: '正在重新計算並產生 Spine 專案', connectorGenerate: '使用本機 Spine 自動產生 {version} 專案' }, spine: { title: 'Spine 屬性', resources: 'Spine 資源', animations: 'Spine 動畫', hierarchy: '階層樹', xPosition: 'X 位置', yPosition: 'Y 位置', rotation: '旋轉', startTime: '開始時間', scaleX: 'X 縮放', scaleY: 'Y 縮放' }, help: { title: '使用說明', commonOps: '常用操作', shortcuts: '快速鍵', modules: '功能模組詳解' }, - presets: { particleSweep: '1.粒子掃過', barBlocks: '2.長條方塊', forceTrail: '3.力場拖尾', lightningSequence: '4.雷電序列幀', texturePivot: '5.貼圖軸點', subEmitter: '6.子發射器' }, }, ja: { common: { @@ -77,7 +76,6 @@ const overrides = { export: { title: 'エクスポート設定', spineVersion: 'Spine バージョン', fps: 'エクスポート FPS', exportJson: 'Spine JSON を書き出す', exportImages: '画像 ZIP を書き出す', connectorReady: 'コネクタ使用可能 · Spine 準備完了', connectorOffline: 'ローカル Spine コネクタが起動していません', spineNotFound: 'コネクタは起動していますが Spine が見つかりません', notAuthorized: 'コネクタは起動していますが、このサイトは未認証です', checking: '確認中', offline: '未起動', notFound: 'Spine が見つかりません', unauthorized: '未認証', connectorBusy: 'Spine プロジェクトを再計算して生成中', connectorGenerate: 'ローカル Spine で Spine {version} プロジェクトを生成' }, spine: { title: 'Spine プロパティ', resources: 'Spine リソース', animations: 'Spine アニメーション', hierarchy: '階層ツリー', xPosition: 'X 位置', yPosition: 'Y 位置', rotation: '回転', startTime: '開始時間', scaleX: 'X スケール', scaleY: 'Y スケール' }, help: { title: 'ヘルプ', commonOps: 'よく使う操作', shortcuts: 'ショートカット', modules: '機能モジュール' }, - presets: { particleSweep: '1.パーティクルスイープ', barBlocks: '2.バーブロック', forceTrail: '3.フォースフィールドトレイル', lightningSequence: '4.雷シーケンス', texturePivot: '5.テクスチャピボット', subEmitter: '6.サブエミッター' }, }, ko: { common: { @@ -116,7 +114,6 @@ const overrides = { export: { title: '내보내기 설정', spineVersion: 'Spine 버전', fps: '내보내기 FPS', exportJson: 'Spine JSON 내보내기', exportImages: '이미지 ZIP 내보내기', connectorReady: '커넥터 사용 가능 · Spine 준비됨', connectorOffline: '로컬 Spine 커넥터가 실행 중이 아닙니다', spineNotFound: '커넥터는 실행 중이지만 Spine을 찾을 수 없습니다', notAuthorized: '커넥터는 실행 중이지만 이 사이트는 승인되지 않았습니다', checking: '확인 중', offline: '오프라인', notFound: 'Spine 없음', unauthorized: '승인되지 않음', connectorBusy: 'Spine 프로젝트를 다시 계산하고 생성 중', connectorGenerate: '로컬 Spine으로 Spine {version} 프로젝트 생성' }, spine: { title: 'Spine 속성', resources: 'Spine 리소스', animations: 'Spine 애니메이션', hierarchy: '계층 트리', xPosition: 'X 위치', yPosition: 'Y 위치', rotation: '회전', startTime: '시작 시간', scaleX: 'X 크기', scaleY: 'Y 크기' }, help: { title: '도움말', commonOps: '자주 쓰는 작업', shortcuts: '단축키', modules: '기능 모듈' }, - presets: { particleSweep: '1.파티클 스윕', barBlocks: '2.바 블록', forceTrail: '3.힘장 트레일', lightningSequence: '4.번개 시퀀스', texturePivot: '5.텍스처 피벗', subEmitter: '6.하위 이미터' }, }, fr: { common: { @@ -155,7 +152,6 @@ const overrides = { export: { title: 'Paramètres d’export', spineVersion: 'Version de Spine', fps: 'FPS d’export', exportJson: 'Exporter Spine JSON', exportImages: 'Exporter les images ZIP', connectorReady: 'Connecteur disponible · Spine prêt', connectorOffline: 'Le connecteur Spine local n’est pas démarré', spineNotFound: 'Le connecteur est démarré, mais Spine est introuvable', notAuthorized: 'Le connecteur est démarré, mais ce site n’est pas autorisé', checking: 'Vérification', offline: 'Hors ligne', notFound: 'Spine introuvable', unauthorized: 'Non autorisé', connectorBusy: 'Recalcul et génération du projet Spine', connectorGenerate: 'Générer un projet Spine {version} avec Spine local' }, spine: { title: 'Propriétés Spine', resources: 'Ressources Spine', animations: 'Animations Spine', hierarchy: 'Hiérarchie', xPosition: 'Position X', yPosition: 'Position Y', rotation: 'Rotation', startTime: 'Heure de début', scaleX: 'Échelle X', scaleY: 'Échelle Y' }, help: { title: 'Aide', commonOps: 'Actions courantes', shortcuts: 'Raccourcis', modules: 'Guide des modules' }, - presets: { particleSweep: '1.Balayage de particules', barBlocks: '2.Blocs rectangulaires', forceTrail: '3.Traînée de champ de force', lightningSequence: '4.Séquence d’éclairs', texturePivot: '5.Pivot de texture', subEmitter: '6.Sous-émetteur' }, }, de: { common: { @@ -194,7 +190,6 @@ const overrides = { export: { title: 'Exporteinstellungen', spineVersion: 'Spine-Version', fps: 'Export-FPS', exportJson: 'Spine JSON exportieren', exportImages: 'Bilder-ZIP exportieren', connectorReady: 'Connector verfügbar · Spine bereit', connectorOffline: 'Der lokale Spine-Connector läuft nicht', spineNotFound: 'Der Connector läuft, aber Spine wurde nicht gefunden', notAuthorized: 'Der Connector läuft, aber diese Website ist nicht autorisiert', checking: 'Prüfung', offline: 'Offline', notFound: 'Spine nicht gefunden', unauthorized: 'Nicht autorisiert', connectorBusy: 'Spine-Projekt wird neu berechnet und erstellt', connectorGenerate: 'Spine-{version}-Projekt mit lokalem Spine erstellen' }, spine: { title: 'Spine-Eigenschaften', resources: 'Spine-Ressourcen', animations: 'Spine-Animationen', hierarchy: 'Hierarchie', xPosition: 'X-Position', yPosition: 'Y-Position', rotation: 'Drehung', startTime: 'Startzeit', scaleX: 'X-Skalierung', scaleY: 'Y-Skalierung' }, help: { title: 'Hilfe', commonOps: 'Häufige Aktionen', shortcuts: 'Tastenkürzel', modules: 'Modulhandbuch' }, - presets: { particleSweep: '1.Partikel-Sweep', barBlocks: '2.Balkenblöcke', forceTrail: '3.Kraftfeldschweif', lightningSequence: '4.Blitzsequenz', texturePivot: '5.Textur-Pivot', subEmitter: '6.Sub-Emitter' }, }, 'pt-BR': { common: { @@ -233,7 +228,6 @@ const overrides = { export: { title: 'Configurações de exportação', spineVersion: 'Versão do Spine', fps: 'FPS de exportação', exportJson: 'Exportar Spine JSON', exportImages: 'Exportar imagens ZIP', connectorReady: 'Conector disponível · Spine pronto', connectorOffline: 'O conector local do Spine não está em execução', spineNotFound: 'O conector está ativo, mas o Spine não foi encontrado', notAuthorized: 'O conector está ativo, mas este site não está autorizado', checking: 'Verificando', offline: 'Offline', notFound: 'Spine não encontrado', unauthorized: 'Não autorizado', connectorBusy: 'Recalculando e gerando o projeto Spine', connectorGenerate: 'Gerar projeto Spine {version} com o Spine local' }, spine: { title: 'Propriedades do Spine', resources: 'Recursos Spine', animations: 'Animações Spine', hierarchy: 'Hierarquia', xPosition: 'Posição X', yPosition: 'Posição Y', rotation: 'Rotação', startTime: 'Tempo inicial', scaleX: 'Escala X', scaleY: 'Escala Y' }, help: { title: 'Ajuda', commonOps: 'Ações comuns', shortcuts: 'Atalhos', modules: 'Guia dos módulos' }, - presets: { particleSweep: '1.Varredura de partículas', barBlocks: '2.Blocos retangulares', forceTrail: '3.Rastro de campo de força', lightningSequence: '4.Sequência de raios', texturePivot: '5.Pivô da textura', subEmitter: '6.Subemissor' }, }, es: { common: { @@ -272,7 +266,6 @@ const overrides = { export: { title: 'Ajustes de exportación', spineVersion: 'Versión de Spine', fps: 'FPS de exportación', exportJson: 'Exportar Spine JSON', exportImages: 'Exportar imágenes ZIP', connectorReady: 'Conector disponible · Spine listo', connectorOffline: 'El conector local de Spine no está iniciado', spineNotFound: 'El conector está iniciado, pero no se encontró Spine', notAuthorized: 'El conector está iniciado, pero este sitio no está autorizado', checking: 'Comprobando', offline: 'Sin conexión', notFound: 'Spine no encontrado', unauthorized: 'No autorizado', connectorBusy: 'Recalculando y generando el proyecto de Spine', connectorGenerate: 'Generar proyecto Spine {version} con Spine local' }, spine: { title: 'Propiedades de Spine', resources: 'Recursos de Spine', animations: 'Animaciones de Spine', hierarchy: 'Jerarquía', xPosition: 'Posición X', yPosition: 'Posición Y', rotation: 'Rotación', startTime: 'Tiempo inicial', scaleX: 'Escala X', scaleY: 'Escala Y' }, help: { title: 'Ayuda', commonOps: 'Acciones comunes', shortcuts: 'Atajos', modules: 'Guía de módulos' }, - presets: { particleSweep: '1.Barrido de partículas', barBlocks: '2.Bloques rectangulares', forceTrail: '3.Estela de campo de fuerza', lightningSequence: '4.Secuencia de rayos', texturePivot: '5.Pivote de textura', subEmitter: '6.Subemisor' }, }, } diff --git a/scripts/verify-i18n.mjs b/scripts/verify-i18n.mjs index b69894a..cd9b0a5 100644 --- a/scripts/verify-i18n.mjs +++ b/scripts/verify-i18n.mjs @@ -1,4 +1,4 @@ -import { readFile } from 'node:fs/promises' +import { readFile, stat } from 'node:fs/promises' import { build } from 'esbuild' const localeCodes = ['zh-CN', 'zh-TW', 'en', 'ja', 'ko', 'fr', 'de', 'pt-BR', 'es'] @@ -7,6 +7,7 @@ const localeMessages = Object.fromEntries(await Promise.all(localeCodes.map(asyn JSON.parse(await readFile(`src/i18n/locales/${code}.json`, 'utf8')), ]))) const zh = localeMessages['zh-CN'] +const presetIndex = JSON.parse(await readFile('public/Preset/index.json', 'utf8')) function flattenKeys(value, prefix = '') { const keys = [] @@ -59,6 +60,22 @@ for (const code of localeCodes.slice(1)) { } } +for (const preset of presetIndex) { + const file = typeof preset === 'string' ? preset : preset?.file + if (typeof file !== 'string' || !file.trim()) throw new Error('Preset index entry is missing a file') + await stat(`public/Preset/${file}`) + if (typeof preset === 'string' || preset.name == null) continue + if (typeof preset.name === 'string') continue + if (typeof preset.name !== 'object' || Array.isArray(preset.name)) { + throw new Error(`Preset ${file} has an invalid name`) + } + for (const [code, name] of Object.entries(preset.name)) { + if (!localeCodes.includes(code) || typeof name !== 'string' || !name.trim()) { + throw new Error(`Preset ${file} has an invalid ${code} display name`) + } + } +} + const bundled = await build({ entryPoints: ['src/i18n/index.ts'], bundle: true, @@ -71,6 +88,38 @@ const i18nModule = await import( `data:text/javascript;base64,${Buffer.from(bundled.outputFiles[0].contents).toString('base64')}` ) +const presetNamesBundle = await build({ + entryPoints: ['src/views/particle-panel/presetNames.ts'], + bundle: true, + format: 'esm', + platform: 'node', + write: false, + logLevel: 'silent', +}) +const presetNames = await import( + `data:text/javascript;base64,${Buffer.from(presetNamesBundle.outputFiles[0].contents).toString('base64')}` +) +const parsedPresets = presetNames.parsePresetIndex([ + { file: '8.test.json' }, + '9.raw.json', + { file: 'old.json', name: 'Old Preset' }, + { file: 'partial.json', name: { ja: '日本語プリセット' } }, +]) +if (parsedPresets.length !== 4) throw new Error('Preset compatibility parser rejected legacy entries') +const presetCases = [ + [parsedPresets[0], 'zh-CN', '8.test'], + [parsedPresets[1], 'en', '9.raw'], + [parsedPresets[2], 'fr', 'Old Preset'], + [parsedPresets[3], 'ja', '日本語プリセット'], + [parsedPresets[3], 'fr', 'partial'], +] +for (const [preset, locale, expected] of presetCases) { + const actual = presetNames.resolvePresetDisplayName(preset, locale) + if (actual !== expected) { + throw new Error(`Preset fallback failed: expected ${expected}, got ${actual}`) + } +} + const cases = [ [null, ['zh-CN'], 'zh-CN'], [null, ['zh-Hant-TW'], 'zh-TW'], @@ -95,4 +144,4 @@ for (const [saved, browserLanguages, expected] of cases) { } } -console.log(`i18n 校验通过:${localeCodes.length} 种语言、${zhKeys.length} 个消息键,键与占位符一致,自动语言与缓存优先级正确`) +console.log(`i18n 校验通过:${localeCodes.length} 种语言、${zhKeys.length} 个消息键,预设索引兼容,自动语言与缓存优先级正确`) diff --git a/src/i18n/locales/de.json b/src/i18n/locales/de.json index 8874473..d958ac5 100644 --- a/src/i18n/locales/de.json +++ b/src/i18n/locales/de.json @@ -100,14 +100,6 @@ "presetListError": "Voreinstellungsliste kann nicht gelesen werden", "presetReadError": "Voreinstellung konnte nicht gelesen werden: {file}" }, - "presets": { - "particleSweep": "1.Partikel-Sweep", - "barBlocks": "2.Balkenblöcke", - "forceTrail": "3.Kraftfeldschweif", - "lightningSequence": "4.Blitzsequenz", - "texturePivot": "5.Textur-Pivot", - "subEmitter": "6.Sub-Emitter" - }, "curve": { "bezierHint": "Ziehen Sie den quadratischen Griff, um den Bogen anzupassen. · Doppelklicken Sie auf eine leere Stelle, um einen neuen zu erstellen. · Doppelklicken Sie auf einen Knoten, um ihn zu löschen", "linearHint": "Doppelklicken Sie auf eine leere Stelle, um eine neue zu erstellen. Doppelklicken Sie auf einen Knoten, um ihn zu löschen. Ziehen Sie einen Knoten, um ihn anzupassen.", diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 536520f..43e55da 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -112,14 +112,6 @@ "presetListError": "Unable to read preset list", "presetReadError": "Unable to read preset: {file}" }, - "presets": { - "particleSweep": "1. Particle Sweep", - "barBlocks": "2. Bar Blocks", - "forceTrail": "3. Force Field Trail", - "lightningSequence": "4. Lightning Sequence", - "texturePivot": "5. Texture Pivot", - "subEmitter": "6. Sub-emitter" - }, "curve": { "bezierHint": "Drag square handles · Double-click empty space to add · Double-click a node to delete", "linearHint": "Double-click empty space to add · Double-click a node to delete · Drag nodes to adjust", diff --git a/src/i18n/locales/es.json b/src/i18n/locales/es.json index b0cf286..4ec8baf 100644 --- a/src/i18n/locales/es.json +++ b/src/i18n/locales/es.json @@ -100,14 +100,6 @@ "presetListError": "No se puede leer la lista preestablecida", "presetReadError": "No se puede leer el ajuste preestablecido: {file}" }, - "presets": { - "particleSweep": "1.Barrido de partículas", - "barBlocks": "2.Bloques rectangulares", - "forceTrail": "3.Estela de campo de fuerza", - "lightningSequence": "4.Secuencia de rayos", - "texturePivot": "5.Pivote de textura", - "subEmitter": "6.Subemisor" - }, "curve": { "bezierHint": "Arrastre el controlador cuadrado para ajustar el arco · Haga doble clic en un espacio en blanco para crear uno nuevo · Haga doble clic en un nodo para eliminarlo", "linearHint": "Haga doble clic en un espacio en blanco para crear uno nuevo. Haga doble clic en un nodo para eliminarlo. Arrastra un nodo para ajustarlo.", diff --git a/src/i18n/locales/fr.json b/src/i18n/locales/fr.json index f2a950b..a9854a4 100644 --- a/src/i18n/locales/fr.json +++ b/src/i18n/locales/fr.json @@ -100,14 +100,6 @@ "presetListError": "Impossible de lire la liste des préréglages", "presetReadError": "Impossible de lire le préréglage : {file}" }, - "presets": { - "particleSweep": "1.Balayage de particules", - "barBlocks": "2.Blocs rectangulaires", - "forceTrail": "3.Traînée de champ de force", - "lightningSequence": "4.Séquence d’éclairs", - "texturePivot": "5.Pivot de texture", - "subEmitter": "6.Sous-émetteur" - }, "curve": { "bezierHint": "Faites glisser la poignée carrée pour ajuster l'arc · Double-cliquez sur un espace vide pour en créer un nouveau · Double-cliquez sur un nœud pour le supprimer", "linearHint": "Double-cliquez sur un espace vide pour en créer un nouveau. Double-cliquez sur un nœud pour le supprimer. Faites glisser un nœud pour l'ajuster.", diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 413e995..955ec08 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -100,14 +100,6 @@ "presetListError": "プリセットリストを読み取れません", "presetReadError": "プリセットを読み取れません: {file}" }, - "presets": { - "particleSweep": "1.パーティクルスイープ", - "barBlocks": "2.バーブロック", - "forceTrail": "3.フォースフィールドトレイル", - "lightningSequence": "4.雷シーケンス", - "texturePivot": "5.テクスチャピボット", - "subEmitter": "6.サブエミッター" - }, "curve": { "bezierHint": "四角いハンドルをドラッグして円弧を調整します。 · 空白スペースをダブルクリックして新しいスペースを作成します。 · ノードをダブルクリックして削除します。", "linearHint": "空白スペースをダブルクリックして、新しいスペースを作成します。ノードをダブルクリックして削除します。ノードをドラッグして調整します。", diff --git a/src/i18n/locales/ko.json b/src/i18n/locales/ko.json index 422ce90..dbd5789 100644 --- a/src/i18n/locales/ko.json +++ b/src/i18n/locales/ko.json @@ -100,14 +100,6 @@ "presetListError": "사전 설정 목록을 읽을 수 없습니다.", "presetReadError": "사전 설정을 읽을 수 없습니다: {file}" }, - "presets": { - "particleSweep": "1.파티클 스윕", - "barBlocks": "2.바 블록", - "forceTrail": "3.힘장 트레일", - "lightningSequence": "4.번개 시퀀스", - "texturePivot": "5.텍스처 피벗", - "subEmitter": "6.하위 이미터" - }, "curve": { "bezierHint": "원호를 조정하려면 사각형 핸들을 드래그하세요. · 새 공간을 만들려면 빈 공간을 두 번 클릭하세요. · 삭제하려면 노드를 두 번 클릭하세요.", "linearHint": "빈 공간을 더블클릭하면 새로운 공간이 생성됩니다. 삭제하려면 노드를 두 번 클릭하세요. 노드를 드래그하여 조정하세요.", diff --git a/src/i18n/locales/pt-BR.json b/src/i18n/locales/pt-BR.json index 1328eb1..7bb58fc 100644 --- a/src/i18n/locales/pt-BR.json +++ b/src/i18n/locales/pt-BR.json @@ -100,14 +100,6 @@ "presetListError": "Não é possível ler a lista predefinida", "presetReadError": "Não é possível ler a predefinição: {file}" }, - "presets": { - "particleSweep": "1.Varredura de partículas", - "barBlocks": "2.Blocos retangulares", - "forceTrail": "3.Rastro de campo de força", - "lightningSequence": "4.Sequência de raios", - "texturePivot": "5.Pivô da textura", - "subEmitter": "6.Subemissor" - }, "curve": { "bezierHint": "Arraste a alça quadrada para ajustar o arco · Clique duas vezes em um espaço em branco para criar um novo · Clique duas vezes em um nó para excluí-lo", "linearHint": "Clique duas vezes em um espaço em branco para criar um novo. Clique duas vezes em um nó para excluí-lo. Arraste um nó para ajustá-lo.", diff --git a/src/i18n/locales/zh-CN.json b/src/i18n/locales/zh-CN.json index 0ee0273..b0a3c40 100644 --- a/src/i18n/locales/zh-CN.json +++ b/src/i18n/locales/zh-CN.json @@ -112,14 +112,6 @@ "presetListError": "无法读取预设列表", "presetReadError": "无法读取预设:{file}" }, - "presets": { - "particleSweep": "1.粒子扫过", - "barBlocks": "2.长条方块", - "forceTrail": "3.力场拖尾", - "lightningSequence": "4.雷电序列帧", - "texturePivot": "5.贴图轴点", - "subEmitter": "6.子发射器" - }, "curve": { "bezierHint": "拖动方形手柄调整弧度 · 双击空白新建 · 双击节点删除", "linearHint": "双击空白新建 · 双击节点删除 · 拖动节点调整", diff --git a/src/i18n/locales/zh-TW.json b/src/i18n/locales/zh-TW.json index ca645eb..30da705 100644 --- a/src/i18n/locales/zh-TW.json +++ b/src/i18n/locales/zh-TW.json @@ -100,14 +100,6 @@ "presetListError": "無法讀取預設列表", "presetReadError": "無法讀取預設:{file}" }, - "presets": { - "particleSweep": "1.粒子掃過", - "barBlocks": "2.長條方塊", - "forceTrail": "3.力場拖尾", - "lightningSequence": "4.雷電序列幀", - "texturePivot": "5.貼圖軸點", - "subEmitter": "6.子發射器" - }, "curve": { "bezierHint": "拖曳方形手把調整弧度 · 雙擊空白新建 · 雙擊節點刪除", "linearHint": "雙擊空白新建 · 雙擊節點刪除 · 拖曳節點調整", diff --git a/src/views/particle-panel/ProjectConfigSection.vue b/src/views/particle-panel/ProjectConfigSection.vue index 1d69a4d..258446b 100644 --- a/src/views/particle-panel/ProjectConfigSection.vue +++ b/src/views/particle-panel/ProjectConfigSection.vue @@ -27,19 +27,11 @@ import ColorGradientEditor from '../ColorGradientEditor.vue' import ImageResourceCard from '../ImageResourceCard.vue' import SpineObjectPanel from '../../spine/SpineObjectPanel.vue' import { useParticlePanelContext } from './particlePanelContext' +import { resolvePresetDisplayName, type PresetOption } from './presetNames' const { configFileInput, selectedPreset, presetOptions, presetLoading, configMessage, configError, saveConfig, onConfigFileChange, refreshPresets, loadSelectedPreset, collapsed, toggle, select } = useParticlePanelContext() -const { t } = useI18n() -const presetNameKeys: Record = { - '1.粒子扫过.json': 'presets.particleSweep', - '2.长条方块.json': 'presets.barBlocks', - '3.力场拖尾.json': 'presets.forceTrail', - '4.雷电序列帧.json': 'presets.lightningSequence', - '5.贴图轴点.json': 'presets.texturePivot', - '6.子发射器.json': 'presets.subEmitter', -} -function presetDisplayName(preset: { name: string; file: string }) { - const key = presetNameKeys[preset.file] - return key ? t(key) : preset.name +const { locale } = useI18n() +function presetDisplayName(preset: PresetOption) { + return resolvePresetDisplayName(preset, locale.value) } diff --git a/src/views/particle-panel/presetNames.ts b/src/views/particle-panel/presetNames.ts new file mode 100644 index 0000000..08f19a1 --- /dev/null +++ b/src/views/particle-panel/presetNames.ts @@ -0,0 +1,40 @@ +export type PresetDisplayName = string | Record + +export interface PresetOption { + name?: PresetDisplayName + file: string +} + +function normalizeName(value: unknown): PresetDisplayName | undefined { + if (typeof value === 'string') return value.trim() || undefined + if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined + const entries = Object.entries(value) + .filter((entry): entry is [string, string] => typeof entry[1] === 'string' && !!entry[1].trim()) + return entries.length ? Object.fromEntries(entries) : undefined +} + +/** 兼容自动生成的仅含 file 条目、旧字符串 name 和多语言 name。 */ +export function parsePresetIndex(value: unknown): PresetOption[] { + if (!Array.isArray(value)) return [] + const result: PresetOption[] = [] + for (const item of value) { + if (typeof item === 'string' && item.trim()) { + result.push({ file: item }) + continue + } + if (!item || typeof item !== 'object' || Array.isArray(item)) continue + const file = typeof item.file === 'string' ? item.file.trim() : '' + if (!file) continue + result.push({ file, name: normalizeName(item.name) }) + } + return result +} + +export function resolvePresetDisplayName(preset: PresetOption, locale: string) { + if (typeof preset.name === 'string') return preset.name + if (preset.name && typeof preset.name === 'object') { + return preset.name[locale] || preset.name.en || preset.name['zh-CN'] + || preset.file.replace(/^.*[\\/]/, '').replace(/\.json$/i, '') + } + return preset.file.replace(/^.*[\\/]/, '').replace(/\.json$/i, '') +} diff --git a/src/views/particle-panel/useProjectPresets.ts b/src/views/particle-panel/useProjectPresets.ts index 5b01986..4990cf4 100644 --- a/src/views/particle-panel/useProjectPresets.ts +++ b/src/views/particle-panel/useProjectPresets.ts @@ -25,12 +25,12 @@ import { } from '../../export/spineConnectorClient' import { automaticLoopTransitionFrames } from '../../core/loopSegmentTiming' import { translate } from '../../i18n' - +import { parsePresetIndex, type PresetOption } from './presetNames' export function useProjectPresets(store: ReturnType) { const configFileInput = ref(null) const selectedPreset = ref('') -const presetOptions = ref>([]) +const presetOptions = ref([]) const presetLoading = ref(false) const configMessage = ref('') const configError = ref(false) @@ -62,9 +62,7 @@ async function refreshPresets() { const response = await fetch(`/Preset/index.json?t=${Date.now()}`, { cache: 'no-store' }) if (!response.ok) throw new Error(translate('config.presetListError')) const presets = await response.json() - presetOptions.value = Array.isArray(presets) - ? presets.filter((item): item is { name: string; file: string } => !!item && typeof item.name === 'string' && typeof item.file === 'string') - : [] + presetOptions.value = parsePresetIndex(presets) } catch { presetOptions.value = [] } diff --git a/vite.config.ts b/vite.config.ts index 10a1b0b..dac0f6b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,13 +6,20 @@ import { resolve } from 'node:path' function presetManifestPlugin(): Plugin { let presetDirectory = '' + const locales = ['zh-CN', 'zh-TW', 'en', 'ja', 'ko', 'fr', 'de', 'pt-BR', 'es'] const updateManifest = () => { if (!presetDirectory) return mkdirSync(presetDirectory, { recursive: true }) const presets = readdirSync(presetDirectory) .filter((file) => file.toLowerCase().endsWith('.json') && file !== 'index.json') .sort((a, b) => a.localeCompare(b, 'zh-CN')) - .map((file) => ({ name: file.replace(/\.json$/i, ''), file })) + .map((file) => { + const name = file.replace(/\.json$/i, '') + return { + file, + name: Object.fromEntries(locales.map((locale) => [locale, name])), + } + }) writeFileSync(resolve(presetDirectory, 'index.json'), `${JSON.stringify(presets, null, 2)}\n`) } return {