@versa_ai/vmml-editor 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/.turbo/turbo-build.log +335 -0
  2. package/CHANGELOG.md +16 -0
  3. package/README.md +1 -0
  4. package/biome.json +7 -0
  5. package/dist/index.d.mts +5 -0
  6. package/dist/index.d.ts +5 -0
  7. package/dist/index.js +2675 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/index.mjs +2673 -0
  10. package/dist/index.mjs.map +1 -0
  11. package/package.json +48 -0
  12. package/postcss.config.js +3 -0
  13. package/src/assets/css/closeLayer.scss +50 -0
  14. package/src/assets/css/colorSelector.scss +59 -0
  15. package/src/assets/css/editorTextMenu.less +130 -0
  16. package/src/assets/css/editorTextMenu.scss +149 -0
  17. package/src/assets/css/index.scss +252 -0
  18. package/src/assets/css/loading.scss +31 -0
  19. package/src/assets/css/maxTextLayer.scss +31 -0
  20. package/src/assets/img/icon_Brush.png +0 -0
  21. package/src/assets/img/icon_Change.png +0 -0
  22. package/src/assets/img/icon_Cut.png +0 -0
  23. package/src/assets/img/icon_Face.png +0 -0
  24. package/src/assets/img/icon_Graffiti.png +0 -0
  25. package/src/assets/img/icon_Mute.png +0 -0
  26. package/src/assets/img/icon_Refresh.png +0 -0
  27. package/src/assets/img/icon_Text1.png +0 -0
  28. package/src/assets/img/icon_Text2.png +0 -0
  29. package/src/assets/img/icon_Volume.png +0 -0
  30. package/src/assets/img/icon_Word.png +0 -0
  31. package/src/components/CloseLayer.tsx +25 -0
  32. package/src/components/ColorSelector.tsx +90 -0
  33. package/src/components/Controls.tsx +32 -0
  34. package/src/components/EditorCanvas.tsx +566 -0
  35. package/src/components/Loading.tsx +16 -0
  36. package/src/components/MaxTextLayer.tsx +27 -0
  37. package/src/components/SeekBar.tsx +126 -0
  38. package/src/components/TextMenu.tsx +332 -0
  39. package/src/components/VideoMenu.tsx +49 -0
  40. package/src/index.tsx +551 -0
  41. package/src/utils/HistoryClass.ts +131 -0
  42. package/src/utils/VmmlConverter.ts +339 -0
  43. package/src/utils/const.ts +10 -0
  44. package/src/utils/keyBoardUtils.ts +199 -0
  45. package/src/utils/usePeekControl.ts +242 -0
  46. package/tsconfig.json +5 -0
  47. package/tsup.config.ts +14 -0
@@ -0,0 +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","VmmlPlayer"],"mappings":";;;;;;;;;;;;;;AAAA,IAAM,GAAM,GAAA,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 min-height: 100vh;\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 padding-top: 3.2vw;\n}\n.editor .main {\n width: 81.467vw;\n height: 144.8vw;\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/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXHByb2plY3RzXFx2bW1sLXBsYXllclxccGFja2FnZXNcXGVkaXRvclxcc3JjXFxhc3NldHNcXGNzcyIsInNvdXJjZXMiOlsiaW5kZXguc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUdKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUVGO0VBQ0U7O0FBR0o7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdKO0VBQ0U7O0FBR0Y7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0U7O0FBR0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHSjtFQUNFO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUtSO0VBQ0U7RUFDQTs7QUFHSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7O0FBR0o7RUFDRTs7QUFLSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFLTjtFQUNFOztBQUdGO0VBQ0U7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTs7QUFFRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0U7O0FBRUY7RUFDRTtFQUNBOztBQUVGO0VBQ0U7O0FBR0o7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5lZGl0b3J7XHJcbiAgYmFja2dyb3VuZDogIzAwMDtcclxuICB3aWR0aDogMTAwJTtcclxuICBtaW4taGVpZ2h0OiAxMDB2aDtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAucGFkZGluZy1ib3gge1xyXG4gICAgZmxleDogMTtcclxuICB9XHJcbiAgLy8g6aG26YOoXHJcbiAgJj4uaGVhZGVye1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDogMTEuNDY3dnc7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDQuNHZ3O1xyXG4gICAgcGFkZGluZy1yaWdodDogMy4ydnc7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgJj4uY2xvc2V7XHJcbiAgICAgIHdpZHRoOiA0dnc7XHJcbiAgICAgIGhlaWdodDogNHZ3O1xyXG4gICAgICBpbWd7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAmPi5oaXN0b3J5LW9wZXJhdGV7XHJcbiAgICAgIGhlaWdodDogNy4ydnc7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgbGVmdDogNTAlO1xyXG4gICAgICB0b3A6IDUwJTtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwtNTAlKTtcclxuICAgICAgaW1ne1xyXG4gICAgICAgIHdpZHRoOiA0LjY2N3Z3O1xyXG4gICAgICAgIGhlaWdodDogNS4wNjd2dztcclxuICAgICAgfVxyXG4gICAgICAmPmltZzpsYXN0LWNoaWxke1xyXG4gICAgICAgIG1hcmdpbi1sZWZ0OiA4dnc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICY+Lm5leHQtYnV0dG9ue1xyXG4gICAgICB3aWR0aDogMTZ2dztcclxuICAgICAgaGVpZ2h0OiA3LjJ2dztcclxuICAgICAgbGluZS1oZWlnaHQ6IDcuMnZ3O1xyXG4gICAgICBiYWNrZ3JvdW5kOiAjMTY3N0ZGO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA2LjUzM3Z3O1xyXG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIGZvbnQtc2l6ZTogMy4ydnc7XHJcbiAgICAgIGNvbG9yOiAjZmZmO1xyXG4gICAgfVxyXG4gIH1cclxuICAudGV4dC1zdHlsZXtcclxuICAgIGZpbHRlcjpibHVyKDEwcHgpXHJcbiAgfVxyXG5cclxuICAuZWRpdG9yLXZlc3NlbCB7XHJcbiAgICBwYWRkaW5nLXRvcDogMy4ydnc7XHJcbiAgfVxyXG4gIC8vcGxheWVy5LiO55S75biDXHJcbiAgLm1haW57XHJcbiAgICB3aWR0aDogODEuNDY3dnc7XHJcbiAgICBoZWlnaHQ6IDE0NC44dnc7XHJcbiAgICBtYXJnaW46IGF1dG87XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICBib3JkZXItcmFkaXVzOiAzLjJ2dztcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAudmVzc2VsIHtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTAwJTtcclxuICAgIH1cclxuICAgIC5jb250cm9scy1ib3gge1xyXG4gICAgICBoZWlnaHQ6IDEydnc7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgYm90dG9tOiAwO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgYm9yZGVyLXJhZGl1czogMy4ydnc7XHJcbiAgICB9XHJcbiAgICAucGxheWVyLWNvbnRyb2xzIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgcGFkZGluZzogMCAyLjEzdnc7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCggMTgwZGVnLCByZ2JhKDAsMCwwLDApIDAlLCByZ2JhKDAsMCwwLDAuNikgMTAwJSk7XHJcbiAgICAgIC5tci0xNiB7XHJcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAyLjEzdnc7XHJcbiAgICAgIH1cclxuICAgICAgLnBsYXllci1jb250cm9scy10b2dnbGUge1xyXG4gICAgICAgID5pbWcge1xyXG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XHJcbiAgICAgICAgICB3aWR0aDogNC44dnc7XHJcbiAgICAgICAgICBoZWlnaHQ6IDQuOHZ3O1xyXG4gICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAucGxheWVyLWNvbnRyb2xzLXNlZWtiYXIge1xyXG4gICAgICAgIGZsZXg6IDE7XHJcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xyXG4gICAgICAgIC5zZWVrYmFyLWNvbnRhaW5lciB7XHJcbiAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcclxuICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAuc2Vla2Jhci1iYWNrZ3JvdW5kIHtcclxuICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICAgIGhlaWdodDogMS42dnc7XHJcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XHJcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDF2dztcclxuICAgICAgICAgICAgLnNlZWtiYXItZmlsbCB7XHJcbiAgICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxdnc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLnNlZWtiYXItbGluZSB7XHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDF2dztcclxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5zZWVrYmFyLXNpZ24ge1xyXG4gICAgICAgICAgICAgIHdpZHRoOiAxMHB4O1xyXG4gICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgICAgICAgICB0b3A6IDUwJTtcclxuICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAtNnB4O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC5zZWVrYmFyLWNpcmxlIHtcclxuICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgICAgICAgICAgICAgdG9wOiAtMC44dnc7XHJcbiAgICAgICAgICAgICAgd2lkdGg6IDMuMnZ3O1xyXG4gICAgICAgICAgICAgIGhlaWdodDogMy4ydnc7XHJcbiAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6ICNlZWVlZWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLnBsYXllci1jb250cm9scy10aW1lIHtcclxuICAgICAgICB3aWR0aDogMTB2dztcclxuICAgICAgICBjb2xvcjogI2ZmZjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLnBsYXktYnRuIHtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBib3R0b206IDR2dztcclxuICAgICAgbGVmdDogM3Z3O1xyXG4gICAgICB3aWR0aDogNC44dnc7XHJcbiAgICAgIGhlaWdodDogNC44dnc7XHJcbiAgICAgIGltZyB7XHJcbiAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAub3BhY2l0eS0wNiB7XHJcbiAgICAgIG9wYWNpdHk6IDAuNjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8v5bqV6YOoXHJcbiAgLmZvb3RlcntcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIHBhZGRpbmc6IDAgMjAuMzMzdncgMTAuOTMzdnc7XHJcbiAgICAmPmRpdntcclxuICAgICAgd2lkdGg6IDMwJTtcclxuICAgICAgbWFyZ2luOiAwIDE1JTtcclxuICAgICAgaW1ne1xyXG4gICAgICAgIHdpZHRoOiA2LjR2dztcclxuICAgICAgICBoZWlnaHQ6IDYuNHZ3O1xyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xyXG4gICAgICAgIG1hcmdpbjogYXV0bztcclxuICAgICAgfVxyXG4gICAgICBwe1xyXG4gICAgICAgIGZvbnQtc2l6ZTogMy4ydnc7XHJcbiAgICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgICAgbWFyZ2luLXRvcDogMS44Njd2dztcclxuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5ub3Qtc2hvdy10ZXh0e1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XHJcbiAgfVxyXG5cclxuICAuZWRpdG9yLXZpZGVvLW1lbnUge1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgLy8gaGVpZ2h0OiAzOC4xM3ZoO1xyXG4gICAgaGVpZ2h0OiAwO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBiYWNrZ3JvdW5kOiAjMUUxRTFFO1xyXG4gICAgYm90dG9tOiAwO1xyXG4gICAgYm9yZGVyLXJhZGl1czogOHB4IDhweCAwIDA7XHJcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlLWluLW91dDsgIFxyXG4gICAgJi5hY3RpdmUge1xyXG4gICAgICBoZWlnaHQ6IDM4LjEzdmg7XHJcbiAgICB9XHJcbiAgICAuZWRpdG9yLXZpZGVvLW1lbnUtaGVhZGVyIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgcGFkZGluZzogMS42dncgMS42dncgMDtcclxuICAgICAgaGVpZ2h0OiA0Ljgxdmg7XHJcbiAgICAgIGxpbmUtaGVpZ2h0OiA0Ljgxdmg7XHJcbiAgICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDApO1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICBvdmVyZmxvdy14OiBhdXRvO1xyXG4gICAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7XHJcbiAgICAgICAgZGlzcGxheTogbm9uZTsgLyog6ZqQ6JeP5rua5Yqo5p2hICovXHJcbiAgICAgIH1cclxuICAgICAgPmRpdiB7XHJcbiAgICAgICAgbWFyZ2luOiAwIDMuMnZ3O1xyXG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XHJcbiAgICAgIH1cclxuICAgICAgLmFjdGl2ZSB7XHJcbiAgICAgICAgY29sb3I6ICNGRkZGRkY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5lZGl0b3ItdmlkZW8tbWVudS1pdG1lcyB7XHJcbiAgICAgIHBhZGRpbmc6IDAgMy4zM3Z3O1xyXG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA0LjgxdmggLSAxLjZ2dyk7XHJcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XHJcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIDFmcik7XHJcbiAgICAgIHJvdy1nYXA6IDMuMnZ3O1xyXG4gICAgICBjb2x1bW4tZ2FwOiAyLjZ2dztcclxuICAgICAgb3ZlcmZsb3c6IGF1dG87XHJcbiAgICAgID5kaXYge1xyXG4gICAgICAgIHdpZHRoOiAyMS4zM3Z3O1xyXG4gICAgICAgIGhlaWdodDogMjEuMzN2dztcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWUxZTFlO1xyXG4gICAgICAgIGltZyB7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iXX0= */`;\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\tconsole.log(\"history init\");\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\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\t\t\r\n\t\tconst embedFontInSVG = async (svgString: string, url: string) => {\r\n\t\t\tif (url) {\r\n\t\t\t\tconst res = await urlToBlob({ url });\r\n\t\t\t\tconst fontFace = `\r\n\t\t\t\t\t@font-face {\r\n\t\t\t\t\t\tfont-family: 'font-${url}';\r\n\t\t\t\t\t\tsrc: url(${res});\r\n\t\t\t\t\t}\r\n\t\t\t\t`;\r\n\t\t\t\tconst styleElement = `<style type=\"text/css\"><![CDATA[${fontFace}]]></style>`;\r\n\t\t\t\treturn svgString.replace('</svg>', `${styleElement}</svg>`);\r\n\t\t\t}\r\n\t\t\treturn svgString\r\n\t\t}\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\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 = font\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXHByb2plY3RzXFx2bW1sLXBsYXllclxccGFja2FnZXNcXGVkaXRvclxcc3JjXFxhc3NldHNcXGNzcyIsInNvdXJjZXMiOlsibG9hZGluZy5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUNBO0VBQ0U7RUFDQTtFQUNBO0VBT0E7RUFDQTs7O0FBSUo7RUFDRTtJQUNFIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbi5wYWdlLWxvYWRlciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogMDtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IDEwMCU7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIHotaW5kZXg6IDEwMDtcclxuICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIC5saWdodCB7XHJcbiAgICB3aWR0aDogNzUlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLFxyXG4gICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCksXHJcbiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSxcclxuICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyksXHJcbiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSxcclxuICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMCksXHJcbiAgICAgICk7XHJcbiAgICB0cmFuc2Zvcm06IHNrZXcoLTQ1ZGVnKSB0cmFuc2xhdGVYKC00MDAlKTtcclxuICAgIGFuaW1hdGlvbjogYW5pbWF0ZV9saWdodCAxcyBpbmZpbml0ZTtcclxuICB9XHJcbn1cclxuXHJcbkBrZXlmcmFtZXMgYW5pbWF0ZV9saWdodCB7XHJcbiAgMTAwJSB7XHJcbiAgICB0cmFuc2Zvcm06IHNrZXcoLTQ1ZGVnKSB0cmFuc2xhdGVYKDIwMCUpO1xyXG4gIH1cclxufSJdfQ== */`;\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXHByb2plY3RzXFx2bW1sLXBsYXllclxccGFja2FnZXNcXGVkaXRvclxcc3JjXFxhc3NldHNcXGNzcyIsInNvdXJjZXMiOlsibWF4VGV4dExheWVyLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIiR2bV9iYXNlOiA3NTA7XHJcblxyXG5AZnVuY3Rpb24gdm0oJHB4KSB7XHJcblxyXG4gICAgQHJldHVybiAoJHB4IC8gNzUwKSAqIDEwMHZ3O1xyXG5cclxufVxyXG5cclxuLmNvbnRhaW5lcntcclxuICB3aWR0aDogMTAwdnc7XHJcbiAgaGVpZ2h0OiAxMDB2aDtcclxuICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgbGVmdDogMDtcclxuICB0b3A6IDA7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICAubWFpbl90ZXh0e1xyXG4gICAgYmFja2dyb3VuZDogIzAwMDAwMDtcclxuICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7XHJcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNDBweCk7XHJcbiAgICBwYWRkaW5nOiB2bSgyNCk7XHJcbiAgICBmb250LXdlaWdodDogNDAwO1xyXG4gICAgZm9udC1zaXplOiB2bSgzMCk7XHJcbiAgICBjb2xvcjogI0ZGRkZGRjtcclxuICAgIGxpbmUtaGVpZ2h0OiB2bSg0Mik7XHJcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcclxuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcclxuICB9XHJcbn0iXX0= */`;\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 -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\n transition: all 0.1s;\n}\n.overlay .text-input::-webkit-scrollbar, .overlay .mappingarea::-webkit-scrollbar {\n display: none;\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXHByb2plY3RzXFx2bW1sLXBsYXllclxccGFja2FnZXNcXGVkaXRvclxcc3JjXFxhc3NldHNcXGNzcyIsInNvdXJjZXMiOlsiZWRpdG9yVGV4dE1lbnUuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBT0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFHQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTs7QUFHRjtFQUNFOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBRUU7RUFDQTtFQUVBO0FBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFLQTtFQUNBO0VBQ0E7O0FBTEE7RUFDRTs7QUFNSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBQ0E7RUFDRTtFQUNBO0VBQ0E7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIiR2bV9iYXNlOiA3NTA7XHJcblxyXG5AZnVuY3Rpb24gdm0oJHB4KSB7XHJcblxyXG4gICAgQHJldHVybiAoJHB4IC8gNzUwKSAqIDEwMHZ3O1xyXG5cclxufVxyXG4ub3ZlcmxheSB7XHJcbiAgcG9zaXRpb246IGZpeGVkO1xyXG4gIHRvcDogMDtcclxuICBsZWZ0OiAwO1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogMTAwJTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XHJcbiAgLy8gYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xyXG4gIC8vIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICBjb2xvcjogd2hpdGU7XHJcbiAgZm9udC1zaXplOiAyNHB4O1xyXG4gIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgLy8g6aG26YOoXHJcbiAgJj4udGV4dC1oZWFkZXIge1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxuICAgIGhlaWdodDogMTEuNDY3dnc7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IDQuNHZ3O1xyXG4gICAgcGFkZGluZy1yaWdodDogMy4ydnc7XHJcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMDFzO1xyXG4gICAgei1pbmRleDoxNjtcclxuICAgICY+LmNsb3NlIHtcclxuICAgICAgd2lkdGg6IHZtKDM4KTtcclxuICAgICAgaGVpZ2h0OiB2bSgzOCk7XHJcblxyXG4gICAgICBpbWcge1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICY+Lmhpc3Rvcnktb3BlcmF0ZSB7XHJcbiAgICAgIGhlaWdodDogNy4ydnc7XHJcbiAgICAgIGRpc3BsYXk6IG5vbmU7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgICAgbGVmdDogNTAlO1xyXG4gICAgICB0b3A6IDUwJTtcclxuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcblxyXG4gICAgICBpbWcge1xyXG4gICAgICAgIHdpZHRoOiA0LjY2N3Z3O1xyXG4gICAgICAgIGhlaWdodDogNS4wNjd2dztcclxuICAgICAgfVxyXG5cclxuICAgICAgJj5pbWc6bGFzdC1jaGlsZCB7XHJcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDh2dztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICY+Lm5leHQtYnV0dG9uIHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgIHdpZHRoOiAxNnZ3O1xyXG4gICAgICBoZWlnaHQ6IDcuMnZ3O1xyXG4gICAgICBsaW5lLWhlaWdodDogNy4ydnc7XHJcbiAgICAgIGJhY2tncm91bmQ6ICMxNjc3RkY7XHJcbiAgICAgIGJvcmRlci1yYWRpdXM6IDYuNTMzdnc7XHJcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuICAgICAgZm9udC1zaXplOiAzLjJ2dztcclxuICAgICAgY29sb3I6ICNmZmY7XHJcbiAgICAgIGJvcmRlcjogMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC5jb3ZlciB7XHJcbiAgICBwb3NpdGlvbjogZml4ZWQ7XHJcbiAgICBib3R0b206IHZtKDYwKTtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OnZtKDgwKTtcclxuICAgIHotaW5kZXg6IDk5OTtcclxuICAgIHRyYW5zaXRpb246IGFsbCAwLjFzO1xyXG4gIH1cclxuXHJcbiAgLnRleHQtaW5wdXQsLm1hcHBpbmdhcmVhe1xyXG4gICAgLy8gZm9udC1mYW1pbHk6O1xyXG4gICAgZm9udC1mYW1pbHk6IFBpbmdGYW5nU0MsIFBpbmdGYW5nIFNDO1xyXG4gICAgYm9yZGVyOiBub25lO1xyXG4gICAgLy8gZm9udC13ZWlnaHQ6IDYwMDtcclxuICAgIGZvbnQtc2l6ZTogMjJweDtcclxuICAgIC8qIOWPlua2iOWklui+ueahhiAqL1xyXG4gICAgb3V0bGluZTogbm9uZTtcclxuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCk7XHJcbiAgICBsaW5lLWhlaWdodDogMzBweDtcclxuICAgIC8vIOmakOiXj+a7muWKqOadoe+8jOS9huS7jeeEtuS/neaMgea7muWKqOWKn+iDvVxyXG4gICAgJjo6LXdlYmtpdC1zY3JvbGxiYXIgeyBcclxuICAgICAgZGlzcGxheTogbm9uZTsgXHJcbiAgICB9XHJcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7ICAvKiBJRSBhbmQgRWRnZSAqL1xyXG4gICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOyAgLyogRmlyZWZveCAqL1xyXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMXM7XHJcbiAgfVxyXG4gIC50ZXh0LWlucHV0e1xyXG4gICAgcGFkZGluZy10b3A6IHZtKDgpO1xyXG4gICAgcGFkZGluZy1ib3R0b206IHZtKDgpO1xyXG4gICAgcGFkZGluZy1sZWZ0OiB2bSgxMik7XHJcbiAgICBwYWRkaW5nLXJpZ2h0OiB2bSgxMCk7XHJcbiAgICB6LWluZGV4OiAxMDtcclxuICAgIHdpZHRoOiA4NHZ3O1xyXG4gICAgY2FyZXQtY29sb3I6ICMxNjc3RkZGRjtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMzAlO1xyXG4gICAgbGVmdDogNSU7XHJcbiAgICBoZWlnaHQ6IDIwMHB4O1xyXG4gICAgd29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgLy8gcGFkZGluZzogdm0oMTgpO1xyXG4gIH1cclxuICAubWFwcGluZ2FyZWF7XHJcbiAgICBwYWRkaW5nLXRvcDogdm0oOCk7XHJcbiAgICBwYWRkaW5nLWJvdHRvbTogdm0oOCk7XHJcbiAgICBwYWRkaW5nLWxlZnQ6IHZtKDEyKTtcclxuICAgIHBhZGRpbmctcmlnaHQ6IHZtKDEwKTtcclxuICAgIGJvcmRlci1yYWRpdXM6IHZtKDEwKTtcclxuICAgIGJvcmRlcjowO1xyXG4gICAgcG9zaXRpb246IGZpeGVkO1xyXG4gICAgdG9wOiAzMCU7XHJcbiAgICBsZWZ0OiA1JTtcclxuICAgIGhlaWdodDogZml0LWNvbnRlbnQ7XHJcbiAgICBtYXgtaGVpZ2h0OiAyMDBweDtcclxuICAgIGNvbG9yOiB0cmFuc3BhcmVudDsgLy/orr7nva7popzoibLpgI/mmI7vvIzkv53or4Hog4zmma/popzoibJcclxuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcclxuICAgIHotaW5kZXg6IDk7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgZmxleC1mbG93OiBjb2x1bW4gbm93cmFwO1xyXG4gICAgYm94LXNpemluZzogY29udGVudC1ib3g7XHJcbiAgICAubWFwcGluZ2FyZWFfc3BhbntcclxuICAgICAgZm9udC1zaXplOiAyMnB4O1xyXG4gICAgICBtYXgtd2lkdGg6IDg0dnc7XHJcbiAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcclxuICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xyXG4gICAgfVxyXG4gIH1cclxufSJdfQ== */`;\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 -ms-overflow-style: none; /* IE and Edge */\n scrollbar-width: none; /* Firefox */\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/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiRDpcXHByb2plY3RzXFx2bW1sLXBsYXllclxccGFja2FnZXNcXGVkaXRvclxcc3JjXFxhc3NldHNcXGNzcyIsInNvdXJjZXMiOlsiY29sb3JTZWxlY3Rvci5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFRQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFDQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBc0JBO0VBQ0E7O0FBdEJBO0VBQ0U7O0FBRUY7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVGO0VBQ0U7O0FBRUY7RUFFRTs7QUFHRjtFQUNJIiwic291cmNlc0NvbnRlbnQiOlsiJHZtX2Jhc2U6IDc1MDtcclxuXHJcbkBmdW5jdGlvbiB2bSgkcHgpIHtcclxuXHJcbiAgICBAcmV0dXJuICgkcHggLyA3NTApICogMTAwdnc7XHJcblxyXG59XHJcblxyXG4uY29sb3Itc2VsZWN0b3J7XHJcbiAgd2lkdGg6IDEwMCU7XHJcbiAgaGVpZ2h0OiAxMDAlO1xyXG4gIGRpc3BsYXk6IGZsZXg7XHJcbiAgZmxleC1mbG93OiByb3cgbm93cmFwO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgcGFkZGluZy1yaWdodDogdm0oMjApO1xyXG4gIC50ZXh0X2JnX2NoYW5nZXtcclxuICAgIHdpZHRoOiB2bSg0OCk7XHJcbiAgICBoZWlnaHQ6IHZtKDQ4KTtcclxuICAgIGZsZXg6IDAgMCBhdXRvO1xyXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gICAgbGluZS1oZWlnaHQ6IHZtKDQ4KTtcclxuICAgIHBhZGRpbmc6MCB2bSgzNik7XHJcbiAgICBtYXJnaW4tcmlnaHQ6IHZtKDMwKTtcclxuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICNGRkZGRkY2NjsgLyog6K6+572u5bem6L655qGG55qE5a695bqm44CB5qC35byP5ZKM6aKc6ImyICovXHJcbiAgfVxyXG4gIC50ZXh0X2NvbG9yX2NoYW5nZXtcclxuICAgIGZsZXg6IDEgMSBhdXRvO1xyXG4gICAgZGlzcGxheTogZmxleDtcclxuICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcclxuICAgIG92ZXJmbG93LXg6IGF1dG87IC8vIOWFgeiuuOaoquWQkea7muWKqFxyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsgLy8g56Gu5L+d5paH5pys5LiN5Lya5o2i6KGMXHJcbiAgICBoZWlnaHQ6MTAwJTtcclxuICAgIHBhZGRpbmctcmlnaHQ6IHZtKDEwKTtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAmID4gKiB7XHJcbiAgICAgIGZsZXgtc2hyaW5rOiAwOyAvLyDpmLLmraLlrZDlhYPntKDnvKnlsI9cclxuICAgIH1cclxuICAgIC5jb2xvci1pdGVte1xyXG4gICAgICB3aWR0aDogdm0oNDgpO1xyXG4gICAgICBoZWlnaHQ6dm0oNDgpO1xyXG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgICAgIG1hcmdpbjogMCB2bSgxNSk7XHJcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB9XHJcbiAgICAuYmxhY2stYm9yZGVye1xyXG4gICAgICBib3JkZXI6dm0oMikgc29saWQgIzMzMzMzM0ZGXHJcbiAgICB9XHJcbiAgICAuY3VycmVudHtcclxuICAgICAgLy8gYm9yZGVyOiB2bSg2KSBzb2xpZCAjMTY3N0ZGO1xyXG4gICAgICBib3gtc2hhZG93OiAwIDAgMCB2bSg2KSAjMTY3N0ZGO1xyXG4gICAgfVxyXG4gICAgLy8g6ZqQ6JeP5rua5Yqo5p2h77yM5L2G5LuN54S25L+d5oyB5rua5Yqo5Yqf6IO9XHJcbiAgICAmOjotd2Via2l0LXNjcm9sbGJhciB7IFxyXG4gICAgICAgIGRpc3BsYXk6IG5vbmU7IFxyXG4gICAgfVxyXG4gICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyAgLyogSUUgYW5kIEVkZ2UgKi9cclxuICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsgIC8qIEZpcmVmb3ggKi9cclxuICB9XHJcbn0iXX0= */`;\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\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\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, Math.max(0, frame - 3));\r\n\t\t}\r\n\t};\r\n\r\n\tconst hideLoading = () => {\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\tswitchClipDisplay(\"none\");\r\n\t}\r\n\r\n\t// 隐藏新增的clip\r\n\tconst switchClipDisplay = (display: string) => {\r\n\t\tconst clips = document.querySelectorAll(\"[data-editorType],[data-editclip='true']\");\r\n\t\tclips.forEach((clip: any) => {\r\n\t\t\tclip.style.display = display;\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 (!showCanvas) {\r\n\t\t\tswitchClipDisplay(\"block\");\r\n\t\t}\r\n\t}, [showCanvas])\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\t\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\">\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\tisEditorState\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\thideLoading={hideLoading}\r\n\t\t\t\t\t\t\t\teditableArray={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/>\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"]}