@versa_ai/vmml-editor 1.0.12 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +8 -8
- package/dist/index.js +63 -7
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +63 -7
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/assets/css/index.scss +67 -7
- package/src/index.tsx +4 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/assets/css/index.scss","../src/utils/const.ts","../src/components/SeekBar.tsx","../src/components/Controls.tsx","../src/utils/HistoryClass.ts","../src/utils/VmmlConverter.ts","../src/utils/usePeekControl.ts","../src/components/EditorCanvas.tsx","../src/assets/css/loading.scss","../src/components/Loading.tsx","../src/assets/css/maxTextLayer.scss","../src/components/MaxTextLayer.tsx","../src/assets/css/editorTextMenu.scss","../src/utils/keyBoardUtils.ts","../src/assets/css/colorSelector.scss","../src/components/ColorSelector.tsx","../src/components/TextMenu.tsx","../src/components/VideoMenu.tsx","../src/index.tsx"],"names":["interpolate","useRef","useState","useMemo","useCallback","useEffect","jsx","jsxs","formatTime","getFontSize","uuidv4","rgbaToArgb","hexToArgb","fabric","forwardRef","fObj","getFrames","argbToRgba","urlToBlob","toSvg","historyClass","useImperativeHandle","css","Fragment","isIOS","textInfo","bgColor","textColor","textBasicInfo","convertVmmlTextScaleByForbidden","frame","takeScreenshot","height","VmmlPlayer"],"mappings":";;;;;;;;;;;;;;AAAA,IAAM,GAAA,GAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2lTAAA,CAAA;AAmPZ,QAAA,CAAS,IAAA,CACJ,WAAA,CAAY,QAAA,CAAS,aAAA,CAAc,OAAO,CAAC,CAAA,CAC3C,WAAA,CAAY,QAAA,CAAS,cAAA,CAAe,GAAG,CAAC,CAAA;;;ACpPtC,IAAM,SAAA,GAAY,mGAAA;AAElB,IAAM,QAAA,GAAW,mGAAA;AACjB,IAAM,WAAA,GAAc,mGAAA;AACpB,IAAM,QAAA,GAAW,mGAAA;AACjB,IAAM,SAAA,GAAY,mGAAA;AAClB,IAAM,SAAA,GAAa,mGAAA;AACnB,IAAM,SAAA,GAAa,mGAAA;AACnB,IAAM,QAAA,GAAW,mGAAA;ACLxB,IAAM,aAAA,GAAgB,CACrB,OAAA,EACA,gBAAA,EACA,KAAA,KACI;AACJ,EAAA,MAAM,GAAA,GAAM,OAAA;AACZ,EAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AAAA,IAClBA,oBAAA,CAAY,GAAA,EAAK,CAAC,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA,EAAG,gBAAA,GAAmB,CAAC,CAAA,EAAG;AAAA,MACvD,eAAA,EAAiB,OAAA;AAAA,MACjB,gBAAA,EAAkB;AAAA,KAClB;AAAA,GACF;AACA,EAAA,OAAO,KAAA;AACR,CAAA;AACA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAM,OAAA,GAAU,CAAC,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAO,gBAAA,EAAkB,QAAA,EAAU,YAAA,EAAc,QAAA,EAAS,KAAY;AACzG,EAAA,MAAM,YAAA,GAAeC,aAAuB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,cAAA,CAAc;AAAA,IAC5C,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,MAAM,SAAA,GAAYC,cAAQ,MAAM;AAC9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAA,EAAI,KAAA,IAAS,gBAAA,GAAmB,KAAM,GAAG,CAAA,CAAA;AAAA,KAClD;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,gBAAgB,CAAC,CAAA;AAE5B,EAAA,MAAM,UAAA,GAAaA,cAAQ,MAAM;AAC/B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,CAAA,KAAA,EAAS,KAAA,IAAS,gBAAA,GAAmB,KAAM,GAAG,CAAA,UAAA;AAAA,KACtD;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,gBAAgB,CAAC,CAAA;AAE5B,EAAA,MAAM,aAAA,GAAgBC,iBAAA,CAAY,CAAC,CAAA,KAA0B;AArC/D,IAAA,IAAA,EAAA;AAsCI,IAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AAClB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAA,CAAI,EAAA,GAAA,YAAA,CAAa,YAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,qBAAA,EAAA;AAC9C,IAAA,MAAM,MAAA,GAAS,aAAA;AAAA,MACb,EAAE,OAAA,GAAU,IAAA;AAAA,MACZ,gBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,YAAA,CAAa,CAAC,CAAA;AACd,IAAA,WAAA,CAAY;AAAA,MACV,QAAA,EAAU,IAAA;AAAA,MACV,UAAA,EAAY,OAAO,SAAA;AAAU,KAC9B,CAAA;AACD,IAAA,MAAA,CAAO,KAAA,EAAM;AACb,IAAA,MAAA,CAAO,OAAO,MAAM,CAAA;AACpB,IAAA,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAY;AAAA,EACjD,CAAA,EAAG,CAAC,MAAA,EAAQ,gBAAgB,CAAC,CAAA;AAE7B,EAAA,MAAM,aAAA,GAAgBA,iBAAA,CAAY,CAAC,CAAA,KAAoB;AAzDzD,IAAA,IAAA,EAAA;AA0DI,IAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAA,CAAI,EAAA,GAAA,YAAA,CAAa,YAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,qBAAA,EAAA;AAC9C,IAAA,MAAM,MAAA,GAAS,aAAA;AAAA,MACb,EAAE,OAAA,GAAU,IAAA;AAAA,MACZ,gBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,YAAA,CAAa,CAAC,CAAA;AACd,IAAA,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,EACtB,GAAG,CAAC,MAAA,EAAQ,QAAA,CAAS,QAAA,EAAU,gBAAgB,CAAC,CAAA;AAEhD,EAAA,MAAM,WAAA,GAAc,CAAC,CAAA,KAAW;AAC9B,IAAA,WAAA,CAAY;AAAA,MACb,QAAA,EAAU;AAAA,KACV,CAAA;AACC,IAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACtB,MAAA;AAAA,IACF;AACA,IAAA,YAAA,CAAa,CAAC,CAAA;AACd,IAAA,QAAA,EAAS;AACT,IAAA,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAU;AAAA,EAC/C,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAc;AACjC,IAAA,MAAA,CAAO,KAAA,EAAM;AACb,IAAA,MAAA,CAAO,MAAA,CAAO,KAAK,OAAO,CAAA;AAC1B,IAAA,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAY;AAC/C,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,YAAA,CAAa,CAAC,CAAA;AACd,MAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AACrB,MAAA,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,SAAA,EAAU;AAAA,IAC/C,GAAG,GAAG,CAAA;AAAA,EACR,CAAA;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAS,QAAA,EAAU;AACzB,MAAA;AAAA,IACD;AACE,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA;AAC1C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,gBAAA,CAAiB,eAAe,aAAa,CAAA;AAClD,MAAA,IAAA,CAAK,gBAAA,CAAiB,aAAa,WAAW,CAAA;AAC9C,MAAA,OAAO,MAAM;AACX,QAAA,IAAA,CAAK,mBAAA,CAAoB,eAAe,aAAa,CAAA;AACrD,QAAA,IAAA,CAAK,mBAAA,CAAoB,aAAa,WAAW,CAAA;AAAA,MACnD,CAAA;AAAA,IACF;AAAA,EACH,GAAG,CAAC,QAAA,CAAS,QAAA,EAAU,aAAA,EAAe,WAAW,CAAC,CAAA;AAEjD,EAAA,uBACIC,cAAA,CAAC,SAAI,GAAA,EAAK,YAAA,EAAc,WAAU,mBAAA,EAChC,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAe,aAAA,EAA8B,CAAA;AAAA,oBAC5DA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAe,OAAO,SAAA,EAAW,CAAA;AAAA,oBAC9CA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACd,mBAAS,GAAA,CAAI,CAAC,IAAA,EAAW,KAAA,oCACvB,KAAA,EAAA,EAAgB,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA,EAAG,KAAA,EAAO,EAAE,IAAA,EAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,OAAA,GAAU,gBAAA,GAAmB,GAAG,CAAA,QAAA,CAAA,EAAW,EAAG,SAAA,EAAU,cAAA,EAAe,KAAK,QAAA,EAAU,GAAA,EAAI,EAAA,EAAA,EAA/J,KAAkK,CAC7K,CAAA,EACH,CAAA;AAAA,mCACC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,KAAA,EAAO,YAAY,aAAA,EAA8B;AAAA,GAAA,EAClF,CAAA,EACJ,CAAA;AAEJ,CAAA;AAEA,IAAO,eAAA,GAAQ,OAAA;ACzHf,IAAM,QAAA,GAAW,CAAC,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,GAAA,EAAK,gBAAA,EAAkB,QAAA,EAAU,SAAA,EAAW,YAAA,EAAc,eAAA,EAAiB,UAAS,KAAW;AACzI,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAW;AAChC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,QAAA,EAAS;AAAA,IACX,CAAA,MAAO;AACL,MAAA,eAAA,EAAgB;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,SAAI,SAAA,EAAU,yCAAA,EAA0C,SAAS,aAAA,EAC9D,QAAA,EAAA,SAAA,mBAAYA,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,WAAW,GAAA,EAAI,cAAA,EAAK,oBAAKA,cAAAA,CAAC,SAAI,GAAA,EAAK,QAAA,EAAU,GAAA,EAAI,cAAA,EAAK,CAAA,EAChF,CAAA;AAAA,oBACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCACZ,QAAA,EAAAE,oBAAA,CAAW,KAAA,GAAQ,GAAG,CAAA,EACzB,CAAA;AAAA,oBACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCACb,QAAA,kBAAAA,cAAAA,CAAC,eAAA,EAAA,EAAQ,MAAA,EAAgB,SAAkB,KAAA,EAAc,gBAAA,EAAoC,QAAA,EAAoB,YAAA,EAA4B,UAAoB,CAAA,EACnK,CAAA;AAAA,oBACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCACZ,QAAA,EAAAE,oBAAA,CAAW,gBAAA,GAAmB,GAAG,CAAA,EACpC;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,gBAAA,GAAQ,QAAA;;;AC5Bf,IAAqB,eAArB,MAAkC;AAAA,EACjC,WAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,iBAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAY,MAAA,EAAwB;AACnC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,iBAAiB,EAAC;AACvB,IAAA,IAAA,CAAK,iBAAiB,EAAC;AACvB,IAAA,IAAA,CAAK,iBAAA,GAAoB,KAAA;AACzB,IAAA,IAAA,CAAK,WAAA,EAAY;AAAA,EAClB;AAAA,EAEA,WAAA,GAAc;AACb,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,gBAAgB,CAAA;AAAA,EACpD;AAAA,EACA,YAAA,GAAe;AACd,IAAA,MAAM,IAAA,GAAO;AAAA,MACZ,IAAA;AAAA,MACA,eAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,eAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD;AACA,IAAA,MAAM,UAAU,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,OAAO,IAAI,CAAA;AACtD,IAAA,OAAO,OAAA;AAAA,EACR;AAAA,EAEA,cAAA,GAAiB;AAChB,IAAA,OAAO;AAAA,MACN,gBAAgB,CAAC,CAAA,KAAW,IAAA,CAAK,kBAAA,CAAmB,GAAG,cAAc,CAAA;AAAA,MACrE,kBAAkB,CAAC,CAAA,KAAW,IAAA,CAAK,kBAAA,CAAmB,GAAG,gBAAgB,CAAA;AAAA,MACzE,mBAAmB,CAAC,CAAA,KAAW,IAAA,CAAK,kBAAA,CAAmB,GAAG,iBAAiB,CAAA;AAAA,MAC3E,kBAAkB,CAAC,CAAA,KAAW,IAAA,CAAK,kBAAA,CAAmB,GAAG,gBAAgB,CAAA;AAAA,MACzE,qBAAqB,CAAC,CAAA,KAAW,IAAA,CAAK,kBAAA,CAAmB,GAAG,mBAAmB;AAAA,KAChF;AAAA,EACD;AAAA,EACA,kBAAA,CAAmB,GAAQ,IAAA,EAAc;AACxC,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC5B,IAAA,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,IAAK,IAAA,CAAK,eAAe,IAAA,CAAK,EAAE,MAAM,CAAA;AACnE,IAAA,IAAI,CAAC,CAAA,IAAM,CAAA,CAAE,UAAU,CAAC,CAAA,CAAE,OAAO,iBAAA,EAAoB;AACpD,MAAA,MAAM,IAAA,GAAO,KAAK,YAAA,EAAa;AAC/B,MAAA,IAAA,CAAK,WAAA,CAAY,KAAK,IAAI,CAAA;AAC1B,MAAA,IAAI,IAAA,CAAK,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AAChC,QAAkB,IAAA,CAAK,WAAA,CAAY,KAAA;AAAM,MAE1C;AACA,MAAA,IAAA,CAAK,cAAc,EAAC;AAEpB,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,eAAA,EAAiB,EAAE,MAAY,CAAA;AAAA,IACjD;AAAA,EACD;AAAA,EAEA,KAAK,QAAA,EAAgB;AAIpB,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AACzB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAA,EAAI;AACrC,IAAA,IAAI,OAAA,EAAS;AAEZ,MAAA,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,cAAA,EAAgB,QAAQ,CAAA;AAAA,IACpD,CAAA,MAAO;AACN,MAAA,IAAA,CAAK,iBAAA,GAAoB,KAAA;AAAA,IAC1B;AAAA,EACD;AAAA,EACA,KAAK,QAAA,EAAgB;AAIpB,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAA;AACzB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,CAAY,GAAA,EAAI;AACrC,IAAA,IAAI,OAAA,EAAS;AAEZ,MAAA,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,YAAA,EAAc,CAAA;AACzC,MAAA,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,cAAA,EAAgB,QAAQ,CAAA;AAAA,IACpD,CAAA,MAAO;AACN,MAAA,IAAA,CAAK,iBAAA,GAAoB,KAAA;AAAA,IAC1B;AAAA,EACD;AAAA,EACA,YAAA,CAAa,OAAA,EAAuC,KAAA,EAAe,QAAA,EAAsB;AACxF,IAAA,IAAA,CAAK,MAAA,IACJ,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,SAAS,MAAM;AACvC,MAAA,IAAA,CAAK,OAAO,SAAA,EAAU;AACtB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,KAAK,CAAA;AACtB,MAAA,IAAA,CAAK,iBAAA,GAAoB,KAAA;AAEzB,MAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,UAAA,EAAY,QAAA,EAAS;AAAA,IAC1D,CAAC,CAAA;AAAA,EACH;AAAA,EACA,eAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,cAAA,EAAgB,CAAA;AAAA,EACtC;AAAA,EACA,YAAA,GAAe;AACd,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,eAAe,CAAA;AAAA,EACjC;AAAA,EACA,OAAA,GAAU;AACT,IAAA,OAAO,IAAA,CAAK,YAAY,MAAA,GAAS,CAAA;AAAA,EAClC;AAAA,EAEA,OAAA,GAAU;AACT,IAAA,OAAO,IAAA,CAAK,YAAY,MAAA,GAAS,CAAA;AAAA,EAClC;AAAA;AAAA,EAEA,cAAc,MAAA,EAAuB;AACpC,IAAA,IAAA,CAAK,cAAA,CAAe,KAAK,MAAM,CAAA;AAAA,EAChC;AAAA,EACA,aAAA,GAAgB;AACf,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACb;AACD,CAAA;AC/HA,IAAM,gBAAN,MAAoB;AAAA,EACX,IAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOR,WAAA,CAAY,EAAE,IAAA,EAAM,UAAA,EAAW,EAAmC;AACjE,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,KAAK,QAAA,CAAS,SAAA;AACxC,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,KAAK,QAAA,CAAS,MAAA;AAC5B,IAAA,IAAA,CAAK,QAAA,GAAWC,qBAAA,CAAY,KAAA,EAAO,MAAM,CAAA;AAGzC,IAAA,IAAA,CAAK,WAAA,GAAc,SAAS,UAAA,CAAW,MAAA;AACvC,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,CAAW,KAAA;AAAA,EACtC;AAAA;AAAA,EAGQ,YAAY,IAAA,EAAmB;AACtC,IAAA,OAAA,CAAQ,GAAA,CAAI,oBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM;AAAA,MACL,QAAA,EAAU,EAAE,IAAA,EAAK;AAAA,MACjB,WAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACD,GAAI,IAAA;AACJ,IAAA,IAAI,OAAA,EAAS,SAAS,QAAA,EAAU,QAAA;AAEhC,IAAA,IAAI,SAAS,cAAA,EAAM;AAElB,MAAA,OAAA,GAAW,EAAA,GAAK,MAAA,GAAS,IAAA,CAAK,UAAA,GAAc,IAAA,CAAK,QAAA;AACjD,MAAA,OAAA,GAAW,EAAA,GAAK,MAAA,GAAS,IAAA,CAAK,WAAA,GAAe,IAAA,CAAK,QAAA;AAClD,MAAA,QAAA,GAAW,WAAA,CAAY,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,KAAA;AAC3C,MAAA,QAAA,GAAW,WAAA,CAAY,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,MAAA;AAAA,IAE5C,CAAA,MAAA,IAAW,SAAS,oBAAA,EAAO;AAC1B,MAAA,OAAA,GAAW,KAAA,GAAQ,MAAA,GAAS,IAAA,CAAK,UAAA,GAAc,KAAA;AAC/C,MAAA,OAAA,GAAW,MAAA,GAAS,MAAA,GAAS,IAAA,CAAK,WAAA,GAAe,MAAA;AACjD,MAAA,QAAA,GAAW,WAAA,CAAY,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,KAAA;AAC3C,MAAA,QAAA,GAAW,WAAA,CAAY,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,MAAA;AAAA,IAC5C;AAEA,IAAA,OAAO;AAAA,MACN,MAAA,EAAQ,OAAA;AAAA,MACR,MAAA,EAAQ,OAAA;AAAA,MACR,OAAA,EAAS,QAAA;AAAA,MACT,OAAA,EAAS,QAAA;AAAA,MACT,SAAA,EAAW;AAAA,KACZ;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,YAAY,IAAA,EAAiB;AACnC,IAAA,OAAA,CAAQ,GAAA,CAAI,oBAAoB,IAAI,CAAA;AACpC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAItC,IAAA,MAAM,EAAE,UAAU,EAAE,EAAA,EAAI,SAAS,IAAA,EAAM,SAAA,EAAW,OAAA,EAAO,EAAC,GAAI,IAAA;AAC9D,IAAA,MAAM,EAAC,QAAA,EAAS,EAAC,QAAA,EAAQ,KAAK,IAAA,CAAK,IAAA;AACnC,IAAA,MAAM,QAAQ,EAAC;AACf,IAAA,MAAM,WAAA,GAAc,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAe,KAAA,CAAM,eAAe,cAAI,CAAA;AAE9E,IAAA,MAAM,SAAA,GAAY;AAAA,MACjB,QAAA;AAAA,MACA,cAAA,EAAgB,QAAA;AAAA,MAChB,KAAA,EAAO,CAAA;AAAA,MACP,GAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,EAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,IAAA;AAAA,MACA,QAAA,EAAU;AAAA,QACT,WAAA,EAAa,CAAA;AAAA,QACb,SAAA,EAAW,CAAA;AAAA,QACX,QAAA,EAAU,EAAA;AAAA,QACV,IAAA,EAAM,KAAA;AAAA,QACN,SAAA,EAAW;AAAA,UACV,MAAA,EAAQ,GAAA;AAAA,UACR,KAAA,EAAO;AAAA,SACR;AAAA,QACA,QAAA;AAAA,QACA,eAAA,EAAiB,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,QACpC,WAAA,EAAa,IAAA;AAAA,QACb,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,SAAS;AAAA;AAAA;AAEjC,KACD;AACA,IAAA,IAAI,CAAC,WAAA,EAAa;AACjB,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,MAAA,IAAA,CAAK,OAAO,IAAA,CAAK;AAAA,QAChB,KAAA;AAAA,QACA,WAAA,EAAa,YAAA;AAAA,QACb,IAAIC,OAAA,EAAO;AAAA,QACX,IAAA,EAAM,CAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACZ,CAAA;AAAA,IACF,CAAA,MAAO;AACN,MAAA,WAAA,CAAY,KAAA,CAAM,KAAK,SAAS,CAAA;AAAA,IACjC;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,8BAAA,EAAsB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,aAAa,IAAA,EAAiB;AACpC,IAAA,OAAA,CAAQ,GAAA,CAAI,qBAAqB,IAAI,CAAA;AACrC,IAAA,MAAM,QAAQ,EAAC;AACf,IAAA,MAAM,WAAA,GAAc,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAe,KAAA,CAAM,eAAe,oBAAK,CAAA;AAC/E,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,IAAI,CAAA;AAEvC,IAAA,IAAI,CAAC,WAAA,EAAa;AACjB,MAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,SAAA,CAAU,CAAC,KAAA,KAAe,KAAA,CAAM,eAAe,cAAI,CAAA;AAC7E,MAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC5B,QAAA,IAAI,SAAS,IAAA,EAAM;AAClB,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,QAChB;AAAA,MACD;AAEA,MAAA,MAAM,IAAA,GAAO;AAAA,QACZ,KAAA;AAAA,QACA,WAAA,EAAa,aAAA;AAAA,QACb,IAAIA,OAAA,EAAO;AAAA,QACX,IAAA,EAAM,CAAA;AAAA,QACN,UAAA,EAAY;AAAA,OACb;AACA,MAAA,IAAI,UAAU,EAAA,EAAI;AACjB,QAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MAClC,CAAA,MAAO;AACN,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,IAAI,CAAA;AAAA,MACtB;AAAA,IACD,CAAA,MAAO;AACN,MAAA,KAAA,MAAW,QAAQ,QAAA,EAAU;AAC5B,QAAA,IAAI,SAAS,IAAA,EAAM;AAClB,UAAA,WAAA,CAAY,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,QAC5B;AAAA,MACD;AAAA,IACD;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,+BAAA,EAAuB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,WAAW,IAAA,EAAW;AAC5B,IAAA,OAAA,CAAQ,GAAA,CAAI,mBAAmB,IAAI,CAAA;AACnC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AACtC,IAAA,MAAM;AAAA;AAAA,MAEL,QAAA,EAAU,EAAE,EAAA,EAAI,IAAA,EAAM,aAAa,UAAA;AAAW,KAC/C,GAAI,IAAA;AACJ,IAAA,IAAI,SAAA,GAAY,IAAA;AAEhB,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,SAAA,GAAY,UAAA;AAAA,IACb,CAAA,MAAO;AACN,MAAA,MAAM,WAAA,GAAc,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAe,KAAA,CAAM,eAAe,IAAI,CAAA;AAC9E,MAAA,SAAA,GAAA,CAAA,CAAa,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAa,UAAS,EAAC,EAAG,KAAK,CAAC,IAAA,KAAc,IAAA,CAAK,EAAA,KAAO,EAAE,CAAA;AAAA,IAC1E;AAEA,IAAA,IAAI,SAAA,EAAW;AAEd,MAAA,CAAC,UAAA,KAAe,UAAU,IAAA,GAAO,IAAA,CAAA;AACjC,MAAA,IAAI,SAAS,oBAAA,EAAO;AACnB,QAAA,SAAA,CAAU,UAAU,QAAA,GAAW,QAAA;AAAA,MAChC,CAAA,MAAA,IAAW,SAAS,cAAA,EAAM;AACzB,QAAA,MAAM,EAAE,QAAA,EAAU,EAAE,MAAM,SAAA,EAAW,OAAA,IAAQ,GAAI,IAAA;AACjD,QAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,GAAW,EAAA;AAC9B,QAAA,SAAA,CAAU,QAAA,GAAW;AAAA,UACpB,GAAG,SAAA,CAAU,QAAA;AAAA,UACb,QAAA;AAAA,UACA,eAAA,EAAiB,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,UACpC,WAAA,EAAa,IAAA;AAAA,UACb,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA;AAAA,UAChC,SAAA,EAAW;AAAA,YACV,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,YACpC,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,SAAS,KAAK;AAAA;AACvC,SACD;AAAA,MACD;AAAA,IACD;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAAqB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,UAAA,CAAW,EAAE,EAAA,EAAI,IAAA,EAAM,YAAW,EAAwD;AAEhG,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,UAAA,CAAW,QAAA,GAAW,CAAA;AAAA,IACvB,CAAA,MAAO;AACN,MAAA,MAAM,WAAA,GAAc,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAe,KAAA,CAAM,eAAe,IAAI,CAAA;AAC9E,MAAA,MAAM,KAAA,GAAQ,YAAY,KAAA,CAAM,SAAA,CAAU,CAAC,IAAA,KAAc,IAAA,CAAK,OAAO,EAAE,CAAA;AAEvE,MAAA,IAAI,UAAU,EAAA,EAAI;AACjB,QAAA,IAAI,WAAA,CAAY,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,IAAK,YAAY,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,SAAA,EAAW;AAC3E,UAAA,WAAA,CAAY,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,QAClC,CAAA,MAAO;AACN,UAAA,WAAA,CAAY,KAAA,CAAM,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,QAClC;AAAA,MACD;AAEA,MAAA,IAAI,WAAA,CAAY,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AACnC,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA;AAClD,QAAA,IAAI,eAAe,EAAA,EAAI;AACtB,UAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY,CAAC,CAAA;AAAA,QACjC;AAAA,MACD;AAAA,IACD;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAAqB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC3C;AAAA;AAAA,EAGO,UAAA,CAAW,EAAE,EAAA,EAAI,MAAA,EAAO,EAA0C;AACxE,IAAA,MAAM,WAAA,GAAc,KAAK,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAe,KAAA,CAAM,eAAe,oBAAK,CAAA;AAC/E,IAAA,MAAM,KAAA,GAAQ,YAAY,KAAA,CAAM,SAAA,CAAU,CAAC,IAAA,KAAc,IAAA,CAAK,OAAO,EAAE,CAAA;AACvE,IAAA,IAAI,UAAU,EAAA,EAAI;AACjB,MAAA,MAAM,MAAA,GAAS,SAAS,CAAA,GAAI,CAAA;AAG5B,MAAA,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA,CAAE,SAAA,CAAU,MAAA,GAAS,MAAA;AAE5C,MAAA,IAAI,WAAA,CAAY,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,IAAK,YAAY,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,SAAA,EAAW;AAC3E,QAAA,WAAA,CAAY,KAAA,CAAM,KAAA,GAAQ,CAAC,CAAA,CAAE,UAAU,MAAA,GAAS,MAAA;AAAA,MACjD;AAAA,IACD;AAEA,IAAA,OAAA,CAAQ,GAAA,CAAI,6BAAA,EAAqB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC3C;AAAA;AAAA,EAGQ,aAAa,IAAA,EAAgB;AACpC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AACtC,IAAA,MAAM;AAAA,MACL,QAAA,EAAU,EAAE,EAAA,EAAI,OAAA,EAAS,OAAA,EAAQ;AAAA,MACjC,KAAA;AAAA,MACA;AAAA,KACD,GAAI,IAAA;AACJ,IAAA,IAAI,SAAA,GAAY,IAAA;AAGhB,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,QAAA,GAAW,OAAA;AACxD,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,QAAA,GAAW,iBAAA,GAAoB,oBAAoB,OAAA,CAAQ,QAAA;AAErF,IAAA,MAAM,SAAA,GAAY;AAAA,MACjB,QAAA,EAAU,SAAA;AAAA,MACV,gBAAgB,OAAA,CAAQ,QAAA;AAAA,MACxB,KAAA,EAAO,CAAA;AAAA,MACP,GAAA,EAAK,SAAA;AAAA,MACL,OAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,EAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,EAAW;AAAA,QACV,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,QAAQ,OAAA,CAAQ,UAAA;AAAA,QAChB,SAAA,EAAW;AAAA,UACV,MAAA;AAAA,UACA;AAAA,SACD;AAAA,QACA,QAAA;AAAA,QACA,aAAA,EAAe,CAAA;AAAA,QACf,MAAA,EAAQ,CAAA;AAAA,QACR,WAAW,OAAA,CAAQ,UAAA;AAAA,QACnB,oBAAoB,OAAA,CAAQ,YAAA;AAAA,QAC5B,UAAA,EAAY,EAAA;AAAA,QACZ,UAAU,OAAA,CAAQ;AAAA;AACnB,KACD;AAEA,IAAA,IAAI,OAAA,CAAQ,aAAa,MAAA,EAAQ;AAChC,MAAA,SAAA,GAAY;AAAA,QACX,QAAA,EAAU,SAAA;AAAA,QACV,gBAAgB,OAAA,CAAQ,QAAA;AAAA,QACxB,KAAA,EAAO,CAAA;AAAA,QACP,GAAA,EAAK,SAAA;AAAA,QACL,OAAA;AAAA,QACA,IAAA,EAAM,GAAA;AAAA,QACN,IAAIA,OAAA,EAAO;AAAA,QACX,SAAA,EAAW;AAAA,UACV,WAAW,OAAA,CAAQ,QAAA;AAAA,UACnB,MAAA,EAAQ,CAAA;AAAA,UACR,aAAA,EAAe;AAAA;AAChB,OACD;AAAA,IACD;AAEA,IAAA,OAAO,CAAC,WAAW,SAAS,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,OAAO,KAAA,EAAe;AAC7B,IAAA,IAAI,UAAU,aAAA,EAAe;AAC5B,MAAA,OAAO,WAAA;AAAA,IACR;AAEA,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,KAAK,CAAA,EAAG;AAC1B,MAAA,OAAOC,qBAAW,KAAK,CAAA;AAAA,IACxB;AAEA,IAAA,IAAI,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACxB,MAAA,OAAOC,oBAAU,KAAK,CAAA;AAAA,IACvB;AAAA,EACD;AACD,CAAA;AAEA,IAAO,qBAAA,GAAQ,aAAA;ACjVf,SAAS,QACR,GAAA,EACA,IAAA,EACA,KACA,GAAA,EACA,KAAA,EACA,OACA,KAAA,EACC;AACD,EAAA,IAAI,UAAU,MAAA,EAAW;AACzB,EAAA,GAAA,CAAI,IAAA,EAAK;AACT,EAAA,GAAA,CAAI,SAAA,CAAU,MAAM,GAAG,CAAA;AACvB,EAAA,GAAA,CAAI,MAAA,CAAOC,aAAA,CAAO,IAAA,CAAK,gBAAA,CAAiB,KAAK,CAAC,CAAA;AAC9C,EAAA,GAAA,CAAI,SAAA,CAAU,KAAK,CAAC,KAAA,GAAQ,GAAG,CAAC,KAAA,GAAQ,CAAA,EAAG,KAAA,EAAO,KAAK,CAAA;AACvD,EAAA,GAAA,CAAI,OAAA,EAAQ;AACb;AAGA,SAAS,eAAe,MAAA,EAAuB;AAC9C,EAAA,MAAM,QAAA,GAAW;AAAA,IAChB,MAAA,EAAQ,mGAAA;AAAA;AAAA,IAER,IAAA,EAAM,mGAAA;AAAA,IACN,IAAA,EAAM,mGAAA;AAAA,IACN,MAAA,EAAQ,mGAAA;AAAA,IACR,IAAA,EAAM;AAAA,GACP;AACA,EAAA,MAAM,iBAAA,GAAoB,CAAC,GAAA,KAAgB;AAC1C,IAAA,MAAM,GAAA,GAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AACxC,IAAA,GAAA,CAAI,GAAA,GAAM,GAAA;AACV,IAAA,OAAO,GAAA;AAAA,EACR,CAAA;AAGA,EAAA,MAAM,YAAA,GAAe,CAAC,UAAA,EAAwB,MAAA,KAA6B;AAC1E,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU,OAAO,IAAA;AACvC,IAAA,MAAM,YAAA,GAAe,OAAO,gBAAA,EAAiB;AAC7C,IAAA,IAAI,YAAA,EAAc;AACjB,MAAA,YAAA,CAAa,IAAI,CAAC,IAAA,KAAc,MAAA,CAAO,MAAA,CAAO,IAAI,CAAC,CAAA;AACnD,MAAA,MAAA,CAAO,gBAAA,EAAiB;AACxB,MAAA,MAAA,CAAO,mBAAA,EAAoB;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACR,CAAA;AACA,EAAA,MAAM,MAAA,GAAS,iBAAA,CAAkB,QAAA,CAAS,MAAM,CAAA;AAChD,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,QAAA,CAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,QAAA,CAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,QAAA,CAAS,MAAM,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,QAAA,CAAS,IAAI,CAAA;AAE/C,EAAA,MAAM,gBAAgB,CACrB,GAAA,EACA,IAAA,EACA,GAAA,EACA,eACA,YAAA,KACI;AACJ,IAAA,OAAA,CAAQ,KAAK,IAAA,EAAM,GAAA,EAAK,QAAQ,EAAA,EAAI,EAAA,EAAI,aAAa,KAAK,CAAA;AAAA,EAC3D,CAAA;AAEA,EAAA,MAAM,mBAAmB,CACxB,GAAA,EACA,IAAA,EACA,GAAA,EACA,eACA,YAAA,KACI;AACJ,IAAA,OAAA,CAAQ,KAAK,IAAA,EAAM,GAAA,EAAK,SAAS,EAAA,EAAI,EAAA,EAAI,aAAa,KAAK,CAAA;AAAA,EAC5D,CAAA;AAuBA,EAAA,MAAM,iBAAiB,CACtB,GAAA,EACA,IAAA,EACA,GAAA,EACA,eACA,YAAA,KACI;AACJ,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,EAAU,OAAO,KAAA;AACnC,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,IAAA,KAAS,oBAAA,EAAO;AACzC,MAAA,IAAI,YAAA,CAAa,SAAS,MAAA,KAAW,IAAA,IAAQ,aAAa,QAAA,CAAS,MAAA,KAAW,QAAW,OAAO,KAAA;AAChG,MAAA,IAAI,YAAA,CAAa,SAAS,MAAA,EAAQ;AACjC,QAAA,OAAA,CAAQ,KAAK,IAAA,EAAM,GAAA,EAAK,SAAS,EAAA,EAAI,EAAA,EAAI,aAAa,KAAK,CAAA;AAAA,MAC5D,CAAA,MAAO;AACN,QAAA,OAAA,CAAQ,KAAK,IAAA,EAAM,GAAA,EAAK,WAAW,EAAA,EAAI,EAAA,EAAI,aAAa,KAAK,CAAA;AAAA,MAC9D;AAAA,IACD;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,iBAAiB,CACtB,GAAA,EACA,IAAA,EACA,GAAA,EACA,eACA,YAAA,KACI;AACJ,IAAA,IAAI,CAAC,YAAA,CAAa,QAAA,EAAU,OAAO,KAAA;AACnC,IAAA,IAAI,YAAA,CAAa,QAAA,CAAS,IAAA,KAAS,cAAA,EAAM;AACxC,MAAA,OAAA,CAAQ,KAAK,IAAA,EAAM,GAAA,EAAK,SAAS,EAAA,EAAI,EAAA,EAAI,aAAa,KAAK,CAAA;AAAA,IAC5D;AAAA,EACD,CAAA;AAUA,EAAA,MAAM,UAAA,GAAa,CAAC,SAAA,EAAgB,SAAA,EAAgB,GAAQ,CAAA,KAAW;AACtE,IAAA,IAAI,SAAA,CAAU,MAAA,CAAO,QAAA,CAAS,MAAA,KAAW,MAAM,OAAO,KAAA;AACtD,IAAA,SAAA,CAAU,MAAA,CAAO,WAAW,IAAA,CAAK,KAAA,CAAM,KAAK,SAAA,CAAU,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAC,CAAA;AAChF,IAAA,SAAA,CAAU,OAAO,QAAA,CAAS,MAAA,GAAS,CAAC,SAAA,CAAU,OAAO,QAAA,CAAS,MAAA;AAC9D,IAAA,MAAA,CAAO,SAAA,EAAU;AACjB,IAAA,MAAA,CAAO,KAAK,mBAAA,EAAqB,EAAE,MAAA,EAAQ,SAAA,CAAU,QAAQ,CAAA;AAC7D,IAAA,OAAO,IAAA;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,SAAA,EAAgB,SAAA,EAAgB,GAAQ,CAAA,KAAW;AACtE,IAAA,IAAI,SAAA,CAAU,MAAA,CAAO,QAAA,CAAS,IAAA,KAAS,cAAA,EAAM;AAC5C,MAAA,MAAA,CAAO,KAAK,iBAAA,EAAmB,EAAE,MAAA,EAAQ,SAAA,CAAU,QAAQ,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,IAAA;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CACrB,SAAA,EACA,SAAA,EACA,GACA,CAAA,KACa;AACb,IAAA,IAAI;AACH,MAAA,MAAM,IAAI,SAAA,EACT,MAAA,GAAS,CAAA,CAAE,MAAA,EACX,aAAa,MAAA,CAAO,sBAAA;AAAA,QACnB,OAAO,cAAA,EAAe;AAAA,QACtB,CAAA,CAAE,OAAA;AAAA,QACF,CAAA,CAAE;AAAA,OACH;AACD,MAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAM,CAAA,CAAE,KAAK,UAAA,CAAW,CAAA,EAAG,EAAE,EAAA,GAAK,UAAA,CAAW,CAAC,CAAA,EACpE,QAAA,GAAW,KAAK,KAAA,CAAM,CAAA,GAAI,WAAW,CAAA,EAAG,CAAA,GAAI,WAAW,CAAC,CAAA;AACzD,MAAA,IAAI,MAAA,GAAS,KAAK,KAAA,CAAA,CAAO,QAAA,GAAW,YAAY,CAAA,CAAE,KAAA,KAAU,GAAA,GAAM,IAAA,CAAK,EAAA,CAAG,CAAA;AAC1E,MAAAA,aAAA,CAAO,aAAA,CAAc,cAAA,CAAe,SAAA,EAAW,SAAA,EAAW,GAAG,CAAC,CAAA;AAG9D,MAAA,MAAM,YAAA,GAAe;AAAA,QACpB,CAAC,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA;AAAA,QACX,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,QACd,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,QACd,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,QACd,CAAC,GAAA,EAAK,GAAA,EAAK,EAAE,CAAA;AAAA,QACb,CAAC,CAAA,CAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AAAA,QACT,CAAC,CAAA,EAAA,EAAK,CAAA,EAAA,EAAK,GAAG,CAAA;AAAA,QACd,CAAC,CAAA,GAAA,EAAM,CAAA,GAAA,EAAM,GAAG;AAAA,OACjB;AAEA,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC7C,QAAA,IAAI,YAAA,CAAa,CAAC,CAAA,CAAE,CAAC,CAAA,GAAI,MAAA,IAAU,MAAA,GAAS,YAAA,CAAa,CAAC,CAAA,CAAE,CAAC,CAAA,EAAG;AAC/D,UAAA,MAAA,CAAO,MAAA,CAAO,YAAA,CAAa,CAAC,CAAA,CAAE,CAAC,CAAC,CAAA;AAChC,UAAA,OAAO,IAAA;AAAA,QACR;AAAA,MACD;AAGA,MAAAA,aAAA,CAAO,aAAA,CAAc,oBAAA,CAAqB,SAAA,EAAW,SAAA,EAAW,GAAG,CAAC,CAAA;AACpE,MAAA,OAAO,IAAA;AAAA,IACR,SAAS,KAAA,EAAO;AACf,MAAA,OAAA,CAAQ,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAE5C,MAAA,OAAO,KAAA;AAAA,IACR;AAAA,EACD,CAAA;AAEA,EAAAA,aAAA,CAAO,OAAO,SAAA,CAAU,QAAA,CAAS,EAAA,GAAK,IAAIA,cAAO,OAAA,CAAQ;AAAA,IACxD,CAAA,EAAG,IAAA;AAAA,IACH,CAAA,EAAG,IAAA;AAAA,IACH,cAAA,EAAgB,YAAA;AAAA,IAChB,MAAA,EAAQ;AAAA,GACR,CAAA;AAGD,EAAAA,aAAA,CAAO,OAAO,SAAA,CAAU,QAAA,CAAS,EAAA,GAAK,IAAIA,cAAO,OAAA,CAAQ;AAAA,IACxD,CAAA,EAAG,IAAA;AAAA,IACH,CAAA,EAAG,GAAA;AAAA,IACH,cAAA,EAAgB,UAAA;AAAA,IAChB,MAAA,EAAQ;AAAA,GACR,CAAA;AAED,EAAAA,aAAA,CAAO,OAAO,SAAA,CAAU,QAAA,CAAS,EAAA,GAAK,IAAIA,cAAO,OAAA,CAAQ;AAAA,IACxD,CAAA,EAAG,GAAA;AAAA,IACH,CAAA,EAAG,IAAA;AAAA,IACH,cAAA,EAAgB,UAAA;AAAA,IAChB,MAAA,EAAQ;AAAA,GACR,CAAA;AAED,EAAAA,aAAA,CAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,EAAA,GAAK,IAAIA,cAAO,OAAA,CAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAC3E,EAAAA,aAAA,CAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,EAAA,GAAK,IAAIA,cAAO,OAAA,CAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAC3E,EAAAA,aAAA,CAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,EAAA,GAAK,IAAIA,cAAO,OAAA,CAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAC3E,EAAAA,aAAA,CAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,EAAA,GAAK,IAAIA,cAAO,OAAA,CAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAE3E,EAAAA,aAAA,CAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,GAAA,GAAM,IAAIA,cAAO,OAAA,CAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,CAAA;AAE5E,EAAAA,aAAA,CAAO,OAAO,SAAA,CAAU,QAAA,CAAS,EAAA,GAAK,IAAIA,cAAO,OAAA,CAAQ;AAAA,IACxD,CAAA,EAAG,GAAA;AAAA,IACH,CAAA,EAAG,GAAA;AAAA,IACH,UAAA,EAAY,QAAA;AAAA,IACZ,aAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACR,CAAA;AAED,EAAAA,aAAA,CAAO,MAAA,CAAO,UAAU,GAAA,CAAI;AAAA,IAC3B,WAAA,EAAa,WAAA;AAAA,IACb,iBAAA,EAAmB,GAAA;AAAA,IACnB,uBAAA,EAAyB,CAAA;AAAA,IACzB,OAAA,EAAS;AAAA,GACT,CAAA;AACD,EAAA,OAAO,MAAA;AACR;ACtOA,IAAM,YAAA,GAAeC,gBAAA;AAAA,EACpB,CAAC,EAAE,YAAA,EAAc,UAAA,EAAY,UAAA,EAAY,YAAA,EAAc,YAAA,EAAc,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,UAAA,EAAY,aAAA,IAAsB,GAAA,KAAa;AAC3I,IAAA,MAAM,CAAC,EAAA,EAAI,KAAK,CAAA,GAAIZ,eAAc,IAAI,CAAA;AACtC,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAc,IAAI,CAAA;AAChD,IAAA,MAAM,WAAA,GAAcD,YAAAA,CAAY,EAAE,CAAA;AAClC,IAAA,MAAM,gBAAA,GAAmBA,aAAY,IAAI,CAAA;AACzC,IAAA,MAAM,cAAA,GAAiBA,aAAe,CAAC,CAAA;AACvC,IAAA,MAAM,aAAA,GAAgBA,aAAe,CAAC,CAAA;AAEtC,IAAA,MAAM,aAAa,MAAM;AACxB,MAAA,MAAM,MAAA,GAAS,IAAIY,aAAAA,CAAO,MAAA,CAAO,QAAA,EAAU;AAAA,QAC1C,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,SAAA,EAAW;AAAA;AAAA,OACX,CAAA;AACD,MAAA,cAAA,CAAe,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,SAAS,UAAA,CAAW,MAAA;AACrE,MAAA,aAAA,CAAc,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,SAAA,CAAU,QAAQ,UAAA,CAAW,KAAA;AAEnE,MAAA,IAAI,WAAW,MAAA,EAAQ;AACtB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACpB;AACA,MAAA,KAAA,CAAM,MAAM,CAAA;AACZ,MAAA,eAAA,CAAgB,MAAM,CAAA;AACtB,MAAA,cAAA,CAAe,MAAM,CAAA;AAAA,IACtB,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,MAAA,KAAgB;AACrC,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,KAAM,GAAO,CAAA;AAC5C,MAAAA,aAAAA,CAAO,IAAA,CAAK,cAAA,CAAe,UAAA,EAAY,CAAC,OAAA,KAAiB;AACxD,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAc;AAC9B,UAAA,IAAA,CAAK,EAAA,CAAG,YAAY,MAAM;AACzB,YAAA,MAAM,IAAA,GAAO,cAAc,IAAI,CAAA;AAC/B,YAAA,gBAAA,CAAiB,OAAA,CAAQ,WAAW,IAAI,CAAA;AAAA,UACzC,CAAC,CAAA;AACD,UAAA,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,EAAA,IAAM,IAAA,CAAK,SAAS,OAAO,CAAA;AAC/C,UAAA,MAAA,CAAO,IAAI,IAAI,CAAA;AAAA,QAChB,CAAC,CAAA;AACD,QAAA,MAAA,CAAO,SAAA,EAAU;AAAA,MAClB,GAAG,EAAE,CAAA;AAAA,IACN,CAAA;AAGA,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAAe;AAC1C,MAAA,IAAI,EAAA,EAAI;AACP,QAAA,MAAM,KAAK,IAAA,CAAK,KAAA,CAAA,CAAQ,CAAA,IAAK,KAAA,IAAS,KAAM,GAAO,CAAA;AACnD,QAAA,MAAM,OAAA,GAAU,GAAG,UAAA,EAAW;AAC9B,QAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAc;AAvDnC,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAwDK,UAAA,IAAA,CAAA,CAAI,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,QAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,IAAA,MAAS,cAAA,EAAM;AAClC,YAAA,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,EAAA,IAAM,IAAA,CAAK,SAAS,OAAA,IAAW,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,WAAW,IAAA,CAAK,QAAA,CAAS,QAAA,IAAY,IAAA,CAAK,SAAS,QAAA,CAAS,CAAA;AAAA,UACnI,CAAA,MAAO;AACN,YAAA,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,EAAA,IAAM,IAAA,CAAK,SAAS,OAAA,IAAW,EAAA,GAAK,IAAA,CAAK,QAAA,CAAS,YAAU,EAAA,GAAA,CAAA,EAAA,GAAA,IAAA,CAAK,QAAA,KAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAe,OAAA,KAAf,mBAAwB,QAAA,CAAQ,CAAA;AAAA,UACjH;AAAA,QACD,CAAC,CAAA;AACD,QAAA,EAAA,CAAG,mBAAA,EAAoB;AACvB,QAAA,EAAA,CAAG,SAAA,EAAU;AAAA,MACd;AAAA,IACD,CAAA;AAEA,IAAA,MAAM,eAAA,GAAkB,CAAC,MAAA,KAAgB;AACxC,MAAA,MAAA,CAAO,EAAA,CAAG,YAAA,EAAc,CAAC,CAAA,KAAW;AACnC,QAAA,MAAM,MAAA,GAAS,OAAO,eAAA,EAAgB;AACtC,QAAA,IAAI,MAAA,EAAQ;AACX,UAAA,IAAI,OAAO,UAAA,KAAe,IAAA,IAAQ,MAAA,CAAO,QAAA,CAAS,SAAS,cAAA,EAAM;AAEhE,YAAA,cAAA,CAAe,QAAQ,MAAM,CAAA;AAAA,UAC9B;AAAA,QACD,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,MAAM,CAAA;AAAA,QACrB;AAAA,MACD,CAAC,CAAA;AACD,MAAA,MAAA,CAAO,EAAA,CAAG,gBAAA,EAAkB,CAAC,CAAA,KAAW;AACvC,QAAA,IAAI,EAAE,MAAA,CAAO,QAAA,IAAY,CAAC,CAAA,CAAE,MAAA,CAAO,SAAS,UAAA,EAAY;AACvD,UAAA,aAAA,CAAc,CAAA,CAAE,OAAO,QAAQ,CAAA;AAAA,QAChC;AACA,QAAA,MAAM,EAAE,UAAS,GAAI,CAAA,CAAE,OAAO,MAAA,CAAO,CAAC,UAAU,CAAC,CAAA;AACjD,QAAA,gBAAA,CAAiB,OAAA,CAAQ,WAAW,QAAQ,CAAA;AAAA,MAC7C,CAAC,CAAA;AAED,MAAA,MAAA,CAAO,EAAA,CAAG,mBAAA,EAAqB,CAAC,CAAA,KAAW;AAC1C,QAAA,MAAM,EAAE,UAAS,GAAI,CAAA,CAAE,OAAO,MAAA,CAAO,CAAC,UAAU,CAAC,CAAA;AACjD,QAAA,gBAAA,CAAiB,OAAA,CAAQ,WAAW,QAAQ,CAAA;AAAA,MAC7C,CAAC,CAAA;AAED,MAAA,MAAA,CAAO,EAAA,CAAG,iBAAA,EAAmB,CAAC,CAAA,KAAW;AACxC,QAAA,MAAM,MAAA,GAAS,OAAO,eAAA,EAAgB;AACtC,QAAA,kBAAA,CAAmB,QAAQ,MAAM,CAAA;AAAA,MAClC,CAAC,CAAA;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,EAAa,MAAA,KAAgB;AACpD,MAAA,MAAA,CAAO,UAAA,EAAA;AAEP,MAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC9B,QAAA,MAAA,CAAO,UAAA,GAAa,CAAA;AAAA,MACrB,GAAG,GAAG,CAAA;AACN,MAAA,IAAI,MAAA,CAAO,eAAe,CAAA,EAAG;AAC5B,QAAA,MAAA,CAAO,UAAA,GAAa,CAAA;AACpB,QAAA,YAAA,CAAa,KAAK,CAAA;AAElB,QAAA,kBAAA,CAAmB,QAAQ,MAAM,CAAA;AAAA,MAClC;AAAA,IACD,CAAA;AACA,IAAA,MAAM,kBAAA,GAAqB,CAAC,MAAA,EAAa,MAAA,KAAgB;AAExD,MAAA,MAAM;AAAA,QACL,IAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA,EAAU,EAAE,aAAA,EAAe,SAAA,EAAW,MAAM,OAAA,EAAS,UAAA,EAAY,IAAI,YAAA;AAAa,OACnF,GAAI,MAAA;AACJ,MAAA,MAAM,QAAA,GAAW;AAAA,QAChB,EAAA;AAAA,QACA,IAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAA;AAAA,QACA,IAAA;AAAA,QACA,GAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,aAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA;AAAA,OAGD;AACA,MAAA,MAAA,CAAO,GAAA,CAAI,WAAW,KAAK,CAAA;AAC3B,MAAA,MAAA,CAAO,SAAA,EAAU;AACjB,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,IACtB,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,KAAc;AACpC,MAAA,MAAM,WAAA,GAAc,KAAK,cAAA,EAAe;AACxC,MAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,CAAO,CAAC,UAAA,EAAY,MAAM,CAAC,CAAA,EAAG,WAAA,EAAY;AAAA,IAC5D,CAAA;AAIA,IAAA,MAAM,WAAA,GAAc,CAAC,IAAA,EAAW,OAAA,KAAoB;AACnD,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,aAAA,KAAkB,OAAA,GAAU,KAAK,UAAA,GAAa,EAAA;AAC/D,MAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACvC,QAAA,IAAI;AACH,UAAAA,cAAO,KAAA,CAAM,OAAA;AAAA,YACZ,GAAA;AAAA,YACA,CAAC,GAAA,KAAa;AACb,cAAA,MAAM,MAAA,GAAS,UAAA,CAAW,KAAA,GAAQ,CAAA,GAAI,IAAA,CAAK,KAAA;AAC3C,cAAA,GAAA,CAAI,GAAA,CAAI;AAAA,gBACP,OAAO,IAAA,CAAK,KAAA;AAAA,gBACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,gBACb,MAAA;AAAA,gBACA,MAAA,EAAQ,MAAA;AAAA,gBACR,IAAA,EAAM,WAAW,KAAA,GAAQ,CAAA;AAAA,gBACzB,GAAA,EAAK,WAAW,MAAA,GAAS,CAAA;AAAA,gBACzB,OAAA,EAAS,QAAA;AAAA,gBACT,OAAA,EAAS,QAAA;AAAA,gBACT,QAAA,EAAU;AAAA,kBACT,IAAIH,OAAAA,EAAO;AAAA,kBACX,MAAA,EAAQ,IAAA,CAAK,QAAA,KAAa,MAAA,GAAS,KAAA,GAAQ,IAAA;AAAA,kBAC3C,OAAA,EAAS,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,KAAM,GAAO,CAAA;AAAA,kBAC1C,OAAA,EAAS,KAAA;AAAA,kBACT,IAAA,EAAM,oBAAA;AAAA,kBACN,IAAA,EAAM,KAAA;AAAA,kBACN,OAAA;AAAA,kBACA,OAAA,EAAS;AAAA;AACV,eACA,CAAA;AACD,cAAA,GAAA,CAAI,EAAA,CAAG,YAAY,MAAM;AACxB,gBAAA,MAAMK,KAAAA,GAAO,cAAc,GAAG,CAAA;AAC9B,gBAAAA,MAAK,GAAA,GAAM,EAAA;AACX,gBAAA,gBAAA,CAAiB,OAAA,CAAQ,WAAWA,KAAI,CAAA;AAAA,cACzC,CAAC,CAAA;AACD,cAAA,EAAA,CAAG,IAAI,GAAG,CAAA;AACV,cAAA,aAAA,CAAc,IAAI,QAAQ,CAAA;AAC1B,cAAA,MAAM,IAAA,GAAO,cAAc,GAAG,CAAA;AAC9B,cAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,YACb,CAAA;AAAA,YACA;AAAA,cACC,OAAA,EAAS;AAAA;AACV,WACD;AAAA,QACD,SAAS,GAAA,EAAK;AACb,UAAA,MAAA,CAAO,MAAM,4CAAS,CAAA;AAAA,QACvB;AAAA,MACD,CAAC,CAAA;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,WAAA,GAAc,CAAC,EAAA,EAAY,MAAA,EAAgB,GAAA,KAAa;AAC7D,MAAA,MAAM,SAAS,EAAA,IAAM,GAAA;AACrB,MAAA,IAAI,MAAA,EAAQ;AACX,QAAA,MAAM,OAAO,MAAA,CAAO,UAAA,EAAW,CAAE,MAAA,CAAO,CAAC,IAAA,KAAW;AA7MxD,UAAA,IAAA,EAAA;AA6M2D,UAAA,OAAA,CAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,QAAA,KAAN,mBAAgB,IAAA,MAAS,oBAAA;AAAA,QAAA,CAAK,CAAA;AACrF,QAAA,MAAM,MAAA,GAAS,KAAK,IAAA,CAAK,CAAC,SAAc,IAAA,CAAK,QAAA,CAAS,OAAO,EAAE,CAAA;AAC/D,QAAA,IAAI,MAAA,EAAQ;AACX,UAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,CAAC,GAAA,KAAa;AACnC,YAAA,GAAA,CAAI,SAAA,EAAU;AACd,YAAA,MAAA,CAAO,SAAA,EAAU;AAAA,UAClB,CAAC,CAAA;AAAA,QACF;AAAA,MACD,CAAA,MAAO;AACN,QAAA,WAAA,CAAY,QAAQ,IAAA,CAAK,WAAA,CAAY,KAAK,MAAA,EAAM,EAAA,EAAI,MAAM,CAAC,CAAA;AAAA,MAC5D;AAAA,IACD,CAAA;AAGA,IAAA,MAAM,mBAAA,GAAsB,CAAC,IAAA,EAAW,GAAA,KAAa;AACpD,MAAA,MAAM,SAAS,EAAA,IAAM,GAAA;AACrB,MAAA,IAAI,MAAA,IAAU,WAAW,KAAA,EAAO;AAC/B,QAAA,MAAM,GAAA,GAAM,SAAS,IAAA,CAAK,IAAA,CAAK,UAAU,QAAQ,CAAA,GAAI,EAAA,GAAK,IAAA,CAAK,SAAA,CAAU,SAAA;AACzE,QAAAF,aAAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,GAAA,KAAa;AACvC,UAAA,MAAM,EAAE,SAAA,EAAW,QAAA,EAAS,GAAI,IAAA,CAAK,SAAA;AACrC,UAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,GAAS,cAAA,CAAe,OAAA;AAChD,UAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,GAAS,aAAA,CAAc,OAAA;AAC/C,UAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,GAAQ,QAAA,CAAS,OAAA;AACzC,UAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,GAAS,QAAA,CAAS,OAAA;AACzC,UAAA,MAAM,OAAA,GAAUG,mBAAA,CAAU,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AAC1C,UAAA,MAAM,aAAA,GAAgBA,mBAAA,CAAU,IAAA,CAAK,QAAA,EAAU,EAAE,CAAA;AACjD,UAAA,GAAA,CAAI,GAAA,CAAI;AAAA,YACP,OAAO,SAAA,CAAU,KAAA;AAAA,YACjB,QAAQ,SAAA,CAAU,MAAA;AAAA,YAClB,MAAA;AAAA,YACA,MAAA;AAAA,YACA,IAAA;AAAA,YACA,GAAA;AAAA,YACA,OAAO,QAAA,CAAS,SAAA;AAAA,YAChB,OAAA,EAAS,QAAA;AAAA,YACL,OAAA,EAAS,QAAA;AAAA,YACb,QAAA,EAAU;AAAA,cACT,IAAI,IAAA,CAAK,EAAA;AAAA,cACT,MAAA,EAAQ,IAAA;AAAA,cACR,SAAS,IAAA,CAAK,OAAA;AAAA,cACd,OAAA;AAAA,cACA,IAAA,EAAM,oBAAA;AAAA,cACN,IAAA,EAAM,KAAA;AAAA,cACN,OAAA,EAAS;AAAA,gBACR,UAAU,IAAA,CAAK;AAAA,eAChB;AAAA,cACA,UAAA,EAAY;AAAA,aACb;AAAA,YACA,OAAA,EAAS,KAAA,IAAS,OAAA,IAAW,KAAA,GAAQ,OAAA,GAAU;AAAA,WAC/C,CAAA;AACD,UAAA,MAAA,CAAO,IAAI,GAAG,CAAA;AACd,UAAA,GAAA,CAAI,EAAA,CAAG,YAAY,MAAM;AACxB,YAAA,MAAM,IAAA,GAAO,cAAc,GAAG,CAAA;AAC9B,YAAA,IAAA,CAAK,GAAA,GAAM,EAAA;AACX,YAAA,gBAAA,CAAiB,OAAA,CAAQ,WAAW,IAAI,CAAA;AAAA,UACzC,CAAC,CAAA;AAAA,QACF,CAAC,CAAA;AAAA,MACF,CAAA,MAAO;AACN,QAAA,WAAA,CAAY,QAAQ,IAAA,CAAK,mBAAA,CAAoB,IAAA,CAAK,MAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MAC9D;AAAA,IACD,CAAA;AAEA,IAAA,MAAM,aAAa,MAAM;AACxB,MAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,IACd,CAAA;AACA,IAAA,MAAM,aAAa,MAAM;AACxB,MAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,IACd,CAAA;AAGA,IAAA,MAAM,kBAAA,GAAqB,OAAO,IAAA,EAAW,GAAA,KAAa;AACzD,MAAA,MAAM,SAAS,EAAA,IAAM,GAAA;AACrB,MAAA,IAAI,MAAA,EAAQ;AACX,QAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,KAAK,QAAA,CAAS,SAAA;AACxC,QAAA,MAAM,QAAA,GAAWP,qBAAAA,CAAY,KAAA,EAAO,MAAM,CAAA;AAC1C,QAAA,MAAM,EAAE,aAAa,eAAA,EAAiB,SAAA,EAAW,UAAU,YAAA,EAAc,SAAA,KAAc,IAAA,CAAK,QAAA;AAC5F,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,GAAS,QAAA,GAAW,KAAK,aAAA,CAAc,OAAA;AAC/D,QAAA,MAAM,MAAA,GAAS,QAAA,CAAS,MAAA,GAAS,QAAA,GAAW,KAAK,cAAA,CAAe,OAAA;AAChE,QAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,GAAQ,QAAA,CAAS,OAAA;AACzC,QAAA,MAAM,GAAA,GAAM,UAAA,CAAW,MAAA,GAAS,QAAA,CAAS,OAAA;AACzC,QAAA,MAAM,OAAA,GAAU,eAAA,GAAkBQ,oBAAA,CAAW,eAAe,CAAA,GAAI,aAAA;AAChE,QAAA,MAAM,SAAA,GAAY,WAAA,KAAgB,gCAAA,IAAW,SAAA,KAAc,WAAA;AAC3D,QAAA,MAAM,QAAA,GAAWA,oBAAA,CAAW,SAAA,GAAY,WAAA,GAAe,aAAa,WAAY,CAAA;AAChF,QAAA,MAAM,aAAA,GAAgB;AAAA,UACrB,MAAA,EAAQ,kBAAkB,IAAA,GAAO,KAAA;AAAA,UACjC,UAAA,EAAY,QAAA;AAAA,UACZ,SAAA,EAAW,QAAA;AAAA,UACX,WAAW,SAAA,KAAc,CAAA,GAAI,QAAA,GAAY,SAAA,KAAc,IAAI,OAAA,GAAU;AAAA,SACtE;AACA,QAAA,MAAM,WAAA,GAAc,MAAM,aAAA,CAAc,EAAE,WAAA,EAAa,SAAS,SAAA,EAAW,QAAA,EAAU,YAAA,EAAc,aAAA,EAAe,CAAA;AAClH,QAAA,MAAM,QAAA,GAAW,YAAA,CAAa,OAAA,CAAQ,sBAAsB,CAAA;AAC5D,QAAA,IAAI,UAAe,EAAC;AACpB,QAAA,IAAI;AACH,UAAA,OAAA,GAAU,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,QAAQ,IAAI,EAAC;AAAA,QAC9C,CAAA,CAAA,MAAQ;AACP,UAAA,OAAA,GAAU,EAAC;AAAA,QACZ;AACA,QAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,YAAY,CAAA,IAAK,EAAA;AAC5C,QAAAJ,cAAO,KAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,WAAA,EAAa,CAAC,OAAA,KAAiB;AAC/D,UAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,YACX,IAAA;AAAA,YACA,GAAA;AAAA,YACA,OAAO,WAAA,CAAY,KAAA;AAAA,YACnB,QAAQ,WAAA,CAAY,MAAA;AAAA,YACpB,MAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAO,QAAA,CAAS,SAAA;AAAA,YAChB,OAAA,EAAS,QAAA;AAAA,YACL,OAAA,EAAS,QAAA;AAAA,YACb,QAAA,EAAU;AAAA,cACT,IAAIH,OAAAA,EAAO;AAAA,cACX,SAAS,IAAA,CAAK,OAAA;AAAA,cACd,OAAA,EAASM,mBAAA,CAAU,IAAA,CAAK,OAAA,EAAS,EAAE,CAAA;AAAA,cACnC,IAAA,EAAM,cAAA;AAAA,cACN,SAAA,EAAW,QAAA;AAAA,cACX,IAAA,EAAM,WAAA;AAAA,cACN,OAAA;AAAA,cACA,UAAA,EAAY,IAAA;AAAA,cACZ,YAAA;AAAA,cACA,UAAA;AAAA,cACA,aAAA;AAAA,cACA,SAAA;AAAA,cACA,UAAU,IAAA,CAAK;AAAA;AAChB,WACA,CAAA;AACD,UAAA,OAAA,CAAQ,EAAA,CAAG,UAAA,EAAY,CAAC,OAAA,KAAiB;AACxC,YAAA,OAAA,CAAQ,OAAO,UAAA,GAAa,EAAA;AAAA,UAC7B,CAAC,CAAA;AACD,UAAA,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,OAAA,KAAiB;AACtC,YAAA,OAAA,CAAQ,SAAA,CAAU,OAAO,UAAA,GAAa,CAAA;AAAA,UACvC,CAAC,CAAA;AACD,UAAA,OAAA,CAAQ,EAAA,CAAG,YAAY,MAAM;AAC5B,YAAA,MAAM,IAAA,GAAO,cAAc,OAAO,CAAA;AAClC,YAAA,IAAI,IAAA,CAAK,SAAS,SAAA,EAAW;AAC5B,cAAA,IAAA,CAAK,SAAS,SAAA,GAAY,kBAAA;AAAA,YAC3B;AACA,YAAA,gBAAA,CAAiB,OAAA,CAAQ,WAAW,IAAI,CAAA;AAAA,UACzC,CAAC,CAAA;AACD,UAAA,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA,CAAE,SAAA,EAAU;AAAA,QAC/B,CAAC,CAAA;AAAA,MACF,CAAA,MAAO;AACN,QAAA,WAAA,CAAY,QAAQ,IAAA,CAAK,kBAAA,CAAmB,IAAA,CAAK,MAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MAC7D;AAAA,IACD,CAAA;AAGA,IAAA,MAAM,iBAAA,GAAoB,CAAC,GAAA,KAAgB;AAE1C,MAAA,MAAM,WAAW,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,KAAI,IAAK,EAAA;AACzC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,0BAAA,EAA4B,EAAE,CAAA;AAC5D,MAAA,OAAO,CAAA,WAAA,EAAc,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,IAC3C,CAAA;AAGA,IAAA,MAAM,gBAAA,GAAmB,CAAC,GAAA,KAAgB;AACzC,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,EAAY;AAC9B,MAAA,IAAI,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,OAAA;AACrC,MAAA,IAAI,KAAA,CAAM,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,MAAA;AACpC,MAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,UAAA;AACnC,MAAA,IAAI,KAAA,CAAM,QAAA,CAAS,MAAM,CAAA,EAAG,OAAO,UAAA;AACnC,MAAA,OAAO,IAAA;AAAA,IACR,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,OAAO,SAAA,EAAmB,GAAA,KAAgB;AAC/D,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAM,GAAA,GAAM,MAAME,mBAAA,CAAU,EAAE,KAAK,CAAA;AACnC,QAAA,MAAM,MAAA,GAAS,iBAAiB,GAAG,CAAA;AACnC,QAAA,MAAM,cAAA,GAAiB,kBAAkB,GAAG,CAAA;AAC5C,QAAA,MAAM,QAAA,GAAW,SAAS,CAAA,KAAA,EAAQ,GAAG,cAAc,MAAM,CAAA,EAAA,CAAA,GAAO,QAAQ,GAAG,CAAA,EAAA,CAAA;AAC3E,QAAA,MAAM,QAAA,GAAW;AAAA;AAAA,wBAAA,EAEG,cAAc,CAAA;AAAA,eAAA,EACvB,QAAQ,CAAA;AAAA;AAAA,MAAA,CAAA;AAGnB,QAAA,MAAM,YAAA,GAAe,mCAAmC,QAAQ,CAAA,WAAA,CAAA;AAChE,QAAA,MAAM,SAAS,SAAA,CAAU,OAAA,CAAQ,QAAA,EAAU,CAAA,EAAG,YAAY,CAAA,MAAA,CAAQ,CAAA;AAClE,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAGA,IAAA,MAAM,aAAA,GAAgB,OAAO,EAAE,WAAA,EAAa,SAAS,SAAA,EAAW,YAAA,GAAe,IAAA,EAAM,aAAA,EAAc,KAAW;AAC7G,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAC9C,MAAA,SAAA,CAAU,MAAM,eAAA,GAAkB,OAAA;AAGlC,MAAA,SAAA,CAAU,MAAM,SAAA,GAAY,aAAA;AAC5B,MAAA,SAAA,CAAU,MAAM,OAAA,GAAU,cAAA;AAC1B,MAAA,SAAA,CAAU,KAAA,CAAM,SAAA,GAAY,aAAA,CAAc,SAAA,IAAa,MAAA;AACvD,MAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,KAAA,CAAM,IAAI,CAAA;AACpC,MAAA,MAAM,UAAA,GAAa,YAAA,GAAe,iBAAA,CAAkB,YAAY,CAAA,GAAI,YAAA;AACpE,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAiB;AAC/B,QAAA,MAAM,CAAA,GAAI,QAAA,CAAS,aAAA,CAAc,GAAG,CAAA;AACpC,QAAA,CAAA,CAAE,MAAM,KAAA,GAAQ,SAAA;AAChB,QAAA,CAAA,CAAE,MAAM,QAAA,GAAW,MAAA;AACnB,QAAA,CAAA,CAAE,MAAM,UAAA,GAAa,MAAA;AAErB,QAAA,CAAA,CAAE,MAAM,UAAA,GAAa,UAAA;AACrB,QAAA,CAAA,CAAE,MAAM,UAAA,GAAa,QAAA;AAErB,QAAA,CAAA,CAAE,MAAM,OAAA,GAAU,GAAA;AAClB,QAAA,CAAA,CAAE,cAAc,IAAA,IAAQ,GAAA;AACxB,QAAA,SAAA,CAAU,YAAY,CAAC,CAAA;AAAA,MACxB,CAAC,CAAA;AACD,MAAA,SAAA,CAAU,MAAM,OAAA,GAAU,qBAAA;AAE1B,MAAA,SAAA,CAAU,MAAM,YAAA,GAAe,KAAA;AAC/B,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,SAAS,CAAA;AACnC,MAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,qBAAA,EAAA;AACrC,MAAA,MAAM,OAAA,GAAU,MAAMC,gBAAA,CAAM,SAAS,CAAA;AACrC,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,SAAS,CAAA;AACnC,MAAA,MAAM,WAAA,GAAc,MAAM,cAAA,CAAe,OAAA,EAAS,YAAY,CAAA;AAC5D,MAAA,OAAO,EAAE,WAAA,EAAa,MAAA,EAAQ,KAAA,EAAM;AAAA,IACvC,CAAA;AACA,IAAA,MAAM,UAAA,GAAa,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,WAAW,QAAA,EAAU,aAAA,EAAe,EAAA,EAAG,EAAQ,GAAA,KAAa;AAC7G,MAAA,MAAM,SAAS,EAAA,IAAM,GAAA;AACrB,MAAA,MAAM,EAAE,MAAM,GAAA,EAAK,KAAA,EAAO,QAAQ,MAAA,EAAQ,KAAA,EAAO,OAAM,GAAI,QAAA;AAC3D,MAAA,MAAM,WAAA,GAAc,MAAM,aAAA,CAAc,EAAE,aAAa,OAAA,EAAS,SAAA,EAAW,eAAe,CAAA;AAC1F,MAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACvC,QAAAN,cAAO,KAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,WAAA,EAAa,CAAC,OAAA,KAAiB;AAC/D,UAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,YACX,IAAA;AAAA,YACA,GAAA;AAAA,YACA,KAAA;AAAA,YACA,OAAO,WAAA,CAAY,KAAA;AAAA,YACnB,QAAQ,WAAA,CAAY,MAAA;AAAA,YACpB,MAAA;AAAA,YACA,MAAA;AAAA,YACA,QAAA,EAAU;AAAA,cACT,IAAIH,OAAAA,EAAO;AAAA,cACX,OAAA,EAAS,IAAA,CAAK,KAAA,CAAO,KAAA,GAAQ,KAAM,GAAO,CAAA;AAAA,cAC1C,OAAA,EAAS,KAAA;AAAA,cACT,IAAA,EAAM,cAAA;AAAA,cACN,aAAA;AAAA,cACA,SAAA;AAAA,cACA,IAAA,EAAM,WAAA;AAAA,cACN;AAAA;AACD,WACA,CAAA;AACD,UAAA,OAAA,CAAQ,EAAA,CAAG,UAAA,EAAY,CAAC,OAAA,KAAiB;AACxC,YAAA,OAAA,CAAQ,OAAO,UAAA,GAAa,EAAA;AAAA,UAC7B,CAAC,CAAA;AACD,UAAA,OAAA,CAAQ,EAAA,CAAG,QAAA,EAAU,CAAC,OAAA,KAAiB;AACtC,YAAA,OAAA,CAAQ,SAAA,CAAU,OAAO,UAAA,GAAa,CAAA;AAAA,UACvC,CAAC,CAAA;AACD,UAAA,OAAA,CAAQ,EAAA,CAAG,YAAY,MAAM;AAC5B,YAAA,MAAM,IAAA,GAAO,cAAc,OAAO,CAAA;AAClC,YAAA,gBAAA,CAAiB,OAAA,CAAQ,WAAW,IAAI,CAAA;AAAA,UACzC,CAAC,CAAA;AACD,UAAA,MAAA,CAAO,aAAa,OAAO,CAAA;AAC3B,UAAA,MAAA,CAAO,IAAI,OAAO,CAAA;AAClB,UAAA,UAAA,CAAW,MAAI;AACd,YAAA,MAAA,CAAO,SAAA,EAAU;AAAA,UAClB,CAAC,CAAA;AACD,UAAA,aAAA,CAAc,QAAQ,QAAQ,CAAA;AAC9B,UAAA,gBAAA,CAAiB,OAAA,CAAQ,WAAA,CAAY,aAAA,CAAc,OAAO,CAAC,CAAA;AAC3D,UAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,QACb,CAAC,CAAA;AAAA,MACF,CAAC,CAAA;AAAA,IACF,CAAA;AACA,IAAA,MAAM,UAAA,GAAa,OAAO,EAAE,EAAA,EAAI,aAAa,OAAA,EAAS,SAAA,EAAW,aAAA,EAAe,YAAA,EAAa,KAAW;AACvG,MAAA,MAAM,WAAA,GAAc,MAAM,aAAA,CAAc,EAAE,aAAa,OAAA,EAAS,SAAA,EAAW,YAAA,EAAc,aAAA,EAAe,CAAA;AACxG,MAAA,MAAM,MAAA,GAAS,EAAA,CAAG,UAAA,EAAW,CAAE,IAAA,CAAK,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,CAAS,EAAA,KAAO,EAAE,CAAA;AAC1E,MAAA,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,WAAA,EAAa,CAAC,GAAA,KAAa;AACpD,QAAA,GAAA,CAAI,GAAA,CAAI;AAAA,UACP,OAAA,EAAS,IAAA;AAAA,UACT,QAAA,EAAU;AAAA,YACT,GAAG,GAAA,CAAI,QAAA;AAAA,YACP,aAAA;AAAA,YACA,SAAA;AAAA,YACA,IAAA,EAAM,WAAA;AAAA,YACN,OAAA;AAAA,YACA,SAAA,EAAW;AAAA;AACZ,SACA,CAAA;AACD,QAAA,GAAA,CAAI,SAAA,EAAU;AACd,QAAA,EAAA,CAAG,SAAA,EAAU;AACb,QAAA,gBAAA,CAAiB,OAAA,CAAQ,UAAA,CAAW,aAAA,CAAc,GAAG,CAAC,CAAA;AAAA,MACvD,CAAC,CAAA;AAAA,IACF,CAAA;AACA,IAAA,MAAM,mBAAA,GAAsB,CAAC,EAAA,EAAY,OAAA,GAAmB,IAAA,KAAS;AACpE,MAAA,MAAM,MAAA,GAAS,EAAA,CAAG,UAAA,EAAW,CAAE,IAAA,CAAK,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,CAAS,EAAA,KAAO,EAAE,CAAA;AAC1E,MAAA,MAAA,CAAO,GAAA,CAAI,EAAE,OAAA,EAAS,CAAA;AACtB,MAAA,EAAA,CAAG,SAAA,EAAU;AAAA,IACd,CAAA;AAEA,IAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,KAAiB;AACxC,MAAA,IAAI,EAAA,EAAI;AACP,QAAA,MAAM,OAAA,GAAU,GAAG,UAAA,EAAW;AAC9B,QAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,IAAA,KAAc,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,IAAA,IAAQ,CAAC,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAE,MAAA;AAAA,MAChG;AAAA,IACD,CAAA;AAEA,IAAA,MAAM,cAAc,MAAM;AACzB,MAAA,IAAI,EAAA,EAAI;AACP,QAAA,OAAO,GAAG,UAAA,EAAW;AAAA,MACtB;AAAA,IACD,CAAA;AAEA,IAAA,MAAM,MAAA,GAAcP,cAAQ,MAAM;AACjC,MAAA,OAAO;AAAA,QACN,QAAA,EAAU,UAAA;AAAA,QACV,KAAK,UAAA,CAAW,GAAA;AAAA,QAChB,OAAA,EAAS,aAAa,OAAA,GAAU;AAAA,OACjC;AAAA,IACD,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,IAAAE,gBAAU,MAAM;AACf,MAAA,IAAI,CAAC,EAAA,IAAM,UAAA,CAAW,KAAA,EAAO;AAC5B,QAAA,UAAA,EAAW;AAAA,MACZ;AACA,MAAA,OAAO,MAAM;AACZ,QAAA,IAAI,EAAA,EAAI;AACP,UAAA,EAAA,CAAG,OAAA,EAAQ;AACX,UAAA,KAAA,CAAM,IAAI,CAAA;AAAA,QACX;AAAA,MACD,CAAA;AAAA,IACD,CAAA,EAAG,CAAC,UAAA,CAAW,KAAK,CAAC,CAAA;AAErB,IAAAA,gBAAU,MAAM;AACf,MAAA,IAAI,CAAC,gBAAgB,EAAA,EAAI;AACxB,QAAA,EAAA,CAAG,mBAAA,EAAoB;AACvB,QAAA,kBAAA,EAAmB;AAAA,MACpB;AAAA,IACD,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,IAAAA,gBAAU,MAAM;AACf,MAAA,IAAI,EAAA,EAAI;AACP,QAAA,IAAI,cAAc,CAAA,EAAG;AACpB,UAAA,EAAA,CAAG,mBAAA,EAAoB;AAAA,QACxB;AAAA,MACD;AAAA,IACD,CAAA,EAAG,CAAC,EAAA,EAAI,SAAS,CAAC,CAAA;AAElB,IAAAA,gBAAU,MAAM;AACf,MAAA,IAAI,WAAW,KAAA,IAAS,UAAA,CAAW,MAAA,IAAU,CAAC,iBAAiB,OAAA,EAAS;AACvE,QAAA,gBAAA,CAAiB,UAAU,IAAI,qBAAA,CAAc,EAAE,IAAA,EAAM,YAAY,CAAA;AAAA,MAClE;AAAA,IACD,CAAA,EAAG,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA;AAErB,IAAAA,gBAAU,MAAM;AACf,MAAA,IAAI,EAAA,EAAI;AACP,QAAA,MAAMe,aAAAA,GAAe,IAAI,YAAA,CAAa,EAAE,CAAA;AACxC,QAAA,UAAA,CAAWA,aAAY,CAAA;AACvB,QAAA,IAAI,WAAA,CAAY,QAAQ,MAAA,EAAQ;AAC/B,UAAA,WAAA,CAAY,QAAQ,OAAA,CAAQ,CAAC,IAAA,KAAc,IAAA,CAAK,EAAE,CAAC,CAAA;AACnD,UAAA,WAAA,CAAY,UAAU,EAAC;AAAA,QACxB;AAAA,MACD;AAAA,IACD,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAEP,IAAAC,yBAAA,CAAoB,KAAK,OAAO;AAAA,MAC/B,WAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,cAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,kBAAA;AAAA,MACA,mBAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACD,CAAE,CAAA;AAEF,IAAA,MAAM,aAAa,MAAM;AACxB,MAAA,IAAI,OAAA,EAAS;AACZ,QAAA,OAAO,QAAQ,aAAA,EAAc;AAAA,MAC9B;AACA,MAAA,OAAO,EAAC;AAAA,IACT,CAAA;AAEA,IAAA,uBACCf,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EACX,0BAAAA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,QAAA,EAAS,CAAA,EACrB,CAAA;AAAA,EAEF;AACD,CAAA;AAEA,IAAO,oBAAA,GAAQ,YAAA;;;AC7kBf,IAAMgB,IAAAA,GAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+1CAAA,CAAA;AAyBZ,QAAA,CAAS,IAAA,CACJ,WAAA,CAAY,QAAA,CAAS,aAAA,CAAc,OAAO,CAAC,CAAA,CAC3C,WAAA,CAAY,QAAA,CAAS,cAAA,CAAeA,IAAG,CAAC,CAAA;ACzB7C,IAAM,OAAA,GAAU,CAAC,EAAE,IAAA,EAAK,KAAW;AAEjC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,OAAA,EAAS,OAAO,MAAA,GAAS;AAAA,GAC3B;AAEA,EAAA,uBACEhB,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,MAAA,EAAQ,SAAA,EAAU,aAAA,EAC5B,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,OAAA,EAAQ,CAAA,EACzB,CAAA;AAEJ,CAAA;AAEA,IAAO,eAAA,GAAQ,OAAA;;;ACff,IAAMgB,IAAAA,GAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,utCAAA,CAAA;AAwBZ,QAAA,CAAS,IAAA,CACJ,WAAA,CAAY,QAAA,CAAS,aAAA,CAAc,OAAO,CAAC,CAAA,CAC3C,WAAA,CAAY,QAAA,CAAS,cAAA,CAAeA,IAAG,CAAC,CAAA;ACxB7C,IAAM,eAAe,CAAC;AAAA,EACrB,IAAA,GAAO,KAAA;AAAA,EACP,aAAA;AAAA,EACA;AACD,CAAA,KAAkE;AACjE,EAAAjB,gBAAU,MAAM;AACf,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC9B,MAAA,aAAA,EAAc;AAAA,IACf,GAAG,GAAI,CAAA;AACP,IAAA,OAAO,MAAM;AACZ,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACnB,CAAA;AAAA,EACD,CAAC,CAAA;AACD,EAAA,OACC,wBACCC,cAAAA,CAAAiB,uBACC,QAAA,kBAAAjB,cAAAA,CAAC,SAAI,SAAA,EAAU,WAAA,EAAY,OAAA,EAAS,aAAA,EACnC,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,WAAA,EAAa,QAAA,EAAA,IAAA,EAAK,GACnC,CAAA,EACD,CAAA;AAGH,CAAA;AAEA,IAAO,oBAAA,GAAQ,YAAA;;;AC1Bf,IAAMgB,IAAAA,GAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,miLAAA,CAAA;AAoIZ,QAAA,CAAS,IAAA,CACJ,WAAA,CAAY,QAAA,CAAS,aAAA,CAAc,OAAO,CAAC,CAAA,CAC3C,WAAA,CAAY,QAAA,CAAS,cAAA,CAAeA,IAAG,CAAC,CAAA;ACvH7C,IAAM,oBAAoB,MAAM;AAC/B,EAAA,MAAM,WAAA,GAAc,OAAO,MAAA,CAAO,KAAA;AAClC,EAAA,MAAM,YAAA,GAAe,OAAO,MAAA,CAAO,MAAA;AAEnC,EAAA,IAAI,WAAA,KAAgB,GAAA,IAAO,YAAA,KAAiB,GAAA,EAAK;AAChD,IAAA,OAAO,gBAAA;AAAA,EACR,CAAA,MAAA,IAAW,WAAA,KAAgB,GAAA,IAAO,YAAA,KAAiB,GAAA,EAAK;AACvD,IAAA,OAAO,cAAA;AAAA,EACR,CAAA,MAAA,IAAW,WAAA,KAAgB,GAAA,IAAO,YAAA,KAAiB,GAAA,EAAK;AACvD,IAAA,OAAO,mBAAA;AAAA,EACR,CAAA,MAAA,IAAW,WAAA,KAAgB,GAAA,IAAO,YAAA,KAAiB,GAAA,EAAK;AACvD,IAAA,OAAO,aAAA;AAAA,EACR,CAAA,MAAA,IAAW,WAAA,KAAgB,GAAA,IAAO,YAAA,KAAiB,GAAA,EAAK;AACvD,IAAA,OAAO,cAAA;AAAA,EACR,CAAA,MAAA,IAAW,WAAA,KAAgB,GAAA,IAAO,YAAA,KAAiB,GAAA,EAAK;AACvD,IAAA,OAAO,gBAAA;AAAA,EACR,CAAA,MAAA,IAAW,WAAA,KAAgB,GAAA,IAAO,YAAA,KAAiB,GAAA,EAAK;AACvD,IAAA,OAAO,8BAAA;AAAA,EACR,CAAA,MAAA,IAAW,WAAA,KAAgB,GAAA,IAAO,YAAA,KAAiB,GAAA,EAAK;AACvD,IAAA,OAAO,gBAAA;AAAA,EACR,CAAA,MAAO;AACN,IAAA,OAAO,sBAAA;AAAA,EACR;AACD,CAAA;AAWA,IAAM,aAAA,GAAgB,CAAC,MAAA,KAAmB;AACzC,EAAA,MAAM,SAAA,GAAY,CAAC,mBAAA,EAAqB,cAAc,CAAA;AACtD,EAAA,OAAO,SAAA,CAAU,SAAS,MAAM,CAAA;AACjC,CAAA;AAWO,IAAM,aAAA,GAAgB,CAAC,QAAA,KAAwC;AACrE,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAkB;AACzC,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,QAAA,EAAS;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAkB;AAC1C,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,QAAA,CAAS,IAAA,CAAK,gBAAA,CAAiB,SAAA,EAAW,cAAc,CAAA;AACxD,EAAA,QAAA,CAAS,IAAA,CAAK,gBAAA,CAAiB,UAAA,EAAY,eAAe,CAAA;AAG1D,EAAA,OAAO,MAAM;AACZ,IAAA,QAAA,CAAS,IAAA,CAAK,mBAAA,CAAoB,SAAA,EAAW,cAAc,CAAA;AAC3D,IAAA,QAAA,CAAS,IAAA,CAAK,mBAAA,CAAoB,UAAA,EAAY,eAAe,CAAA;AAAA,EAC9D,CAAA;AACD,CAAA;AACO,IAAM,WAAW,MAAM;AAC7B,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,sBAAA,CAAuB,SAAS,EAAE,CAAC,CAAA;AACxD,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,aAAA,CAAc,cAAc,CAAA;AAErD,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAW;AAtFhC,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuFE,IAAA,MAAM,kBAAA,GAAqB,CAAA;AAC3B,IAAA,MAAM,kBAAA,GAAqB,CAAA;AAE3B,IAAA,MAAM,qBAAA,GAAwB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA;AAC3C,IAAA,MAAM,qBAAA,GAAwB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA;AAE3C,IAAA,MAAM,SAAS,qBAAA,GAAwB,kBAAA;AACvC,IAAA,MAAM,SAAS,qBAAA,GAAwB,kBAAA;AACvC,IAAA,IAAI,CAAC,aAAA,EAAe,SAAA,EAAW,gBAAgB,CAAA,CAAE,UAAS,EAAA,GAAA,CAAA,CAAE,MAAA,KAAF,IAAA,GAAA,MAAA,GAAA,EAAA,CAAU,SAAS,CAAA,EAAG;AAC/E,MAAA,CAAA,CAAE,cAAA,EAAe;AAAA,IAIlB;AACA,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,YAAA,GAAe,OAAA,CAAQ,YAAA;AACpD,MAAA,IAAI,YAAA,EAAc;AACjB,QAAA;AAAA,MACD,CAAA,MAAA,IAAA,CAAA,CAAW,EAAA,GAAA,CAAA,CAAE,MAAA,KAAF,IAAA,GAAA,MAAA,GAAA,EAAA,CAAU,SAAA,CAAU,KAAA,CAAM,GAAA,CAAA,CAAK,QAAA,CAAS,YAAA,CAAA,KAAA,CAAA,CAAiB,EAAA,GAAA,CAAA,CAAE,MAAA,KAAF,IAAA,GAAA,MAAA,GAAA,EAAA,CAAU,eAAc,mBAAA,EAAqB;AAChH,QAAA,IAAI,MAAA,GAAS,CAAA,IAAK,MAAA,GAAS,CAAA,EAAG;AAE7B,UAAA;AAAA,QACD,CAAA,MAAO;AACN,UAAA,CAAA,CAAE,cAAA,EAAe;AAAA,QAClB;AAAA,MACD,CAAA,MAAO;AACN,QAAA,IAAI,KAAK,GAAA,CAAI,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,EAAG;AACxC,UAAA,CAAA,CAAE,cAAA,EAAe;AAAA,QAClB;AAAA,MACD;AAAA,IACD;AACA,IAAA,CAAA,CAAE,cAAA,EAAe;AAAA,EAClB,CAAA;AACA,EAAA,IAAI,GAAA,EAAK;AACR,IAAA,GAAA,CAAI,gBAAA,CAAiB,aAAa,UAAU,CAAA;AAAA,EAC7C;AACD,CAAA;AAKO,IAAM,mBAAmB,CAC/B,MAAA,EACA,WACA,WAAA,EACA,QAAA,EACA,gBACA,MAAA,KACI;AAEJ,EAAA,IAAIE,iBAAM,EAAG;AACZ,IAAA,MAAA,CAAO,MAAA,EAAQ,SAAA,EAAW,WAAA,EAAa,QAAwB,CAAA;AAAA,EAChE;AAKD,CAAA;AAGA,IAAM,SAAU,CACf,MAAA,EACA,SAAA,EACA,WAAA,EACA,UACA,cAAA,KACI;AACJ,EAAA,MAAM,SAAS,iBAAA,EAAkB;AACjC,EAAA,MAAM,aAAA,GAAgB,cAAc,MAAM,CAAA;AAE1C,EAAA,IAAI,MAAA,EAAQ;AACX,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,eAAA,CAAgB,YAAA,IAAgB,SAAS,IAAA,CAAK,YAAA;AAE3E,IAAA,MAAM,iBAAiB,WAAA,GAAc,IAAA;AACrC,IAAA,IAAI,YAAY,WAAA,EAAa;AAC5B,MAAA,MAAM,cAAA,GAAkB,YAAY,qBAAA,EAAsB;AAC1D,MAAA,MAAM,EAAE,QAAO,GAAI,cAAA;AACnB,MAAA,IAAI,aAAA,EAAe;AAClB,QAAA,QAAA,CAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,cAAA,GAAiB,EAAE,CAAA,EAAA,CAAA;AAAA,MAC/C,CAAA,MAAO;AACN,QAAA,QAAA,CAAS,KAAA,CAAM,SAAA,GAAY,CAAA,WAAA,EAAc,EAAE,SAAS,EAAA,CAAG,CAAA,GAAA,CAAA;AAAA,MACxD;AAAA,IACD;AAAA,EACD,CAAA,MAAO;AACN,IAAA,IAAI,QAAA,EAAU;AACb,MAAA,IAAI,aAAA,EAAe;AAClB,QAAA,QAAA,CAAS,MAAM,MAAA,GAAS,CAAA,GAAA,CAAA;AAAA,MACzB,CAAA,MAAO;AACN,QAAA,QAAA,CAAS,MAAM,SAAA,GAAY,CAAA,eAAA,CAAA;AAAA,MAC5B;AAAA,IAED;AAAA,EACD;AACD,CAAA;;;ACpLA,IAAMF,IAAAA,GAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ugFAAA,CAAA;AAqDZ,QAAA,CAAS,IAAA,CACJ,WAAA,CAAY,QAAA,CAAS,aAAA,CAAc,OAAO,CAAC,CAAA,CAC3C,WAAA,CAAY,QAAA,CAAS,cAAA,CAAeA,IAAG,CAAC,CAAA;AC/C7C,IAAM,SAAA,GAAY;AAAA,EACjB,EAAE,SAAA,EAAW,OAAA,EAAS,UAAA,EAAY,kBAAA,EAAmB;AAAA,EACrD,EAAE,SAAA,EAAW,OAAA,EAAS,UAAA,EAAY,YAAA,EAAa;AAAA,EAC/C,EAAE,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,kBAAA,EAAmB;AAAA,EACpD,EAAE,SAAA,EAAW,KAAA,EAAO,UAAA,EAAY,gBAAA,EAAiB;AAAA,EACjD,EAAE,SAAA,EAAW,QAAA,EAAU,UAAA,EAAY,iBAAA,EAAkB;AAAA,EACrD,EAAE,SAAA,EAAW,QAAA,EAAU,UAAA,EAAY,gBAAA,EAAiB;AAAA,EACpD,EAAE,SAAA,EAAW,YAAA,EAAc,UAAA,EAAY,gBAAA,EAAiB;AAAA,EACxD,EAAE,SAAA,EAAW,OAAA,EAAS,UAAA,EAAY,gBAAA,EAAiB;AAAA,EACnD,EAAE,SAAA,EAAW,WAAA,EAAa,UAAA,EAAY,gBAAA,EAAiB;AAAA,EACvD,EAAE,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,iBAAA,EAAkB;AAAA,EACnD,EAAE,SAAA,EAAW,QAAA,EAAU,UAAA,EAAY,gBAAA;AACpC,CAAA;AAEA,IAAM,gBAAgBR,gBAAAA,CAAW,CAAC,EAAE,aAAA,EAAe,kBAAA,IAA2B,GAAA,KAAa;AAE1F,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIZ,cAAAA,CAAc,SAAA,CAAU,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAA,KAAc,KAAK,CAAC,CAAA;AAClH,EAAA,MAAM,CAAC,WAAA,EAAa,iBAAiB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACrE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,KAAc;AACpC,IAAA,MAAM,EAAE,WAAU,GAAI,gBAAA;AACtB,IAAA,MAAM,OAAA,GAAU;AAAA,MACf,IAAA,CAAK,cAAc,OAAA,IAAW,cAAA;AAAA,MAC9B,IAAA,CAAK,cAAc,SAAA,IAAa,SAAA;AAAA,MAChC;AAAA,KACD,CACE,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AACV,IAAA,OAAO,OAAA;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,gBAAA,GAAmB,CAAC,IAAA,KAAc;AACvC,IAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,yBAAyB,MAAM;AACpC,IAAA,MAAM,WAAA,GAAc,IAAI,OAAA,CAAc,CAAC,SAAS,MAAA,KAAW;AAC1D,MAAA,YAAA,CAAa,CAAC,SAAS,CAAA;AACvB,MAAA,OAAA,EAAQ;AAAA,IACT,CAAC,CAAA;AAED,IAAA,WAAA,CAAY,KAAK,MAAM;AACtB,MAAA,kBAAA,CAAmB,gBAAgB,CAAA;AAAA,IACpC,CAAC,CAAA;AAAA,EACF,CAAA;AACA,EAAA,MAAM,eAAe,MAAM;AAC1B,IAAA,OAAO,SAAA;AAAA,EACR,CAAA;AACA,EAAAmB,yBAAAA,CAAoB,KAAK,OAAO;AAAA,IAC/B,YAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACD,CAAE,CAAA;AACF,EAAA,uBACCd,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACd,QAAA,EAAA;AAAA,oBAAAD,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACA,SAAA,EAAU,gBAAA;AAAA,QACV,SAAS,MAAM;AACd,UAAA,sBAAA,EAAuB;AAAA,QACxB,CAAA;AAAA,QAEA,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAI,IAAG,GAAA,EAAK,SAAA,GAAY,SAAA,GAAY,SAAA,EAAW,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAO,EAAG;AAAA;AAAA,KAC/F;AAAA,oBACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBACb,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAc;AAC7B,MAAA,uBACCA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAW,cAAc,IAAI,CAAA;AAAA,UAE7B,KAAA,EAAO,EAAE,eAAA,EAAiB,IAAA,CAAK,UAAA,EAAW;AAAA,UAC1C,SAAS,MAAM;AACd,YAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,UACtB;AAAA,SAAA;AAAA,QAJK,IAAA,CAAK;AAAA,OAKX;AAAA,IAEF,CAAC,CAAA,EACF;AAAA,GAAA,EACD,CAAA;AAEF,CAAC,CAAA;AACD,IAAO,qBAAA,GAAQ,aAAA;AClFf,IAAM,UAAA,GAAa,CAAC,IAAA,EAAc,aAAA,GAAgB,EAAA,KAAe;AAPjE,EAAA,IAAA,EAAA;AASC,EAAA,MAAM,YAAA,GAAe,eAAA;AACrB,EAAA,MAAM,YAAU,EAAA,GAAA,IAAA,CAAK,KAAA,CAAM,YAAY,CAAA,KAAvB,mBAA0B,MAAA,KAAU,CAAA;AACpD,EAAA,MAAM,YAAY,aAAA,GAAgB,OAAA;AAClC,EAAA,IAAI,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,CAAA,EAAG,SAAS,CAAA;AAC7C,EAAA,IAAK,IAAA,CAAK,MAAA,GAAS,OAAA,KAAa,aAAA,EAAe;AAE9C,IAAA,WAAA,GAAc,WAAA,CAAY,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,WAAA;AACR,CAAA;AAEA,IAAM,QAAA,GAAWQ,iBAAW,CAAC,EAAE,YAAY,SAAA,EAAW,QAAA,EAAU,eAAA,EAAgB,EAAQ,GAAA,KAAa;AACpG,EAAA,MAAM,OAAA,GAAUb,aAAwB,IAAI,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAYA,aAAuB,IAAI,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAcA,aAA4B,IAAI,CAAA;AACpD,EAAA,MAAM,QAAA,GAAWA,aAAuB,IAAI,CAAA;AAC5C,EAAA,MAAM,WAAA,GAAcA,aAAuB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,aAAa,CAAA;AACpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,gBAAgB,CAAA;AAC3D,EAAA,MAAM,CAAC,SAAS,UAAU,CAAA,GAAIA,eAAc,EAAE,IAAA,EAAM,GAAG,GAAA,EAAK,CAAA,EAAG,OAAO,CAAA,EAAG,MAAA,EAAQ,MAAM,MAAA,EAAQ,IAAA,EAAM,OAAO,CAAA,EAAG,KAAA,EAAO,GAAG,CAAA;AACzH,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,cAAAA,CAAc;AAAA,IACvD,SAAA,EAAW,KAAA;AAAA,IACX,UAAA,EAAY,gBAAA;AAAA,IACZ,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACX,CAAA;AACD,EAAA,MAAM,gBAAA,GAAmBD,aAAY,IAAI,CAAA;AACzC,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIC,cAAAA,CAAc,EAAE,CAAA;AAClE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,MAAM;AACtD,IAAA,OAAO,OAAO,QAAA,CAAS,YAAA,CAAa,OAAA,CAAQ,cAAc,CAAW,CAAA,IAAK,IAAA;AAAA,EAC3E,CAAC,CAAA;AACD,EAAA,MAAM,eAAA,GAAkBD,aAAO,YAAY,CAAA;AAC3C,EAAAI,gBAAU,MAAM;AACf,IAAA,MAAM,QAAA,GAAW,CAAC,MAAA,KAAgB;AACjC,MAAA,IAAI,eAAA,CAAgB,YAAY,IAAA,EAAM;AACrC,QAAA,UAAA,CAAW,MAAM;AAChB,UAAA,MAAM,kBAAkB,MAAA,CAAO,OAAA;AAC/B,UAAA,eAAA,CAAgB,eAAe,CAAA;AAC/B,UAAA,eAAA,CAAgB,OAAA,GAAU,eAAA;AAC1B,UAAA,YAAA,CAAa,OAAA,CAAQ,cAAA,EAAgB,eAAA,CAAgB,QAAA,EAAU,CAAA;AAAA,QAChE,GAAG,GAAG,CAAA;AAAA,MACP;AACA,MAAA,UAAA,CAAW,MAAM;AAChB,QAAA,gBAAA;AAAA,UACC,MAAA;AAAA,UACA,SAAA,CAAU,OAAA;AAAA,UACV,WAAA,CAAY,OAAA;AAAA,UACZ,QAAA,CAAS,OAAA;AAAA,UACT,WAAA,CAAY;AAAA,SACb;AAAA,MACD,GAAG,GAAG,CAAA;AAAA,IACP,CAAA;AACA,IAAA,MAAM,eAAA,GAAkB,cAAc,QAAQ,CAAA;AAE9C,IAAA,OAAO,MAAM;AACZ,MAAA,eAAA,EAAgB;AAAA,IACjB,CAAA;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AACL,EAAAA,gBAAU,MAAM;AAEf,IAAA,MAAM,aAAa,MAAM;AACxB,MAAA,IAAI,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,OAAA,EAAS;AAC/C,QAAA,MAAM,cAAA,GAAiB,YAAY,OAAA,CAAQ,SAAA;AAC3C,QAAA,WAAA,CAAY,QAAQ,SAAA,GAAY,cAAA;AAAA,MACjC;AAAA,IACD,CAAA;AACA,IAAA,IAAI,YAAY,OAAA,EAAS;AAExB,MAAA,WAAA,CAAY,OAAA,CAAQ,gBAAA,CAAiB,QAAA,EAAU,UAAU,CAAA;AAEzD,MAAA,WAAA,CAAY,OAAA,CAAQ,gBAAA,CAAiB,OAAA,EAAS,UAAU,CAAA;AAAA,IACzD;AAGA,IAAA,OAAO,MAAM;AACZ,MAAA,IAAI,YAAY,OAAA,EAAS;AACxB,QAAA,WAAA,CAAY,OAAA,CAAQ,mBAAA,CAAoB,QAAA,EAAU,UAAU,CAAA;AAC5D,QAAA,WAAA,CAAY,OAAA,CAAQ,mBAAA,CAAoB,OAAA,EAAS,UAAU,CAAA;AAAA,MAC5D;AAAA,IACD,CAAA;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AACL,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,QAAQ,EAAC;AAEb,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,IAAI,CAAA,EAAG;AAC/B,MAAA,KAAA,GAAQ,WAAA,CAAY,MAAM,IAAI,CAAA;AAAA,IAC/B,CAAA,MAAO;AACN,MAAA,KAAA,GAAQ,WAAA,CAAY,MAAM,IAAI,CAAA;AAAA,IAC/B;AACA,IAAA,oBAAA,CAAqB,KAAK,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,SAAS,CAAA,EAAG;AACrC,MAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,IACjB,CAAA,MAAO;AACN,MAAA,SAAA,EAAU;AAAA,IACX;AAAA,EACD,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,CAACmB,iBAAM,EAAG;AACb,MAAA,IAAI,WAAA,CAAY,OAAA,IAAW,WAAA,CAAY,OAAA,EAAS;AAC/C,QAAA,WAAA,CAAY,OAAA,CAAQ,MAAM,QAAA,GAAW,QAAA;AACrC,QAAA,WAAA,CAAY,QAAQ,KAAA,CAAM,SAAA,GAAY,WAAA,CAAY,OAAA,CAAQ,MAAM,MAAA,GAAS,MAAA;AACzE,QAAA,WAAA,CAAY,QAAQ,KAAA,CAAM,QAAA,GAAW,gBAAA,CAAiB,WAAA,CAAY,OAAO,CAAA,CAAE,KAAA;AAC3E,QAAA,WAAA,CAAY,QAAQ,KAAA,EAAM;AAAA,MAC3B;AAAA,IACD,CAAA,MAAO;AACN,MAAA,IAAI,YAAY,OAAA,EAAS;AACxB,QAAA,WAAA,CAAY,QAAQ,KAAA,EAAM;AAAA,MAC3B;AAAA,IACD;AAAA,EACD,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAW;AAClC,IAAA,MAAM,UAAA,GAAa,EAAE,MAAA,CAAO,KAAA;AAC5B,IAAA,cAAA,CAAe,UAAA,CAAW,UAAU,CAAC,CAAA;AAAA,EACtC,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAW;AAChC,IAAA,IAAI,eAAA,EAAiB;AACpB,MAAA,CAAA,CAAE,cAAA,EAAe;AAAA,IAClB;AACA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACpB,MAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA;AAE7C,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,WAAA,CAAa,QAAA,CAAiB,SAAS,CAAA;AAC/D,MAAA,MAAM,EAAE,eAAc,GAAI,QAAA;AAC1B,MAAA,UAAA,CAAW,aAAa,CAAA;AAAA,IACzB;AAAA,EACD,CAAA;AACA,EAAA,MAAM,iBAAA,GAAoB,CAAC,IAAA,KAAc;AACxC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACd,CAAA;AACA,EAAA,MAAM,kBAAA,GAAqB,CAAC,gBAAA,KAA6B;AACxD,IAAA,QAAA,CAAS,gBAAgB,CAAA;AAAA,EAC1B,CAAA;AACA,EAAA,MAAM,QAAA,GAAW,CAAC,SAAA,KAAmB;AACpC,IAAA,IAAI,YAAY,OAAA,EAAS;AACxB,MAAA,WAAA,CAAY,QAAQ,KAAA,EAAM;AAAA,IAC3B;AACA,IAAA,MAAM,EAAE,SAAQ,GAAI,gBAAA;AACpB,IAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAW,GAAI,SAAA;AAClC,IAAA,MAAM,MAAA,GAAS,OAAA,GAAU,OAAA,CAAQ,YAAA,EAAa,GAAI,KAAA;AAClD,IAAA,MAAM,SAAA,GAAY;AAAA,MACjB,SAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAW,aAAA,CAAc;AAAA,KAC1B;AACA,IAAA,gBAAA,CAAiB,SAAS,CAAA;AAE1B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACZ,MAAA,UAAA,CAAW,aAAa,CAAA;AACxB,MAAA,YAAA,CAAa,UAAU,CAAA;AAAA,IACxB,CAAA,MAAO;AAGN,MAAA,UAAA,CAAW,UAAU,CAAA;AACrB,MAAA,SAAA,KAAc,WAAW,UAAA,KAAe,wBAAA,GAA2B,aAAa,MAAM,CAAA,GAAI,aAAa,MAAM,CAAA;AAAA,IAC9G;AAAA,EACD,CAAA;AACA,EAAA,MAAM,OAAA,GAAU,CAACC,SAAAA,KAAkB;AAClC,IAAA,MAAM,EAAE,OAAA,EAAAC,QAAAA,EAAS,IAAA,EAAM,SAAA,EAAAC,YAAW,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,QAAQ,KAAA,EAAO,KAAA,EAAO,eAAAC,cAAAA,EAAe,KAAA,EAAO,QAAO,GAAIH,SAAAA;AACnH,IAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAW,GAAIG,cAAAA;AAC1C,IAAA,MAAM,SAAA,GAAY,IAAA,KAAS,gCAAA,IAAWD,UAAAA,KAAc,qBAAqB,wBAAA,GAA2BA,UAAAA;AACpG,IAAA,UAAA,CAAWD,QAAO,CAAA;AAClB,IAAA,YAAA,CAAa,SAAS,CAAA;AACtB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,gBAAA,CAAiBE,cAAa,CAAA;AAC9B,IAAA,UAAA,CAAW,EAAE,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,MAAA,EAAQ,QAAQ,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,CAAA;AAC5E,IAAA,MAAM,EAAE,SAAQ,GAAI,gBAAA;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,OAAA,CAAQ,aAAa,MAAM,CAAA;AAC3B,IAAA,OAAA,CAAQ,mBAAA,CAAoB,EAAE,SAAA,EAAW,UAAA,EAAY,CAAA;AAAA,EACtD,CAAA;AAEA,EAAA,MAAM,YAAY,MAAM;AAEvB,IAAA,UAAA,CAAW,aAAa,CAAA;AACxB,IAAA,YAAA,CAAa,gBAAgB,CAAA;AAC7B,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,UAAA,CAAW,EAAE,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK,GAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAM,QAAQ,IAAA,EAAM,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,GAAG,CAAA;AAAA,EACzF,CAAA;AACA,EAAA,MAAM,QAAQ,MAAM;AACnB,IAAA,SAAA,CAAU,SAAS,EAAE,CAAA;AAAA,EACtB,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,CAAC,aAAA,KAA2B;AAC9C,IAAA,MAAM,EAAE,SAAQ,GAAI,WAAA;AACpB,IAAA,IAAI,OAAA,EAAS;AAIZ,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,gBAAA,CAAiB,OAAO,CAAA;AACrD,MAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,aAAA;AAC1B,MAAA,UAAA;AAAA,QACC,MAAA,CAAO,OAAO,OAAA,EAAS,EAAE,OAAO,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG,MAAA,EAAQ,OAAO,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,EAAG;AAAA,OACtG;AAAA,IACD;AAEA,IAAA,IAAI,aAAA,IAAiB,aAAA,CAAc,IAAA,EAAK,KAAM,EAAA,EAAI;AACjD,MAAA,MAAM,EAAE,EAAA,EAAI,UAAA,EAAY,YAAA,EAAa,GAAI,QAAA;AAGzC,MAAA,UAAA,CAAW,EAAE,WAAA,EAAa,aAAA,EAAe,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,aAAA,EAAe,EAAA,EAAI,UAAA,EAAY,YAAA,EAAc,CAAA;AAAA,IAC9H,CAAA,MAAO;AACN,MAAA,SAAA,CAAU,SAAS,EAAE,CAAA;AAAA,IACtB;AAAA,EACD,CAAA;AACA,EAAAP,yBAAAA,CAAoB,KAAK,OAAO;AAAA,IAC/B,OAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAE,CAAA;AAEF,EAAA,uBACCf,cAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAA,EAAO,QAAA,EAAU,YAAA,EAAc,GAAA,EAAK,OAAA,EAChD,QAAA,kBAAAC,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,SAAA,EAGb,QAAA,EAAA;AAAA,IAAA,eAAA,oBACCA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,KAAK,SAAA,EACjC,QAAA,EAAA;AAAA,sBAAAD,eAAC,KAAA,EAAA,EAAI,OAAA,EAAS,MAAM,KAAA,IAAS,SAAA,EAAU,OAAA,EACtC,QAAA,kBAAAA,cAAAA,CAAC,SAAI,WAAA,EAAY,WAAA,EAAY,KAAK,SAAA,EAAW,GAAA,EAAI,SAAQ,CAAA,EAC1D,CAAA;AAAA,sBACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,eAAc,QAAA,EAAA,cAAA,EAE9C;AAAA,KAAA,EACD,CAAA;AAAA,IAID,CAACkB,iBAAM,oBACNjB,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAiB,KAAA,EAAO;AAAA,MACtC,KAAA,EAAO,MAAA;AAAA,MAAQ,QAAA,EAAU,UAAA;AAAA,MAAY,WAAA,EAAa,OAAA;AAAA,MAClD,YAAA,EAAc,OAAA;AAAA,MAAS,OAAA,EAAS;AAAA,KACjC,EAEC,QAAA,EAAA;AAAA,sBAAAD,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACA,GAAA,EAAK,WAAA;AAAA,UACL,IAAA,EAAM,EAAA;AAAA,UACN,IAAA,EAAK,MAAA;AAAA,UACL,IAAA,EAAK,eAAA;AAAA,UACL,SAAA,EAAU,YAAA;AAAA,UACV,KAAA,EAAO,WAAA;AAAA,UACP,QAAA,EAAU,cAAA;AAAA,UACV,KAAA,EAAO,EAAE,KAAA,EAAO,SAAA,EAAW,OAAO,KAAA,EAAO,UAAA,EAAY,SAAS,UAAA;AAAW;AAAA,OAC1E;AAAA,sBAEAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAU,aAAA;AAAA,UACV,GAAA,EAAK,WAAA;AAAA,UACL,eAAA,EAAe,IAAA;AAAA,UACf,8BAAA,EAA8B,IAAA;AAAA,UAC9B,KAAA,EAAO;AAAA,YACN,UAAA,EAAY,OAAA;AAAA,YAAS,QAAA,EAAU,UAAA;AAAA,YAC/B,GAAA,EAAK,GAAA;AAAA,YACL,MAAA,EAAQ,IAAA;AAAA,YACR,IAAA,EAAM;AAAA,WACP;AAAA,UAGC,QAAA,EAAA,iBAAA,CAAkB,GAAA,CAAI,CAAC,IAAA,EAAc,KAAA,KAAkB;AACvD,YAAA,uBACCA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAA+B,KAAA,EAAO,EAAE,QAAA,EAAU,MAAA,EAAO,EACvE,QAAA,EAAA,IAAA,GAAO,IAAA,GAAO,OADwB,KAExC,CAAA;AAAA,UAEF,CAAC;AAAA;AAAA;AACF,KAAA,EACD,CAAA;AAAA,IAIDkB,eAAAA,EAAM,oBACLjB,eAAAA,CAAAgB,qBAAA,EAEC,QAAA,EAAA;AAAA,sBAAAjB,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACA,GAAA,EAAK,WAAA;AAAA,UACL,IAAA,EAAM,EAAA;AAAA,UACN,IAAA,EAAK,MAAA;AAAA,UACL,IAAA,EAAK,eAAA;AAAA,UACL,SAAA,EAAU,YAAA;AAAA,UACV,KAAA,EAAO,WAAA;AAAA,UACP,QAAA,EAAU,cAAA;AAAA,UACV,OAAO,EAAE,KAAA,EAAO,SAAA,EAAW,UAAA,EAAY,SAAS,UAAA;AAAW;AAAA,OAC5D;AAAA,sBAEAA,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACA,SAAA,EAAU,aAAA;AAAA,UACV,GAAA,EAAK,WAAA;AAAA,UACL,eAAA,EAAe,IAAA;AAAA,UACf,8BAAA,EAA8B,IAAA;AAAA,UAC9B,KAAA,EAAO,EAAE,UAAA,EAAY,OAAA,EAAQ;AAAA,UAG5B,QAAA,EAAA,iBAAA,CAAkB,GAAA,CAAI,CAAC,IAAA,EAAc,KAAA,KAAkB;AACvD,YAAA,uBACCA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oBACd,QAAA,EAAA,IAAA,GAAO,IAAA,GAAO,OADwB,KAExC,CAAA;AAAA,UAEF,CAAC;AAAA;AAAA;AACF,KAAA,EACD,CAAA;AAAA,oBAKFA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAK,QAAA,EAAU,SAAA,EAAU,SAC7B,QAAA,kBAAAA,cAAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACA,GAAA,EAAK,gBAAA;AAAA,QACL,aAAA,EAAe,iBAAA;AAAA,QACf;AAAA;AAAA,KACD,EACD;AAAA,GAAA,EACD,CAAA,EACD,CAAA;AAEF,CAAC,CAAA;AAED,IAAO,gBAAA,GAAQ,QAAA;ACzUf,IAAM,YAAY,CAAC,EAAE,WAAA,EAAa,UAAA,EAAY,WAAU,KAAW;AAEjE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIJ,cAAAA,EAAiB;AAC7C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,cAAAA,CAAc,EAAE,CAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,cAAAA,CAAc,EAAE,CAAA;AAE1C,EAAA,MAAM,YAAA,GAAe,CAAC,EAAE,EAAA,EAAI,WAAU,KAAW;AAC/C,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,QAAA,CAAS,SAAS,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,EAAE,OAAA,EAAS,SAAQ,KAAW;AACjD,IAAA,IAAI,cAAc,OAAA,EAAS;AACzB,MAAA,WAAA,CAAY,SAAS,OAAO,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA;AAEA,EAAAG,gBAAU,MAAM;AACd,IAAA,QAAA,CAAS,UAAU,CAAA;AACnB,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,YAAA,CAAa,UAAA,CAAW,CAAC,CAAC,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,uBACEE,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,qBAAqB,SAAA,KAAc,OAAA,GAAU,QAAA,GAAW,EAAE,CAAA,CAAA,EACxE,QAAA,EAAA;AAAA,oBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EAEX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACTA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAY,MAAA,KAAW,IAAA,CAAK,EAAA,GAAK,QAAA,GAAU,EAAA,EAAmB,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA,EAAK,QAAA,EAAA,IAAA,CAAK,YAAA,EAAA,EAAnD,IAAA,CAAK,EAA2D,CAC3H,CAAA,EAEL,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAEX,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACTA,cAAAA,CAAC,KAAA,EAAA,EAAuB,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI,CAAA,EACrD,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EAAO,KAAK,IAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,GAAA,EAAI,cAAA,EAAK,CAAA,EAAA,EADrD,IAAA,CAAK,OAEf,CACD,CAAA,EAEL;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAEA,IAAO,iBAAA,GAAQ,SAAA;ACjCf,IAAM,YAAA,GAAe,IAAI,YAAA,EAAa;AACtC,IAAM,WAAW,CAChB;AAAA,EACC,IAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,OAAA,GAAU,EAAA;AAAA,EACV,QAAA,GAAW,CAAA;AAAA,EACX,aAAa,EAAC;AAAA,EACd,YAAA;AAAA,EACA,eAAA,GAAkB,KAAA;AAAA,EAClB,gBAAgB,EAAC;AAAA,EACjB,UAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA,GAAS,OAAA;AAAA,EACT,kBAAA,GAAqB;AACtB,CAAA,EACA,GAAA,KACI;AAhCL,EAAA,IAAA,EAAA;AAiCC,EAAA,IAAA,GAAOuB,0CAAgC,IAAI,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc5B,aAAY,IAAI,CAAA;AACpC,EAAA,MAAM,gBAAgBA,YAAAA,EAAO;AAC7B,EAAA,MAAM,YAAYA,YAAAA,EAAO;AACzB,EAAA,MAAM,GAAA,GAAM,EAAA;AACZ,EAAA,MAAM,IAAA,GAAOA,aAAO,KAAK,CAAA;AACzB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,cAAAA,EAAc;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAkB,IAAI,CAAA;AACpD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAiB,UAAU,CAAA;AACrD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAkB,KAAK,CAAA;AACzD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,KAAK,CAAA;AACjD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,cAAAA,CAAmB,EAAE,CAAA;AACxD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,cAAAA,CAASc,mBAAAA,CAAAA,CAAAA,CAAU,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,QAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAgB,QAAA,KAAY,CAAA,EAAG,GAAG,CAAC,CAAA;AACtG,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAId,eAAkB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAiB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,cAAAA,CAAS,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,GAAA,EAAK,CAAA,EAAG,CAAA;AAC5E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,cAAAA,CAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAChD,EAAA,MAAM,SAAA,GAAYD,YAAAA,CAAY,EAAE,CAAA;AAChC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,cAAAA,CAAc,EAAE,CAAA;AAChD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC5C,EAAA,MAAM,gBAAA,GAAmBD,aAAY,IAAI,CAAA;AACzC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIC,cAAAA,CAAS,EAAE,CAAA;AAC/C,EAAA,MAAM,QAAA,GAAWD,aAAO,KAAK,CAAA;AAC7B,EAAA,MAAM,QAAA,GAAWA,aAAO,IAAI,CAAA;AAE5B,EAAA,MAAM,UAAU,MAAM;AACrB,IAAA,MAAM,EAAE,SAAQ,GAAS,aAAA;AACzB,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AAClB,MAAA,OAAA,CAAQ,OAAA,CAAQ,MAAM,UAAU,CAAA;AAAA,IACjC,CAAA,MAAO;AACN,MAAA,OAAA,CAAQ,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,IAC5B;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC3B,IAAA,MAAM,EAAE,SAAQ,GAAS,aAAA;AACzB,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,IAAA,IAAI,OAAA,IAAW,QAAQ,SAAA,EAAW;AACjC,MAAA,SAAA,CAAU,QAAQ,SAAS,CAAA;AAC3B,MAAA,OAAA,CAAQ,MAAA,EAAO;AACf,MAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AAClB,QAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAAA,MAChB,CAAA,MAAO;AACN,QAAA,IAAI,SAAS,OAAA,EAAS;AACrB,UAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,QACd,CAAA,MAAO;AACN,UAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,QACpB;AAAA,MACD;AAAA,IACD;AACA,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACzB,IAAA,IAAI,SAAA,EAAW;AACf,IAAA,MAAM,EAAE,SAAQ,GAAS,aAAA;AACzB,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,IAAI,SAAA,EAAW;AACd,QAAA,QAAA,EAAS;AAAA,MACV,CAAA,MAAO;AACN,QAAA,OAAA,CAAQ,MAAA,EAAO;AACf,QAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,MACd;AAAA,IACD;AAAA,EACD,CAAA;AAGA,EAAA,MAAM,YAAA,GAAe,CAAC,MAAA,EAAa,UAAA,GAAsB,KAAA,KAAU;AAClE,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,YAAA,CAAa,EAAE,CAAA;AAAA,IAChB,CAAA,MAAO;AACN,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,YAAA,CAAa,cAAc,MAAM,CAAA;AAAA,IAClC;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC7B,IAAA,IAAI,YAAA,EAAc;AACjB,MAAA,MAAM,EAAE,SAAQ,GAAS,aAAA;AACzB,MAAA,OAAA,CAAQ,MAAA,EAAO;AACf,MAAA,OAAA,CAAQ,IAAA,EAAK;AAAA,IACd,CAAA,MAAO;AACN,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACrB;AAAA,EACD,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc,CAAC,IAAA,KAAiB;AACrC,IAAA,IAAI,IAAA,KAAS,MAAA,IAAU,YAAA,EAAa,EAAG;AACvC,IAAA,IAAI,IAAA,KAAS,OAAA,IAAW,aAAA,EAAc,EAAG;AACzC,IAAA,IAAI,YAAA,EAAc;AACjB,MAAA,QAAA,EAAS;AAAA,IACV;AACA,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AAC1B,IAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,cAAA,CAAe,cAAI,CAAA;AAC5C,MAAA,IAAI,YAAY,OAAA,EAAS;AACxB,QAAA,OAAA,CAAQ,CAAA,wBAAA,EAAO,OAAO,CAAA,kBAAA,CAAK,CAAA;AAC3B,QAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,QAAA,OAAO,IAAA;AAAA,MACR;AAAA,IACD;AACA,IAAA,OAAO,KAAA;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC3B,IAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,cAAA,CAAe,oBAAK,CAAA;AAC7C,MAAA,IAAI,YAAY,QAAA,EAAU;AACzB,QAAA,OAAA,CAAQ,CAAA,wBAAA,EAAO,QAAQ,CAAA,wBAAA,CAAM,CAAA;AAC7B,QAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,QAAA,OAAO,IAAA;AAAA,MACR;AAAA,IACD;AACA,IAAA,OAAO,KAAA;AAAA,EACR,CAAA;AAGA,EAAA,MAAM,cAAc,MAAM;AACzB,IAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,OAAO,QAAQ,WAAA,EAAY;AAAA,IAC5B;AACA,IAAA,OAAO,EAAC;AAAA,EACT,CAAA;AAGA,EAAA,MAAM,QAAA,GAAW,CAAC6B,MAAAA,KAAmB;AACpC,IAAA,MAAM,EAAE,SAAQ,GAAS,aAAA;AACzB,IAAA,IAAI,OAAA,EAAS;AACZ,MAAAA,MAAAA,IAAS,OAAA,CAAQ,MAAA,CAAOA,MAAK,CAAA;AAC7B,MAAA,OAAA,CAAQ,KAAA,EAAM;AACd,MAAA,IAAI,UAAU,OAAA,EAAS;AACtB,QAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAS,SAAA;AAClC,QAAA,OAAA,CAAQ,mBAAmBA,MAAK,CAAA;AAAA,MACjC;AACA,MAAA,iBAAA,EAAkB;AAClB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACtB;AAAA,EACD,CAAA;AAGA,EAAA,MAAM,oBAAoB,MAAM;AAC/B,IAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,gBAAA,CAAiB,iGAAiG,CAAA;AACxI,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG;AACpC,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,CAAa,aAAa,CAAA;AAC1C,MAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA;AACxC,MAAA,MAAM,MAAA,GAASC,yBAAe,KAAK,CAAA;AACnC,MAAA,OAAA,CAAQ,WAAA,CAAY,IAAI,MAAM,CAAA;AAAA,IAC/B;AAAA,EACD,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc,OAAO,IAAA,EAAW,OAAA,KAAoB;AACzD,IAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,IAAA,IAAI,OAAA,IAAW,CAAC,aAAA,EAAc,EAAG;AAChC,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,WAAA,CAAY,MAAM,OAAO,CAAA;AACpD,MAAA,gBAAA,CAAiB,OAAA,CAAQ,aAAa,IAAI,CAAA;AAC1C,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,IACrB;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,OAAO,IAAA,KAAc;AACvC,IAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,EAAA,GAAK,YAAA,GAAe,YAAA;AACxC,MAAA,MAAM,OAAA,CAAQ,MAAM,CAAA,CAAE,IAAI,CAAA;AAC1B,MAAA,YAAA,CAAa,EAAE,CAAA;AAAA,IAChB;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,QAAA,KAAkB;AACxC,IAAA,MAAM,KAAA,GAAQ,UAAU,OAAA,CAAQ,SAAA,CAAU,CAAC,IAAA,KAAc,IAAA,CAAK,EAAA,KAAO,QAAA,CAAS,EAAE,CAAA;AAChF,IAAA,IAAI,QAAQ,EAAA,EAAI;AACf,MAAA,SAAA,CAAU,OAAA,CAAQ,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,IAClC,CAAA,MAAO;AACN,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAK,QAAQ,CAAA;AAAA,IAChC;AACA,IAAA,WAAA,CAAY,CAAC,GAAG,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,EACnC,CAAA;AAeA,EAAA,MAAM,aAAa,MAAM;AACxB,IAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,IAAA,OAAO,OAAA,CAAQ,YAAW,CAAE,MAAA;AAAA,EAC7B,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,EAAA,KAAe;AACjC,IAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,IAAA,EAAA,IAAM,OAAA,CAAQ,oBAAoB,EAAE,CAAA;AACpC,IAAA,YAAA,CAAa,EAAE,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAACN,SAAAA,KAAkB;AACvC,IAAA,YAAA,CAAa,MAAM,CAAA;AACnB,IAAA,WAAA,CAAYA,SAAQ,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAW;AACjC,IAAA,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,EACxB,CAAA;AACA,EAAA,MAAM,SAAS,MAAM;AACpB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EAClB,CAAA;AACA,EAAA,MAAM,UAAU,MAAM;AACrB,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACnB,CAAA;AACA,EAAA,MAAM,YAAY,MAAM;AACvB,IAAA,aAAA,CAAc,KAAK,CAAA;AACnB,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,WAAW,MAAM;AACtB,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACnB,CAAA;AAGA,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,GAAc,EAAC,KAAM;AAC9C,IAAA,IAAI,cAAc,MAAA,EAAQ;AACzB,MAAA,MAAM,IAAA,GAAO,cAAc,MAAM,CAAA;AACjC,MAAA,IAAI,KAAK,MAAA,EAAQ;AAChB,QAAA,MAAM,EAAE,SAAQ,GAAS,SAAA;AACzB,QAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,IAAA,KAAc;AAC3B,UAAA,IAAI,KAAK,SAAA,EAAW;AACnB,YAAA,OAAA,CAAQ,oBAAoB,IAAI,CAAA;AAAA,UACjC,CAAA,MAAO;AACN,YAAA,OAAA,CAAQ,mBAAmB,IAAI,CAAA;AAAA,UAChC;AAAA,QACD,CAAC,CAAA;AAAA,MACF;AAAA,IACD;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,GAAc,EAAC,KAAM;AAC3C,IAAA,MAAM,OAAY,EAAC;AACnB,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAe;AAC9B,MAAA,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAc;AAClC,QAAA,IAAI,aAAA,CAAc,QAAA,CAAS,IAAA,CAAK,EAAE,CAAA,EAAG;AACpC,UAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,UAAA,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,QACf;AAAA,MACD,CAAC,CAAA;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACR,CAAA;AAGA,EAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,GAAc,EAAC,KAAM;AAC3C,IAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,CAAC,IAAA,KAAc,KAAK,UAAU,CAAA;AAC7D,IAAA,IAAI,SAAS,MAAA,EAAQ;AACpB,MAAA,MAAM,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAc,KAAK,KAAK,CAAA,CAAE,IAAA,EAAK,CAAE,OAAO,CAAC,IAAA,KAAc,QAAQ,GAAA,CAAI,IAAA,EAAM,MAAM,CAAC,CAAA;AAC5G,MAAA,MAAM,QAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAc,KAAK,IAAI,CAAA;AAChD,MAAA,aAAA,CAAc,KAAK,CAAA;AAEnB,MAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAc;AAC5B,QAAA,aAAA,CAAc,KAAK,QAAQ,CAAA;AAAA,MAC5B,CAAC,CAAA;AAAA,IACF;AAAA,EACD,CAAA;AAGA,EAAA,MAAM,UAAU,MAAM;AACrB,IAAA,IAAI;AACH,MAAA,MAAM,MAAA,GAAS,KAAK,QAAA,CAAS,MAAA,CAAO,OAAO,CAAC,IAAA,KAAc,IAAA,CAAK,UAAA,KAAe,cAAI,CAAA;AAClF,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,KAAe;AAC9B,QAAA,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAc;AAClC,UAAA,IAAA,CAAK,KAAK,GAAA,GAAM,EAAA;AAAA,QACjB,CAAC,CAAA;AAAA,MACF,CAAC,CAAA;AAAA,IACF,CAAA,CAAA,MAAQ;AACP,MAAA,OAAA,CAAQ,IAAI,oBAAK,CAAA;AAAA,IAClB;AACA,IAAA,OAAO,IAAA;AAAA,EACR,CAAA;AAEA,EAAA,MAAM,YAAY,MAAM;AACvB,IAAA,OAAO,MAAA;AAAA,EACR,CAAA;AAEA,EAAApB,gBAAU,MAAM;AACf,IAAA,IAAI,YAAA,IAAgB,OAAO,YAAA,KAAiB,UAAA,EAAY;AACvD,MAAA,YAAA,CAAa,SAAS,CAAA;AAAA,IACvB;AAAA,EACD,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,YAAA,IAAgB,CAAC,QAAA,CAAS,OAAA,EAAS;AACtC,MAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,MAAA,OAAA,EAAQ;AAAA,IACT;AAAA,EACD,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,WAAW,KAAA,IAAS,UAAA,CAAW,UAAU,CAAC,gBAAA,CAAiB,WAAW,IAAA,EAAM;AAC/E,MAAA,gBAAA,CAAiB,UAAU,IAAI,qBAAA,CAAc,EAAE,IAAA,EAAM,YAAY,CAAA;AAAA,IAClE;AACA,IAAA,IAAI,WAAW,KAAA,EAAO;AACrB,MAAA,gBAAA,CAAiB,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,IACtC;AAAA,EACD,CAAA,EAAG,CAAC,UAAA,EAAY,IAAI,CAAC,CAAA;AAErB,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,IAAA,EAAM;AACT,MAAA,aAAA,CAAc,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,IACnC;AAAA,EACD,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,MAAA,EAAQ;AACX,MAAA,MAAM,MAAA,GAAS,OAAO,gBAAA,EAAiB;AACvC,MAAA,IAAI,CAAC,WAAW,KAAA,EAAO;AACtB,QAAA,MAAM,aAAA,GAAgB,iCAAQ,QAAA,CAAS,CAAA,CAAA;AACvC,QAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAA2B,SAAO,GAAA,CAAI,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,4BAA2B,EAAC;AACrE,QAAA,aAAA,CAAc,EAAE,KAAA,EAAO,MAAA,EAAAA,SAAQ,GAAA,EAAK,aAAA,CAAc,WAAW,CAAA;AAAA,MAC9D;AACA,MAAA,MAAA,CAAO,gBAAA,CAAiB,QAAQ,MAAM,CAAA;AACtC,MAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,OAAO,CAAA;AACxC,MAAA,MAAA,CAAO,gBAAA,CAAiB,eAAe,aAAa,CAAA;AACpD,MAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,SAAS,CAAA;AAC5C,MAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AAC1C,MAAA,OAAO,MAAM;AACZ,QAAA,MAAA,CAAO,mBAAA,CAAoB,QAAQ,MAAM,CAAA;AACzC,QAAA,MAAA,CAAO,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC3C,QAAA,MAAA,CAAO,mBAAA,CAAoB,eAAe,aAAa,CAAA;AACvD,QAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,SAAS,CAAA;AAC/C,QAAA,MAAA,CAAO,mBAAA,CAAoB,UAAU,QAAQ,CAAA;AAAA,MAC9C,CAAA;AAAA,IACD;AAAA,EACD,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA3B,gBAAU,MAAM;AACf,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,MAAM,GAAA,GAAM,CAAC,GAAG,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAc,IAAA,CAAK,EAAE,CAAA,EAAE,GAAG,aAAa,CAAA;AAClE,MAAA,YAAA,CAAa,GAAG,CAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,YAAA,CAAa,EAAE,CAAA;AAAA,IACjB;AAAA,EACH,CAAA,EAAG,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAEzB,EAAAA,gBAAU,MAAM;AACf,IAAA,IAAI,cAAc,CAAA,EAAG;AACpB,MAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AACnB,MAAA,MAAM,EAAE,SAAQ,GAAS,aAAA;AACzB,MAAA,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,KAAA,EAAO,KAAK,CAAA;AAClC,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACpB;AACA,IAAA,IAAI,SAAA,KAAc,CAAA,IAAK,SAAA,KAAc,CAAA,EAAG;AACvC,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACtB;AAAA,EACD,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAAgB,yBAAAA;AAAA,IAAoB,GAAA;AAAA,IACnB,OAAO;AAAA,MACN,UAAA;AAAA,MACA,WAAA;AAAA,MACA,OAAA;AAAA,MACA,SAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,IACA,CAAC,MAAM,MAAM;AAAA,GACd;AACA,EAAA,MAAM,gBAAgB,MAAI;AACzB,IAAA,IAAI,WAAA,EAAa;AAChB,MAAA,WAAA,CAAY,QAAQ,KAAA,EAAM;AAAA,IAC3B;AAAA,EACD,CAAA;AACA,EAAA,MAAM,aAAa,MAAK;AACvB,IAAA,IAAI,WAAA,EAAa;AAChB,MAAA,WAAA,CAAY,QAAQ,YAAA,EAAa;AAAA,IAClC;AAAA,EACD,CAAA;AAEA,EAAA,MAAM,UAAA,GAAkBlB,cAAQ,MAAM;AACrC,IAAA,IAAI,OAAA,EAAS;AACZ,MAAA,OAAO;AAAA,QACN,OAAA,EAAS,GAAA;AAAA,QACT,aAAA,EAAe;AAAA,OAChB;AAAA,IACD;AACA,IAAA,OAAO,EAAC;AAAA,EACT,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,uBACCI,eAAAA,CAAAgB,mBAAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAhB,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAU,KAAA,EAAO,EAAE,QAAO,EACxC,QAAA,EAAA;AAAA,sBAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,SAAS,MAAM;AAC7C,QAAA,YAAA,CAAa,EAAE,CAAA;AAAA,MAChB,CAAA,EACC,QAAA,kBAAAC,eAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAW,QAAQ,SAAA,KAAc,MAAA,GAAS,YAAA,GAAe,EAAE,CAAA,CAAA,EACnE,QAAA,EAAA;AAAA,wBAAAD,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EAAS,OAAA,EAAS,aAChC,QAAA,kBAAAA,cAAAA;AAAA,UAAC2B,qBAAA;AAAA,UAAA;AAAA,YACA,GAAA,EAAK,aAAA;AAAA,YACL,IAAA;AAAA,YACA,oBAAA,EAAoB,IAAA;AAAA,YACpB,wBAAA,EAAwB,IAAA;AAAA,YACxB,KAAA,EAAO,IAAA;AAAA,YACP,GAAA;AAAA,YACA,aAAA;AAAA,YAEA,WAAA,EAAa,EAAA;AAAA,YACb,kBAAA;AAAA,YACA;AAAA;AAAA,SACD,EACD,CAAA;AAAA,wBACA3B,cAAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACA,GAAA,EAAK,SAAA;AAAA,YACL,YAAA;AAAA,YACA,UAAA;AAAA,YACA,UAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,KAAA;AAAA,YACA,IAAA;AAAA,YACA,SAAA;AAAA,YACA,UAAA;AAAA,YACA;AAAA;AAAA,SAED;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBACd,QAAA,kBAAAA,cAAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACA,MAAA;AAAA,YACA,OAAA,EAAS,aAAA;AAAA,YACT,GAAA;AAAA,YACA,gBAAA;AAAA,YACA,QAAA;AAAA,YACA,KAAA;AAAA,YACA,SAAA;AAAA,YACA,YAAA;AAAA,YACA,eAAA;AAAA,YACA;AAAA;AAAA,SACD,EACD,CAAA;AAAA,wBACAA,cAAAA,CAAC,eAAA,EAAA,EAAQ,IAAA,EAAM,OAAA,EAAS;AAAA,OAAA,EACzB,CAAA,EACD,CAAA;AAAA,sBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,sBAC3BC,eAAAA,CAAC,SAAA,EAAA,EAAQ,KAAA,EAAO,UAAA,EAAY,SAAA,EAAW,CAAA,OAAA,EAAU,SAAA,KAAc,MAAA,GAAS,YAAA,GAAe,EAAE,CAAA,CAAA,EAEvF,QAAA,EAAA;AAAA,QAAA,OAAA,GAAU,qBACTA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,OAAA,EAAS,MAAM,WAAA,CAAY,MAAM,CAAA;AAAA,YACjC,iBAAA,EAAgB,iBAAA;AAAA,YAChB,gBAAA,EAAc,IAAA;AAAA,YACd,iBAAA,EAAiB,CAAA,YAAA,EAAe,UAAU,CAAA,aAAA,EAAgB,UAAU,CAAA,CAAA;AAAA,YAEpE,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,QAAA,EAAU,KAAI,MAAA,EAAO,CAAA;AAAA,8BAC/BA,cAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,cAAA,EAAE;AAAA;AAAA;AAAA,SACN;AAAA,QAID,QAAA,GAAW,qBACVC,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,OAAA,EAAS,MAAM,WAAA,CAAY,OAAO,CAAA;AAAA,YAClC,iBAAA,EAAgB,iBAAA;AAAA,YAChB,gBAAA,EAAc,IAAA;AAAA,YACd,iBAAA,EAAiB,CAAA,YAAA,EAAe,UAAU,CAAA,aAAA,EAAgB,UAAU,CAAA,CAAA;AAAA,YAEpE,QAAA,EAAA;AAAA,8BAAAD,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,WAAA,EAAa,KAAI,SAAA,EAAU,CAAA;AAAA,8BACrCA,cAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,oBAAA,EAAG;AAAA;AAAA;AAAA;AACP,OAAA,EAGH,CAAA;AAAA,MAEC,WAAW,CAAA,oBACVA,eAAC,iBAAA,EAAA,EAAU,SAAA,EAAsB,aAA0B,UAAA,EAAwB,CAAA;AAAA,MAGrF,SAAA,KAAc,MAAA,oBACdA,cAAAA,CAAC,gBAAA,EAAA,EAAS,KAAK,WAAA,EAAa,UAAA,EAAwB,SAAA,EAAsB,QAAA,EAAoB,eAAA,EAAkC;AAAA,KAAA,EAElI,CAAA;AAAA,oBACDA,cAAAA,CAAC,oBAAA,EAAA,EAAa,aAAA,EAAe,MAAM,qBAAA,CAAsB,KAAK,CAAA,EAAG,IAAA,EAAM,kBAAA,EAAoB,IAAA,EAAM,IAAA,EAAM;AAAA,GAAA,EACxG,CAAA;AAEF,CAAA;AAEA,IAAM,OAAA,GAAUQ,gBAAAA;AAIT,IAAM,MAAA,GAAS,QAAQ,QAAQ","file":"index.js","sourcesContent":["const css = `@charset \"UTF-8\";\n.editor {\n background: #000;\n width: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n.editor .padding-box {\n flex: 1;\n}\n.editor > .header {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: 11.467vw;\n padding-left: 4.4vw;\n padding-right: 3.2vw;\n box-sizing: border-box;\n position: relative;\n}\n.editor > .header > .close {\n width: 4vw;\n height: 4vw;\n}\n.editor > .header > .close img {\n width: 100%;\n height: 100%;\n}\n.editor > .header > .history-operate {\n height: 7.2vw;\n display: none;\n align-items: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.editor > .header > .history-operate img {\n width: 4.667vw;\n height: 5.067vw;\n}\n.editor > .header > .history-operate > img:last-child {\n margin-left: 8vw;\n}\n.editor > .header > .next-button {\n width: 16vw;\n height: 7.2vw;\n line-height: 7.2vw;\n background: #1677FF;\n border-radius: 6.533vw;\n text-align: center;\n font-size: 3.2vw;\n color: #fff;\n}\n.editor .text-style {\n filter: blur(10px);\n}\n.editor .editor-vessel {\n width: 100%;\n height: 100%;\n}\n.editor .main {\n width: 100%;\n height: 100%;\n margin: auto;\n position: relative;\n display: flex;\n justify-content: center;\n border-radius: 3.2vw;\n overflow: hidden;\n}\n.editor .main .vessel {\n width: 100%;\n height: 100%;\n}\n.editor .main .controls-box {\n height: 10%;\n position: absolute;\n bottom: -2%;\n width: 100%;\n border-radius: 3.2vw;\n}\n.editor .main .player-controls {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n padding: 0 1%;\n box-sizing: border-box;\n background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 100%);\n}\n.editor .main .player-controls .mr-16 {\n margin-right: 2.13vw;\n}\n.editor .main .player-controls .player-controls-toggle > img {\n display: block;\n width: 26%;\n height: 26%;\n cursor: pointer;\n}\n.editor .main .player-controls .player-controls-seekbar {\n flex: 1;\n position: relative;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container {\n height: 100%;\n user-select: none;\n touch-action: none;\n position: relative;\n cursor: pointer;\n box-sizing: border-box;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background {\n user-select: none;\n height: 1.6vw;\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n border-radius: 1vw;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-fill {\n position: absolute;\n user-select: none;\n width: 100%;\n height: 100%;\n border-radius: 1vw;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-line {\n height: 100%;\n border-radius: 1vw;\n background-color: #eeeeee;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-sign {\n width: 10px;\n position: absolute;\n top: 50%;\n margin-top: -6px;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-cirle {\n position: absolute;\n top: -0.8vw;\n width: 3.2vw;\n height: 3.2vw;\n border-radius: 50%;\n background: #eeeeee;\n}\n.editor .main .player-controls .player-controls-time {\n width: 10vw;\n color: #fff;\n}\n.editor .main .play-btn {\n position: absolute;\n bottom: 4vw;\n left: 3vw;\n width: 4.8vw;\n height: 4.8vw;\n}\n.editor .main .play-btn img {\n width: 100%;\n height: 100%;\n display: block;\n}\n.editor .main .opacity-06 {\n opacity: 0.6;\n}\n.editor .footer {\n display: flex;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n padding: 0 20.333vw 10.933vw;\n}\n.editor .footer > div {\n width: 30%;\n margin: 0 15%;\n}\n.editor .footer > div img {\n width: 6.4vw;\n height: 6.4vw;\n display: block;\n margin: auto;\n}\n.editor .footer > div p {\n font-size: 3.2vw;\n color: #fff;\n margin-top: 1.867vw;\n text-align: center;\n}\n.editor .not-show-text {\n justify-content: space-around;\n}\n.editor .editor-video-menu {\n position: fixed;\n height: 0;\n width: 100%;\n background: #1E1E1E;\n bottom: 0;\n border-radius: 8px 8px 0 0;\n transition: all 0.5s ease-in-out;\n}\n.editor .editor-video-menu.active {\n height: 38.13vh;\n}\n.editor .editor-video-menu .editor-video-menu-header {\n display: flex;\n padding: 1.6vw 1.6vw 0;\n height: 4.81vh;\n line-height: 4.81vh;\n color: rgba(255, 255, 255, 0.4);\n overflow: hidden;\n overflow-x: auto;\n}\n.editor .editor-video-menu .editor-video-menu-header::-webkit-scrollbar {\n display: none; /* 隐藏滚动条 */\n}\n.editor .editor-video-menu .editor-video-menu-header > div {\n margin: 0 3.2vw;\n white-space: nowrap;\n}\n.editor .editor-video-menu .editor-video-menu-header .active {\n color: #FFFFFF;\n}\n.editor .editor-video-menu .editor-video-menu-itmes {\n padding: 0 3.33vw;\n max-height: calc(100% - 4.81vh - 1.6vw);\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n row-gap: 3.2vw;\n column-gap: 2.6vw;\n overflow: auto;\n}\n.editor .editor-video-menu .editor-video-menu-itmes > div {\n width: 21.33vw;\n height: 21.33vw;\n background-color: #1e1e1e;\n}\n.editor .editor-video-menu .editor-video-menu-itmes > div img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJpbmRleC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUdKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUVGO0VBQ0U7O0FBR0o7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdKO0VBQ0U7O0FBR0Y7RUFDRTtFQUVBOztBQUdGO0VBR0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBRUY7RUFDRTtFQUVBO0VBQ0E7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFHQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdKO0VBQ0U7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBS1I7RUFDRTtFQUNBOztBQUdKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTs7QUFHSjtFQUNFOztBQUtKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUtOO0VBQ0U7O0FBR0Y7RUFDRTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFFRjtFQUNFO0VBQ0E7O0FBRUY7RUFDRTs7QUFHSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLmVkaXRvcntcclxuICBiYWNrZ3JvdW5kOiAjMDAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gIC5wYWRkaW5nLWJveCB7XHJcbiAgICBmbGV4OiAxO1xyXG4gIH1cclxuICAvLyDpobbpg6hcclxuICAmPi5oZWFkZXJ7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiAxMS40Njd2dztcclxuICAgIHBhZGRpbmctbGVmdDogNC40dnc7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAzLjJ2dztcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAmPi5jbG9zZXtcclxuICAgICAgd2lkdGg6IDR2dztcclxuICAgICAgaGVpZ2h0OiA0dnc7XHJcbiAgICAgIGltZ3tcclxuICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICY+Lmhpc3Rvcnktb3BlcmF0ZXtcclxuICAgICAgaGVpZ2h0OiA3LjJ2dztcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBsZWZ0OiA1MCU7XHJcbiAgICAgIHRvcDogNTAlO1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpO1xyXG4gICAgICBpbWd7XHJcbiAgICAgICAgd2lkdGg6IDQuNjY3dnc7XHJcbiAgICAgICAgaGVpZ2h0OiA1LjA2N3Z3O1xyXG4gICAgICB9XHJcbiAgICAgICY+aW1nOmxhc3QtY2hpbGR7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDh2dztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgJj4ubmV4dC1idXR0b257XHJcbiAgICAgIHdpZHRoOiAxNnZ3O1xyXG4gICAgICBoZWlnaHQ6IDcuMnZ3O1xyXG4gICAgICBsaW5lLWhlaWdodDogNy4ydnc7XHJcbiAgICAgIGJhY2tncm91bmQ6ICMxNjc3RkY7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDYuNTMzdnc7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgZm9udC1zaXplOiAzLjJ2dztcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC50ZXh0LXN0eWxle1xyXG4gICAgZmlsdGVyOmJsdXIoMTBweClcclxuICB9XHJcblxyXG4gIC5lZGl0b3ItdmVzc2VsIHtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgLy8gcGFkZGluZy10b3A6IDMuMnZ3O1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gIH1cclxuICAvL3BsYXllcuS4jueUu+W4g1xyXG4gIC5tYWlue1xyXG4gICAgLy8gd2lkdGg6IDgxLjQ2N3Z3O1xyXG4gICAgLy8gaGVpZ2h0OiAxNDQuOHZ3O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBtYXJnaW46IGF1dG87XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBib3JkZXItcmFkaXVzOiAzLjJ2dztcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAudmVzc2VsIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTAwJTtcclxuICAgIH1cclxuICAgIC5jb250cm9scy1ib3gge1xyXG4gICAgICBoZWlnaHQ6IDEwJTtcclxuICAgICAgLy8gaGVpZ2h0OiAxMnZ3O1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogLTIlO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMy4ydnc7XHJcbiAgICB9XHJcbiAgICAucGxheWVyLWNvbnRyb2xzIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgcGFkZGluZzogMCAxJTtcclxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KCAxODBkZWcsIHJnYmEoMCwwLDAsMCkgMCUsIHJnYmEoMCwwLDAsMC42KSAxMDAlKTtcclxuICAgICAgLm1yLTE2IHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDIuMTN2dztcclxuICAgICAgfVxyXG4gICAgICAucGxheWVyLWNvbnRyb2xzLXRvZ2dsZSB7XHJcbiAgICAgICAgPmltZyB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgIHdpZHRoOiAyNiU7XHJcbiAgICAgICAgICBoZWlnaHQ6IDI2JTtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLnBsYXllci1jb250cm9scy1zZWVrYmFyIHtcclxuICAgICAgICBmbGV4OiAxO1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAuc2Vla2Jhci1jb250YWluZXIge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICB0b3VjaC1hY3Rpb246IG5vbmU7XHJcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgLnNlZWtiYXItYmFja2dyb3VuZCB7XHJcbiAgICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEuNnZ3O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xyXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxdnc7XHJcbiAgICAgICAgICAgIC5zZWVrYmFyLWZpbGwge1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMXZ3O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5zZWVrYmFyLWxpbmUge1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxdnc7XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAuc2Vla2Jhci1zaWduIHtcclxuICAgICAgICAgICAgICB3aWR0aDogMTBweDtcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTZweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAuc2Vla2Jhci1jaXJsZSB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgIHRvcDogLTAuOHZ3O1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAzLjJ2dztcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDMuMnZ3O1xyXG4gICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZWVlZWVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC5wbGF5ZXItY29udHJvbHMtdGltZSB7XHJcbiAgICAgICAgd2lkdGg6IDEwdnc7XHJcbiAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5wbGF5LWJ0biB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiA0dnc7XHJcbiAgICAgIGxlZnQ6IDN2dztcclxuICAgICAgd2lkdGg6IDQuOHZ3O1xyXG4gICAgICBoZWlnaHQ6IDQuOHZ3O1xyXG4gICAgICBpbWcge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLm9wYWNpdHktMDYge1xyXG4gICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL+W6lemDqFxyXG4gIC5mb290ZXJ7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBwYWRkaW5nOiAwIDIwLjMzM3Z3IDEwLjkzM3Z3O1xyXG4gICAgJj5kaXZ7XHJcbiAgICAgIHdpZHRoOiAzMCU7XHJcbiAgICAgIG1hcmdpbjogMCAxNSU7XHJcbiAgICAgIGltZ3tcclxuICAgICAgICB3aWR0aDogNi40dnc7XHJcbiAgICAgICAgaGVpZ2h0OiA2LjR2dztcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICBtYXJnaW46IGF1dG87XHJcbiAgICAgIH1cclxuICAgICAgcHtcclxuICAgICAgICBmb250LXNpemU6IDMuMnZ3O1xyXG4gICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuODY3dnc7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAubm90LXNob3ctdGV4dHtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG4gIH1cclxuXHJcbiAgLmVkaXRvci12aWRlby1tZW51IHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIC8vIGhlaWdodDogMzguMTN2aDtcclxuICAgIGhlaWdodDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgYmFja2dyb3VuZDogIzFFMUUxRTtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwO1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZS1pbi1vdXQ7ICBcclxuICAgICYuYWN0aXZlIHtcclxuICAgICAgaGVpZ2h0OiAzOC4xM3ZoO1xyXG4gICAgfVxyXG4gICAgLmVkaXRvci12aWRlby1tZW51LWhlYWRlciB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIHBhZGRpbmc6IDEuNnZ3IDEuNnZ3IDA7XHJcbiAgICAgIGhlaWdodDogNC44MXZoO1xyXG4gICAgICBsaW5lLWhlaWdodDogNC44MXZoO1xyXG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQwKTtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgb3ZlcmZsb3cteDogYXV0bztcclxuICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IC8qIOmakOiXj+a7muWKqOadoSAqL1xyXG4gICAgICB9XHJcbiAgICAgID5kaXYge1xyXG4gICAgICAgIG1hcmdpbjogMCAzLjJ2dztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICB9XHJcbiAgICAgIC5hY3RpdmUge1xyXG4gICAgICAgIGNvbG9yOiAjRkZGRkZGO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuZWRpdG9yLXZpZGVvLW1lbnUtaXRtZXMge1xyXG4gICAgICBwYWRkaW5nOiAwIDMuMzN2dztcclxuICAgICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNC44MXZoIC0gMS42dncpO1xyXG4gICAgICBkaXNwbGF5OiBncmlkO1xyXG4gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpO1xyXG4gICAgICByb3ctZ2FwOiAzLjJ2dztcclxuICAgICAgY29sdW1uLWdhcDogMi42dnc7XHJcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gICAgICA+ZGl2IHtcclxuICAgICAgICB3aWR0aDogMjEuMzN2dztcclxuICAgICAgICBoZWlnaHQ6IDIxLjMzdnc7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzFlMWUxZTtcclxuICAgICAgICBpbWcge1xyXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIl19 */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","export const backIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/9f7e2aae-06a3-4f46-8601-a53dd2b70b7b.png\";\r\nexport const closeIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/c5dc68e4-2db5-4ea6-ada6-191bb9128a4c.png\";\r\nexport const nextIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/ba4e4ece-ec5e-43a2-9a21-08a9a648a5f2.png\";\r\nexport const wordIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/6ba37577-5fef-4722-9a61-f7ab5e5790ad.png\";\r\nexport const emotionIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/a6bb2684-4f26-481a-81dd-90500c1f7544.png\";\r\nexport const playIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/9c6d947f-071a-4875-9546-fd0dce371928.png\";\r\nexport const pauseIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/65076da8-c1e4-42a9-90af-839a2e42ace7.png\";\r\nexport const iconText2 = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/f50a1be1-512b-49f5-8be5-61b85c7cbb66.png\";\r\nexport const iconText1 = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/f9071de5-48d0-42ca-8b9a-13ae19ed48e3.png\";\r\nexport const signIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/bcbd9a71-ec40-4c4d-ba03-29c2bec2bf89.png\";","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\r\nimport { interpolate } from \"remotion\"\r\nimport { signIcon } from \"../utils/const\"\r\n\r\nconst getFrameFromX = (\r\n\tclientX: number,\r\n\tdurationInFrames: number,\r\n\twidth: number,\r\n) => {\r\n\tconst pos = clientX;\r\n\tconst frame = Math.round(\r\n\t\tinterpolate(pos, [0, width], [0, durationInFrames - 1], {\r\n\t\t\textrapolateLeft: 'clamp',\r\n\t\t\textrapolateRight: 'clamp',\r\n\t\t}),\r\n\t);\r\n\treturn frame;\r\n};\r\nconsole.log(2222)\r\nconst SeekBar = ({ player, vmmlRef, frame, durationInFrames, intoEdit, setDragState, signList }: any ) => {\r\n\tconst containerRef = useRef<HTMLDivElement>(null);\r\n const [dragging, setDragging] = useState<any>({\r\n dragging: false,\r\n })\r\n\r\n const fillStyle = useMemo(() => {\r\n return {\r\n width: `${(frame / (durationInFrames - 1)) * 100}%`,\r\n }\r\n }, [frame, durationInFrames]);\r\n\r\n const cirleStyle = useMemo(() => {\r\n return {\r\n left: `calc(${(frame / (durationInFrames - 1)) * 100}% - 1.6vw)`,\r\n }\r\n }, [frame, durationInFrames])\r\n\r\n const onPointerDown = useCallback((e: React.PointerEvent) => {\r\n if (e.button !== 0) {\r\n return;\r\n }\r\n const { left, width } = containerRef.current?.getBoundingClientRect() as any;\r\n const _frame = getFrameFromX(\r\n e.clientX - left,\r\n durationInFrames,\r\n width,\r\n );\r\n setDragState(1);\r\n setDragging({\r\n dragging: true,\r\n wasPlaying: player.isPlaying(),\r\n });\r\n player.pause();\r\n player.seekTo(_frame);\r\n vmmlRef.current && vmmlRef.current.onSeekStart();\r\n }, [player, durationInFrames]);\r\n\r\n const onPointerMove = useCallback((e: PointerEvent) => {\r\n if (!dragging.dragging) {\r\n return;\r\n }\r\n const { left, width } = containerRef.current?.getBoundingClientRect() as any;\r\n const _frame = getFrameFromX(\r\n e.clientX - left,\r\n durationInFrames,\r\n width,\r\n );\r\n setDragState(2);\r\n player.seekTo(_frame);\r\n }, [player, dragging.dragging, durationInFrames]);\r\n\r\n const onPointerUp = (e: any) => {\r\n setDragging({\r\n\t\t\tdragging: false,\r\n\t\t});\r\n if (!dragging.dragging) {\r\n return;\r\n }\r\n setDragState(3);\r\n intoEdit();\r\n vmmlRef.current && vmmlRef.current.onSeekEnd();\r\n };\r\n\r\n const onClickSign = (sign: any) => {\r\n player.pause();\r\n player.seekTo(sign.inFrame);\r\n vmmlRef.current && vmmlRef.current.onSeekStart();\r\n setTimeout(() => {\r\n setDragState(4);\r\n intoEdit(sign.inFrame);\r\n vmmlRef.current && vmmlRef.current.onSeekEnd();\r\n }, 100)\r\n }\r\n\r\n useEffect(() => {\r\n if (!dragging.dragging) {\r\n\t\t\treturn;\r\n\t\t}\r\n const body = document.querySelector(\"body\");\r\n if (body) {\r\n body.addEventListener('pointermove', onPointerMove);\r\n body.addEventListener('pointerup', onPointerUp);\r\n return () => {\r\n body.removeEventListener('pointermove', onPointerMove);\r\n body.removeEventListener('pointerup', onPointerUp);\r\n };\r\n }\r\n\t}, [dragging.dragging, onPointerMove, onPointerUp]);\r\n\r\n return (\r\n <div ref={containerRef} className=\"seekbar-container\">\r\n <div className=\"seekbar-background\">\r\n <div className=\"seekbar-fill\" onPointerDown={onPointerDown}></div>\r\n <div className=\"seekbar-line\" style={fillStyle}></div>\r\n <div className=\"seekbar-signs\">\r\n {signList.map((item: any, index: number) => (\r\n <img key={index} onClick={() => onClickSign(item)} style={{ left: `calc(${item.inFrame / durationInFrames * 100}% - 6px)` }} className=\"seekbar-sign\" src={signIcon} alt=\"\" />\r\n ))}\r\n </div>\r\n <div className=\"seekbar-cirle\" style={cirleStyle} onPointerDown={onPointerDown} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default SeekBar\r\n","import { formatTime } from \"@versa_ai/vmml-utils\"\r\nimport { pauseIcon, playIcon } from \"../utils/const\"\r\nimport SeekBar from \"./SeekBar\"\r\n\r\nconst Controls = ({ player, vmmlRef, frame, fps, durationInFrames, intoEdit, isPlaying, setDragState, onControlsClick, signList }: any) => {\r\n const onClickToggle = (e: any) => {\r\n if (isPlaying) {\r\n intoEdit();\r\n } else {\r\n onControlsClick();\r\n }\r\n }\r\n \r\n return (\r\n <div className=\"player-controls\">\r\n <div className=\"player-controls-toggle mr-16 opacity-06\" onClick={onClickToggle}>\r\n { isPlaying ? <img src={pauseIcon} alt=\"暂停\" /> : <img src={playIcon} alt=\"播放\" /> }\r\n </div>\r\n <div className=\"player-controls-time opacity-06\">\r\n {formatTime(frame / fps)}\r\n </div>\r\n <div className=\"player-controls-seekbar mr-16\">\r\n <SeekBar player={player} vmmlRef={vmmlRef} frame={frame} durationInFrames={durationInFrames} intoEdit={intoEdit} setDragState={setDragState} signList={signList} />\r\n </div>\r\n <div className=\"player-controls-time opacity-06\">\r\n {formatTime(durationInFrames / fps)}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Controls","import type { fabric } from \"fabric\";\r\n\r\n//重写Canvas类的方法\r\nexport default class HistoryClass {\r\n\thistoryUndo: any[];\r\n\thistoryRedo: any[];\r\n\tcacheAction: any[];\r\n\tcanvas: fabric.Canvas | any;\r\n\thistoryProcessing: boolean;\r\n\teditorInstance: any[];\r\n\tactionTypeList: any[];\r\n\tconstructor(canvas?: fabric.Canvas) {\r\n\t\tthis.canvas = canvas;\r\n\t\tthis.historyUndo = [];\r\n\t\tthis.historyRedo = [];\r\n\t\tthis.cacheAction = [];\r\n\t\tthis.editorInstance = [];\r\n\t\tthis.actionTypeList = [];\r\n\t\tthis.historyProcessing = false;\r\n\t\tthis.initHistory();\r\n\t}\r\n\r\n\tinitHistory() {\r\n\t\tthis.historyUndo = [];\r\n\t\tthis.historyRedo = [];\r\n\t\tthis.cacheAction = [];\r\n\t\tthis.canvas && this.canvas.on(this._historyEvents());\r\n\t}\r\n\t_historyNext() {\r\n\t\tconst keys = [\r\n\t\t\t\"id\",\r\n\t\t\t\"gradientAngle\",\r\n\t\t\t\"selectable\",\r\n\t\t\t\"hasControls\",\r\n\t\t\t\"linkData\",\r\n\t\t\t\"editable\",\r\n\t\t\t\"extensionType\",\r\n\t\t\t\"extension\",\r\n\t\t\t\"clipData\",\r\n\t\t];\r\n\t\tconst getJson = this.canvas && this.canvas.toJSON(keys);\r\n\t\treturn getJson;\r\n\t}\r\n\r\n\t_historyEvents() {\r\n\t\treturn {\r\n\t\t\t\"object:added\": (e: any) => this._historySaveAction(e, \"object:added\"),\r\n\t\t\t\"object:removed\": (e: any) => this._historySaveAction(e, \"object:removed\"),\r\n\t\t\t\"object:modified\": (e: any) => this._historySaveAction(e, \"object:modified\"),\r\n\t\t\t\"object:skewing\": (e: any) => this._historySaveAction(e, \"object:skewing\"),\r\n\t\t\t\"object:muteChange\": (e: any) => this._historySaveAction(e, \"object:muteChange\"),\r\n\t\t};\r\n\t}\r\n\t_historySaveAction(e: any, type: string) {\r\n\t\tif (this.historyProcessing) return;\r\n\t\tthis.actionTypeList.length < 1 && this.actionTypeList.push({ type });\r\n\t\tif (!e || (e.target && !e.target.excludeFromExport)) {\r\n\t\t\tconst json = this._historyNext();\r\n\t\t\tthis.cacheAction.push(json);\r\n\t\t\tif (this.cacheAction.length > 1) {\r\n\t\t\t\tconst cacheItem = this.cacheAction.shift();\r\n\t\t\t\t//this.historyUndo.push(cacheItem);\r\n\t\t\t}\r\n\t\t\tthis.historyRedo = [];\t\t\t\r\n\t\t\t// console.log(\"_historySaveAction\", this.historyUndo);\r\n\t\t\tthis.canvas.fire(\"history:appnd\", { json: json });\r\n\t\t}\r\n\t}\r\n\r\n\tundo(callback?: any) {\r\n\t\t// undo进程会渲染新的对象的状态\r\n\t\t// 因此,object:added和object:modified事件将再次触发\r\n\t\t// 设置一个flag用来忽略这些事件\r\n\t\tthis.historyProcessing = true;\r\n\t\tconst history = this.historyUndo.pop();\r\n\t\tif (history) {\r\n\t\t\t// this.historyRedo.push(this._historyNext());\r\n\t\t\tthis._loadHistory(history, \"history:undo\", callback);\r\n\t\t} else {\r\n\t\t\tthis.historyProcessing = false;\r\n\t\t}\r\n\t}\r\n\tredo(callback?: any) {\r\n\t\t// undo进程会渲染新的对象的状态\r\n\t\t// 因此,object:added和object:modified事件将再次触发\r\n\t\t// 设置一个flag用来忽略这些事件\r\n\t\tthis.historyProcessing = true;\r\n\t\tconst history = this.historyRedo.pop();\r\n\t\tif (history) {\r\n\t\t\t//每一个redo action实际上是一个新的action到undo中\r\n\t\t\tthis.historyUndo.push(this._historyNext());\r\n\t\t\tthis._loadHistory(history, \"history:redo\", callback);\r\n\t\t} else {\r\n\t\t\tthis.historyProcessing = false;\r\n\t\t}\r\n\t}\r\n\t_loadHistory(history: string | Record<string, any>, event: string, callback: () => void) {\r\n\t\tthis.canvas &&\r\n\t\t\tthis.canvas.loadFromJSON(history, () => {\r\n\t\t\t\tthis.canvas.renderAll();\r\n\t\t\t\tthis.canvas.fire(event);\r\n\t\t\t\tthis.historyProcessing = false;\r\n\r\n\t\t\t\tif (callback && typeof callback === \"function\") callback();\r\n\t\t\t});\r\n\t}\r\n\t_historyDispose() {\r\n\t\tthis.canvas.off(this._historyEvents());\r\n\t}\r\n\tclearHistory() {\r\n\t\tthis.historyUndo = [];\r\n\t\tthis.historyRedo = [];\r\n\t\tthis.cacheAction = [];\r\n\t\tthis.canvas.fire(\"history:clear\");\r\n\t}\r\n\tcanUndo() {\r\n\t\treturn this.historyUndo.length > 0;\r\n\t}\r\n\r\n\tcanRedo() {\r\n\t\treturn this.historyRedo.length > 0;\r\n\t}\r\n\t//离开画布保存上一次编辑的状态\r\n\tonCanvasRoute(canvas: fabric.Canvas) {\r\n\t\tthis.editorInstance.push(canvas);\r\n\t}\r\n\tgetActionType() {\r\n\t\treturn this.actionTypeList;\r\n\t}\r\n}\r\n","import { v4 as uuidv4 } from \"uuid\";\r\nimport { hexToArgb, rgbaToArgb, getFontSize } from \"@versa_ai/vmml-utils\";\r\nclass VmmlConverter {\r\n\tprivate vmml: any;\r\n\tprivate canvasSize: any;\r\n\tprivate tracks: any;\r\n\tprivate heightScale: any;\r\n\tprivate widthScale: any;\r\n\tprivate fontSize: number;\r\n\r\n\t/**\r\n\t * VmmlConverter 构造函数\r\n\t * @param vmml - VMML 模板数据\r\n\t * @param canvasSize - 画布尺寸\r\n\t */\r\n\tconstructor({ vmml, canvasSize }: { vmml: any; canvasSize: any }) {\r\n\t\tconst { width, height } = vmml.template.dimension;\r\n\t\tthis.vmml = vmml;\r\n\t\tthis.canvasSize = canvasSize;\r\n\t\tthis.tracks = vmml.template.tracks;\r\n\t\tthis.fontSize = getFontSize(width, height);\r\n\r\n\t\t// 计算宽高比\r\n\t\tthis.heightScale = height / canvasSize.height;\r\n\t\tthis.widthScale = width / canvasSize.width;\r\n\t}\r\n\r\n\t//更新位置\r\n\tprivate setPosParam(fObj: any): object {\r\n\t\tconsole.log(\"setPosParam fObj\",fObj)\r\n\t\tconst {\r\n\t\t\tclipData: { type },\r\n\t\t\tcenterPoint,\r\n\t\t\tscaleX,\r\n\t\t\tscaleY,\r\n\t\t\tangle,\r\n\t\t\twidth,\r\n\t\t\theight,\r\n\t\t} = fObj;\r\n\t\tlet _scaleX, _scaleY, _centerX, _centerY;\r\n\t\r\n\t\tif (type === \"文字\") {\r\n\t \t// const [rect, textbox] = fObj.objects;\r\n\t\t\t_scaleX = (22 * scaleX * this.widthScale) / this.fontSize;\r\n\t\t\t_scaleY = (22 * scaleY * this.heightScale) / this.fontSize;\r\n\t\t\t_centerX = centerPoint.x / this.canvasSize.width; \r\n\t\t\t_centerY = centerPoint.y / this.canvasSize.height;\r\n\t\t\t// fObj.clipData.lineSpacing = 22 * textbox.lineHeight * scaleY * this.heightScale;\r\n\t\t} else if (type === \"表情包\") {\r\n\t\t\t_scaleX = (width * scaleX * this.widthScale) / width;\r\n\t\t\t_scaleY = (height * scaleY * this.heightScale) / height;\r\n\t\t\t_centerX = centerPoint.x / this.canvasSize.width;\r\n\t\t\t_centerY = centerPoint.y / this.canvasSize.height;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tscaleX: _scaleX,\r\n\t\t\tscaleY: _scaleY,\r\n\t\t\tcenterX: _centerX,\r\n\t\t\tcenterY: _centerY,\r\n\t\t\trotationZ: angle,\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * 转换 TextClip\r\n\t * @param fObj - 画布fObj\r\n\t */\r\n\tpublic addTextClip(fObj: any): void {\r\n\t\tconsole.log(\"addTextClip fObj\", fObj);\r\n\t\tconst posParam = this.setPosParam(fObj);\r\n\r\n\t\t// const [rect, textbox] = fObj.objects;\r\n\t\t// const { clipData: { id, inPoint, lineSpacing }} = fObj;\r\n\t\tconst { clipData: { id, inPoint, text, textColor, bgColor}} = fObj;\r\n\t\tconst {template:{duration}} = this.vmml;\r\n\t\tconst clips = [];\r\n\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === \"文字\");\r\n\r\n\t\tconst tClipData = {\r\n\t\t\tduration,\r\n\t\t\toriginDuration: duration,\r\n\t\t\tstart: 0,\r\n\t\t\tend: duration,\r\n\t\t\tinPoint,\r\n\t\t\tid,\r\n\t\t\ttype: 202,\r\n\t\t\tfObj,\r\n\t\t\ttextClip: {\r\n\t\t\t\tlineSpacing: 0,\r\n\t\t\t\talignType: 0,\r\n\t\t\t\tfontCode: '',\r\n\t\t\t\tbold: false,\r\n\t\t\t\tdimension: {\r\n\t\t\t\t\theight: 282,\r\n\t\t\t\t\twidth: 825,\r\n\t\t\t\t},\r\n\t\t\t\tposParam,\r\n\t\t\t\tbackgroundColor: this.toARGB(bgColor),\r\n\t\t\t\ttextContent: text,\r\n\t\t\t\ttextColor: this.toARGB(textColor),\r\n\t\t\t\t// fontFamily:'unset'\r\n\t\t\t},\r\n\t\t};\r\n\t\tif (!editorTrack) {\r\n\t\t\tclips.push(tClipData);\r\n\t\t\tthis.tracks.push({\r\n\t\t\t\tclips,\r\n\t\t\t\tdescription: \"editorText\",\r\n\t\t\t\tid: uuidv4(),\r\n\t\t\t\ttype: 2,\r\n\t\t\t\teditorType: \"文字\",\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\teditorTrack.clips.push(tClipData);\r\n\t\t}\r\n\r\n\t\tconsole.log(\"addTextClip 最终vmml\", this.vmml);\r\n\t}\r\n\r\n\t/**\r\n\t * 转换 VideoClip\r\n\t * @param fObj - 画布fObj\r\n\t */\r\n\tpublic addVideoClip(fObj: any): void {\r\n\t\tconsole.log(\"addVideoClip fObj\", fObj);\r\n\t\tconst clips = [];\r\n\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === \"表情包\");\r\n\t\tconst clipData = this.loadClipData(fObj);\r\n\r\n\t\tif (!editorTrack) {\r\n\t\t\tconst index = this.tracks.findIndex((track: any) => track.editorType === \"文字\");\r\n\t\t\tfor (const item of clipData) {\r\n\t\t\t\tif (item !== null) {\r\n\t\t\t\t\tclips.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst data = {\r\n\t\t\t\tclips,\r\n\t\t\t\tdescription: \"editorEmoji\",\r\n\t\t\t\tid: uuidv4(),\r\n\t\t\t\ttype: 1,\r\n\t\t\t\teditorType: \"表情包\",\r\n\t\t\t};\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tthis.tracks.splice(index, 0, data);\r\n\t\t\t} else {\r\n\t\t\t\tthis.tracks.push(data);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfor (const item of clipData) {\r\n\t\t\t\tif (item !== null) {\r\n\t\t\t\t\teditorTrack.clips.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconsole.log(\"addVideoClip 最终vmml\", this.vmml);\r\n\t}\r\n\r\n\t/**\r\n\t * 更新 clip\r\n\t * @param fObj - 画布fObj\r\n\t */\r\n\tpublic updateClip(fObj: any) {\r\n\t\tconsole.log(\"updateClip fObj\", fObj);\r\n\t\tconst posParam = this.setPosParam(fObj);\r\n\t\tconst {\r\n\t\t\t// clipData: { id, type, lineSpacing },\r\n\t\t\tclipData: { id, type, lineSpacing, originClip },\r\n\t\t} = fObj;\r\n\t\tlet existClip = null;\r\n\t\t// 模板内可编辑的clip\r\n\t\tif (originClip) {\r\n\t\t\texistClip = originClip;\r\n\t\t} else {\r\n\t\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === type);\r\n\t\t\texistClip = (editorTrack?.clips || []).find((clip: any) => clip.id === id);\r\n\t\t}\r\n\t\t\r\n\t\tif (existClip) {\r\n\t\t\t//修改现有clip的代码\r\n\t\t\t!originClip && (existClip.fObj = fObj);\r\n\t\t\tif (type === \"表情包\") {\r\n\t\t\t\texistClip.videoClip.posParam = posParam;\r\n\t\t\t} else if (type === \"文字\") {\r\n\t\t\t\tconst { clipData: { text, textColor, bgColor}} = fObj;\r\n\t\t\t\tconst scale = this.fontSize / 22;\r\n\t\t\t\texistClip.textClip = {\r\n\t\t\t\t\t...existClip.textClip,\r\n\t\t\t\t\tposParam,\r\n\t\t\t\t\tbackgroundColor: this.toARGB(bgColor),\r\n\t\t\t\t\ttextContent: text,\r\n\t\t\t\t\ttextColor: this.toARGB(textColor),\r\n\t\t\t\t\tdimension: {\r\n\t\t\t\t\t\twidth: Math.floor(fObj.width * scale),\r\n\t\t\t\t\t\theight: Math.floor(fObj.height * scale),\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconsole.log(\"updateClip 最终vmml\", this.vmml);\r\n\t}\r\n\r\n\t/**\r\n\t * 删除 Clip\r\n\t * @param id - 实例 id\r\n\t * @param type - 实例 类型\r\n\t */\r\n\tpublic deleteClip({ id, type, originClip }: { id: string; type: string, originClip: any }): void {\r\n\t\t// 模板内的可编辑clip\r\n\t\tif (originClip) {\r\n\t\t\toriginClip.duration = 0;\r\n\t\t} else {\r\n\t\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === type);\r\n\t\t\tconst index = editorTrack.clips.findIndex((item: any) => item.id === id);\r\n\t\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tif (editorTrack.clips[index + 1] && editorTrack.clips[index + 1].audioClip) {\r\n\t\t\t\t\teditorTrack.clips.splice(index, 2); // 删除当前元素及下一个 audio 元素\r\n\t\t\t\t} else {\r\n\t\t\t\t\teditorTrack.clips.splice(index, 1); // 只删除当前元素\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\r\n\t\t\tif (editorTrack.clips.length === 0) {\r\n\t\t\t\tconst trackIndex = this.tracks.indexOf(editorTrack);\r\n\t\t\t\tif (trackIndex !== -1) {\r\n\t\t\t\t\tthis.tracks.splice(trackIndex, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconsole.log(\"deleteClip 最终Vmml\", this.vmml);\r\n\t}\r\n\r\n\t//切换静音 视频/音频\r\n\tpublic changeMute({ id, isMute }: { id: string; isMute: boolean }): void {\r\n\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === \"表情包\");\r\n\t\tconst index = editorTrack.clips.findIndex((item: any) => item.id === id);\r\n\t\tif (index !== -1) {\r\n\t\t\tconst volume = isMute ? 0 : 1;\r\n\r\n\t\t\t// 设置当前元素的 volume 为 0\r\n\t\t\teditorTrack.clips[index].videoClip.volume = volume;\r\n\t\t\t// 检查下一个元素是否存在且类型为 audio\r\n\t\t\tif (editorTrack.clips[index + 1] && editorTrack.clips[index + 1].audioClip) {\r\n\t\t\t\teditorTrack.clips[index + 1].audioClip.volume = volume;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconsole.log(\"changeMute 最终Vmml\", this.vmml);\r\n\t}\r\n\r\n\t//加载clip数据\r\n\tprivate loadClipData(fObj: any): any {\r\n\t\tconst posParam = this.setPosParam(fObj);\r\n\t\tconst {\r\n\t\t\tclipData: { id, inPoint, fileUrl },\r\n\t\t\twidth,\r\n\t\t\theight,\r\n\t\t} = fObj;\r\n\t\tlet aClipData = null;\r\n\r\n\t\t// 计算表情包可用的最大时长\r\n\t\tconst availableDuration = this.vmml.template.duration - inPoint;\r\n\t\tconst _duration = fileUrl.duration > availableDuration ? availableDuration : fileUrl.duration;\r\n\t\t\r\n\t\tconst vClipData = {\r\n\t\t\tduration: _duration,\r\n\t\t\toriginDuration: fileUrl.duration,\r\n\t\t\tstart: 0,\r\n\t\t\tend: _duration,\r\n\t\t\tinPoint,\r\n\t\t\ttype: 102,\r\n\t\t\tid,\r\n\t\t\tfObj,\r\n\t\t\tvideoClip: {\r\n\t\t\t\tgrayMaskUrl: fileUrl.grayMaskUrl,\r\n\t\t\t\twebmUrl: fileUrl.webmUrl,\r\n\t\t\t\tmovUrl: fileUrl.movUrl,\r\n\t\t\t\tgifUrl: fileUrl.visibleUrl,\r\n\t\t\t\tdimension: {\r\n\t\t\t\t\theight,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t},\r\n\t\t\t\tposParam,\r\n\t\t\t\tconstantSpeed: 1,\r\n\t\t\t\tvolume: 1,\r\n\t\t\t\tsourceUrl: fileUrl.visibleUrl,\r\n\t\t\t\tthumbnailSourceUrl: fileUrl.thumbnailUrl,\r\n\t\t\t\tsourceCode: \"\",\r\n\t\t\t\tmimeType: fileUrl.visiableMimeType,\r\n\t\t\t},\r\n\t\t};\r\n\t\t//png/mp4 + mp3音频\r\n\t\tif (fileUrl.hasAudio === \"true\") {\r\n\t\t\taClipData = {\r\n\t\t\t\tduration: _duration,\r\n\t\t\t\toriginDuration: fileUrl.duration,\r\n\t\t\t\tstart: 0,\r\n\t\t\t\tend: _duration,\r\n\t\t\t\tinPoint,\r\n\t\t\t\ttype: 304,\r\n\t\t\t\tid: uuidv4(),\r\n\t\t\t\taudioClip: {\r\n\t\t\t\t\tsourceUrl: fileUrl.soundUrl,\r\n\t\t\t\t\tvolume: 1,\r\n\t\t\t\t\tconstantSpeed: 1,\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn [vClipData, aClipData];\r\n\t}\r\n\r\n\t/**\r\n\t * 将颜色转换为 ARGB 格式\r\n\t * @param color - 颜色字符串\r\n\t * @returns ARGB 颜色字符串\r\n\t */\r\n\tprivate toARGB(color: string) {\r\n\t\tif (color === \"transparent\") {\r\n\t\t\treturn \"#00000000\";\r\n\t\t}\r\n\r\n\t\tif (color.includes(\"rgb\")) {\r\n\t\t\treturn rgbaToArgb(color);\r\n\t\t}\r\n\r\n\t\tif (color.includes(\"#\")) {\r\n\t\t\treturn hexToArgb(color);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default VmmlConverter;\r\n","import { fabric } from \"fabric\";\r\nfunction drawImg(\r\n\tctx: CanvasRenderingContext2D,\r\n\tleft: number,\r\n\ttop: number,\r\n\timg: HTMLImageElement,\r\n\twSize: number,\r\n\thSize: number,\r\n\tangle: number | undefined,\r\n) {\r\n\tif (angle === undefined) return;\r\n\tctx.save();\r\n\tctx.translate(left, top);\r\n\tctx.rotate(fabric.util.degreesToRadians(angle));\r\n\tctx.drawImage(img, -wSize / 2, -hSize / 2, wSize, hSize);\r\n\tctx.restore();\r\n}\r\n\r\n// 顶点\r\nfunction usePeekControl(canvas: fabric.Canvas) {\r\n\tconst iconUrls = {\r\n\t\tdelete: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/0c7084a9-6067-4277-a5af-2932983cbeb7.png\",\r\n\t\t// zoom: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/ff6aea73-4d12-4201-9404-3134d5f9525c.png\",\r\n\t\tzoom: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/0909485d-46db-47b4-8bb1-5a686510ddb3.png\",\r\n\t\tmute: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/3fef2c5d-7576-424d-813c-34508b051884.png\",\r\n\t\tvolume: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/1ab2e829-c5b1-4177-8554-ae2f74b02e1d.png\",\r\n\t\tedit: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/9e9ed472-62cf-4b71-891f-bc08c8b08a5d.png\"\r\n\t};\r\n\tconst createIconElement = (url: string) => {\r\n\t\tconst img = document.createElement(\"img\");\r\n\t\timg.src = url;\r\n\t\treturn img;\r\n\t};\r\n\r\n\t// 删除选中元素\r\n\tconst deleteObject = (mouseEvent: MouseEvent, target: fabric.Transform) => {\r\n\t\tif (target.action === \"rotate\") return true;\r\n\t\tconst activeObject = canvas.getActiveObjects();\r\n\t\tif (activeObject) {\r\n\t\t\tactiveObject.map((item: any) => canvas.remove(item));\r\n\t\t\tcanvas.requestRenderAll();\r\n\t\t\tcanvas.discardActiveObject();\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\tconst delImg = createIconElement(iconUrls.delete);\r\n\tconst zoomImg = createIconElement(iconUrls.zoom);\r\n\tconst muteImg = createIconElement(iconUrls.mute);\r\n\tconst volumeImg = createIconElement(iconUrls.volume);\r\n\tconst editImg = createIconElement(iconUrls.edit);\r\n\t//渲染删除图标\r\n\tconst renderDelIcon = (\r\n\t\tctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object,\r\n\t) => {\r\n\t\tdrawImg(ctx, left, top, delImg, 28, 28, fabricObject.angle);\r\n\t};\r\n\t//渲染旋转缩放图标\r\n\tconst renderIconRotate = (\r\n\t\tctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object,\r\n\t) => {\r\n\t\tdrawImg(ctx, left, top, zoomImg, 28, 28, fabricObject.angle);\r\n\t};\r\n\r\n\tconst renderMultiIcon = (ctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object | any,) => {\r\n\t\tif (fabricObject.clipData.type === '文字') {\r\n\t\t\trenderEditIcon(ctx,\r\n\t\t\t\tleft,\r\n\t\t\t\ttop,\r\n\t\t\t\tstyleOverride,\r\n\t\t\t\tfabricObject)\r\n\t\t} else {\r\n\t\t\trenderMuteIcon(ctx,\r\n\t\t\t\tleft,\r\n\t\t\t\ttop,\r\n\t\t\t\tstyleOverride,\r\n\t\t\t\tfabricObject\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n\t//渲染静音图标\r\n\tconst renderMuteIcon = (\r\n\t\tctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object | any,\r\n\t) => {\r\n\t\tif (!fabricObject.clipData) return false;\r\n\t\tif (fabricObject.clipData.type === '表情包') {\r\n\t\t\tif (fabricObject.clipData.isMute === null || fabricObject.clipData.isMute === undefined) return false;\r\n\t\t\tif (fabricObject.clipData.isMute) {\r\n\t\t\t\tdrawImg(ctx, left, top, muteImg, 28, 28, fabricObject.angle);\r\n\t\t\t} else {\r\n\t\t\t\tdrawImg(ctx, left, top, volumeImg, 28, 28, fabricObject.angle);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t//渲染编辑图标\r\n\tconst renderEditIcon = (\r\n\t\tctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object | any,\r\n\t) => {\r\n\t\tif (!fabricObject.clipData) return false;\r\n\t\tif (fabricObject.clipData.type === '文字') {\r\n\t\t\tdrawImg(ctx, left, top, editImg, 28, 28, fabricObject.angle);\r\n\t\t}\r\n\t};\r\n\tconst multiAction = (eventData: any, transform: any, x: any, y: any)=>{\r\n\t\tif (transform.target.clipData.type === '文字') {\r\n\t\t\teditAction(eventData, transform, x, y)\r\n\t\t}else{\r\n\t\t\tmuteAction(eventData, transform, x, y)\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\t//需要暴露方法\r\n\tconst muteAction = (eventData: any, transform: any, x: any, y: any) => {\r\n\t\tif (transform.target.clipData.isMute === null) return false;\r\n\t\ttransform.target.clipData = JSON.parse(JSON.stringify(transform.target.clipData));\r\n\t\ttransform.target.clipData.isMute = !transform.target.clipData.isMute;\r\n\t\tcanvas.renderAll();\r\n\t\tcanvas.fire(\"object:muteChange\", { target: transform.target });\r\n\t\treturn true;\r\n\t};\r\n\t//暴露文字编辑方法\r\n\tconst editAction = (eventData: any, transform: any, x: any, y: any) => {\r\n\t\tif (transform.target.clipData.type === '文字') {\r\n\t\t\tcanvas.fire(\"object:textEdit\", { target: transform.target });\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tconst actionHandler = (\r\n\t\teventData: any, // 在实际应用中,应该为 eventData 提供准确的类型定义\r\n\t\ttransform: any,\r\n\t\tx: number,\r\n\t\ty: number\r\n\t): boolean => {\r\n\t\ttry {\r\n\t\t\tconst t = transform,\r\n\t\t\t\ttarget = t.target,\r\n\t\t\t\tpivotPoint = target.translateToOriginPoint(\r\n\t\t\t\t\ttarget.getCenterPoint(),\r\n\t\t\t\t\tt.originX,\r\n\t\t\t\t\tt.originY\r\n\t\t\t\t);\r\n\t\t\tconst lastAngle = Math.atan2(t.ey - pivotPoint.y, t.ex - pivotPoint.x),\r\n\t\t\t\tcurAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x);\r\n\t\t\tlet angle2 = Math.floor((curAngle - lastAngle + t.theta) * (180 / Math.PI));\r\n\t\t\tfabric.controlsUtils.scalingEqually(eventData, transform, x, y);\r\n\t\t\t// 优化条件判断,使用策略模式或映射的方式进行旋转角度的决定\r\n\t\t\t// 数组前两位是范围,最后一位是设置的角度\r\n\t\t\tconst rotateAngles = [\r\n\t\t\t\t[85, 95, 90],\r\n\t\t\t\t[175, 185, 180],\r\n\t\t\t\t[265, 275, 270],\r\n\t\t\t\t[355, 365, 360],\r\n\t\t\t\t[440, 460, 90],\r\n\t\t\t\t[-5, 5, 0],\r\n\t\t\t\t[-95, -85, 270],\r\n\t\t\t\t[-185, -175, 180]\r\n\t\t\t];\r\n\r\n\t\t\tfor (let i = 0; i < rotateAngles.length; i++) {\r\n\t\t\t\tif (rotateAngles[i][0] < angle2 && angle2 < rotateAngles[i][1]) {\r\n\t\t\t\t\ttarget.rotate(rotateAngles[i][2]);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// 如果没有符合的旋转范围,则使用默认的旋转逻辑\r\n\t\t\tfabric.controlsUtils.rotationWithSnapping(eventData, transform, x, y);\r\n\t\t\treturn true;\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"Action handler error:\", error);\r\n\t\t\t// 根据实际情况处理异常,例如返回false,或者重新抛出异常\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\t//top left 删除\r\n\tfabric.Object.prototype.controls.tl = new fabric.Control({\r\n\t\tx: -0.5,\r\n\t\ty: -0.5,\r\n\t\tmouseUpHandler: deleteObject,\r\n\t\trender: renderDelIcon,\r\n\t});\r\n\r\n\t//bottom left 左下 -- 设置静音和音量\r\n\tfabric.Object.prototype.controls.bl = new fabric.Control({\r\n\t\tx: -0.5,\r\n\t\ty: 0.5,\r\n\t\tmouseUpHandler: muteAction,\r\n\t\trender: renderMuteIcon,\r\n\t});\r\n\t//top right 右上 文字类型设置编辑\r\n\tfabric.Object.prototype.controls.tr = new fabric.Control({\r\n\t\tx: 0.5,\r\n\t\ty: -0.5,\r\n\t\tmouseUpHandler: editAction,\r\n\t\trender: renderEditIcon\r\n\t});\r\n\t// 中间横杠\r\n\tfabric.Object.prototype.controls.ml = new fabric.Control({ visible: false });\r\n\tfabric.Object.prototype.controls.mr = new fabric.Control({ visible: false });\r\n\tfabric.Object.prototype.controls.mb = new fabric.Control({ visible: false });\r\n\tfabric.Object.prototype.controls.mt = new fabric.Control({ visible: false });\r\n\t//旋转图标\r\n\tfabric.Object.prototype.controls.mtr = new fabric.Control({ visible: false });\r\n\t//bottom right 旋转+缩放\r\n\tfabric.Object.prototype.controls.br = new fabric.Control({\r\n\t\tx: 0.5,\r\n\t\ty: 0.5,\r\n\t\tactionName: \"rotate\",\r\n\t\tactionHandler: actionHandler,\r\n\t\trender: renderIconRotate,\r\n\t});\r\n\t// 选中边框样式\r\n\tfabric.Object.prototype.set({\r\n\t\tborderColor: \"#d6d6d699\",\r\n\t\tborderScaleFactor: 1.5,\r\n\t\tborderOpacityWhenMoving: 1,\r\n\t\tpadding: 5,\r\n\t});\r\n\treturn canvas;\r\n}\r\n\r\nexport { usePeekControl };\r\n","import { fabric } from \"fabric\";\r\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\r\nimport { getFrames, argbToRgba, urlToBlob, getFontSize } from \"@versa_ai/vmml-utils\"\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport HistoryClass from \"../utils/HistoryClass\";\r\nimport VmmlConverter from \"../utils/VmmlConverter\";\r\nimport { usePeekControl } from \"../utils/usePeekControl\";\r\nimport { toSvg } from 'dom-to-image'\r\n\r\nconst EditorCanvas = forwardRef(\r\n\t({ previewState, showCanvas, canvasSize, enterPreview, intoTextEdit, frame, vmml, dragState, initFcObjs, onVideoChange }: any, ref: any) => {\r\n\t\tconst [fc, setFc] = useState<any>(null);\r\n\t\tconst [history, setHistory] = useState<any>(null);\r\n\t\tconst waitFcTasks = useRef<any>([]);\r\n\t\tconst vmmlConverterRef = useRef<any>(null);\r\n\t\tconst heightScaleRef = useRef<number>(1);\r\n\t\tconst widthScaleRef = useRef<number>(1);\r\n\r\n\t\tconst initCanvas = () => {\r\n\t\t\tconst canvas = new fabric.Canvas(\"canvas\", {\r\n\t\t\t\twidth: canvasSize.width,\r\n\t\t\t\theight: canvasSize.height,\r\n\t\t\t\tselection: false, // 画布框选\r\n\t\t\t});\r\n\t\t\theightScaleRef.current = vmml.template.dimension.height / canvasSize.height;\r\n\t\t\twidthScaleRef.current = vmml.template.dimension.width / canvasSize.width;\r\n\r\n\t\t\tif (initFcObjs.length) {\r\n\t\t\t\tcreateFcObjs(canvas);\r\n\t\t\t}\r\n\t\t\tsetFc(canvas);\r\n\t\t\tinitCanvasEvent(canvas);\r\n\t\t\tusePeekControl(canvas);\r\n\t\t};\r\n\r\n\t\tconst createFcObjs = (canvas: any) => {\r\n\t\t\tconst ns = Math.floor((frame / 30) * 1000000);\r\n\t\t\tfabric.util.enlivenObjects(initFcObjs, (objects: any) => {\r\n\t\t\t\tobjects.forEach((item: any) => {\r\n\t\t\t\t\titem.on('modified', () => {\r\n\t\t\t\t\t\tconst fObj = convertToJSON(item)\r\n\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t});\r\n\t\t\t\t\titem.set(\"visible\", ns >= item.clipData.inPoint);\r\n\t\t\t\t\tcanvas.add(item);\r\n\t\t\t\t})\r\n\t\t\t\tcanvas.renderAll();\r\n\t\t\t}, \"\")\r\n\t\t}\r\n\r\n\t\t// 检查已有元素的inpoint时间\r\n\t\tconst checkObjectInPoint = (f?: number) => {\r\n\t\t\tif (fc) {\r\n\t\t\t\tconst ns = Math.floor(((f ?? frame) / 30) * 1000000);\r\n\t\t\t\tconst objects = fc.getObjects();\r\n\t\t\t\tobjects.forEach((item: any) => {\r\n\t\t\t\t\tif (item?.clipData?.type === \"文字\") {\r\n\t\t\t\t\t\titem.set(\"visible\", ns >= item.clipData.inPoint && ns < item.clipData.inPoint + (item.clipData.duration || vmml.template.duration));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\titem.set(\"visible\", ns >= item.clipData.inPoint && ns < item.clipData.inPoint + item.clipData?.fileUrl?.duration);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tfc.discardActiveObject();\r\n\t\t\t\tfc.renderAll();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst initCanvasEvent = (canvas: any) => {\r\n\t\t\tcanvas.on(\"mouse:down\", (e: any) => {\r\n\t\t\t\tconst active = canvas.getActiveObject();\r\n\t\t\t\tif (active) {\r\n\t\t\t\t\tif (active.isSelected !== null && active.clipData.type === \"文字\") {\r\n\t\t\t\t\t\t//文字内容双击\r\n\t\t\t\t\t\timitateDBclick(active, canvas);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t\tenterPreview(canvas);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tcanvas.on('object:removed', (e: any) => {\r\n\t\t\t\tif (e.target.clipData && !e.target.clipData.originClip) {\r\n\t\t\t\t\tonVideoChange(e.target.clipData);\r\n\t\t\t\t}\r\n\t\t\t\tconst { clipData } = e.target.toJSON(['clipData']);\r\n\t\t\t\tvmmlConverterRef.current.deleteClip(clipData);\r\n\t\t\t});\r\n\r\n\t\t\tcanvas.on('object:muteChange', (e: any) => {\r\n\t\t\t\tconst { clipData } = e.target.toJSON(['clipData'])\r\n\t\t\t\tvmmlConverterRef.current.changeMute(clipData);\r\n\t\t\t});\r\n\r\n\t\t\tcanvas.on('object:textEdit', (e: any) => {\r\n\t\t\t\tconst active = canvas.getActiveObject();\r\n\t\t\t\thandleIntoTextMenu(active, canvas)\r\n\t\t\t})\r\n\t\t};\r\n\t\t//模拟双击\r\n\t\tconst imitateDBclick = (active: any, canvas: any) => {\r\n\t\t\tactive.isSelected++;\r\n\t\t\t//设定一个计时器,1秒内没操作重新计数\r\n\t\t\tconst timer = setTimeout(() => {\r\n\t\t\t\tactive.isSelected = 0;\r\n\t\t\t}, 500);\r\n\t\t\tif (active.isSelected === 2) {\r\n\t\t\t\tactive.isSelected = 0;\r\n\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t//从画布直接跳到文字编辑\r\n\t\t\t\thandleIntoTextMenu(active, canvas);\r\n\t\t\t}\r\n\t\t};\r\n\t\tconst handleIntoTextMenu = (active: any, canvas: any) => {\r\n\t\t\t//从画布的Text实例里取到需要的属性,回传给文字编辑\r\n\t\t\tconst {\r\n\t\t\t\tleft,\r\n\t\t\t\ttop,\r\n\t\t\t\tangle,\r\n\t\t\t\tscaleX,\r\n\t\t\t\tscaleY,\r\n\t\t\t\tzoomX,\r\n\t\t\t\tzoomY,\r\n\t\t\t\tclipData: { textBasicInfo, textColor, text, bgColor, fontFamily, id, fontAssetUrl },\r\n\t\t\t} = active;\r\n\t\t\tconst textInfo = {\r\n\t\t\t\tid,\r\n\t\t\t\ttext,\r\n\t\t\t\ttextColor,\r\n\t\t\t\tbgColor,\r\n\t\t\t\tleft,\r\n\t\t\t\ttop,\r\n\t\t\t\tangle,\r\n\t\t\t\tscaleX,\r\n\t\t\t\tscaleY,\r\n\t\t\t\tzoomX,\r\n\t\t\t\tzoomY,\r\n\t\t\t\ttextBasicInfo,\r\n\t\t\t\tfontFamily,\r\n\t\t\t\tfontAssetUrl\r\n\t\t\t\t// width,\r\n\t\t\t\t// height\r\n\t\t\t};\r\n\t\t\tactive.set('visible', false);\r\n\t\t\tcanvas.renderAll();\r\n\t\t\tintoTextEdit(textInfo);\r\n\t\t};\r\n\r\n\t\tconst convertToJSON = (data: any) => {\r\n\t\t\tconst centerPoint = data.getCenterPoint();\r\n\t\t\treturn { ...data.toJSON([\"clipData\", \"type\"]), centerPoint };\r\n\t\t};\r\n\r\n\t\r\n\t\t// 创建图片\r\n\t\tconst createImage = (file: any, emojiId: string) => {\r\n\t\t\tconst url = file.resourcesType === \"image\" ? file.visibleUrl : \"\";\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tfabric.Image.fromURL(\r\n\t\t\t\t\t\turl,\r\n\t\t\t\t\t\t(img: any) => {\r\n\t\t\t\t\t\t\tconst scaleX = canvasSize.width / 2 / file.width;\r\n\t\t\t\t\t\t\timg.set({\r\n\t\t\t\t\t\t\t\twidth: file.width,\r\n\t\t\t\t\t\t\t\theight: file.height,\r\n\t\t\t\t\t\t\t\tscaleX,\r\n\t\t\t\t\t\t\t\tscaleY: scaleX,\r\n\t\t\t\t\t\t\t\tleft: canvasSize.width / 2,\r\n\t\t\t\t\t\t\t\ttop: canvasSize.height / 2,\r\n\t\t\t\t\t\t\t\toriginX: 'center',\r\n\t\t\t\t\t\t\t\toriginY: 'center',\r\n\t\t\t\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t\t\t\tid: uuidv4(),\r\n\t\t\t\t\t\t\t\t\tisMute: file.hasAudio === \"true\" ? false : null,\r\n\t\t\t\t\t\t\t\t\tinPoint: Math.floor((frame / 30) * 1000000),\r\n\t\t\t\t\t\t\t\t\tinFrame: frame,\r\n\t\t\t\t\t\t\t\t\ttype: \"表情包\",\r\n\t\t\t\t\t\t\t\t\tonce: false,\r\n\t\t\t\t\t\t\t\t\temojiId,\r\n\t\t\t\t\t\t\t\t\tfileUrl: file\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\timg.on('modified', () => {\r\n\t\t\t\t\t\t\t\tconst fObj = convertToJSON(img);\r\n\t\t\t\t\t\t\t\tfObj.src = \"\";\r\n\t\t\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tfc.add(img);\r\n\t\t\t\t\t\t\tonVideoChange(img.clipData);\r\n\t\t\t\t\t\t\tconst fObj = convertToJSON(img);\r\n\t\t\t\t\t\t\tresolve(fObj);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpadding: 3\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\treject(err + \"添加表情包失败\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t//更新表情包图片\r\n\t\tconst updateImage = (id: string, base64: string, fc2: any) => {\r\n\t\t\tconst canvas = fc || fc2;\r\n\t\t\tif (canvas) {\r\n\t\t\t\tconst imgs = canvas.getObjects().filter((item: any) => item?.clipData?.type === \"表情包\");\r\n\t\t\t\tconst target = imgs.find((item: any) => item.clipData.id === id);\r\n\t\t\t\tif (target) {\r\n\t\t\t\t\ttarget.setSrc(base64, (img: any) => {\r\n\t\t\t\t\t\timg.setCoords();\r\n\t\t\t\t\t\tcanvas.renderAll();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\twaitFcTasks.current.push(updateImage.bind(this, id, base64));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// 创建可编辑的videoClip\r\n\t\tconst createImageFromClip = (clip: any, fc2: any) => {\r\n\t\t\tconst canvas = fc || fc2;\r\n\t\t\tif (canvas && canvasSize.width) {\r\n\t\t\t\tconst url = /video/g.test(clip.videoClip.mimeType) ? \"\" : clip.videoClip.sourceUrl;\r\n\t\t\t\tfabric.Image.fromURL(url, (img: any) => {\r\n\t\t\t\t\tconst { dimension, posParam } = clip.videoClip;\r\n\t\t\t\t\tconst scaleX = posParam.scaleX / heightScaleRef.current;\r\n\t\t\t\t\tconst scaleY = posParam.scaleY / widthScaleRef.current;\r\n\t\t\t\t\tconst left = canvasSize.width * posParam.centerX;\r\n\t\t\t\t\tconst top = canvasSize.height * posParam.centerY;\r\n\t\t\t\t\tconst inFrame = getFrames(clip.inPoint, 30);\r\n\t\t\t\t\tconst durationFrame = getFrames(clip.duration, 30);\r\n\t\t\t\t\timg.set({\r\n\t\t\t\t\t\twidth: dimension.width,\r\n\t\t\t\t\t\theight: dimension.height,\r\n\t\t\t\t\t\tscaleX,\r\n\t\t\t\t\t\tscaleY,\r\n\t\t\t\t\t\tleft,\r\n\t\t\t\t\t\ttop,\r\n\t\t\t\t\t\tangle: posParam.rotationZ,\r\n\t\t\t\t\t\toriginX: 'center',\r\n \t\toriginY: 'center',\r\n\t\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t\tid: clip.id,\r\n\t\t\t\t\t\t\tisMute: null,\r\n\t\t\t\t\t\t\tinPoint: clip.inPoint,\r\n\t\t\t\t\t\t\tinFrame,\r\n\t\t\t\t\t\t\ttype: \"表情包\",\r\n\t\t\t\t\t\t\tonce: false,\r\n\t\t\t\t\t\t\tfileUrl: {\r\n\t\t\t\t\t\t\t\tduration: clip.duration\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\toriginClip: clip\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tvisible: frame >= inFrame && frame < inFrame + durationFrame\r\n\t\t\t\t\t});\r\n\t\t\t\t\tcanvas.add(img);\r\n\t\t\t\t\timg.on('modified', () => {\r\n\t\t\t\t\t\tconst fObj = convertToJSON(img);\r\n\t\t\t\t\t\tfObj.src = \"\";\r\n\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\twaitFcTasks.current.push(createImageFromClip.bind(this, clip));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst handleRedo = () => {\r\n\t\t\thistory.redo();\r\n\t\t};\r\n\t\tconst handleUndo = () => {\r\n\t\t\thistory.undo();\r\n\t\t};\r\n\r\n\t\t// 创建可编辑的textclip\r\n\t\tconst createTextFromClip = async (clip: any, fc2: any) => {\r\n\t\t\tconst canvas = fc || fc2;\r\n\t\t\tif (canvas) {\r\n\t\t\t\tconst { width, height } = vmml.template.dimension;\r\n\t\t\t\tconst fontSize = getFontSize(width, height);\r\n\t\t\t\tconst { textContent, backgroundColor, textColor, posParam, fontAssetUrl, alignType } = clip.textClip;\r\n\t\t\t\tconst scaleX = posParam.scaleX * fontSize / 22 / widthScaleRef.current;\r\n\t\t\t\tconst scaleY = posParam.scaleY * fontSize / 22 / heightScaleRef.current;\r\n\t\t\t\tconst left = canvasSize.width * posParam.centerX;\r\n\t\t\t\tconst top = canvasSize.height * posParam.centerY;\r\n\t\t\t\tconst bgColor = backgroundColor ? argbToRgba(backgroundColor) : 'transparent';\r\n\t\t\t\tconst isAiError = textContent === '请输入文案' && textColor === '#00000000';\r\n\t\t\t\tconst textFill = argbToRgba(isAiError ? '#ffffffff' : (textColor || '#ffffffff'));\r\n\t\t\t\tconst textBasicInfo = {\r\n\t\t\t\t\tisBack: backgroundColor ? true : false,\r\n\t\t\t\t\tcolorValue: textFill,\r\n\t\t\t\t\tcolorName: 'custom',\r\n\t\t\t\t\ttextAlign: alignType === 1 ? 'center' : (alignType === 2 ? 'right' : 'left')\r\n\t\t\t\t}\r\n\t\t\t\tconst textImgData = await createTextImg({ textContent, bgColor, textColor: textFill, fontAssetUrl, textBasicInfo });\r\n\t\t\t\tconst fontJSON = localStorage.getItem(\"VMML_PLAYER_FONTSMAP\");\r\n\t\t\t\tlet fontMap: any = {};\r\n\t\t\t\ttry {\r\n\t\t\t\t\tfontMap = fontJSON ? JSON.parse(fontJSON) : {};\r\n\t\t\t\t} catch {\r\n\t\t\t\t\tfontMap = {};\r\n\t\t\t\t}\r\n\t\t\t\tconst fontFamily = fontMap[fontAssetUrl] || '';\r\n\t\t\t\tfabric.Image.fromURL(textImgData.base64Image, (imgData: any) => {\r\n\t\t\t\t\timgData.set({\r\n\t\t\t\t\t\tleft, \r\n\t\t\t\t\t\ttop,\r\n\t\t\t\t\t\twidth: textImgData.width,\r\n\t\t\t\t\t\theight: textImgData.height,\r\n\t\t\t\t\t\tscaleX,\r\n\t\t\t\t\t\tscaleY,\r\n\t\t\t\t\t\tangle: posParam.rotationZ,\r\n\t\t\t\t\t\toriginX: 'center',\r\n \t\toriginY: 'center',\r\n\t\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t\tid: uuidv4(),\r\n\t\t\t\t\t\t\tinPoint: clip.inPoint,\r\n\t\t\t\t\t\t\tinFrame: getFrames(clip.inPoint, 30),\r\n\t\t\t\t\t\t\ttype: \"文字\",\r\n\t\t\t\t\t\t\ttextColor: textFill,\r\n\t\t\t\t\t\t\ttext: textContent,\r\n\t\t\t\t\t\t\tbgColor,\r\n\t\t\t\t\t\t\toriginClip: clip,\r\n\t\t\t\t\t\t\tfontAssetUrl,\r\n\t\t\t\t\t\t\tfontFamily,\r\n\t\t\t\t\t\t\ttextBasicInfo,\r\n\t\t\t\t\t\t\tisAiError,\r\n\t\t\t\t\t\t\tduration: clip.duration\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t})\r\n\t\t\t\t\timgData.on(\"selected\", (options: any) => {\r\n\t\t\t\t\t\toptions.target.isSelected = -1;\r\n\t\t\t\t\t});\r\n\t\t\t\t\timgData.on(\"moving\", (options: any) => {\r\n\t\t\t\t\t\toptions.transform.target.isSelected = 0;\r\n\t\t\t\t\t});\r\n\t\t\t\t\timgData.on('modified', () => {\r\n\t\t\t\t\t\tconst fObj = convertToJSON(imgData);\r\n\t\t\t\t\t\tif (fObj.clipData.isAiError) {\r\n\t\t\t\t\t\t\tfObj.clipData.textColor = 'rgba(0, 0, 0, 0)';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tcanvas.add(imgData).renderAll();\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\twaitFcTasks.current.push(createTextFromClip.bind(this, clip));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// 生成简短的字体名称\r\n\t\tconst getFontFamilyName = (url: string) => {\r\n\t\t\t// 从URL中提取文件名作为字体名称\r\n\t\t\tconst filename = url.split('/').pop() || '';\r\n\t\t\tconst name = filename.replace(/\\.(ttf|otf|woff2?|eot)$/i, '');\r\n\t\t\treturn `CustomFont_${name.substring(0, 20)}`; // 限制长度\r\n\t\t};\r\n\r\n\t\t// 检测字体格式\r\n\t\tconst detectFontFormat = (url: string) => {\r\n\t\t\tconst lower = url.toLowerCase();\r\n\t\t\tif (lower.includes('.woff2')) return 'woff2';\r\n\t\t\tif (lower.includes('.woff')) return 'woff';\r\n\t\t\tif (lower.includes('.otf')) return 'opentype';\r\n\t\t\tif (lower.includes('.ttf')) return 'truetype';\r\n\t\t\treturn null;\r\n\t\t};\r\n\t\t\r\n\t\tconst embedFontInSVG = async (svgString: string, url: string) => {\r\n if (url) {\r\n const res = await urlToBlob({ url });\r\n const format = detectFontFormat(url);\r\n const fontFamilyName = getFontFamilyName(url);\r\n const srcValue = format ? `url('${res}') format('${format}')` : `url('${res}')`;\r\n const fontFace = `\r\n @font-face {\r\n font-family: '${fontFamilyName}';\r\n src: ${srcValue};\r\n }\r\n `;\r\n const styleElement = `<style type=\"text/css\"><![CDATA[${fontFace}]]></style>`;\r\n const result = svgString.replace('</svg>', `${styleElement}</svg>`);\r\n return result;\r\n }\r\n return svgString\r\n }\r\n\r\n\t\t//文字转图片\r\n\t\tconst createTextImg = async ({ textContent, bgColor, textColor, fontAssetUrl = null, textBasicInfo }: any) => {\r\n\t\t\tconst container = document.createElement('div');\r\n\t\t\tcontainer.style.backgroundColor = bgColor\r\n\t\t\t// container.style.width = `fit-content`\r\n\t\t\t// container.style.height = `fit-content`\r\n\t\t\tcontainer.style.boxSizing = 'content-box'\r\n\t\t\tcontainer.style.display = 'inline-block'\r\n\t\t\tcontainer.style.textAlign = textBasicInfo.textAlign || 'left';\r\n\t\t\tconst lines = textContent.split('\\n');\r\n\t\t\tconst fontFamily = fontAssetUrl ? getFontFamilyName(fontAssetUrl) : 'sansMedium';\r\n\t\t\tlines.forEach((line: string) => {\r\n\t\t\t\tconst p = document.createElement('p');\r\n\t\t\t\tp.style.color = textColor;\r\n\t\t\t\tp.style.fontSize = '22px'\r\n\t\t\t\tp.style.lineHeight = '22px'\r\n\t\t\t\tconst font = fontAssetUrl ? `font-${fontAssetUrl}` : 'sansMedium';\r\n\t\t\t\tp.style.fontFamily = fontFamily;\r\n\t\t\t\tp.style.whiteSpace = \"nowrap\"\r\n\t\t\t\t// p.style.backgroundColor = bgColor;\r\n\t\t\t\tp.style.padding = '0';\r\n\t\t\t\tp.textContent = line || \" \"\r\n\t\t\t\tcontainer.appendChild(p);\r\n\t\t\t})\r\n\t\t\tcontainer.style.padding = '6.5px 7px 6.5px 7px'\r\n\t\t\t// container.style.padding = '7.5px 7px 5.8px 7px'\r\n\t\t\tcontainer.style.borderRadius = '5px'\r\n\t\t\tdocument.body.appendChild(container)\r\n\t\t\tconst { width, height } = container?.getBoundingClientRect() as any;\r\n\t\t\tconst dataurl = await toSvg(container);\r\n\t\t\tdocument.body.removeChild(container);\r\n\t\t\tconst base64Image = await embedFontInSVG(dataurl, fontAssetUrl);\r\n \treturn { base64Image, height, width };\r\n\t\t}\r\n\t\tconst createText = async ({ textContent, bgColor, textColor, position, textBasicInfo, id }: any, fc2: any) => {\r\n\t\t\tconst canvas = fc || fc2;\r\n\t\t\tconst { left, top, angle, scaleX, scaleY, zoomX, zoomY } = position;\r\n\t\t\tconst textImgData = await createTextImg({ textContent, bgColor, textColor, textBasicInfo });\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tfabric.Image.fromURL(textImgData.base64Image, (imgData: any) => {\r\n\t\t\t\t\timgData.set({\r\n\t\t\t\t\t\tleft, \r\n\t\t\t\t\t\ttop,\r\n\t\t\t\t\t\tangle,\r\n\t\t\t\t\t\twidth: textImgData.width,\r\n\t\t\t\t\t\theight: textImgData.height,\r\n\t\t\t\t\t\tscaleX,\r\n\t\t\t\t\t\tscaleY,\r\n\t\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t\tid: uuidv4(),\r\n\t\t\t\t\t\t\tinPoint: Math.floor((frame / 30) * 1000000),\r\n\t\t\t\t\t\t\tinFrame: frame,\r\n\t\t\t\t\t\t\ttype: \"文字\",\r\n\t\t\t\t\t\t\ttextBasicInfo,\r\n\t\t\t\t\t\t\ttextColor: textColor,\r\n\t\t\t\t\t\t\ttext: textContent,\r\n\t\t\t\t\t\t\tbgColor: bgColor\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t})\r\n\t\t\t\t\timgData.on(\"selected\", (options: any) => {\r\n\t\t\t\t\t\toptions.target.isSelected = -1;\r\n\t\t\t\t\t});\r\n\t\t\t\t\timgData.on(\"moving\", (options: any) => {\r\n\t\t\t\t\t\toptions.transform.target.isSelected = 0;\r\n\t\t\t\t\t});\r\n\t\t\t\t\timgData.on('modified', () => {\r\n\t\t\t\t\t\tconst fObj = convertToJSON(imgData)\r\n\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tcanvas.centerObject(imgData);\r\n\t\t\t\t\tcanvas.add(imgData)\r\n\t\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\t\tcanvas.renderAll();\t\r\n\t\t\t\t\t})\r\n\t\t\t\t\tonVideoChange(imgData.clipData);\r\n\t\t\t\t\tvmmlConverterRef.current.addTextClip(convertToJSON(imgData));\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t})\r\n\t\t\t}) \r\n\t\t};\r\n\t\tconst updateText = async ({ id, textContent, bgColor, textColor, textBasicInfo, fontAssetUrl }: any) => {\r\n\t\t\tconst textImgData = await createTextImg({ textContent, bgColor, textColor, fontAssetUrl, textBasicInfo });\r\n\t\t\tconst target = fc.getObjects().find((item: any) => item.clipData.id === id);\r\n\t\t\ttarget.setSrc(textImgData.base64Image, (img: any) => {\r\n\t\t\t\timg.set({\r\n\t\t\t\t\tvisible: true,\r\n\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t...img.clipData,\r\n\t\t\t\t\t\ttextBasicInfo,\r\n\t\t\t\t\t\ttextColor: textColor,\r\n\t\t\t\t\t\ttext: textContent,\r\n\t\t\t\t\t\tbgColor: bgColor,\r\n\t\t\t\t\t\tisAiError: false\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\timg.setCoords();\r\n\t\t\t\tfc.renderAll();\r\n\t\t\t\tvmmlConverterRef.current.updateClip(convertToJSON(img));\r\n\t\t\t});\r\n\t\t}\r\n\t\tconst changeObjectVisible = (id: string, visible: boolean = true) => {\r\n\t\t\tconst target = fc.getObjects().find((item: any) => item.clipData.id === id);\r\n\t\t\ttarget.set({ visible });\r\n\t\t\tfc.renderAll();\r\n\t\t}\r\n\r\n\t\tconst getfObjectNums = (type: string) => {\r\n\t\t\tif (fc) {\r\n\t\t\t\tconst objects = fc.getObjects();\r\n\t\t\t\treturn objects.filter((item: any) => item.clipData.type === type && !item.clipData.originClip).length;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst getfcObject = () => {\r\n\t\t\tif (fc) {\r\n\t\t\t\treturn fc.getObjects();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst styles: any = useMemo(() => {\r\n\t\t\treturn {\r\n\t\t\t\tposition: \"absolute\",\r\n\t\t\t\ttop: canvasSize.top,\r\n\t\t\t\tdisplay: showCanvas ? \"block\" : \"none\",\r\n\t\t\t}\r\n\t\t}, [showCanvas])\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (!fc && canvasSize.width) {\r\n\t\t\t\tinitCanvas();\r\n\t\t\t}\r\n\t\t\treturn () => {\r\n\t\t\t\tif (fc) {\r\n\t\t\t\t\tfc.dispose();\r\n\t\t\t\t\tsetFc(null);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}, [canvasSize.width]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (!previewState && fc) {\r\n\t\t\t\tfc.discardActiveObject();\r\n\t\t\t\tcheckObjectInPoint();\r\n\t\t\t}\r\n\t\t}, [previewState]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (fc) {\r\n\t\t\t\tif (dragState === 1) {\r\n\t\t\t\t\tfc.discardActiveObject();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [fc, dragState])\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (canvasSize.width && canvasSize.height && !vmmlConverterRef.current) {\r\n\t\t\t\tvmmlConverterRef.current = new VmmlConverter({ vmml, canvasSize });\r\n\t\t\t}\r\n\t\t}, [canvasSize, vmml]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (fc) {\r\n\t\t\t\tconst historyClass = new HistoryClass(fc);\r\n\t\t\t\tsetHistory(historyClass);\r\n\t\t\t\tif (waitFcTasks.current.length) {\r\n\t\t\t\t\twaitFcTasks.current.forEach((item: any) => item(fc));\r\n\t\t\t\t\twaitFcTasks.current = [];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [fc]);\r\n\r\n\t\tuseImperativeHandle(ref, () => ({\r\n\t\t\tcreateImage,\r\n\t\t\tcreateText,\r\n\t\t\tupdateText,\r\n\t\t\thandleRedo,\r\n\t\t\thandleUndo,\r\n\t\t\tgetActions,\r\n\t\t\tgetfObjectNums,\r\n\t\t\tupdateImage,\r\n\t\t\tgetfcObject,\r\n\t\t\tcheckObjectInPoint,\r\n\t\t\tcreateImageFromClip,\r\n\t\t\tcreateTextFromClip,\r\n\t\t\tchangeObjectVisible\r\n\t\t}));\r\n\r\n\t\tconst getActions = () => {\r\n\t\t\tif (history) {\r\n\t\t\t\treturn history.getActionType();\r\n\t\t\t}\r\n\t\t\treturn []\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div style={styles} >\r\n\t\t\t\t<canvas id=\"canvas\" />\r\n\t\t\t</div>\r\n\t\t);\r\n\t},\r\n);\r\n\r\nexport default EditorCanvas;\r\n","const css = `.page-loader {\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 100;\n overflow: hidden;\n}\n.page-loader .light {\n width: 75%;\n height: 100%;\n background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n transform: skew(-45deg) translateX(-400%);\n animation: animate_light 1s infinite;\n}\n\n@keyframes animate_light {\n 100% {\n transform: skew(-45deg) translateX(200%);\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJsb2FkaW5nLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFPQTtFQUNBOzs7QUFJSjtFQUNFO0lBQ0UiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLnBhZ2UtbG9hZGVyIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgdG9wOiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgei1pbmRleDogMTAwO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgLmxpZ2h0IHtcclxuICAgIHdpZHRoOiA3NSU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsXHJcbiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSxcclxuICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpLFxyXG4gICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKSxcclxuICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpLFxyXG4gICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wKSxcclxuICAgICAgKTtcclxuICAgIHRyYW5zZm9ybTogc2tldygtNDVkZWcpIHRyYW5zbGF0ZVgoLTQwMCUpO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlX2xpZ2h0IDFzIGluZmluaXRlO1xyXG4gIH1cclxufVxyXG5cclxuQGtleWZyYW1lcyBhbmltYXRlX2xpZ2h0IHtcclxuICAxMDAlIHtcclxuICAgIHRyYW5zZm9ybTogc2tldygtNDVkZWcpIHRyYW5zbGF0ZVgoMjAwJSk7XHJcbiAgfVxyXG59Il19 */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import \"../assets/css/loading.scss\"\r\n\r\nconst Loaidng = ({ show }: any) => {\r\n\r\n const styles = {\r\n display: show ? \"flex\" : \"none\"\r\n }\r\n\r\n return (\r\n <div style={styles} className=\"page-loader\">\r\n <div className=\"light\"></div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Loaidng","const css = `.container {\n width: 100vw;\n height: 100vh;\n position: fixed;\n left: 0;\n top: 0;\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n}\n.container .main_text {\n background: #000000;\n border-radius: 16px;\n backdrop-filter: blur(40px);\n padding: 3.2vw;\n font-weight: 400;\n font-size: 4vw;\n color: #FFFFFF;\n line-height: 5.6vw;\n text-align: right;\n font-style: normal;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJtYXhUZXh0TGF5ZXIuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiJHZtX2Jhc2U6IDc1MDtcclxuXHJcbkBmdW5jdGlvbiB2bSgkcHgpIHtcclxuXHJcbiAgICBAcmV0dXJuICgkcHggLyA3NTApICogMTAwdnc7XHJcblxyXG59XHJcblxyXG4uY29udGFpbmVye1xyXG4gIHdpZHRoOiAxMDB2dztcclxuICBoZWlnaHQ6IDEwMHZoO1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogMDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIC5tYWluX3RleHR7XHJcbiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcclxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0MHB4KTtcclxuICAgIHBhZGRpbmc6IHZtKDI0KTtcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICBmb250LXNpemU6IHZtKDMwKTtcclxuICAgIGNvbG9yOiAjRkZGRkZGO1xyXG4gICAgbGluZS1oZWlnaHQ6IHZtKDQyKTtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xyXG4gIH1cclxufSJdfQ== */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import { useEffect } from \"react\";\r\nimport \"../assets/css/maxTextLayer.scss\";\r\nconst MaxTextLayer = ({\r\n\tshow = false,\r\n\ttextLayerHide,\r\n\ttext,\r\n}: { show: boolean; textLayerHide: () => void; text: string }) => {\r\n\tuseEffect(() => {\r\n\t\tconst timer = setTimeout(() => {\r\n\t\t\ttextLayerHide();\r\n\t\t}, 2000);\r\n\t\treturn () => {\r\n\t\t\tclearTimeout(timer);\r\n\t\t};\r\n\t});\r\n\treturn (\r\n\t\tshow && (\r\n\t\t\t<>\r\n\t\t\t\t<div className=\"container\" onClick={textLayerHide}>\r\n\t\t\t\t\t<span className=\"main_text\">{text}</span>\r\n\t\t\t\t</div>\r\n\t\t\t</>\r\n\t\t)\r\n\t);\r\n};\r\n\r\nexport default MaxTextLayer;\r\n","const css = `@charset \"UTF-8\";\n.overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n color: white;\n font-size: 24px;\n overflow: hidden;\n}\n.overlay > .text-header {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: 11.467vw;\n padding-left: 4.4vw;\n padding-right: 3.2vw;\n box-sizing: border-box;\n position: fixed;\n top: 0;\n transition: all 0.01s;\n z-index: 16;\n}\n.overlay > .text-header > .close {\n width: 5.0666666667vw;\n height: 5.0666666667vw;\n}\n.overlay > .text-header > .close img {\n width: 100%;\n height: 100%;\n}\n.overlay > .text-header > .history-operate {\n height: 7.2vw;\n display: none;\n align-items: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.overlay > .text-header > .history-operate img {\n width: 4.667vw;\n height: 5.067vw;\n}\n.overlay > .text-header > .history-operate > img:last-child {\n margin-left: 8vw;\n}\n.overlay > .text-header > .next-button {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 16vw;\n height: 7.2vw;\n line-height: 7.2vw;\n background: #1677FF;\n border-radius: 6.533vw;\n text-align: center;\n font-size: 3.2vw;\n color: #fff;\n border: 0;\n}\n.overlay .cover {\n position: fixed;\n bottom: 8vw;\n width: 100%;\n height: 10.6666666667vw;\n z-index: 999;\n transition: all 0.1s;\n}\n.overlay .text-input, .overlay .mappingarea {\n font-family: PingFangSC, PingFang SC;\n border: none;\n font-size: 22px;\n /* 取消外边框 */\n outline: none;\n background-color: rgba(0, 0, 0, 0);\n line-height: 30px;\n}\n.overlay .text-input::-webkit-scrollbar, .overlay .mappingarea::-webkit-scrollbar {\n display: none;\n}\n.overlay .text-input, .overlay .mappingarea {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n transition: all 0.1s;\n}\n.overlay .text-input {\n padding-top: 1.0666666667vw;\n padding-bottom: 1.0666666667vw;\n padding-left: 1.6vw;\n padding-right: 1.3333333333vw;\n z-index: 10;\n width: 84vw;\n caret-color: #1677ff;\n position: absolute;\n top: 30%;\n left: 5%;\n height: 200px;\n word-break: break-all;\n}\n.overlay .mappingarea {\n padding-top: 1.0666666667vw;\n padding-bottom: 1.0666666667vw;\n padding-left: 1.6vw;\n padding-right: 1.3333333333vw;\n border-radius: 1.3333333333vw;\n border: 0;\n position: fixed;\n top: 30%;\n left: 5%;\n height: fit-content;\n max-height: 200px;\n color: transparent;\n overflow-y: scroll;\n z-index: 9;\n display: flex;\n flex-flow: column nowrap;\n box-sizing: content-box;\n}\n.overlay .mappingarea .mappingarea_span {\n font-size: 22px;\n max-width: 84vw;\n white-space: pre-wrap;\n word-break: break-all;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJlZGl0b3JUZXh0TWVudS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFPQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUdBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBRUE7RUFDRTtFQUNBOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBOztBQUdGO0VBQ0U7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFFRTtFQUNBO0VBRUE7QUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQVpKO0VBY0U7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiJHZtX2Jhc2U6IDc1MDtcclxuXHJcbkBmdW5jdGlvbiB2bSgkcHgpIHtcclxuXHJcbiAgICBAcmV0dXJuICgkcHggLyA3NTApICogMTAwdnc7XHJcblxyXG59XHJcbi5vdmVybGF5IHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgdG9wOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcclxuICAvLyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XHJcbiAgLy8gLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGNvbG9yOiB3aGl0ZTtcclxuICBmb250LXNpemU6IDI0cHg7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAvLyDpobbpg6hcclxuICAmPi50ZXh0LWhlYWRlciB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiAxMS40Njd2dztcclxuICAgIHBhZGRpbmctbGVmdDogNC40dnc7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAzLjJ2dztcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDA7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4wMXM7XHJcbiAgICB6LWluZGV4OjE2O1xyXG4gICAgJj4uY2xvc2Uge1xyXG4gICAgICB3aWR0aDogdm0oMzgpO1xyXG4gICAgICBoZWlnaHQ6IHZtKDM4KTtcclxuXHJcbiAgICAgIGltZyB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJj4uaGlzdG9yeS1vcGVyYXRlIHtcclxuICAgICAgaGVpZ2h0OiA3LjJ2dztcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBsZWZ0OiA1MCU7XHJcbiAgICAgIHRvcDogNTAlO1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuXHJcbiAgICAgIGltZyB7XHJcbiAgICAgICAgd2lkdGg6IDQuNjY3dnc7XHJcbiAgICAgICAgaGVpZ2h0OiA1LjA2N3Z3O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmPmltZzpsYXN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogOHZ3O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJj4ubmV4dC1idXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDE2dnc7XHJcbiAgICAgIGhlaWdodDogNy4ydnc7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA3LjJ2dztcclxuICAgICAgYmFja2dyb3VuZDogIzE2NzdGRjtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNi41MzN2dztcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICBmb250LXNpemU6IDMuMnZ3O1xyXG4gICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgYm9yZGVyOiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmNvdmVyIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIGJvdHRvbTogdm0oNjApO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6dm0oODApO1xyXG4gICAgei1pbmRleDogOTk5O1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMXM7XHJcbiAgfVxyXG5cclxuICAudGV4dC1pbnB1dCwubWFwcGluZ2FyZWF7XHJcbiAgICAvLyBmb250LWZhbWlseTo7XHJcbiAgICBmb250LWZhbWlseTogUGluZ0ZhbmdTQywgUGluZ0ZhbmcgU0M7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAvLyBmb250LXdlaWdodDogNjAwO1xyXG4gICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgLyog5Y+W5raI5aSW6L655qGGICovXHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcclxuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xyXG4gICAgLy8g6ZqQ6JeP5rua5Yqo5p2h77yM5L2G5LuN54S25L+d5oyB5rua5Yqo5Yqf6IO9XHJcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7IFxyXG4gICAgICBkaXNwbGF5OiBub25lOyBcclxuICAgIH1cclxuICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgIC8qIElFIGFuZCBFZGdlICovXHJcbiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7ICAvKiBGaXJlZm94ICovXHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xcztcclxuICB9XHJcbiAgLnRleHQtaW5wdXR7XHJcbiAgICBwYWRkaW5nLXRvcDogdm0oOCk7XHJcbiAgICBwYWRkaW5nLWJvdHRvbTogdm0oOCk7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IHZtKDEyKTtcclxuICAgIHBhZGRpbmctcmlnaHQ6IHZtKDEwKTtcclxuICAgIHotaW5kZXg6IDEwO1xyXG4gICAgd2lkdGg6IDg0dnc7XHJcbiAgICBjYXJldC1jb2xvcjogIzE2NzdGRkZGO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAzMCU7XHJcbiAgICBsZWZ0OiA1JTtcclxuICAgIGhlaWdodDogMjAwcHg7XHJcbiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICAvLyBwYWRkaW5nOiB2bSgxOCk7XHJcbiAgfVxyXG4gIC5tYXBwaW5nYXJlYXtcclxuICAgIHBhZGRpbmctdG9wOiB2bSg4KTtcclxuICAgIHBhZGRpbmctYm90dG9tOiB2bSg4KTtcclxuICAgIHBhZGRpbmctbGVmdDogdm0oMTIpO1xyXG4gICAgcGFkZGluZy1yaWdodDogdm0oMTApO1xyXG4gICAgYm9yZGVyLXJhZGl1czogdm0oMTApO1xyXG4gICAgYm9yZGVyOjA7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDMwJTtcclxuICAgIGxlZnQ6IDUlO1xyXG4gICAgaGVpZ2h0OiBmaXQtY29udGVudDtcclxuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xyXG4gICAgY29sb3I6IHRyYW5zcGFyZW50OyAvL+iuvue9ruminOiJsumAj+aYju+8jOS/neivgeiDjOaZr+minOiJslxyXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xyXG4gICAgei1pbmRleDogOTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAgIC5tYXBwaW5nYXJlYV9zcGFue1xyXG4gICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgIG1heC13aWR0aDogODR2dztcclxuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xyXG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICB9XHJcbiAgfVxyXG59Il19 */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import { isIOS } from \"@versa_ai/vmml-utils\";\r\nconst defaultBottom = \"20px\";\r\n//判断安卓版本\r\nexport const checkIfAndroidAndVersion = () => {\r\n\tconst userAgent = navigator.userAgent;\r\n\tconst androidPattern = /Android\\s([0-9\\.]*)/;\r\n\r\n\tconst match = userAgent.match(androidPattern);\r\n\r\n\tif (match) {\r\n\t\tconst version = match[1];\r\n\t\tconsole.log(`This is an Android device with version ${version}`);\r\n\t\treturn version;\r\n\t}\r\n};\r\nconst checkIPhoneSeries = () => {\r\n\tconst screenWidth = window.screen.width;\r\n\tconst screenHeight = window.screen.height;\r\n\t// console.info('screen size',`screenWidth:${screenWidth},screenHeight:${screenHeight}`)\r\n\tif (screenWidth === 320 && screenHeight === 480) {\r\n\t\treturn \"iPhone 4 or 4S\";\r\n\t} else if (screenWidth === 375 && screenHeight === 667) {\r\n\t\treturn \"iPhone 6/7/8\";\r\n\t} else if (screenWidth === 414 && screenHeight === 736) {\r\n\t\treturn \"iPhone 6/7/8 Plus\";\r\n\t} else if (screenWidth === 375 && screenHeight === 812) {\r\n\t\treturn \"iPhone X/XS\";\r\n\t} else if (screenWidth === 414 && screenHeight === 896) {\r\n\t\treturn \"iPhone XR/11\";\r\n\t} else if (screenWidth === 414 && screenHeight === 844) {\r\n\t\treturn \"iPhone 12 mini\";\r\n\t} else if (screenWidth === 414 && screenHeight === 915) {\r\n\t\treturn \"iPhone 13 Pro Max/12 Pro Max\";\r\n\t} else if (screenWidth === 390 && screenHeight === 844) {\r\n\t\treturn \"iPhone 13 mini\";\r\n\t} else {\r\n\t\treturn \"Unknown iPhone model\";\r\n\t}\r\n};\r\nexport const getIOSVersion = () => {\r\n if (isIOS()) {\r\n const match = navigator.userAgent.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n if (match) {\r\n const version = `${match[1]}.${match[2]}`;\r\n return version;\r\n }\r\n }\r\n return null;\r\n};\r\nconst iPhoneAdapter = (series: string) => {\r\n\tconst seriesArr = [\"iPhone 6/7/8 Plus\", \"iPhone 6/7/8\"];\r\n\treturn seriesArr.includes(series);\r\n};\r\n//判断当前版本是否需要做适配\r\nexport const canAdapter = () => {\r\n\tconst versionArr = [\"12\"];\r\n\tconst version = checkIfAndroidAndVersion();\r\n\tif (version !== undefined) {\r\n\t\treturn versionArr.includes(version);\r\n\t}\r\n};\r\n// ios和Android键盘兼容\r\n// 目前测试设备中键盘唤起不会触发resize事件,所以需要监听focusin事件,所以watchKeyBoard不存在系统区分\r\nexport const watchKeyBoard = (callback: (isShow: boolean) => void) => {\r\n\tconst focusInHandler = (e: FocusEvent) => {\r\n\t\tcallback(true);\r\n\t\tstopMove();\r\n\t};\r\n\r\n\tconst focusOutHandler = (e: FocusEvent) => {\r\n\t\tcallback(false);\r\n\t};\r\n\r\n\tdocument.body.addEventListener(\"focusin\", focusInHandler);\r\n\tdocument.body.addEventListener(\"focusout\", focusOutHandler);\r\n\r\n\t// 返回一个函数,用于移除事件监听器\r\n\treturn () => {\r\n\t\tdocument.body.removeEventListener(\"focusin\", focusInHandler);\r\n\t\tdocument.body.removeEventListener(\"focusout\", focusOutHandler);\r\n\t};\r\n};\r\nexport const stopMove = () => {\r\n\tconst dom = document.getElementsByClassName(\"overlay\")[0];\r\n\tconst element = document.querySelector(\".mappingarea\") as HTMLElement;\r\n\r\n\tconst stopScroll = (e: any) => {\r\n\t\tconst lastTouchPositionX = 0;\r\n\t\tconst lastTouchPositionY = 0;\r\n\t\t// 排除可以滚动的区域\r\n\t\tconst currentTouchPositionX = e.touches[0].clientX;\r\n\t\tconst currentTouchPositionY = e.touches[0].clientY;\r\n\r\n\t\tconst deltaX = currentTouchPositionX - lastTouchPositionX;\r\n\t\tconst deltaY = currentTouchPositionY - lastTouchPositionY;\r\n\t\tif ([\"text-header\", \"overlay\", \"text_bg_change\"].includes(e.target?.className)) {\r\n\t\t\te.preventDefault(); // 阻止纵向滚动\r\n\t\t\t// if (Math.abs(deltaY) > Math.abs(deltaX)) {\r\n\t\t\t// e.preventDefault(); // 阻止纵向滚动\r\n\t\t\t// }\r\n\t\t}\r\n\t\tif (element) {\r\n\t\t\tconst willOverflow = element.scrollHeight > element.clientHeight;\r\n\t\t\tif (willOverflow) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if (e.target?.className.split(\" \").includes(\"color-item\") || e.target?.className === \"text_color_change\") {\r\n\t\t\t\tif (deltaX < 0 || deltaX > 0) {\r\n\t\t\t\t\t// 允许横向滚动\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault(); // 阻止非横向滚动\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (Math.abs(deltaY) > Math.abs(deltaX)) {\r\n\t\t\t\t\te.preventDefault(); // 阻止其他元素的纵向滚动\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t};\r\n\tif (dom) {\r\n\t\tdom.addEventListener(\"touchmove\", stopScroll);\r\n\t}\r\n};\r\nexport const scrollToTop = () => {\r\n\twindow.scrollTo(0, 0);\r\n};\r\n\r\nexport const onKeyBoardAction = (\r\n\tstatus: boolean,\r\n\theaderRef: HTMLDivElement | null,\r\n\ttextareaRef: HTMLTextAreaElement | null,\r\n\tcoverRef: HTMLDivElement | null,\r\n\tmappingareaRef: HTMLDivElement | null,\r\n\taimTop?: number,\r\n) => {\r\n\t//IOS适配\r\n\tif (isIOS()) {\r\n\t\tforIos(status, headerRef, textareaRef, coverRef, mappingareaRef);\r\n\t}\r\n\t//Android适配\r\n\telse {\r\n\t\t// forAndroid(currentScrollY, status, headerRef, textareaRef, coverRef, mappingareaRef);\r\n\t}\r\n};\r\n\r\n//方案一\r\nconst forIos = (\r\n\tstatus: boolean,\r\n\theaderRef: HTMLDivElement | null,\r\n\ttextareaRef: HTMLTextAreaElement | null,\r\n\tcoverRef: HTMLDivElement | null,\r\n\tmappingareaRef: HTMLDivElement | null,\r\n) => {\r\n\tconst series = checkIPhoneSeries();\r\n\tconst isIPhoneAdapt = iPhoneAdapter(series);\r\n\t//键盘展开\r\n\tif (status) {\r\n\t\tconst totalHeight = document.documentElement.clientHeight || document.body.clientHeight;\r\n\t\t//ios键盘高度约为屏幕的25%\r\n\t\tconst keyBoardHeight = totalHeight * 0.25;\r\n\t\tif (coverRef && textareaRef) {\r\n\t\t\tconst textareaRefPos = textareaRef.getBoundingClientRect()\r\n\t\t\tconst { height } = textareaRefPos\r\n\t\t\tif (isIPhoneAdapt) {\r\n\t\t\t\tcoverRef.style.bottom = `${keyBoardHeight + 50}px`\r\n\t\t\t} else {\r\n\t\t\t\tcoverRef.style.transform = `translateY(${-(height + 10)}px)`\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\tif (coverRef) {\r\n\t\t\tif (isIPhoneAdapt) {\r\n\t\t\t\tcoverRef.style.bottom = `8vw`\r\n\t\t\t} else {\r\n\t\t\t\tcoverRef.style.transform = `translateY(0px)`\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n};\r\nconst forAndroid = (\r\n\tcurrentScrollY: number,\r\n\tstatus: boolean,\r\n\theaderRef: HTMLDivElement | null,\r\n\ttextareaRef: HTMLTextAreaElement | null,\r\n\tcoverRef: HTMLDivElement | null,\r\n\tmappingareaRef: HTMLDivElement | null,\r\n) => {\r\n\tconst updatePosition = () => {\r\n\t\tif (mappingareaRef && textareaRef) {\r\n\t\t\tconst rect = textareaRef.getBoundingClientRect();\r\n\t\t\tmappingareaRef.style.top = `${rect.top}px`;\r\n\t\t\tmappingareaRef.style.left = `${rect.left}px`;\r\n\t\t}\r\n\t}\r\n\twindow.addEventListener('scroll', updatePosition);\r\n\twindow.addEventListener('resize', updatePosition);\r\n};\r\n","const css = `@charset \"UTF-8\";\n.color-selector {\n width: 100%;\n height: 100%;\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n padding-right: 2.6666666667vw;\n}\n.color-selector .text_bg_change {\n width: 6.4vw;\n height: 6.4vw;\n flex: 0 0 auto;\n text-align: center;\n line-height: 6.4vw;\n padding: 0 4.8vw;\n margin-right: 4vw;\n border-right: 2px solid rgba(255, 255, 255, 0.4); /* 设置左边框的宽度、样式和颜色 */\n}\n.color-selector .text_color_change {\n flex: 1 1 auto;\n display: flex;\n flex-flow: row nowrap;\n overflow-x: auto;\n white-space: nowrap;\n height: 100%;\n padding-right: 1.3333333333vw;\n align-items: center;\n}\n.color-selector .text_color_change > * {\n flex-shrink: 0;\n}\n.color-selector .text_color_change .color-item {\n width: 6.4vw;\n height: 6.4vw;\n border-radius: 50%;\n margin: 0 2vw;\n box-sizing: border-box;\n}\n.color-selector .text_color_change .black-border {\n border: 0.2666666667vw solid #333333;\n}\n.color-selector .text_color_change .current {\n box-shadow: 0 0 0 0.8vw #1677FF;\n}\n.color-selector .text_color_change::-webkit-scrollbar {\n display: none;\n}\n.color-selector .text_color_change {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJjb2xvclNlbGVjdG9yLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUY7RUFDRTs7QUFFRjtFQUVFOztBQUdGO0VBQ0k7O0FBNUJOO0VBOEJFO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIkdm1fYmFzZTogNzUwO1xyXG5cclxuQGZ1bmN0aW9uIHZtKCRweCkge1xyXG5cclxuICAgIEByZXR1cm4gKCRweCAvIDc1MCkgKiAxMDB2dztcclxuXHJcbn1cclxuXHJcbi5jb2xvci1zZWxlY3RvcntcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBwYWRkaW5nLXJpZ2h0OiB2bSgyMCk7XHJcbiAgLnRleHRfYmdfY2hhbmdle1xyXG4gICAgd2lkdGg6IHZtKDQ4KTtcclxuICAgIGhlaWdodDogdm0oNDgpO1xyXG4gICAgZmxleDogMCAwIGF1dG87XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBsaW5lLWhlaWdodDogdm0oNDgpO1xyXG4gICAgcGFkZGluZzowIHZtKDM2KTtcclxuICAgIG1hcmdpbi1yaWdodDogdm0oMzApO1xyXG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgI0ZGRkZGRjY2OyAvKiDorr7nva7lt6bovrnmoYbnmoTlrr3luqbjgIHmoLflvI/lkozpopzoibIgKi9cclxuICB9XHJcbiAgLnRleHRfY29sb3JfY2hhbmdle1xyXG4gICAgZmxleDogMSAxIGF1dG87XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG4gICAgb3ZlcmZsb3cteDogYXV0bzsgLy8g5YWB6K645qiq5ZCR5rua5YqoXHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvLyDnoa7kv53mlofmnKzkuI3kvJrmjaLooYxcclxuICAgIGhlaWdodDoxMDAlO1xyXG4gICAgcGFkZGluZy1yaWdodDogdm0oMTApO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICYgPiAqIHtcclxuICAgICAgZmxleC1zaHJpbms6IDA7IC8vIOmYsuatouWtkOWFg+e0oOe8qeWwj1xyXG4gICAgfVxyXG4gICAgLmNvbG9yLWl0ZW17XHJcbiAgICAgIHdpZHRoOiB2bSg0OCk7XHJcbiAgICAgIGhlaWdodDp2bSg0OCk7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgbWFyZ2luOiAwIHZtKDE1KTtcclxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIH1cclxuICAgIC5ibGFjay1ib3JkZXJ7XHJcbiAgICAgIGJvcmRlcjp2bSgyKSBzb2xpZCAjMzMzMzMzRkZcclxuICAgIH1cclxuICAgIC5jdXJyZW50e1xyXG4gICAgICAvLyBib3JkZXI6IHZtKDYpIHNvbGlkICMxNjc3RkY7XHJcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIHZtKDYpICMxNjc3RkY7XHJcbiAgICB9XHJcbiAgICAvLyDpmpDol4/mu5rliqjmnaHvvIzkvYbku43nhLbkv53mjIHmu5rliqjlip/og71cclxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgXHJcbiAgICAgICAgZGlzcGxheTogbm9uZTsgXHJcbiAgICB9XHJcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7ICAvKiBJRSBhbmQgRWRnZSAqL1xyXG4gICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOyAgLyogRmlyZWZveCAqL1xyXG4gIH1cclxufSJdfQ== */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import \"../assets/css/colorSelector.scss\";\r\nimport { forwardRef, useImperativeHandle, useState } from \"react\";\r\nimport { iconText1, iconText2 } from \"../utils/const\";\r\ninterface Props {\r\n\tcolors: string[];\r\n\tcurrentColor: string;\r\n\tonSelectColor: (color: string) => void;\r\n}\r\nconst colorList = [\r\n\t{ colorName: \"white\", colorValue: \"rgb(255,255,255)\" },\r\n\t{ colorName: \"black\", colorValue: \"rgb(0,0,0)\" },\r\n\t{ colorName: \"gray\", colorValue: \"rgb(153,153,153)\" },\r\n\t{ colorName: \"red\", colorValue: \"rgb(248,82,81)\" },\r\n\t{ colorName: \"orange\", colorValue: \"rgb(250,158,60)\" },\r\n\t{ colorName: \"yellow\", colorValue: \"rgb(255,196,0)\" },\r\n\t{ colorName: \"lightGreen\", colorValue: \"rgb(145,212,0)\" },\r\n\t{ colorName: \"green\", colorValue: \"rgb(0,181,212)\" },\r\n\t{ colorName: \"lightBlue\", colorValue: \"rgb(0,183,244)\" },\r\n\t{ colorName: \"blue\", colorValue: \"rgb(23,120,255)\" },\r\n\t{ colorName: \"purple\", colorValue: \"rgb(82,95,255)\" },\r\n];\r\n\r\nconst ColorSelector = forwardRef(({ onColorChange, onBackGroundChange }: any, ref: any) => {\r\n\t// const [currentColor, setCurrentColor] = useState(\"red\");\r\n\tconst [currentColorItem, setCurrentColorItem] = useState<any>(colorList.find((color) => color.colorName === \"red\"));\r\n\tconst [currentBack, setCurrentBgColor] = useState<string | null>(null);\r\n\tconst [isSetBack, setIsSetBack] = useState(false);\r\n\tconst setColorClass = (item: any) => {\r\n\t\tconst { colorName } = currentColorItem;\r\n\t\tconst classes = [\r\n\t\t\titem.colorName === \"black\" && \"black-border\",\r\n\t\t\titem.colorName === colorName && \"current\",\r\n\t\t\t\"color-item\",\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(\" \");\r\n\t\treturn classes;\r\n\t};\r\n\r\n\tconst handleColorClick = (item: any) => {\r\n\t\tsetCurrentColorItem(item);\r\n\t\tonColorChange(item);\r\n\t};\r\n\r\n\tconst handleChangeBackGround = () => {\r\n\t\tconst setBgStatus = new Promise<void>((resolve, reject) => {\r\n\t\t\tsetIsSetBack(!isSetBack);\r\n\t\t\tresolve();\r\n\t\t});\r\n\t\t//暴露到父组件调用\r\n\t\tsetBgStatus.then(() => {\r\n\t\t\tonBackGroundChange(currentColorItem);\r\n\t\t});\r\n\t};\r\n\tconst getBackState = () => {\r\n\t\treturn isSetBack;\r\n\t};\r\n\tuseImperativeHandle(ref, () => ({\r\n\t\tgetBackState,\r\n\t\tsetIsSetBack,\r\n\t\tsetCurrentColorItem,\r\n\t}));\r\n\treturn (\r\n\t\t<div className=\"color-selector\">\r\n\t\t\t<div\r\n\t\t\t\tclassName=\"text_bg_change\"\r\n\t\t\t\tonClick={() => {\r\n\t\t\t\t\thandleChangeBackGround();\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<img alt=\"\" src={isSetBack ? iconText2 : iconText1} style={{ width: \"100%\", height: \"100%\" }} />\r\n\t\t\t</div>\r\n\t\t\t<div className=\"text_color_change\">\r\n\t\t\t\t{colorList.map((item: any) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={setColorClass(item)}\r\n\t\t\t\t\t\t\tkey={item.colorName}\r\n\t\t\t\t\t\t\tstyle={{ backgroundColor: item.colorValue }}\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\thandleColorClick(item);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n});\r\nexport default ColorSelector;\r\n","import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from \"react\";\r\nimport \"../assets/css/editorTextMenu.scss\";\r\nimport { closeIcon } from \"../utils/const\";\r\nimport { isIOS } from '@versa_ai/vmml-utils'\r\nimport { onKeyBoardAction, watchKeyBoard, canAdapter } from \"../utils/keyBoardUtils\";\r\nimport ColorSelector from \"./ColorSelector\";\r\n// 处理文本内容,总共40个字\r\nconst formatText = (text: string, maxLengthBase = 40): string => {\r\n\t// 正则表达式匹配所有类型的换行符\r\n\tconst newlineRegex = /(\\r\\n|\\r|\\n)/g;\r\n\tconst matches = text.match(newlineRegex)?.length || 0;\r\n\tconst maxLength = maxLengthBase + matches\r\n\tlet trimmedText = text.substring(0, maxLength)\r\n\tif ((text.length - matches) === maxLengthBase) {\r\n\t\t// 正则表达式去除尾部的换行符\r\n\t\ttrimmedText = trimmedText.replace(/(\\r\\n|\\r|\\n)+$/g, '');\r\n\t}\r\n\treturn trimmedText;\r\n};\r\n\r\nconst TextMenu = forwardRef(({ createText, textClose, textInfo, showTextButtons }: any, ref: any) => {\r\n\tconst formRef = useRef<HTMLFormElement>(null);\r\n\tconst headerRef = useRef<HTMLDivElement>(null);\r\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\r\n\tconst coverRef = useRef<HTMLDivElement>(null);\r\n\tconst mappingarea = useRef<HTMLDivElement>(null);\r\n\tconst [textContent, setTextContent] = useState(\"\");\r\n\tconst [bgColor, setBgColor] = useState(\"transparent\");\r\n\tconst [textColor, setTextColor] = useState(\"rgb(248,82,81)\");\r\n\tconst [textPos, setTextPos] = useState<any>({ left: 0, top: 0, angle: 0, scaleX: 0.75, scaleY: 0.75, zoomX: 0, zoomY: 0 });\r\n\tconst [textBasicInfo, setTextBasicInfo] = useState<any>({\r\n\t\tcolorName: \"red\",\r\n\t\tcolorValue: \"rgb(248,82,81)\",\r\n\t\tisBack: false,\r\n\t\ttextAlign: 'left'\r\n\t});\r\n\tconst colorSelectorRef = useRef<any>(null);\r\n\tconst [textContentOnShow, setTextContentOnShow] = useState<any>([]);\r\n\tconst [scrollYValue, setScrollYValue] = useState(() => {\r\n\t\treturn Number.parseInt(localStorage.getItem('scrollYValue') as string) || null;\r\n\t});\r\n\tconst scrollYValueRef = useRef(scrollYValue);\r\n\tuseEffect(() => {\r\n\t\tconst callback = (status: any) => {\r\n\t\t\tif (scrollYValueRef.current === null) {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tconst newScrollYValue = window.scrollY;\r\n\t\t\t\t\tsetScrollYValue(newScrollYValue);\r\n\t\t\t\t\tscrollYValueRef.current = newScrollYValue;\r\n\t\t\t\t\tlocalStorage.setItem('scrollYValue', newScrollYValue.toString());\r\n\t\t\t\t}, 150);\r\n\t\t\t}\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tonKeyBoardAction(\r\n\t\t\t\t\tstatus,\r\n\t\t\t\t\theaderRef.current,\r\n\t\t\t\t\ttextareaRef.current,\r\n\t\t\t\t\tcoverRef.current,\r\n\t\t\t\t\tmappingarea.current\r\n\t\t\t\t);\r\n\t\t\t}, 200);\r\n\t\t};\r\n\t\tconst removeListeners = watchKeyBoard(callback);\r\n\t\t// 清理函数,用于移除事件监听器\r\n\t\treturn () => {\r\n\t\t\tremoveListeners();\r\n\t\t};\r\n\t}, []);\r\n\tuseEffect(() => {\r\n\t\t//设置同步滚动\r\n\t\tconst syncScroll = () => {\r\n\t\t\tif (textareaRef.current && mappingarea.current) {\r\n\t\t\t\tconst scrollPosition = textareaRef.current.scrollTop;\r\n\t\t\t\tmappingarea.current.scrollTop = scrollPosition;\r\n\t\t\t}\r\n\t\t};\r\n\t\tif (textareaRef.current) {\r\n\t\t\t// 添加滚动监听器到text-input\r\n\t\t\ttextareaRef.current.addEventListener(\"scroll\", syncScroll);\r\n\t\t\t// 添加输入监听器到textarea\r\n\t\t\ttextareaRef.current.addEventListener(\"input\", syncScroll);\r\n\t\t}\r\n\r\n\t\t// 清理函数,移除监听器\r\n\t\treturn () => {\r\n\t\t\tif (textareaRef.current) {\r\n\t\t\t\ttextareaRef.current.removeEventListener(\"scroll\", syncScroll);\r\n\t\t\t\ttextareaRef.current.removeEventListener(\"input\", syncScroll);\r\n\t\t\t}\r\n\t\t};\r\n\t}, []);\r\n\tuseEffect(() => {\r\n\t\tlet lines = [];\r\n\t\t//判断字符里是否存在\\r\r\n\t\tif (textContent.includes(\"\\r\")) {\r\n\t\t\tlines = textContent.split(\"\\r\");\r\n\t\t} else {\r\n\t\t\tlines = textContent.split(\"\\n\");\r\n\t\t}\r\n\t\tsetTextContentOnShow(lines);\r\n\t}, [textContent]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (Object.keys(textInfo).length > 0) {\r\n\t\t\tsetText(textInfo);\r\n\t\t} else {\r\n\t\t\tresetInfo();\r\n\t\t}\r\n\t}, [textInfo]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!isIOS()) {\r\n\t\t\tif (mappingarea.current && textareaRef.current) {\r\n\t\t\t\ttextareaRef.current.style.position = 'static'\r\n\t\t\t\tmappingarea.current.style.maxHeight = textareaRef.current.style.height = '50vh'\r\n\t\t\t\tmappingarea.current.style.maxWidth = getComputedStyle(textareaRef.current).width;\r\n\t\t\t\ttextareaRef.current.focus();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (textareaRef.current) {\r\n\t\t\t\ttextareaRef.current.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t}, [])\r\n\tconst handleOnChange = (e: any) => {\r\n\t\tconst inputValue = e.target.value;\r\n\t\tsetTextContent(formatText(inputValue));\r\n\t};\r\n\r\n\tconst handleSubmit = (e: any) => {\r\n\t\tif (showTextButtons) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\tif (formRef.current) {\r\n\t\t\tconst formData = new FormData(formRef.current);\r\n\t\t\t// 也可以使用普通的对象:\r\n\t\t\tconst formJson = Object.fromEntries((formData as any).entries());\r\n\t\t\tconst { input_content } = formJson;\r\n\t\t\trenderText(input_content);\r\n\t\t}\r\n\t};\r\n\tconst handleChangeColor = (item: any) => {\r\n\t\tsetColor(item);\r\n\t};\r\n\tconst onBackGroundChange = (currentColorItem: string) => {\r\n\t\tsetColor(currentColorItem);\r\n\t};\r\n\tconst setColor = (colorItem: any) => {\r\n\t\tif (textareaRef.current) {\r\n\t\t\ttextareaRef.current.focus();\r\n\t\t}\r\n\t\tconst { current } = colorSelectorRef;\r\n\t\tconst { colorName, colorValue } = colorItem;\r\n\t\tconst isBack = current ? current.getBackState() : false;\r\n\t\tconst textBasic = {\r\n\t\t\tcolorName,\r\n\t\t\tcolorValue,\r\n\t\t\tisBack,\r\n\t\t\ttextAlign: textBasicInfo.textAlign\r\n\t\t};\r\n\t\tsetTextBasicInfo(textBasic);\r\n\t\t//给文字设置颜色\r\n\t\tif (!isBack) {\r\n\t\t\tsetBgColor(\"transparent\");\r\n\t\t\tsetTextColor(colorValue);\r\n\t\t} else {\r\n\t\t\t//给背景设置颜色\r\n\t\t\t//点击切换颜色「非白色背景」,字都统一白色,背景变化对应颜色,若选择「白色背景」字变成黑色\r\n\t\t\tsetBgColor(colorValue);\r\n\t\t\tcolorName === \"white\" || colorValue === 'rgba(255, 255, 255, 1)' ? setTextColor(\"#000\") : setTextColor(\"#fff\");\r\n\t\t}\r\n\t};\r\n\tconst setText = (textInfo: any) => {\r\n\t\tconst { bgColor, text, textColor, left, top, angle, scaleX, scaleY, zoomX, zoomY, textBasicInfo, width, height } = textInfo;\r\n\t\tconst { isBack, colorName, colorValue } = textBasicInfo;\r\n\t\tconst fillColor = text === '请输入文案' && textColor === 'rgba(0, 0, 0, 0)' ? 'rgba(255, 255, 255, 1)' : textColor;\r\n\t\tsetBgColor(bgColor);\r\n\t\tsetTextColor(fillColor);\r\n\t\tsetTextContent(text);\r\n\t\tsetTextBasicInfo(textBasicInfo);\r\n\t\tsetTextPos({ left, top, angle, scaleX, scaleY, zoomX, zoomY, width, height });\r\n\t\tconst { current } = colorSelectorRef;\r\n\t\tif (!current) return;\r\n\t\tcurrent.setIsSetBack(isBack);\r\n\t\tcurrent.setCurrentColorItem({ colorName, colorValue });\r\n\t};\r\n\r\n\tconst resetInfo = () => {\r\n\t\t//文字编辑缺省设置\r\n\t\tsetBgColor(\"transparent\");\r\n\t\tsetTextColor(\"rgb(248,82,81)\");\r\n\t\tsetTextContent(\"\");\r\n\t\tsetTextPos({ left: 0, top: 0, angle: 0, scaleX: 0.75, scaleY: 0.75, zoomX: 0, zoomY: 0 });\r\n\t};\r\n\tconst close = () => {\r\n\t\ttextClose(textInfo.id);\r\n\t};\r\n\tconst renderText = (input_content?: string) => {\r\n\t\tconst { current } = mappingarea;\r\n\t\tif (current) {\r\n\t\t\t//获取映射区域的宽高传入画布,作为fabric文字的宽高\r\n\t\t\t//获取计算属性\r\n\t\t\t//在close时需要使用传入的textpos\r\n\t\t\tconst computedStyle = window.getComputedStyle(current);\r\n\t\t\tconst { width, height } = computedStyle;\r\n\t\t\tsetTextPos(\r\n\t\t\t\tObject.assign(textPos, { width: Number(width.split(\"px\")[0]), height: Number(height.split(\"px\")[0]) }),\r\n\t\t\t);\r\n\t\t}\r\n\t\t//判断是否空字符串,并且不全是空格\r\n\t\tif (input_content && input_content.trim() !== \"\") {\r\n\t\t\tconst { id, fontFamily, fontAssetUrl } = textInfo;\r\n\t\t\t//传递给父组件文字属性\r\n\t\t\t//input_content带有换行符,所以不能用textContent传到player\r\n\t\t\tcreateText({ textContent: input_content, bgColor, textColor, position: textPos, textBasicInfo, id, fontFamily, fontAssetUrl });\r\n\t\t} else {\r\n\t\t\ttextClose(textInfo.id);\r\n\t\t}\r\n\t};\r\n\tuseImperativeHandle(ref, () => ({\r\n\t\tsetText,\r\n\t\tclose,\r\n\t\thandleSubmit\r\n\t}));\r\n\r\n\treturn (\r\n\t\t<form method=\"post\" onSubmit={handleSubmit} ref={formRef}>\r\n\t\t\t<div className=\"overlay\">\r\n\t\t\t\t{/* 顶部 */}\r\n\t\t\t\t{\r\n\t\t\t\t\tshowTextButtons && (\r\n\t\t\t\t\t\t<div className=\"text-header\" ref={headerRef}>\r\n\t\t\t\t\t\t\t<div onClick={() => close()} className=\"close\">\r\n\t\t\t\t\t\t\t\t<img crossOrigin=\"anonymous\" src={closeIcon} alt=\"close\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<button type=\"submit\" className=\"next-button\">\r\n\t\t\t\t\t\t\t\t完成\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\t{\r\n\t\t\t\t\t!isIOS() && (\r\n\t\t\t\t\t\t<div className=\"edit_container\" style={{\r\n\t\t\t\t\t\t\twidth: '100%', position: 'relative', paddingLeft: '4.4vw',\r\n\t\t\t\t\t\t\tpaddingRight: '3.2vw', display: 'flex'\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t{/* 编辑区 */}\r\n\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\tref={textareaRef}\r\n\t\t\t\t\t\t\t\tcols={20}\r\n\t\t\t\t\t\t\t\twrap=\"hard\"\r\n\t\t\t\t\t\t\t\tname=\"input_content\"\r\n\t\t\t\t\t\t\t\tclassName=\"text-input\"\r\n\t\t\t\t\t\t\t\tvalue={textContent}\r\n\t\t\t\t\t\t\t\tonChange={handleOnChange}\r\n\t\t\t\t\t\t\t\tstyle={{ color: textColor, width: '94%', fontFamily: textInfo.fontFamily }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{/* 映射颜色区域 */}\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName=\"mappingarea\"\r\n\t\t\t\t\t\t\t\tref={mappingarea}\r\n\t\t\t\t\t\t\t\tcontentEditable\r\n\t\t\t\t\t\t\t\tsuppressContentEditableWarning\r\n\t\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\t\tbackground: bgColor, position: 'absolute',\r\n\t\t\t\t\t\t\t\t\ttop: '0',\r\n\t\t\t\t\t\t\t\t\tzIndex: '-1',\r\n\t\t\t\t\t\t\t\t\tleft: '4.4vw',\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{/* 颜色适应每行方案 */}\r\n\t\t\t\t\t\t\t\t{textContentOnShow.map((text: string, index: number) => {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<span className=\"mappingarea_span\" key={index} style={{ maxWidth: '100%' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{text ? text : \" \"}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\t{\r\n\t\t\t\t\tisIOS() && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{/* 编辑区 */}\r\n\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\tref={textareaRef}\r\n\t\t\t\t\t\t\t\tcols={20}\r\n\t\t\t\t\t\t\t\twrap=\"hard\"\r\n\t\t\t\t\t\t\t\tname=\"input_content\"\r\n\t\t\t\t\t\t\t\tclassName=\"text-input\"\r\n\t\t\t\t\t\t\t\tvalue={textContent}\r\n\t\t\t\t\t\t\t\tonChange={handleOnChange}\r\n\t\t\t\t\t\t\t\tstyle={{ color: textColor, fontFamily: textInfo.fontFamily }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{/* 映射颜色区域 */}\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName=\"mappingarea\"\r\n\t\t\t\t\t\t\t\tref={mappingarea}\r\n\t\t\t\t\t\t\t\tcontentEditable\r\n\t\t\t\t\t\t\t\tsuppressContentEditableWarning\r\n\t\t\t\t\t\t\t\tstyle={{ background: bgColor }}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{/* 颜色适应每行方案 */}\r\n\t\t\t\t\t\t\t\t{textContentOnShow.map((text: string, index: number) => {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<span className=\"mappingarea_span\" key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t{text ? text : \" \"}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</>\r\n\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\t{/* 颜色选择器 */}\r\n\t\t\t\t<div ref={coverRef} className=\"cover\">\r\n\t\t\t\t\t<ColorSelector\r\n\t\t\t\t\t\tref={colorSelectorRef}\r\n\t\t\t\t\t\tonColorChange={handleChangeColor}\r\n\t\t\t\t\t\tonBackGroundChange={onBackGroundChange}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t);\r\n});\r\n\r\nexport default TextMenu;\r\n","import { useEffect, useState } from \"react\"\r\n\r\nconst VideoMenu = ({ createImage, videoMenus, menuState }: any) => {\r\n\r\n const [active, setActive] = useState<number>();\r\n const [menus, setMenus] = useState<any>([])\r\n const [items, setItems] = useState<any>([]);\r\n\r\n const onClickClass = ({ id, emojiList }: any) => {\r\n setActive(id);\r\n setItems(emojiList)\r\n }\r\n\r\n const onClickItem = ({ emojiId, fileUrl }: any) => {\r\n if (menuState === \"video\") {\r\n createImage(fileUrl, emojiId);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n setMenus(videoMenus);\r\n if (videoMenus.length) {\r\n onClickClass(videoMenus[0]);\r\n }\r\n }, [videoMenus]);\r\n\r\n return (\r\n <div className={`editor-video-menu ${menuState === \"video\" ? \"active\" : \"\"}`}>\r\n <div className=\"editor-video-menu-header\">\r\n {\r\n menus.map((item: any) => (\r\n <div className={ active === item.id ? \"active\": \"\" } key={item.id} onClick={() => onClickClass(item)} >{item.classifyType}</div>\r\n ))\r\n }\r\n </div>\r\n <div className=\"editor-video-menu-itmes\">\r\n {\r\n items.map((item: any) => (\r\n <div key={item.emojiId} onClick={() => onClickItem(item)}>\r\n <img loading=\"lazy\" src={item.fileUrl.thumbnailUrl} alt=\"素材\" />\r\n </div>\r\n ))\r\n }\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default VideoMenu","import { VmmlPlayer } from \"@versa_ai/vmml-player\";\r\nimport { type MutableRefObject, forwardRef, useEffect, useRef, useState, useImperativeHandle, useMemo } from \"react\";\r\nimport type { AnyZodObject } from \"zod\";\r\nimport { getFrames, takeScreenshot, convertVmmlTextScaleByForbidden } from \"@versa_ai/vmml-utils\";\r\nimport \"./assets/css/index.scss\";\r\nimport Controls from \"./components/Controls\";\r\nimport EditorCanvas from \"./components/EditorCanvas\";\r\nimport Loaidng from \"./components/Loading\";\r\nimport MaxTextLayer from \"./components/MaxTextLayer\";\r\nimport TextMenu from \"./components/TextMenu\";\r\nimport VideoMenu from \"./components/VideoMenu\";\r\nimport HistoryClass from \"./utils/HistoryClass\";\r\nimport VmmlConverter from \"./utils/VmmlConverter\";\r\nimport { emotionIcon, wordIcon } from \"./utils/const\";\r\n\r\nconst historyClass = new HistoryClass();\r\nconst EditorFn = <Schema extends AnyZodObject, Props>(\r\n\t{\r\n\t\tvmml,\r\n\t\tpauseFrame = 0,\r\n\t\tmaxText = 10,\r\n\t\tmaxVideo = 5,\r\n\t\tvideoMenus = [],\r\n\t\tonMenuChange,\r\n\t\tshowTextButtons = false,\r\n\t\teditableArray = [],\r\n\t\ttemplateId,\r\n\t\tstrategyId,\r\n\t\theight = '100vh',\r\n\t\tpauseWhenBuffering = false,\r\n\t}: any,\r\n\tref: any,\r\n) => {\r\n\tvmml = convertVmmlTextScaleByForbidden(vmml);\r\n\tconst textMenuRef = useRef<any>(null);\r\n\tconst vmmlPlayerRef = useRef();\r\n\tconst canvasRef = useRef();\r\n\tconst fps = 30;\r\n\tconst once = useRef(false);\r\n\tconst [player, setPlayer] = useState<any>();\r\n\tconst [loading, setLoading] = useState<boolean>(true);\r\n\tconst [frame, setFrame] = useState<number>(pauseFrame);\r\n\tconst [isPlaying, setIsPlaying] = useState<boolean>(false);\r\n\tconst [showCanvas, setShowCanvas] = useState(false);\r\n const [filterIds, setFilterIds] = useState<string[]>([]);\r\n\tconst [durationInFrames, setDurationInFrames] = useState(getFrames(vmml?.template?.duration || 1, fps));\r\n\tconst [previewState, setPreviewState] = useState<boolean>(true); // true预览态 false编辑态\r\n\tconst [menuState, setMenuState] = useState<string>(\"\"); // text 文字菜单 video 表情包菜单 空不显示\r\n\tconst [canvasSize, setCanvasSize] = useState({ width: 0, height: 0, top: 0 }); // 画布尺寸\r\n\tconst [textInfo, setTextInfo] = useState({});\r\n\tconst [isShowMaxTextLayer, setIsShowMaxTextLayer] = useState(false);\r\n\tconst [buffering, setBuffering] = useState(false);\r\n\tconst videoList = useRef<any>([]);\r\n\tconst [signList, setSignList] = useState<any>([]);\r\n\tconst [tips, setTips] = useState(\"\");\r\n\tconst [dragState, setDragState] = useState(0);\r\n\tconst vmmlConverterRef = useRef<any>(null);\r\n\tconst [initFcObjs, setInitFcObjs] = useState([]);\r\n\tconst vmmlFlag = useRef(false);\r\n\tconst needPlay = useRef(true);\r\n\r\n\tconst setVmml = () => {\r\n\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\tif (!current) return;\r\n\t\tif (!once.current) {\r\n\t\t\tcurrent.setVmml(vmml, pauseFrame);\r\n\t\t} else {\r\n\t\t\tcurrent.setVmml(vmml, frame);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onPlayerReady = () => {\r\n\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\tvmmlFlag.current = false;\r\n\t\tif (current && current.playerRef) {\r\n\t\t\tsetPlayer(current.playerRef);\r\n\t\t\tcurrent.unmute();\r\n\t\t\tif (!once.current) {\r\n\t\t\t\tonce.current = true;\r\n\t\t\t} else {\r\n\t\t\t\tif (needPlay.current) {\r\n\t\t\t\t\tcurrent.play();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tneedPlay.current = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetShowCanvas(false);\r\n\t\tsetLoading(false);\r\n\t};\r\n\r\n\tconst onClickMain = () => {\r\n\t\tif (buffering) return\r\n\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\tif (current) {\r\n\t\t\tif (isPlaying) {\r\n\t\t\t\tintoEdit();\r\n\t\t\t} else {\r\n\t\t\t\tcurrent.unmute();\r\n\t\t\t\tcurrent.play();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// 回到预览态\r\n\tconst enterPreview = (canvas: any, hiddenMenu: boolean = false) => {\r\n\t\tif (hiddenMenu) {\r\n\t\t\tsetMenuState(\"\");\r\n\t\t} else {\r\n\t\t\tsetMenuState(\"\");\r\n\t\t\tsetPreviewState(true);\r\n\t\t\thistoryClass.onCanvasRoute(canvas);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onControlsClick = () => {\r\n\t\tif (previewState) {\r\n\t\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\t\tcurrent.unmute();\r\n\t\t\tcurrent.play();\r\n\t\t} else {\r\n\t\t\tsetMenuState(\"\");\r\n\t\t\tsetPreviewState(true);\r\n\t\t}\r\n\t}\r\n\r\n\t// 点击底部菜单\r\n\tconst onClickMenu = (type: string) => {\r\n\t\tif (type === \"text\" && checkTextNum()) return;\r\n\t\tif (type === \"video\" && checkVideoNum()) return;\r\n\t\tif (previewState) {\r\n\t\t\tintoEdit();\r\n\t\t}\r\n\t\tsetTextInfo({});\r\n\t\tsetMenuState(type);\r\n\t};\r\n\r\n\tconst checkTextNum = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tconst textNums = current.getfObjectNums(\"文字\");\r\n\t\t\tif (textNums >= maxText) {\r\n\t\t\t\tsetTips(`最多添加${maxText}个文字`);\r\n\t\t\t\tsetIsShowMaxTextLayer(true);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t// 检查表情包数量\r\n\tconst checkVideoNum = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tconst videoNum = current.getfObjectNums(\"表情包\");\r\n\t\t\tif (videoNum >= maxVideo) {\r\n\t\t\t\tsetTips(`最多添加${maxVideo}个表情包`);\r\n\t\t\t\tsetIsShowMaxTextLayer(true);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t// 获取画板素材实例\r\n\tconst getfcObject = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\treturn current.getfcObject();\r\n\t\t}\r\n\t\treturn []\r\n\t}\r\n\r\n\t// 暂停进入编辑\r\n\tconst intoEdit = (frame?: number) => {\r\n\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\tif (current) {\r\n\t\t\tframe && current.seekTo(frame);\r\n\t\t\tcurrent.pause();\r\n\t\t\tif (canvasRef.current) {\r\n\t\t\t\tconst { current: canvasC }: any = canvasRef;\r\n\t\t\t\tcanvasC.checkObjectInPoint(frame);\r\n\t\t\t}\r\n\t\t\tgetAllVideoFrames();\r\n\t\t\tsetShowCanvas(true);\r\n\t\t\tsetPreviewState(false);\r\n\t\t}\r\n\t};\r\n\r\n\t// 获取表情包当前帧截图\r\n\tconst getAllVideoFrames = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tconst doms = document.querySelectorAll(\"[data-clipid][data-cliptype=video][data-editorType],[data-editclip='true'][data-cliptype=video]\");\r\n\t\tfor (const item of Array.from(doms)) {\r\n\t\t\tconst id = item.getAttribute(\"data-clipid\");\r\n\t\t\tconst video = item.querySelector(\"video\");\r\n\t\t\tconst base64 = takeScreenshot(video);\r\n\t\t\tcurrent.updateImage(id, base64);\r\n\t\t}\r\n\t}\r\n\r\n\t// 新增表情包\r\n\tconst createImage = async (file: any, emojiId: string) => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current && !checkVideoNum()) {\r\n\t\t\tconst fObj = await current.createImage(file, emojiId);\r\n\t\t\tvmmlConverterRef.current.addVideoClip(fObj);\r\n\t\t\tsetMenuState(\"\");\r\n\t\t\tsetPreviewState(true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst createText = async (data: any) => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tconst server = data.id ? 'updateText' : 'createText';\r\n\t\t\tawait current[server](data);\r\n\t\t\tsetMenuState(\"\");\r\n\t\t}\r\n\t};\r\n\r\n\tconst onVideoChange = (clipData: any) => {\r\n\t\tconst index = videoList.current.findIndex((item: any) => item.id === clipData.id);\r\n\t\tif (index > -1) {\r\n\t\t\tvideoList.current.splice(index, 1);\r\n\t\t} else {\r\n\t\t\tvideoList.current.push(clipData);\r\n\t\t}\r\n\t\tsetSignList([...videoList.current]);\r\n\t}\r\n\r\n\tconst handleUndo = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tcurrent.handleUndo();\r\n\t\t}\r\n\t};\r\n\tconst handleRedo = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tcurrent.handleRedo();\r\n\t\t}\r\n\t};\r\n\r\n\tconst getActions = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\treturn current.getActions().length\r\n\t}\r\n\tconst textClose = (id: string) => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tid && current.changeObjectVisible(id);\r\n\t\tsetMenuState(\"\");\r\n\t};\r\n\r\n\tconst intoTextEdit = (textInfo: any) => {\r\n\t\tsetMenuState(\"text\");\r\n\t\tsetTextInfo(textInfo);\r\n\t};\r\n\r\n\tconst onFrameUpdate = (e: any) => {\r\n\t\tsetFrame(e.detail.frame)\r\n\t};\r\n\tconst onPlay = () => {\r\n\t\tsetIsPlaying(true);\r\n\t};\r\n\tconst onPause = () => {\r\n\t\tsetIsPlaying(false);\r\n\t};\r\n\tconst onWaiting = () => {\r\n\t\tsetShowCanvas(false);\r\n\t\tsetPreviewState(true);\r\n\t\tsetBuffering(true);\r\n\t}\r\n\r\n\tconst onResume = () => {\r\n\t\tsetBuffering(false);\r\n\t}\r\n\r\n\t// 初始化可编辑的clip\r\n\tconst initCanEditClips = (tracks: any = []) => {\r\n\t\tif (editableArray.length) {\r\n\t\t\tconst list = findEditClips(tracks);\r\n\t\t\tif (list.length) {\r\n\t\t\t\tconst { current }: any = canvasRef;\r\n\t\t\t\tlist.forEach((clip: any) => {\r\n\t\t\t\t\tif (clip.videoClip) {\r\n\t\t\t\t\t\tcurrent.createImageFromClip(clip);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcurrent.createTextFromClip(clip);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst findEditClips = (tracks: any = []) => {\r\n\t\tconst list: any = [];\r\n\t\ttracks.forEach((track: any) => {\r\n\t\t\ttrack.clips.forEach((clip: any) => {\r\n\t\t\t\tif (editableArray.includes(clip.id)) {\r\n\t\t\t\t\tclip.edit = true;\r\n\t\t\t\t\tlist.push(clip);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t});\r\n\t\treturn list\r\n\t}\r\n\r\n\t// 返序列化fc对象\r\n\tconst initFcObjects = (tracks: any = []) => {\r\n\t\tconst fcTracks = tracks.filter((item: any) => item.editorType);\r\n\t\tif (fcTracks.length) {\r\n\t\t\tconst clips = fcTracks.map((item: any) => item.clips).flat().filter((item: any) => Reflect.has(item, \"fObj\"));\r\n\t\t\tconst fObjs = clips.map((item: any) => item.fObj);\r\n\t\t\tsetInitFcObjs(fObjs);\r\n\t\t\t// 表情包标记\r\n\t\t\tfObjs.forEach((item: any) => {\r\n\t\t\t\tonVideoChange(item.clipData);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// 获取更新后的vmml\r\n\tconst getVmml = () => {\r\n\t\ttry {\r\n\t\t\tconst tracks = vmml.template.tracks.filter((item: any) => item.editorType === \"文字\");\r\n\t\t\ttracks.forEach((track: any) => {\r\n\t\t\t\ttrack.clips.forEach((clip: any) => {\r\n\t\t\t\t\tclip.fObj.src = '';\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t} catch {\r\n\t\t\tconsole.log(\"出错了\")\r\n\t\t}\r\n\t\treturn vmml\r\n\t};\r\n\r\n\tconst getPlayer = () => {\r\n\t\treturn player\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onMenuChange && typeof onMenuChange === \"function\") {\r\n\t\t\tonMenuChange(menuState);\r\n\t\t}\r\n\t}, [menuState]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (previewState && !vmmlFlag.current) {\r\n\t\t\tvmmlFlag.current = true;\r\n\t\t\tsetVmml();\r\n\t\t}\r\n\t}, [previewState]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (canvasSize.width && canvasSize.height && !vmmlConverterRef.current && vmml) {\r\n\t\t\tvmmlConverterRef.current = new VmmlConverter({ vmml, canvasSize });\r\n\t\t}\r\n\t\tif (canvasSize.width) {\r\n\t\t\tinitCanEditClips(vmml.template.tracks);\r\n\t\t}\r\n\t}, [canvasSize, vmml]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (vmml) {\r\n\t\t\tinitFcObjects(vmml.template.tracks);\r\n\t\t}\r\n\t}, [vmml]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (player) {\r\n\t\t\tconst parent = player.getContainerNode();\r\n\t\t\tif (!canvasSize.width) {\r\n\t\t\t\tconst playerElement = parent?.children[0];\r\n\t\t\t\tconst { width, height } = playerElement?.getBoundingClientRect() || {};\r\n\t\t\t\tsetCanvasSize({ width, height, top: playerElement.offsetTop });\r\n\t\t\t}\r\n\t\t\tplayer.addEventListener(\"play\", onPlay);\r\n\t\t\tplayer.addEventListener(\"pause\", onPause);\r\n\t\t\tplayer.addEventListener(\"frameupdate\", onFrameUpdate);\r\n\t\t\tplayer.addEventListener(\"waiting\", onWaiting);\r\n\t\t\tplayer.addEventListener(\"resume\", onResume);\r\n\t\t\treturn () => {\r\n\t\t\t\tplayer.removeEventListener(\"play\", onPlay);\r\n\t\t\t\tplayer.removeEventListener(\"pause\", onPause);\r\n\t\t\t\tplayer.removeEventListener(\"frameupdate\", onFrameUpdate);\r\n\t\t\t\tplayer.removeEventListener(\"waiting\", onWaiting);\r\n\t\t\t\tplayer.removeEventListener(\"resume\", onResume);\r\n\t\t\t}\r\n\t\t}\r\n\t}, [player]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showCanvas) {\r\n\t\t\tconst ids = [...signList.map((item: any) => item.id),...editableArray];\r\n setFilterIds(ids);\r\n } else {\r\n setFilterIds([]);\r\n }\r\n\t}, [showCanvas, signList])\r\n\r\n\tuseEffect(() => {\r\n\t\tif (dragState === 2) {\r\n\t\t\tneedPlay.current = false;\r\n\t\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\t\tcurrent.setVmml(vmml, frame, false);\r\n\t\t\tsetShowCanvas(false);\r\n\t\t}\r\n\t\tif (dragState === 3 || dragState === 4) {\r\n\t\t\tsetShowCanvas(true);\r\n\t\t\tsetPreviewState(false);\r\n\t\t}\r\n\t}, [dragState]);\r\n\r\n\tuseImperativeHandle(ref,\r\n\t\t() => ({\r\n\t\t\tgetActions,\r\n\t\t\tgetfcObject,\r\n\t\t\tgetVmml,\r\n\t\t\tgetPlayer,\r\n\t\t\ttexteditClose,\r\n\t\t\ttextFinish\r\n\t\t}),\r\n\t\t[vmml, player]\r\n\t)\r\n\tconst texteditClose = ()=>{\r\n\t\tif (textMenuRef) {\r\n\t\t\ttextMenuRef.current.close();\r\n\t\t}\r\n\t}\r\n\tconst textFinish = () =>{\r\n\t\tif (textMenuRef) {\r\n\t\t\ttextMenuRef.current.handleSubmit();\r\n\t\t}\r\n\t}\r\n\r\n\tconst menuStyles: any = useMemo(() => {\r\n\t\tif (loading) {\r\n\t\t\treturn {\r\n\t\t\t\topacity: 0.4,\r\n\t\t\t\tpointerEvents: 'none'\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {}\r\n\t}, [loading])\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<div className=\"editor\" style={{ height }}>\r\n\t\t\t\t<div className=\"editor-vessel\" onClick={() => {\r\n\t\t\t\t\tsetMenuState(\"\")\r\n\t\t\t\t}}>\r\n\t\t\t\t\t<section className={`main ${menuState === 'text' ? 'text-style' : ''}`}>\r\n\t\t\t\t\t\t<div className=\"vessel\" onClick={onClickMain}>\r\n\t\t\t\t\t\t\t<VmmlPlayer\r\n\t\t\t\t\t\t\t\tref={vmmlPlayerRef}\r\n\t\t\t\t\t\t\t\tvmml={vmml}\r\n\t\t\t\t\t\t\t\texistenceBorderRadio\r\n\t\t\t\t\t\t\t\tmoveToBeginningWhenEnded\r\n\t\t\t\t\t\t\t\tmuted={true}\r\n\t\t\t\t\t\t\t\tfps={fps}\r\n\t\t\t\t\t\t\t\tonPlayerReady={onPlayerReady}\r\n\t\t\t\t\t\t\t\t// editableArray={editableArray}\r\n\t\t\t\t\t\t\t\tpremountFor={40}\r\n\t\t\t\t\t\t\t\tpauseWhenBuffering={pauseWhenBuffering}\r\n\t\t\t\t\t\t\t\tfilterIds={filterIds}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<EditorCanvas\r\n\t\t\t\t\t\t\tref={canvasRef}\r\n\t\t\t\t\t\t\tpreviewState={previewState}\r\n\t\t\t\t\t\t\tshowCanvas={showCanvas}\r\n\t\t\t\t\t\t\tcanvasSize={canvasSize}\r\n\t\t\t\t\t\t\tenterPreview={enterPreview}\r\n\t\t\t\t\t\t\tintoTextEdit={intoTextEdit}\r\n\t\t\t\t\t\t\tframe={frame}\r\n\t\t\t\t\t\t\tvmml={vmml}\r\n\t\t\t\t\t\t\tdragState={dragState}\r\n\t\t\t\t\t\t\tinitFcObjs={initFcObjs}\r\n\t\t\t\t\t\t\tonVideoChange={onVideoChange}\r\n\t\t\t\t\t\t\t// textInfoReset={textInfoReset}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<div className=\"controls-box\">\r\n\t\t\t\t\t\t\t<Controls\r\n\t\t\t\t\t\t\t\tplayer={player}\r\n\t\t\t\t\t\t\t\tvmmlRef={vmmlPlayerRef}\r\n\t\t\t\t\t\t\t\tfps={fps}\r\n\t\t\t\t\t\t\t\tdurationInFrames={durationInFrames}\r\n\t\t\t\t\t\t\t\tintoEdit={intoEdit}\r\n\t\t\t\t\t\t\t\tframe={frame}\r\n\t\t\t\t\t\t\t\tisPlaying={isPlaying}\r\n\t\t\t\t\t\t\t\tsetDragState={setDragState}\r\n\t\t\t\t\t\t\t\tonControlsClick={onControlsClick}\r\n\t\t\t\t\t\t\t\tsignList={signList}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<Loaidng show={loading} />\r\n\t\t\t\t\t</section>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div className=\"padding-box\"></div>\r\n\t\t\t\t\t\t<section style={menuStyles} className={`footer ${menuState === 'text' ? 'text-style' : ''}`}>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tmaxText > 0 && (\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => onClickMenu(\"text\")}\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-click=\"c375146.d480849\"\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-expo\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-param={`Template_Id=${templateId}^Strategy_Id=${strategyId}`}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<img src={wordIcon} alt=\"word\" />\r\n\t\t\t\t\t\t\t\t\t\t<p>文字</p>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tmaxVideo > 0 && (\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => onClickMenu(\"video\")}\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-click=\"c375146.d480850\"\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-expo\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-param={`Template_Id=${templateId}^Strategy_Id=${strategyId}`}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<img src={emotionIcon} alt=\"emotion\" />\r\n\t\t\t\t\t\t\t\t\t\t<p>表情包</p>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</section>\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmaxVideo > 0 && (\r\n\t\t\t\t\t\t\t\t<VideoMenu menuState={menuState} createImage={createImage} videoMenus={videoMenus} />\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t{menuState === \"text\" && (\r\n\t\t\t\t\t\t<TextMenu ref={textMenuRef} createText={createText} textClose={textClose} textInfo={textInfo} showTextButtons={showTextButtons} />\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t<MaxTextLayer textLayerHide={() => setIsShowMaxTextLayer(false)} show={isShowMaxTextLayer} text={tips} />\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nconst forward = forwardRef as <T, P = { [propName: string]: any }>(\r\n\trender: (props: P, PlayerRef: React.MutableRefObject<T>) => React.ReactElement | null,\r\n) => (props: P & React.RefAttributes<T>) => React.ReactElement | null;\r\n\r\nexport const Editor = forward(EditorFn);\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/assets/css/index.scss","../src/utils/const.ts","../src/components/SeekBar.tsx","../src/components/Controls.tsx","../src/utils/HistoryClass.ts","../src/utils/VmmlConverter.ts","../src/utils/usePeekControl.ts","../src/components/EditorCanvas.tsx","../src/assets/css/loading.scss","../src/components/Loading.tsx","../src/assets/css/maxTextLayer.scss","../src/components/MaxTextLayer.tsx","../src/assets/css/editorTextMenu.scss","../src/utils/keyBoardUtils.ts","../src/assets/css/colorSelector.scss","../src/components/ColorSelector.tsx","../src/components/TextMenu.tsx","../src/components/VideoMenu.tsx","../src/index.tsx"],"names":["interpolate","useRef","useState","useMemo","useCallback","useEffect","jsx","jsxs","formatTime","getFontSize","uuidv4","rgbaToArgb","hexToArgb","fabric","forwardRef","fObj","getFrames","argbToRgba","urlToBlob","toSvg","historyClass","useImperativeHandle","css","Fragment","isIOS","textInfo","bgColor","textColor","textBasicInfo","convertVmmlTextScaleByForbidden","frame","takeScreenshot","height","VmmlPlayer"],"mappings":";;;;;;;;;;;;;;AAAA,IAAM,GAAA,GAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","file":"index.js","sourcesContent":["const css = `@charset \"UTF-8\";\n.editor {\n background: #000;\n width: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n}\n.editor .padding-box {\n flex: 1;\n}\n.editor > .header {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: 11.467vw;\n padding-left: 4.4vw;\n padding-right: 3.2vw;\n box-sizing: border-box;\n position: relative;\n}\n.editor > .header > .close {\n width: 4vw;\n height: 4vw;\n}\n.editor > .header > .close img {\n width: 100%;\n height: 100%;\n}\n.editor > .header > .history-operate {\n height: 7.2vw;\n display: none;\n align-items: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.editor > .header > .history-operate img {\n width: 4.667vw;\n height: 5.067vw;\n}\n.editor > .header > .history-operate > img:last-child {\n margin-left: 8vw;\n}\n.editor > .header > .next-button {\n width: 16vw;\n height: 7.2vw;\n line-height: 7.2vw;\n background: #1677FF;\n border-radius: 6.533vw;\n text-align: center;\n font-size: 3.2vw;\n color: #fff;\n}\n.editor .text-style {\n filter: blur(10px);\n}\n.editor .editor-vessel {\n width: 100%;\n height: 100%;\n}\n.editor .main {\n width: 100%;\n height: 100%;\n margin: auto;\n position: relative;\n display: flex;\n justify-content: center;\n border-radius: 3.2vw;\n overflow: hidden;\n}\n.editor .main .vessel {\n width: 100%;\n height: 100%;\n}\n.editor .main .controls-box {\n height: 12vw;\n position: absolute;\n bottom: 0;\n width: 100%;\n border-radius: 3.2vw;\n}\n.editor .main .player-controls {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n padding: 0 2.13vw;\n box-sizing: border-box;\n background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.6) 100%);\n}\n.editor .main .player-controls .mr-16 {\n margin-right: 2.13vw;\n}\n.editor .main .player-controls .player-controls-toggle > img {\n display: block;\n width: 4.8vw;\n height: 4.8vw;\n cursor: pointer;\n}\n.editor .main .player-controls .player-controls-seekbar {\n flex: 1;\n position: relative;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container {\n height: 100%;\n user-select: none;\n touch-action: none;\n position: relative;\n cursor: pointer;\n box-sizing: border-box;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background {\n user-select: none;\n height: 1.6vw;\n width: 100%;\n background-color: rgba(255, 255, 255, 0.2);\n border-radius: 1vw;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-fill {\n position: absolute;\n user-select: none;\n width: 100%;\n height: 100%;\n border-radius: 1vw;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-line {\n height: 100%;\n border-radius: 1vw;\n background-color: #eeeeee;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-sign {\n width: 10px;\n position: absolute;\n top: 50%;\n margin-top: -6px;\n}\n.editor .main .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-cirle {\n position: absolute;\n top: -0.8vw;\n width: 3.2vw;\n height: 3.2vw;\n border-radius: 50%;\n background: #eeeeee;\n}\n.editor .main .player-controls .player-controls-time {\n width: 10vw;\n color: #fff;\n}\n.editor .main .play-btn {\n position: absolute;\n bottom: 4vw;\n left: 3vw;\n width: 4.8vw;\n height: 4.8vw;\n}\n.editor .main .play-btn img {\n width: 100%;\n height: 100%;\n display: block;\n}\n.editor .main .opacity-06 {\n opacity: 0.6;\n}\n.editor .footer {\n display: flex;\n justify-content: center;\n box-sizing: border-box;\n width: 100%;\n padding: 0 20.333vw 10.933vw;\n}\n.editor .footer > div {\n width: 30%;\n margin: 0 15%;\n}\n.editor .footer > div img {\n width: 6.4vw;\n height: 6.4vw;\n display: block;\n margin: auto;\n}\n.editor .footer > div p {\n font-size: 3.2vw;\n color: #fff;\n margin-top: 1.867vw;\n text-align: center;\n}\n.editor .not-show-text {\n justify-content: space-around;\n}\n.editor .editor-video-menu {\n position: fixed;\n height: 0;\n width: 100%;\n background: #1E1E1E;\n bottom: 0;\n border-radius: 8px 8px 0 0;\n transition: all 0.5s ease-in-out;\n}\n.editor .editor-video-menu.active {\n height: 38.13vh;\n}\n.editor .editor-video-menu .editor-video-menu-header {\n display: flex;\n padding: 1.6vw 1.6vw 0;\n height: 4.81vh;\n line-height: 4.81vh;\n color: rgba(255, 255, 255, 0.4);\n overflow: hidden;\n overflow-x: auto;\n}\n.editor .editor-video-menu .editor-video-menu-header::-webkit-scrollbar {\n display: none; /* 隐藏滚动条 */\n}\n.editor .editor-video-menu .editor-video-menu-header > div {\n margin: 0 3.2vw;\n white-space: nowrap;\n}\n.editor .editor-video-menu .editor-video-menu-header .active {\n color: #FFFFFF;\n}\n.editor .editor-video-menu .editor-video-menu-itmes {\n padding: 0 3.33vw;\n max-height: calc(100% - 4.81vh - 1.6vw);\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n row-gap: 3.2vw;\n column-gap: 2.6vw;\n overflow: auto;\n}\n.editor .editor-video-menu .editor-video-menu-itmes > div {\n width: 21.33vw;\n height: 21.33vw;\n background-color: #1e1e1e;\n}\n.editor .editor-video-menu .editor-video-menu-itmes > div img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n@media screen and (min-width: 750px) {\n .editor .controls-box {\n height: 20% !important;\n border-radius: 3.2vw;\n }\n .editor .player-controls {\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n padding: 0 1%;\n }\n .editor .player-controls .mr-16 {\n margin-right: 2.13vw;\n }\n .editor .player-controls .player-controls-toggle > img {\n display: block;\n width: 40px !important;\n height: 40px !important;\n cursor: pointer;\n }\n .editor .player-controls .player-controls-seekbar {\n flex: 1;\n }\n .editor .player-controls .player-controls-seekbar .seekbar-container {\n height: 2px !important;\n }\n .editor .player-controls .player-controls-seekbar .seekbar-container .seekbar-background {\n height: 10px !important;\n width: 100%;\n border-radius: 1vw;\n }\n .editor .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-fill {\n width: 100%;\n height: 80%;\n border-radius: 1vw;\n }\n .editor .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-line {\n height: 100%;\n border-radius: 1vw;\n }\n .editor .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-sign {\n width: 10px;\n top: 50%;\n margin-top: -6px;\n }\n .editor .player-controls .player-controls-seekbar .seekbar-container .seekbar-background .seekbar-cirle {\n top: -10px !important;\n width: 40px !important;\n height: 40px !important;\n }\n .editor .player-controls .player-controls-time {\n width: 6vw !important;\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJpbmRleC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUdKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUVGO0VBQ0U7O0FBR0o7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdKO0VBQ0U7O0FBR0Y7RUFDRTtFQUVBOztBQUdGO0VBRUU7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFHQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdKO0VBQ0U7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBS1I7RUFDRTtFQUNBOztBQUdKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTs7QUFHSjtFQUNFOztBQUtKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUtOO0VBQ0U7O0FBR0Y7RUFDRTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFFRjtFQUNFO0VBQ0E7O0FBRUY7RUFDRTs7QUFHSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBOzs7QUFRVjtFQUVJO0lBQ0U7SUFDQTs7RUFFRjtJQUNFO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0VBQ0E7SUFDRTs7RUFHQTtJQUNFO0lBQ0E7SUFDQTtJQUNBOztFQUdKO0lBQ0U7O0VBQ0E7SUFDRTs7RUFDQTtJQUNFO0lBQ0E7SUFDQTs7RUFDQTtJQUNFO0lBQ0E7SUFDQTs7RUFFRjtJQUNFO0lBQ0E7O0VBRUY7SUFDRTtJQUNBO0lBQ0E7O0VBRUY7SUFDRTtJQUNBO0lBQ0E7O0VBS1I7SUFDRSIsInNvdXJjZXNDb250ZW50IjpbIi5lZGl0b3J7XHJcbiAgYmFja2dyb3VuZDogIzAwMDtcclxuICB3aWR0aDogMTAwJTtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAucGFkZGluZy1ib3gge1xyXG4gICAgZmxleDogMTtcclxuICB9XHJcbiAgLy8g6aG26YOoXHJcbiAgJj4uaGVhZGVye1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDogMTEuNDY3dnc7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDQuNHZ3O1xyXG4gICAgcGFkZGluZy1yaWdodDogMy4ydnc7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgJj4uY2xvc2V7XHJcbiAgICAgIHdpZHRoOiA0dnc7XHJcbiAgICAgIGhlaWdodDogNHZ3O1xyXG4gICAgICBpbWd7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAmPi5oaXN0b3J5LW9wZXJhdGV7XHJcbiAgICAgIGhlaWdodDogNy4ydnc7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgbGVmdDogNTAlO1xyXG4gICAgICB0b3A6IDUwJTtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKTtcclxuICAgICAgaW1ne1xyXG4gICAgICAgIHdpZHRoOiA0LjY2N3Z3O1xyXG4gICAgICAgIGhlaWdodDogNS4wNjd2dztcclxuICAgICAgfVxyXG4gICAgICAmPmltZzpsYXN0LWNoaWxke1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA4dnc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICY+Lm5leHQtYnV0dG9ue1xyXG4gICAgICB3aWR0aDogMTZ2dztcclxuICAgICAgaGVpZ2h0OiA3LjJ2dztcclxuICAgICAgbGluZS1oZWlnaHQ6IDcuMnZ3O1xyXG4gICAgICBiYWNrZ3JvdW5kOiAjMTY3N0ZGO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA2LjUzM3Z3O1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMy4ydnc7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgfVxyXG4gIH1cclxuICAudGV4dC1zdHlsZXtcclxuICAgIGZpbHRlcjpibHVyKDEwcHgpXHJcbiAgfVxyXG5cclxuICAuZWRpdG9yLXZlc3NlbCB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIC8vIHBhZGRpbmctdG9wOiAzLjJ2dztcclxuICAgIGhlaWdodDogMTAwJTtcclxuICB9XHJcbiAgLy9wbGF5ZXLkuI7nlLvluINcclxuICAubWFpbntcclxuICAgIC8vIHdpZHRoOiA4MS40Njd2dztcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgLy8gaGVpZ2h0OiAxNDQuOHZ3O1xyXG4gICAgbWFyZ2luOiBhdXRvO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMy4ydnc7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgLnZlc3NlbCB7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICB9XHJcbiAgICAuY29udHJvbHMtYm94IHtcclxuICAgICAgaGVpZ2h0OiAxMnZ3O1xyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgIGJvdHRvbTogMDtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDMuMnZ3O1xyXG4gICAgfVxyXG4gICAgLnBsYXllci1jb250cm9scyB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgIHBhZGRpbmc6IDAgMi4xM3Z3O1xyXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoIDE4MGRlZywgcmdiYSgwLDAsMCwwKSAwJSwgcmdiYSgwLDAsMCwwLjYpIDEwMCUpO1xyXG4gICAgICAubXItMTYge1xyXG4gICAgICAgIG1hcmdpbi1yaWdodDogMi4xM3Z3O1xyXG4gICAgICB9XHJcbiAgICAgIC5wbGF5ZXItY29udHJvbHMtdG9nZ2xlIHtcclxuICAgICAgICA+aW1nIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgICAgd2lkdGg6IDQuOHZ3O1xyXG4gICAgICAgICAgaGVpZ2h0OiA0Ljh2dztcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLnBsYXllci1jb250cm9scy1zZWVrYmFyIHtcclxuICAgICAgICBmbGV4OiAxO1xyXG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAuc2Vla2Jhci1jb250YWluZXIge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICB0b3VjaC1hY3Rpb246IG5vbmU7XHJcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgICAgICAgLnNlZWtiYXItYmFja2dyb3VuZCB7XHJcbiAgICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgICAgICAgICBoZWlnaHQ6IDEuNnZ3O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpO1xyXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxdnc7XHJcbiAgICAgICAgICAgIC5zZWVrYmFyLWZpbGwge1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMXZ3O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5zZWVrYmFyLWxpbmUge1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxdnc7XHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAuc2Vla2Jhci1zaWduIHtcclxuICAgICAgICAgICAgICB3aWR0aDogMTBweDtcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgdG9wOiA1MCU7XHJcbiAgICAgICAgICAgICAgbWFyZ2luLXRvcDogLTZweDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAuc2Vla2Jhci1jaXJsZSB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgIHRvcDogLTAuOHZ3O1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAzLjJ2dztcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDMuMnZ3O1xyXG4gICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAjZWVlZWVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC5wbGF5ZXItY29udHJvbHMtdGltZSB7XHJcbiAgICAgICAgd2lkdGg6IDEwdnc7XHJcbiAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5wbGF5LWJ0biB7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiA0dnc7XHJcbiAgICAgIGxlZnQ6IDN2dztcclxuICAgICAgd2lkdGg6IDQuOHZ3O1xyXG4gICAgICBoZWlnaHQ6IDQuOHZ3O1xyXG4gICAgICBpbWcge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLm9wYWNpdHktMDYge1xyXG4gICAgICBvcGFjaXR5OiAwLjY7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL+W6lemDqFxyXG4gIC5mb290ZXJ7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBwYWRkaW5nOiAwIDIwLjMzM3Z3IDEwLjkzM3Z3O1xyXG4gICAgJj5kaXZ7XHJcbiAgICAgIHdpZHRoOiAzMCU7XHJcbiAgICAgIG1hcmdpbjogMCAxNSU7XHJcbiAgICAgIGltZ3tcclxuICAgICAgICB3aWR0aDogNi40dnc7XHJcbiAgICAgICAgaGVpZ2h0OiA2LjR2dztcclxuICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICBtYXJnaW46IGF1dG87XHJcbiAgICAgIH1cclxuICAgICAgcHtcclxuICAgICAgICBmb250LXNpemU6IDMuMnZ3O1xyXG4gICAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgICAgIG1hcmdpbi10b3A6IDEuODY3dnc7XHJcbiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAubm90LXNob3ctdGV4dHtcclxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xyXG4gIH1cclxuXHJcbiAgLmVkaXRvci12aWRlby1tZW51IHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIC8vIGhlaWdodDogMzguMTN2aDtcclxuICAgIGhlaWdodDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgYmFja2dyb3VuZDogIzFFMUUxRTtcclxuICAgIGJvdHRvbTogMDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwO1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZS1pbi1vdXQ7ICBcclxuICAgICYuYWN0aXZlIHtcclxuICAgICAgaGVpZ2h0OiAzOC4xM3ZoO1xyXG4gICAgfVxyXG4gICAgLmVkaXRvci12aWRlby1tZW51LWhlYWRlciB7XHJcbiAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgIHBhZGRpbmc6IDEuNnZ3IDEuNnZ3IDA7XHJcbiAgICAgIGhlaWdodDogNC44MXZoO1xyXG4gICAgICBsaW5lLWhlaWdodDogNC44MXZoO1xyXG4gICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQwKTtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgb3ZlcmZsb3cteDogYXV0bztcclxuICAgICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIge1xyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IC8qIOmakOiXj+a7muWKqOadoSAqL1xyXG4gICAgICB9XHJcbiAgICAgID5kaXYge1xyXG4gICAgICAgIG1hcmdpbjogMCAzLjJ2dztcclxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gICAgICB9XHJcbiAgICAgIC5hY3RpdmUge1xyXG4gICAgICAgIGNvbG9yOiAjRkZGRkZGO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuZWRpdG9yLXZpZGVvLW1lbnUtaXRtZXMge1xyXG4gICAgICBwYWRkaW5nOiAwIDMuMzN2dztcclxuICAgICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gNC44MXZoIC0gMS42dncpO1xyXG4gICAgICBkaXNwbGF5OiBncmlkO1xyXG4gICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCAxZnIpO1xyXG4gICAgICByb3ctZ2FwOiAzLjJ2dztcclxuICAgICAgY29sdW1uLWdhcDogMi42dnc7XHJcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xyXG4gICAgICA+ZGl2IHtcclxuICAgICAgICB3aWR0aDogMjEuMzN2dztcclxuICAgICAgICBoZWlnaHQ6IDIxLjMzdnc7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzFlMWUxZTtcclxuICAgICAgICBpbWcge1xyXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbkBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc1MHB4KSB7XHJcbiAgLmVkaXRvciB7XHJcbiAgICAuY29udHJvbHMtYm94IHtcclxuICAgICAgaGVpZ2h0OiAyMCUgIWltcG9ydGFudDtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMy4ydnc7XHJcbiAgICB9XHJcbiAgICAucGxheWVyLWNvbnRyb2xzIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgcGFkZGluZzogMCAxJTtcclxuICAgICAgLm1yLTE2IHtcclxuICAgICAgICBtYXJnaW4tcmlnaHQ6IDIuMTN2dztcclxuICAgICAgfVxyXG4gICAgICAucGxheWVyLWNvbnRyb2xzLXRvZ2dsZSB7XHJcbiAgICAgICAgPmltZyB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcclxuICAgICAgICAgIHdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLnBsYXllci1jb250cm9scy1zZWVrYmFyIHtcclxuICAgICAgICBmbGV4OiAxO1xyXG4gICAgICAgIC5zZWVrYmFyLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICBoZWlnaHQ6IDJweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgLnNlZWtiYXItYmFja2dyb3VuZCB7XHJcbiAgICAgICAgICAgIGhlaWdodDogMTBweCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMXZ3O1xyXG4gICAgICAgICAgICAuc2Vla2Jhci1maWxsIHtcclxuICAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDgwJTtcclxuICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxdnc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnNlZWtiYXItbGluZSB7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDF2dztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAuc2Vla2Jhci1zaWduIHtcclxuICAgICAgICAgICAgICB3aWR0aDogMTBweDtcclxuICAgICAgICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtNnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5zZWVrYmFyLWNpcmxlIHtcclxuICAgICAgICAgICAgICB0b3A6IC0xMHB4ICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDQwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAucGxheWVyLWNvbnRyb2xzLXRpbWUge1xyXG4gICAgICAgIHdpZHRoOiA2dncgIWltcG9ydGFudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuIl19 */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","export const backIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/9f7e2aae-06a3-4f46-8601-a53dd2b70b7b.png\";\r\nexport const closeIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/c5dc68e4-2db5-4ea6-ada6-191bb9128a4c.png\";\r\nexport const nextIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/ba4e4ece-ec5e-43a2-9a21-08a9a648a5f2.png\";\r\nexport const wordIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/6ba37577-5fef-4722-9a61-f7ab5e5790ad.png\";\r\nexport const emotionIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/a6bb2684-4f26-481a-81dd-90500c1f7544.png\";\r\nexport const playIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/9c6d947f-071a-4875-9546-fd0dce371928.png\";\r\nexport const pauseIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/65076da8-c1e4-42a9-90af-839a2e42ace7.png\";\r\nexport const iconText2 = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/f50a1be1-512b-49f5-8be5-61b85c7cbb66.png\";\r\nexport const iconText1 = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/f9071de5-48d0-42ca-8b9a-13ae19ed48e3.png\";\r\nexport const signIcon = \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/bcbd9a71-ec40-4c4d-ba03-29c2bec2bf89.png\";","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\"\r\nimport { interpolate } from \"remotion\"\r\nimport { signIcon } from \"../utils/const\"\r\n\r\nconst getFrameFromX = (\r\n\tclientX: number,\r\n\tdurationInFrames: number,\r\n\twidth: number,\r\n) => {\r\n\tconst pos = clientX;\r\n\tconst frame = Math.round(\r\n\t\tinterpolate(pos, [0, width], [0, durationInFrames - 1], {\r\n\t\t\textrapolateLeft: 'clamp',\r\n\t\t\textrapolateRight: 'clamp',\r\n\t\t}),\r\n\t);\r\n\treturn frame;\r\n};\r\nconsole.log(2222)\r\nconst SeekBar = ({ player, vmmlRef, frame, durationInFrames, intoEdit, setDragState, signList }: any ) => {\r\n\tconst containerRef = useRef<HTMLDivElement>(null);\r\n const [dragging, setDragging] = useState<any>({\r\n dragging: false,\r\n })\r\n\r\n const fillStyle = useMemo(() => {\r\n return {\r\n width: `${(frame / (durationInFrames - 1)) * 100}%`,\r\n }\r\n }, [frame, durationInFrames]);\r\n\r\n const cirleStyle = useMemo(() => {\r\n return {\r\n left: `calc(${(frame / (durationInFrames - 1)) * 100}% - 1.6vw)`,\r\n }\r\n }, [frame, durationInFrames])\r\n\r\n const onPointerDown = useCallback((e: React.PointerEvent) => {\r\n if (e.button !== 0) {\r\n return;\r\n }\r\n const { left, width } = containerRef.current?.getBoundingClientRect() as any;\r\n const _frame = getFrameFromX(\r\n e.clientX - left,\r\n durationInFrames,\r\n width,\r\n );\r\n setDragState(1);\r\n setDragging({\r\n dragging: true,\r\n wasPlaying: player.isPlaying(),\r\n });\r\n player.pause();\r\n player.seekTo(_frame);\r\n vmmlRef.current && vmmlRef.current.onSeekStart();\r\n }, [player, durationInFrames]);\r\n\r\n const onPointerMove = useCallback((e: PointerEvent) => {\r\n if (!dragging.dragging) {\r\n return;\r\n }\r\n const { left, width } = containerRef.current?.getBoundingClientRect() as any;\r\n const _frame = getFrameFromX(\r\n e.clientX - left,\r\n durationInFrames,\r\n width,\r\n );\r\n setDragState(2);\r\n player.seekTo(_frame);\r\n }, [player, dragging.dragging, durationInFrames]);\r\n\r\n const onPointerUp = (e: any) => {\r\n setDragging({\r\n\t\t\tdragging: false,\r\n\t\t});\r\n if (!dragging.dragging) {\r\n return;\r\n }\r\n setDragState(3);\r\n intoEdit();\r\n vmmlRef.current && vmmlRef.current.onSeekEnd();\r\n };\r\n\r\n const onClickSign = (sign: any) => {\r\n player.pause();\r\n player.seekTo(sign.inFrame);\r\n vmmlRef.current && vmmlRef.current.onSeekStart();\r\n setTimeout(() => {\r\n setDragState(4);\r\n intoEdit(sign.inFrame);\r\n vmmlRef.current && vmmlRef.current.onSeekEnd();\r\n }, 100)\r\n }\r\n\r\n useEffect(() => {\r\n if (!dragging.dragging) {\r\n\t\t\treturn;\r\n\t\t}\r\n const body = document.querySelector(\"body\");\r\n if (body) {\r\n body.addEventListener('pointermove', onPointerMove);\r\n body.addEventListener('pointerup', onPointerUp);\r\n return () => {\r\n body.removeEventListener('pointermove', onPointerMove);\r\n body.removeEventListener('pointerup', onPointerUp);\r\n };\r\n }\r\n\t}, [dragging.dragging, onPointerMove, onPointerUp]);\r\n\r\n return (\r\n <div ref={containerRef} className=\"seekbar-container\">\r\n <div className=\"seekbar-background\">\r\n <div className=\"seekbar-fill\" onPointerDown={onPointerDown}></div>\r\n <div className=\"seekbar-line\" style={fillStyle}></div>\r\n <div className=\"seekbar-signs\">\r\n {signList.map((item: any, index: number) => (\r\n <img key={index} onClick={() => onClickSign(item)} style={{ left: `calc(${item.inFrame / durationInFrames * 100}% - 6px)` }} className=\"seekbar-sign\" src={signIcon} alt=\"\" />\r\n ))}\r\n </div>\r\n <div className=\"seekbar-cirle\" style={cirleStyle} onPointerDown={onPointerDown} />\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default SeekBar\r\n","import { formatTime } from \"@versa_ai/vmml-utils\"\r\nimport { pauseIcon, playIcon } from \"../utils/const\"\r\nimport SeekBar from \"./SeekBar\"\r\n\r\nconst Controls = ({ player, vmmlRef, frame, fps, durationInFrames, intoEdit, isPlaying, setDragState, onControlsClick, signList }: any) => {\r\n const onClickToggle = (e: any) => {\r\n if (isPlaying) {\r\n intoEdit();\r\n } else {\r\n onControlsClick();\r\n }\r\n }\r\n \r\n return (\r\n <div className=\"player-controls\">\r\n <div className=\"player-controls-toggle mr-16 opacity-06\" onClick={onClickToggle}>\r\n { isPlaying ? <img src={pauseIcon} alt=\"暂停\" /> : <img src={playIcon} alt=\"播放\" /> }\r\n </div>\r\n <div className=\"player-controls-time opacity-06\">\r\n {formatTime(frame / fps)}\r\n </div>\r\n <div className=\"player-controls-seekbar mr-16\">\r\n <SeekBar player={player} vmmlRef={vmmlRef} frame={frame} durationInFrames={durationInFrames} intoEdit={intoEdit} setDragState={setDragState} signList={signList} />\r\n </div>\r\n <div className=\"player-controls-time opacity-06\">\r\n {formatTime(durationInFrames / fps)}\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Controls","import type { fabric } from \"fabric\";\r\n\r\n//重写Canvas类的方法\r\nexport default class HistoryClass {\r\n\thistoryUndo: any[];\r\n\thistoryRedo: any[];\r\n\tcacheAction: any[];\r\n\tcanvas: fabric.Canvas | any;\r\n\thistoryProcessing: boolean;\r\n\teditorInstance: any[];\r\n\tactionTypeList: any[];\r\n\tconstructor(canvas?: fabric.Canvas) {\r\n\t\tthis.canvas = canvas;\r\n\t\tthis.historyUndo = [];\r\n\t\tthis.historyRedo = [];\r\n\t\tthis.cacheAction = [];\r\n\t\tthis.editorInstance = [];\r\n\t\tthis.actionTypeList = [];\r\n\t\tthis.historyProcessing = false;\r\n\t\tthis.initHistory();\r\n\t}\r\n\r\n\tinitHistory() {\r\n\t\tthis.historyUndo = [];\r\n\t\tthis.historyRedo = [];\r\n\t\tthis.cacheAction = [];\r\n\t\tthis.canvas && this.canvas.on(this._historyEvents());\r\n\t}\r\n\t_historyNext() {\r\n\t\tconst keys = [\r\n\t\t\t\"id\",\r\n\t\t\t\"gradientAngle\",\r\n\t\t\t\"selectable\",\r\n\t\t\t\"hasControls\",\r\n\t\t\t\"linkData\",\r\n\t\t\t\"editable\",\r\n\t\t\t\"extensionType\",\r\n\t\t\t\"extension\",\r\n\t\t\t\"clipData\",\r\n\t\t];\r\n\t\tconst getJson = this.canvas && this.canvas.toJSON(keys);\r\n\t\treturn getJson;\r\n\t}\r\n\r\n\t_historyEvents() {\r\n\t\treturn {\r\n\t\t\t\"object:added\": (e: any) => this._historySaveAction(e, \"object:added\"),\r\n\t\t\t\"object:removed\": (e: any) => this._historySaveAction(e, \"object:removed\"),\r\n\t\t\t\"object:modified\": (e: any) => this._historySaveAction(e, \"object:modified\"),\r\n\t\t\t\"object:skewing\": (e: any) => this._historySaveAction(e, \"object:skewing\"),\r\n\t\t\t\"object:muteChange\": (e: any) => this._historySaveAction(e, \"object:muteChange\"),\r\n\t\t};\r\n\t}\r\n\t_historySaveAction(e: any, type: string) {\r\n\t\tif (this.historyProcessing) return;\r\n\t\tthis.actionTypeList.length < 1 && this.actionTypeList.push({ type });\r\n\t\tif (!e || (e.target && !e.target.excludeFromExport)) {\r\n\t\t\tconst json = this._historyNext();\r\n\t\t\tthis.cacheAction.push(json);\r\n\t\t\tif (this.cacheAction.length > 1) {\r\n\t\t\t\tconst cacheItem = this.cacheAction.shift();\r\n\t\t\t\t//this.historyUndo.push(cacheItem);\r\n\t\t\t}\r\n\t\t\tthis.historyRedo = [];\t\t\t\r\n\t\t\t// console.log(\"_historySaveAction\", this.historyUndo);\r\n\t\t\tthis.canvas.fire(\"history:appnd\", { json: json });\r\n\t\t}\r\n\t}\r\n\r\n\tundo(callback?: any) {\r\n\t\t// undo进程会渲染新的对象的状态\r\n\t\t// 因此,object:added和object:modified事件将再次触发\r\n\t\t// 设置一个flag用来忽略这些事件\r\n\t\tthis.historyProcessing = true;\r\n\t\tconst history = this.historyUndo.pop();\r\n\t\tif (history) {\r\n\t\t\t// this.historyRedo.push(this._historyNext());\r\n\t\t\tthis._loadHistory(history, \"history:undo\", callback);\r\n\t\t} else {\r\n\t\t\tthis.historyProcessing = false;\r\n\t\t}\r\n\t}\r\n\tredo(callback?: any) {\r\n\t\t// undo进程会渲染新的对象的状态\r\n\t\t// 因此,object:added和object:modified事件将再次触发\r\n\t\t// 设置一个flag用来忽略这些事件\r\n\t\tthis.historyProcessing = true;\r\n\t\tconst history = this.historyRedo.pop();\r\n\t\tif (history) {\r\n\t\t\t//每一个redo action实际上是一个新的action到undo中\r\n\t\t\tthis.historyUndo.push(this._historyNext());\r\n\t\t\tthis._loadHistory(history, \"history:redo\", callback);\r\n\t\t} else {\r\n\t\t\tthis.historyProcessing = false;\r\n\t\t}\r\n\t}\r\n\t_loadHistory(history: string | Record<string, any>, event: string, callback: () => void) {\r\n\t\tthis.canvas &&\r\n\t\t\tthis.canvas.loadFromJSON(history, () => {\r\n\t\t\t\tthis.canvas.renderAll();\r\n\t\t\t\tthis.canvas.fire(event);\r\n\t\t\t\tthis.historyProcessing = false;\r\n\r\n\t\t\t\tif (callback && typeof callback === \"function\") callback();\r\n\t\t\t});\r\n\t}\r\n\t_historyDispose() {\r\n\t\tthis.canvas.off(this._historyEvents());\r\n\t}\r\n\tclearHistory() {\r\n\t\tthis.historyUndo = [];\r\n\t\tthis.historyRedo = [];\r\n\t\tthis.cacheAction = [];\r\n\t\tthis.canvas.fire(\"history:clear\");\r\n\t}\r\n\tcanUndo() {\r\n\t\treturn this.historyUndo.length > 0;\r\n\t}\r\n\r\n\tcanRedo() {\r\n\t\treturn this.historyRedo.length > 0;\r\n\t}\r\n\t//离开画布保存上一次编辑的状态\r\n\tonCanvasRoute(canvas: fabric.Canvas) {\r\n\t\tthis.editorInstance.push(canvas);\r\n\t}\r\n\tgetActionType() {\r\n\t\treturn this.actionTypeList;\r\n\t}\r\n}\r\n","import { v4 as uuidv4 } from \"uuid\";\r\nimport { hexToArgb, rgbaToArgb, getFontSize } from \"@versa_ai/vmml-utils\";\r\nclass VmmlConverter {\r\n\tprivate vmml: any;\r\n\tprivate canvasSize: any;\r\n\tprivate tracks: any;\r\n\tprivate heightScale: any;\r\n\tprivate widthScale: any;\r\n\tprivate fontSize: number;\r\n\r\n\t/**\r\n\t * VmmlConverter 构造函数\r\n\t * @param vmml - VMML 模板数据\r\n\t * @param canvasSize - 画布尺寸\r\n\t */\r\n\tconstructor({ vmml, canvasSize }: { vmml: any; canvasSize: any }) {\r\n\t\tconst { width, height } = vmml.template.dimension;\r\n\t\tthis.vmml = vmml;\r\n\t\tthis.canvasSize = canvasSize;\r\n\t\tthis.tracks = vmml.template.tracks;\r\n\t\tthis.fontSize = getFontSize(width, height);\r\n\r\n\t\t// 计算宽高比\r\n\t\tthis.heightScale = height / canvasSize.height;\r\n\t\tthis.widthScale = width / canvasSize.width;\r\n\t}\r\n\r\n\t//更新位置\r\n\tprivate setPosParam(fObj: any): object {\r\n\t\tconsole.log(\"setPosParam fObj\",fObj)\r\n\t\tconst {\r\n\t\t\tclipData: { type },\r\n\t\t\tcenterPoint,\r\n\t\t\tscaleX,\r\n\t\t\tscaleY,\r\n\t\t\tangle,\r\n\t\t\twidth,\r\n\t\t\theight,\r\n\t\t} = fObj;\r\n\t\tlet _scaleX, _scaleY, _centerX, _centerY;\r\n\t\r\n\t\tif (type === \"文字\") {\r\n\t \t// const [rect, textbox] = fObj.objects;\r\n\t\t\t_scaleX = (22 * scaleX * this.widthScale) / this.fontSize;\r\n\t\t\t_scaleY = (22 * scaleY * this.heightScale) / this.fontSize;\r\n\t\t\t_centerX = centerPoint.x / this.canvasSize.width; \r\n\t\t\t_centerY = centerPoint.y / this.canvasSize.height;\r\n\t\t\t// fObj.clipData.lineSpacing = 22 * textbox.lineHeight * scaleY * this.heightScale;\r\n\t\t} else if (type === \"表情包\") {\r\n\t\t\t_scaleX = (width * scaleX * this.widthScale) / width;\r\n\t\t\t_scaleY = (height * scaleY * this.heightScale) / height;\r\n\t\t\t_centerX = centerPoint.x / this.canvasSize.width;\r\n\t\t\t_centerY = centerPoint.y / this.canvasSize.height;\r\n\t\t}\r\n\r\n\t\treturn {\r\n\t\t\tscaleX: _scaleX,\r\n\t\t\tscaleY: _scaleY,\r\n\t\t\tcenterX: _centerX,\r\n\t\t\tcenterY: _centerY,\r\n\t\t\trotationZ: angle,\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * 转换 TextClip\r\n\t * @param fObj - 画布fObj\r\n\t */\r\n\tpublic addTextClip(fObj: any): void {\r\n\t\tconsole.log(\"addTextClip fObj\", fObj);\r\n\t\tconst posParam = this.setPosParam(fObj);\r\n\r\n\t\t// const [rect, textbox] = fObj.objects;\r\n\t\t// const { clipData: { id, inPoint, lineSpacing }} = fObj;\r\n\t\tconst { clipData: { id, inPoint, text, textColor, bgColor}} = fObj;\r\n\t\tconst {template:{duration}} = this.vmml;\r\n\t\tconst clips = [];\r\n\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === \"文字\");\r\n\r\n\t\tconst tClipData = {\r\n\t\t\tduration,\r\n\t\t\toriginDuration: duration,\r\n\t\t\tstart: 0,\r\n\t\t\tend: duration,\r\n\t\t\tinPoint,\r\n\t\t\tid,\r\n\t\t\ttype: 202,\r\n\t\t\tfObj,\r\n\t\t\ttextClip: {\r\n\t\t\t\tlineSpacing: 0,\r\n\t\t\t\talignType: 0,\r\n\t\t\t\tfontCode: '',\r\n\t\t\t\tbold: false,\r\n\t\t\t\tdimension: {\r\n\t\t\t\t\theight: 282,\r\n\t\t\t\t\twidth: 825,\r\n\t\t\t\t},\r\n\t\t\t\tposParam,\r\n\t\t\t\tbackgroundColor: this.toARGB(bgColor),\r\n\t\t\t\ttextContent: text,\r\n\t\t\t\ttextColor: this.toARGB(textColor),\r\n\t\t\t\t// fontFamily:'unset'\r\n\t\t\t},\r\n\t\t};\r\n\t\tif (!editorTrack) {\r\n\t\t\tclips.push(tClipData);\r\n\t\t\tthis.tracks.push({\r\n\t\t\t\tclips,\r\n\t\t\t\tdescription: \"editorText\",\r\n\t\t\t\tid: uuidv4(),\r\n\t\t\t\ttype: 2,\r\n\t\t\t\teditorType: \"文字\",\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\teditorTrack.clips.push(tClipData);\r\n\t\t}\r\n\r\n\t\tconsole.log(\"addTextClip 最终vmml\", this.vmml);\r\n\t}\r\n\r\n\t/**\r\n\t * 转换 VideoClip\r\n\t * @param fObj - 画布fObj\r\n\t */\r\n\tpublic addVideoClip(fObj: any): void {\r\n\t\tconsole.log(\"addVideoClip fObj\", fObj);\r\n\t\tconst clips = [];\r\n\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === \"表情包\");\r\n\t\tconst clipData = this.loadClipData(fObj);\r\n\r\n\t\tif (!editorTrack) {\r\n\t\t\tconst index = this.tracks.findIndex((track: any) => track.editorType === \"文字\");\r\n\t\t\tfor (const item of clipData) {\r\n\t\t\t\tif (item !== null) {\r\n\t\t\t\t\tclips.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst data = {\r\n\t\t\t\tclips,\r\n\t\t\t\tdescription: \"editorEmoji\",\r\n\t\t\t\tid: uuidv4(),\r\n\t\t\t\ttype: 1,\r\n\t\t\t\teditorType: \"表情包\",\r\n\t\t\t};\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tthis.tracks.splice(index, 0, data);\r\n\t\t\t} else {\r\n\t\t\t\tthis.tracks.push(data);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tfor (const item of clipData) {\r\n\t\t\t\tif (item !== null) {\r\n\t\t\t\t\teditorTrack.clips.push(item);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconsole.log(\"addVideoClip 最终vmml\", this.vmml);\r\n\t}\r\n\r\n\t/**\r\n\t * 更新 clip\r\n\t * @param fObj - 画布fObj\r\n\t */\r\n\tpublic updateClip(fObj: any) {\r\n\t\tconsole.log(\"updateClip fObj\", fObj);\r\n\t\tconst posParam = this.setPosParam(fObj);\r\n\t\tconst {\r\n\t\t\t// clipData: { id, type, lineSpacing },\r\n\t\t\tclipData: { id, type, lineSpacing, originClip },\r\n\t\t} = fObj;\r\n\t\tlet existClip = null;\r\n\t\t// 模板内可编辑的clip\r\n\t\tif (originClip) {\r\n\t\t\texistClip = originClip;\r\n\t\t} else {\r\n\t\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === type);\r\n\t\t\texistClip = (editorTrack?.clips || []).find((clip: any) => clip.id === id);\r\n\t\t}\r\n\t\t\r\n\t\tif (existClip) {\r\n\t\t\t//修改现有clip的代码\r\n\t\t\t!originClip && (existClip.fObj = fObj);\r\n\t\t\tif (type === \"表情包\") {\r\n\t\t\t\texistClip.videoClip.posParam = posParam;\r\n\t\t\t} else if (type === \"文字\") {\r\n\t\t\t\tconst { clipData: { text, textColor, bgColor}} = fObj;\r\n\t\t\t\tconst scale = this.fontSize / 22;\r\n\t\t\t\texistClip.textClip = {\r\n\t\t\t\t\t...existClip.textClip,\r\n\t\t\t\t\tposParam,\r\n\t\t\t\t\tbackgroundColor: this.toARGB(bgColor),\r\n\t\t\t\t\ttextContent: text,\r\n\t\t\t\t\ttextColor: this.toARGB(textColor),\r\n\t\t\t\t\tdimension: {\r\n\t\t\t\t\t\twidth: Math.floor(fObj.width * scale),\r\n\t\t\t\t\t\theight: Math.floor(fObj.height * scale),\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconsole.log(\"updateClip 最终vmml\", this.vmml);\r\n\t}\r\n\r\n\t/**\r\n\t * 删除 Clip\r\n\t * @param id - 实例 id\r\n\t * @param type - 实例 类型\r\n\t */\r\n\tpublic deleteClip({ id, type, originClip }: { id: string; type: string, originClip: any }): void {\r\n\t\t// 模板内的可编辑clip\r\n\t\tif (originClip) {\r\n\t\t\toriginClip.duration = 0;\r\n\t\t} else {\r\n\t\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === type);\r\n\t\t\tconst index = editorTrack.clips.findIndex((item: any) => item.id === id);\r\n\t\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tif (editorTrack.clips[index + 1] && editorTrack.clips[index + 1].audioClip) {\r\n\t\t\t\t\teditorTrack.clips.splice(index, 2); // 删除当前元素及下一个 audio 元素\r\n\t\t\t\t} else {\r\n\t\t\t\t\teditorTrack.clips.splice(index, 1); // 只删除当前元素\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\r\n\t\t\tif (editorTrack.clips.length === 0) {\r\n\t\t\t\tconst trackIndex = this.tracks.indexOf(editorTrack);\r\n\t\t\t\tif (trackIndex !== -1) {\r\n\t\t\t\t\tthis.tracks.splice(trackIndex, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconsole.log(\"deleteClip 最终Vmml\", this.vmml);\r\n\t}\r\n\r\n\t//切换静音 视频/音频\r\n\tpublic changeMute({ id, isMute }: { id: string; isMute: boolean }): void {\r\n\t\tconst editorTrack = this.tracks.find((track: any) => track.editorType === \"表情包\");\r\n\t\tconst index = editorTrack.clips.findIndex((item: any) => item.id === id);\r\n\t\tif (index !== -1) {\r\n\t\t\tconst volume = isMute ? 0 : 1;\r\n\r\n\t\t\t// 设置当前元素的 volume 为 0\r\n\t\t\teditorTrack.clips[index].videoClip.volume = volume;\r\n\t\t\t// 检查下一个元素是否存在且类型为 audio\r\n\t\t\tif (editorTrack.clips[index + 1] && editorTrack.clips[index + 1].audioClip) {\r\n\t\t\t\teditorTrack.clips[index + 1].audioClip.volume = volume;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconsole.log(\"changeMute 最终Vmml\", this.vmml);\r\n\t}\r\n\r\n\t//加载clip数据\r\n\tprivate loadClipData(fObj: any): any {\r\n\t\tconst posParam = this.setPosParam(fObj);\r\n\t\tconst {\r\n\t\t\tclipData: { id, inPoint, fileUrl },\r\n\t\t\twidth,\r\n\t\t\theight,\r\n\t\t} = fObj;\r\n\t\tlet aClipData = null;\r\n\r\n\t\t// 计算表情包可用的最大时长\r\n\t\tconst availableDuration = this.vmml.template.duration - inPoint;\r\n\t\tconst _duration = fileUrl.duration > availableDuration ? availableDuration : fileUrl.duration;\r\n\t\t\r\n\t\tconst vClipData = {\r\n\t\t\tduration: _duration,\r\n\t\t\toriginDuration: fileUrl.duration,\r\n\t\t\tstart: 0,\r\n\t\t\tend: _duration,\r\n\t\t\tinPoint,\r\n\t\t\ttype: 102,\r\n\t\t\tid,\r\n\t\t\tfObj,\r\n\t\t\tvideoClip: {\r\n\t\t\t\tgrayMaskUrl: fileUrl.grayMaskUrl,\r\n\t\t\t\twebmUrl: fileUrl.webmUrl,\r\n\t\t\t\tmovUrl: fileUrl.movUrl,\r\n\t\t\t\tgifUrl: fileUrl.visibleUrl,\r\n\t\t\t\tdimension: {\r\n\t\t\t\t\theight,\r\n\t\t\t\t\twidth,\r\n\t\t\t\t},\r\n\t\t\t\tposParam,\r\n\t\t\t\tconstantSpeed: 1,\r\n\t\t\t\tvolume: 1,\r\n\t\t\t\tsourceUrl: fileUrl.visibleUrl,\r\n\t\t\t\tthumbnailSourceUrl: fileUrl.thumbnailUrl,\r\n\t\t\t\tsourceCode: \"\",\r\n\t\t\t\tmimeType: fileUrl.visiableMimeType,\r\n\t\t\t},\r\n\t\t};\r\n\t\t//png/mp4 + mp3音频\r\n\t\tif (fileUrl.hasAudio === \"true\") {\r\n\t\t\taClipData = {\r\n\t\t\t\tduration: _duration,\r\n\t\t\t\toriginDuration: fileUrl.duration,\r\n\t\t\t\tstart: 0,\r\n\t\t\t\tend: _duration,\r\n\t\t\t\tinPoint,\r\n\t\t\t\ttype: 304,\r\n\t\t\t\tid: uuidv4(),\r\n\t\t\t\taudioClip: {\r\n\t\t\t\t\tsourceUrl: fileUrl.soundUrl,\r\n\t\t\t\t\tvolume: 1,\r\n\t\t\t\t\tconstantSpeed: 1,\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\treturn [vClipData, aClipData];\r\n\t}\r\n\r\n\t/**\r\n\t * 将颜色转换为 ARGB 格式\r\n\t * @param color - 颜色字符串\r\n\t * @returns ARGB 颜色字符串\r\n\t */\r\n\tprivate toARGB(color: string) {\r\n\t\tif (color === \"transparent\") {\r\n\t\t\treturn \"#00000000\";\r\n\t\t}\r\n\r\n\t\tif (color.includes(\"rgb\")) {\r\n\t\t\treturn rgbaToArgb(color);\r\n\t\t}\r\n\r\n\t\tif (color.includes(\"#\")) {\r\n\t\t\treturn hexToArgb(color);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default VmmlConverter;\r\n","import { fabric } from \"fabric\";\r\nfunction drawImg(\r\n\tctx: CanvasRenderingContext2D,\r\n\tleft: number,\r\n\ttop: number,\r\n\timg: HTMLImageElement,\r\n\twSize: number,\r\n\thSize: number,\r\n\tangle: number | undefined,\r\n) {\r\n\tif (angle === undefined) return;\r\n\tctx.save();\r\n\tctx.translate(left, top);\r\n\tctx.rotate(fabric.util.degreesToRadians(angle));\r\n\tctx.drawImage(img, -wSize / 2, -hSize / 2, wSize, hSize);\r\n\tctx.restore();\r\n}\r\n\r\n// 顶点\r\nfunction usePeekControl(canvas: fabric.Canvas) {\r\n\tconst iconUrls = {\r\n\t\tdelete: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/0c7084a9-6067-4277-a5af-2932983cbeb7.png\",\r\n\t\t// zoom: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/ff6aea73-4d12-4201-9404-3134d5f9525c.png\",\r\n\t\tzoom: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/0909485d-46db-47b4-8bb1-5a686510ddb3.png\",\r\n\t\tmute: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/3fef2c5d-7576-424d-813c-34508b051884.png\",\r\n\t\tvolume: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/1ab2e829-c5b1-4177-8554-ae2f74b02e1d.png\",\r\n\t\tedit: \"https://mass.alipay.com/finmedia_versaassets/uri/file/as/9e9ed472-62cf-4b71-891f-bc08c8b08a5d.png\"\r\n\t};\r\n\tconst createIconElement = (url: string) => {\r\n\t\tconst img = document.createElement(\"img\");\r\n\t\timg.src = url;\r\n\t\treturn img;\r\n\t};\r\n\r\n\t// 删除选中元素\r\n\tconst deleteObject = (mouseEvent: MouseEvent, target: fabric.Transform) => {\r\n\t\tif (target.action === \"rotate\") return true;\r\n\t\tconst activeObject = canvas.getActiveObjects();\r\n\t\tif (activeObject) {\r\n\t\t\tactiveObject.map((item: any) => canvas.remove(item));\r\n\t\t\tcanvas.requestRenderAll();\r\n\t\t\tcanvas.discardActiveObject();\r\n\t\t}\r\n\t\treturn true;\r\n\t};\r\n\tconst delImg = createIconElement(iconUrls.delete);\r\n\tconst zoomImg = createIconElement(iconUrls.zoom);\r\n\tconst muteImg = createIconElement(iconUrls.mute);\r\n\tconst volumeImg = createIconElement(iconUrls.volume);\r\n\tconst editImg = createIconElement(iconUrls.edit);\r\n\t//渲染删除图标\r\n\tconst renderDelIcon = (\r\n\t\tctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object,\r\n\t) => {\r\n\t\tdrawImg(ctx, left, top, delImg, 28, 28, fabricObject.angle);\r\n\t};\r\n\t//渲染旋转缩放图标\r\n\tconst renderIconRotate = (\r\n\t\tctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object,\r\n\t) => {\r\n\t\tdrawImg(ctx, left, top, zoomImg, 28, 28, fabricObject.angle);\r\n\t};\r\n\r\n\tconst renderMultiIcon = (ctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object | any,) => {\r\n\t\tif (fabricObject.clipData.type === '文字') {\r\n\t\t\trenderEditIcon(ctx,\r\n\t\t\t\tleft,\r\n\t\t\t\ttop,\r\n\t\t\t\tstyleOverride,\r\n\t\t\t\tfabricObject)\r\n\t\t} else {\r\n\t\t\trenderMuteIcon(ctx,\r\n\t\t\t\tleft,\r\n\t\t\t\ttop,\r\n\t\t\t\tstyleOverride,\r\n\t\t\t\tfabricObject\r\n\t\t\t)\r\n\t\t}\r\n\t}\r\n\t//渲染静音图标\r\n\tconst renderMuteIcon = (\r\n\t\tctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object | any,\r\n\t) => {\r\n\t\tif (!fabricObject.clipData) return false;\r\n\t\tif (fabricObject.clipData.type === '表情包') {\r\n\t\t\tif (fabricObject.clipData.isMute === null || fabricObject.clipData.isMute === undefined) return false;\r\n\t\t\tif (fabricObject.clipData.isMute) {\r\n\t\t\t\tdrawImg(ctx, left, top, muteImg, 28, 28, fabricObject.angle);\r\n\t\t\t} else {\r\n\t\t\t\tdrawImg(ctx, left, top, volumeImg, 28, 28, fabricObject.angle);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\t//渲染编辑图标\r\n\tconst renderEditIcon = (\r\n\t\tctx: CanvasRenderingContext2D,\r\n\t\tleft: number,\r\n\t\ttop: number,\r\n\t\tstyleOverride: any,\r\n\t\tfabricObject: fabric.Object | any,\r\n\t) => {\r\n\t\tif (!fabricObject.clipData) return false;\r\n\t\tif (fabricObject.clipData.type === '文字') {\r\n\t\t\tdrawImg(ctx, left, top, editImg, 28, 28, fabricObject.angle);\r\n\t\t}\r\n\t};\r\n\tconst multiAction = (eventData: any, transform: any, x: any, y: any)=>{\r\n\t\tif (transform.target.clipData.type === '文字') {\r\n\t\t\teditAction(eventData, transform, x, y)\r\n\t\t}else{\r\n\t\t\tmuteAction(eventData, transform, x, y)\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\t//需要暴露方法\r\n\tconst muteAction = (eventData: any, transform: any, x: any, y: any) => {\r\n\t\tif (transform.target.clipData.isMute === null) return false;\r\n\t\ttransform.target.clipData = JSON.parse(JSON.stringify(transform.target.clipData));\r\n\t\ttransform.target.clipData.isMute = !transform.target.clipData.isMute;\r\n\t\tcanvas.renderAll();\r\n\t\tcanvas.fire(\"object:muteChange\", { target: transform.target });\r\n\t\treturn true;\r\n\t};\r\n\t//暴露文字编辑方法\r\n\tconst editAction = (eventData: any, transform: any, x: any, y: any) => {\r\n\t\tif (transform.target.clipData.type === '文字') {\r\n\t\t\tcanvas.fire(\"object:textEdit\", { target: transform.target });\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\tconst actionHandler = (\r\n\t\teventData: any, // 在实际应用中,应该为 eventData 提供准确的类型定义\r\n\t\ttransform: any,\r\n\t\tx: number,\r\n\t\ty: number\r\n\t): boolean => {\r\n\t\ttry {\r\n\t\t\tconst t = transform,\r\n\t\t\t\ttarget = t.target,\r\n\t\t\t\tpivotPoint = target.translateToOriginPoint(\r\n\t\t\t\t\ttarget.getCenterPoint(),\r\n\t\t\t\t\tt.originX,\r\n\t\t\t\t\tt.originY\r\n\t\t\t\t);\r\n\t\t\tconst lastAngle = Math.atan2(t.ey - pivotPoint.y, t.ex - pivotPoint.x),\r\n\t\t\t\tcurAngle = Math.atan2(y - pivotPoint.y, x - pivotPoint.x);\r\n\t\t\tlet angle2 = Math.floor((curAngle - lastAngle + t.theta) * (180 / Math.PI));\r\n\t\t\tfabric.controlsUtils.scalingEqually(eventData, transform, x, y);\r\n\t\t\t// 优化条件判断,使用策略模式或映射的方式进行旋转角度的决定\r\n\t\t\t// 数组前两位是范围,最后一位是设置的角度\r\n\t\t\tconst rotateAngles = [\r\n\t\t\t\t[85, 95, 90],\r\n\t\t\t\t[175, 185, 180],\r\n\t\t\t\t[265, 275, 270],\r\n\t\t\t\t[355, 365, 360],\r\n\t\t\t\t[440, 460, 90],\r\n\t\t\t\t[-5, 5, 0],\r\n\t\t\t\t[-95, -85, 270],\r\n\t\t\t\t[-185, -175, 180]\r\n\t\t\t];\r\n\r\n\t\t\tfor (let i = 0; i < rotateAngles.length; i++) {\r\n\t\t\t\tif (rotateAngles[i][0] < angle2 && angle2 < rotateAngles[i][1]) {\r\n\t\t\t\t\ttarget.rotate(rotateAngles[i][2]);\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// 如果没有符合的旋转范围,则使用默认的旋转逻辑\r\n\t\t\tfabric.controlsUtils.rotationWithSnapping(eventData, transform, x, y);\r\n\t\t\treturn true;\r\n\t\t} catch (error) {\r\n\t\t\tconsole.error(\"Action handler error:\", error);\r\n\t\t\t// 根据实际情况处理异常,例如返回false,或者重新抛出异常\r\n\t\t\treturn false;\r\n\t\t}\r\n\t};\r\n\t//top left 删除\r\n\tfabric.Object.prototype.controls.tl = new fabric.Control({\r\n\t\tx: -0.5,\r\n\t\ty: -0.5,\r\n\t\tmouseUpHandler: deleteObject,\r\n\t\trender: renderDelIcon,\r\n\t});\r\n\r\n\t//bottom left 左下 -- 设置静音和音量\r\n\tfabric.Object.prototype.controls.bl = new fabric.Control({\r\n\t\tx: -0.5,\r\n\t\ty: 0.5,\r\n\t\tmouseUpHandler: muteAction,\r\n\t\trender: renderMuteIcon,\r\n\t});\r\n\t//top right 右上 文字类型设置编辑\r\n\tfabric.Object.prototype.controls.tr = new fabric.Control({\r\n\t\tx: 0.5,\r\n\t\ty: -0.5,\r\n\t\tmouseUpHandler: editAction,\r\n\t\trender: renderEditIcon\r\n\t});\r\n\t// 中间横杠\r\n\tfabric.Object.prototype.controls.ml = new fabric.Control({ visible: false });\r\n\tfabric.Object.prototype.controls.mr = new fabric.Control({ visible: false });\r\n\tfabric.Object.prototype.controls.mb = new fabric.Control({ visible: false });\r\n\tfabric.Object.prototype.controls.mt = new fabric.Control({ visible: false });\r\n\t//旋转图标\r\n\tfabric.Object.prototype.controls.mtr = new fabric.Control({ visible: false });\r\n\t//bottom right 旋转+缩放\r\n\tfabric.Object.prototype.controls.br = new fabric.Control({\r\n\t\tx: 0.5,\r\n\t\ty: 0.5,\r\n\t\tactionName: \"rotate\",\r\n\t\tactionHandler: actionHandler,\r\n\t\trender: renderIconRotate,\r\n\t});\r\n\t// 选中边框样式\r\n\tfabric.Object.prototype.set({\r\n\t\tborderColor: \"#d6d6d699\",\r\n\t\tborderScaleFactor: 1.5,\r\n\t\tborderOpacityWhenMoving: 1,\r\n\t\tpadding: 5,\r\n\t});\r\n\treturn canvas;\r\n}\r\n\r\nexport { usePeekControl };\r\n","import { fabric } from \"fabric\";\r\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from \"react\";\r\nimport { getFrames, argbToRgba, urlToBlob, getFontSize } from \"@versa_ai/vmml-utils\"\r\nimport { v4 as uuidv4 } from \"uuid\";\r\nimport HistoryClass from \"../utils/HistoryClass\";\r\nimport VmmlConverter from \"../utils/VmmlConverter\";\r\nimport { usePeekControl } from \"../utils/usePeekControl\";\r\nimport { toSvg } from 'dom-to-image'\r\n\r\nconst EditorCanvas = forwardRef(\r\n\t({ previewState, showCanvas, canvasSize, enterPreview, intoTextEdit, frame, vmml, dragState, initFcObjs, onVideoChange }: any, ref: any) => {\r\n\t\tconst [fc, setFc] = useState<any>(null);\r\n\t\tconst [history, setHistory] = useState<any>(null);\r\n\t\tconst waitFcTasks = useRef<any>([]);\r\n\t\tconst vmmlConverterRef = useRef<any>(null);\r\n\t\tconst heightScaleRef = useRef<number>(1);\r\n\t\tconst widthScaleRef = useRef<number>(1);\r\n\r\n\t\tconst initCanvas = () => {\r\n\t\t\tconst canvas = new fabric.Canvas(\"canvas\", {\r\n\t\t\t\twidth: canvasSize.width,\r\n\t\t\t\theight: canvasSize.height,\r\n\t\t\t\tselection: false, // 画布框选\r\n\t\t\t});\r\n\t\t\theightScaleRef.current = vmml.template.dimension.height / canvasSize.height;\r\n\t\t\twidthScaleRef.current = vmml.template.dimension.width / canvasSize.width;\r\n\r\n\t\t\tif (initFcObjs.length) {\r\n\t\t\t\tcreateFcObjs(canvas);\r\n\t\t\t}\r\n\t\t\tsetFc(canvas);\r\n\t\t\tinitCanvasEvent(canvas);\r\n\t\t\tusePeekControl(canvas);\r\n\t\t};\r\n\r\n\t\tconst createFcObjs = (canvas: any) => {\r\n\t\t\tconst ns = Math.floor((frame / 30) * 1000000);\r\n\t\t\tfabric.util.enlivenObjects(initFcObjs, (objects: any) => {\r\n\t\t\t\tobjects.forEach((item: any) => {\r\n\t\t\t\t\titem.on('modified', () => {\r\n\t\t\t\t\t\tconst fObj = convertToJSON(item)\r\n\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t});\r\n\t\t\t\t\titem.set(\"visible\", ns >= item.clipData.inPoint);\r\n\t\t\t\t\tcanvas.add(item);\r\n\t\t\t\t})\r\n\t\t\t\tcanvas.renderAll();\r\n\t\t\t}, \"\")\r\n\t\t}\r\n\r\n\t\t// 检查已有元素的inpoint时间\r\n\t\tconst checkObjectInPoint = (f?: number) => {\r\n\t\t\tif (fc) {\r\n\t\t\t\tconst ns = Math.floor(((f ?? frame) / 30) * 1000000);\r\n\t\t\t\tconst objects = fc.getObjects();\r\n\t\t\t\tobjects.forEach((item: any) => {\r\n\t\t\t\t\tif (item?.clipData?.type === \"文字\") {\r\n\t\t\t\t\t\titem.set(\"visible\", ns >= item.clipData.inPoint && ns < item.clipData.inPoint + (item.clipData.duration || vmml.template.duration));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\titem.set(\"visible\", ns >= item.clipData.inPoint && ns < item.clipData.inPoint + item.clipData?.fileUrl?.duration);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tfc.discardActiveObject();\r\n\t\t\t\tfc.renderAll();\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst initCanvasEvent = (canvas: any) => {\r\n\t\t\tcanvas.on(\"mouse:down\", (e: any) => {\r\n\t\t\t\tconst active = canvas.getActiveObject();\r\n\t\t\t\tif (active) {\r\n\t\t\t\t\tif (active.isSelected !== null && active.clipData.type === \"文字\") {\r\n\t\t\t\t\t\t//文字内容双击\r\n\t\t\t\t\t\timitateDBclick(active, canvas);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\t\tenterPreview(canvas);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tcanvas.on('object:removed', (e: any) => {\r\n\t\t\t\tif (e.target.clipData && !e.target.clipData.originClip) {\r\n\t\t\t\t\tonVideoChange(e.target.clipData);\r\n\t\t\t\t}\r\n\t\t\t\tconst { clipData } = e.target.toJSON(['clipData']);\r\n\t\t\t\tvmmlConverterRef.current.deleteClip(clipData);\r\n\t\t\t});\r\n\r\n\t\t\tcanvas.on('object:muteChange', (e: any) => {\r\n\t\t\t\tconst { clipData } = e.target.toJSON(['clipData'])\r\n\t\t\t\tvmmlConverterRef.current.changeMute(clipData);\r\n\t\t\t});\r\n\r\n\t\t\tcanvas.on('object:textEdit', (e: any) => {\r\n\t\t\t\tconst active = canvas.getActiveObject();\r\n\t\t\t\thandleIntoTextMenu(active, canvas)\r\n\t\t\t})\r\n\t\t};\r\n\t\t//模拟双击\r\n\t\tconst imitateDBclick = (active: any, canvas: any) => {\r\n\t\t\tactive.isSelected++;\r\n\t\t\t//设定一个计时器,1秒内没操作重新计数\r\n\t\t\tconst timer = setTimeout(() => {\r\n\t\t\t\tactive.isSelected = 0;\r\n\t\t\t}, 500);\r\n\t\t\tif (active.isSelected === 2) {\r\n\t\t\t\tactive.isSelected = 0;\r\n\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t//从画布直接跳到文字编辑\r\n\t\t\t\thandleIntoTextMenu(active, canvas);\r\n\t\t\t}\r\n\t\t};\r\n\t\tconst handleIntoTextMenu = (active: any, canvas: any) => {\r\n\t\t\t//从画布的Text实例里取到需要的属性,回传给文字编辑\r\n\t\t\tconst {\r\n\t\t\t\tleft,\r\n\t\t\t\ttop,\r\n\t\t\t\tangle,\r\n\t\t\t\tscaleX,\r\n\t\t\t\tscaleY,\r\n\t\t\t\tzoomX,\r\n\t\t\t\tzoomY,\r\n\t\t\t\tclipData: { textBasicInfo, textColor, text, bgColor, fontFamily, id, fontAssetUrl },\r\n\t\t\t} = active;\r\n\t\t\tconst textInfo = {\r\n\t\t\t\tid,\r\n\t\t\t\ttext,\r\n\t\t\t\ttextColor,\r\n\t\t\t\tbgColor,\r\n\t\t\t\tleft,\r\n\t\t\t\ttop,\r\n\t\t\t\tangle,\r\n\t\t\t\tscaleX,\r\n\t\t\t\tscaleY,\r\n\t\t\t\tzoomX,\r\n\t\t\t\tzoomY,\r\n\t\t\t\ttextBasicInfo,\r\n\t\t\t\tfontFamily,\r\n\t\t\t\tfontAssetUrl\r\n\t\t\t\t// width,\r\n\t\t\t\t// height\r\n\t\t\t};\r\n\t\t\tactive.set('visible', false);\r\n\t\t\tcanvas.renderAll();\r\n\t\t\tintoTextEdit(textInfo);\r\n\t\t};\r\n\r\n\t\tconst convertToJSON = (data: any) => {\r\n\t\t\tconst centerPoint = data.getCenterPoint();\r\n\t\t\treturn { ...data.toJSON([\"clipData\", \"type\"]), centerPoint };\r\n\t\t};\r\n\r\n\t\r\n\t\t// 创建图片\r\n\t\tconst createImage = (file: any, emojiId: string) => {\r\n\t\t\tconst url = file.resourcesType === \"image\" ? file.visibleUrl : \"\";\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tfabric.Image.fromURL(\r\n\t\t\t\t\t\turl,\r\n\t\t\t\t\t\t(img: any) => {\r\n\t\t\t\t\t\t\tconst scaleX = canvasSize.width / 2 / file.width;\r\n\t\t\t\t\t\t\timg.set({\r\n\t\t\t\t\t\t\t\twidth: file.width,\r\n\t\t\t\t\t\t\t\theight: file.height,\r\n\t\t\t\t\t\t\t\tscaleX,\r\n\t\t\t\t\t\t\t\tscaleY: scaleX,\r\n\t\t\t\t\t\t\t\tleft: canvasSize.width / 2,\r\n\t\t\t\t\t\t\t\ttop: canvasSize.height / 2,\r\n\t\t\t\t\t\t\t\toriginX: 'center',\r\n\t\t\t\t\t\t\t\toriginY: 'center',\r\n\t\t\t\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t\t\t\tid: uuidv4(),\r\n\t\t\t\t\t\t\t\t\tisMute: file.hasAudio === \"true\" ? false : null,\r\n\t\t\t\t\t\t\t\t\tinPoint: Math.floor((frame / 30) * 1000000),\r\n\t\t\t\t\t\t\t\t\tinFrame: frame,\r\n\t\t\t\t\t\t\t\t\ttype: \"表情包\",\r\n\t\t\t\t\t\t\t\t\tonce: false,\r\n\t\t\t\t\t\t\t\t\temojiId,\r\n\t\t\t\t\t\t\t\t\tfileUrl: file\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\timg.on('modified', () => {\r\n\t\t\t\t\t\t\t\tconst fObj = convertToJSON(img);\r\n\t\t\t\t\t\t\t\tfObj.src = \"\";\r\n\t\t\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tfc.add(img);\r\n\t\t\t\t\t\t\tonVideoChange(img.clipData);\r\n\t\t\t\t\t\t\tconst fObj = convertToJSON(img);\r\n\t\t\t\t\t\t\tresolve(fObj);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tpadding: 3\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\treject(err + \"添加表情包失败\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\t//更新表情包图片\r\n\t\tconst updateImage = (id: string, base64: string, fc2: any) => {\r\n\t\t\tconst canvas = fc || fc2;\r\n\t\t\tif (canvas) {\r\n\t\t\t\tconst imgs = canvas.getObjects().filter((item: any) => item?.clipData?.type === \"表情包\");\r\n\t\t\t\tconst target = imgs.find((item: any) => item.clipData.id === id);\r\n\t\t\t\tif (target) {\r\n\t\t\t\t\ttarget.setSrc(base64, (img: any) => {\r\n\t\t\t\t\t\timg.setCoords();\r\n\t\t\t\t\t\tcanvas.renderAll();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\twaitFcTasks.current.push(updateImage.bind(this, id, base64));\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// 创建可编辑的videoClip\r\n\t\tconst createImageFromClip = (clip: any, fc2: any) => {\r\n\t\t\tconst canvas = fc || fc2;\r\n\t\t\tif (canvas && canvasSize.width) {\r\n\t\t\t\tconst url = /video/g.test(clip.videoClip.mimeType) ? \"\" : clip.videoClip.sourceUrl;\r\n\t\t\t\tfabric.Image.fromURL(url, (img: any) => {\r\n\t\t\t\t\tconst { dimension, posParam } = clip.videoClip;\r\n\t\t\t\t\tconst scaleX = posParam.scaleX / heightScaleRef.current;\r\n\t\t\t\t\tconst scaleY = posParam.scaleY / widthScaleRef.current;\r\n\t\t\t\t\tconst left = canvasSize.width * posParam.centerX;\r\n\t\t\t\t\tconst top = canvasSize.height * posParam.centerY;\r\n\t\t\t\t\tconst inFrame = getFrames(clip.inPoint, 30);\r\n\t\t\t\t\tconst durationFrame = getFrames(clip.duration, 30);\r\n\t\t\t\t\timg.set({\r\n\t\t\t\t\t\twidth: dimension.width,\r\n\t\t\t\t\t\theight: dimension.height,\r\n\t\t\t\t\t\tscaleX,\r\n\t\t\t\t\t\tscaleY,\r\n\t\t\t\t\t\tleft,\r\n\t\t\t\t\t\ttop,\r\n\t\t\t\t\t\tangle: posParam.rotationZ,\r\n\t\t\t\t\t\toriginX: 'center',\r\n \t\toriginY: 'center',\r\n\t\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t\tid: clip.id,\r\n\t\t\t\t\t\t\tisMute: null,\r\n\t\t\t\t\t\t\tinPoint: clip.inPoint,\r\n\t\t\t\t\t\t\tinFrame,\r\n\t\t\t\t\t\t\ttype: \"表情包\",\r\n\t\t\t\t\t\t\tonce: false,\r\n\t\t\t\t\t\t\tfileUrl: {\r\n\t\t\t\t\t\t\t\tduration: clip.duration\r\n\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\toriginClip: clip\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tvisible: frame >= inFrame && frame < inFrame + durationFrame\r\n\t\t\t\t\t});\r\n\t\t\t\t\tcanvas.add(img);\r\n\t\t\t\t\timg.on('modified', () => {\r\n\t\t\t\t\t\tconst fObj = convertToJSON(img);\r\n\t\t\t\t\t\tfObj.src = \"\";\r\n\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t} else {\r\n\t\t\t\twaitFcTasks.current.push(createImageFromClip.bind(this, clip));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst handleRedo = () => {\r\n\t\t\thistory.redo();\r\n\t\t};\r\n\t\tconst handleUndo = () => {\r\n\t\t\thistory.undo();\r\n\t\t};\r\n\r\n\t\t// 创建可编辑的textclip\r\n\t\tconst createTextFromClip = async (clip: any, fc2: any) => {\r\n\t\t\tconst canvas = fc || fc2;\r\n\t\t\tif (canvas) {\r\n\t\t\t\tconst { width, height } = vmml.template.dimension;\r\n\t\t\t\tconst fontSize = getFontSize(width, height);\r\n\t\t\t\tconst { textContent, backgroundColor, textColor, posParam, fontAssetUrl, alignType } = clip.textClip;\r\n\t\t\t\tconst scaleX = posParam.scaleX * fontSize / 22 / widthScaleRef.current;\r\n\t\t\t\tconst scaleY = posParam.scaleY * fontSize / 22 / heightScaleRef.current;\r\n\t\t\t\tconst left = canvasSize.width * posParam.centerX;\r\n\t\t\t\tconst top = canvasSize.height * posParam.centerY;\r\n\t\t\t\tconst bgColor = backgroundColor ? argbToRgba(backgroundColor) : 'transparent';\r\n\t\t\t\tconst isAiError = textContent === '请输入文案' && textColor === '#00000000';\r\n\t\t\t\tconst textFill = argbToRgba(isAiError ? '#ffffffff' : (textColor || '#ffffffff'));\r\n\t\t\t\tconst textBasicInfo = {\r\n\t\t\t\t\tisBack: backgroundColor ? true : false,\r\n\t\t\t\t\tcolorValue: textFill,\r\n\t\t\t\t\tcolorName: 'custom',\r\n\t\t\t\t\ttextAlign: alignType === 1 ? 'center' : (alignType === 2 ? 'right' : 'left')\r\n\t\t\t\t}\r\n\t\t\t\tconst textImgData = await createTextImg({ textContent, bgColor, textColor: textFill, fontAssetUrl, textBasicInfo });\r\n\t\t\t\tconst fontJSON = localStorage.getItem(\"VMML_PLAYER_FONTSMAP\");\r\n\t\t\t\tlet fontMap: any = {};\r\n\t\t\t\ttry {\r\n\t\t\t\t\tfontMap = fontJSON ? JSON.parse(fontJSON) : {};\r\n\t\t\t\t} catch {\r\n\t\t\t\t\tfontMap = {};\r\n\t\t\t\t}\r\n\t\t\t\tconst fontFamily = fontMap[fontAssetUrl] || '';\r\n\t\t\t\tfabric.Image.fromURL(textImgData.base64Image, (imgData: any) => {\r\n\t\t\t\t\timgData.set({\r\n\t\t\t\t\t\tleft, \r\n\t\t\t\t\t\ttop,\r\n\t\t\t\t\t\twidth: textImgData.width,\r\n\t\t\t\t\t\theight: textImgData.height,\r\n\t\t\t\t\t\tscaleX,\r\n\t\t\t\t\t\tscaleY,\r\n\t\t\t\t\t\tangle: posParam.rotationZ,\r\n\t\t\t\t\t\toriginX: 'center',\r\n \t\toriginY: 'center',\r\n\t\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t\tid: uuidv4(),\r\n\t\t\t\t\t\t\tinPoint: clip.inPoint,\r\n\t\t\t\t\t\t\tinFrame: getFrames(clip.inPoint, 30),\r\n\t\t\t\t\t\t\ttype: \"文字\",\r\n\t\t\t\t\t\t\ttextColor: textFill,\r\n\t\t\t\t\t\t\ttext: textContent,\r\n\t\t\t\t\t\t\tbgColor,\r\n\t\t\t\t\t\t\toriginClip: clip,\r\n\t\t\t\t\t\t\tfontAssetUrl,\r\n\t\t\t\t\t\t\tfontFamily,\r\n\t\t\t\t\t\t\ttextBasicInfo,\r\n\t\t\t\t\t\t\tisAiError,\r\n\t\t\t\t\t\t\tduration: clip.duration\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t})\r\n\t\t\t\t\timgData.on(\"selected\", (options: any) => {\r\n\t\t\t\t\t\toptions.target.isSelected = -1;\r\n\t\t\t\t\t});\r\n\t\t\t\t\timgData.on(\"moving\", (options: any) => {\r\n\t\t\t\t\t\toptions.transform.target.isSelected = 0;\r\n\t\t\t\t\t});\r\n\t\t\t\t\timgData.on('modified', () => {\r\n\t\t\t\t\t\tconst fObj = convertToJSON(imgData);\r\n\t\t\t\t\t\tif (fObj.clipData.isAiError) {\r\n\t\t\t\t\t\t\tfObj.clipData.textColor = 'rgba(0, 0, 0, 0)';\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tcanvas.add(imgData).renderAll();\r\n\t\t\t\t})\r\n\t\t\t} else {\r\n\t\t\t\twaitFcTasks.current.push(createTextFromClip.bind(this, clip));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// 生成简短的字体名称\r\n\t\tconst getFontFamilyName = (url: string) => {\r\n\t\t\t// 从URL中提取文件名作为字体名称\r\n\t\t\tconst filename = url.split('/').pop() || '';\r\n\t\t\tconst name = filename.replace(/\\.(ttf|otf|woff2?|eot)$/i, '');\r\n\t\t\treturn `CustomFont_${name.substring(0, 20)}`; // 限制长度\r\n\t\t};\r\n\r\n\t\t// 检测字体格式\r\n\t\tconst detectFontFormat = (url: string) => {\r\n\t\t\tconst lower = url.toLowerCase();\r\n\t\t\tif (lower.includes('.woff2')) return 'woff2';\r\n\t\t\tif (lower.includes('.woff')) return 'woff';\r\n\t\t\tif (lower.includes('.otf')) return 'opentype';\r\n\t\t\tif (lower.includes('.ttf')) return 'truetype';\r\n\t\t\treturn null;\r\n\t\t};\r\n\t\t\r\n\t\tconst embedFontInSVG = async (svgString: string, url: string) => {\r\n if (url) {\r\n const res = await urlToBlob({ url });\r\n const format = detectFontFormat(url);\r\n const fontFamilyName = getFontFamilyName(url);\r\n const srcValue = format ? `url('${res}') format('${format}')` : `url('${res}')`;\r\n const fontFace = `\r\n @font-face {\r\n font-family: '${fontFamilyName}';\r\n src: ${srcValue};\r\n }\r\n `;\r\n const styleElement = `<style type=\"text/css\"><![CDATA[${fontFace}]]></style>`;\r\n const result = svgString.replace('</svg>', `${styleElement}</svg>`);\r\n return result;\r\n }\r\n return svgString\r\n }\r\n\r\n\t\t//文字转图片\r\n\t\tconst createTextImg = async ({ textContent, bgColor, textColor, fontAssetUrl = null, textBasicInfo }: any) => {\r\n\t\t\tconst container = document.createElement('div');\r\n\t\t\tcontainer.style.backgroundColor = bgColor\r\n\t\t\t// container.style.width = `fit-content`\r\n\t\t\t// container.style.height = `fit-content`\r\n\t\t\tcontainer.style.boxSizing = 'content-box'\r\n\t\t\tcontainer.style.display = 'inline-block'\r\n\t\t\tcontainer.style.textAlign = textBasicInfo.textAlign || 'left';\r\n\t\t\tconst lines = textContent.split('\\n');\r\n\t\t\tconst fontFamily = fontAssetUrl ? getFontFamilyName(fontAssetUrl) : 'sansMedium';\r\n\t\t\tlines.forEach((line: string) => {\r\n\t\t\t\tconst p = document.createElement('p');\r\n\t\t\t\tp.style.color = textColor;\r\n\t\t\t\tp.style.fontSize = '22px'\r\n\t\t\t\tp.style.lineHeight = '22px'\r\n\t\t\t\tconst font = fontAssetUrl ? `font-${fontAssetUrl}` : 'sansMedium';\r\n\t\t\t\tp.style.fontFamily = fontFamily;\r\n\t\t\t\tp.style.whiteSpace = \"nowrap\"\r\n\t\t\t\t// p.style.backgroundColor = bgColor;\r\n\t\t\t\tp.style.padding = '0';\r\n\t\t\t\tp.textContent = line || \" \"\r\n\t\t\t\tcontainer.appendChild(p);\r\n\t\t\t})\r\n\t\t\tcontainer.style.padding = '6.5px 7px 6.5px 7px'\r\n\t\t\t// container.style.padding = '7.5px 7px 5.8px 7px'\r\n\t\t\tcontainer.style.borderRadius = '5px'\r\n\t\t\tdocument.body.appendChild(container)\r\n\t\t\tconst { width, height } = container?.getBoundingClientRect() as any;\r\n\t\t\tconst dataurl = await toSvg(container);\r\n\t\t\tdocument.body.removeChild(container);\r\n\t\t\tconst base64Image = await embedFontInSVG(dataurl, fontAssetUrl);\r\n \treturn { base64Image, height, width };\r\n\t\t}\r\n\t\tconst createText = async ({ textContent, bgColor, textColor, position, textBasicInfo, id }: any, fc2: any) => {\r\n\t\t\tconst canvas = fc || fc2;\r\n\t\t\tconst { left, top, angle, scaleX, scaleY, zoomX, zoomY } = position;\r\n\t\t\tconst textImgData = await createTextImg({ textContent, bgColor, textColor, textBasicInfo });\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tfabric.Image.fromURL(textImgData.base64Image, (imgData: any) => {\r\n\t\t\t\t\timgData.set({\r\n\t\t\t\t\t\tleft, \r\n\t\t\t\t\t\ttop,\r\n\t\t\t\t\t\tangle,\r\n\t\t\t\t\t\twidth: textImgData.width,\r\n\t\t\t\t\t\theight: textImgData.height,\r\n\t\t\t\t\t\tscaleX,\r\n\t\t\t\t\t\tscaleY,\r\n\t\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t\tid: uuidv4(),\r\n\t\t\t\t\t\t\tinPoint: Math.floor((frame / 30) * 1000000),\r\n\t\t\t\t\t\t\tinFrame: frame,\r\n\t\t\t\t\t\t\ttype: \"文字\",\r\n\t\t\t\t\t\t\ttextBasicInfo,\r\n\t\t\t\t\t\t\ttextColor: textColor,\r\n\t\t\t\t\t\t\ttext: textContent,\r\n\t\t\t\t\t\t\tbgColor: bgColor\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t})\r\n\t\t\t\t\timgData.on(\"selected\", (options: any) => {\r\n\t\t\t\t\t\toptions.target.isSelected = -1;\r\n\t\t\t\t\t});\r\n\t\t\t\t\timgData.on(\"moving\", (options: any) => {\r\n\t\t\t\t\t\toptions.transform.target.isSelected = 0;\r\n\t\t\t\t\t});\r\n\t\t\t\t\timgData.on('modified', () => {\r\n\t\t\t\t\t\tconst fObj = convertToJSON(imgData)\r\n\t\t\t\t\t\tvmmlConverterRef.current.updateClip(fObj);\r\n\t\t\t\t\t});\r\n\t\t\t\t\tcanvas.centerObject(imgData);\r\n\t\t\t\t\tcanvas.add(imgData)\r\n\t\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\t\tcanvas.renderAll();\t\r\n\t\t\t\t\t})\r\n\t\t\t\t\tonVideoChange(imgData.clipData);\r\n\t\t\t\t\tvmmlConverterRef.current.addTextClip(convertToJSON(imgData));\r\n\t\t\t\t\tresolve(true);\r\n\t\t\t\t})\r\n\t\t\t}) \r\n\t\t};\r\n\t\tconst updateText = async ({ id, textContent, bgColor, textColor, textBasicInfo, fontAssetUrl }: any) => {\r\n\t\t\tconst textImgData = await createTextImg({ textContent, bgColor, textColor, fontAssetUrl, textBasicInfo });\r\n\t\t\tconst target = fc.getObjects().find((item: any) => item.clipData.id === id);\r\n\t\t\ttarget.setSrc(textImgData.base64Image, (img: any) => {\r\n\t\t\t\timg.set({\r\n\t\t\t\t\tvisible: true,\r\n\t\t\t\t\tclipData: {\r\n\t\t\t\t\t\t...img.clipData,\r\n\t\t\t\t\t\ttextBasicInfo,\r\n\t\t\t\t\t\ttextColor: textColor,\r\n\t\t\t\t\t\ttext: textContent,\r\n\t\t\t\t\t\tbgColor: bgColor,\r\n\t\t\t\t\t\tisAiError: false\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\timg.setCoords();\r\n\t\t\t\tfc.renderAll();\r\n\t\t\t\tvmmlConverterRef.current.updateClip(convertToJSON(img));\r\n\t\t\t});\r\n\t\t}\r\n\t\tconst changeObjectVisible = (id: string, visible: boolean = true) => {\r\n\t\t\tconst target = fc.getObjects().find((item: any) => item.clipData.id === id);\r\n\t\t\ttarget.set({ visible });\r\n\t\t\tfc.renderAll();\r\n\t\t}\r\n\r\n\t\tconst getfObjectNums = (type: string) => {\r\n\t\t\tif (fc) {\r\n\t\t\t\tconst objects = fc.getObjects();\r\n\t\t\t\treturn objects.filter((item: any) => item.clipData.type === type && !item.clipData.originClip).length;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst getfcObject = () => {\r\n\t\t\tif (fc) {\r\n\t\t\t\treturn fc.getObjects();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst styles: any = useMemo(() => {\r\n\t\t\treturn {\r\n\t\t\t\tposition: \"absolute\",\r\n\t\t\t\ttop: canvasSize.top,\r\n\t\t\t\tdisplay: showCanvas ? \"block\" : \"none\",\r\n\t\t\t}\r\n\t\t}, [showCanvas])\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (!fc && canvasSize.width) {\r\n\t\t\t\tinitCanvas();\r\n\t\t\t}\r\n\t\t\treturn () => {\r\n\t\t\t\tif (fc) {\r\n\t\t\t\t\tfc.dispose();\r\n\t\t\t\t\tsetFc(null);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}, [canvasSize.width]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (!previewState && fc) {\r\n\t\t\t\tfc.discardActiveObject();\r\n\t\t\t\tcheckObjectInPoint();\r\n\t\t\t}\r\n\t\t}, [previewState]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (fc) {\r\n\t\t\t\tif (dragState === 1) {\r\n\t\t\t\t\tfc.discardActiveObject();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [fc, dragState])\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (canvasSize.width && canvasSize.height && !vmmlConverterRef.current) {\r\n\t\t\t\tvmmlConverterRef.current = new VmmlConverter({ vmml, canvasSize });\r\n\t\t\t}\r\n\t\t}, [canvasSize, vmml]);\r\n\r\n\t\tuseEffect(() => {\r\n\t\t\tif (fc) {\r\n\t\t\t\tconst historyClass = new HistoryClass(fc);\r\n\t\t\t\tsetHistory(historyClass);\r\n\t\t\t\tif (waitFcTasks.current.length) {\r\n\t\t\t\t\twaitFcTasks.current.forEach((item: any) => item(fc));\r\n\t\t\t\t\twaitFcTasks.current = [];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, [fc]);\r\n\r\n\t\tuseImperativeHandle(ref, () => ({\r\n\t\t\tcreateImage,\r\n\t\t\tcreateText,\r\n\t\t\tupdateText,\r\n\t\t\thandleRedo,\r\n\t\t\thandleUndo,\r\n\t\t\tgetActions,\r\n\t\t\tgetfObjectNums,\r\n\t\t\tupdateImage,\r\n\t\t\tgetfcObject,\r\n\t\t\tcheckObjectInPoint,\r\n\t\t\tcreateImageFromClip,\r\n\t\t\tcreateTextFromClip,\r\n\t\t\tchangeObjectVisible\r\n\t\t}));\r\n\r\n\t\tconst getActions = () => {\r\n\t\t\tif (history) {\r\n\t\t\t\treturn history.getActionType();\r\n\t\t\t}\r\n\t\t\treturn []\r\n\t\t};\r\n\r\n\t\treturn (\r\n\t\t\t<div style={styles} >\r\n\t\t\t\t<canvas id=\"canvas\" />\r\n\t\t\t</div>\r\n\t\t);\r\n\t},\r\n);\r\n\r\nexport default EditorCanvas;\r\n","const css = `.page-loader {\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 100;\n overflow: hidden;\n}\n.page-loader .light {\n width: 75%;\n height: 100%;\n background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n transform: skew(-45deg) translateX(-400%);\n animation: animate_light 1s infinite;\n}\n\n@keyframes animate_light {\n 100% {\n transform: skew(-45deg) translateX(200%);\n }\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJsb2FkaW5nLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFPQTtFQUNBOzs7QUFJSjtFQUNFO0lBQ0UiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLnBhZ2UtbG9hZGVyIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgdG9wOiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgei1pbmRleDogMTAwO1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgLmxpZ2h0IHtcclxuICAgIHdpZHRoOiA3NSU7XHJcbiAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsXHJcbiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSxcclxuICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpLFxyXG4gICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKSxcclxuICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpLFxyXG4gICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wKSxcclxuICAgICAgKTtcclxuICAgIHRyYW5zZm9ybTogc2tldygtNDVkZWcpIHRyYW5zbGF0ZVgoLTQwMCUpO1xyXG4gICAgYW5pbWF0aW9uOiBhbmltYXRlX2xpZ2h0IDFzIGluZmluaXRlO1xyXG4gIH1cclxufVxyXG5cclxuQGtleWZyYW1lcyBhbmltYXRlX2xpZ2h0IHtcclxuICAxMDAlIHtcclxuICAgIHRyYW5zZm9ybTogc2tldygtNDVkZWcpIHRyYW5zbGF0ZVgoMjAwJSk7XHJcbiAgfVxyXG59Il19 */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import \"../assets/css/loading.scss\"\r\n\r\nconst Loaidng = ({ show }: any) => {\r\n\r\n const styles = {\r\n display: show ? \"flex\" : \"none\"\r\n }\r\n\r\n return (\r\n <div style={styles} className=\"page-loader\">\r\n <div className=\"light\"></div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default Loaidng","const css = `.container {\n width: 100vw;\n height: 100vh;\n position: fixed;\n left: 0;\n top: 0;\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n justify-content: center;\n}\n.container .main_text {\n background: #000000;\n border-radius: 16px;\n backdrop-filter: blur(40px);\n padding: 3.2vw;\n font-weight: 400;\n font-size: 4vw;\n color: #FFFFFF;\n line-height: 5.6vw;\n text-align: right;\n font-style: normal;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJtYXhUZXh0TGF5ZXIuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiJHZtX2Jhc2U6IDc1MDtcclxuXHJcbkBmdW5jdGlvbiB2bSgkcHgpIHtcclxuXHJcbiAgICBAcmV0dXJuICgkcHggLyA3NTApICogMTAwdnc7XHJcblxyXG59XHJcblxyXG4uY29udGFpbmVye1xyXG4gIHdpZHRoOiAxMDB2dztcclxuICBoZWlnaHQ6IDEwMHZoO1xyXG4gIHBvc2l0aW9uOiBmaXhlZDtcclxuICBsZWZ0OiAwO1xyXG4gIHRvcDogMDtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIC5tYWluX3RleHR7XHJcbiAgICBiYWNrZ3JvdW5kOiAjMDAwMDAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogMTZweDtcclxuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0MHB4KTtcclxuICAgIHBhZGRpbmc6IHZtKDI0KTtcclxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XHJcbiAgICBmb250LXNpemU6IHZtKDMwKTtcclxuICAgIGNvbG9yOiAjRkZGRkZGO1xyXG4gICAgbGluZS1oZWlnaHQ6IHZtKDQyKTtcclxuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xyXG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xyXG4gIH1cclxufSJdfQ== */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import { useEffect } from \"react\";\r\nimport \"../assets/css/maxTextLayer.scss\";\r\nconst MaxTextLayer = ({\r\n\tshow = false,\r\n\ttextLayerHide,\r\n\ttext,\r\n}: { show: boolean; textLayerHide: () => void; text: string }) => {\r\n\tuseEffect(() => {\r\n\t\tconst timer = setTimeout(() => {\r\n\t\t\ttextLayerHide();\r\n\t\t}, 2000);\r\n\t\treturn () => {\r\n\t\t\tclearTimeout(timer);\r\n\t\t};\r\n\t});\r\n\treturn (\r\n\t\tshow && (\r\n\t\t\t<>\r\n\t\t\t\t<div className=\"container\" onClick={textLayerHide}>\r\n\t\t\t\t\t<span className=\"main_text\">{text}</span>\r\n\t\t\t\t</div>\r\n\t\t\t</>\r\n\t\t)\r\n\t);\r\n};\r\n\r\nexport default MaxTextLayer;\r\n","const css = `@charset \"UTF-8\";\n.overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n color: white;\n font-size: 24px;\n overflow: hidden;\n}\n.overlay > .text-header {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n height: 11.467vw;\n padding-left: 4.4vw;\n padding-right: 3.2vw;\n box-sizing: border-box;\n position: fixed;\n top: 0;\n transition: all 0.01s;\n z-index: 16;\n}\n.overlay > .text-header > .close {\n width: 5.0666666667vw;\n height: 5.0666666667vw;\n}\n.overlay > .text-header > .close img {\n width: 100%;\n height: 100%;\n}\n.overlay > .text-header > .history-operate {\n height: 7.2vw;\n display: none;\n align-items: center;\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n}\n.overlay > .text-header > .history-operate img {\n width: 4.667vw;\n height: 5.067vw;\n}\n.overlay > .text-header > .history-operate > img:last-child {\n margin-left: 8vw;\n}\n.overlay > .text-header > .next-button {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 16vw;\n height: 7.2vw;\n line-height: 7.2vw;\n background: #1677FF;\n border-radius: 6.533vw;\n text-align: center;\n font-size: 3.2vw;\n color: #fff;\n border: 0;\n}\n.overlay .cover {\n position: fixed;\n bottom: 8vw;\n width: 100%;\n height: 10.6666666667vw;\n z-index: 999;\n transition: all 0.1s;\n}\n.overlay .text-input, .overlay .mappingarea {\n font-family: PingFangSC, PingFang SC;\n border: none;\n font-size: 22px;\n /* 取消外边框 */\n outline: none;\n background-color: rgba(0, 0, 0, 0);\n line-height: 30px;\n}\n.overlay .text-input::-webkit-scrollbar, .overlay .mappingarea::-webkit-scrollbar {\n display: none;\n}\n.overlay .text-input, .overlay .mappingarea {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n transition: all 0.1s;\n}\n.overlay .text-input {\n padding-top: 1.0666666667vw;\n padding-bottom: 1.0666666667vw;\n padding-left: 1.6vw;\n padding-right: 1.3333333333vw;\n z-index: 10;\n width: 84vw;\n caret-color: #1677ff;\n position: absolute;\n top: 30%;\n left: 5%;\n height: 200px;\n word-break: break-all;\n}\n.overlay .mappingarea {\n padding-top: 1.0666666667vw;\n padding-bottom: 1.0666666667vw;\n padding-left: 1.6vw;\n padding-right: 1.3333333333vw;\n border-radius: 1.3333333333vw;\n border: 0;\n position: fixed;\n top: 30%;\n left: 5%;\n height: fit-content;\n max-height: 200px;\n color: transparent;\n overflow-y: scroll;\n z-index: 9;\n display: flex;\n flex-flow: column nowrap;\n box-sizing: content-box;\n}\n.overlay .mappingarea .mappingarea_span {\n font-size: 22px;\n max-width: 84vw;\n white-space: pre-wrap;\n word-break: break-all;\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJlZGl0b3JUZXh0TWVudS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFPQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUdBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBRUE7RUFDRTtFQUNBOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBOztBQUdGO0VBQ0U7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFFRTtFQUNBO0VBRUE7QUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQVpKO0VBY0U7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiJHZtX2Jhc2U6IDc1MDtcclxuXHJcbkBmdW5jdGlvbiB2bSgkcHgpIHtcclxuXHJcbiAgICBAcmV0dXJuICgkcHggLyA3NTApICogMTAwdnc7XHJcblxyXG59XHJcbi5vdmVybGF5IHtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgdG9wOiAwO1xyXG4gIGxlZnQ6IDA7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcclxuICAvLyBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XHJcbiAgLy8gLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGNvbG9yOiB3aGl0ZTtcclxuICBmb250LXNpemU6IDI0cHg7XHJcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAvLyDpobbpg6hcclxuICAmPi50ZXh0LWhlYWRlciB7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgaGVpZ2h0OiAxMS40Njd2dztcclxuICAgIHBhZGRpbmctbGVmdDogNC40dnc7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiAzLjJ2dztcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDA7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4wMXM7XHJcbiAgICB6LWluZGV4OjE2O1xyXG4gICAgJj4uY2xvc2Uge1xyXG4gICAgICB3aWR0aDogdm0oMzgpO1xyXG4gICAgICBoZWlnaHQ6IHZtKDM4KTtcclxuXHJcbiAgICAgIGltZyB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJj4uaGlzdG9yeS1vcGVyYXRlIHtcclxuICAgICAgaGVpZ2h0OiA3LjJ2dztcclxuICAgICAgZGlzcGxheTogbm9uZTtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBsZWZ0OiA1MCU7XHJcbiAgICAgIHRvcDogNTAlO1xyXG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxuXHJcbiAgICAgIGltZyB7XHJcbiAgICAgICAgd2lkdGg6IDQuNjY3dnc7XHJcbiAgICAgICAgaGVpZ2h0OiA1LjA2N3Z3O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAmPmltZzpsYXN0LWNoaWxkIHtcclxuICAgICAgICBtYXJnaW4tbGVmdDogOHZ3O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJj4ubmV4dC1idXR0b24ge1xyXG4gICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDE2dnc7XHJcbiAgICAgIGhlaWdodDogNy4ydnc7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA3LjJ2dztcclxuICAgICAgYmFja2dyb3VuZDogIzE2NzdGRjtcclxuICAgICAgYm9yZGVyLXJhZGl1czogNi41MzN2dztcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgICBmb250LXNpemU6IDMuMnZ3O1xyXG4gICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgYm9yZGVyOiAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLmNvdmVyIHtcclxuICAgIHBvc2l0aW9uOiBmaXhlZDtcclxuICAgIGJvdHRvbTogdm0oNjApO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBoZWlnaHQ6dm0oODApO1xyXG4gICAgei1pbmRleDogOTk5O1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMXM7XHJcbiAgfVxyXG5cclxuICAudGV4dC1pbnB1dCwubWFwcGluZ2FyZWF7XHJcbiAgICAvLyBmb250LWZhbWlseTo7XHJcbiAgICBmb250LWZhbWlseTogUGluZ0ZhbmdTQywgUGluZ0ZhbmcgU0M7XHJcbiAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAvLyBmb250LXdlaWdodDogNjAwO1xyXG4gICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgLyog5Y+W5raI5aSW6L655qGGICovXHJcbiAgICBvdXRsaW5lOiBub25lO1xyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTtcclxuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xyXG4gICAgLy8g6ZqQ6JeP5rua5Yqo5p2h77yM5L2G5LuN54S25L+d5oyB5rua5Yqo5Yqf6IO9XHJcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7IFxyXG4gICAgICBkaXNwbGF5OiBub25lOyBcclxuICAgIH1cclxuICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgIC8qIElFIGFuZCBFZGdlICovXHJcbiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7ICAvKiBGaXJlZm94ICovXHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xcztcclxuICB9XHJcbiAgLnRleHQtaW5wdXR7XHJcbiAgICBwYWRkaW5nLXRvcDogdm0oOCk7XHJcbiAgICBwYWRkaW5nLWJvdHRvbTogdm0oOCk7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IHZtKDEyKTtcclxuICAgIHBhZGRpbmctcmlnaHQ6IHZtKDEwKTtcclxuICAgIHotaW5kZXg6IDEwO1xyXG4gICAgd2lkdGg6IDg0dnc7XHJcbiAgICBjYXJldC1jb2xvcjogIzE2NzdGRkZGO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgdG9wOiAzMCU7XHJcbiAgICBsZWZ0OiA1JTtcclxuICAgIGhlaWdodDogMjAwcHg7XHJcbiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICAvLyBwYWRkaW5nOiB2bSgxOCk7XHJcbiAgfVxyXG4gIC5tYXBwaW5nYXJlYXtcclxuICAgIHBhZGRpbmctdG9wOiB2bSg4KTtcclxuICAgIHBhZGRpbmctYm90dG9tOiB2bSg4KTtcclxuICAgIHBhZGRpbmctbGVmdDogdm0oMTIpO1xyXG4gICAgcGFkZGluZy1yaWdodDogdm0oMTApO1xyXG4gICAgYm9yZGVyLXJhZGl1czogdm0oMTApO1xyXG4gICAgYm9yZGVyOjA7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICB0b3A6IDMwJTtcclxuICAgIGxlZnQ6IDUlO1xyXG4gICAgaGVpZ2h0OiBmaXQtY29udGVudDtcclxuICAgIG1heC1oZWlnaHQ6IDIwMHB4O1xyXG4gICAgY29sb3I6IHRyYW5zcGFyZW50OyAvL+iuvue9ruminOiJsumAj+aYju+8jOS/neivgeiDjOaZr+minOiJslxyXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xyXG4gICAgei1pbmRleDogOTtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBmbGV4LWZsb3c6IGNvbHVtbiBub3dyYXA7XHJcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcclxuICAgIC5tYXBwaW5nYXJlYV9zcGFue1xyXG4gICAgICBmb250LXNpemU6IDIycHg7XHJcbiAgICAgIG1heC13aWR0aDogODR2dztcclxuICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xyXG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XHJcbiAgICB9XHJcbiAgfVxyXG59Il19 */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import { isIOS } from \"@versa_ai/vmml-utils\";\r\nconst defaultBottom = \"20px\";\r\n//判断安卓版本\r\nexport const checkIfAndroidAndVersion = () => {\r\n\tconst userAgent = navigator.userAgent;\r\n\tconst androidPattern = /Android\\s([0-9\\.]*)/;\r\n\r\n\tconst match = userAgent.match(androidPattern);\r\n\r\n\tif (match) {\r\n\t\tconst version = match[1];\r\n\t\tconsole.log(`This is an Android device with version ${version}`);\r\n\t\treturn version;\r\n\t}\r\n};\r\nconst checkIPhoneSeries = () => {\r\n\tconst screenWidth = window.screen.width;\r\n\tconst screenHeight = window.screen.height;\r\n\t// console.info('screen size',`screenWidth:${screenWidth},screenHeight:${screenHeight}`)\r\n\tif (screenWidth === 320 && screenHeight === 480) {\r\n\t\treturn \"iPhone 4 or 4S\";\r\n\t} else if (screenWidth === 375 && screenHeight === 667) {\r\n\t\treturn \"iPhone 6/7/8\";\r\n\t} else if (screenWidth === 414 && screenHeight === 736) {\r\n\t\treturn \"iPhone 6/7/8 Plus\";\r\n\t} else if (screenWidth === 375 && screenHeight === 812) {\r\n\t\treturn \"iPhone X/XS\";\r\n\t} else if (screenWidth === 414 && screenHeight === 896) {\r\n\t\treturn \"iPhone XR/11\";\r\n\t} else if (screenWidth === 414 && screenHeight === 844) {\r\n\t\treturn \"iPhone 12 mini\";\r\n\t} else if (screenWidth === 414 && screenHeight === 915) {\r\n\t\treturn \"iPhone 13 Pro Max/12 Pro Max\";\r\n\t} else if (screenWidth === 390 && screenHeight === 844) {\r\n\t\treturn \"iPhone 13 mini\";\r\n\t} else {\r\n\t\treturn \"Unknown iPhone model\";\r\n\t}\r\n};\r\nexport const getIOSVersion = () => {\r\n if (isIOS()) {\r\n const match = navigator.userAgent.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n if (match) {\r\n const version = `${match[1]}.${match[2]}`;\r\n return version;\r\n }\r\n }\r\n return null;\r\n};\r\nconst iPhoneAdapter = (series: string) => {\r\n\tconst seriesArr = [\"iPhone 6/7/8 Plus\", \"iPhone 6/7/8\"];\r\n\treturn seriesArr.includes(series);\r\n};\r\n//判断当前版本是否需要做适配\r\nexport const canAdapter = () => {\r\n\tconst versionArr = [\"12\"];\r\n\tconst version = checkIfAndroidAndVersion();\r\n\tif (version !== undefined) {\r\n\t\treturn versionArr.includes(version);\r\n\t}\r\n};\r\n// ios和Android键盘兼容\r\n// 目前测试设备中键盘唤起不会触发resize事件,所以需要监听focusin事件,所以watchKeyBoard不存在系统区分\r\nexport const watchKeyBoard = (callback: (isShow: boolean) => void) => {\r\n\tconst focusInHandler = (e: FocusEvent) => {\r\n\t\tcallback(true);\r\n\t\tstopMove();\r\n\t};\r\n\r\n\tconst focusOutHandler = (e: FocusEvent) => {\r\n\t\tcallback(false);\r\n\t};\r\n\r\n\tdocument.body.addEventListener(\"focusin\", focusInHandler);\r\n\tdocument.body.addEventListener(\"focusout\", focusOutHandler);\r\n\r\n\t// 返回一个函数,用于移除事件监听器\r\n\treturn () => {\r\n\t\tdocument.body.removeEventListener(\"focusin\", focusInHandler);\r\n\t\tdocument.body.removeEventListener(\"focusout\", focusOutHandler);\r\n\t};\r\n};\r\nexport const stopMove = () => {\r\n\tconst dom = document.getElementsByClassName(\"overlay\")[0];\r\n\tconst element = document.querySelector(\".mappingarea\") as HTMLElement;\r\n\r\n\tconst stopScroll = (e: any) => {\r\n\t\tconst lastTouchPositionX = 0;\r\n\t\tconst lastTouchPositionY = 0;\r\n\t\t// 排除可以滚动的区域\r\n\t\tconst currentTouchPositionX = e.touches[0].clientX;\r\n\t\tconst currentTouchPositionY = e.touches[0].clientY;\r\n\r\n\t\tconst deltaX = currentTouchPositionX - lastTouchPositionX;\r\n\t\tconst deltaY = currentTouchPositionY - lastTouchPositionY;\r\n\t\tif ([\"text-header\", \"overlay\", \"text_bg_change\"].includes(e.target?.className)) {\r\n\t\t\te.preventDefault(); // 阻止纵向滚动\r\n\t\t\t// if (Math.abs(deltaY) > Math.abs(deltaX)) {\r\n\t\t\t// e.preventDefault(); // 阻止纵向滚动\r\n\t\t\t// }\r\n\t\t}\r\n\t\tif (element) {\r\n\t\t\tconst willOverflow = element.scrollHeight > element.clientHeight;\r\n\t\t\tif (willOverflow) {\r\n\t\t\t\treturn;\r\n\t\t\t} else if (e.target?.className.split(\" \").includes(\"color-item\") || e.target?.className === \"text_color_change\") {\r\n\t\t\t\tif (deltaX < 0 || deltaX > 0) {\r\n\t\t\t\t\t// 允许横向滚动\r\n\t\t\t\t\treturn;\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault(); // 阻止非横向滚动\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (Math.abs(deltaY) > Math.abs(deltaX)) {\r\n\t\t\t\t\te.preventDefault(); // 阻止其他元素的纵向滚动\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\te.preventDefault();\r\n\t};\r\n\tif (dom) {\r\n\t\tdom.addEventListener(\"touchmove\", stopScroll);\r\n\t}\r\n};\r\nexport const scrollToTop = () => {\r\n\twindow.scrollTo(0, 0);\r\n};\r\n\r\nexport const onKeyBoardAction = (\r\n\tstatus: boolean,\r\n\theaderRef: HTMLDivElement | null,\r\n\ttextareaRef: HTMLTextAreaElement | null,\r\n\tcoverRef: HTMLDivElement | null,\r\n\tmappingareaRef: HTMLDivElement | null,\r\n\taimTop?: number,\r\n) => {\r\n\t//IOS适配\r\n\tif (isIOS()) {\r\n\t\tforIos(status, headerRef, textareaRef, coverRef, mappingareaRef);\r\n\t}\r\n\t//Android适配\r\n\telse {\r\n\t\t// forAndroid(currentScrollY, status, headerRef, textareaRef, coverRef, mappingareaRef);\r\n\t}\r\n};\r\n\r\n//方案一\r\nconst forIos = (\r\n\tstatus: boolean,\r\n\theaderRef: HTMLDivElement | null,\r\n\ttextareaRef: HTMLTextAreaElement | null,\r\n\tcoverRef: HTMLDivElement | null,\r\n\tmappingareaRef: HTMLDivElement | null,\r\n) => {\r\n\tconst series = checkIPhoneSeries();\r\n\tconst isIPhoneAdapt = iPhoneAdapter(series);\r\n\t//键盘展开\r\n\tif (status) {\r\n\t\tconst totalHeight = document.documentElement.clientHeight || document.body.clientHeight;\r\n\t\t//ios键盘高度约为屏幕的25%\r\n\t\tconst keyBoardHeight = totalHeight * 0.25;\r\n\t\tif (coverRef && textareaRef) {\r\n\t\t\tconst textareaRefPos = textareaRef.getBoundingClientRect()\r\n\t\t\tconst { height } = textareaRefPos\r\n\t\t\tif (isIPhoneAdapt) {\r\n\t\t\t\tcoverRef.style.bottom = `${keyBoardHeight + 50}px`\r\n\t\t\t} else {\r\n\t\t\t\tcoverRef.style.transform = `translateY(${-(height + 10)}px)`\r\n\t\t\t}\r\n\t\t}\r\n\t} else {\r\n\t\tif (coverRef) {\r\n\t\t\tif (isIPhoneAdapt) {\r\n\t\t\t\tcoverRef.style.bottom = `8vw`\r\n\t\t\t} else {\r\n\t\t\t\tcoverRef.style.transform = `translateY(0px)`\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n};\r\nconst forAndroid = (\r\n\tcurrentScrollY: number,\r\n\tstatus: boolean,\r\n\theaderRef: HTMLDivElement | null,\r\n\ttextareaRef: HTMLTextAreaElement | null,\r\n\tcoverRef: HTMLDivElement | null,\r\n\tmappingareaRef: HTMLDivElement | null,\r\n) => {\r\n\tconst updatePosition = () => {\r\n\t\tif (mappingareaRef && textareaRef) {\r\n\t\t\tconst rect = textareaRef.getBoundingClientRect();\r\n\t\t\tmappingareaRef.style.top = `${rect.top}px`;\r\n\t\t\tmappingareaRef.style.left = `${rect.left}px`;\r\n\t\t}\r\n\t}\r\n\twindow.addEventListener('scroll', updatePosition);\r\n\twindow.addEventListener('resize', updatePosition);\r\n};\r\n","const css = `@charset \"UTF-8\";\n.color-selector {\n width: 100%;\n height: 100%;\n display: flex;\n flex-flow: row nowrap;\n align-items: center;\n padding-right: 2.6666666667vw;\n}\n.color-selector .text_bg_change {\n width: 6.4vw;\n height: 6.4vw;\n flex: 0 0 auto;\n text-align: center;\n line-height: 6.4vw;\n padding: 0 4.8vw;\n margin-right: 4vw;\n border-right: 2px solid rgba(255, 255, 255, 0.4); /* 设置左边框的宽度、样式和颜色 */\n}\n.color-selector .text_color_change {\n flex: 1 1 auto;\n display: flex;\n flex-flow: row nowrap;\n overflow-x: auto;\n white-space: nowrap;\n height: 100%;\n padding-right: 1.3333333333vw;\n align-items: center;\n}\n.color-selector .text_color_change > * {\n flex-shrink: 0;\n}\n.color-selector .text_color_change .color-item {\n width: 6.4vw;\n height: 6.4vw;\n border-radius: 50%;\n margin: 0 2vw;\n box-sizing: border-box;\n}\n.color-selector .text_color_change .black-border {\n border: 0.2666666667vw solid #333333;\n}\n.color-selector .text_color_change .current {\n box-shadow: 0 0 0 0.8vw #1677FF;\n}\n.color-selector .text_color_change::-webkit-scrollbar {\n display: none;\n}\n.color-selector .text_color_change {\n -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n}\n/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXGNvZGVcXHdvcmtcXHZtbWwtcGxheWVyXFxwYWNrYWdlc1xcZWRpdG9yXFxzcmNcXGFzc2V0c1xcY3NzIiwic291cmNlcyI6WyJjb2xvclNlbGVjdG9yLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQVFBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUY7RUFDRTs7QUFFRjtFQUVFOztBQUdGO0VBQ0k7O0FBNUJOO0VBOEJFO0VBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIkdm1fYmFzZTogNzUwO1xyXG5cclxuQGZ1bmN0aW9uIHZtKCRweCkge1xyXG5cclxuICAgIEByZXR1cm4gKCRweCAvIDc1MCkgKiAxMDB2dztcclxuXHJcbn1cclxuXHJcbi5jb2xvci1zZWxlY3RvcntcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBwYWRkaW5nLXJpZ2h0OiB2bSgyMCk7XHJcbiAgLnRleHRfYmdfY2hhbmdle1xyXG4gICAgd2lkdGg6IHZtKDQ4KTtcclxuICAgIGhlaWdodDogdm0oNDgpO1xyXG4gICAgZmxleDogMCAwIGF1dG87XHJcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICBsaW5lLWhlaWdodDogdm0oNDgpO1xyXG4gICAgcGFkZGluZzowIHZtKDM2KTtcclxuICAgIG1hcmdpbi1yaWdodDogdm0oMzApO1xyXG4gICAgYm9yZGVyLXJpZ2h0OiAycHggc29saWQgI0ZGRkZGRjY2OyAvKiDorr7nva7lt6bovrnmoYbnmoTlrr3luqbjgIHmoLflvI/lkozpopzoibIgKi9cclxuICB9XHJcbiAgLnRleHRfY29sb3JfY2hhbmdle1xyXG4gICAgZmxleDogMSAxIGF1dG87XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG4gICAgb3ZlcmZsb3cteDogYXV0bzsgLy8g5YWB6K645qiq5ZCR5rua5YqoXHJcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOyAvLyDnoa7kv53mlofmnKzkuI3kvJrmjaLooYxcclxuICAgIGhlaWdodDoxMDAlO1xyXG4gICAgcGFkZGluZy1yaWdodDogdm0oMTApO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICYgPiAqIHtcclxuICAgICAgZmxleC1zaHJpbms6IDA7IC8vIOmYsuatouWtkOWFg+e0oOe8qeWwj1xyXG4gICAgfVxyXG4gICAgLmNvbG9yLWl0ZW17XHJcbiAgICAgIHdpZHRoOiB2bSg0OCk7XHJcbiAgICAgIGhlaWdodDp2bSg0OCk7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICAgICAgbWFyZ2luOiAwIHZtKDE1KTtcclxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIH1cclxuICAgIC5ibGFjay1ib3JkZXJ7XHJcbiAgICAgIGJvcmRlcjp2bSgyKSBzb2xpZCAjMzMzMzMzRkZcclxuICAgIH1cclxuICAgIC5jdXJyZW50e1xyXG4gICAgICAvLyBib3JkZXI6IHZtKDYpIHNvbGlkICMxNjc3RkY7XHJcbiAgICAgIGJveC1zaGFkb3c6IDAgMCAwIHZtKDYpICMxNjc3RkY7XHJcbiAgICB9XHJcbiAgICAvLyDpmpDol4/mu5rliqjmnaHvvIzkvYbku43nhLbkv53mjIHmu5rliqjlip/og71cclxuICAgICY6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgXHJcbiAgICAgICAgZGlzcGxheTogbm9uZTsgXHJcbiAgICB9XHJcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7ICAvKiBJRSBhbmQgRWRnZSAqL1xyXG4gICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOyAgLyogRmlyZWZveCAqL1xyXG4gIH1cclxufSJdfQ== */`;\ndocument.head\n .appendChild(document.createElement(\"style\"))\n .appendChild(document.createTextNode(css));\nexport {css};\n","import \"../assets/css/colorSelector.scss\";\r\nimport { forwardRef, useImperativeHandle, useState } from \"react\";\r\nimport { iconText1, iconText2 } from \"../utils/const\";\r\ninterface Props {\r\n\tcolors: string[];\r\n\tcurrentColor: string;\r\n\tonSelectColor: (color: string) => void;\r\n}\r\nconst colorList = [\r\n\t{ colorName: \"white\", colorValue: \"rgb(255,255,255)\" },\r\n\t{ colorName: \"black\", colorValue: \"rgb(0,0,0)\" },\r\n\t{ colorName: \"gray\", colorValue: \"rgb(153,153,153)\" },\r\n\t{ colorName: \"red\", colorValue: \"rgb(248,82,81)\" },\r\n\t{ colorName: \"orange\", colorValue: \"rgb(250,158,60)\" },\r\n\t{ colorName: \"yellow\", colorValue: \"rgb(255,196,0)\" },\r\n\t{ colorName: \"lightGreen\", colorValue: \"rgb(145,212,0)\" },\r\n\t{ colorName: \"green\", colorValue: \"rgb(0,181,212)\" },\r\n\t{ colorName: \"lightBlue\", colorValue: \"rgb(0,183,244)\" },\r\n\t{ colorName: \"blue\", colorValue: \"rgb(23,120,255)\" },\r\n\t{ colorName: \"purple\", colorValue: \"rgb(82,95,255)\" },\r\n];\r\n\r\nconst ColorSelector = forwardRef(({ onColorChange, onBackGroundChange }: any, ref: any) => {\r\n\t// const [currentColor, setCurrentColor] = useState(\"red\");\r\n\tconst [currentColorItem, setCurrentColorItem] = useState<any>(colorList.find((color) => color.colorName === \"red\"));\r\n\tconst [currentBack, setCurrentBgColor] = useState<string | null>(null);\r\n\tconst [isSetBack, setIsSetBack] = useState(false);\r\n\tconst setColorClass = (item: any) => {\r\n\t\tconst { colorName } = currentColorItem;\r\n\t\tconst classes = [\r\n\t\t\titem.colorName === \"black\" && \"black-border\",\r\n\t\t\titem.colorName === colorName && \"current\",\r\n\t\t\t\"color-item\",\r\n\t\t]\r\n\t\t\t.filter(Boolean)\r\n\t\t\t.join(\" \");\r\n\t\treturn classes;\r\n\t};\r\n\r\n\tconst handleColorClick = (item: any) => {\r\n\t\tsetCurrentColorItem(item);\r\n\t\tonColorChange(item);\r\n\t};\r\n\r\n\tconst handleChangeBackGround = () => {\r\n\t\tconst setBgStatus = new Promise<void>((resolve, reject) => {\r\n\t\t\tsetIsSetBack(!isSetBack);\r\n\t\t\tresolve();\r\n\t\t});\r\n\t\t//暴露到父组件调用\r\n\t\tsetBgStatus.then(() => {\r\n\t\t\tonBackGroundChange(currentColorItem);\r\n\t\t});\r\n\t};\r\n\tconst getBackState = () => {\r\n\t\treturn isSetBack;\r\n\t};\r\n\tuseImperativeHandle(ref, () => ({\r\n\t\tgetBackState,\r\n\t\tsetIsSetBack,\r\n\t\tsetCurrentColorItem,\r\n\t}));\r\n\treturn (\r\n\t\t<div className=\"color-selector\">\r\n\t\t\t<div\r\n\t\t\t\tclassName=\"text_bg_change\"\r\n\t\t\t\tonClick={() => {\r\n\t\t\t\t\thandleChangeBackGround();\r\n\t\t\t\t}}\r\n\t\t\t>\r\n\t\t\t\t<img alt=\"\" src={isSetBack ? iconText2 : iconText1} style={{ width: \"100%\", height: \"100%\" }} />\r\n\t\t\t</div>\r\n\t\t\t<div className=\"text_color_change\">\r\n\t\t\t\t{colorList.map((item: any) => {\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclassName={setColorClass(item)}\r\n\t\t\t\t\t\t\tkey={item.colorName}\r\n\t\t\t\t\t\t\tstyle={{ backgroundColor: item.colorValue }}\r\n\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\thandleColorClick(item);\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t);\r\n});\r\nexport default ColorSelector;\r\n","import { forwardRef, useEffect, useImperativeHandle, useRef, useState } from \"react\";\r\nimport \"../assets/css/editorTextMenu.scss\";\r\nimport { closeIcon } from \"../utils/const\";\r\nimport { isIOS } from '@versa_ai/vmml-utils'\r\nimport { onKeyBoardAction, watchKeyBoard, canAdapter } from \"../utils/keyBoardUtils\";\r\nimport ColorSelector from \"./ColorSelector\";\r\n// 处理文本内容,总共40个字\r\nconst formatText = (text: string, maxLengthBase = 40): string => {\r\n\t// 正则表达式匹配所有类型的换行符\r\n\tconst newlineRegex = /(\\r\\n|\\r|\\n)/g;\r\n\tconst matches = text.match(newlineRegex)?.length || 0;\r\n\tconst maxLength = maxLengthBase + matches\r\n\tlet trimmedText = text.substring(0, maxLength)\r\n\tif ((text.length - matches) === maxLengthBase) {\r\n\t\t// 正则表达式去除尾部的换行符\r\n\t\ttrimmedText = trimmedText.replace(/(\\r\\n|\\r|\\n)+$/g, '');\r\n\t}\r\n\treturn trimmedText;\r\n};\r\n\r\nconst TextMenu = forwardRef(({ createText, textClose, textInfo, showTextButtons }: any, ref: any) => {\r\n\tconst formRef = useRef<HTMLFormElement>(null);\r\n\tconst headerRef = useRef<HTMLDivElement>(null);\r\n\tconst textareaRef = useRef<HTMLTextAreaElement>(null);\r\n\tconst coverRef = useRef<HTMLDivElement>(null);\r\n\tconst mappingarea = useRef<HTMLDivElement>(null);\r\n\tconst [textContent, setTextContent] = useState(\"\");\r\n\tconst [bgColor, setBgColor] = useState(\"transparent\");\r\n\tconst [textColor, setTextColor] = useState(\"rgb(248,82,81)\");\r\n\tconst [textPos, setTextPos] = useState<any>({ left: 0, top: 0, angle: 0, scaleX: 0.75, scaleY: 0.75, zoomX: 0, zoomY: 0 });\r\n\tconst [textBasicInfo, setTextBasicInfo] = useState<any>({\r\n\t\tcolorName: \"red\",\r\n\t\tcolorValue: \"rgb(248,82,81)\",\r\n\t\tisBack: false,\r\n\t\ttextAlign: 'left'\r\n\t});\r\n\tconst colorSelectorRef = useRef<any>(null);\r\n\tconst [textContentOnShow, setTextContentOnShow] = useState<any>([]);\r\n\tconst [scrollYValue, setScrollYValue] = useState(() => {\r\n\t\treturn Number.parseInt(localStorage.getItem('scrollYValue') as string) || null;\r\n\t});\r\n\tconst scrollYValueRef = useRef(scrollYValue);\r\n\tuseEffect(() => {\r\n\t\tconst callback = (status: any) => {\r\n\t\t\tif (scrollYValueRef.current === null) {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tconst newScrollYValue = window.scrollY;\r\n\t\t\t\t\tsetScrollYValue(newScrollYValue);\r\n\t\t\t\t\tscrollYValueRef.current = newScrollYValue;\r\n\t\t\t\t\tlocalStorage.setItem('scrollYValue', newScrollYValue.toString());\r\n\t\t\t\t}, 150);\r\n\t\t\t}\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tonKeyBoardAction(\r\n\t\t\t\t\tstatus,\r\n\t\t\t\t\theaderRef.current,\r\n\t\t\t\t\ttextareaRef.current,\r\n\t\t\t\t\tcoverRef.current,\r\n\t\t\t\t\tmappingarea.current\r\n\t\t\t\t);\r\n\t\t\t}, 200);\r\n\t\t};\r\n\t\tconst removeListeners = watchKeyBoard(callback);\r\n\t\t// 清理函数,用于移除事件监听器\r\n\t\treturn () => {\r\n\t\t\tremoveListeners();\r\n\t\t};\r\n\t}, []);\r\n\tuseEffect(() => {\r\n\t\t//设置同步滚动\r\n\t\tconst syncScroll = () => {\r\n\t\t\tif (textareaRef.current && mappingarea.current) {\r\n\t\t\t\tconst scrollPosition = textareaRef.current.scrollTop;\r\n\t\t\t\tmappingarea.current.scrollTop = scrollPosition;\r\n\t\t\t}\r\n\t\t};\r\n\t\tif (textareaRef.current) {\r\n\t\t\t// 添加滚动监听器到text-input\r\n\t\t\ttextareaRef.current.addEventListener(\"scroll\", syncScroll);\r\n\t\t\t// 添加输入监听器到textarea\r\n\t\t\ttextareaRef.current.addEventListener(\"input\", syncScroll);\r\n\t\t}\r\n\r\n\t\t// 清理函数,移除监听器\r\n\t\treturn () => {\r\n\t\t\tif (textareaRef.current) {\r\n\t\t\t\ttextareaRef.current.removeEventListener(\"scroll\", syncScroll);\r\n\t\t\t\ttextareaRef.current.removeEventListener(\"input\", syncScroll);\r\n\t\t\t}\r\n\t\t};\r\n\t}, []);\r\n\tuseEffect(() => {\r\n\t\tlet lines = [];\r\n\t\t//判断字符里是否存在\\r\r\n\t\tif (textContent.includes(\"\\r\")) {\r\n\t\t\tlines = textContent.split(\"\\r\");\r\n\t\t} else {\r\n\t\t\tlines = textContent.split(\"\\n\");\r\n\t\t}\r\n\t\tsetTextContentOnShow(lines);\r\n\t}, [textContent]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (Object.keys(textInfo).length > 0) {\r\n\t\t\tsetText(textInfo);\r\n\t\t} else {\r\n\t\t\tresetInfo();\r\n\t\t}\r\n\t}, [textInfo]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!isIOS()) {\r\n\t\t\tif (mappingarea.current && textareaRef.current) {\r\n\t\t\t\ttextareaRef.current.style.position = 'static'\r\n\t\t\t\tmappingarea.current.style.maxHeight = textareaRef.current.style.height = '50vh'\r\n\t\t\t\tmappingarea.current.style.maxWidth = getComputedStyle(textareaRef.current).width;\r\n\t\t\t\ttextareaRef.current.focus();\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tif (textareaRef.current) {\r\n\t\t\t\ttextareaRef.current.focus();\r\n\t\t\t}\r\n\t\t}\r\n\t}, [])\r\n\tconst handleOnChange = (e: any) => {\r\n\t\tconst inputValue = e.target.value;\r\n\t\tsetTextContent(formatText(inputValue));\r\n\t};\r\n\r\n\tconst handleSubmit = (e: any) => {\r\n\t\tif (showTextButtons) {\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\tif (formRef.current) {\r\n\t\t\tconst formData = new FormData(formRef.current);\r\n\t\t\t// 也可以使用普通的对象:\r\n\t\t\tconst formJson = Object.fromEntries((formData as any).entries());\r\n\t\t\tconst { input_content } = formJson;\r\n\t\t\trenderText(input_content);\r\n\t\t}\r\n\t};\r\n\tconst handleChangeColor = (item: any) => {\r\n\t\tsetColor(item);\r\n\t};\r\n\tconst onBackGroundChange = (currentColorItem: string) => {\r\n\t\tsetColor(currentColorItem);\r\n\t};\r\n\tconst setColor = (colorItem: any) => {\r\n\t\tif (textareaRef.current) {\r\n\t\t\ttextareaRef.current.focus();\r\n\t\t}\r\n\t\tconst { current } = colorSelectorRef;\r\n\t\tconst { colorName, colorValue } = colorItem;\r\n\t\tconst isBack = current ? current.getBackState() : false;\r\n\t\tconst textBasic = {\r\n\t\t\tcolorName,\r\n\t\t\tcolorValue,\r\n\t\t\tisBack,\r\n\t\t\ttextAlign: textBasicInfo.textAlign\r\n\t\t};\r\n\t\tsetTextBasicInfo(textBasic);\r\n\t\t//给文字设置颜色\r\n\t\tif (!isBack) {\r\n\t\t\tsetBgColor(\"transparent\");\r\n\t\t\tsetTextColor(colorValue);\r\n\t\t} else {\r\n\t\t\t//给背景设置颜色\r\n\t\t\t//点击切换颜色「非白色背景」,字都统一白色,背景变化对应颜色,若选择「白色背景」字变成黑色\r\n\t\t\tsetBgColor(colorValue);\r\n\t\t\tcolorName === \"white\" || colorValue === 'rgba(255, 255, 255, 1)' ? setTextColor(\"#000\") : setTextColor(\"#fff\");\r\n\t\t}\r\n\t};\r\n\tconst setText = (textInfo: any) => {\r\n\t\tconst { bgColor, text, textColor, left, top, angle, scaleX, scaleY, zoomX, zoomY, textBasicInfo, width, height } = textInfo;\r\n\t\tconst { isBack, colorName, colorValue } = textBasicInfo;\r\n\t\tconst fillColor = text === '请输入文案' && textColor === 'rgba(0, 0, 0, 0)' ? 'rgba(255, 255, 255, 1)' : textColor;\r\n\t\tsetBgColor(bgColor);\r\n\t\tsetTextColor(fillColor);\r\n\t\tsetTextContent(text);\r\n\t\tsetTextBasicInfo(textBasicInfo);\r\n\t\tsetTextPos({ left, top, angle, scaleX, scaleY, zoomX, zoomY, width, height });\r\n\t\tconst { current } = colorSelectorRef;\r\n\t\tif (!current) return;\r\n\t\tcurrent.setIsSetBack(isBack);\r\n\t\tcurrent.setCurrentColorItem({ colorName, colorValue });\r\n\t};\r\n\r\n\tconst resetInfo = () => {\r\n\t\t//文字编辑缺省设置\r\n\t\tsetBgColor(\"transparent\");\r\n\t\tsetTextColor(\"rgb(248,82,81)\");\r\n\t\tsetTextContent(\"\");\r\n\t\tsetTextPos({ left: 0, top: 0, angle: 0, scaleX: 0.75, scaleY: 0.75, zoomX: 0, zoomY: 0 });\r\n\t};\r\n\tconst close = () => {\r\n\t\ttextClose(textInfo.id);\r\n\t};\r\n\tconst renderText = (input_content?: string) => {\r\n\t\tconst { current } = mappingarea;\r\n\t\tif (current) {\r\n\t\t\t//获取映射区域的宽高传入画布,作为fabric文字的宽高\r\n\t\t\t//获取计算属性\r\n\t\t\t//在close时需要使用传入的textpos\r\n\t\t\tconst computedStyle = window.getComputedStyle(current);\r\n\t\t\tconst { width, height } = computedStyle;\r\n\t\t\tsetTextPos(\r\n\t\t\t\tObject.assign(textPos, { width: Number(width.split(\"px\")[0]), height: Number(height.split(\"px\")[0]) }),\r\n\t\t\t);\r\n\t\t}\r\n\t\t//判断是否空字符串,并且不全是空格\r\n\t\tif (input_content && input_content.trim() !== \"\") {\r\n\t\t\tconst { id, fontFamily, fontAssetUrl } = textInfo;\r\n\t\t\t//传递给父组件文字属性\r\n\t\t\t//input_content带有换行符,所以不能用textContent传到player\r\n\t\t\tcreateText({ textContent: input_content, bgColor, textColor, position: textPos, textBasicInfo, id, fontFamily, fontAssetUrl });\r\n\t\t} else {\r\n\t\t\ttextClose(textInfo.id);\r\n\t\t}\r\n\t};\r\n\tuseImperativeHandle(ref, () => ({\r\n\t\tsetText,\r\n\t\tclose,\r\n\t\thandleSubmit\r\n\t}));\r\n\r\n\treturn (\r\n\t\t<form method=\"post\" onSubmit={handleSubmit} ref={formRef}>\r\n\t\t\t<div className=\"overlay\">\r\n\t\t\t\t{/* 顶部 */}\r\n\t\t\t\t{\r\n\t\t\t\t\tshowTextButtons && (\r\n\t\t\t\t\t\t<div className=\"text-header\" ref={headerRef}>\r\n\t\t\t\t\t\t\t<div onClick={() => close()} className=\"close\">\r\n\t\t\t\t\t\t\t\t<img crossOrigin=\"anonymous\" src={closeIcon} alt=\"close\" />\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<button type=\"submit\" className=\"next-button\">\r\n\t\t\t\t\t\t\t\t完成\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\t{\r\n\t\t\t\t\t!isIOS() && (\r\n\t\t\t\t\t\t<div className=\"edit_container\" style={{\r\n\t\t\t\t\t\t\twidth: '100%', position: 'relative', paddingLeft: '4.4vw',\r\n\t\t\t\t\t\t\tpaddingRight: '3.2vw', display: 'flex'\r\n\t\t\t\t\t\t}}>\r\n\t\t\t\t\t\t\t{/* 编辑区 */}\r\n\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\tref={textareaRef}\r\n\t\t\t\t\t\t\t\tcols={20}\r\n\t\t\t\t\t\t\t\twrap=\"hard\"\r\n\t\t\t\t\t\t\t\tname=\"input_content\"\r\n\t\t\t\t\t\t\t\tclassName=\"text-input\"\r\n\t\t\t\t\t\t\t\tvalue={textContent}\r\n\t\t\t\t\t\t\t\tonChange={handleOnChange}\r\n\t\t\t\t\t\t\t\tstyle={{ color: textColor, width: '94%', fontFamily: textInfo.fontFamily }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{/* 映射颜色区域 */}\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName=\"mappingarea\"\r\n\t\t\t\t\t\t\t\tref={mappingarea}\r\n\t\t\t\t\t\t\t\tcontentEditable\r\n\t\t\t\t\t\t\t\tsuppressContentEditableWarning\r\n\t\t\t\t\t\t\t\tstyle={{\r\n\t\t\t\t\t\t\t\t\tbackground: bgColor, position: 'absolute',\r\n\t\t\t\t\t\t\t\t\ttop: '0',\r\n\t\t\t\t\t\t\t\t\tzIndex: '-1',\r\n\t\t\t\t\t\t\t\t\tleft: '4.4vw',\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{/* 颜色适应每行方案 */}\r\n\t\t\t\t\t\t\t\t{textContentOnShow.map((text: string, index: number) => {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<span className=\"mappingarea_span\" key={index} style={{ maxWidth: '100%' }}>\r\n\t\t\t\t\t\t\t\t\t\t\t{text ? text : \" \"}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\t{\r\n\t\t\t\t\tisIOS() && (\r\n\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t{/* 编辑区 */}\r\n\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\tref={textareaRef}\r\n\t\t\t\t\t\t\t\tcols={20}\r\n\t\t\t\t\t\t\t\twrap=\"hard\"\r\n\t\t\t\t\t\t\t\tname=\"input_content\"\r\n\t\t\t\t\t\t\t\tclassName=\"text-input\"\r\n\t\t\t\t\t\t\t\tvalue={textContent}\r\n\t\t\t\t\t\t\t\tonChange={handleOnChange}\r\n\t\t\t\t\t\t\t\tstyle={{ color: textColor, fontFamily: textInfo.fontFamily }}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{/* 映射颜色区域 */}\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclassName=\"mappingarea\"\r\n\t\t\t\t\t\t\t\tref={mappingarea}\r\n\t\t\t\t\t\t\t\tcontentEditable\r\n\t\t\t\t\t\t\t\tsuppressContentEditableWarning\r\n\t\t\t\t\t\t\t\tstyle={{ background: bgColor }}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{/* 颜色适应每行方案 */}\r\n\t\t\t\t\t\t\t\t{textContentOnShow.map((text: string, index: number) => {\r\n\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t<span className=\"mappingarea_span\" key={index}>\r\n\t\t\t\t\t\t\t\t\t\t\t{text ? text : \" \"}\r\n\t\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</>\r\n\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t\t{/* 颜色选择器 */}\r\n\t\t\t\t<div ref={coverRef} className=\"cover\">\r\n\t\t\t\t\t<ColorSelector\r\n\t\t\t\t\t\tref={colorSelectorRef}\r\n\t\t\t\t\t\tonColorChange={handleChangeColor}\r\n\t\t\t\t\t\tonBackGroundChange={onBackGroundChange}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t</form>\r\n\t);\r\n});\r\n\r\nexport default TextMenu;\r\n","import { useEffect, useState } from \"react\"\r\n\r\nconst VideoMenu = ({ createImage, videoMenus, menuState }: any) => {\r\n\r\n const [active, setActive] = useState<number>();\r\n const [menus, setMenus] = useState<any>([])\r\n const [items, setItems] = useState<any>([]);\r\n\r\n const onClickClass = ({ id, emojiList }: any) => {\r\n setActive(id);\r\n setItems(emojiList)\r\n }\r\n\r\n const onClickItem = ({ emojiId, fileUrl }: any) => {\r\n if (menuState === \"video\") {\r\n createImage(fileUrl, emojiId);\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n setMenus(videoMenus);\r\n if (videoMenus.length) {\r\n onClickClass(videoMenus[0]);\r\n }\r\n }, [videoMenus]);\r\n\r\n return (\r\n <div className={`editor-video-menu ${menuState === \"video\" ? \"active\" : \"\"}`}>\r\n <div className=\"editor-video-menu-header\">\r\n {\r\n menus.map((item: any) => (\r\n <div className={ active === item.id ? \"active\": \"\" } key={item.id} onClick={() => onClickClass(item)} >{item.classifyType}</div>\r\n ))\r\n }\r\n </div>\r\n <div className=\"editor-video-menu-itmes\">\r\n {\r\n items.map((item: any) => (\r\n <div key={item.emojiId} onClick={() => onClickItem(item)}>\r\n <img loading=\"lazy\" src={item.fileUrl.thumbnailUrl} alt=\"素材\" />\r\n </div>\r\n ))\r\n }\r\n </div>\r\n </div>\r\n )\r\n}\r\n\r\nexport default VideoMenu","import { VmmlPlayer } from \"@versa_ai/vmml-player\";\r\nimport { type MutableRefObject, forwardRef, useEffect, useRef, useState, useImperativeHandle, useMemo } from \"react\";\r\nimport type { AnyZodObject } from \"zod\";\r\nimport { getFrames, takeScreenshot, convertVmmlTextScaleByForbidden } from \"@versa_ai/vmml-utils\";\r\nimport \"./assets/css/index.scss\";\r\nimport Controls from \"./components/Controls\";\r\nimport EditorCanvas from \"./components/EditorCanvas\";\r\nimport Loaidng from \"./components/Loading\";\r\nimport MaxTextLayer from \"./components/MaxTextLayer\";\r\nimport TextMenu from \"./components/TextMenu\";\r\nimport VideoMenu from \"./components/VideoMenu\";\r\nimport HistoryClass from \"./utils/HistoryClass\";\r\nimport VmmlConverter from \"./utils/VmmlConverter\";\r\nimport { emotionIcon, wordIcon } from \"./utils/const\";\r\n\r\nconst historyClass = new HistoryClass();\r\nconst EditorFn = <Schema extends AnyZodObject, Props>(\r\n\t{\r\n\t\tvmml,\r\n\t\tpauseFrame = 0,\r\n\t\tmaxText = 10,\r\n\t\tmaxVideo = 5,\r\n\t\tvideoMenus = [],\r\n\t\tonMenuChange,\r\n\t\tshowTextButtons = false,\r\n\t\teditableArray = [],\r\n\t\ttemplateId,\r\n\t\tstrategyId,\r\n\t\theight = '100vh',\r\n\t\tpauseWhenBuffering = false,\r\n\t}: any,\r\n\tref: any,\r\n) => {\r\n\tvmml = convertVmmlTextScaleByForbidden(vmml);\r\n\tconst textMenuRef = useRef<any>(null);\r\n\tconst vmmlPlayerRef = useRef();\r\n\tconst canvasRef = useRef();\r\n\tconst fps = 30;\r\n\tconst once = useRef(false);\r\n\tconst [player, setPlayer] = useState<any>();\r\n\tconst [loading, setLoading] = useState<boolean>(true);\r\n\tconst [frame, setFrame] = useState<number>(pauseFrame);\r\n\tconst [isPlaying, setIsPlaying] = useState<boolean>(false);\r\n\tconst [showCanvas, setShowCanvas] = useState(false);\r\n const [filterIds, setFilterIds] = useState<string[]>([]);\r\n\tconst [durationInFrames, setDurationInFrames] = useState(getFrames(vmml?.template?.duration || 1, fps));\r\n\tconst [previewState, setPreviewState] = useState<boolean>(true); // true预览态 false编辑态\r\n\tconst [menuState, setMenuState] = useState<string>(\"\"); // text 文字菜单 video 表情包菜单 空不显示\r\n\tconst [canvasSize, setCanvasSize] = useState({ width: 0, height: 0, top: 0 }); // 画布尺寸\r\n\tconst [textInfo, setTextInfo] = useState({});\r\n\tconst [isShowMaxTextLayer, setIsShowMaxTextLayer] = useState(false);\r\n\tconst [buffering, setBuffering] = useState(false);\r\n\tconst videoList = useRef<any>([]);\r\n\tconst [signList, setSignList] = useState<any>([]);\r\n\tconst [tips, setTips] = useState(\"\");\r\n\tconst [dragState, setDragState] = useState(0);\r\n\tconst vmmlConverterRef = useRef<any>(null);\r\n\tconst [initFcObjs, setInitFcObjs] = useState([]);\r\n\tconst vmmlFlag = useRef(false);\r\n\tconst needPlay = useRef(true);\r\n\r\n\tconst setVmml = () => {\r\n\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\tif (!current) return;\r\n\t\tif (!once.current) {\r\n\t\t\tcurrent.setVmml(vmml, pauseFrame);\r\n\t\t} else {\r\n\t\t\tcurrent.setVmml(vmml, frame);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onPlayerReady = () => {\r\n\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\tvmmlFlag.current = false;\r\n\t\tif (current && current.playerRef) {\r\n\t\t\tsetPlayer(current.playerRef);\r\n\t\t\tcurrent.unmute();\r\n\t\t\tif (!once.current) {\r\n\t\t\t\tonce.current = true;\r\n\t\t\t} else {\r\n\t\t\t\tif (needPlay.current) {\r\n\t\t\t\t\tcurrent.play();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tneedPlay.current = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tsetShowCanvas(false);\r\n\t\tsetLoading(false);\r\n\t};\r\n\r\n\tconst onClickMain = () => {\r\n\t\tif (buffering) return\r\n\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\tif (current) {\r\n\t\t\tif (isPlaying) {\r\n\t\t\t\tintoEdit();\r\n\t\t\t} else {\r\n\t\t\t\tcurrent.unmute();\r\n\t\t\t\tcurrent.play();\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// 回到预览态\r\n\tconst enterPreview = (canvas: any, hiddenMenu: boolean = false) => {\r\n\t\tif (hiddenMenu) {\r\n\t\t\tsetMenuState(\"\");\r\n\t\t} else {\r\n\t\t\tsetMenuState(\"\");\r\n\t\t\tsetPreviewState(true);\r\n\t\t\thistoryClass.onCanvasRoute(canvas);\r\n\t\t}\r\n\t};\r\n\r\n\tconst onControlsClick = () => {\r\n\t\tif (previewState) {\r\n\t\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\t\tcurrent.unmute();\r\n\t\t\tcurrent.play();\r\n\t\t} else {\r\n\t\t\tsetMenuState(\"\");\r\n\t\t\tsetPreviewState(true);\r\n\t\t}\r\n\t}\r\n\r\n\t// 点击底部菜单\r\n\tconst onClickMenu = (type: string) => {\r\n\t\tif (type === \"text\" && checkTextNum()) return;\r\n\t\tif (type === \"video\" && checkVideoNum()) return;\r\n\t\tif (previewState) {\r\n\t\t\tintoEdit();\r\n\t\t}\r\n\t\tsetTextInfo({});\r\n\t\tsetMenuState(type);\r\n\t};\r\n\r\n\tconst checkTextNum = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tconst textNums = current.getfObjectNums(\"文字\");\r\n\t\t\tif (textNums >= maxText) {\r\n\t\t\t\tsetTips(`最多添加${maxText}个文字`);\r\n\t\t\t\tsetIsShowMaxTextLayer(true);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\t// 检查表情包数量\r\n\tconst checkVideoNum = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tconst videoNum = current.getfObjectNums(\"表情包\");\r\n\t\t\tif (videoNum >= maxVideo) {\r\n\t\t\t\tsetTips(`最多添加${maxVideo}个表情包`);\r\n\t\t\t\tsetIsShowMaxTextLayer(true);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t};\r\n\r\n\t// 获取画板素材实例\r\n\tconst getfcObject = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\treturn current.getfcObject();\r\n\t\t}\r\n\t\treturn []\r\n\t}\r\n\r\n\t// 暂停进入编辑\r\n\tconst intoEdit = (frame?: number) => {\r\n\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\tif (current) {\r\n\t\t\tframe && current.seekTo(frame);\r\n\t\t\tcurrent.pause();\r\n\t\t\tif (canvasRef.current) {\r\n\t\t\t\tconst { current: canvasC }: any = canvasRef;\r\n\t\t\t\tcanvasC.checkObjectInPoint(frame);\r\n\t\t\t}\r\n\t\t\tgetAllVideoFrames();\r\n\t\t\tsetShowCanvas(true);\r\n\t\t\tsetPreviewState(false);\r\n\t\t}\r\n\t};\r\n\r\n\t// 获取表情包当前帧截图\r\n\tconst getAllVideoFrames = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tconst doms = document.querySelectorAll(\"[data-clipid][data-cliptype=video][data-editorType],[data-editclip='true'][data-cliptype=video]\");\r\n\t\tfor (const item of Array.from(doms)) {\r\n\t\t\tconst id = item.getAttribute(\"data-clipid\");\r\n\t\t\tconst video = item.querySelector(\"video\");\r\n\t\t\tconst base64 = takeScreenshot(video);\r\n\t\t\tcurrent.updateImage(id, base64);\r\n\t\t}\r\n\t}\r\n\r\n\t// 新增表情包\r\n\tconst createImage = async (file: any, emojiId: string) => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current && !checkVideoNum()) {\r\n\t\t\tconst fObj = await current.createImage(file, emojiId);\r\n\t\t\tvmmlConverterRef.current.addVideoClip(fObj);\r\n\t\t\tsetMenuState(\"\");\r\n\t\t\tsetPreviewState(true);\r\n\t\t}\r\n\t};\r\n\r\n\tconst createText = async (data: any) => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tconst server = data.id ? 'updateText' : 'createText';\r\n\t\t\tawait current[server](data);\r\n\t\t\tsetMenuState(\"\");\r\n\t\t}\r\n\t};\r\n\r\n\tconst onVideoChange = (clipData: any) => {\r\n\t\tconst index = videoList.current.findIndex((item: any) => item.id === clipData.id);\r\n\t\tif (index > -1) {\r\n\t\t\tvideoList.current.splice(index, 1);\r\n\t\t} else {\r\n\t\t\tvideoList.current.push(clipData);\r\n\t\t}\r\n\t\tsetSignList([...videoList.current]);\r\n\t}\r\n\r\n\tconst handleUndo = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tcurrent.handleUndo();\r\n\t\t}\r\n\t};\r\n\tconst handleRedo = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tif (current) {\r\n\t\t\tcurrent.handleRedo();\r\n\t\t}\r\n\t};\r\n\r\n\tconst getActions = () => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\treturn current.getActions().length\r\n\t}\r\n\tconst textClose = (id: string) => {\r\n\t\tconst { current }: any = canvasRef;\r\n\t\tid && current.changeObjectVisible(id);\r\n\t\tsetMenuState(\"\");\r\n\t};\r\n\r\n\tconst intoTextEdit = (textInfo: any) => {\r\n\t\tsetMenuState(\"text\");\r\n\t\tsetTextInfo(textInfo);\r\n\t};\r\n\r\n\tconst onFrameUpdate = (e: any) => {\r\n\t\tsetFrame(e.detail.frame)\r\n\t};\r\n\tconst onPlay = () => {\r\n\t\tsetIsPlaying(true);\r\n\t};\r\n\tconst onPause = () => {\r\n\t\tsetIsPlaying(false);\r\n\t};\r\n\tconst onWaiting = () => {\r\n\t\tsetShowCanvas(false);\r\n\t\tsetPreviewState(true);\r\n\t\tsetBuffering(true);\r\n\t}\r\n\r\n\tconst onResume = () => {\r\n\t\tsetBuffering(false);\r\n\t}\r\n\r\n\t// 初始化可编辑的clip\r\n\tconst initCanEditClips = (tracks: any = []) => {\r\n\t\tif (editableArray.length) {\r\n\t\t\tconst list = findEditClips(tracks);\r\n\t\t\tif (list.length) {\r\n\t\t\t\tconst { current }: any = canvasRef;\r\n\t\t\t\tlist.forEach((clip: any) => {\r\n\t\t\t\t\tif (clip.videoClip) {\r\n\t\t\t\t\t\tcurrent.createImageFromClip(clip);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tcurrent.createTextFromClip(clip);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst findEditClips = (tracks: any = []) => {\r\n\t\tconst list: any = [];\r\n\t\ttracks.forEach((track: any) => {\r\n\t\t\ttrack.clips.forEach((clip: any) => {\r\n\t\t\t\tif (editableArray.includes(clip.id)) {\r\n\t\t\t\t\tclip.edit = true;\r\n\t\t\t\t\tlist.push(clip);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t});\r\n\t\treturn list\r\n\t}\r\n\r\n\t// 返序列化fc对象\r\n\tconst initFcObjects = (tracks: any = []) => {\r\n\t\tconst fcTracks = tracks.filter((item: any) => item.editorType);\r\n\t\tif (fcTracks.length) {\r\n\t\t\tconst clips = fcTracks.map((item: any) => item.clips).flat().filter((item: any) => Reflect.has(item, \"fObj\"));\r\n\t\t\tconst fObjs = clips.map((item: any) => item.fObj);\r\n\t\t\tsetInitFcObjs(fObjs);\r\n\t\t\t// 表情包标记\r\n\t\t\tfObjs.forEach((item: any) => {\r\n\t\t\t\tonVideoChange(item.clipData);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t// 获取更新后的vmml\r\n\tconst getVmml = () => {\r\n\t\ttry {\r\n\t\t\tconst tracks = vmml.template.tracks.filter((item: any) => item.editorType === \"文字\");\r\n\t\t\ttracks.forEach((track: any) => {\r\n\t\t\t\ttrack.clips.forEach((clip: any) => {\r\n\t\t\t\t\tclip.fObj.src = '';\r\n\t\t\t\t})\r\n\t\t\t})\r\n\t\t} catch {\r\n\t\t\tconsole.log(\"出错了\")\r\n\t\t}\r\n\t\treturn vmml\r\n\t};\r\n\r\n\tconst getPlayer = () => {\r\n\t\treturn player\r\n\t}\r\n\r\n\tuseEffect(() => {\r\n\t\tif (onMenuChange && typeof onMenuChange === \"function\") {\r\n\t\t\tonMenuChange(menuState);\r\n\t\t}\r\n\t}, [menuState]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (previewState && !vmmlFlag.current) {\r\n\t\t\tvmmlFlag.current = true;\r\n\t\t\tsetVmml();\r\n\t\t}\r\n\t}, [previewState]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (canvasSize.width && canvasSize.height && !vmmlConverterRef.current && vmml) {\r\n\t\t\tvmmlConverterRef.current = new VmmlConverter({ vmml, canvasSize });\r\n\t\t}\r\n\t\tif (canvasSize.width) {\r\n\t\t\tinitCanEditClips(vmml.template.tracks);\r\n\t\t}\r\n\t}, [canvasSize, vmml]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (vmml) {\r\n\t\t\tinitFcObjects(vmml.template.tracks);\r\n\t\t}\r\n\t}, [vmml]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (player) {\r\n\t\t\tconst parent = player.getContainerNode();\r\n\t\t\tif (!canvasSize.width) {\r\n\t\t\t\tconst playerElement = parent?.children[0];\r\n\t\t\t\tconst { width, height } = playerElement?.getBoundingClientRect() || {};\r\n\t\t\t\tsetCanvasSize({ width, height, top: playerElement.offsetTop });\r\n\t\t\t}\r\n\t\t\tplayer.addEventListener(\"play\", onPlay);\r\n\t\t\tplayer.addEventListener(\"pause\", onPause);\r\n\t\t\tplayer.addEventListener(\"frameupdate\", onFrameUpdate);\r\n\t\t\tplayer.addEventListener(\"waiting\", onWaiting);\r\n\t\t\tplayer.addEventListener(\"resume\", onResume);\r\n\t\t\treturn () => {\r\n\t\t\t\tplayer.removeEventListener(\"play\", onPlay);\r\n\t\t\t\tplayer.removeEventListener(\"pause\", onPause);\r\n\t\t\t\tplayer.removeEventListener(\"frameupdate\", onFrameUpdate);\r\n\t\t\t\tplayer.removeEventListener(\"waiting\", onWaiting);\r\n\t\t\t\tplayer.removeEventListener(\"resume\", onResume);\r\n\t\t\t}\r\n\t\t}\r\n\t}, [player]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (showCanvas) {\r\n\t\t\tconst ids = [...signList.map((item: any) => item.id),...editableArray];\r\n setFilterIds(ids);\r\n } else {\r\n setFilterIds([]);\r\n }\r\n\t}, [showCanvas, signList])\r\n\r\n\tuseEffect(() => {\r\n\t\tif (dragState === 2) {\r\n\t\t\tneedPlay.current = false;\r\n\t\t\tconst { current }: any = vmmlPlayerRef;\r\n\t\t\tcurrent.setVmml(vmml, frame, false);\r\n\t\t\tsetShowCanvas(false);\r\n\t\t}\r\n\t\tif (dragState === 3 || dragState === 4) {\r\n\t\t\tsetShowCanvas(true);\r\n\t\t\tsetPreviewState(false);\r\n\t\t}\r\n\t}, [dragState]);\r\n\r\n\tuseImperativeHandle(ref,\r\n\t\t() => ({\r\n\t\t\tgetActions,\r\n\t\t\tgetfcObject,\r\n\t\t\tgetVmml,\r\n\t\t\tgetPlayer,\r\n\t\t\ttexteditClose,\r\n\t\t\ttextFinish\r\n\t\t}),\r\n\t\t[vmml, player]\r\n\t)\r\n\tconst texteditClose = ()=>{\r\n\t\tif (textMenuRef) {\r\n\t\t\ttextMenuRef.current.close();\r\n\t\t}\r\n\t}\r\n\tconst textFinish = () =>{\r\n\t\tif (textMenuRef) {\r\n\t\t\ttextMenuRef.current.handleSubmit();\r\n\t\t}\r\n\t}\r\n\r\n\tconst menuStyles: any = useMemo(() => {\r\n\t\tif (loading) {\r\n\t\t\treturn {\r\n\t\t\t\topacity: 0.4,\r\n\t\t\t\tpointerEvents: 'none'\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn {}\r\n\t}, [loading])\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t<div className=\"editor\" style={{ height }}>\r\n\t\t\t\t<div className=\"editor-vessel\" onClick={() => {\r\n\t\t\t\t\tsetMenuState(\"\")\r\n\t\t\t\t}}>\r\n\t\t\t\t\t<section className={`main ${menuState === 'text' ? 'text-style' : ''}`}>\r\n\t\t\t\t\t\t<div className=\"vessel\" onClick={onClickMain}>\r\n\t\t\t\t\t\t\t<VmmlPlayer\r\n\t\t\t\t\t\t\t\tref={vmmlPlayerRef}\r\n\t\t\t\t\t\t\t\tvmml={vmml}\r\n\t\t\t\t\t\t\t\texistenceBorderRadio\r\n\t\t\t\t\t\t\t\tmoveToBeginningWhenEnded\r\n\t\t\t\t\t\t\t\tmuted={true}\r\n\t\t\t\t\t\t\t\tfps={fps}\r\n\t\t\t\t\t\t\t\tonPlayerReady={onPlayerReady}\r\n\t\t\t\t\t\t\t\t// editableArray={editableArray}\r\n\t\t\t\t\t\t\t\tpremountFor={40}\r\n\t\t\t\t\t\t\t\tpauseWhenBuffering={pauseWhenBuffering}\r\n\t\t\t\t\t\t\t\tfilterIds={filterIds}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<EditorCanvas\r\n\t\t\t\t\t\t\tref={canvasRef}\r\n\t\t\t\t\t\t\tpreviewState={previewState}\r\n\t\t\t\t\t\t\tshowCanvas={showCanvas}\r\n\t\t\t\t\t\t\tcanvasSize={canvasSize}\r\n\t\t\t\t\t\t\tenterPreview={enterPreview}\r\n\t\t\t\t\t\t\tintoTextEdit={intoTextEdit}\r\n\t\t\t\t\t\t\tframe={frame}\r\n\t\t\t\t\t\t\tvmml={vmml}\r\n\t\t\t\t\t\t\tdragState={dragState}\r\n\t\t\t\t\t\t\tinitFcObjs={initFcObjs}\r\n\t\t\t\t\t\t\tonVideoChange={onVideoChange}\r\n\t\t\t\t\t\t\t// textInfoReset={textInfoReset}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<div className=\"controls-box\">\r\n\t\t\t\t\t\t\t<Controls\r\n\t\t\t\t\t\t\t\tplayer={player}\r\n\t\t\t\t\t\t\t\tvmmlRef={vmmlPlayerRef}\r\n\t\t\t\t\t\t\t\tfps={fps}\r\n\t\t\t\t\t\t\t\tdurationInFrames={durationInFrames}\r\n\t\t\t\t\t\t\t\tintoEdit={intoEdit}\r\n\t\t\t\t\t\t\t\tframe={frame}\r\n\t\t\t\t\t\t\t\tisPlaying={isPlaying}\r\n\t\t\t\t\t\t\t\tsetDragState={setDragState}\r\n\t\t\t\t\t\t\t\tonControlsClick={onControlsClick}\r\n\t\t\t\t\t\t\t\tsignList={signList}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<Loaidng show={loading} />\r\n\t\t\t\t\t</section>\r\n\t\t\t\t</div>\r\n\t\t\t\t<div className=\"padding-box\"></div>\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t(maxText > 0 || maxVideo > 0) && <section style={menuStyles} className={`footer ${menuState === 'text' ? 'text-style' : ''}`}>\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tmaxText > 0 && (\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => onClickMenu(\"text\")}\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-click=\"c375146.d480849\"\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-expo\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-param={`Template_Id=${templateId}^Strategy_Id=${strategyId}`}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<img src={wordIcon} alt=\"word\" />\r\n\t\t\t\t\t\t\t\t\t\t<p>文字</p>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tmaxVideo > 0 && (\r\n\t\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => onClickMenu(\"video\")}\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-click=\"c375146.d480850\"\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-expo\r\n\t\t\t\t\t\t\t\t\t\tdata-aspm-param={`Template_Id=${templateId}^Strategy_Id=${strategyId}`}\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<img src={emotionIcon} alt=\"emotion\" />\r\n\t\t\t\t\t\t\t\t\t\t<p>表情包</p>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t</section>\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tmaxVideo > 0 && (\r\n\t\t\t\t\t\t\t\t<VideoMenu menuState={menuState} createImage={createImage} videoMenus={videoMenus} />\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t{menuState === \"text\" && (\r\n\t\t\t\t\t\t<TextMenu ref={textMenuRef} createText={createText} textClose={textClose} textInfo={textInfo} showTextButtons={showTextButtons} />\r\n\t\t\t\t\t)}\r\n\t\t\t\t</div>\r\n\t\t\t<MaxTextLayer textLayerHide={() => setIsShowMaxTextLayer(false)} show={isShowMaxTextLayer} text={tips} />\r\n\t\t</>\r\n\t);\r\n};\r\n\r\nconst forward = forwardRef as <T, P = { [propName: string]: any }>(\r\n\trender: (props: P, PlayerRef: React.MutableRefObject<T>) => React.ReactElement | null,\r\n) => (props: P & React.RefAttributes<T>) => React.ReactElement | null;\r\n\r\nexport const Editor = forward(EditorFn);\r\n"]}
|